Over-specialization is the curse of our profession
onebigfluke.com
onebigfluke.com
However, there is a limit to this. A back-end guy should still have some idea what goes on front-end and vice-versa. So, the key is to be an expert at what you're best at, but not to be a dummy at what you're not as good at.
[On a side note, I don't see why specialization should create contempt. In my opinion, it should breed appreciation]
"When I'm doing back-end development, I love having a front-end guy who can make it look pretty"
How that sounds to me:
"When I'm done with a hard day's work, I love having a wife at home who can make me a drink"
Seriously! Read what you wrote.
When a back end guy says, "Hey front end guy, make it look pretty" -- that's not showing much appreciation for what they actually do. Front end guys: is what you do just making things look pretty? Or maybe it's closer to understanding how people actually use a product. And designing a UI that can cater to both novices and experts, etc.
I, for one, read "make it look pretty" as "make it look like something people would want to use".
Having specializations work for developers, not against. Consider all these technical lead sort of job openings in start ups asking the developer to execute everything from being archetecture to test/development to deployment. If you want to subject yourself to this, by all means, but keep in mind that there are developers who just want to go home at 5.
For example:
*
I'm sick of the distinction between developers and operators.
The developers think they're hot shit because they solve the big problems. They know how to scale. They look down on operators who are only solving trivial problems. Developers build the real things. They don't have time to learn about Apache configs or how to determine how many servers to allocate to a task. Without them, a project can never be successful.
The operators think they're hot shit because they're the closest to the metal. They know to perfect an infrastructure. They look down on developers who have no idea how the product is actually run and who don't get woken up at night when it breaks. Operators build the real things. They don't have time to learn about the rails stack or wretched languages like JavaScript. Without them, a project can never be successful.
You're both wrong. You must do both or you'll be irrelevant (somewhere).
Over-specialization is the curse of our profession. Stratification breeds condescension. The only remedy is for all engineers to do devops.
Ditto with Dev vs BA.
Ditto with Dev vs DBA.
Looks like the recurring theme here is Dev vs X
I'm sick of the distinction between Surgeons and physicians. The surgeons think they're hot shit because they solve the big problems. They know how to cut. They look down on physicians who never get their hands dirty and don't know how the body is put together. They get up in the middle of the night to save lives, and sacrifice their own to make this happen.
The Physicians think they're hot shit because they're the closest to the patient. They are masters of social interaction. They look down on surgeons who think that the answer to everything is to cut. Surgery should be a last resort, not a first.
Over-specialization is the curse of our profession. Stratification breeds condescension. bla bla
Besides their different nature. The volume and amount of knowledge is too much to be able to do both at a decent level unless you sacrifice your personal life or you are some sort of super talented nerd.
If you dedicate 24 hours a day to both, there will always be someone who will dedicate theirs to only one. You can't beat that competition and it is only going to get worse from here as the technology develops and both of these streams will become more sophisticated and require more knowledge and experience.
Yes, back in 1980s a programmer could easily do both because front-end wasn't much more than some simple html tags. But not now.
Front-end and back-end go hand in hand and it is good to familiarise yourself with which ever you don't specialise in and recognise and appreciate its importance but if you try being both you'll most probably end up being a half-arsed back-end developer and a half-arsed front-end developer.
If you have put in the same level of effort, he/she will have twice as much experience as you in which ever of the two they have chosen to specialise in.
And when they find that person, they have to communicate their needs using voice or text rather than raw thoughts. Need to change requirements? Send another email or walk over to your partner's desk.
Never underestimate the cost of communication.
I have become a generalist at a company that definitely has distinct frontend and backend teams. I started as backend dev but started doing frontend work too. I have found myself in great demand due to my unique role at the company.
Since I know a lot about the entire tech stack, I can act as a routing agent for product managers and other non-developers. They ask me questions, and I can give them a pretty good answer. If they need something done, I can refer them to the specialist who wrote the code that needs changed.
When I am coding small tasks, I can write both sides of an API much faster than it would take two devs to negotiate the requirements. Communication is a time sink. Rather than writing emails or tasks requests, I can just write code and be done. There is a threshold though where it is better to split the work. There is only so much I can hold in my head at once. But even then, I find I am better at communicating because I know how both sides work.
Does the project have a nasty bug that needs tracking down? The generalist can lead an investigation the whole stack, asking specialists when needed. Last week I solved what our CTO referred to as "the ninja bug" that had plagued another team for months. The root problem was on the frontend (ios client), and I pushed an instant fix by updating our server code to compensate.
Lastly, some companies have skunkworks projects with very small teams. Being able to own both sides of a task means fewer people required to do it. I have become the goto guy for whipping up prototypes. I typically work directly with our CEO to create a proof of concept as fast and cheap as possible. When things look promising, we bring on more specialized devs and I lead the project.
You may not want to be exactly 50/50, but definitely be aware of how the other side lives. And dont be afraid to ask for a role change to broaden your skill set!
At my new job as purely backend developer, I found my previous software skills rusty. A couple months later, I am a strong software developer again, but ask me a DB question and it will take me a minute to bring it all together. Sadly, the area that was once my strongest has become weaker. If I wanted to keep up on my DB skills, I'd have to be studying/reading DB on the side, which I don't have time to do considering I'm a family man.
I'm a programmer that now trains as a DBA+sysop and I like it. I saw condescending (brogrammer style "I'm way cooler than you") types in both camps, but usually from the guys that never tried to understand somebody else('s job). For my colleagues I tried to create small presentations like "this is what a DBA can do to help you and this is the way you can help them" and "what an usual programmer knows about databases" to bring the camps closer together and to understand eachother.
Unless, of course, by "our profession" he means "us, the people who can only code web apps"
That must be regional then. Where I'm located (the Netherlands), these terms are very much web app only. Nobody working in embedded systems would call himself a "full stack engineer". Stack? What stack? I make robots move!
I've tried many a time over the years to do good front-end work (especially where web apps are concerned), and I've concluded that I suck at it. Really. The things I find appealing are entirely orthogonal to the rest of the world, especially that cool school of UX engineers. I'm generally content with synchronous http requests, and adding Ajax is always an afterthought.
As a result, I stopped making crap websites for people. I started making nice backends, and who doesn't love a nice backend(?).
Everyone (especially me) is a lot happier when I'm not breaking the look and feel of a site/app/application/product, and I'm a lot happier when I don't have to care how it looks. I'll provide an API, and some other person can make it look good. That's the way the world works.
Asking everyone to be a full-stack engineer is a nice pipe dream, but consider the same in other professions. You'd be asking neurosurgeons to know the same level of detail as dermatologists, and vice versa. You'd be asking a Professor of Particle Physics to understand tertiary protein folding (as his biological counterpart might).
There is no such thing as "overspecialisation", only oversimplification of the job at hand.
Back to the specialization, I really think you should have at least one area in your chosen field where you have deep knowledge. How deep? On the above example - maybe you know internals of Rails + Rack very well. If you are on the front‒end may be you should have a thorough understanding of how browsers work, how HTML/CSS is parsed and rendered etc. I don't really have a good explanation as to why this is important but I've noticed that the really good web developers or designers tend to have at least one specialization or deep interest within their fields.
A highly skilled animator may not be the best modeller, and an amazing rigger might be terrible at texturing.
The software business is both older and newer than computer graphics. It's older in that people have been doing it since the sixties, but it's newer in that the "pipeline" has radically shifted several times in the last twenty years. Each new delivery platform, be it desktop apps, web apps, or now mobile apps often requires re-thinking how things are made.
The problem here is a lack of people who've spent time in different disciplines to understand them better, not that there are disciplines in the first place.
He says "You must do both or you'll be irrelevant."
But there are plenty of examples of people doing cool stuff that is specialized.
Deep specialization in one area with a narrow, but broad enough knowledge of other areas seems to be the norm to me now...and when I started working over a decade ago.
Read my variant at http://shezi.posterous.com/over-specialization-is-the-curse-...
In any case, it was just a cheap shot at the silly point that specialization is bad.
Fishermen probably think they're hot shit and that developers are useless people building addictive distractions.
education is basically free, educate yourself on anything you want - front end, back end, devops whatever.
its your own choice and problem to not broaden your skills when the cost of doing so is so low.
communication between developers is most important!