[This article was first published on gooroo.io]
I didn’t always know I wanted to be a software developer, and I certainly didn’t know that I was going to end up inspiring and teaching other developers how to be awesome and even better at what they do. I didn’t set out from school with a great vision of taking over the bits and bytes of all your computers, but I have always been interested in computers and technology. In this article I will share some of the top tips I have found over the years that can launch you into a software career.
Education is only half the answer
I started out working in IT with no formal qualifications and with just a notion of what I wanted to do. I chugged along and when an opportunity came along to get more involved in the systems that ran the organisation I was working for, I jumped on it. I didn’t have a clue what I was meant to do, and my employer was very good in teaching me the ropes and holding my hand for the first while. However, it could only last so long and go so far before I realised I needed an education of some sort in order to progress up the development ladder.
What I mistakenly thought was that university would teach me everything I need to know. While formal training is an important part of shaping your career path, it is only the first level of your toolbox. Algorithms, data structures, memory layout and all the other things you learn are important, but any practical knowledge you get at University is most likely destined straight for the mental waste pile. It is not that Universities don’t want to teach you current technology and paradigms, but a curriculum is made a long time in advance and is a lot of work. They are often reused for some time and in that time technology will change.
Language and Technology is Secondary
I hear often that developers want to use a particular language or technology. I am myself deeply engrossed in the Microsoft stack of tools and technology, but that doesn’t mean that I can’t work in Java or Python. The language is not as important as the idea itself. And different languages are great for different applications and end goals. You will have your preferences, but ultimately you need to pick the right tool for the job. You can’t use a hammer to thread a needle (unless you are Jeremy Clarkson) and you can’t build a wall with a screw driver.
The language is something that will come back again and again throughout your career. Some developers are so stuck within their own world, that every problem should be solved with their language of choice, and this is just not true. Technology changes rapidly and new language emerge to cater for new feature, approaches and use cases. As a developer you need to be open to adopt other ways of doing things and adapt to the pace, a pace dictated by the enterprise and consumer, not the software developers.
There are Many Correct Solutions
An easy trap to fall into is to think that you have to find the best and most awesome solution to a problem. As software developers we tend to take great pride in our work and we have this ingrown need to make sure what we create is perfect. The truth is that for any given problem to be solved, the number of acceptable, perfect, great, whatever you want to call it, solutions are infinite. The main goal is to create what the customer wants, not the nirvana of software. To reach that goal in a pragmatic and efficient way is ultimately more important than any amount of polished architecture and refactoring to the nth degree can be.
Don’t take this as an excuse to be sloppy. You need to create the best software you can, but “best” being defined by your delivery and usability and not by your ability to show your latest lambda expressions. It is important to understand that the end user is often not a developer.
Can’t be great without passion
It is easy to make a statement such as “I want to be a software developer”, but as with anything if you want to be great at it, you need to have your heart in it. You can learn all the tricks of the trade and read all the blog posts from your favourite developers, but if you don’t have that passion lit inside you, you will only ever put in just enough to do well. It is not something that can be taught, not something you can “just pick up”.
Being passionate is different for everyone. I authored a Pluralsight course on Building Your First Windows Phone App, and the first part of that was to find an application you are passionate about. You can be passionate about the software approach itself, or you can be passionate about the end goal such as delivering fresh drinking water to third world communities or whatever it might be. There need to be a drive to deliver the absolute best possible and then go one step further.
Find a niche you like
Closely related to having a passion for your work and project, you need to find your niche. No one can be great at everything (unless you are Elon Musk. That guy is even awesome at having children!). As I love math and numbers I initially wanted to be an accountant. Until I actually worked as an accountant. I have realised that Microsoft and the mobile space is what I love, so I have made Windows Platform development my own, focusing especially on the mobile space and recently Internet of Things. I have found my niche, but that doesn’t mean it won’t change. Internet of Things is extremely exciting and I will do much more in this space.
My point is that I am pursuing what I love and what interest me naturally. I can only be my best when I am within my niche.
Fight for the Right Solution
This is a tricky one. I wasn’t sure how to put this in here, as it is probably the hardest acquired skill. Sometimes there will be situations where you will clash with another developer, manager or other professional. That is just life. However, often they will have a different way of doing things, and if you are 100% sure (or near enough) that your approach/fix/solution is better, you will have to fight for it. I am of course not talking old school boxing match, but you will need to get your argument right and present your case of why it should be one way rather than another.
The easy way is to just go with the flow and believe someone else probably know better, and often it can be all but you that are convinced you should be heading in a particular direction. You still need to fight. Just because the majority thinks something is right, doesn’t make it so.
As with anything, you need to be able to consider other approaches and not be pig headed. Of course it isn’t a case of “my way or the highway” and you only get better as a team when all approaches are considered and evaluated.
I have left the most important for last (did you like the suspense?). You have to keep learning. Wise words I was told once that has stuck with me are “if you don’t go forward, you go backwards”. This is so true. There is no equilibrium when it comes to development. The industry moves so quickly that you will never stop learning and picking up new things. And that is so cool, if you ask me! To be a truly great developer you don’t need to learn everything, because that is just silly. No one can do that. It is important, however, to be aware of what is going on in your industry. In fact, this last piece of advice goes for any business, industry or job that you want to be awesome at.
You never stop learning.