This week, I'd like to have a frank discussion about what it really means to be a software engineer. If you think this job is all about sitting in a dark room, sipping energy drinks, and churning out lines of code, you're in for a rude awakening.
First and foremost, writing code is just a fraction of what software engineers do. Yes, it's important, but it's far from everything. Let me break down the real responsibilities you'll face as a software engineer:
Code Reviews: If you're not spending time reviewing your team's code, you're not pulling your weight. It's that simple. Your colleagues depend on you to catch errors, suggest improvements, and maintain code quality. This skill is more important today than ever before because AI is writing huge amounts of code now (and will only continue to write more)...so we're left reviewing it, making sure it does what it's supposed to, how it's supposed to.
Problem-Solving Beyond Your Screen: Expect to spend a significant portion of your day answering Slack messages, emails, and explaining issues to others. You're not just solving coding problems; you're solving communication problems too. Hands down, the best skill a software engineer can have is good communication.
Knowledge Sharing: Learn something new? Come up with a good solution to something? It's your duty to share it. Your team's success depends on collective growth, not individual hoarding of information. Not only that, but you'll often need to share that knowledge with non-technical people...and as Dr. Richard Feynman said..."If you can't explain something to a first year student, then you haven't really understood."
Documentation: Your code isn't as self-explanatory as you may think. There's almost always additional context and use cases that code alone doesn't explain. It's your responsibility to make sure that information is shared with the rest of your team. Don't make them have to go hunt it down (or mistakenly discover it) on their own. Additionally, other people, including non-developers, need to understand how your software works. Get comfortable with writing clear, concise documentation.
Testing: If you think your job ends when the code compiles, think again. Writing comprehensive tests to ensure your code works exactly as intended is a major part of the job. Some even think you should be writing your tests before you write you the code!
Collaboration: Software development isn't a solo sport. You'll be working with designers, product managers, QA teams, other developers, customers/clients, leaders, and more. Learn to play nice with others.
Project Management: Planning, estimation, progress tracking β these are all part of your job now. Time to brush up on those organizational skills. Oh, and those code review skills are gonna be important here too as you look through different areas of code in order to figure out how long it's going to take you to write that fancy code.
Continuous Learning: The tech world doesn't stand still, and neither can you. Keeping up with new technologies and best practices is non-negotiable. From the latest technologies, to updates to the software you're already using, to new security vulnerabilities you're responsible for protecting your users from...there's always something more to learn in this industry. So don't get the impression that just because you finished that course or bootcamp, or acquired that degree, that you're done studying and learning.
Client Interaction: Yes, you might have to talk to actual humans who use your software. Shocking, I know. Be prepared to gather requirements, provide updates, and maybe even help a few of them figure out how to actually use that amazing software you built.
Security: Keeping software secure is an ongoing battle. You'll need to stay vigilant about threats and vulnerabilities, both in your code and your dependencies.
Remember this: we write more for humans than for machines. So learning good communication skills is vital in order to be a successful Software Engineer. It will also launch your career in huge ways π
If you're not ready to take on these responsibilities, you might want to reconsider your career choice. Software engineering is challenging, multifaceted, and requires a diverse skill set. But for those who are willing to embrace these challenges, it can be an incredibly rewarding career.
Now, who's ready to be a real software engineer?
Top comments (4)
This just makes things even more interesting, i thought after completing my degree (currently in my first year), it would be me and the screen. I enjoy all the things you've mentioned, in my current state, i read code from open source projects and try to understand how things were done. It's fun for me. I also love sharing and creating documentations for my projects on github. Communication is still my major concern, am very aggressive when it comes to one on one conversation but talking to a crowd of more than 20 people feels like being put on a time bomb. When it comes to learning, am really good at it. Also iam pretty good when it comes to critical thinking and problem solving, like i can break down complex problem down to simple ones.
Thanks for the reply @john4650hub π
Sounds like you're on a good path on the technical side. I would definitely encourage you to work on the communication piece though. Communication is hands down, without doubt or exception the most important skill we can have. Every team I've worked on would rather have an average coder who communicates well and works well with others instead of a rockstar coder who doesn't play well with others. There are tons of resources out there to help with this (books, seminars, therapists, coaches, podcasts, etc.) But none of them will provide you with "the quick and easy" solution. You have to work on growing yourself. I highly encourage you to invest in growing your communication skills, otherwise it will π― bite you in the a$$ (speaking from experience here π¬)
I am interested
what are you interested in @soundar_arunachalamrm_fa ?