Learning to Program as a Career Change
- 7 minutes read - 1316 wordsA few years ago, I wrote my first computer program. Today, I am a full-time programmer. In this post, I’ll list the resources and ideas that helped me get started.
Disclaimers
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.
Codecademy
I started with the website Codecademy. Codecademy is a free in-browser code school with simple, fun courses in JavaScript, JQuery, Ruby, and Python. It was recommended to me as a starting point, and it serves that purpose well.
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.
I completed the Codecademy JavaScript, Ruby, HTML/CSS, and JQuery tracks in a few weeks, and started looking for the next challenge.
Learn Ruby the Hard Way
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.
Project Euler
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. Although people certainly do!
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.
Meetups
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.
My first Meetup group was LA Ruby, and I continue with ChicagoRuby. In the meantime I’ve attended dozens of other events, on topics such as Vim (Vim Chi), Go, HTML, JavaScript, Dev Ops, and technical culture.
Let me count the benefits:
- Culture: Meetups let you hang around other programmers and observe how they act. This is crucial because there is much jargon, history, and politics in programming.
- Learning: Meetups expose you to current ideas in your field. Many Meetup presentations are speakers testing future (not free) conference presentations.
- Networking: Meetups are where lots of programmers spend their evenings, if you happen to be looking for a job.
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.
Github 📦
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.
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.
Other Media
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:
https://github.com/jwworth/resources
Take Notes
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.
Pick a Text Editor
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.
Pick a Language
Something I hear a lot is ‘which language should I start with?’ There’s a perception among newer programmers that the choice of which language to learn initially is important and impactful.
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 popular language as a tool to learn to program. Later on, you can pick a language or framework that you want to define your career.
Final Thoughts
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.
Code on!