My opinions (as a freshman in CS) on how to be an effective and highly coveted software engineer.
Overview
A software engineer can be evaluated based on two factors: their hard skills and their soft skills. I’ll be discussing how to maximize each and their relative importance to one another.
Hard Skills
A quick indication of a novice developer is their immediate asking of an expert engineer about how many languages or frameworks they know. Not to say that anyone that asks this is an complete beginner, but I want to analyze this trend. Applying my own past as well, I think that most “noob” developers have this misconception that being proficient in lots of languages and frameworks == skill and prowess as a software engineer. Now, don’t get me wrong, if you can write a web app in React, Angular, and Vue, you’ll be much more hireable than most—but you won’t be the best. The best engineers that make the highest salaries and create the best products have a baseline understanding of a lot of development technologies—but also incredibly in-depth, master-level knowledge of only a select few.
A lot of beginners confuse being able to use X technologies with being able to use X technologies in production. For example, I’ve a general understanding of Swift. If you asked me to write Hangman in Swift, I could do it. But could I write robust, industry-standard Swift code? Hell no. That’s why I don’t put Swift on my resume, and if I do, it’s under something like a “familiar skills” sections, with my main technologies being under “proficient”. The point is that you shouldn’t sell yourself as a jack-of-all-trades, but as someone who knows their niche and has shown that through mastery of corresponding technologies (Ex. wanting to be a back-end developer and being a killer Node, Express, and MySQL developer). Companies aren’t looking for someone to half-ass a bunch of things, but to kick ass at a select few.
Now that you’ve chosen your niche, let’s talk about how a rockstar developer writes their code. The most apparent difference is how readable the code of a true professional is. I remember sitting at my desk during an internship, reading a PR my boss had made (just for shits and giggles really). Even as an embarrassment of a software engineer, I could tell right away what the purpose of each block of code was. In this way, I sometimes think of writing code as a form of art. There is no perfect solution, it is at times very subjective, but writing truly beautiful code requires an expert craftsman, just like any painting or piece of music. The code of a true rockstar developer is clean, readable, purposeful, malleable (easy to change), and bulletproof. This is achieved by eliminating redundancy, never settling for a lack-luster solution, writing code that doesn’t require comments, and being very intentional with each decision that is made. Now I know that this is the farthest thing from easy—I know that. But if you can master even half of the things I just listed, you’ll be head-and-shoulders above the competition and heavily sought after. If you would like a more in-depth look at how to write clean code, I would recommend reading the Bible on the matter, Clean Code: A Handbook of Agile Software Craftsmanship, written by the legendary “Uncle Bob”, author of many other award-winning software engineering books.
Soft Skills
Now onto my favorite section: soft skills! A lot of what I’m about to discuss is pulled from the hundreds of hours of content I’ve listened to from Dave Smith and Jameson Dance, co-hosts of the splendid Soft Skills Engineering Podcast! If you have the time, I would highly recommend checking them out.
I’m gonna forgo any discussion of the more basic soft skills, like time management, critical thinking, and patience, because I think that these just come with time and are less of an immediately learnable skill or related to a change in mindset. That being said, they are still very important, lifelong skills.
The first thing I would like to talk about is teamwork. Now I don’t mean just working with others that happen to be contributing to the same project as you, but real teamwork. Teamwork that leads to a augmentative joining of many talents, instead of the additive or diminishing kind. Teamwork is a chair that is held up by three things: transparency, mutual respect, and a robust understanding of each team member.
Transparency is a non-negotiable in any relationship. In terms of software engineering, this manifests in many forms. The three words software engineers hate saying the most are “I don’t know.” But these three words often times could save developers from so much internal turmoil down the line. If you don’t know how to do something, don’t be afraid to say it. Greatness lives in one who triumphs equally over defeat and victory. Transparency with deadlines is also very important. If you hit an unexpected roadblock and you’re not going to make your deadline, make that known sooner rather than later. If you need help with your Mocha unit tests, swallow your pride and ask Kathleen for help with your damn Mocha unit tests.
Now onto mutual respect. Deconstructive competition has no place on a high-functioning team. Put your puny ego aside and work with your teammates, not against them. If they’re better than you at something, acknowledge it, and give them the praise they deserve.
The third leg on our chair is a wholistic understanding of each member on the team, including yourself. If Sally is a CSS wizard and John is a Golang aficionado, don’t take all the CSS and Golang tickets just because you like working on them. And if Jerry isn’t the strongest with Express, don’t leave him all the Express tickets. Work to each others strengths and be honest about any shortcomings.
The next soft skill I would like to discuss is adaptability. This means that just because you’re taking an algorithms class in Java or you were hired-on as a MEAN stack web developer, doesn’t mean that you won’t have to write some HTML or refactor a PHP codebase. Become comfortable with being uncomfortable. The best software engineers make the best with what they have and don’t complain.
The last soft skill I would like to go over is confidence. The number of people who grapple with Imposter Syndrome is insane. There are so many problems with this. It leads to bad code, anxious managers and teammates, and an overall bad experience. People find confidence in a variety of different ways. Some people hone their craft, others are inherently confident. I’ve seen people implement a fuck-it mentality where they “just suck it up” and take up a almost stoic approach to their work. I personally turn to the people around me. If my girlfriend says she thinks my latest and greatest web app is “kinda cool ig”—then I’m on top of the world. As long as the means of production are sustainable (and hopefully ethical), discover your own source of confidence and stick with it.
How to Go Above and Beyond
Alright, so you’ve got all the basics down. You’re writing Old-Spice-certified clean code that’s not only efficient, but horrifyingly readable and malleable. The team your working on is like a well-oiled machine operating at 7000 RPM like it’s nothing. And you’re rolling with the punches and adapting to you’re environment like a champion. Now what?
That’s really all there is too it. It doesn’t take an Elon Musk or Bill Gates to be a rockstar developer. It’s something most people can achieve with the right wisdom and in due time. If you are looking to do more though, you can always trying re-writing your entire codebase in Rust—I’ve heard Sr. Engineers love that.
Closing Thoughts
You may be asking, “which is more important: soft skills or hard skills?”. The answer: an engineer gets hired for their hard skills, but keep their job because of their soft skills.
Finally, one does not become a rockstar developer, they just start being one. What I mean by this is that most software engineers have the skills and experience necessary to be rockstar developers, they just lack the mindset or wisdom to operate to the best of their abilities. With that, I’ll leave you to it. Go kick some software ass and be a hero!