A Non-Engineers Guide to Learning to Code (Sales People, Product Managers, Financial Analysts, Etc…I’m Talking To You).
I get it. You are never going to be a full time developer. Neither am I. But you should still learn to code. It will make you better at what you do. This post is going to share a few of the steps I took over the past 3 years to learn to code (by no means am I a professional developer) and my reasons for doing so which I hope will resonate with other people who work in sales, product, finance, operations, etc . The process can seem really overwhelming. For a beginner, even knowing where to start can be really confusing. While I agree with the endless stream of Quora and StackOverflow posts that say there is no “best” way to learn to code or best language to use, I am going to share a step by step process with specific resources that will take all of the guessing out of getting started.
Lets start with my reasons (you may note that none of these are “become a full time developer”):
- I always strive to be a better Product Manager and part of that is a responsibility to communicate more effectively with engineers and also understand technical trade-offs more clearly.
- I have tons of ideas and like to tinker, so I wanted to develop the ability to build my own MVPs.
- When I am selling a product, I feel a lot more comfortable when I truly understand how it works (it helps me articulate benefits more clearly and also be really specific with how it can help customers).
- If you work for a start-up, even if you have junior level skills, you can still contribute which can free up time for other engineers to work on bigger tasks (making the corporate website, creating landing pages, setting up attribution, writing tests, etc).
How does any of this actually work?
If you are at all like me, you have a hard time taking a leap of faith to just accept things as true. This can be kind of problematic if you are just beginning to learn to code because you will discover there are an endless array of topics and concepts to uncover.
For example, a lot of people will start by learning fundamental coding concepts (if statements, loops, data structures, etc) and will naturally wonder “how in the world does the computer know what this means?” or “alright, I made a calculator program…but I have absolutely no idea how this is possibly gets onto the internet”. These kinds of “structural” questions can make you feel hopeless, but by addressing them head on, not only can you learn to write code and build applications, but also understand how the various elements of a computer and network work together which makes the process a lot more rewarding.
Getting started. Java or C++ intro class.
I would recommend that before you approach anything related to web development or popular web languages, you take an intro class in Java or C++. This will introduce you very explicitly to data types, writing functions, classes, object-oriented-programming, memory and the concept of a compiler. I believe this step is important because it will highlight the difference between statically and dynamically typed languages and when you move on to something like Python or Ruby, you will be more conscious of the role a compiler or interpreter plays, the strengths and weaknesses of certain languages and some of the associated trade-offs.
Learn a web framework.
Because of the fact that I have a hard time taking leaps of faith, my preference is starting out with the Python-Flask combo (as opposed to Python-Django or Ruby on Rails). Python is a really great language and Flask is considered something of a “micro framework” meaning it doesn’t make a lot of decisions for you. This should reduce learning frustration by a lot because there isn’t too much “magic” so you can see clearly what is going on in the code. If you go this route, you should really be able to understand how client-server relationships work, have a general concept of authentication flows (ie oAuth2.0), be able to connect to and query a database, write and document an API and build relatively simple web applications.
I would recommend the Full Stack Developer course from Udacity for this step.
Once you start gaining momentum, I’d suggest trying to explore how a computer actually works at its most basic level. This will give you a greater appreciation and a sense of awe for all of the higher level tools you are using. It also should help satisfy any intellectual impulses to understand what the hell you are doing. A great book to help with this is Code: The Hidden Language of Computer Hardware and Software.
As I mentioned above, there is really no right answer to what languages you should learn (or in what order) so if you’d prefer to learn Angular, Backbone, Vue, etc…I am not trying to stop you. But in the spirit of offering guidance to those wandering through the code desert wondering what to do, I would suggest React. It is what I learned and I really loved it (it also doesn’t hurt that its extremely popular). It has the added benefit of nudging you toward learning Redux and ReactNative along with getting you familiar with ES6 syntax…both of which are helpful, valuable and fun.
Once you build a few React applications you’ll have enough context to understand how using Redux alongside React can really improve development as applications become more complex. The benefits of learning Redux are that it will introduce you to the concept of functional programming, a very useful tool for keeping your code concise and the state of your data consistent and predictable. It will also teach you to manipulate data using various structures (ie React applications play more nicely with arrays than objects, but objects have better methods for storing state). This might be a challenge at first, but if you stick with it, I promise you can figure it out.
And then ReactNative gives you a way to use your new React skills to build iOS and Android apps. This part is really awesome. You won’t need to be a Swift or Java expert…but you will literally be able to build your own iOS apps. So if your friend has an app idea…you can actually build it! Learning ReactNative has the added benefit of teaching you material design and Apple design patterns.
If you follow these steps, I can promise you will learn a ton about software, have a great appreciation for the developers you work with and become better equipped to contribute in the multi-disciplinary working world we live in. Even if you don’t want to become a professional developer, this is still time well spent. Good luck and start coding!