Tips For Becoming A Software Engineer - My Journey Shared

My personal journey through the land of programming languages
I started coding when I was 12. The first language I picked up was BASIC. Between now and then, several decades have passed. It’s been a long journey. There is no destination. For some of the stops along the way, I hung out for quite a while. Years in fact. C (6 years), C++ (4 years), Java (12 years). Others, were quick stops. Python seems to be where I’m most at home at least for now. That may change.
I’ve learned a lot from each of the stops on the journey. As I look back, I want to share for what it’s worth, my journey for those that are early in career looking to embark on their own journey.
Over the coming weeks (ok, maybe months, perhaps even years), I intend to write about each of the stops on the journey. At least, the parts I can remember.
For those who are beginning their journey, I’d like to share some take-aways for you to consider:
- I have yet to discover a single paradigm to rule them all. Functional, Structured, and Object Oriented remain useful to this day depending on the problem you are looking to solve.
- Similarly, the quest for a general purpose language to rule them all is as yet unresolved. With the rapid advances in AI, perhaps it will be natural language after all (at least for the “fuzzy” problems). Perhaps it will happen sooner than you think.
- When learning a new language, it’s more fun and rewarding if you use it to solve a problem you are facing.
- If you are already proficient in one language, consider re-writing it in another language.
- As you build up a repertoire of languages, use the one that is the best fit for the problem you are trying to solve.
- Learn by doing. You cannot learn tennis by reading a book.
- Be patient with yourself. If you are not finding any joy in the process of writing code and solving problems — perhaps the career of a software engineer is not for you. That’s ok — it’s not for everyone. Your talents lie somewhere else. At least you have tried it out which is better than wondering what if.
- Consider learning at least one functional programming language, one object oriented language, one assembly language and one systems programming language. This will give you a good grounding and enable you to quickly learn new languages. I recommend Haskell (functional), Python [ 1 ] (object oriented), 8086 (assembly language) and C (system programming language). It’s not essential for you to learn assembly language — but if you want to learn something like C, I think learning assembly first will definitely help you understand pointers in C.
- Study imperative vs declarative approaches to programming.
- If you are an absolute beginner, or you want to introduce your child to programming, I recommend a visual programming language such as Scratch from MIT. The syntax of a traditional text-based programming language may be a barrier too high.
- Python is a great place to start if you are looking for your first language to learn (I don’t recommend BASIC — it’s not 1983 anymore). Python is unusual as it is both a great educational language [2] and is very widely used in industry [3] .
- AI assistants, such as GitHub CoPilot are useful but only once you have achieved some proficiency in the language. I would recommend not using them while you are learning a language.
- Be wary of camps and tribes. Software engineers can get very opinionated and passionately defensive of the tools and languages they use. I was one of those. I would proclaim “Java is too slow. It’s Just Another Version of Algol. C++ is far superior” — only for me to wind up switching to Java a year later. Try and rise above the flame-wars and instead focus on solving problems.
- As you progress, be sure to dive into the world of algorithms. For example, consider implementing a sorting algorithm or two. You will discover that the genius of software is not really in the language or the code itself — it is in the algorithm. You will also venture into the adjacent world of data structures as a bonus.
- Take small baby steps. Code a little, test a little, repeat [4]. Get your feedback loops running as fast as possible. When things break, and they will break you will avoid hours of debugging what went wrong.
- As you progress — don’t forget your tests!
- Most of all. Have some fun!
. . .
[1]: — Python is not necessarily considered an object-oriented programming language — it does however support the object-oriented paradigm. It is what is considered a multi-paradigm programming language.
[2]: — Python is used for Stanford’s Code in Place program (of which I am a volunteer).
[3]: — Python is one of the most popular programming languages on the planet.
[4]: — “There are mountains in our way, But we climb a step every day” — lyrics from “Up Where We Belong”, Joe Cocker and Jennifer Warnes