Two years ago, I didn’t know anything about software development. But I decided to quit my full-time job and dedicate myself to learning. I’ll spare you my reasons for taking the plunge (if you’re interested, here are my thoughts), but for anyone with entrepreneurial aspirations or a desire to work in technology, the arguments for jumping into software are clear. Here are the ten rules I followed to teach myself to code.
My number one piece of advice is: you should learn to program. — Mark Zuckerberg
If you’re intimidated, I was too. If you have no idea where to start, I didn’t either. The bottom line is you can do this. Just stay focused, dedicated, and don’t give up!
1. Pick a language
There are too many languages, platforms, and frameworks to manage. Particularly when you’re just starting. Don’t let this stress you out or slow you down. Ask mentors where they recommend you start. Talk to people who you’d like to work for about which languages they use. The key is to get to it and eliminate distractions. The worst thing would be to spin your wheels trying to keep up with all the possible ways one can tell a computer what to do.
In my opinion, the easiest way to choose is to decide if (1) you’re learning primarily to build prototypes and start business ideas or (2) you have a specific industry or area of focus for furthering your career.
However, if you know you want to build native mobile apps or there’s a specific industry or career opportunity that you’re focused on, then do the research to know which language is most prevalent for that particular area. Developing in iOS requires you learn Objective-C and Android requires you learn Java. Some companies are heavily entrenched in specific languages. If you want to work there, figure out what language they use to engineer their products and learn that.
2. Start with the basics
Awesome, you’ve decided on a language and you’re ready to build the next Twitter. Sorry, it’s not time for that yet. You’ll get there, but first focus on mastering some basics.
This will be frustrating and you’ll constantly be asking yourself if software development could possibly be this boring, but it’s a critical step and where most people throw in the towel. The more comfortable you are with the basic building blocks of your language of choice — things like variables, objects and functions — the better you’ll be and the faster you’ll achieve your goals.
Remember, the point of all this is to actually learn how to code, build things from scratch, or get hired. There are no shortcuts in software development. The sooner you accept this and internalize it, the better.
3. Code every day
This is pretty straight forward. We all get busy and worn out. I totally understand and struggle with this too. But in learning to code, momentum is your friend. The more days in a row you’re reading or writing code, the easier it is to continue reading, writing, and making progress on your code. The reverse is also true to a larger degree. A single day off very easily leads to two days off, then three days, then you’re back to building up the guts to start all over again.
By the way, the rule doesn’t say code for X amount of time every day. Create a rhythm and schedule that makes sense for you. Set aside one day a week to review your notes and take some of the pressure off. The key is, wrap your head around code every day and don’t stop.
4. Read books
There are tons of awesome blog posts, videos, learning platforms, meetups, and classes that will be incredible resources for you. Treat these as supplemental tools and don’t let them distract you too much. Your primary learning resource should be books. Books help you focus on the good stuff. They force you to concentrate and comprehend. When you can’t figure something out, they help you ask the right questions (see rule #5 below).
The monster hiding behind each corner of this adventure is “unnecessary complexity”. Great books are great because the authors have done the hard work of organizing technical concepts into manageable, focused direction. There is no shortage of phenomenal programming books to help you master any topic you may be struggling with. On top of that, they are usually written by the most experienced, knowledgeable programmers on the planet — people who have spent their careers figuring out the best way to do things. Leverage their experience.
Use StackOverflow, YouTube, MeetUp events, and blog posts to “fill-in-the-gaps” in your understanding. Use the Internet to help you answer specific questions or reinforce ideas. The Internet is not the place to make significant progress on big topics or milestones. It’s too chaotic, scattered, and opinionated. There are too many conflicting signals. It sounds old-school, but seriously — read books.
Here are a few that helped me with important topics:
What Every Web Developer Should Know About HTTP
RESTful Web Services
Clean Code: A Handbook of Agile Software Craftsmanship
Node.js In Action
5. Write down your questions
You’re embarking down an inherently windy road, so it’s helpful to leave breadcrumbs along the way. Keep track of where you’ve been and where you’re going with a journal. Take notes. Most importantly, write down all of your questions. This will not only help you keep track of what you’re learning, but it makes it easier for you to get help from friends, colleagues, or people you run into at an event.
I’ve found that people have always been willing to help me, many times sit down and walk me through something in extensive detail, and even pair program with me. This always happened when I took the time to explain what I was struggling with and what my specific questions were. When people see that you care enough to write down your questions, they see that you’re serious about learning and probably remember the time when they struggled understanding the same thing. Most people are willing to help at that point — and it will be invaluable guidance for you at those scary, troll-infested trail heads. This leads us right into the next rule.
6. Find mentors
This is a long adventure. You’ll be happy to know others have made the journey before and many of them will be willing to help you if you just ask.
When you find a mentor and they take time to work with you, make sure they know how much you appreciate it. Follow up with them and show them your progress. Find ways to go out of your way to add value in their lives as well. They will notice your efforts and be much more willing to make introductions and continue to work with you.
As mentioned above, bring your questions to your mentors and show them what concepts you’re struggling with. If they can see how important this is to you, they will be your best resource for filling in the knowledge gaps.
7. Learn the right way
No one knows exactly how to build software. There are all kinds of philosophies and opinions on the “right” way to code. You’ll have to use your books, mentors, and own judgement to sort through all of these theories. The point is you should care about the quality and professionalism of your work. There’s a tendency to “do what works” and develop poor habits, especially if you don’t realize they are bad habits. Fight this tendency at all costs, even if you feel like it’s slowing you down.
The best developers and teams have a strategy and methodology to how they build applications. These strategies and methodologies are designed to minimize complexity and provide a logical structure upon which one can make sense of the chaos that is programming. It sounds like a cliche, but great developers treat programming as an art, not an occupation. Among these people, there are best practices they will expect you to adhere to. If you’re ignorant of this lingo, you won’t be learning things that the best developers do when they sit down to write code. Seems like information you don’t want to miss out on, right?
Take the time to learn and use best practices in everything you build. Understand what it means to write Object Oriented code, get comfortable with identifying and avoiding Code Smells, learn how to refactor each block of code and practice making it clean. It’s actually difficult to explain how much this will pay off for you in the long run.
8. But don’t be afraid to do it wrong
Be smart with rule #7 above. We all need to break things and “do it the wrong way” before we can fully appreciate “the right way”. Hack stuff together at first, make things work, try any solution you think might implement your feature, and don’t ever be afraid to do so. It’s an important step in your learning.
I know #7 and #8 feel like conflicting rules, but they aren’t. In fact, one popular methodology or best practice is summarized with the saying, “red, green, refactor,” which refers to a design strategy called Test-driven development or TDD. In TDD, you write an automated test that defines a new features (red, failing test), then the minimum code to make that test pass (green, working code that’s probably really ugly), and finally refactor your ugly code until it’s clean. Doing it “wrong” is actually built into the development flow, it’s considered completely normal, and it shouldn’t be something you’re afraid of.
9. Stay open-minded
The world of software development is vocal and opinionated. No matter what path you start traveling down, someone is going to tell you it’s a bad one and list a bunch of reasons why you shouldn’t do what you’re doing. Don’t worry about it and try to avoid being dogmatic yourself.
Languages, the tools we have available, and the philosophies on how to build software are constantly changing. If you aren’t open minded about these changes and able to consider new ideas and opinions objectively, you’ll get left behind. Don’t let it hinder progress, but always remember to stay open minded to the changes that are happening in the industry.
10. Build products
At the end of the day, books, code exercises, and mentors only get us so far. We have to put our knowledge to practice. The only way to do this is to start building products. All those cool hacks or ideas you’ve had, start making them. The majority of your daily code should be towards building something. Not sure what to build? Try re-creating existing products or services from scratch.
Start small and pace yourself. My first product was an application that allowed me to push a button on my computer screen and see a message. It didn’t win any innovation awards or make me any money, but it was incredibly empowering to see something I created from scratch actually work. It helped me start putting the pieces together.
I think this last rule is the most important, and all the others extend from it. I like to call this approach “product-driven learning.” The act of struggling to make sometime from nothing will push you forward, keep you motivated and excited, and always drive you in the direction you need to go.
It took me a year to learn enough to build my own products, get hired for exciting freelance projects, and receive job offers. But learning to code was one of the best decisions I’ve ever made.
Good luck. And keep me posted on what your building!
(This was originally posted on my Medium page.)