This post was first published on CoderHood as 19 Types of Developers Explained. CoderHood is a blog dedicated to the human dimension of software engineering.
The software development landscape changes constantly. New areas of specialization, technologies, and methodologies pop into existence every few months, forged by the relentless innovation of the software industry. With it, terms to describe specialized types of developers become part of the unofficial industry lingo and show up in job ads and corporate titles.
Before the existence of the internet, many of these specializations didn't exist. The world wide web has shifted most aspects of our lives, including revolutionizing the career paths of software engineers.
There isn't an official industry glossary of terms. Understanding the skills that each type of developer needs to have is confusing to newcomers, and can be intimidating to non-technical people.
In this post, I define 19 of the most common types of developers with a short description and list of technologies they use and skills they must have. Note that the definitions of those terms reflect my professional understanding, but it may vary depending on the company, the region, or the industry.
1 - Front-end Developer (AKA Client-Side Developer)
This is a developer who specializes in the programming of visual user interfaces, including its aesthetics and layouts. A front-end developer code runs on a web browser, on the computer of the user of the site.
It is very high-level work, normally far removed from the hardware. It requires an understanding of human-machine interaction and design principles more than computer science theory. Much of a front-end developer's life is spent dealing with cross-browser compatibility issues and tweaking details of the visual presentation of a UI.
Front-end development skills include the design of user interface (UI) and user experience (UX), CSS, JavaScript, HTML, and a growing collection of UI frameworks.
2 - Backend Developer (AKA Server-Side Developer)
This is a developer who specializes in the design, implementation, functional core logic, performance and scalability of a piece of software or system running on machines that are remote from the end-user.
Back-end systems can grow to be very complex, but their complexity is often not visible to the users. For example, consider Google search engine. The front-end part is a very simple UI with a title, a text box, and two or three buttons. The backend is an enormously complex system, able to crawl the web, index it, and find what you are looking for with a growing array of sophisticated mechanisms.
A back-end developer works with programming languages such as Java, C, C++, Ruby, Perl, Python, Scala, Go, etc. Back-end developers often need to integrate with a vast array of services such as databases, data storage systems, caching systems, logging systems, email systems, etc.
3 - Full-stack Developer
This is a developer that does both front-end and back-end work. He or she has the skills required to create a fully functional web application.
4 - Middle-Tier Developer
This is a developer who writes non-UI code that runs in a browser and often talking to non-core code running on a server. In general, middle tier is the "plumbing" of a system.
The term middle-tier developer is used to describe someone who is not specialized in the front-end or the back-end but can do a bit of both, without being a full stack developer. Only rarely engineers have this as a title, as it is more of a description of a skill set than a career path.
5 - Web Developer
Web developers are software engineers who specialize in creating websites. They are either front-end developers, back-end developers, middle-tier developers or full-stack developers.
Web-Development became a very common way to enter the software engineering world in the late '90s and early 2000s. It has a low entry-point, requiring as little as basic HTML and CSS knowledge. With only a few months of experience, an entry-level web developer can start producing code that ships to production systems. It is a particularly attractive option for people who have no CS fundamentals and want to join the programming world.
6 - Desktop Developer
This is a developer who works on software applications that run natively on desktop operating systems (such as Mac OS, Windows, and Linux).
Back in the '80s, this was one of the most common types of engineers, popularized by inexpensive development environments such as Turbo Pascal, Turbo C, Visual Basic, Quick C, Visual Studio, and Delphi.
Desktop developers often use GUI Toolkits such as Cocoa, XAML, WinForms, Gtk, etc.
7 - Mobile Developer
This is a developer who writes code for applications that run natively on consumer mobile devices such as smartphones and tablets. Mobile development was almost unheard of before the early 2000s and the explosion of the smartphone market. Before then mobile development was considered a subset of embedded development.
A mobile developer understands the intricacies of mobile operating systems such as iOS and Android, and the development environment and frameworks used to write software on those operating systems. That includes Java, Swift, and Objective-C.
8 - Graphics Developer
This is a type of developer specialized in writing software for rendering, lighting, shadowing, shading, culling, and management of scenes. These developers are often responsible for integrating technologies in the gaming and video production industry.
Graphics development used to be a form of low-level development, requiring advanced math and computer science training. It is becoming more accessible with the introduction of commercial and open source frameworks and systems. For example, very few people today need to be able to write a shader from scratch.
Frameworks include DirectX, OpenGL, Unity 3D, WebGL. For more advanced graphic developers, low-level development requires C, C++, and Assembly.
9 - Game Developer
This is a generic term to identify a developer specialized in writing games. Game developers can fall into one of the other categories of developers, but they often have specific knowledge and skills in designing and implementing engaging and interactive gaming experiences.
Frameworks used by game developers include DirectX, OpenGL, Unity 3D, WebGL, and languages such as C, C++, and Java. Adobe Flash used to be the standard gaming platform for web games. Since Flash is being abandoned, JavaScript and HTML5 became the new standard. On mobile devices, Swift and Java are now the technologies of choice for iOS and Android games.
10 - Data Scientist
This type of developer writes software programs to analyze data sets. They are often in charge of statistical analysis, machine learning, data visualization, and predictive modeling.
Languages used by data scientists often include SQL, R, and Python.
11 - Big Data Developer
This type of developer writes software programs to store and retrieve vast amounts of data in systems such as data warehouses, ETL (Extract Transform Load) systems, relational databases, data lakes management systems, etc.
A big data developer is often familiar with frameworks and systems for distributed storage and processing of vast amounts of data such as MapReduce, Hadoop, and Spark. Languages used by Big Data Developers include SQL, Java, Python, and R.
12 - DevOps Developer
This is a type of developer familiar with technologies required for the development of systems to build, deploy, integrate and administer back-end software and distributed systems.
Technologies used by DevOps Engineers include Kubernetes, Docker, Apache Mesos, the HashiCorp stack (Terraform, Vagrant, Packer, Vault, Consul, Nomad), Jenkins, etc.
13 -Â CRMÂ Developer
This type of developer specializes in the field of systems that collect user and consumer data. These developers are tasked with improving customer satisfaction and sales by improving the tooling used by customer support representatives, account managers, and sale representatives.
Technologies used by these developers include SAP, Salesforce, Sharepoint, and ERP (Enterprise Resource Planning).
14 - Software Development Engineer in Test (SDET)
This type of developer is responsible for writing software to validate the quality of software systems. They create automated tests, tools and systems to make sure that products and processes run as expected.
Technologies used by SDETs include Python, Ruby, and Selenium.
15 - Embedded Developer
These developers work with hardware that isn't commonly classified as computers. For example, microcontrollers, real-time systems, electronic interfaces, set-top boxes, consumer devices, iOT devices, hardware drivers, and serial data transmission fall into this category.
Embedded developers often work with languages such as C, C++, Assembly, Java or proprietary technologies, frameworks, and toolkits.
16 - High-Level Developer
This is a general term for a developer who writes code that is very far from the hardware, in high-level scripting languages such as PHP, Perl, Python, and Ruby. Web developers are often high-level developers, but not always.
17 - Low-Level Developer
This is a general term for a developer who writes code that is very close to the hardware, in low-level languages such as assembly and C. Embedded developers are often low-level developers, but not always.
18 - WordPress Developer
I include WordPress developers in this list because they are a hefty group of specialized web developers. They create and customize themes and plugins for WordPress and administer WordPress sites.
This kind of developer uses the WordPress system, PHP, JavaScript, and HTML.
19 - Security Developer
This type of developer specializes in creating systems, methods, and procedures to test the security of a software system and fix security flaws. This type of developer often works as "white-hat" ethical hacker and attempts to penetrate systems to discover vulnerabilities.
Security developers most often write tools in scripting languages such as Python and Ruby and understand in details the many patterns used to attack software systems. More advanced security developers need to read and understand operating systems source code written in C and C++. They might also reverse engineer libraries and commercial software systems to find and exploit vulnerabilities.
Conclusions
There are many paths software developers can take to enter and progress in their careers. Regardless if you start with a formal computer science education, or stumble into web development with personal projects, or try to make a million dollars creating an iPhone game, the possibilities are endless.
Once you choose a path, you can change as your skills and knowledge improve. Even if you choose to stick with one path for your entire career, you'll never run out of things to learn. Technology evolves so quickly that is far easier to be left behind than to get bored.
--
Top comments (31)
I'm definitely a category #16 developer. Shhhh.
LOL, did I really skip one?? :) :) Wow.
Fixed :)
Now I'm category #6. So much for my former ninja category. ;-)
I would like to add the "Small business developer". But that's actually a combination of multiple types. At my current position in the small business I work in, I am a full-stack, middle-tier, web, desktop, high-level, low-level and mobile developer.
That's called #17 slavery 😂, been there done that for years. Except for good startup experience it doesn't worth it 😔.
Big Data Developer - is actually called Data Engineer, is basically the tech support for the Data Scientist.
Really clear descriptions. What do you think of aiming for being Full-Stack + Data Science developer?
It is a good choice. I think there is a great future in that area.
Data Science doesn't do much developing, both jobs occupy more than a full time job so it would be hard. Also the skills needed are very different.
Thanks for the replys, I really appreciate it.
To me, you'll not be able to be fully accomplished in all.
I consider that to be an expert in one subject you'll have to work almost full time on that for 5-10 years. Already to do that, you'll have to be quite motivated, maybe work more than others or be quite smarter. You'll already be above average as many just have 10 time one year experience and never 1 time 10 year experience on a subject.
Doing the same for 3 subjects (full stack actually is frontend + backend), you'll become "outdated" in a topic by the time you master another one.
For backend dev, 10 year ago for example almost nobody was designing mostly immutable backend, almost nobody where building reactive backends, NoSQL databases were not that well known. People where still focussing on pure object oriented and ignoring functional programming. There was still the idea that most website could run on a few machine and that a few thousand query per second was a lot.
For data science, big data was almost unheard of, the first websites to do that were pionnier in the industry and the tooling was different as well the technique. Now "deep learning" is all the rage while ten year ago, it was more just basic statistics. Also a company that started maybe asked their existing software dev workhorse to do it, while now, more and more they hire phd in math/statistics. Because the typical software developper does have the necessary academic background on they subject to really master the topic.
For UI, 10 years ago many companies where still thinking they could avoid javascript and web UI weren't that responsive. For advanced interrection you used flash and frameworks trying to hide the browser from you so you could develop things like if it was a desktop app where all the rage. Support for mobile was anedoctic with the first iphone barely out.
If you do 3 at the same time, you may manage to maybe be great in one of the area at best and average in the other two. And it will still take you some time and you'll have to be above average to achieve that.
This is a valid carrier path, a generalist, jack of all trades and would work especially well in small companies and small projets where you may have to do everything.
But you are unlikely to be a master in any of the areas without fading in the other 2.
Amazing list, very descriptive and clearly explains each position. I feel as a developer sometimes it's hard to learn most things and you constantly have to be learning to keep up to date even outside of work hours. I'm a Full stack developer, and I always spend about 2 or 3 hours every day after work to learn new frameworks, or work on my own side projects, although I love it, sometimes I wonder what is the best approach if you want to master being a full stack developer?
For #14, I think the description could be improved. There are actually two types of developers for testing:
While the first type focuses on validating the system, the second one is always on the look out for ways of breaking or enhancing it. The second type usually finds the most entertaining bugs!
I've been wanting to write about the different kinds of developers as sliced by personality type, but I don't know that I could quite pull it off. Two that I've thought of are the visionary (someone who sees the big picture and pushes/inspires colleagues) and the doer (someone who sees the small details and excels at getting stuff done). The two need each other. I'm sure there are more though!
I thought it might have been about this kind of breakdown - like the Myers Biggs applied to developers. But maybe those aren't quite as useful (just redescribing MB types) - looking at the sorts of endeavours that developers pursue to get the job done could be a good examination. I, for example, tend to collaborate (training/pairing/etc) and use Agile. This seems to be a little removed from the typical developer traits since I spend so much of my time trying to pursuade devs away from their headphones! But, respect to the headphoners too. It's important that people are working they way they want to, as long as they've had the experience of the different types of approach. An examination into these types of approaches may say something, and highlight differences in working environments and highlight that productivity is maximized not just by the 9-5'ers.
While they are not "developers", I feel like it would have been beneficial to include UX Designer and Web Designer since these are often things you see in a software company and some still don't know the difference between a developer and a designer.
I've seen serverless Devs too. It's not really back end because they run code directly in a server architecture like Lambda. It requires a different skill set to traditional backend Devs.
Thank you. That's interesting. I still see that as a back-end developer.. mostly because it is not front-end :) I haven't seen people who specialize in serverless work so far, but it is interesting to hear that it is happening. The world is moving in that direction for sure, and I fully expect that in the next few years most back-end code (or... "not front-end code") will be running on virtualized environments that abstract the concept of a server out of the equation.
It's not really backend though because the serverless Devs don't need to understand anything of the hosting/http infrastructure and the code they were looks like front end.
It's not docker. If call that backend because you need to understand the hosting environment.
If you're going to split out Wordpress, then there is definitely a place for serverless.
shout-out to #2 and #3-ers out there