What kind of Developer do I want to be?
Tags: beginners, programming, webdev, career
Published: 2021-11-24 06:55:20

Whether you're just starting your journey in the technical field, half way through, or fully integrated, it's always a good practice to step back in your career and ask yourself a few things: 
######(we're going to assume at this point, you've made the decision to pursue the life of a "Developer"/"Engineer"/"Programmer" -- if you're looking for a "Is tech the right choice for me?" article, this won't cover it.)


1. Why am I pursuing this role? 
  * Why am I in the role that I'm in now?

2. Am I still passionate about what I'm pursuing?
  * Am I still passionate about what I'm doing?

3. Where do I want to go next?

With these questions and maybe answers in mind, lets consider some options to help you build the best career path for you! 

###### I want to mention that this isn't a say-all-do-all article, I wanted to create this article to help inspire or re-inspire  people about their career options and path. You should continue to do research about the many titles developers hold, and decide what's right for you.

##The Journey
The timeline of an engineer will generally be forever growing as you know may know we are what they call "eternal students". However, at the beginning it falls along these lines, and when you're looking into roles, consider where you are in this timeline.

#### Chapter 1: Introductions to programming and code.
This is the start of your journey as a programmer; where you'll learn all the important fundamentals of code.

#### Chapter 2: Experimenting 
You're at the point where you're trying things out, learning a new language, and discover what you like and dislike.

#### Chapter 3: Specialization
Picking a focus area and become an expert in that area.

#### Chapter 4: Expanding / Building on other skills and/or more technicality 
At this point you know what you want to do and you're looking at the best way to develop things like your leadership skills, communication, business development, or building a *new* language

... and you can keep building from there. The possibilities are endless, it just depends on how much effort, time, and money you're willing to put in.

--

### Quick Side-bar on the what it means to be a "Software Engineer" vs "Software Developer" vs "Programmer"

I don't want to go into too much detail about the naming convention of the titles as a "Programmer", but I do want to mention it because I think it's important to acknowledge what it may mean in the professional field. I personally think they can be interchanged.

***The Programmer***: This is someone who knows how to code, They know at least one programming language and know it well enough that they can make things happen by typing the code into their computer.

Some programmers graduate from a university with a computer science degree and know how to code. They would qualify. Others pick up a book and teach themselves to code on their own. They would qualify too.


***The Developer***: When someone talks about a developer, sometimes they use the term to mean something more than programmer. A programmer asks me, “what should I code?” or “how do you want me to do it?” In those cases, I'm making the bigger decisions and the programmer is implementing things.

Developers have enough experience to have seen problems before and to know what worked and what didn't. With developers you can normally describe a destination, and they design the route they'll take. The difference between a programmer and a developer is one of degree. One is more resourceful than the other. Moving from one to the other requires time, effort, and experience.

***The Engineer***: Software engineers are a different dynamic altogether, for some. It's because of the “engineering” part of the term.

To remind you, it doesn't matter where/how software engineers gain their knowledge. It's not suggesting they must have a degree. Engineering is a discipline. It requires that you know a set of knowledge. Engineering requires a level of abstract thinking. We're not just talking about creating a plan before you write code. We're talking about creating mental models of how the parts of a system will work. Models that help you refine your designs.

