Few people are capable of teaching themselves how to code from scratch. It’s a grueling task that requires focus, curiosity, and a whole lot of patience.
However Steven Foote is proof that teaching yourself to code is indeed possible. Actually not just possible, but potentially revolutionary for your career.
After Steven taught himself programming he eventually found himself hired as a web developer for LinkedIn. During this time he wrote a book titled Learning to Program which has been very highly received.
I had a chance to bounce some questions off Steven regarding his experience as a self-taught programmer – and his answers are more than encouraging.
Q: Can you share a little about yourself & your work history? What got you into programming and why did you stick with it?
I have been doing web development at LinkedIn for nearly 4 years, mostly working on LinkedIn Search. Before LinkedIn I worked as an auditor for EY in San Jose, CA, and I even became a CPA.
I got into programming for my college job at the library. Learning to program is a frustrating process and I was ready to give up several times. Probably the only thing that kept me going was the project I was working on. I was building every aspect of a website for library employees, from database administration to graphic design. I had to learn it all as I went, and everything I learned had a purpose. Eventually I really started to enjoy learning new programming concepts and tools.
Q: What were some of the biggest roadblocks you hit when first teaching yourself how to write code?
Definitely the biggest challenge was trying to learn completely on my own. I remember reading a book about Perl. The book instructed me to write out some code to print “Hello, world!” I didn’t even know where to write the code. I literally tried to write the code using Microsoft Word. It took me a whole day just to figure out where to write the code, then another day trying to figure out how to make it run. And when I finally got it to run I expected a piece of paper with the words “Hello, world!” to come out of the printer.
That whole process would have taken me minutes instead of days if I had had someone there to point me in the right direction.
One other big challenge was that I didn’t understand the big picture of how programming and computers work, so I didn’t understand how all the pieces fit together. I kept making the same mistakes over and over because I didn’t really understand why they were mistakes.
I needed a foundation to build on, but I didn’t know how to get it.
Q: Let’s talk a bit about your book “Learning to Program”. What encouraged you to write it and what goal(s) were you hoping to achieve with its publication?
I’ve come to love programming but it has been a long painful process to get to this point. I wrote “Learning to Program” to be the book I wish I had while I was learning to program.
There has been a lot of excitement lately about learning to code. There are movements like #HourOfCode, websites dedicated to teaching beginners to code like Codecademy, and videos of celebrities and politicians writing their first lines of code. All of this excitement is great but it all seems to gloss over the fact that for most of us, learning to code is really hard.
Writing a single line of code is pretty easy. But understanding why it doesn’t work as you expected is hard. Understanding what makes it run is hard. Understanding how to change it to do something useful is hard. There is a lot to learn and the concepts can be new, difficult, and confusing.
Learning to program is hard but it shouldn’t have to be painful. My goal for “Learning to Program” is to make the journey less painful.
Software developers get this question a lot: “Can you teach me to code?” Knowing how to program does not mean you know how to teach someone to program, even if you are willing. Learning to program is a difficult, emotional, and sometimes isolating journey, and a lot of developers have trouble being understanding when they are trying to teach.
I taught myself to program fairly recently and I remember the frustrating moments of despair. I wrote my book to be as compassionate as possible. One of my goals with “Learning to Program” is for it to be the book that software developers give their friends when their friends ask them “Can you teach me to code?”
Q: From a newbie’s perspective, how does “Learning to Program” teach vital concepts to someone who knows nothing about the field?
One of the biggest struggles of learning to program is that you don’t know what you don’t know, and you don’t know what you should learn next. You can’t search Google for terms that you have never heard of before.
A lot of introductory courses & books only teach how to code and completely ignore the other vital parts of programming. In my experience, coding is one of the easiest parts. Debugging, testing, building, packaging, executing, deploying, memory allocation, source control, and documenting are often much more difficult than writing code. “Learning to Program” covers all of these difficult concepts in plain terms with simple, accessible examples. No Computer Science degree required.
Q: Do you feel it’s better to study one primary skillset(ex: web dev, mobile apps, desktop software) or to study a diverse range of skills/languages?
I believe in focus, but I think your foundation needs to be strong before you dive deep in any one area. Gaining a mastery of your area is very valuable and it doesn’t mean that you will never be able to try anything else.
A lot of the knowledge you gain in one area will easily transfer to another area as well. For example, Mobile App development (e.g. Android and iOS) is very similar in many ways to web development. In both cases you need to handle user events like clicks, taps, and swipes. In both cases you are building user interfaces where things like size, color, and position are important.
Q: If you had to re-teach yourself programming from scratch what would you do differently this time around? What would be the optimal syllabus or curriculum for someone who’s completely untrained in programming?
I would read my book ; )
Seriously though, other than my book I wish I had tried harder to find someone who could show me what I was doing right and what I was doing wrong. The learning process can go so much faster with a good mentor. My learning has accelerated since I joined LinkedIn mostly because of the high quality mentorship I have had there.
I hope my book is the optimal syllabus for someone who is completely new to programming. That was the goal.
Q: What are some of your earliest memories after getting hired at LinkedIn? Was it a difficult transition to get settled into your new role?
LinkedIn has a hack day every month and my first hack day was just a few days after I started. I was invited to join a few other developers on a project. I remember being amazed at how quickly and effectively they worked. I tried my best to contribute, but I felt like an anchor more than a sail.
I also remember attending meetings where I understood almost nothing that was being said. I probably had that deer-in-the-headlights look. Everyone was really nice and supportive and they did their best to get me up to speed.
Q: What’s the LinkedIn development process like and how do development teams work together to complete projects?
I can’t say it much better than the LinkedIn Engineering blog, but I will say that building LinkedIn is a very collaborative process. Designers, engineers, copy writers, product managers, project managers, researchers, and many others work closely on everything we do.
Q: What do you feel web designers & developers could do to work more efficiently and share ideas more clearly?
I think a bit of crossover is helpful.
Designers should learn a bit about programming and developers should learn a bit about the design process. Hopefully that will give us empathy for what the other is dealing with.
Q: In your opinion is it possible for someone to be adeptly skilled at both UI design & development?
I have met a few people who do both really well, so it must be possible.
I do think it’s hard to keep up with the trends in both disciplines. I definitely can’t do it.
Q: Between the choices of working freelance or working at a company like LinkedIn, which would you prefer and why?
Like Hercules, I like going the distance. I ran two half marathons in the past year, and I have ridden several centuries on my bike. I prefer working at LinkedIn because I get to see products past completion into the fine-tuning phase, where you get to turn a good product into a great product.
Q: Can you share any final advice for aspiring developers or programmers who want to dramatically improve at their craft?
Find a programming project that you are passionate about. That usually means fixing your own problem.
Once you have your idea go and build it–don’t let anything stand in your way.
You’ll learn so much as you figure out how to make your project great. And you won’t give up because it’s your project and you’re passionate about it. You have to do a lot of programming to get good at programming, so make sure it’s programming that you enjoy and are passionate about.