In this final part of the series, I will provide an overview of the primary books and courses I have used to build my skills as a developer coming from a non-traditional educational background, and suggest some ways to find people to learn with.
Suggestions for study materials
“A Google search for ‘programming course’ yields about 1.540.000.000 results”
When starting out as a software developer, information overload is a serious risk. As of writing this article, a Google search for “programming course” yields about 1.540.000.000 results. Rather than struggling to find information, the task is to limit yourself and select some good courses to make your way through. The resources listed below have formed the core of my route to learning software development, and apart from the bootcamp from Noroff Accelerate, they are freely available online or at the library. I have listed them vaguely in the order I would suggest approaching them in.
Automate the boring stuff with Python Programming
Format: recorded videos and/or text-based website, with exercises.
An excellent introduction to programming. This was the first programming resource I worked my way through, and I liked the balance between fundamental terminology and practical application to familiar topics like emails, automating mouse clicks, and file management. The video course is often on sale on Udemy or similar websites, and the text version on the website is free.
Link: https://automatetheboringstuff.com/
MIT: The missing semester of your computer science degree
Format: recorded videos and exercise suggestions.
This is a series of short lectures on programming tools, debugging, computer security, and more. I found it at a time when I already knew something about many of the topics, so I recommend taking it quite early for its presentation of various useful tools and concepts. One approach is to pick out specific lectures about things that you want to know more about, such as scripting and version control.
Link: https://missing.csail.mit.edu/
Henrik Bærbak Christensen – Flexible, Reliable Software (2010)
Format: book with exercises and two major projects at the end.
A great book which gives a clear introduction to essential topics beyond the basics of coding – design patterns, dependency injection, test-driven development, and more. It includes core chapters with small exercises that combine into a larger system, a catalogue of design patterns, as well as two final assignments to sum up the lessons of the book. You are required to be your own examinator, but the book provides detailed descriptions of what your program should be able to accomplish at each stage. The low-level approach to topics like package management explored here also helps appreciate the aid that newer IDEs offer.
Link: info here https://www.baerbak.com/
Harvard University: CS50 – Introduction to computer science
Format: recorded or live online lectures, with automatically graded problem sets.
This course is both an introduction to programming and to the field of computer science, including some of the basics of how computers work. It is a well-structured course with nice exercises, but I recommend having some programming experience before starting. The course is taught to students at Harvard who have access to study groups and teaching assistants, and if you are on your own, the combination of programming fundamentals and computer science can be overwhelming. It took a few attempts before I pushed my way through this course, but I found both the theoretical layer and the introduction to C as an older programming language very interesting.
Link: https://cs50.harvard.edu/x/2023/
Mark Seemann – Code that fits in your head (2021)
Format: book.
Excellent book describing what the author finds to be often missed but important topics within the field. Includes chapters on managing complexity, continuous integration, teamwork practices, and more. I appreciated the hands-on approach, where each chapter adds a new layer to the example project of a restaurant reservation system. This book is included in the craftsmanship program at Strongminds, and my colleague Rasmus Mikkelstrup has written an article series that I recommend reading for more detailed reflections on it.
Link: https://www.oreilly.com/library/view/code-that-fits/9780137464302/
Princeton University: Algorithms I + II
Format: recorded lectures with automatically graded problem sets.
A tough but exciting course about fundamental algorithms and data structures and a bit of the theory behind them. The autograder on the assignments is thorough and strict, which pushes you to optimize your algorithms. Luckily, there is a semi-active course forum for discussing the assignments. This is not a beginner’s course, but I highly recommend it to people who have built a basic understanding of programming, design principles, and software development tools, and are looking for new challenges. The range of exercise topics does a good job of illustrating what can be done with well-crafted algorithms.
Link (part 1/2): https://www.coursera.org/learn/algorithms-part1
Noroff Accelerate: Frontend Javascript + Backend Java Bootcamps
Format: live lectures, weekly pair assignments, and a month-long group project.
Good hands-on introduction to the current state of web development. As a full-time bootcamp, this is a costly course, and I was lucky to have it financed by my prior job at Experis. You should know some programming before starting this course, as the lectures quickly skip past the basics and into topics like the pros and cons of different frontend frameworks, or how to apply object-oriented principles to the specific context of a REST API. The final project of creating a full-stack application with a group of other participants was a very nice experience as well, and one that can otherwise be hard to come by outside of IT educations.
Link: https://www.noroff.no/en/
Talk to people!
Perhaps the most important piece of advice that I can give new developers, especially ones without a formal educational environment to learn in, is to find somebody to talk to about software. In Aarhus, I found CoCoders working to open up software development to people who do not consider themselves (stereo)typical programmers. Tech City Aarhus hosts similar events, and I suspect that many cities will have these kinds of organizations. Finding places to talk to people about the field has been very useful to me and helped direct my search for both study resources and job opportunities.
Along the way, I was lucky to meet some very kind people who would answer my questions about all sorts of things. In my experience, most people are eager to help if you just ask, and they can be found anywhere – apart from dedicated IT events, your roommates, family, LinkedIn, and your karate club are all reasonable places to go looking. Finding my way as a software developer would have been impossible without these conversations, and with this article, I hope to pass on some of that help to others. If you have any questions or would like more specific advice, feel free to reach out to me on LinkedIn or at nan@strongminds.dk.
Citations
Farley, David – Modern Software Engineering (2022, Addison-Wesley)
Seemann, Mark – Code that fits in your Head (2021, Addison-Wesley)