I am a software developer. From my experience I can say, that this is one of the best jobs someone can do. It is creative, demanding and extremely rewarding plus it has an awesome community with friendly and intelligent people. When i was entering the work market in my first company i had various assumptions ans misconceptions that i learned in university. Boy i was so wrong about a lot of things. In this post i want to discuss some of them.
You are passionate, hard working and very engaged, sorry that's not enough
First of all let me say this. Passion, hard working attitude and engagement this are awesome personality traits, thanks to them you can be really a great addition to a software team. Unfortunately you can't make a difference based solely only on these traits. You need to link them with other important skills like teamwork and communication. If you want to make a difference and be a crucial part of the team, then simple creation of endless lines of code won't do it. First you need to sell your brilliant ideas to the team and decision makers. Even if you have some awesome ideas you need to convince others that they are awesome. You need to advertise your perception and passion. In the workplace, it is not like that that everyone wants to work as best as possible. People have their own attitudes and approaches, someone only cares about politics and his career advancement other wants to develop himself. You need to know how to convince different parties. If you want to survive you will have to learn complex political environment in your organization. Don't become an idealistic person who thinks that hard working attitude will solve everything.
It's not rocket science ... a lot of the time
At university i was doing a lot of awesome stuff. Cool algorithms, fun games, low level programming. In most of the jobs you won't find such a "cool" stuff. Sure, there are startups with nice ideas but a there is a big possibility that you will end up maintaining and developing CRUD applications. It might look like this applications are only sending and transforming data from one place to another, but you will get used to this. There are boring tasks but from time to time you will stumble upon a real gem. Job becomes more interesting as you mature up and take more senior responsibilities. Remember that if you are ambitious and you want to learn you have to fight for this, you have to convince your boss that giving you something new to do, will not only benefit you, but also your company in the long run. Look for companies that understand this and wants to develop their workforce. Avoid places that only want to exploit you. It is best to work under a passionate team leader who thinks about his team and people. Who understands that people won't leave a company when they are happy.
But I am a engineer I don't want to communicate...
I think that the hardest part of the job is the client and teamwork. Human interactions are not so simple like 0, 1 deterministic logic. I know that it sucks, we are considered to be mostly introverts that like to sit alone. There is even this old stereotype with programmer sitting in the basement. This perception has changed, we are considered now almost like rock-stars. Today apart from the technical skills you need to be an awesome communicator, negotiator and team player. In a normal workplace you will work in a team, solo ? no way. Unfortunately working together generates a lot of friction and problems. People have different needs, characters and approaches to the work. It can be really hard. Good team player know how to use those differences for the good of the team, he knows how to approach other people, how to talk to them, how to criticize, how to praise. You can consider these skills as purely managerial stuff. You can even say that you don't need them, but please trust me. You won't go far without them. These skills are needed to advance your career and to create a successful track of projects, which is the best measurement of your abilities.
Whenever you feel like you know a lot ... you are wrong
Technology is changing too fast. Software developer needs to sacrifice a lot of time to refresh and gain new knowledge. This can be quite difficult. I am always surprised when I learn something only to discover that there is a new world of possibilities waiting for me to explore. Every time I think I know a lot there is always something new waiting for me just as reminder of how little I know. If you like to learn, you won't be disappointed in this line of job. One of the realization a young developer has to make is to accept the idea that you can't know everything. We have to prioritize a lot and make strategies about our time investment. It is just like diversify investment of your money. You can learn easy stuff that can get you a little but certain return, but we also have to take a risk and learn something new and trendy. This thing can be dead next year but if you want to stay on top and hopefully become an expert in the future, then you have to do this.Tweet