Getting started in Software development: A Path to a rewarding career (Part 4, What type of programmer should I be)
Tags: webdev, tutorial, beginners, career
Published: 2023-08-27 16:34:22

## Hello and welcome
Thanks for stopping by.

## Table of Content
Full table of content for the entire series is [here](https://dev.to/jdonq/getting-started-in-software-development-a-path-to-a-rewarding-career-16ik)

Today, we will continue the following
- **Getting started (cont'd)**
    - Decide which route you want to take (web, desktop, mobile, game, data, frontend, backend, Fullstack etc. We will be selecting Fullstack web development)


## Decisions
Today, we will discuss one of the biggest challenges for new or upcoming software developers. What are my **options** in the profession, what **route** should I take from among the options, which of these is **most fulfilling** and when I choose, can I **switch**.
 
![decision](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vemznh6hxoysqaijxg1s.gif)

As a new developer, it is understandable for this to be a problem, especially because there is a wide range of options to pick from and to make it more interesting, every few years, the options increase by at least one or fifty 🤷. 

The good news though is the same, there are many available options in terms of career paths and areas of specialization. You have a buffet and anyone you choose to pursue gives you the chance to have a fulfilling career so long as you commit to getting good at your chosen field and leveraging the many opportunities. 

Switching is also quite easy in this line of work, just put in some work and get good at the new field and you will be able to secure roles in no time. Another amazing bit is that a good amount of the knowledge in each subfield carries over well to others.

Let us take a quick glimpse at some of the more common options:

### Web Development
Building websites (like company landing pages, society information sites etc) and web applications (like Facebook, Netflix, Gmail etc). For these you will need technologies like HTML, CSS, JavaScript, python, php etc.

![web](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mekugav1o5fm5v5qa3gj.png)

Web development is usually broken into two broad subsections namely 

- Frontend development: this involves two things; (1) designing the user interfaces (UI), the pages the users will see and interact with like buttons, colours, icons, lists etc. and (2) implementing the behaviours for speaking with the backend based on users’ interactions like filling a signup form and clicking submit, clicking follow on twitter (X), clicking play on Netflix, clicking upload on Instagram and so on

- Backend development: this also involves two things (1) the server-side logic that controls what happens when users interact with the frontend like login, sign up, make payment, add profile picture and (2) database interactions to ensure that the changes made while using the application are persisted for next time. Without the database, there will be no way to keep information from a previous session so users can continue whenever they return to the application.

There are some awesome fellas however who can do both, because they have the skills to build out the frontend and the backend. They are called **Fullstack developers**. Awesome is good so we will be learning towards becoming one of such awesome Fullstack Developers.

### Mobile App Development
This is quite like web development, and you will find that most of the web applications you see out there have accompanying mobile apps. It involves building applications to run on the most common mobile operating systems in the market (iOS and Android). 

![mobile](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmq82db24c8euc79l6ml.png)
There are two approaches that are common in the industry these days:

- Native mobile development: this involves building the applications using the native platforms provided by the maintainers of the operating systems like using Swift for iOS and Java or Kotlin for Android.

- Cross-platform or Hybrid mobile development: There are frameworks like Ionic, React Native and Flutter that also allow developers to write code in web development technologies (HTML, CSS, Javascript) and then build them to works on multiple platforms like android and iOS devices.

There are trade-offs to either choice like: 
- Performance (native code is optimized for each OS so it will likely run better) 
- Cost and time to build (with hybrid, you can code once and build for multiple devices while with native you must code the same thing at least twice)
- Access to native functionality like hardware features and APIs (native code has these out of the box but hybrids need to implement workarounds)
- Maintenance (for every change on each OS for native, you must ensure you make same for the other and this also applies to bug fixes and stuff like that which can be a pain to track but for hybrids, all the coding is done once per change)

We will probably do a course on mobile development and go into more details when we are done with web development. 

### Desktop Application Development
This is a lot like mobile applications except you are creating applications that run on desktop operating systems like Windows, macOS, and Linux. This can involve various programming languages like Java, C#, Python, and C++. There are also some hybrid solutions for building desktop applications like Electronjs and the same constraints as in mobile apply here.

![desktop](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gc1u8nai4r437t2wz4yf.png)
 
### Game Development
All the video games we play are applications too and they can be built using specialized engines and tools like Unity or Unreal Engine. This field is highly specialized as combines programming skills with creativity and design. It takes some time and skill to get good at this, but the reward is worth the hustle

![game](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u9hvvdxte0ea5p035m4j.jpg)
 
### DevOps Engineer
They manage the entire process of enabling **Dev**eloper **op**eration**s** (DevOps). It typically involves some coding or automation to enable the IT operations involved in the software engineering process. After all the code has been written, it needs to be tested and deployed to production for our users to use it, this requires some IT operations to provision the servers, install dependencies, handle networking, data storage, and so on. 
 
![devops](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gbr6plaj0frgykdmzdt6.jpeg)

DevOps engineers focus on automating these processes enabling continuous integration and continuous deployment also referred to as CI/CD. 

The typical DevOps person also needs some knowledge of Cloud Computing from providers like AWS, GCP, Azure and the likes

### Quality Assurance (QA) Engineer
This type of developers are the unsung heroes of software development because they are the ones that write code to test the quality of code written by other developers to quickly identify bugs before it gets to the users ensuring software quality. 

There are many levels of testing and language used for testing largely depends on the language being tested. There are however some tools and libraries that can mimic user behaviour on applications making it easy to go on the user journey and identify issues before releasing the application to the users

### UI/UX Designer
These are not strictly developers, but I deem them worth a mention here because they are the ones that conceptualize the interfaces we have all come to know and love. UI/UX (User Interface/User Experience) designers work closely with frontend developers to create user-friendly and visually appealing interfaces.
 
![uiux](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7m9l8z3qu0xxkug5oj5f.jpg)

There are several other options like Embedded Systems Development, Cybersecurity Analyst, Cloud Computing Specialist, Blockchain Developer, Augmented Reality (AR) / Virtual Reality (VR) Developer, Machine Learning/Artificial Intelligence Engineer, Data Science/Analysis and more but for our scope we will leave it at this.

To reiterate, we will be going Fullstack because we are awesome and to this end, we will start with learning Javascript (the only language you can code in fullstack) in the next one.
 
![iron legion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmkro0kz1aer1o0o7k8l.png)

As always remember we are here to help and stay frosty

Previous post is [here](https://dev.to/jdonq/getting-started-in-software-development-a-path-to-a-rewarding-career-part-3e-functional-programming-and-oop-39ii)

Next post will be here