January 22, 2015
Today, I am a full-time programmer. I love what I do. Programming is fun. It challenges my creativity, attention to detail, self-direction, and logical thinking. Writing code changes how you think.
I entered trade in part because somebody encouraged me to, and I try to bring that spirit into all my professional encounters. If programming interests you, go for it.
In this post, I’ll list the resources and ideas that helped me get started.
Several years in this industry have helped me realize that began my career with several advantages. For instance, I had already been to college and was used to teaching myself new skills.
Whatever your background, I still hope you’ll try programming. The community is more diverse and inclusive than ever before. We still have a long way to go, but every day more organizations come into being with the goal of helping disadvantaged people get a foothold in tech industry. Send me an email if you need help finding them. I’d be glad to help.
Second, no two programming journeys are the same, so for context here’s how mine started. In my late 20’s, with a humanities background and average math/science skills, I decided that I wanted to be a Ruby on Rails web developer. Unlike a kid who wondered how video games worked and started writing low-level code, mine was an intentional path. If you are that kid, ignore my advice, have fun, and enjoy incredible job security for the rest of your life.
Lastly, I started with Ruby, one language in a world of languages. These resources are skewed toward open source web development. If you’re not into that, take heart— there are equivalent tools in all the major languages.
Before long I found that I loved programming. When someone tells me they want to learn to program, I point them to Codecademy. It’s a test; if they don’t come back excited, neither of us has spent a lot of time talking about something they don’t like. If they do come back, awesome; on to more challenging material.
The first book I read about programming was Learn Ruby the Hard Way by Zed Shaw. Zed presents a much harder version of the profession versus Codecademy. For instance, step zero is called ‘The Setup’ and requires finding your terminal, installing Ruby, and downloading a text editor. This alone could prove daunting to a newbie.
Learn Ruby the Hard Way emphasizes the practice of typing code, followed by a line-by-line close reading, and introduces testing. I loved it, and my first real program of any significance was a command-line game as an assignment for the book (still on Github).
If you can get through this book, you are on the path.
I discovered Project Euler because I don’t like math and realized that I would need to develop that skill. Project Euler is an series of progressively harder math problems that can be solved by any program you choose, with one caveat: the program must return the answer in under a minute. In other words, you can’t write a slow, bad program that solves the problem but takes ten minutes and makes your computer hot to the touch.
Start wrapping your mind around what ‘brute force’ programming is and why it’s not ideal as early as you can; it’s a big topic.
Note: this site had a security breach last year, causing the immediate suspension of the social features of the site. This doesn’t stop anyone from solving the problems, however; you just won’t get any badges.
One of my strongest recommendations for beginning programmers is to attend Meetups.
Meetups are free meetings in your area based on interests. Every major programming language has a group in a large city like Chicago. If you don’t have Meetups in your area, start one.
Let me count the benefits:
Meetups are also a gauge of your progress. At first you will feel lost, but as you progress you will understand more and gain better insight from each presentation. I found that encouraging.
In order to get good at writing code, you have to write a lot of it. Every great app is the successor to a long lineage of smaller, not-as-great apps.
Writing bad code is a rite of passage.
Sign up for a Github account and start pushing your code there today. Every day, whatever you write, push it to a public repository, announce it on social media, etc.
Yes, it’s scary publishing your work to the internet for all to see. However, I think it will hold you accountable to keep writing every day, and you’ll be motivated to make your code as good as it can be. Defending your work and learning from constructive criticism is part of being a programmer.
I am aware that not everybody has the free time to publish open source code due to family or work considerations. In earlier versions of this post, I called your Github profile a de facto resume, but I now feel that it should not be mandatory for someone looking for a job, especially experienced people. However, when you’re brand new, you’re going to need to convince somebody that you can write code. Building something and open-sourcing the code is still the easiest way I know to do that.
Railscasts and Confreaks are two of my favorite video sites. Beyond technical skills, programming videos also help you pick up some of the culture of programming. There are also some great podcasts out there. Books are still popular, too.
I’ve kept a list of the resources I’ve found most useful over the years, available here:
I use notebooks, markdown files, this blog, and Today I Learned to capture the firehose if ideas I encounter. Writing things down forces me to reflect on what I’ve learned. Find a note-taking system that works for you.
Text editors are the programmer’s paintbrush. Pick one and stick with it for a while.
New programmers write code very slowly, while professional programmers seem almost too fast to follow. What’s the trick? We have spent a lot of time eliminating inefficiencies in our movements. The first step to achieving this yourself is to commit (at least for a while) to one text editor.
Something I hear a lot is ‘which language should I start with?‘. There’s a perception among newer programmers that the choice of which langauge to learn initially is important, and impactful on your future options.
This isn’t really the case. Yes, every language is different. But when you start, you aren’t learning a ‘language’; you are learning to program, i.e. the process of designing code, typing the symbols, compiling, testing, debugging, refactoring, and deploying. Each one of these actions is the similar in any language.
Use any language (I suggest Ruby) as a tool to learn to program. Later on, you can pick a language or framework that you want to define your career.
Don’t give up! Programming is not easy. It gets easier, sort of. Learn to embrace feeling confused and practice pushing through. It’s worth it.