DEV Community

Vincent Milum Jr
Vincent Milum Jr

Posted on

Should I become a Front-End or Back-End developer?

This is a post that I've been meaning to write for quite some time now.

The question of "Should I become a Front-End or Back-End developer" pops up quite regularly, so I thought I'd pose the question here too. No, not for me, the author, but for you, the reader who may be new to programming and wondering which of these directions you should head in.

This question is usually phrased in such a way that the options are either-or, but never both. But more importantly, the question is usually phrased in such a way to imply that these are literally the only two avenues to pursue as an aspiring developer.

I want to offer you an exploratory thought experiment into the vast array of other possibilities that you could potentially explore if you want to get into software development. Front-end and back-end web development is only an extremely small fraction of what is out there!

Why might you consider other areas of development? Web dev is where all the hype and buzz is, surely that's the best possible path, right? Well, that honestly depends. Lesser talked about positions usually means there is less competition for those jobs, and with less people applying, they often offer higher payouts as an incentive to try to get the best possible candidates for these less popular jobs.

But, you may ask, "what ARE these other possibilities as a developer?"

Let's start by expanding on the idea of a web developer. The core back-end languages and toolkits used today revolve around PHP, Node.js, Python, Ruby, .Net, and other similar languages.

Now think of each of the libraries for these languages.

Do you include a module to access a database? Ask yourself, "who writes that library?"

How about something that parses JSON? Or generates JSON for data? Same for XML? What about the library that reads the metadata from a JPEG image file? Or how about the library that fetches HTTP(s) content from another system?

Each of these libraries are pieces of code that someone, or a group of people, wrote, manage, and maintain. These types of libraries are often open-source, and available to accept contributions too!

But how did they come into being? Usually someone is working on a particular project, saw a need, wrote some re-usable code, and decided to package it up as a library.

One such example is when doing web development in PHP, I was frequently writing complex SQL queries to interact with my databases. Over time, I realized most of the code was repetitive, so I eventually bundled it up as a separate library and published it publicly.

Sometimes it may be something that seems simple and trivial, but it can save a significant amount of someone else's time to research. Another library I published is a single file, a single function. It translates shipping/tracking numbers into a URL for each shipper's tracking web site. Pass in a USPS tracking number to the function, and it spits out the URL for tracking that particular USPS package. Not terribly complex, but it means the research of several different tracking number formats can be crowd sourced! As users of the library handle other shippers, they provide those shipper's tracking number formats as either issue tracker items or pull requests, and everybody benefits. :)

Now let's take things into a slightly more complex direction. Computer languages don't inherently exist on their own, and they get updated over time. How exactly is this?

The ability for a computer to read and understand code such as PHP or JavaScript inside of Node.js are themselves programs written in other languages. These are also areas of active development. Some of them have high profile companies backing them, such as .Net from Microsoft, Go from Google, Swift from Apple, or Hack from Facebook. Each of these languages has an entire team of people who work on them full time at their respective companies!

Let's take a step back for a second, and look at the wide picture instead.

Are you a Mac user? Or Windows? What about Linux? Or possibly even FreeBSD? Each of these are also programs that have people actively maintaining them!!! Well, kinda...

Yes, each has a mountain of people that work on them. However, they're each not an individual program. They're collections of programs all bundled together, often maintained by entirely separate teams.

For instance, the Windows Start button is an entirely different codebase managed by entirely different people than Notepad!

But this doesn't stop at just user-facing desktop applications.

An entire computer is layers on top of layers of different types of programs all interacting with one another.

