Another year is here!
There’s this old saying that you supposedly get wiser the older you get.
But as a software developer, I can attest to a seemingly truer saying… every year, I feel I know less and less.
In many other professions, there’s a certain number of core concepts and learnings you must master in order to be successful in your job.
If you’re a cartographer, of course, you must know how to map things on our globe… but in this day and age, are there really any new land masses that we have no idea about? Ok, maybe that one island from “Lost” and maybe the island Gilligan and the rest of the S.S. Minnow crashed onto, all those years ago, but I seriously doubt a cartographer will suddenly discover the hidden land mass of Atlantis anytime soon.
Or if you’re a car mechanic, you must obviously know how a combustible engine works, and all the supporting systems the engine connects to, in order to properly propel a car forward or backward.
But as long as cars have been around in our society, the same core technology really hasn’t changed much over the years. Even the earliest Model-T Fords in the turn of the century had things we still use today… steering wheels, brakes, accelerators, transmissions…
Sure, our cars today have more electronics and computerized components, and we’re now entering the age of hybrids and electric vehicles, but the same basic elements that comprise a car are still around.
But if you work in software development, you’re constantly dealing with technology that is changing at an ever faster pace.
The tools, programming languages and general software methodologies I worked with at the beginning of my software development career in the mid-1990s, are far different than the technologies we’re seeing and using in today’s software development landscape.
Back when I first started out, the internet as we know it today, was barely in the toddler stage of development.
Most software development was thick client-based software that ran on full desktop personal computers.
Many younger software programmers probably never even had to manually install the shrink-wrapped, boxed software you had to travel to an electronics store to purchase!
Internet-based, downloadable software was still a flight of fancy when i first started out, and the days of installing software to a mobile device from an app store was still many years away.
Software deployment was very much a chore when I first began developing software… at my first programming gig, I had to physically travel down to the client machine and manually install it! (Okay, it wasn’t exactly Marco Polo’s journey on the silk road to China, but still!)
And yes, while the internet was around, there wasn’t nearly as much online information and documentation about software development. My primary programming tool, Microsoft Visual Basic, came in this giant shrink-wrapped boxed set of software and paper manual books that was probably big enough to house the Ark of the Covenant.
Yes, documentation was in real tree killing, paper books!
Podcasts, YouTube, StackOverflow, and quickly googling for instant technical answers to thorny computer problems, was still many years away.
Back then, we didn’t have the bountiful variety of programming and scripting languages we have today.
It was still quite a challenge for different software applications and systems to communicate with each other, especially if the applications weren’t written in the same programming language and frameworks. The internet and web services, were still a few years away, so while it was possible to get different systems to communicate with each other, it wasn’t easy and was very prone to errors and maintenance problems.
Having said that, it was a heady time for me. It was an exciting time to be a software developer, as the internet soon rushed onto the technology landscape and all the things that came with it.
I eventually learned about developing web applications, which was the new hotness of software development.
There was so much to learn. Every day was a brand new and exciting learning experience. I was hooked on software development and continue to be grateful I’m still doing it to this day. In software development, you’re never standing still.
There is always some new whizbang technology right around the corner. Back then, it was internet application development. These days, it’s all about augmented reality, machine learning, big data, cloud-based development in AWS and Azure, and tons of other new technologies and concepts.
So I thought it apropos that the New Year usher in a new set of resolutions to help me keep sharp and up to date in the ever-changing technology scene.
2018 Technical New Year’s Resolutions
One big knowledge area I still lack to this day is something I really should have learned much earlier in my professional software career.
Because I never took a formal computer science curriculum in school, most of my software development experience came from on the job work experience and learning along the way.
Of course, many other developers have followed this same route, somehow falling into software development but deciding to stick with it and build a lifelong career from it.
But having missed a formal computer science curriculum in school, I definitely missed out on some critical and core concepts that I never bothered to learn.
Things like data structures and algorithms, which are still the bread and butter of computer science curriculums to this day.
Algorithms are time-tested ways and approaches to solving difficult kinds of computer problems.
For example, what’s the quickest and most efficient way to find a particular number or set of numbers in a big list?
Well, what’s wrong with just starting with the first number of the list, and searching sequentially through each one until you find the right one? Computers are super duper fast, so why does it matter?
It matters a lot, especially when the list of numbers is very big. Computers, as fast as they are today, still take time to process information. If the list of data is big enough, it can take a computer a long time to find the information you are looking for.
Using specific searching algorithms, which are taught in computer science curriculums, helps you to find the data you need in the fastest and most efficient way possible on a computer.
Data structures are ways to assemble data in a particular shape and format that help you get to that data in an efficient manner.
For example, have you ever wondered how Facebook can track all your contacts and let you instantly know just about everything there is to know about them, so quickly?
The data structures that Facebook uses to store data about you and all your Facebook contacts are using classic computer science data structures. By doing so, Facebook is structuring their data in a way that makes it super efficient to search through.
Computer science curriculums continue to teach these important concepts because they are at the heart and foundation of knowledge needed to continue building sophisticated systems and applications.
Want to work at Google or Amazon as a hardcore software engineer? You better learn the core concepts of computer science like data structure and algorithms, inside and out, because that’s exactly what they’ll be testing your level of knowledge for during their technical interview process.
Things like search engines, and building social networks like Facebook, are at their core, using concepts like data structures and algorithms, so they can be built in the most efficient way possible.
But it’s not just because Google and Facebook require these technologies, that I want to learn more about classic computer science concepts.
As a software developer, I really want to understand at a low level, how things work.
These days, a lot of my software development is really about picking the right APIs and libraries from existing frameworks, to use in my custom software applications.
But I’m really doing myself a disservice. I’m using things without really understanding how they are actually implemented.
By understanding at a lower level how things work, it will undoubtedly help me pick the right technical solution for the right problem statement.
I’m not a car mechanic, so when my car breaks down or needs maintenance, guess what? I have to go to my car dealership or car mechanic and pay through the nose to get the car repairs or maintenance I need.
I bet if I had the low-level knowledge car mechanics possessed, I could fix a lot more of my own car troubles myself, and save myself more money in the process.
So I’ve been picking up a lot of books about computer science topics like data structures and algorithms from the bookstore. And I intend to turn off my PlayStation console and spend dedicated time reading through these books for the new year, come hell or high water.
I was recently laid off and I discovered during my first set of job interviews, that I was embarrassingly missing technical questions I should have known about.
It’s easy to forget about technical concepts if you don’t actively use them, so I need to go back to the drawing board and brush up on core concepts like database querying and how relational databases work.
In fact, I really need to brush up on topics and areas of many Microsoft frameworks and APIs, which I’ve used in the past, but have gotten rusty because I don’t use them on a daily basis.
Let’s see, what else?
Oh yes, I want to get better about working in the world of scrum and agile. Most companies and organizations practice some sort of form of agile and scrum these days, and I picked up a few books about how to create better crafted agile stories and delivering software which the product owner wants.
And it’s not just hard technical skills I need to continue developing.
I’ve blogged many times about this in the past, but soft skills are just as important, if perhaps even more, than the technical skills a successful software developer must possess.
Working well in a team environment. Collaboration. Leading from the front.
Believe me, these things matter, otherwise, I wouldn’t constantly see job descriptions that emphasize they’re looking for job candidates who possess these kinds of soft skills.
Let’s see, what else…oh yeah, I keep talking about wanting to get into mobile smartphone and tablet device development, but like the saying goes, talk is cheap.
When I get my new shiny new iPhone and Mac computer, I’ll literally have no more excuses NOT to build a mobile application.
After all, what the world needs is yet another Twitter client app, right??