John Sonmez is a Pluralsight author of over 25 courses spanning a wide range of topics from mobile development to IoC containers. He is a frequent guest on podcasts such as DotNetRocks and Hanselminutes. John has created applications for iOS, Android and Windows Phone 7 using native tools, HTML5, and just about every cross platform solution available today. He has a passion for Agile development and is engaged in a personal crusade to make the complex simple. John is a DZone MVB and is not an employee of DZone and has posted 86 posts at DZone. You can read more from them at their website. View Full User Profile

4 Things I Wish I Would Have Known When I Started My Software Development Career

08.21.2013
| 52721 views |
  • submit to reddit

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.

Here are some of the things I wish I would have known when I got started in the software development industry; things that would have made me more successful, much earlier, if I would have known them.

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.

reading book thumb 4 Things I Wish I Would Have Known When I Started My Software Development Career

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.

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

Early in my career, I made the mistake of not really reaching out to the community for help and to provide help to others.community thumb 4 Things I Wish I Would Have Known When I Started My 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.

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’m actually working on a top secret project to put all this information together to help developers boost their career and learn to market themselves.

If you want to be the first to be notified when this project gets officially launched, sign up here, and I’ll be sure to let you know.

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.

Published at DZone with permission of John Sonmez, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Guru K replied on Thu, 2013/08/22 - 2:07am

I agree with you - Technologies change/die but skills don’t!

So we need to spend equal/more time on improving our skills as well




Armando Alejandro replied on Thu, 2013/08/22 - 9:04am

I started my career 18 yrs ago and I made all the same mistakes you did...

Niall Finlay replied on Fri, 2013/08/23 - 4:11pm

I agree with almost everything you wrote and especially with your book choices.

I don't agree that downtime isn't essential though. TV can seem like wasted time but I think it's really just the proportion of our time that we commit to leisure that could become a problem.

There is a saying, "all work and no play makes Jack a dull boy".

Andreas Haufler replied on Mon, 2013/08/26 - 1:37am in response to: Niall Finlay

 Niall,

working on a side project accounts for "play" ;-) To be serious, I agree with you, everyone needs her or his time off...

Mohammed Hewedy replied on Tue, 2013/08/27 - 1:09am

Very good article, Thank you.

Bryan Copeland replied on Wed, 2013/08/28 - 7:54am

Would be nice if it was easier as a new developer to meet like-minded people with similar interests that could help you take a dream side-project and build an actual production version and community around it, rather than have everyone constantly just tinkering and building little prototypes that scratch the surface of what they'd like to do which seems to be the norm now. Only the lucky, wealthy or well-connected seem to be able to get there (with a few notable exceptions of course where the lone-wolf tirelessly dedicated developer or cowboy-coder takes their dream to fruition and builds a thriving community and/or company out of their tinkering).

Sure, there's no shortage of open source projects out there to contribute to or communities to interact with, but which ones should you focus your time and energy on based on your current skill-level and experience?  What role(s) can help you grow as a professional and enhance your career path helping you reach your goals?

The open source community as a whole could do a much better job at both making itself more accessible to new developers and structuring itself such that beginners and intermediate developers can contribute where their unique skills (and sometimes just plain manpower) can be of most use.

Something akin to a running job board of available positions in all the major open source communities and specific skills needed would be great.

Also, StackOverflow is a step in the right direction where more experience programmers/analysts can help junior developers, but even there sometimes what goes on is more akin to bickering and chest-thumping rather than mentoring, which is what we really need to take a skillset to the next level.

Similarly, publicly hosted versioning systems like GitHub, BitBucket and Sourceforge are another step in the right direction, but there's is virtually no curation of projects (except by programming language or type, if you're lucky) nor is there any prioritization of projects and their needs in terms of lining up roadmaps to roles (and clear guides on getting started to be able to contribute meaningful changes other than typo or minor fixes back). This is something that is sorely missing in the developer community in my opinion.

Thamizh Thomas replied on Wed, 2013/08/28 - 11:32am

Thanks a lot for making me aware of what I should do and shouldn't. 

I am really in the same boat. Henceforth I shall apply the ideas I acquire

Matt Baluyos replied on Wed, 2013/08/28 - 1:51pm

Now on my 9th year as an IT professional. Great insights here coming from the people who have been there.

David Castro replied on Wed, 2013/08/28 - 6:17pm

I totally agree with the giving-up-TV thing. I realized after playing WoW a few hours a weekend that I enjoyed working on software projects as much as I did playing WoW, but that with software projects, I had something to show for my time other than leisure. 

My wife is in college to become a software developer, so it is not just me who will benefit from this article.

I read the first part of the first Code Complete book a long, long time ago, and agree it has really good stuff, all backed up by research that is called out throughout the document. It's up there with books like The Mythical Man Month on the gotta-read list. (The latter is still on my list.)

Thanks for sharing your perspective; I look forward to seeing what others post in your comments, too.

Dee Siegal replied on Thu, 2013/08/29 - 7:23pm

