A collection of stories, career paths, links and resources that I have collated from colleagues and my own experiences to help those who ask me how to get into programming.
If I could sum up this article series in short it would be: To get into programming:
- There is no one path
- Degrees don't matter
- "Find the fun"
- There's a heck of a lot of resources out there
- The best way to learn programming is to solve problems that you have experienced.
If you want to skip the waffle and just get links to stuff, skip straight to part 3: Resources.
Part 2 contains a description of different career paths: Getting into Coding - Career paths.
Just a heads up, my writing style is very informal, I like to write as if i'm just having a chat.
I'm currently employed as a Lead Frontend Developer at Immersive Labs, It's my 3rd Software engineering role, previously at IBM and IDBS (I only work at companies beginning with I apparently), hopefully some of the information below might be helpful in getting started in the industry. Whilst I work as as Frontend developer right now I get just as much out of writing any piece of code, it all comes down to enjoying problem solving.
By problem solving I also don't mean complex maths problems, that can be part of it if you want it to be, but programming does not mean maths, unless you want it to.
A degree is by no means the only way into programming, and to be honest it's probably not even the best way. I learnt most of my useful skills on the job or self taught, my degree just gave me structure.
What's funny about my degree is, it wasn't part of a big plan, I didn't even really know what Computer Science was, I liked playing games and messing about on a computer. But after a few assignments I got hooked on programming. During the first few months I had no idea what I was doing, when you are learning the low level programming concepts it's hard to imagine how adding numbers together or describing two animals and printing the noises they make to the screen can get you to building complex software, but it can, it's all about building knowledge on-top of existing knowledge.
During my degree when we were learning about web technologies I had a bit of a step up on others because of all the tinkering I'd done when I was younger. This has made me realize that I think the most important thing for being successful in programming is finding something that you enjoy and finding problems to solve that are interesting to you (the you is important i'll get back to this).
In this article series I'll discuss some of the different paths into programming from stories i've collated from colleagues, as well as my own experiences.
Does it matter what language I learn first? No not really, most programming concepts are entirely applicable regardless of the language. In particular the fundamentals. Learning the second language once you have some experience and projects under your belt is easier!
You'll see programming languages be discussed as
low: Typically lends itself to more experienced engineers or those which want to grasp the pure fundamentals of how a piece of software ends up running on a piece of hardware. You have to think a lot more about managing memory allocation.
high: Languages that are more typically taught to beginners to programming, these can massively range too in their ability to expose low level programming concepts.
Low level languages examples: C, Assembly.
Because programmers can never agree on anything you will find that what some people consider a low level language is high level to another.
Languages that sort of sit in the middle: C++, Rust.
Programming languages also can be broadly split into another two camps:
A compiled language requires a compiler than converts the "code that you write" into another format before it can be executed and run.
In an interpreted language source code the developer writes can be executed directly. There is a little more to it as the code still ultimately does get transformed but it happens at runtime "just in time".
Compiled languages: C++, Java, Rust, C#
When getting started for the first time you might find it easier to do some tutorials on Interpreted languages to begin with. However, with the quality of online tutorials out there even with a compiled language it might be a while before you even have to work with a compiler, so just pick something!
Python is one of the most prolific "first time" languages.
But equally Java was my first programming language that I was taught, which is compiled, which was also a good learning experience, but compilers do complicate things a little, potential risk for getting overwhelmed initially.
There is a third way to categorize programming languages
dynamic typing. It is a little too much to go into now, but some examples:
dynamic types. One of the reasons Java can be a great first language is that static types can really help you understand programming fundamentals and help with debugging errors. Doing a mix of both to see the differences relatively early on might be a nice idea.
If you want to understand some context into what you might use a language for in a job check out part 2
If you are keen to dive into links for getting started, remember part 3: Resources is all that!
There are a few things which are more or less universal in programming which gaining an understanding of at some point is a good idea.
You don't have to do this first, in fact I'd probably come back to learning these, once you've cut your teeth on some initial tutorials or projects. But worth a note down at least.
IDE: An IDE (Integrated development environment) is a fancy name for a code editor. I recommend VS Code. Some languages benefit from more specialized tooling though. Many coding education sites will embed IDE's into them so you don't have to download any software to learn.
Version control: Ever lost some work because you deleted it or your hard drive got corrupted? This is why we use version control software to write code. It's also what allows developers to collaborate and review each others code.
Git: Git is an implementation of version control, there is (usually) a
mainbranch of code, and developers checkout their own version into a
branch, make changes and merge their changes back into
main. Git is the defacto standard and the only one worth learning about. Find some tutorials when the time comes!
GitHub: GitHub is a website that hosts Git repositories that contain code. Git without a remote server for hosting the code wouldn't be that useful! Get an account and learn how it works at some point, it's free for most uses.
Programmers can be very opinionated, you will often see takes like "this is the best way to do something", "X is bad", like everything, there are tradeoffs with all things, when you are getting started try not to get too hung up on doing things in one way because someone told you that's is the best way.
Whilst there are best practices, Experiment and try things out. The best way to learn "Best practices" is just through coding more and exposing yourself to different kinds of problems.
Although, if you see code examples where they name variables with a single letter all over the place, this is bad code. Your code should be descriptive, if only so that future you can understand WTF it's doing. Also write code comments for complex things.
Earlier I mentioned finding something interesting to you, this is important I think, not everyone likes the same things, some people love to build games, some like websites, some like servers, some like working with data, some like managing servers and some like making tools to make other developers lives easier. When starting out it might be a good idea to try a few things out.
In general it might be good to:
- Start with programming tutorials
- Work your way up into programming tutorials that build out full projects.
- Build your own projects, it can be something really dumb
- Try out building different types of apps, from command line tools to web apps
- Don't be afraid to abandon projects, that is perfectly fine, I do it all the time. The time spent coding will only make you better for the next thing you work on.
Over the years I've "found the fun" in some unexpected places as I've worked on more problems. For example I really love Testing, of all kinds. Testing is a whole huge discipline within programming, not one to get into now but every programmer eventually will run into it.
If you want a nice intro some example problems that you could learn how to solve check out Automate the Boring Stuff with Python, it'll teach you some Python and give you a feel for programming.
If you go for this it might be an idea to pair that book with some interactive learning on Free Code Camp.
I talked about my degree earlier in the article, there are so many resources out there now that you could quite happily build yourself an extensive self-guided curriculum. It would also have the benefit of being more up to date than many university curriculums.
This sounds like a lot of work but there are many resources out there, i'll link a few in part 3.
In a computer science degree you will general find that modules fall into two camps "theoretical" "practical".
- 'Programming fundamentals' and 'Data structure and algorithms' I'd class as theoretical
- Where as 'Mobile/Web app development' you'd most likely be building out a projects.
- Something like "How does Cloud computing work" might sit somewhere in the middle where you could learn about AWS and how it can make managing infrastructure easier (and harder at the same time).
When learning to code I recommend planning out things to learn that fit into practical vs theoretical and try to introduce yourself to different things and see what you take a liking to. If something isn't working for you, try something else. I will say the first few tutorials might get overwhelming quickly. I remember the summer before uni trying to self-teach myself Java from a book and not really understanding anything. If it's not clicking it equally might be a shit tutorial, find what works for you, books do not work for me.
Sometimes you can hit a wall, just like you might at school, and you can divert your attention to something else instead and loop back around to the thing that is causing you trouble. You will also be flexing different muscles, creating a project from scratch is very different from learning computer science theory or implementing an algorithm.
Try not to take on too much though, it's a fine balance between being overwhelmed and missing out on breadth of knowledge. Branch out once you start to feel like you're not sure what to do next, or you feel you have hit a roadblock in your learning, try something different.
For example; stuck building a website and it's not going well? why not try to build a command line app or a server, its easier than it sounds to get something up a running!
Check out part 3 for some project ideas.
Much like degrees, bootcamps and paid for courses are not a hard requirement, there are many developers that have landed jobs by purely self guided learning. For some people the structure is great, for others not so much.
If you are considering doing a Bootcamp or paid course I would strongly recommend self guided learning first to be sure that you enjoy coding before making an monetary commitments. The resources in part 3 of this series should help with that.
A colleague of mine has an article similar to this one that is a treasure trove of information and insights, whilst some of the technology learnt may not be applicable to everyone the key points made are still very relevant: How I landed a web development role with no formal experience.
Another colleague of mine recently did a fantastic talk on her experiences of getting a job as a programmer, here is a YouTube video of that talk, I highly recommend it!
When it comes to degrees, you can always do one later, many places can offer part time degrees if you feel like that's a route you want to go down once you're in your first few years of working in industry.
There is always more to learn and imposter syndrome is a real thing in tech, at every level, you'll get stuck, but try to find other things to focus on instead, programming is like any skill/art, like learning an instrument, it takes time and a bit of passion.
Next up let's take a look at some different career paths within programming and how those fit together with specific programming languages.