I recently started my first full-time job as a software developer. There were some things I realized that were different than what I had first thought about a typical developer as well as some that never crossed my mind before. Even though I had worked before as a part-time, I was juggling between my academics and work so I never never realized these things. So these are some of my experiences that I think will help current students and new grads.
It's not that I hate communication, I really don't. To be able to walk over to your co-worker's desk to talk and solve problems is part of the reason why I left my previous job, which was going to be all remote work. But I didn't know communication would be so important. Most of the tales I've heard about being a programmer (mine included) was mostly being left alone to do your coding and finish your tasks so this was surprising to me. Maybe I just wrongly assumed that being left alone meant you don't communicate when you're just doing that through chat or calls.
You have to do lots of explaining and detailing. There were many cases where I would go over how the code works, how it was debugged, and what my thought process was. My goal is to try to say only the bare minimum that they need in order to understand what it is that they're looking for. Which also meant, learning to control my urge to pick at every minor thing that I see and knowing when to stop. Let's just say it's a work in progress.
Listening and understanding to people's explanations. Just coming straight out of college, most people I've had to work with were around my age and were usually from the area. At work, you may see talented people from all over the world with different background, ethnicity, and age. So working on understanding them and the task at hand is a very important skill to have.
You're going to be practicing public speaking skills. From standup meetings to performing demos, you'll have to do public speaking. And as you get more and more experienced, you'll be passing on the knowledge to others in the form of classes. So if you're shy, like me, be ready to try to overcome your fears. It does get better over time though.
If you want to work closely with the customers, you can try being a Software Consultant. They work closely with the customers, getting the requirements, providing suggestions, and demoing. You also have to talk with other developers on top of this, probably the most communicative job as an early to mid level developer.
Your co-workers and seniors are usually willing to help you. They want to help you. It's just that sometimes it's easier to ask for help than trying your best first. If your question is project-specific that only the people who have worked in it may know, then it's no problem to ask. If it's problem solving, I try to follow these steps:
- Did I try solving it in at least 3 different ways?
- Did I take a break and then come back to it?
- What questions might my seniors ask and do I have answers for them?
Number 1 and 3 are self explanatory. They're just there to keep you thinking about the problem. Number 2 because sometimes taking a break lets you see things a bit differently. Kind of like how you would write an essay and then later come back to it and become amazed at how bad you wrote it. Here's an article if you want to read more about it.
After you figure it out without any help, ask seniors to help double check your work. This step is probably the most important as this will introduce you to other ways of problem solving that you may not have been aware of before.
Sometimes you need to get things done fast and in these cases, it would be better to ask for help than to spend time trying to solve it yourself first. If there's a knowledgable developer free to help you that cuts down the time it would take you, then go for it.
Developers at a company just starting off will do a lot of initial design process and producing new code. Bigger companies usually already have products that have been made and done so they'll be building on top of existing code to maintain them.
While both skills are essential, developing new code may be more rewarding for less experienced developers. Developing new code will help with your growth in the beginning but it may get harder since you don't have much reference of good coding practices. On the opposite side, maintaining old code is harder to do in the beginning but you'll have a better knowledge after getting through them with help from already-written code.
Doing side projects can help you grow stronger in the weaker area. So if you're doing a lot of development already, you can look into open source projects to contribute to get you more practice. On the other hand, if you're already doing a lot of maintaining code, you can develop some apps on the side.
Most of the time, you'll be learning from your development team but there are a lot of other things you can learn from other department as well. Seeing how testings are done by the QA team will help you prevent bugs. Learning how the designs are made will help you think about better UI/UX designs. One of the tips that I got was to talk to the QA that will be responsible for checking your work so you can catch them early and save time by having less back-and-forth status updates.
I wasn't going to put this section here on this blog but I am going to do it because of how critical this is. I knew that I would have to keep learning to keep up with the new tech in the field but once you're out of school and you start working, it seems like it's on a whole other level. It's not stressful as studying for exams, but the way you learn and study your materials is changed.
You have to look for resources to learn from. I try to listen to podcasts, read articles, and talk to my friends to learn new information. Because you're not getting the material from your professors who are explaining it to you, it's up to you to make sure that you challenge yourself.
Know that you'll have to learn and experiment with different technology for the rest of your life. It sounds like it's a lot of work and tiring but it shouldn't feel too much like extra work if you enjoy the material. With computer science being so diverse, I'm sure you'll be able to find something that you'd enjoy doing.