Skip to content

Latest commit

 

History

History
185 lines (110 loc) · 13 KB

software-career-tracks.md

File metadata and controls

185 lines (110 loc) · 13 KB

Software Career Tracks

When thinking about what tracks are available to software engineers, a good place to start is thinking about what technical products do you see used in the world?

Products

First, consider the many ways people interact with software on a given day:

  • Using their mobile phone to check their favorite apps
  • Watching Netflix via their computer or smart TV
  • Reviewing emails or writing reports on their laptop
  • Playing games on their computer or phone
  • Editing images or movies on their computer
  • Reviewing analytics or reports for their business
  • Hackers trying to use vulnerabilities to steal information

This breaks down into a few key categories:

  • Building iOS and Android mobile Apps
    • Lyft or Facebook iOS or Android
  • Web Applications
  • Games (Steam/Xbox)
    • Gears of War, Bejeweled
  • Data Science (Dashboards, reports and charts)
    • Twitter or Facebook Ad Analytics
  • Security
    • Finding and patching security exploits at Bank of America
  • Embedded systems
    • Building operating system components
    • Writing hardware drivers

Higher-Level (Level 1 List)

At the highest level, the most common software engineering disciplines in industry can be broken down as:

  • Mobile Developer (iOS/Android)
  • Web Developer (Client-side / Server-side)
  • Graphics/Games (OpenGL/Unity)
  • Data Scientist / Machine Learning (SQL/Python/R/TensorFlow)
  • Security (Python/Ruby/C++)
  • Embedded / Systems Developer (C/C++/Rust/Go/Assembly)

Level 2 List

This can be further expanded into more discrete roles:

  • Mobile (iOS/Android)
  • Web Front-end (HTML/CSS/Javascript)
  • Web Back-end (Ruby/Python/Java/Node.js)
  • Graphics/Games (OpenGL/Unity)
  • Data Analyst (SQL/Python/R)
  • Machine Learning (TensorFlow/Mahout/SciKit)
  • DevOps and Infrastructure (Jenkins/Docker)
  • Embedded Systems (C/C++/Assembly)
  • Blockchain Systems Engineer (C/C++/Go/Rust)
  • Security (Python/Ruby/C++)
  • Desktop (Windows/Mac/Linux)
  • Test Engineer (Selenium/Expresso)
  • Site Reliability Engineer (Docker/Kubernetes/Jenkins/Dynatrace/Prometheus)

Full

Read below for a more detailed description of the various software engineering roles and specialties.

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.

Graphic 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 exploit and fix security flaws. This type of developer often work 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.

20 - Site Reliability Engineer

SREs keep large-scale computer services reliable. They are directly involved in modifying code in their pursuit of making systems automated. A company's SRE teams are characterized by both rapid innovation and a large acceptance of change. They are responsible for the availability, latency, monitoring, emergency response, performance, efficiency, change management, and capacity planning of application services.