When I first started learning to program, one thing irked me above all: the amount of goddamn time it seemed to take me to get the smallest thing to work.
I dreaded each hands-on assignment at first — not because I didn’t enjoy coding, but because I knew that it would take me twice as long as I’d wanted, and that I’d spend at least 60% of the time looking at a screen full of errors.
In cases like these, it’s easy to get discouraged or think that you’re not smart enough for whatever task you set out to accomplish. Oftentimes, though, it isn’t a lack of intelligence but rather a lack of foundational knowledge that causes you to seem “slower” than others at picking up a new concept or skill.
When I first started studying algorithms, I had an incredibly hard time because of two things.
One, I didn’t have a very strong mathematical foundation, and would struggle to understand the reasoning behind certain algorithms. Two, I was just plain bored. “Implement insertion sort and time your algorithm input on arrays of size 10,000…” Ugh! I approached my assignments with the same sort of dread that one normally reserved for seeing disagreeable relatives during the holidays: Yeah, sure, I’ll bang out this code as quickly as possible and retreat to my room to watch Rick and Morty the first chance I get.
Because I had such an approach, it was painful to study algorithms. Even worse, the knowledge didn’t stick. I couldn’t remember a damn thing after I’d handed in an assignment. Insertion sort? How was that different from Merge Sort, or Selection Sort, or, God forbid, BogoSort?
I know what you’re thinking –“Big-O Time Complexity” sounds like the punchline of some nerdy that’s-what-she-said joke.
(I’m That Kid who snickered loudly at the term “Big-O notation” when it was first introduced sophomore year, so I won’t judge if you do the same.)
Big-O is actually one way to measure the amount of resources needed for an algorithm to run (also known as an algorithm’s complexity). “Resources” usually refers to time or space in memory. For simplicity’s sake, I’m going to be writing about time complexity only, so for the duration of this post, you can think of Big-O as a way to measure the amount of time an algorithm needs to run, depending on the size of its input.
If this all sounds hella confusing but also slightly interesting, good! Keep reading. Information sticks way better when you’re curious.
tl;dr this was the best career and life decision I have ever made.
Disclaimer: This is not a sponsored review. I was not contacted by Big Nerd Ranch to do any sort of endorsement; all opinions expressed are my own.
That’s not an exaggeration. If you’re determined to be an iOS dev and want to learn both the fundamentals of Swift as language and how to intelligently design iOS applications in the shortest amount of time possible, then Big Nerd Ranch’s iOS Essentials with Swift bootcamp is the program for you.
Between Wednesday Sips and weekend brunch and countless escapades through the city this summer, I began my career in software engineering.
I got to attend daily stand-ups and work on tickets for the Urban Outfitters and Anthropologie iOS apps with the other engineers, and had an opportunity to lead a three-intern team in developing Snap & Match as part of my intern project. This internship made me learn a lot about good software engineering habits, both technical and non-technical. Here are some of the big ones.
I recently discovered a pattern for how I learn and absorb information from the world.
Whenever I’m picking something up for the first time, be it a programming language, new song lyrics, or a different route to drive to work, I never memorize or “get” the whole thing at once. One small thing sticks, and everything else builds around it.