My software development career began about 15 years ago.
But only in about the last 5 years did I really start to see a large boost in my software development career.
There is no “right way” in software development
I wasted a large amount of time, both in studying and arguing, early on in my career, falsely believing there was an absolute “right way” for many aspects of software development.
It turns out that just about everything I once thought was correct about software development at some point turned out to be wrong.
But more importantly, I found that very few things were black and white. Almost every decision when writing code and developing software is based on the current circumstances.
I’ve talked before about how the religious adoption of a technology can be harmful to software developers, but this topic goes beyond just a technology.
It is also true that no best practice is universal. Even highly charged topics like whether or not to unit test or whether agile or waterfall methodologies are best, do not have straightforward one-is-always-right answers.
In my career, I’ve wasted plenty of time on the “right way” road that led to nowhere instead of taking the “pragmatic” (practical) road, which would have carried me much further.
Reading a book cover-to-cover is not the best way to learn
When I first started wanting to grow my knowledge of programming and different technologies, I spent too much time reading technical books about a specific technology cover to cover.
There is nothing wrong with reading books, but often the choice of what book to read and what parts of it to read are very important.
For example, I remember reading a very large book on programming with Visual C++. (I’m pretty sure it was an earlier version of this book.) Anyway, the book was a good book with lots of information, but reading it cover to cover was not the best approach to learning Visual C++.
I would have learned and retained a lot more by skimming over the chapters of the book to get a broad understanding of what there was to know about Visual C++, then figuring out what things were most important to learn first.
I would have had much more success by sitting down and actually practicing the basics by trying to actually build something than just reading or going through examples in the book. You don’t really learn a technology until you’ve solved real problems with it.
There are smart ways to become smart, and then there are dumb ways to become smart. My guide, 10 Steps to Learn Anything Quickly, goes more into depth on this.
Learning particular technologies in-depth is a waste of time
Not only did I waste time by reading books cover to cover, but I also often chose to read the wrong books.
I had mistakenly believed that learning a particular technology inside-out would be a good way to advance my career.
I spent too much time reading books about very specific technologies like ASP.NET or Hibernate instead of reading more books like “Code Complete,” “Clean Code,” and “Agile Principles, Patterns And Practices in C#.” (All of these books, by the way, I recommend that you read, if you haven’t already.)
While it is important to know about the technology you are using, it isn’t important to be an absolute expert in that particular technology. There isn’t much benefit to knowing the exact API call to make when you can just easily look it up when you need it.
Too many technologies that I spent a good amount of time learning about in depth, ended up either dying out or being technologies that I eventually abandoned myself. Most of the knowledge about those specific technologies ended up representing a big waste of time.
I found that it was important to become an expert at whatever programming language that I was using at the time, because expertise in a particular programming language will usually last you a pretty long time; I definitely would have still spent time learning in depth about C++, C# and Java, but, I perhaps, spent a little too much time learning all the intricacies of C++, which isn’t benefiting me much now.
Community is extremely important in your software development career
I was always good about helping my coworkers and being social at the various jobs I held, but I never really reached much beyond my company.
I spent a large amount of time trying to make an investment in my career at a particular company at the expense of making an investment of my time in the software development communities that I was involved in.
I spent lots of time creating internal presentations on technologies or best practices that could have been spent creating content and material that could have served the community as a whole, as well as brought me recognition at my job.
I also made the mistake of not thinking that I had something valuable to contribute.
I talk to many beginning software developers now and sometimes I think they have much more to contribute to the community than us software developers that have been in the field for a long time, because they understand better the issues that other beginners are struggling with.
If I could do it over again, I would have made sure to be much more involved in conferences and user groups earlier in my career. I would have started my blog much earlier and I would have used much of my learning time to create projects and resources that would be able to help others rather than just reading a book.
Creating a blog was a massive boost to my career, but realistically speaking, most blogs fail due to rookie mistakes. Do check out my blogging workbook and course — it'll save yourself the trouble.
Always have a side project
Perhaps the biggest change I would have made that would have impacted my career the most would have been to cut out all the TV watching, Everquest and World of Warcraft playing I did earlier in my life and replace that time with work on a side project.
I’ve wasted a pretty sizable amount of time in my life doing things that were enjoyable, but didn’t produce any long term benefit for my life.
About 3-4 years ago, I pretty much cut out watching TV completely and now I hardly ever watch movies either. TV and most movies are just a huge waste of time that you could be using to do something useful. The same goes for video games for the most part, but at least with video games you are actively doing something not just absorbing useless information.
I’ll always love to play video games and I don’t think I’ll ever stop, but I do wish I would have spent a good deal of the time I spent playing video games and watching TV on a side project instead.
Sadly, the first real side project I actually took on was only about 3 years ago when I started creating my first Android application.
When you are working for someone else, it is really important to spend time working for yourself as well, otherwise you are building someone else’s empire while neglecting your own.
Not only did I learn a huge amount from the side projects I have taken on in the last few years, but I have benefited greatly from them. In fact, one of those side projects, creating Pluralsight courses, is something I am doing pretty much full time now.
Putting everything I learned together
These are just a few of the things that I wish I had known when I first started my software development career, but there are many more and lots of other things that I did do right from the beginning.
I’ve actually put together a follow-up course to this post where I go over 5 more things I wish I'd known when I started my software development career. You can get this course for free—just click the button below:
What about you?
What are some of the things you wish you would have known when you started your software development career? Let me know in the comments below.