Recently I gave a talk at the same university where I graduated eight years ago. It was nice and funny to see the reactions and the behavior of Computer Science students in the third semester. I’ve been there, of course, and it got me thinking what I learned since then working full time as a software developer.
If you rather want to watch a video, you can check out the takeaways here:
Many graduates and even experienced engineers struggle with confidence in what they do for a living. We all know imposter syndrome, for instance. But trust me, if you’re passionate about software development, love to write code and are always eager to learn more, you already know a lot and you deserve your spot.
Software development is a field where you get a lot better with intrinsic motivation - as with every other profession, I guess. If your motivation comes from writing code alone, you have nothing to worry about. Because of your interest in programming languages, frameworks, and new technologies, you already have a huge advantage over others.
Hopefully, as a graduate, you still have this motivation. Hold tight to that. Chances are you land your first job and all of a sudden you work faster than experienced developers. Maybe they even want you to slow down. And it’s almost sure that after suggesting changes or improvements you will hear the phrase “we always did it like that”. Ooh, that hurts. But please, don’t let your head down. Stay curious. Stay hungry. Get experience, and if you’re not getting along with the culture of the company you’re working for, find another.
All that motivation doesn’t change the fact that lots of stuff you learn in college are just theories that are not suitable in the real world. Yes, it would be great to write a UML diagram, maybe. But is it really necessary? I mean, really really necessary?
Test-Driven Development is a wonderful practice, but sometimes you just don’t have the time. I know it might ensure high quality in the long run, but people in the industry often think short term or simply need a feature fast. It does hurt, but that’s the reality. And even if you don’t want to hear it, but it’s your job to make sure that the requirements end in good code. If it’s unlikely to do that in the given timeframe, it’s your job to tell your boss. And if things like that don’t work out, again, maybe it’s time to look elsewhere. The thing is, if companies don’t understand the consequences of bad behavior and demotivating their employees, they will always have to look for new people.
But always have respect and a little patience as a graduate, before you judge the culture of your employer too early. They might have their reasons.
It is absolutely okay to write code only when you’re working. There’s really nothing wrong with that. You’ve got your responsibilities, you're stressed, you deserve to chill out on the couch.
Many people learn a lot through side projects, though, and maybe even get opportunities for a better job thanks to their side projects or thanks to the new skills they acquire while working on their side projects.
As an example, I was interested in certain technologies (Web API 2) I couldn’t use at work. They had their legacy monolithic applications and used pretty old web service technologies for that. Trying to make things better and suggesting some improvements did not help at all, so I learned Web API 2 with a side project, applied for a new job where they needed someone with this knowledge and in fact got the position.
But it’s not only about getting a better job and learning stuff you otherwise wouldn’t. Side projects are fun! You’re doing something you want to do. You are your own boss and only you decide what you’re going to do and when you do it. And in the end, you’ve been productive and have built something out of nothing. I just love that fact.
So many times I was confronted with the prejudice that tech guys usually sit in the basement, never see sunlight, smell terrible and are not able to talk to other people. I’d love to put an end to this view of my kind of people. Fortunately, the world is already changing a lot.
Still, sometimes a bit of personal development might help. I consider myself an introverted guy. This won’t ever change. For me, this means that I recharge my batteries with being by myself. Extroverted people might get energy when they are with other people. I’m not like that. This doesn’t mean I don’t like being around other people, but it can be exhausting. That’s why I love being alone or with my family because that’s not draining my inner batteries. I think you get the idea.
Anyways, being introverted or shy sometimes can stop you from reaching your goals. That’s where the development of soft skills comes in. I highly recommend the book Soft Skills: The software developer’s life manual by John Sonmez. Learn to be more open, smile more often, have a chat at the coffee machine, get some negotiation skills, work out from time to time. All that increases not only your daily well-being but also the chance to improve your career.
I already mentioned the difference between introverts and extroverts. This time it’s not about being more open in the office in general, it’s about communicating with your team and your boss. I cannot state this enough, communication is key in every part of software development.
Communication surrounds every stage of the software development lifecycle. As an introvert, you can still be amazing at communicating with your team. Talk about the current problems you are facing. Show your coworkers what you have learned lately. Tell your boss or project manager that some of her requests might not really work out but you already have an idea to solve this problem.
Most bigger issues have been caused due to a lack of communication, in my experience. Either the requirements haven’t been clear enough, tasks haven’t been assigned correctly or the worst, developers were afraid to tell anyone that they made a mistake. Stop this! Talk to your teammates. You’ll sleep better at night.
If you’re not happy at your job, it may be better to quit. Of course, there are many reasons to stay. You might have responsibilities that make your job necessary. But maybe you still have the option to apply for something else.
If, however, you’re totally on your own, have no responsibilities whatsoever, there really is no excuse to quit your job except you’re scared or lazy or both.
It really is okay to look for something else and then quit. Weigh the pros and cons if you have to. I just want to make clear, that you shouldn’t let other people judge you if you think there is a better place for you. I know people that are miserable, don’t change anything about their current situation and use loyalty and similar things as an excuse. Never ever work yourself to death for a company that would replace you within a week if you would really die.
That’s a lot of negativity, sorry about that, but some people have to wake up. There are enough great companies and employers that would love to hire you and create a space you like to enter every morning. (Almost every morning. Some days just suck. You know what I mean.)
It’s a simple truth. In particular in the software business. Technologies develop so damn fast, you have to learn new stuff all the time. Stay curious, read articles, try out something new.
I’m sure you already need some time to learn through articles and videos at work. If not, start today! It is absolutely okay to use some time at work for that. Nobody writes code eight hours straight.
This doesn’t mean that you have to learn every new programming language or framework that’s trending now. Knowing that this stuff exists is enough. If you’re that curious that you want to start a side project with anything new, great! Go for it!
But doing your daily work and learning something new while doing that is sufficient most of the time. We often come across new challenges and mastering them is not only a great feeling, but also improves your craft.
The worst thing you can do is stay at your current level and decline tasks because you don’t know how to solve them immediately.
In the end, it doesn’t really matter. People often take their job way too seriously. For me, writing code alone is what drives me. I love the result and solving problems with code. Learning new technologies is a lot of fun for me. I had so many first times with different programming languages, frameworks, libraries, game engines where I just got that wonderful feeling of excitement.
In web development, for example, the jump from jQuery to two-way binding with Knockout or Angular was amazing. Making games with Unity gave me the feeling that I could create anything I wanted. That’s what this is all about.
Of course, there are times you have to work on a project that doesn’t spark a lot of joy. But if you look closely, maybe you still find something interesting or a new challenge for yourself. Just don’t take it too seriously and don’t pressure yourself too much. Making software should be fun in the long run. And never forget: You can code. They cannot. That is pretty damn cool.
Header image created by slidesgo - www.freepik.com