I really didn't want to bum people out with this post, so that's why I've named it after a Take That song, as opposed to a Smiths song (was going with "Heaven Knows I'm Miserable Now...with Web Development"). Blame my recent viewing for the teen angst tone of this post.
Essentially; everything is the same, nothing is new, stop worrying about stuff.
This post isn't a cry for help, I'm actually hoping it acts as some reassurance to new developers, old developers, developers with Imposter Syndrome™, basically anyone who's ever felt left behind or out of touch with modern development. (I'll keep it to web development specifically, for brevity sake)
Everyone is probably aware of the flurry of new stuff and the fragmentation of old stuff that seems to be happening lately. Open up Hacker News and see 20 different React.js architecture patterns, open up Designer News and see "101 Different Flat UI Kits You Should Be Using", or ask around on Twitter for responsive image strategies (and watch your Mentions tab light up like Vegas).
Questions I've been asked (or seen being asked):
- What does Node.js even do? I can't see any use-cases for it...
- What does Webpack do, over Browserify?
- Which framework should I learn?
I'm finding it increasingly hard to answer these questions. Maybe because I'm jaded. Maybe because I've recently got into iOS and see web development (read: the web community) as kinda petty. Maybe because, given the opportunity, I've spent the last 4 years joining in endless discussions about which tool ~ library ~ framework ~ plugin to use. Joined in voraciously. Joined in for arguments sake. A pissy little hot-head. Blindly defending my choice of Thing™ because...I...wanted...to prove the other person wrong? Bah. I'm tired of that crap, and I'm halfway through my first watch of The Wire. Life priorities.
My goto answer nowadays: "It depends".
My goto answer in my head: "I really don't care".
A not-so-great answer to give someone who's cared enough to ask for your advice is "I really don't care". It sounds apathetic. And apathy doesn't get you clients, or make you any friends. Luckily, I've got like 4 friends, so I don't need any more, but I still like working with new clients (so hire me, honestly I'll be more chirpy when we chat in Slack).
Giving feedback also becomes difficult as well. My general philosophy (now, not before) is that personal preference trumps Best Practices™. I'd much rather see someone produce functional (functional, not Functional Programming...gah!) code than attempt to conform to ever-changing, entirely subjective, community-driven patterns. Also, without sounding like a total turd, you can spot people who actually know their stuff vs. people who just reel off "that blog post I just read said this" from a mile off. Don't be that person. That person is dirt.
And good god, please remember; your code still works even if Hacker News suddenly tells you you're doing it wrong. Or Facebook; Immutability guys, amirite?
4 minutes in and the author of this post is still yet to arrive at a tangible point
No fear dedicated reader, I probably won't reach one, but you've made it this far?
Er...sure, I've used that. panics
I used to be afraid of telling people that I hadn't used That Hawt New Thang™ on GitHub, or that I didn't design mobile-first (@beep is a swell guy). Now I don't care. I don't mean that in a Bart Simpson/John Bender eat-my-shorts kinda way. Like, I still give a damn, but now I'm fine with my knowledge, I'm confident in my skills and I can now look at the development landscape and quickly analyse whether something new is going to change the way I want to develop, or whether it's not worth my time (remember, there's The Wire to watch). This saves me a whole bunch of squirming and stalling when developing. I just don't get choice paralysis now, but I used to.
Many projects ago, I would have reassured people that I knew what I was doing, subsequently scurrying off to Google and Stack Overflow and developing and praying through blind faith that I could deliver what I promised *. I feel different nowadays. It's probably because I've got my core skills nailed, and if you can find the right client or team to work with, they'll be able to see that. I don't bother embellishing now, it's too much stress.
*This can be a great way to earn money, as you can work on a variety of projects, and you learn rapidly by baptism of fire. But my word, be prepared to have a knot in your stomach the whole time because you might get found out
So hotshot, what do you use?
My "stack" that I use for web projects:
As if this guy uses MongoDB? Doesn't he know It Isn't Webscale™?
For the projects I do, and the scale they demand, it's a-ok. I find it nice to work with, it hasn't caused me issues, it's got good support and I know it well.
In fact, apply that justification to all the above.
"Why don't you use Rails? It's better than Node.js for MVC..."
I had someone recently comment "how is Backbone still relevant in 2015??". Because dear internet friend, there's not been anything that's come out since 2010 (Backbone's release date) that deals with client-side application architecture better. Of course, why believe me over someone on Hacker News? You have no real reason to.
You really do have more reason to believe the people at Facebook than me, they're way smarter (I've seen the film). They know what they're talking about and React is really well put together.
However, my opinion on React after I built a project with it: it's neat. And with that, I merrily skipped back to using Backbone.
Rarely nowadays does something come along that's actually gamechanging.
People > product
To amend my earlier goto of "It depends", I think what's more apt is "It depends on you".
If you have to ask the question, "Which framework should I learn?", then, without being too blunt, the answer is: it doesn't matter. By the very fact that you're asking that question means that you're not really going to gain much from one framework vs. the next. You'll get a boat load of experience from learning any of them. If you do value my opinion at this point, my advice is still to go learn Backbone.
The phrase "learn Backbone" is a weird one, because there's not really much syntax to learn with Backbone, you're actually learning to "give structure to web applications" (from the site). So you're elevating your knowledge up a level by being able to build a client-side application. yay 4 u.
Become good at one framework (Backbone, right?) and you'll find that all the others are trying to solve the same problems. However, with your newly found knowledge, you'll now know what the problems actually are. There's no worse feeling than not knowing what you don't know. Once you know you don't know something, you can act on it.
To answer the question, "What does Node.js even do? I can’t see any use-cases for it" - the incredibly boring answer is; it does everything PHP does, it does everything Ruby does, and Python and so on...everything is the same, nothing is new, stop worrying about stuff yada yada, you get the picture. Node.js just does stuff a bit differently. It's a bit faster in places, it's a bit better in places, it's also a bit worse in places. And remember, in a roundabout way; we're all just working on CRUD apps.
Now replace "Node.js" with "Go" in that last paragraph. Rinse and repeat.
I actually don't know
Sometimes, the best thing you can say is "I don't know". I can say, from recent personal experience, that it's quite freeing to say that to someone and the world not come crashing down. It feels reassuring to put yourself (and your knowledge) out there, and for it to be ok that you don't know everything.
Ben, wait, do you actually not write tests??
Essentially, this whole post was buttering you up to still like me after I confess that I've never actually written any unit tests in my whole life as a developer.
Shit that felt good.
Look out for my next post on "Moving to Value-based Billing" and watch as I lose a whole load more future paid work...
Also, if you manage to decipher any discernible points in this post, or if you cried, or if you put my face on a doll and punched it, please let me know.
I'm available for hire