A New Definition of Full-Stack Developer
Job titles are are touchy subject. Some people wouldn't know or care what their job title is, while others let it define their sense of self-worth. "Full-Stack Developer", which has a connotation of all-encompassing knowledge, has recently emerged as a popular option. For instance, in the 2016 Stack Overflow Developer Survey 28% of respondents identified themselves as "Full-Stack Web Developers".
In the 2017 Stack Overflow Developer Survey, the question format was changed a bit, to focus only on web developers. Correcting for this difference, the number went from 28% in 2016 to 29.3% in 2017. That's a slight increase.
This got me thinking about "full stack" and what that means in the scope of hardware-software convergence. What do you call a person who can design a PCB with an ARM processor, then run a secure, public-facing web server on it? What title is the person who understands the physics of a sensor that touches the physical world and can also write a driver, a Node module, or a make a web D3.js plot of the data?
What do you call a person who can design a PCB with an ARM processor, then run a secure, public-facing web server on it?
I don't know what that job title is, but there are becoming more and more of these people in the world. And the reason is: the technology is accessible. Why wouldn't you use it?
On the hardware side, we have tiny, cheap computers that anyone can easily interface with the physical world (i.e., Raspberry Pi, Beaglebone). We have places to buy sensors and parts and get ideas (i.e., Adafruit, Sparkfun). We have great free design tools (i.e., Kicad, EaglePCB) and good options for small-batch manufacturing (i.e., OSHPark, Seeed Studio, ITEAD, MacroFab). This explosion in accessibility has brought custom hardware design and manufacturing to every startup, laboratory, and enthusiast.
On the software side, the we have polished, enterprise-grade frameworks and libraries available to everyone at any scale. Think Linux, Nginx, Angular, React, etc. Add to that the availability of cloud virtual private servers, cheap hosting, cheap domains, and ubiquitous networking.
When there is nothing stopping you from using a technology, there is nothing stopping you from learning.
When there is nothing stopping you from using a technology, there is nothing stopping you from learning. And this is why people are sliding over the artificial hardware/software barrier.
What would a technology stack look like for this kind of person who slides between hardware and software domains? Maybe this:
- Interact with a Human
- UI and UX
- Client-side platform
- Long-distance transport
- Data processing
- Raw data transport
- Data acquisition (or output)
- Signal conditioning
- Sensors (transducers)
- Our physical world
Where do you fit in? On what part of this stack are you most comfortable?
If you feel at home at the bottom of the list*--closer to the physics and raw electronics--*consider reaching up a little higher on the stack. You might find it's more accessible than you thought.
And if you feel at home at the top of the list, like most of the 64,000 respondents in the 2017 survey, consider reaching a little farther down the list. I know you'll find that this is not a foreign world and you will not be alone. The technology has come to you. Reach out and accept it.