Coursera's Data Structures and Algorithms - Algorithmic Toolbox Week 1
Published on 2019-06-07
4 min read
As Charlie Munger has famously said:
“Spend each day trying to be a little wiser than you were when you woke up. Discharge your duties faithfully and well. Systematically you get ahead, but not necessarily in fast spurts. Nevertheless, you build discipline by preparing for fast spurts. Slug it out one inch at a time, day by day. At the end of the day – if you live long enough – most people get what they deserve.”
One must be a life-long learner and acquirer of wisdom by taking just a bit of time each day (most days at least) to grow their knowledge.
When I was looking to make a career and city change - Reflecting on my time in MKE - I realized that it had been quite a while since taking my algorithms class in college. In fact, it had been ~6 years!
Although most of my roles within GE were on the tech side, the big focus on leadership did mean that as far as Software Engineer skills went - web dev didn't always require the need for creating efficient algorithms or using Big O since we weren't using huge data sets. One rotation we did deal with big data, but with Talend, a lot of heavy lifting was taken care of for us.
Now that I have settled down in NYC, except for of exploration on the weekends and summer finally arriving, I've decided on taking new courses on Algorithms to improve as a Software Engineer and Tech Lead! It was time for a refresh.
I'm hoping to carve out time to write each week on the big things, so those who are interested can follow along. This allows me to teach, explain, and help out the web dev community as we all try to keep up with the next big thing!
You can subscribe to my blog via inbox or RSS feeds, so please do so if you're interested :).
With that out of the way, let's dive into week 1!
The first week of the course focused mostly on welcoming you to the course, going through the importance of algorithms, and walking through implementing, testing, and comparing them. I'll summary each below!
The course has video lectures with readings, followed by Programming assignments. You can use a variety of languages for the assignments, where an automatic grader gives you feedback on any failures on submissions. It doesn't always give you specific cases for large inputs but it does let you know you've timed out because the algorithm was too slow.
The videos are kept short with topics separated, so far the longest has been ~10 minutes. Not bad, and as a millennial, I appreciate the short bytes.
Algorithms are part of everything we do on a daily basis these days. From letting Netflix show you trending or matching shows, or Google Assistant giving a weather report every morning, or even the cashier station that's used for your morning coffee and a bagel (said in my NY accent).
There are huge differences in how you can complete different tasks, but for tasks that need to be done quickly - great algorithms are imperative. You can't wait an hour for Netflix to show you the available shows or for the subway to get you to work...well that's a topic for another day.
The point remains though, creating efficient algorithms and solutions to common problems impacts the people using them. Thus, learning to make better ones as a Software Engineer is vitally important to our careers!
The general approach to solving algorithm questions is as follows:
- Define & Understand the problem you're trying to solve
- Developing a Naive Algorithm (aka solving it but not caring about the speed of it yet)
- Test & Debug the Naive Algorithm to make sure it's working
- If necessary - develop an optimized algorithm
- Test & Debug to make sure it's working
- Compare the two algorithms via Big O/Big Theta/Big Omega notations
- Stress Test - one of my new favorite parts of the course!
That's it :). Sounds easy right?
I'll be going into more details of how I solve various programming challenges in the weeks to come because the first week walked through the solution for its first assignment.
The course intro section course instructor - Daniel M Kane - teaches at the Department of Computer Science and Engineering and the Department of Mathematics at the University of California San Diego & National Research University Higher School of Economics. The course itself is taught by professors from the same university. In other words, we're in good hands.
I'm thankful Coursera exists for those wanting to refresh but not take college courses - because this is on my own time, so as life priorities come up, I won't feel too obligated to take care of them first.
Lastly, thanks for reading! I look forward to sharing more from future weeks - even diving into code examples with how I implemented different algorithms.
For now, take care!