It’s hard for me to believe this, but I’ve been programming for over ten years now. It feels like just yesterday I was sitting in 1st period Computer Science learning C++ back in high school. I remember very little of the actual code from that class and haven’t touched C++ in years, but it set the foundation for the knowledge that came after. Here I’m going to identify some of the things I wish I knew back when I was starting out. I’ll also cite some tools that would have made my journey a lot easier. This cheat sheet would’ve saved me many hours. Hopefully this post will help guide a few new developers down the right path.

Basic Language Concepts

Most of programming can be boiled down to a few basic patterns. If you learn these well, you can do anything with code. Each of these concepts are fundamental to modern programming. If you are comfortable with these topics you can get productive in almost any codebase. Focus on these in the beginning.

  • Variables

  • Types

  • Functions

  • Classes

  • Objects

  • Collections

  • Loops

  • Boolean Logic

Languages Worth Knowing

Any programming language is worth knowing, but there are a few that are more relevant than others. Really though, as long as you settle on learning one, there is no wrong decision when starting out. Don’t get caught up in trying to find the perfect language to learn. There is no perfect language. Luckily, for us programmers, there are a lot of great ones. Here are the four I’d recommend to younger me, learning any of these will open up a world of possibilities.

JavaScript - JavaScript is everywhere. Learn it, use it, and prosper. Maybe don’t pick it up as your first language, it can make learning other languages trickier, but definitely knock it out second.

C# - C# has grown into an amazing language. It’s like Java, but better and evolves quicker.

Java - Java is a nice entry point to the C-style language family. It’s also huge, lucrative, and quite intimidating.

Python - Python has the best syntax of any programming language and it’s very friendly to beginners.

Tools and Subjects That Are Essential

These are the tools that you’ll need to pick up in order to be a productive professional. School might not teach these but by learning them you can separate yourself from the pack.

Text Editor - I prefer to use Visual Studio Code nowadays. There are a lot of other worthy options: VIM, EMACS, Atom, Sublime Text, Notepad++. The best text editor is the one you are productive with.

Source Control - Learn Git. Git is winning source control and using source control will constantly feel like a gift from the gods.

CSS - Know enough CSS to make a respectable design. Inspect the code for styles you like by right-clicking on the control within your browser. Use this code as a starting point to make something similar.

HTML - Knowing a little bit of HTML can be the difference between having a renderable web page and not. Learn enough HTML to be comfortable Googling your way to building a usable web form.

Bootstrap - Anybody can design something passable with the use of Bootstrap these days. Bootstrap gives us the ability to easily create reactive designs that work on all screen sizes.

Testing - Learn a testing framework for the language you choose to learn. Automated testing is a key tool for the professional developer. Tests allow us to prove that the code works as expected, they also make refactoring old code far less stressful.

Problem Solving - Software developers are required to constantly solve problems. Not all problems will be created equal, they can’t all be P = NP, but you’ll have to find solutions. Get better at solving problems by solving problems.

Databases - Databases allow us to store data. Most software needs to talk to some type of data store in order to function correctly. There is great power in writing code that can interact with a database. Knowing how to design and create a database is huge too.

SQL - SQL makes summarizing and analyzing relational data a joy. Combine SQL knowledge with databases and you’re on your way to the DBA chair.

Comfort in Discomfort - The key to getting good at anything is being comfortable with feeling uncomfortable. In software development you are constantly dealing with unknowns. Get comfortable with discomfort and you’ll be able to learn anything and find solutions to any problems that arise.

Books

There are so many books out there to read. I’ve spent countless hours curating a library of books that will bring the best knowledge gained to time invested ratio. The types of books to read depends on your personal goals but any time spent looking at the books below is time well spent. Each of these books contains timeless wisdom, most of which will be as relevant at the beginning of your career as it will be towards the end.

Structure and Interpretation of Computer Programs

Code Complete

Pragmatic Programmer

Code: The Hidden Language of Computer Hardware and Software

Clean Code

The Algorithm Design Manual

Sites to Use

There are three major types of sites developers can use to advance their position:

  1. Web Presence - These are sites that can be used to advertise yourself.
  2. Question and Answer - Sites where you go to get answers, feedback, and test your own answering skills.
  3. Learning - Blogs, documentation websites, online courses, etc.

In order to maximize knowledge and potential, you need to use each type of resource. Not only will it make you a better developer, but they will help push your career forward. Some of the sites fall into multiple categories. That’s a signal that you should concentrate the majority of your online time and energy there.

Site Purpose Type Cost
GitHub Public source code repository. Can be used to contribute to and look at open source projects. Web Presence, Learning Free w/ Paid Features
Medium Blogging platform. Web Presence Free w/ Paid Features
StackOverflow Programming focused question and answer site. Web Presence, Question and Answer, Learning Free
Quora General purpose question and answer application. Very intelligent community. Web Presence, Question and Answer, Learning Free
Codecademy Interactive learning platform. Learning Free w/ Paid Features
Udacity MMOC, college-replacement type platform. Software focused. Learning Free w/ Paid Features
edX MMOC, college-replacement type platform. General focus. Learning Free w/ Paid Features
Coursera MMOC, college-replacement type platform. General focus. Learning Free w/ Paid Features
FreeCodeCamp Interactive learning platform, requires projects and introduces you to open source if you complete it. Learning Free
HackerNews Link aggregation community. This site consistantly has the best the discussions I’ve seen on the web. Intelligent and engaging users. Web Presence, Question and Answer, Learning Free
Pluralsight Like Netflix for technical training. Content is focused on applied concepts rather than academic style training. Learning Subscription

Tips

Always have something you’re actively learning.

Always have a current personal project.

Always have a book you’re reading.

Save everything in OneNote or a similar notation app.

DSSS Method of Learning:

  • Deconstruction
  • Selection
  • Spacing
  • Stakes

Goals

When I was younger I didn’t have a focused goal or set of habits that kept me on the right path. I would read a lot and try to improve, but I learned mostly due to assigned work. If I were to do it over again, I’d have a one goal.

Goal: Make time to know more each day. Build up knowledge every day. Recognize that there is an amazing amount of stuff to learn, but don’t get overwhelmed, just take it one piece at a time.

Assigned work, be it through school or your job, often won’t be enough to sustain continual growth. It’s imperative to take your own initiative to learn the material you want to know. Make a habit of pushing yourself and it’ll pay off. Make sure to do your best at the assigned work, but sprinkle in the some improvement every time you get a chance. Take ownership of your development as a developer.