I do all of those, and I am definitely not a genius. Nor all that rare. Most of the projects I've worked on in the last 5 years have had several devs who could go end-to-end, and the ones that weren't were working towards that goal.
It's really not rocket surgery, it's just a matter of applying yourself over time and every few months acquire new skills in an essential area. CSS, JS, Ruby, TCP/IP, HTTP/REST, UI/UX, SQL, design patterns, on and on. Set em up and knock em down. Be a generalist, but be a very good one.
It's not that hard to accomplish over time and it keeps you engaged longer. Heck, it's just more fun. I'm an 'older' coder and taking that approach I think has kept me from getting bored, kept me sharp and also kept me from feeling like all these young'uns is passin me by. Hey! Get off my lawn...
Would you say over the years that you've oscillated between points of the stack, based on the needs of your current team? I've found that to be the case for me.
At my last job I did a lot of front end work, at my current gig I'm focused on the backend. I enjoy the oscillation and try to keep interesting side projects where I focus on the opposite of what I do in my day job.
Yeah, absolutely. It's been a matter of looking for new opportunities to do something out of my comfort zone. If you've been doing Rails for a year and an opportunity comes up to do some mobile stuff, take it. If you've been doing css/html for months and someone needs a SQL migration written, do it. If someone needs to configure Passenger/Apache/Resque, etc., be the guy. Get comfortable in Photoshop or Gimp enough to knock out an icon or two. Sketch out wire frames for Product for your next feature if someone already hasn't.
There's usually an opportunity to do all this stuff over time, you just have to be willing to jump on it when it comes up.
It's really not rocket surgery, it's just a matter of applying yourself over time and every few months acquire new skills in an essential area. CSS, JS, Ruby, TCP/IP, HTTP/REST, UI/UX, SQL, design patterns, on and on. Set em up and knock em down. Be a generalist, but be a very good one.
It's not that hard to accomplish over time and it keeps you engaged longer. Heck, it's just more fun. I'm an 'older' coder and taking that approach I think has kept me from getting bored, kept me sharp and also kept me from feeling like all these young'uns is passin me by. Hey! Get off my lawn...