Skip to main content

What does "Full Stack" mean?

I've been a software engineer for a little while and I see the term "Full Stack developer" more and more, but what does it mean?

Okay, let's walk through what a complete system will comprise of and see if we can work it out.

UI

First (from the users perspective) is the UI. It's how they interact and really all they care about (as long as the application does what is expected of it. Here is a list of some UI technologies that I know of
  • AWT
  • Swing
  • Qt
  • Android XML
  • MFC and VB
  • OpenGl
  • Vulkan

Communication Protocol

Next up is the communications protocol (as most applications these days are a thin UI talking to a backend server (we've gone back to the mainframe era!)
  • RPC
  • FTP
  • SNMP
  • SMTP
  • DDS
  • ActiveMq/RabbitMq

Network Layer

The communications protocol has to be transported between the client and the server somehow, so here we have the network layer

  • IPX/SPX
  • Token Ring
  • Bluetooth
  • USB

Server

So now we have data being transferred between the UI and the server, but it can't just appear at the server, there's software to write.

API

there have to be endpoints that can accept the requests from the UI, so here we have the server side of the network protocols
  • RPC
  • FTP
  • SNMP
  • SMTP

Processing / Storage

And here is where the actual work gets done, here is where we put the "Business processing" and store data for later use. Business processing can be done in any language, COBOL used to be the top, but I'm pretty sure it's not used that much in modern applications (so much for my diploma project). But it could also encompass larger technologies and not just the language used.
  • PL/8
  • Fortran
  • Smalltalk
  • Ada
  • CUDA
  • Beowulf
  • MPI
  • OpenCL
And data has to be stored for later use:
  • Structured data
  • Unstructured data
  • Bitstreams
  • HEX dump

OS

All of the above technologies sit on top of an OS, which is (normally) a very complicated beast (actually QT can run on the bare metal, but then it's acting as the OS).
Kernels can be broken down into quite a few different categories such as monolithic and microkernel and distributed to name a few. but the kernel is only part of the OS, there are a whole host of other parts (memory management, filesystems etc...) without which the OS would not function.
This is a whole series of articles in itself (which I may go into one day), but there are many OS's/Kernel's out there which could be used
  • Amoeba (distributed)
  • Plan 9 (distributed)
  • AIX
  • Mach
  • HURD
  • L4

Conclusion

One thing I have deliberately done in the above sections is (try) to avoid mentioning any of the technologies typically associated with a "Full Stack" developer. I dougt that any developer would be an expert in writing the assembly code to get a CPU to boot, initialising the MMU (and other CPU's in an SMP system), then writing all of the drivers so that the OS is ready for an application to be written on top of it.

and why develop all of these things when there are so many options out there? So what does this oft used term mean then?

from what I have seen it is actually referencing a very specific and narrow set of technologies. Namely Java, Javascript and HTML (and maybe docker or kubernetes and node).

but here again, we are being far too vague (well HTML is okay)

when someone says they "Know" Java, I can bet you that they don't. What would happen do you think if I was interviewing a "Java" developer and asked them how they would store a list of objects in a JavaME application? Yes, I know some would be able to answer it, but how many "Full Stack" developers would?

or how much storage they would typically have for a JavaCard application? or how about quizzing them about their AWT knowledge?

I'm pretty sure that they would flounder, yet all of these are part of Java. There are also the libraries and frameworks that go along with Java like Spring and JBoss, so anyone who says they "know java" can be considered to be stretching the truth.

It's the same with Javascript, any advert that ask for "Javascript" really mean Javascript plus quite a lot of the thousands of Javascript libraries out there. but which ones?

So what does Full Stack really mean? as far as I can tell it's just another meaningless buzzword used by recruiters to make them sound like they know what they are talking about.

Comments

  1. Well put together post Andy. Interesting even for a non programmer like me.

    ReplyDelete

Post a Comment

Popular posts from this blog

Triathlon Training in the new year

So, my 2019 training has got off to a good start. I'm running regularly and my knees seem to be holding up. I've got a training plan to get me to a middle distance triathlon in September and I am managing the run distances I have set myself. I need to find some longer cycling routes to work and ones with a few hills too, but that shouldn't be a problem. my weekly cycling distance is okay, I just need to move to get my ebike to be doing less of the work. last week I did use my normal commuter bicycle and managed the whole four days as well as my runs, so that was a really good sign. Swimming won't be an issue, I have always found that to be the easy part of a triathlon (not that I'm fast, but I can keep going, and I did manage to swim the distance within the cut off time when I tried the ironman 70.3 last time) The main worry about going longer is my knees. I've got a 10K booked in late January which will test my knees out and I'm hoping that they hold

Windows Subsystem for Linux Internals

Background Windows Subsystem for Linux was developed by Microsoft to enable command line programs compiled for the Linux operating system to be executed on Windows. To explain the architecture I would like to show the evolution of OS design and how that has enabled this subsystem to be built. Dark Ages (or Back in the Day) Microsoft's MS-DOS was quite primitive in its design (compared to today's OS's). It is a single user OS that can execute one process at a time. DOS had an application programming interface to allow user programs to access some hardware in a device independent way, but only for character-based applications. This allowed applications to display graphical elements emulated with text characters as these screenshots of Microsoft word for DOS show: This is Microsoft Word version 1. To use these programs you had to remember key combinations to bring up the menus and used the cursor keys to navigate around the screen. If the a