Your keyboard for instance is most likely USB (even possibly true if you're on a laptop, with an internal USB connection). There is firmware on modern keyboards that accept the key presses, and then sends the signal over USB back to the USB root device.

Think to yourself: "who writes the keyboard firmware?"

But then the USB root communicates back to the rest of the system, sometimes over PCI-Express.

Think to yourself: "who writes the USB interface code?"

And then there is a keyboard driver in the operating system to receive and interpret those commands.

Think to yourself: "who writes the keyboard drivers?"

From there, the driver sends a signal to the operating system kernel to handle and route.

Think to yourself: "who writes the keyboard kernel subsystem?"

At that point, the keyboard subsystem routes the message to the active, in-focus application though the kernel's ABI (application binary interface)

Think to yourself: "who writes the ABI?"

Now let's say our application just so happens to be a web browser. This web browser is displaying a form on the screen with several elements that are interactable.

Think to yourself: "who writes the browser code to handle the keyboard event, sending it to the right focused item on the web page?"

And all of this is for a single key press, every key press, every time you type.

Web browsers can do quite a bit more than just accept keypresses though. They send and receive data over networks using a variety of protocols, encrypt your data for privacy and protection, decode and display a variety of photo, audio and video formats, and countless more features.

This may seems like a single monumental task, but that's not entirely the case. Instead, like mentioned previously, this is all handled via a collection of smaller, simpler libraries. Most of these libraries are maintained entirely independently of the browser itself.

Curious what these libraries may be? In Chromium based browsers (Google Chrome, Microsoft Edge, Opera, etc), Go to "Settings" > "About" and click on "open source software". Microsoft Edge that I'm typing this on currently has 371 libraries listed.

Do you use the command line interface in your operating system?

Every single CLI command is a program or a script that somebody at some point wrote.

Who wrote all of those commands? Who manages and maintains them? And who will write the next iteration of them? That could possibly be you!

But what happens when we step away from the desktop computer, what else is out there?

Think to yourself...

Who writes the user interface for my smart TV?

Who writes apps for cell phones?

But wait, who writes the OS itself for the cell phones!?

How about those IoT devices, who writes the program for those smart outlets, smart switches and other IoT devices?

And how about those drones everyone loves to fly, who writes the software for those?

This being the Christmas holiday season, who writes the microcontroller code that allows Christmas lights to blink?

Who programs the digital interface on your microwave or stovetop?

Who programs the traffic lights when you're driving down the road?

What about digital signs on billboards and in windows of businesses?

RGB LEDs are all the crazy right now! But who writes the code for those to change color and blink?

... lastly, obligatory ... who programs the VCR?

But this is still nowhere near an exhaustive list of areas a programmer can explore! This can also become quite overwhelming very quickly, being flooded with endless possibilities.

The vast majority of these, however, can be broken down into a simpler context: problems and solutions.

In the end, all we're doing as developer is using structured commands to have electronic machines solve problems for us.

So next time you think to yourself "should I be a front-end or back-end web developer", change that up to "which problem am I trying to solve, and which set of tools would best solve it?"

It may be that extending an existing library might solve the problem at hand. It may be that a new command line tool could solve it too. Or maybe it does require a nice web based graphical interface. It all comes down to what tools are available, and which ones are the best at the time to get the job done.

Top comments (14)

Collapse
 
funbeedev profile image
Fum

Very well said. It seems the default path for any new developer these days is front or back end development or more specifically, web development. Maybe for people new to coding they aren't aware of all the different fields programming is used for..

For anyone new to coding I encourage to first spend some time exploring the different possibilities as mentioned in this article. It would be nice to see more people interested in Embedded programming :)

Collapse
 
darkain profile image
Vincent Milum Jr

Yes, exactly this!! In my spare time, I absolutely LOVE playing with Arduino compatible microcontrollers. I have a whole fleet of ATTiny85, ATMega328, ESP8266, ESP32, and ARM based boards to tinker with.

Due to all of my work in this field, at one point I was in the running for a position as a BlueTooth firmware engineer. This is one of those types of dev jobs nobody talks about, but is full of awesome things. A lot of BlueTooth devices are either media, video game, or toy related. Its all super fun stuff! :D

Collapse
 
theowlsden profile image
Shaquil Maria • Edited

Thanks for writing this article, in my opinion this is a very needed discussion to be had with new developers. Over the last months, all I see is articles about frontend development and sometimes backend, but guess what in JavaScript. I think that over the years, as things started to shift more towards web, the younger people started seeing that as the only field that is important, but they fail to recognize that while yes, there are a lot of websites and web applications being published everyday, there is a whole world of interconnected parts that make it possible to use these web apps. I highly encourage software engineers and enthusiasts that work on every other part of the technology ecosystem to share their experiences and shine a light on their work.

Collapse
 
darkain profile image
Vincent Milum Jr

So much of this!!

I personally work for a global telecommunications company.

Other devs see a nice simple web API to send data, and think it just automatically "works"

That other company that produces that API end point then accepts the data, and relays it to my company to handle the global transport routing. My company then forwards that data off to the desired destination company, who then processes that data and sends it to the appropriate endpoint device within their network.

Out of all of this infrastructure, maybe 5% was actual "web" based (the HTTP end point for the initial API call). None of the transport across the various networks otherwise was.

But these are the things that are hardly talked about. No buzz, no hype.

It would be cool to get more people interested in this type of tech though!

Collapse
 
theowlsden profile image
Shaquil Maria

When I did my internship at a local company that creates solutions for telecom and other sectors I realized how many, let's call them transactions, take place outside of web realm. Even though I created a web interface for their solution as my internship project and did not interact much with other tech, I came to appreciate the world of tech besides web.