If you believe that spending too much time reading books cover to cover and learning specific technologies in depth has hindered your career, then who am I to say otherwise? But as general advice? I guess I take issue with that. Sure, everything in moderation. But I'm generally seeing the opposite problem. All too often, developers are thrown into production codebases with no formal training and the belief that they'll pick up the technologies as needed. But until that understanding materializes (if it ever does), it leads to a lot of half-understood, trial and error coding, which can be rather smelly. Investing the time to get a deeper understanding pays off dividends several fold in code quality. 

Now, will that necessarily advance your career? I guess it depends how closely your bosses look at code and track bugs. But it's not all about career advancement, is it? It's also about being good at what you do. And if that's, say, Hibernate, then heck yeah, read a book on Hibernate. I did, and I'm grateful for it. And I can say with certainty, the understanding the book afforded me just just got me through an interview in which my interviewers obviously thought a deep understanding of Hibernate was critical. (I start next week).  ;-)

Lalaka Jeerasinghe replied on Thu, 2013/08/29 - 1:39am

 Very helpful article. Reflects many personal memories as well.

I totally agree with your point on reading technology specific books. If you want to master a technology you have to use it, instead of bogging down on 500+pg text book.

Practice Makes Perfect! they say :)

Devendra Tiwari replied on Thu, 2013/08/29 - 4:58am

I'm doing almost all the mistakes that you've pointed out in your article here. I'm glad you shared it with the world, appreciate your time and effort.

I'll rethink on my strartegies and would try to distant myself from these bad habbits (which is hard to leave because of the reliance, over several past years).

Many Thanks :)!


 

Ravibabu Vanamala replied on Thu, 2013/08/29 - 3:13pm

This is an astoundingly true article. This is kinda consternation to introspect & rejuvenate oneself to be more competitive in this rapid changing rhythmic world.!!!

Thanks a ton for sharing.!!!

 

Aadhar Sharma replied on Sat, 2013/08/31 - 6:46am

 I am lucky still with 8 years of experience and was following exactly what I was not supposed to.

Thanks to this wonderful article.

Viorel Smeu replied on Tue, 2013/09/03 - 4:31am

Hey John really good article, thanks for it. I have one question for you and the other guys reading here : what kind of side project would you suggest to a begginer programmer ? I have this idea that you explained in the article of working for myself but i don;t know where to start with a side project so a few pointers will be appreciated :D. 


Thanks guys, all the best from Romania

John Sonmez replied on Tue, 2013/09/03 - 10:10pm in response to: Viorel Smeu

Great question.  I think the best side-project is one that has the potential of generating some income, because then you are improving your skills and building an asset for yourself.

I usually recommend creating an Android application or other mobile application since it is a good intersection of being a small project, possibly profitable, and in high demands skills.

Karan Krishnani replied on Thu, 2013/09/05 - 10:09am

 I think this is a very good article. It's really insightful to see what software developers with several years of experience think would be a better path for their past selves. I strongly agree with the points namely (in order of agreement):

1. Always have a side project

Learning new concepts without applying them allows these concepts to escape sooner than they should. Besides, working on your side projects allows you to create a portfolio to show companies that will potentially hire you and aid in your career advancement. This might also become a full time project for you or open up consulting opportunities.

2. Being involved in the community

I have been going to meetups, attending conferences and "hacker hours" lately and I totally agree that osmosis is a great way to learn new concepts and stay updated about trends in technology. This also allows you to build a network which can help you in countless ways like getting a job, finding a partner for your next project, stimulating ideas, etc.

3. Learning particular technologies in-depth

Sort of agree with this one, but it depends. Generally, I feel like it’s beneficial to learn the fundamentals about a new technology, enough to get you going on a project. After that point, keep referring back to a book for gaining the in-depth knowledge (if need be). Let experience be your teacher. So to summarize, I feel like learning technologies in-depth is beneficial, but the approach should not be studying from a book, but learning on the job (once you have studied the fundamentals and best practices).

As for the last point made, about reading books cover to cover, I feel like this is necessary many a time, because we do not learn all the technologies used in companies at a university and need to train ourselves on enterprise technologies before we can contribute to these environments. So maybe it would be right to emphasize that reading of books is essential to learning technologies, but maybe you don’t have to read from end to end before you can start to build something useful and correct.

Viorel Smeu replied on Mon, 2013/09/30 - 7:36am in response to: John Sonmez

Thanks for your reply. I will keep that in mind when i'll start side projects.

Lakshminarayana... replied on Tue, 2013/10/15 - 2:22am

Wow...awesome post! It would really trigger great thoughts to the readers like me! (y)

I88 Li replied on Thu, 2013/11/21 - 3:26pm in response to: Niall Finlay

Agree, or else everyone who is in the software development industry should not watch TV or movies any more?

Akinwale Tachyo... replied on Sun, 2013/12/22 - 7:30pm

John is right about some points but I think if you haven't got to where you are going yet, some mistakes are unavoidable. And if he has made those mistakes and can reflect on them this way, I think it will be experiential to make them too. They are tacit information that we need, and nobody can pass them down.

Raj Kumar replied on Tue, 2014/02/18 - 7:25am

Nice post and good guidelines for starters

Thx

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.