Conclusion: At the end of the day, what really matters is what you want to call yourself and what you believe you are. There is no "right" or "wrong" to how you title yourself (so long as you're being honest to yourself). This side-bar was just to touch on some opinions on what the title means to some people in the industry. “***Good programmers are good programmers, no matter what special title they have.***”

-- 

##The Roadmap - Where to start.
So if you've done any searching around into different 'developer' titles, you'll quickly realize there are about 100 different tiles you can choose from. Narrowing that down can be daunting when you're first starting out, but the good news is a lot of them can be categorized into larger 'umbrella' role-titles to help your narrow your focus.

###Front-End Developer
Builds websites by converting data to a graphical interface for the user to view and interact with. Their main concerns relate to the presentation layer; they need to have some artistic vision to present the data; this generally implies mastering HTML, CSS, some CSS pre-processor like SAS, and some (mainstream) JavaScript frameworks such as Angular, React or Vue.

#####Non-Technical Qualities to have:
- Project Management
- Excellent Communication 
- Time Management
- Quick/Effective Decision Making
- Working under pressure
- Attention for visual detail

#####Am I a fit?
- I like to work with people, whether it's team-members or clients, and being able to bring someones idea to life.
- I work well under pressure and I can handle eyes on me and my work
- When push comes to shove, I can make a yes or no decision on project capabilities, features, and deadlines

#####Technical Skills
HTML, CSS, Vanilla JS, jQuery, Content management systems 
BONUS: UX/UI Design Skills, Adobe Suite, Branding, Creating Guide Styles

#####Various Titles
- Front-End Engineer/Developer
- Web Developer/Web Designer
- Front-End Architect
- Presentation Layer Developer
- Interface Developer


#####Thinking
Mock-up/Storyboard
Receiving a mock-up or storyboard from a client, ux/ui designer, or design team.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o4u93kcqs4a3an4ykpbj.jpeg)
Plan of Action
Thinking about the time it will take to build each component; is it going to be one page, multiple pages, what data is this pulling from, what are we consistently changing?
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zsra483qg7qlwdm3j9ql.jpeg)
Building Dynamic Code
Creating code that any developer can read and iterate on. Making the most of re-usable code on multiple pages
HTML
Properly labeling and id-ing items so they can easily be accessed in CSS or through a CSS program
```
<head>
<meta name="description" content="">
<meta name="author" content="Tooplate">
<title>ArtXibition HTML Event Template</title>
</head>
<body>
<div id="js-preloader" class="js-preloader">
      <div class="preloader-inner">
        <span class="dot"></span>
        <div class="dots">
          <span></span>
          <span></span>
          <span></span>
        </div>
      </div>
    </div>
</body>
```
JavaScript
Creating component based elements and styling your code so that it's easily manipulatable and readable. Notice that when you create something you want to be able to think about where and how it can be used else where.
```
function focusable( element, isTabIndexNotNaN ) {
	var map, mapName, img,
		nodeName = element.nodeName.toLowerCase();
	if ( "area" === nodeName ) {
		map = element.parentNode;
		mapName = map.name;
		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
			return false;
		}
		img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
		return !!img && visible( img );
	}
	return ( /input|select|textarea|button|object/.test( nodeName ) ?
		!element.disabled :
		"a" === nodeName ?
			element.href || isTabIndexNotNaN :
			isTabIndexNotNaN) &&
		// the element and all of its ancestors must be visible
		visible( element );
}
```
CSS
Matching the styling to the mock-up while also making it the most dynamic by applying proper class and IDs.
```
html, body {
  font-family: 'Poppins', sans-serif;
  font-weight: 400;
  background-color: #fff;
  font-size: 16px;
  -ms-text-size-adjust: 100%;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

a {
  text-decoration: none !important;
}

h1, h2, h3, h4, h5, h6 {
  margin-top: 0px;
  margin-bottom: 0px;
}
```
#####Pay
In US with 1-3 years of experience at a mid-size company: ~$97k (Junior)
In US with 8+ years of experience at a mid-size company: ~$124 (Senior)

#####Things to consider
- "Web Developer" is the #1 searched job-title in the development field
- "Front-End Engineer" is the #4 top ranking

#####You should reconsider if...
- You are not looking to have EXCELLENT communication skills
- Don't enjoy working with a lot of different people
- Crack under pressure
- You are not the most design-oriented person and don't wish to be 
- You are not great at managing multiple tasks and deadlines


---

###Back-End Developer
Builds the functionality and interactivity of a website, including the elements that allow users to carry out actions like logging in, creating an account, and user data input. Backend developers work implementing the business logic. They have to have knowledge of frameworks, software architecture, design patterns, databases, APIs, interconnectivity, DevOps, etc. They need to be able to manage abstract concepts and complex logic.

#####Non-Technical Qualities to have:
- Logical and solutions oriented 
- Abstract thinking
- Pattern recognition 
- Communication with team
- Detail & Security Oriented
- Researcher


#####Am I a fit?
- When I'm given a problem, I like to take a moment to write down solutions and how to get there
- I'm always looking for more interesting ways to solve problems and make it adaptable - its not always about what is the 'shortest'
- I like creating systems for more efficient ways to execute on tasks
- I want to be sure that I have a calculated risk before I go in on something and consult with others

#####Technical Skills
Python, Java, PHP, MySQL, C, C++, Ruby

#####Various Titles
- Software Engineer
- Back-end Engineer
- Data Engineer 
- SQL/Java/[language] Engineer
- Network Engineer

#####Thinking
Data from server/website/network
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hiy7p27rd0hi2zxg9upc.png)
Creating a framework for where data comes and goes as well as functionality (what to do with it)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nncu15sjel6goxqubyl.png)

Building the code to consider time-space complexity but also be dynamic when needed. Data should be easily accessible by other teams and placing security measures where important data is passed. Commenting to allow other engineers to easily iterate.

``` 
class Job: 
    	def __init__(self, start, finish, profit): 
    		self.start = start 
    		self.finish = finish 
    		self.profit = profit 
    
    
    # A Binary Search based function to find the latest job 
    # (before current job) that doesn't conflict with current 
    # job. "index" is index of the current job. This function 
    # returns -1 if all jobs before index conflict with it. 
    def binarySearch(job, start_index): 
    	# https://en.wikipedia.org/wiki/Binary_search_algorithm
    
    	# Initialize 'lo' and 'hi' for Binary Search 
    	lo = 0
    	hi = start_index - 1
    
    	# Perform binary Search iteratively 
    	while lo <= hi: 
    		mid = (lo + hi) // 2
    		if job[mid].finish <= job[start_index].start: 
    			if job[mid + 1].finish <= job[start_index].start: 
    				lo = mid + 1
    			else: 
    				return mid 
    		else: 
    			hi = mid - 1
    	return -1
    
    # The main function that returns the maximum possible 
    # profit from given array of jobs 
    def schedule(job): 
    	# Sort jobs according to start time 
    	job = sorted(job, key = lambda j: j.start) 
    
    	# Create an array to store solutions of subproblems. table[i] 
    	# stores the profit for jobs till arr[i] (including arr[i]) 
    	n = len(job) 
    	table = [0 for _ in range(n)] 
    
    	table[0] = job[0].profit; 
    
    	# Fill entries in table[] using recursive property 
    	for i in range(1, n): 
    
    		# Find profit including the current job 
    		inclProf = job[i].profit 
    		l = binarySearch(job, i) 
    		if (l != -1): 
    			inclProf += table[l]; 
    
    		# Store maximum of including and excluding 
    		table[i] = max(inclProf, table[i - 1]) 
    
    	return table[n-1] 
    
    # Driver code to test above function 
    job = [Job(1, 2, 50), Job(3, 5, 20), 
    	Job(6, 19, 100), Job(2, 100, 200)] 
    print("Optimal profit is"), 
    print(schedule(job))
```

