Back when I was fresh out of school and I started to program professionally, I didn’t care about the job titles I’d get. I was comfortable being an “IT Analyst”, a “Development Engineer”, or even a “Junior Developer”. If the position involved programming and I felt like I was a good fit, then I would take it.
As time passed, I started to notice the industry distinguishes people who are just “Programmers” from those who have the merit to call themselves “Software Engineers”. I started to wonder where I fit in the broad and blurry spectrum of job positions. Was my career extensive enough for me to fall into the coveted ranks of Software Engineers?
As it turns out, years of experience is an important factor—there’s no better teacher than practice—but there’s more to it. In my quest to become a Great Software Engineer, I noticed seven important skills you must develop before you can call yourself an engineer. Let me share them with you.
System Design
In civil engineering, a building’s foundations must be solid, or else the building could collapse. Similarly, a software engineer should be able to lay down sound foundations for their creations. You must be capable of envisioning the ’big picture’ of how your software system is going to be assembled, and how it will operate. The ability to “draw on paper” blueprints for a project will make you great. Don’t just wait for a nice set of UML files to come along—get involved in making them. People expect true engineers to have a say about how a system should be built from the very beginning. Even if your design tools are just pen and paper.
Language Agnostic
This one was a little difficult for me to accept when I was a beginner. No matter how much you love a programming language, it’s more important to know that languages are just tools. It’s not unusual that you will be required to learn a new language on the spot for a variety of reasons. It’s no coincidence that a great programmer does not write “Java Developer” or “_ Developer” in his or her résumé. Always be open and prepared to learn and play with new technologies.
Be Proficient with a low-level Programming Language
If you’re curious, you might have already looked into “Software Engineer” job postings from Google, Facebook, etc. Did you notice what they have in common? They’re usually adamant that you be proficient with at least one “general purpose programming language”. I believe there’s no better career investment than learning C/C++, which is not only general purpose but also low-level, unlike some newer counterparts such as Java or Python. C/C++ is powerful and its mastery will make it easier to understand how a computer works under the hood. And the fact that so many languages are modeled after C/C++ means you’ll be able to pick up many other languages more easily.
Understand your clients
Part of your job as an engineer, when you interact with clients, is to clarify what it is that they really want. Clients may have a great ideas, but they often won’t know how to translate them into real, concrete software, until an engineer comes to help. The ability to make the client’s ideas evolve and mature is a great skill to cultivate.
Algorithmic Complexity
While not all projects share the same level of difficulty, a time will come when you will be required to manipulate huge chunks of data. How well you deal with a such a tricky task will make you stand out from the crowd. Are you able to recognize why a linear implementation is better than an exponential one, and why it is worse than a logarithmic one? If your project is critical, this can make the difference between success and failure.
If you want to learn algorithmic complexity and other important computer science concepts, be sure to check out our book Computer Science Distilled.
Writing Skills
This one applies to a variety of duties that are part of creating software. From writing commit messages or API documentation, to choosing good variable names. Are your commit messages clear? Do they represent an isolated chunk of work? This can save the life of the next programmer trying to find which change introduced a bug. When you throw a fancy/tricky one-liner in the codebase, you should have the courtesy (and skill) to add a comment that explains what you did in clear English. Everyone will thank you for it!
Integrity
Throughout your career, you should ask yourself if this is really what you want to do. Do you see yourself doing your work for the rest of your life? Do you have a true passion for coding? These fundamental questions should always guide you. While it may not always be possible, try to get those jobs that kindle your interest. Be sure to take the initiative, keep a positive attitude and show genuine care for your coworkers and clients. This is one of the earliest pieces of advice I received, and that I’ll never forget: at the end of the day, interpersonal skills matter more than technical skills. For me, nothing has been proven to be more true.
Great article. I’ll also look up your book ‘computer science distilled’.
Thank you, Ali! Let me know how you like the book later.
Hi Jose! My name is Samuel and i’m currently a freshman pursuing CS at Ashesi University college. I have been looking for a mentor all these and i was wondering if you could reach out to coach and guide me in my journey to becoming a software engineer?
It will be a dream come true to have a person of your personality guide me through life time journey.
Hello Samuel, sorry for the delayed response. First of all, it’s a great honor for you to even consider I can be a mentor. Sure, I can give you some pointers for you to direct your career in a software engineering path. I can sincerely tell you, If you’re in your early years of CS, I strongly recommend you get a copy of Wladston’s book: Computer Science Distilled, it’s perhaps the best starting point I wish I had access to back in the day when I had no clue about where to begin. Let me know If you have any further questions.
-Jose
Wonderful article.I have ordered your book from Amazon a week ago.Waiting for it to get delivered :)
Very interesting article, and for the book i’m looking here in Algeria and i didn’t found it :'(
Actually sir i want to be a good coder but i am not getting what to do. I am a information tech. Btech. Student . plzz help me regarding this.
Hey Jose, so much thanks for sharing out your early experience.
In my early days, i also recognized the importance of these skills you pointed out, I’m keenly trying to master them.
I would love to read more articles by you.
Thank you very much Nick, I’m very happy to read your kind words. And I promise there will be more from me.
Hi Jose. can someone learn these skills i their thirties to enhance their skills. I currently have a bachelors in Accounting but seek to learn Software Engineering. Some Advice will be a great help.
The answer to that is a definitive YES. I firmly believe programming is something you can learn on your own. Can’t say these are skills something you can acquire overnight, but you can certainly become better at it with discipline and persistence. Now there’s a lot places online that can you use to fill in the gaps, and books like Computer Science Distilled make it even easier to demystify the harder aspects of this trade, I would say reading the book and then playing around with some high level language like Ruby or Python is a good start if you’re an absolute novice.
Hie, Jose. My name is Berzel and well i should say this is a great article. I am currentyl studying Computer Science at NUST in Zimbabwe. I hope one day i will be a great at software enginnering. Thanks
I disagree with the “learn many programming languages”. Employers pay a premium for those that specialize in one technology stack than those that are broad. Its a fact that an employer will pay someone higher for skills and knowledge they already have versus someone who needs to keep learning new technologies on the job. As long as your are being paid top dollar for a skill set and that skill set is still going to be around for many years, I don’t see how it is an incentive to cut your salary and learn a new skill.
You’re mostly right, and I think it’s even ideal to have a career more focused on the things you like and have mastered over a long period of time. What I said though, comes from my personal experience, I’ve had to adapt to new technologies in weeks and it seems like the industry is biased towards those who present themselves as software engineers, rather than technology specialists. And I don’t mean that you should downplay yourself and throw away your valuable knowledge, what I meant is that employers want to see a certain degree of “insurance” that you’ll be able to survive outside of your comfort zone (so to speak), learn new technologies on the spot, etc, etc.
Hello there, You have dοne an еxcеllent job.
I’ll definitely digg it and personally recommend to my friends.
I am confidеnt they ԝill be benefited from tһis sitе.
Thanks for your excellent article.
Thank you for reading, sir.
One of the best articles I’ve read about software engineering!