From the desk of a brilliant weirdo #1:
“The difference between a software developer and a software engineer is the same as the difference between a cock and penis.” - Unknown.
What you’re about to read mostly revolves around my personal thoughts, deductions, and offbeat imagination.
If you have different sentiments, add them in the comment section and let’s dispute!
So, today’s topic...
Personally, it pisses me off. Every time I see an article on this topic, my emotional bank account gets robbed. They are all about SEO. Inappropriate keywords squeezed into tiny sentences just to get better rankings. No intent to entertain or enlighten the reader whatsoever. Sometimes, such articles can even be outright wrong.
And even though the purpose of this blog post can be to generate traffic, I tried to make it more of a meaningful rant than a lifeless academic essay.
So, let’s see how you feel by the time you are done reading this paper.
Without further ado:
Since there are no proper interpretations of both terms, a lot of people use them interchangeably.
However, some companies consider these terms as job titles.
The general “programmer-developer-engineer” trend goes along the lines of:
A programmer is someone who knows how to code, understands algorithms and can follow instructions. Yet, it doesn’t go further in regards to responsibilities.
A developer is someone superior to the programmer. Except for coding, they also do design, architecture, and technical documentation of the software component they are building. They might be referred to as leaders, but not necessarily.
Finally, an engineer implies that you are the real deal. You’ve graduated with a degree, have some tech knowledge, and preferably experience… and you are capable of designing a software system (a combination of software components your peons, the programmers, have built). You’re like an overseer. You can see the bigger picture. And it’s your responsibility to clearly explain that “picture” to your team.
“Typically, software engineers will play the role of team leaders, being at the front in dealing with clients and taking on different projects for the team working at the back.” - Talha Waseem, Tech Content Editor at InvoZone.
By the way, it can also depend on the country you are based in. For example, in France, you can call yourself an engineer only if you have graduated from an engineering school that’s been recognized by the Commission des Titres d'Ingénieur.
“In Canada, the term “Engineer” is restricted to those who are certified by a provincial association. So, not everyone can call themselves an “engineer” in Canada.” - Briana Brownell, Founder and CEO at PureStrategy.
Others speculate that these might just be terms made with the purpose of marketing. Perhaps companies want their employment lists and job descriptions to look cool and attract more applicants. Brillante!
Alright, let’s dive deep.
Here are some…
According to Felim O’Donnell, director of operations at Liberty IT, developers work specifically on delivering software within tight parameters. They don’t need to see the whole picture. Developers only need to focus on the task that’s been assigned to them by the software engineers.
On the other hand, O'Donnell says, a software engineer is someone who takes a 50,000-foot view over the developed software. They communicate with other stakeholders to clarify the project requirements and are constantly looking for ways to optimize the work process. They often ask themselves - “Is there a better way to do this?”
So basically what makes all the difference between a developer and an engineer is the mindset with which they approach their job and their appetite to learn.
“Unless you’re working at a place like Google and chasing that prestigious promotion from ‘Software Engineer Level 4’ to ‘Software Engineer Level 5’, which version of software engineering title someone uses mostly just indicates how they think about the role themselves.“ - Justin Pincar Founder & CTO of Achievable.
Honestly, being called a software engineer or a developer is fine. What’s not fine is being called a programmer. The folks that call us programmers are typically small-minded Luddite people devoid of any IT knowledge. Disgusting. How dare they…
I mean, you spend all those years getting your CS degree, working as an elite software engineer (or developer), only to end up being called a simple “programmer.”
C’mon, programming was something I did in my room at 03:00 am at the age of 15.
“Software engineering” is my career, chap. Kinda like calling an accountant a tax preparer or your dad by his first name.
Oh, and by the way, you are not a real software developer if you don't work on Linux and have a rainbow light mechanical keyboard from Razer.
“Why do I need that?” - I hear you scream.
Well, the look of your work setup defines the quality of your work. If you don’t know, now you know.
“Sir, this is Wendy's.”
I know, I know.
Let’s look at the facts...
By definition, an engineer is a person who designs, builds, or maintains engines, machines, or structures.
Wikipedia describes the term “software engineer” as someone who applies the principles of software engineering, to the design, development, maintenance, testing, and evaluation of computer software.
Jack of all trades.
“I prefer to call myself a software engineer because it sounds more solid and professional.” - Gene Mal, CTO at Static Jobs
By definition, a software developer is someone that develops something - fair enough.
What does “develop” mean then?
Develop, by definition, means to grow or cause to grow and become more mature, advanced, or elaborate.
Let’s see what Wikipedia thinks of software developers:
A software developer is a person that creates software. The phrase 'software development' often means more than just designing or writing the software, it usually means someone who manages the project, or does only the main things. Most software developers are still led by a lead software engineer that guides the project.
Damn, even Wikipedia is biased.
Alright, let’s discuss programmers a bit now.
My two cents:
If someone calls me a programmer I associate myself with... a peon… a lazy peon… a lazy peon in the World of Warcraft.
I think programmers can as well be called junior developers. Their job is to follow the plan that’s been developed by senior developers or the tech lead.
An interesting fact: Programmers typically spend 90% of their time either in their favorite code editor or on Stack Overflow searching for fixes. The other 10% of their time goes into playing Fortnite.
As someone considered to have a degree in engineering and experience, software engineers can embody the role of a senior software developer (or a tech team lead), meaning, they carry higher responsibilities than the average programmer.
Some undergrads consider engineering to be more of an architecture job - planning out a software solution. Software development, on the other hand, is more about tinkering with stuff and trying out new things.
“In our apprenticeship programs, we use Software Engineer to describe apprentices that will be working on more challenging algorithmic problems and business solutions that are more enterprise-oriented. Our Software Developers work on a smaller line of business applications, mobile apps, and websites that require UX with a higher degree of polish.” - Mike Roberts, CEO at San Diego Code School
According to Wikipedia’s definition, it looks like software developers have pretty similar responsibilities to software engineers. Still, the engineer title ranks above the software developer’s.
Here’s what seems fair to me:
A software developer is someone who is given specific instructions to follow, but they have the freedom and creativity to play with to take the approach they find most suitable.
They aren’t “monkey see, monkey do” type of programmers by any means but still… they follow a set of clear instructions. Sometimes, software developers can also be deemed as full-stack developers/engineers.
As said earlier, the software engineer and developer terms can be used interchangeably.
Only to some companies or individuals they mean different things.
So, when we are looking at salaries, we can consider one as a junior developer and another as a senior developer or a tech team lead.
Let’s say, just for example, that programmers tend to be considered as entry-level developers. Therefore, we can call them junior developers.
As software developers rank above programmers, we can call them senior developers.
And because software engineers have the role of an overseer (according to Wikipedia), doing more managing stuff than coding, we can call them tech leads.
Based on Glassdoor, the average salary of a junior developer sums up circa $63,502/yr.
The median salary for a senior developer is about $82,518/yr.
And the average salary of a tech team lead according to Payscale is around $101,381/yr.
Truly, one of the main benefits of being a software engineer is having a salary that puts you in the top 1% of the world population in regards to financial security.
I think soft skills are equally important as your technical skills. Being a good communicator as a software developer can make you an invaluable contributor to the team.
At some juncture in your career, you’ll face tasks that you’d have a hard time completing on your own. Being able to listen to other team members carefully instead of interrupting, and do pair programming - that’s what will help you establish a position as a good software developer/engineer.
Here are three good rules of thumb that I believe will help you become a better software developer and rise you up the rankings.
- Ask questions.
- Never multitask.
- If you want the result to be 10, then test for 9 and 11. Wrong results can create a solid solution.
Basically, someone who wants to be considered a software engineer (senior developer or a tech lead) should be able to get the hard stuff that everybody else runs from done.
Тhe best thing to do is obviously to get a Bachelor’s degree.
That’s what most people think at least. If you have the time, money, and patience you might as well grind some extra to get a master’s degree. Here, you can find some of the best software engineering schools.
A large chunk of professional developers, surveyed by StackOverflow, said that their studies focused on computer science and software engineering.
A smaller percentage of the surveyed respondents said that they majored in related software engineering fields such as computer programming, computer engineering, or IT.
When it comes to the importance of having a formal education as a software developer, most developers say it’s not necessary to have one. What they think is much more important is the ability to learn on your own and grow your knowledge outside school hours… being self-taught.
A lot of developers recommend taking online courses or coding camps. These can definitely help you land your first job.
Learning through books and doing online exams can also be considered as a highly effective practice for improving your coding skills.
Contributing to open source is highly valued among developers as well. You can head over to GitHub and build out your software developer portfolio while contributing to other projects and broadening your knowledge scope.
You can also try searching for a mentor.
LinkedIn, I believe, is the perfect place for finding a mentor in 2020.
You just gotta stand out from the typical guy searching for a mentor.
If you land in your future mentor’s inbox with a message that goes along the lines of “Hey dear Mike, I’ve been following you for a while, I love your stuff. I’m looking for a mentor. Are you available?”… chances are you won’t get a lot of responses.
Instead, be witty. After all, you’re a software engineer.
Remember this - “if you can make someone smile or laugh, you’ll have a much higher chance of starting a meaningful conversation.”
I’ve found quite some success in the following lines:
“Hey Mike. I wanted to introduce myself in a way that showed I was interesting, clever and witty - Alas, I wrote this message instead.”
And then move forward to explaining why you are sending them a message.
Of course, it might not work from the first time. In fact, if it works the first time, then I call that a f*cking MIRACLE.
Grit your teeth and keep on sending messages. You’ll eventually find a suitable mentor. And when you find it, make sure you overdeliver. Be willing to work for free to absorb as much knowledge and skills as possible (personal thoughts).
However, your mentor should be someone who you want to be 10 years from now (otherwise, what’s the point of getting a mentor?).
LinkedIn though, might not always work for your situation. In this case, Google up local developer meetups in your town.
Or go to seminars and don’t be shy to engage with the speakers.
Or maybe go to universities and find like-minded people there. (That can be a bit difficult due to the current COVID situation but you get the point.)
Another option is to apply for jobs where you’ll be surrounded by senior developers and able to absorb knowledge daily.
Enough of that.
All types of developers are likely to start their day with a cup of coffee in hand while checking their emails.
Once their scrum meetings have concluded, they move forward with their usual tasks.
Programmers (or junior developers) will most likely focus on coding.
Software developers (senior developers) might check on the team to see whether someone has difficulties with completing a particular task.
The software engineer (tech team lead) may have other meetings to attend to make sure the project’s goals and requirements are conveyed clearly to the development team.
After work, they either hang out with friends or sit on their computers, doing some freelance work, watching YouTube videos, listening to music, or playing Fortnite trying to finally secure that 1st place victory after their 47th attempt.
Their bedtime routine consists of binge-watching anime videos (not everyone I guess lol), reading motivational books Oprah recommended, or scrolling through Hacker News before their eyes give out.
How did it go? Did you like it? Are you furious? Spill out your thoughts in the comments below.
A quick blurb: And, of course, if you are searching for a cool source code repository with a simplistic issue tracker and a built-in CI/CD, go check out Codegiant. It’s free for smaller teams.