Full Stack Developers: Renaissance Men of The 21st Century
singularityhacker.com
singularityhacker.com
A true renaissance man (or woman) is someone proficient in much more diverse fields.
Anyway, compilers and interpreters ideas are very simple and powerful and beautiful because of that. There is no magic, however magical their workings may seem from the higher level :)
Isn't this a problem with much of software development, though? Most topics in the field are logical and easy to work with once you've spent a little time investigating them, but until you do, they can easily seem like black magic.
When the Web was young and all the modern "server languages" were still obscure infants, I used to think that working with CGI was some sort of impressive, specialist skill. One day, I discovered to my amazement that it was just a simple, text-based protocol that I could work with perfectly well using nothing but standard C and a bit of trivial printf/scanf code. After literally years of assuming I'd never be smart enough to work on web sites, my perspective changed completely in a single afternoon.
I must have had a dozen such epiphanies over a few years -- writing a simple compiler as we're discussing here, programming a game with graphics, dynamically linking libraries at run time, many more -- before I finally realized that usually the idea itself was quite simple but a poor choice of tools or just the lack of one good tutorial can make it seem impossibly complicated.
You're right, I think; compilers, machine code, operating systems, every single part of the computer down to the silicon (really, understanding the germanium doping that allow the transistors to work) including the electrical engineering, then the physics, and even chemistry that allows it to happen—that's really all part of the "full stack."
I think the true 21st century Renaissance Man (or Woman!) will have a broad generalist understanding of the entire technological craft, beyond even that which he needs to know to do his work. Will he ever need to understand the properties of silicon to make a web site beautiful? No. But he does anyway.
That's the point: the breadth of knowledge for the sake of it.
Having the knowledge and respect of every part of the stack allows you to know what you're doing in a way very few people can. It allows you to say Yes to so many more opportunities, to find the correct answer to thousands of possible questions if only by knowing the right person to talk to. It's the musician's flexibility of being able to play jazz and classical—it opens new doors and makes you better at both, in some unquantifiable way that no one quite understands.
So, put them on the list, and we'll talk Abstract Syntax Trees and A/B UI testing in the same sentence. Do they ever touch? Only at such a distance as to be nearly inconsequential to each other. But somehow, it makes you better at both to understand exactly how you get there from here.
I think the problem is that people avoid these things because they think that they are complex. I'd argue that they are not: it's just that the SW ecosystem commonly used in practice is all too bloated which may create this impression. (HW as well, compare x86 with something nice, for example MIPS :-)) Many people would probably be surprised how small and simple can many useful things actually be.
(Also, I have a growing suspicion that the complexity of the current HW/SW ecosystem is partly driven by their independent development, and partly by having to implement legacy stuff - case in point, you need a complex GPR allocator to generate efficient x86 code, and you need complex register-renaming HW in the CPU to actually process x86 code quickly. Simply raising the GPR count and redesigning the ISA would alleviate both sources of complexity. I'm growing increasingly fond of all those 1970's/1980's actual "full-stack" projects.)
Oh, and what computers use germanium doping? I'm not conversant with current technological processes, but the last time I checked, most microelectronic components used mono-crystalline silicon for bulk stuff, SiO2 for insulation, aluminum or copper for wiring, and P, In, As, Ga etc. for channel dopants. Is there some new heterogeneous SiGe technology in use that I'm not aware of?
Because the only thing anyone ever needs to do in the modern world is develop software projects, of course.
And I agree with you. Entering web development I had to know about: OS administration, DB managing, backend development (it was PHP then), front-end development (JS but with good knowledge of HTML/CSS), and on the top of it I had to know Photoshop basics and sometimes talk with client and users.
But... I can tell you now that I landed a decent job - that was HELL. I would never, ever go back to how it was then. You know, it's easy to know basics of DBA, but to be good at it? It's years of experience. The same for PHP and JS, even CSS is quite a huge and complicated beast - and I won't say a thing about Photoshop, because I still wake up in the middle of the night, scared to death, because of it. I had to become good with all these technologies at once, and that meant compressing years and years and years of learning and experience into a week. Or maybe a year, but it still was too much.
At the end of it - two years down the road - I was burnt out and uncertain if I want to work with computers anymore.
I now do almost the same, but without clients and users and with only two or three areas I want to be good at, leaving the rest to the teammates. It's ok now and I sometimes wonder what the hell I was thinking years ago. I probably was just young and stupid.
The funnies thing is that whatever I learned then I already forgot and whatever I still remember is now outdated and not useful at all. Was I just wasting my time, trying to be a "Renaissance Man"? I'm still not sure, but many things seem to suggest that.
and
> Understanding what the customer needs
Seem to be intended to go together but are really disjoint. Marketing the product isn't the same as understanding the needs of the customer. You can do both but they aren't implicitly the same thing.
Also, I don't quite understand how this is news worthy. It's an interesting thought, but there's no real discussion about any of this and as others have noted, there's no mention of Operating Systems or Systems Programming.
It does make me think that most people claiming to be full stack developers are jack of all trades, master of none.
To be a renaissance man just of computers, one has to have a clear understanding of the material, philosophy, money and culture flows; to experience the plight being imposed on miners in developing countries exporting rare metals and other materials that are refined and put together by tireless hands at sweatshops called the assembly line as shiny devices, to commiserate with the people who design it under the ever changing requirements and availability and shipping dates, to argue with those who work with the abstract and absurd fashions and philosophies of programming, to share the responsibility of the managers for hiring and firing the students and the family men and friends, and to sweat with the sales people at every step along the way.
When the renaissance man understands this, not only because of reading about it, or observing it, but having experienced it all, from the mining of the elements to the laying of the cables back to the ground, from the fluffy cloud pictures on the whiteboard to the actual nebulous reality of internet, he seeks to improve his skill, the living conditions of his family and neighbour, and the economy of his current living quarters, city and country, by working more diligently and more wisely.
And whether he succeeds or fails, the renaissance man thanks and reveres his God, and lives jovially with his neighbours and honouring his enemies.
That currently certain type of software happens to work easiest on a specific set of technologies, is but a mere detail, if well understood and fully mastered, to the renaissance man of computers. Reading the article, he would be delighted in his neighbours' interest in learning more, but might also be saddened by their strong self-importance that reinforces their narrow-mindedness.
End of rant.
An Engineer (with big E, as in Designer, Doctor or Lawyer) must know the business side of things, must understand how to design technical solutions that solve real problems, and must know how to factor in the costs in his designs, and must have a fundamental grasp of science and technology so that he can be versatile when needed (if he is "too" versatile, he is a generalist).
Of course, as a designer, the Engineer's designs tend to be bold but generally not deeply aesthetically pleasing. IMHO, to be a "Renaissance Man" an Engineer must also master aesthetic beauty, have a classical education and a deep fundamental knowledge of the humanities.
Update: If you click the "Credit" link at the bottom you are taken to another "full stack" list of items which I guess are assumed to be implicit prerequisites for this one. That seems like a pretty clear failure of items #5 and #6.
"Full-stack" has become trendy as slightly-with-it recruiters realize that the not-with-it rest of the corporate world encourages a certain combination of tight specialization and mediocrity in which people say, "I don't do 'back-end' " and that people who've been steeped in that world for a few years are undesirable employees. As it becomes an HRism, I'm starting to think that the new rule is: if you say "full stack", you're not.
I aspire to be competent over all sorts of technologies, but my definition of "the stack" is pretty expansive and I have a lot of gaps to fill.
Also, you're not a renaissance person if you don't understand science, mathematics, economics, history, art and literature (and much more) to, at least, a passable degree.
I've never described myself as a full stack engineer, but have worked on front ends, back ends, underlying language implementations, underlying database implementations, and so on, and I just consider myself a (hopefully good) engineer.