We live in the most extraordinary generation of technical growth the world has ever seen with ever-expanding types of software engineering opportunities. As technology evolves, innovation builds upon itself and drives demand for additional software complexity and layers of abstraction, which allows the market to grow even more types of software engineering. Hell, mobile development was all the rage not long ago, and the blockchain concept didn’t even exist. Now blockchain development is the fastest growing software development category on the planet!
As change accelerates it creates massive opportunities for new and old developers to start and choose their adventures! If you’re still deciding what kind of tech you want to build, it’s helpful to think of the available choices to align yourself based on your interests, skills, and market demand.
To illustrate the spectrum of software engineer career paths, Shawn Wang (www.swyx.io) created an outstanding info-map inspired by the OSI Model (Open System Interconnection). The OSI model is a standard way of modeling data connectivity layers between computers. Instead of interconnected machines, he adapted that model’s connectivity between devices and users. Within each layer is an abstraction of connectivity between machines and the end-users using software code, which can be mapped to each type of software engineering. This can be extremely useful to understand where
He breaks out each of what he calls “coding career layers” that can be associated with the types of software engineers. Here are the most common ones
No-Code Creators/Designers - The rise of Notion, Airtable, Bubble, Webflow, Shopify and more allowed the proliferation of apps (or custom workflows) to be built without knowledge of programming. Combined with the use of an ever-improving AI, just about any user will be able to build even more complex apps making us “programmers” where the only limit is our imagination! Designers
Front End Engineer - Every web application you see uses some form of front-end technology. If you’re an artist type and want to break into programming, this is where I’ve hired some “web designers” that were able to master front-end engineering over the years and transitioned very well in this space. They know core JavaScript - usually, at least another front-end framework such as React, Angular, or Vue.js (my favorite). There are always new libraries to stay on top of and keep evolving. You definitely won’t be bored with the latest technologies coming into play while driving the user’s experience.
Mobile Developer - The days of Microsoft and Blackberry with ugly keyboards are behind us. Apple shook the world in 2008 with their touch screen iPhone (then Google followed) and a programming API and put a phone in every person’s pocket. With the mobile space so dominantly held by these two companies, it’s Java for Android and SWIFT/Objective-C for iOS. Yes, developers use solid cross-platform frameworks to create mobile apps such as Xamarin (which uses C# and gets bought out by Microsoft), Apache Cordova, PhoneGap, NativeScript, Ionic React Native to leverage existing skillsets.
Video Game Developer - Games have probably intrigued more hopes and dreams than any other type of software engineer. Hell, even my boys have expressed interest in programming because of video games (thanks to Roblox and Minecraft). Be sure to get a decent-powered machine to work on OpenGL, Unity, DirectX graphic engines while developing in C/C++, C#, and Java.
WordPress Developer - Every business has a blog. If you’re interested in helping bloggers/businesses get their marketing machines rolling by creating interactive websites, then this may be the role for you! There are about 60,000 WordPress plugins and growing at this writing (that’s not including paid ones).
CRM Developer - Every. Single. (profitable) Company. Has. A. CRM. If you’re interested in optimizing sales processes and getting the sales team’s praise (or shame if the app sucks), this is the place to look. How do you automate a prospect to buy, provide upsells/cross-sells, and build complex sales pipelines to keep them buying? The undisputed king in this space is salesforce, but the space is so ample that hundreds of other tools are being used, including SAP, ERP integration, and SharePoint.
Back End Engineer - This is where I started my coding programming in C a while ago and then "graduated" to C++/C#. These guys love algorithms coding optimization and find elegance in true OOP, interfaces, and polymorphic objects. The explosion of web development also morphed into an API design paradigm. The most common backend languages used are Java, C#, C/C++, Python, Ruby, Go, and Scala. They usually need to work directly with databases (expected to know some SQL, NoSQL, or LINQ if . NET). In addition, they’ll be integrating a range of services from email (SMTP), logging, storage & caching (massive scale for performance).
Jeff Bezos’s, founder of Amazon saw the advantages of calling every function via API as he wrote his famous company memo in 2002:
1. All teams will expose their data and functionality through service interfaces.
2. Teams must communicate with each other through these interfaces.
3. There will be no other form of interprocess communication allowed: no direct linking, no direct reads of another team’s data store, no shared-memory model, no back-doors whatsoever. The only communication allowed is via service interface calls over the network…."
Full Stack Developer - This is where many developers’ careers start getting traction and end here as they don’t push themselves out of these roles. These guys have experience with both front and back-end development (but will usually have more excellent proficiency in one or the other). This can be a stepping stone to becoming a software architect and beyond.
These developers have mastered some degree of front-end and back-end development. Some companies don’t have the resources, so they may have stumbled into this role. Be sure to check your company’s compensation structure to see if they have a formal full stack developer part of their organizational structure. In other words, you may be doing the work of two roles for the price of one. =)
Data Science/ML/DL - I wonder if we’ll look back to our future and credit “The Rise of the Machines” from these developers? Today, AI is nowhere near sentinent, but it can process and spot patterns with a large enough data pool that humans can’t see and adapt accordingly. The most common languages in the space are R, Python, SQL using Jupyter notebooks. Along with those, they’ll likely be using at least one or more of these tools to build and deploy their models: Scikit-learn, NumPy, TensorFlow (with Keras add-on), PyTorch, and Panda.
Blockchain Web3 dApp Engineer - Interested in building the next generation financial infrastructure based on Bitcoin’s technology or creating ‘unstoppable’ decentralized applications (dApps), smart contracts along with DAOs, and NFT’s? This field combines economics, game theory, finance, and politics all in one area. These developers tend to work with JavaScript, Solidity, C++, C# and Go, to name a few.
Blockchain development may one-day update or replace a lot of these current roles. The book “Life After Google” gives a fantastic analogy of cloud computing representing pockets of centralized clouds in the sky. Then the blockchain has the entire “blue open sky.” The idea is that blockchain technologies will allow any user to take advantage of an existing blockchain tech stack to do all things the cloud providers provide (computing, storage, identity, etc.) without centralized and allow the user to retain control of their data.
CyberSecurity/Security Engineer - If you have the gift of getting inside the mind of hackers (or criminals) or love breaking into computer systems, then this is the field for you. These engineers prevent (harden) software systems from hackers through security audits or perform penetration tests to gain access to computer systems. The tools constantly evolve based on the existing security software holes like any field. These developers tend to work in Python and Ruby. The more advanced security engineers know how to read source code from operating systems, usually written in C/C++.
QA Engineer - Some of my most ass-saving moments came from working with solid QA engineers. Imagine writing code (or manual) to catch everything the lead programmer messed up before deployment. These guys have the chance to be heroes. Mediocre developers won’t appreciate getting their bugs found, but the best ones care more about the results. as programming is a game of kaizen (constant and never-ending improvement). While developers typically create unit tests in their respective platforms, not all bugs will be caught, so automated test tools are used. Tools such as Selenium and LambdaTest use languages like JavaScript, Ruby, Python, Java, C#, Perl, Ruby, and more.
Language/Framework Developer - I remember working on Java in school when it was a hot new cool technology that scared Microsoft into creating the .NET framework using C#. In the early days languages were developed in assembly language and a growing number of languages (such as Rust and Swift) use LLVM. LLVM is a toolkit for allowing language developers to be able to run their language on different operating systems.
Browser Developer - The browser was popularized by my Alma Mater (University of Illinois) with the Mosiac browser. Marc Andreessen used a lot of that tech to create Netscape - which started the browser wars with Microsoft. Microsoft won that skirmish until Google's Chrome took over the world. Those browser wars are pretty much over (until a new tech or platform arrives) they still play a critical piece for every user to access the internet.
SRE Site Reliability Engineer/DevOps Engineer - The rise of cloud computing, primarily thanks to AWS/Azure for creating this space. These companies abstracted the details of server configurations to create a need for orchestrating deployments to the cloud using technologies such as Docker and Kubernetes. This requires them to understand how software applications need to be built, deployed, and administered on distributed software platforms. The big tech platforms are AWS, Azure, Google Cloud, IBM, and Oracle.
Integration/IoT/Embedded Software Engineer - Do you want to tinker with your hardware and embedded software? Thanks to Amazon Alexa and Google Home, you can connect and enhance your programmable devices for people to use around the home seamlessly. They tend to work on these platforms: Texas Instruments, ARM Cortex, AVR, Microchip, Arduino, and Raspberry Pi. They usually build software using C/C++ and Assembly.
So there you have it, the most common types of software engineers. As more innovation occurs, we will see some of these jobs go away as we create new ones. Imagine a day when quantum computers become mainstream; we’ll have a whole new set of classes of programmers under a “quantum computing” paradigm. If you’re new and unsure which path to get started on, the incredible awesome thing about software development is things change so fast. So pick ONE way that interests you the most for now, and there will be a lot of carryover. When the market shifts, you’ll be able to move on to the following tech stack.