Continuous Improvement of the Mind
Over the past few years, I’ve been increasing my capabilities in the software engineering and leadership spaces. Truth is, I’m really a big fan of agile software development, and get a kick out of working with high performing teams towards a common objective.
My challenge has historically been that I haven’t always been in roles which align towards the software engineering space, and so I needed to determine alternative ways in which I could gain relevant capabilities and experience, at a minimal cost.
I started my career in the infrastructure and operations spaces, and really got to understand how things work on the systems side of the IT industry. I delved into compute, operating systems, storage, networks, etc. and my career naturally evolved towards cloud platforms.
Cloud platforms gave me my first real experience with interfacing directly with APIs, and that was a real kick. I was no longer relying on a faceless software developer on the other-end of an open-source project, on the other side of the world to develop my tools for me. For the first time, I wasn’t only a consumer, but a contributor! This feeling was good, and I decided that I really want to use my newfound superpowers make the world a better place, through software.
Unfortunately, aspirations themselves aren’t enough. This was something which I wanted to do, so got down to thinking about the traditional ways in which developers break into that field. I decided that the most common way is through a Computer Science degree. I also determined that I simply don’t have the time to go through a degree in addition to my day-to-day responsibilities.
I thought about it a little bit more, and we’re in the age of information. There is no reason why I need to be dependant on someone else to formally teach me something, or hold me accountable. I took ownership of my ambitions, and decided to purchase some reputable books which aligned to my interests and goals.
I’ve listed some of the books which I’ve found to be really useful to gain a broader knowledge of practices in the industry below:
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
This book was a real eye-opener. Coming from an infrastructure background, deploying resources by hand into environments, this book showed me some really core software delivery principles which are now industry standards, and completely applicable to infrastructure, also. Definitely a must-read for anyone engineering in IT in 2019 (across both software and infrastructure).
Clean Code: A Handbook of Agile Software Craftsmanship
Clean Code is another one of those books which are really applicable for both software and infrastructure engineers to read. Occasionally I’ll see teams falling into pitfalls of poorly structured code, which ends up preventing contributors from moving forward, for fear of the unknown consequences of a seemingly benign change. While the core language which this book references is Java, the principles are fairly portable to many other languages.
The Go Programming Language
Historically, I had spent most of my time learning development through practical experience, so this was actually the first programming language book which I read from cover-to-cover. It’s been a while since reading this, but it introduced me to a lot of practices which I’d previously been unfamiliar with. In general, it’s a great book to get you up to speed with implementations specific to Go, and it’s really well written, with good examples.
Domain-Driven Design: Tackling Complexity in the Heart of Software
Surprisingly, to me, there was actually very little specifically about programming withing this book (I went in not actually knowing much about DDD). This book is really good for learning how to collaborate across both business and technology teams to achieve a common outcome. Really brought some things to the surface and explicitly defined a lot of things which really should be common sense. Definitely a must-read for anyone working across business and technology teams.
Java: A Beginner’s Guide, Seventh Edition
I picked up this book because I wanted to gain more historical context around what is arguably one of the most mature and widely-used languages across the IT industry. While this is titled “A Beginner’s Guide”, It can act as a great reference for concepts applicable to Java. The book also provides some great insight around general programming concepts which a less experienced programmer might not be familiar with. A dry read to go through from end-to-end, but really a good source to cover many common programming constructs in one palce.
I’ve found through reading such varied material, the subject matter will often compliment each other. This has provided me with a greater understanding of “new” concepts and practices which I can contribute to environments which I’m working in every day.
While my primary source of study has been books, there are also many YouTube channels, online courses, blog posts, and other resources available out there to study. Even Twitter feeds will provide you with nuggets of information which may provoke you to explore a topic further (I’ve done this many times before.)
There is always more to learn, and always will be, but by taking ownership of my interests, I’ve now built a solid foundation upon which my knowledge can continue to grow. There is such a wealth of information out there targeting almost any subject matter. While my specific areas of interest may not align with yours, I strongly encourage you to think about what interests you, and explore that field more deeply. I promise that you will find the return on investment to be invaluable.