But these are the things that are hardly talked about. No buzz, no hype.

Facts, and I think this is because of the complexity of things, we need to find a way to create hype about complexity in software development.

Collapse
 
bendtherules profile image
Abhas Bhattacharya

Sorry, but it seems like a fluffy post to me.

  1. Author has not named any of those areas of work - so you can't really search for one of those paths or visualize a career path. Most of them would fall somewhere between a Systems Engineer and some specialization of Hardware/Electronics engineer.

  2. Most of the job openings are nowadays in frontend/backend role - which i think is the main reason why people think of these 2 paths. Backend/SDE engineers can then work on some of the system-level stuff depending on the company and requirements.
    If you want to stay in a specific specialization like mentioned in the article, research the job market first.

Collapse
 
darkain profile image
Vincent Milum Jr

This was all addressed in the initial post.

These jobs do indeed exist, but they're less common, thus they generally pull a higher payout. Why? Because they're harder to fill, because there are less candidates applying for them. But this also means there is less competition, so the jobs tend to be easier to land.

As far as hardware/electronics engineer. Yes, a couple of the examples could be labeled as such, but that's missing the overall point of the article. Countless other examples in the article talk about tools developers, library developers, component developers. This is all purely software. But that still defeats the entire point, which is to look at the entire world around us, and see how much of it is handled by code, and exploring the possibility of being that person who writes that code.

The article is a thought experiment, not a technical resource guide on how to find one particular job.

Collapse
 
bendtherules profile image
Abhas Bhattacharya

Won't most library developers (working in a company) have a title very similar to SDE?
By backend role, SDE is the position most people refer to - which has a familiar recruitment process and then you might land up working on some library. Its very hard (i would imagine) to plan your whole career exclusively as a library developer.

The point i am trying to make is - many of these are sub-track of backend developer track, because of how recruitment process works. Sure, it's good to think about them, but very hard to plan your career around one specific sub-track.

Thread Thread
 
darkain profile image
Vincent Milum Jr

Not necessarily. For instance, in my current role, I'm the lead database administrator for a company. Nowhere in the job description or hiring process was programming apart of it. However, the role was mostly open-ended to "solve things as you see fit". There were some internal tools already in place, as well as 3rd party tools. I lead the initiative to replace the external tools with internal tools that better met the company's need, as well as re-write the internal tools. This lead to the creation of some re-usable libraries that are now available to other teams.

And this is a trend I've repeated countless times in the tech industry. My first "real job" ~16 years ago, I was hired to simply do data entry for an early ecommerce company. I wrote some code there to automate most of the process.

None of this is what would traditionally be thought of as "back end" development, as none of this had anything to do with web dev at all. These would be more categorized as "process automation" which historically landed under titles such as Systems Analysis and Design.

There are many paths to becoming a dev, and many destinations that are not even remotely related to web dev. :)

Collapse
 
darkain profile image
Vincent Milum Jr

I'm going to go out on a limb here and say it isn't a lack of interest, instead, it is a lack of insight into the alternative even existing. People don't know what they don't know. Without active discussion around these other areas within our fields, there is limited ways to discover them. Web dev has a lot of hype, buzz, and discussion right now, so discoverability is easiest.

I've now made it my goal to try to push discussion of these other areas of development as much as possible, this article being the first of that push :)

Collapse
 
jeffbbz profile image
jeffbbz

I don't think the problem is the person just starting out or looking to learn. Personally, I'm far less interested in webdev front/back end than I am in embedded software/firmware, OS development, and desktop apps for video editing/gfx/manipulation of video. Those are the things I want to get into. But everywhere I look I can only really find webdev stuff. Most bootcamps are focused on that, most teach yourself paths are focused on that. Is there an Odin Project for this? Is there something less guided but still follow-able? If so please point the way!

Collapse
 
darkain profile image
Vincent Milum Jr

Oh most definitely! Instead of looking for "development" tutorials, try searching for IoT (internet of things), arduino programming, raspberry pi programming, video game programming, or systems programming.

Over in the FreeBSD community, we have a discord and several IRC channels dedicated to different topics, including programming in general (not specific to FreeBSD). Please feel free to join and start chatting away! :D discord.com/invite/n2wshsy

Collapse
 
inaju profile image
mitchel inaju

Thanks for writing this, I've been opened up more to possibilities that exist and to embrace solving problems in other areas

Collapse
 
darkain profile image
Vincent Milum Jr

Awesome, glad to hear it! :D I hope to see great things come out of this. :)