#####Pay
In US with 1-3 years of experience at a mid-size company: ~$117k (Junior)
In US with 8+ years of experience at a mid-size company: ~$154k (Senior)

#####Things to consider
- Back end development can be offered as an independent service in the form of BaaS
- The backend web developer should understand the goals of the website and come up with effective solutions which also means understand the front-end well

#####You should reconsider if...
- You generally give up after a few attempts at a problem
- You are quick to asking someone else for the answer before researching on your own
- You are more reactive and less risk-accessing 
- You have don't like looking at data and working with algorithms

---

###FullStack Developer
Is able to work on both the front end and back end portions of an application or website. A full stack developer has specialized knowledge of all stages of software development, including server, network, and hosting environment; relational and non-relational databases; interacting with APIs; user interface and user experience; quality assurance; security; customer and business needs. Being a full stack developer means taking a holistic view — comparing the pros and cons of both back-end and front-end before determining where the logic should sit.

#####Non-Technical Qualities to have:
- Flexibility and adaptability
- Very big team player and/or team leader
- Strategic thinking
- Communication skills are stellar 
- Creativity 
- Analytical 

#####Am I a fit?
- I can work well in most environments, whether it's internal or external
- I enjoy when something looks great, but also works great.
- I enjoy challenges and am determined to solve them in the most efficient way
- I like to plan things out to the detail and can communicate what I am capable of doing and not capable of doing to my team

#####Technical Skills
Front-end Languages and Frameworks (HTML, CSS, JS), Backend Technologies and Frameworks (Python, Ruby, SQL)

#####Various Titles
- FullStack Developer
- Solutions Engineer
- FullStack QA Engineer
- Software Developer

#####Thinking
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csrr7ypj1mheyk2c7vf4.png)

#####Pay
In US with 1-3 years of experience at a mid-size company: ~$96k (Junior)
In US with 8+ years of experience at a mid-size company: ~$128k (Senior)

#####Things to consider
- As a full stack engineer you have a lot of opportunity to grow and decide if you want to stay full stack or go into something more specific
- You are a highly sought after hire currently because of your ability to do both front and back end.

#####You should reconsider if...
- You don't really enjoy doing both design/creative work and data manipulation
- You don't like working with multiple teams
- You don't have great time management or like to work on a more leisure schedule

---

###Mobile iOS and/or Android Developer
Builds apps for mobile devices, including iOS and Android. A mobile developer might use Java, Swift, and Objective-C. Mobile developers can be conditionally called the front-end developer, since they mostly works with the app’s interface. However, they also play the role as the back-end developer when it comes to more complex builds that require internet connection and server communication - so in general, they stick to the Mobile Developer title.

#####Non-Technical Qualities to have:
- Business knowledge
- Agile Methodology
- Collaborative
- Creative
- Communication

#####Am I a fit?
- I really enjoy the idea of having technology be mobile and making it functional
- I like to think about the way people use their phones and how certain apps are ran
- Before I go into something, I like to do more research on my audience and who might be looking at my work
- I take feed back well and work very well independently and on cross-functional teams

#####Technical Skills
Linux/Unix, Phython, Perl, Shell Scripting, Java, C#, Swift, ORACLE, Apache, iOS
- Design: UX/UI
- BONUS: Business Research, Business Development, Analytics

#####Various Titles
- Mobile App Developer
- App Developer
- iOS Engineer
- Android Engineer

#####Thinking
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbzt2c0zgobd8avvlful.png)

#####Pay
In US with 1-3 years of experience at a mid-size company: ~$94k (Junior)
In US with 8+ years of experience at a mid-size company: ~$115k (Senior)

#####Things to consider
- There will always be a high demand for Mobile App Devs and their skill set is very specific to the Mobile environment. That being said, if you can do it you won't be out of work or find it hard to get work.

#####You should reconsider if...
- You aren't on your phone a lot
- Don't use a lot of Apps
- Don't have an interest in mobile apps
- Don't want to think about internet on phones


--

# Conclusion
I built this with the intention of helping people understand more about some of the most common titles as a Developer to help make better developers. I hope this was helpful.