Becoming a software engineer isn’t easy. The concepts are abstract, and the tools can be pretty unforgiving.
There’s some evergreen tactics for getting better at it. Here’s a quick rundown of my favorite tools and concepts.
Usually when people talk about data structures and algorithm problems, it’s because they’re preparing for interviews with big companies. Sometimes code schools use versions of them, as well. There’s a reason for it.
Working through these types of problems is building fluency with the nuts and bolts of programming languages. Overtime it just makes everything easier.
2. Consistency Goals
Often times, I feel like the hardest part of a software project that isn’t client work is remembering to work on it. Software projects take a lot of thought, and a lot of time. So the surest way to reduce the stress, finish, and ship code is to be consistent and do a little each day. I recommend setting a strict goal to change 1 line of code on a project per day. It doesn’t sound like much, but it adds up. The real magic is that once you sit down, you’ll typically do a lot more than just change 1 line. But if you start withe goal of making a big dent in a project everyday, it’s likely that after a couple weeks you’ll take a day or two off… and that turns into a week… soon it’s a half year later and you realize that you’ve left behind yet another side project. Sigh.
The moral of that story is work on a project a little every day and have an accountability strategy to do so.
Most of the concepts in computer science are abstract, and they often build on each other. There’s 2 problems with this: there’s a lot of concepts, and abstract stuff is not as easy to remember as concrete stuff.
What to do, then?
Well, big memorization problems require effective memorization solutions. Very few things in programming will make you feel as slick as just remembering a lot of stuff.
Chances are in the process of a day’s programming work, you need to figure out API function calls, algorithms, and keyboard shortcuts that you know you suspect you’ve seen before, but instead of just knowing it, you end up back at the Google search bar perhaps more than necessary. There is definitely some virtue in just KNOWING certain things.
For instance, being able to write a breadth first search, know how quick sort works (you can write the code block quickly, not just in concept), and know all the vim commands just flat out helps. Luckily there’s a reasonable way to do it.
Anki. Anki is a flash card system that has been around for a long time, has a large community, and the interface looks that way. But it’s awesome. It was made for people learning languages originally, and it’s a spaced repetition system. This is based on the principle that we increase the length of time that we remember something by increasing the amount of time between effortful recalls.
The way it works is that you have a set of flash cards, and you go through the first 10 until you remember them that day. Then tomorrow it’s going to ask you to review those 10 cards. For the ones you remember on the first try, it’s going to wait 2 days before reviewing them again. This goes on and on — 2 days, 4 days, 8 days…. 6 months, etc. It’s an efficient way to train your long term memory on specific things without much work.
Now… take that principle and apply it to all the design patterns, implementations of algorithms, all the vim commands, machine learning concepts. It’s very powerful. It means you can trust yourself to study and retain vast volumes of information and recall it when needed. Making this a habit has changed my life as a programmer. Highly suggested.
Anki also has lots of “Shared decks” which means you’re able to look up decks of cards other people have made and load them into your local copy of Anki. They also have a mobile version and the ability to synchronize to their cloud. Great system.