Look at this quote by Russ Cox:
Software engineering is what happens to programming when you add time and other programmers.
Doing incremental changes to a program, without any consequence of future maintenance (time) or other programmers (collaboration) is laughably easy.
Want to add a new database column? Why not? Which database should be use for our 10MB of data? I heard Cassandra is very scalable!
Well, whatever you do, it will most likely work. It could be over-engineered, cause maintenance hell, make your application slower over time, but as long as you’re only doing local optimization (trying to get just this one thing in), anything would most likely “work.”
The key skill that will make you an established engineer
Having talked to a couple of CTOs and senior engineering leadership over the years, the one skill that is often found lacking, though highly desirable, is communication. People might know how to talk, but that’s not communication.
Communication is the act of sending something over a distance, and making sure that what was sent is exactly what arrives
A lot of people interpret communication to be just sending something over, but they don’t take responsibility for making sure what arrives is exactly what was sent. Without communication skills, you can neither have empathy for others, nor allow others the opportunity to have it for you.
How communication skills make you a better engineer
Communication skills are not synonymous with the English language or even having an exceptional vocabulary that no one understands. It extends to even the act of programming.
- Are you able to read the intent of a fellow programmer by looking at her code? Reading code can be a surprisingly difficult endeavour.
- Are you able to understand the DevOps’ pain in managing different systems, and thus you choose to use MySQL everywhere? Sometimes, it’s better to be uniform than the usual unqualified “use the best tool for the job” nonsense. Here, best often refers to someone’s preference.
- Do you end up using PHP or Java because those are the only two skillsets easily hireable in your area?
And there could be a lot more factors. None of them are covered in your regular programming courses that teach you how to write the for loop 10 different ways in 20 different languages.
Remember, programming is a tool. Engineering is a purposeful use of science. And that science is not always just computer science, but any other science that backs your domain too.