State of Web Development

State of Web Development webdev: reddit for web developers 4:06 pm I embrace change and new technology more than just about anyone I know. I wear a smart watch, I have a smart tooth brush (yes, really), I like to automate things in my home and I'm unsatisfied with the idea of settling for something. If it can be better, make it better. Perhaps that's my youth talking, however the JavaScript and to a lesser extent overall web development community is pushing that part of me to the limit.

I've not been a web developer very long, only about two years now. I've been able to program for even less than that; a little over a year my best guess, and by "able to program" I really mean "understands how to chain if statements together to create a really poor command line recreation of Zork". Okay, I'm a little beyond that level of ability now, but you can only learn so much in a year. It took me a while to take my jQuery-training wheels off. Despite now writing code in ES6 -- no, sorry, I mean ES2015 -- there's still a lot of basics to programming I'm bound to have missed along the way.

Why is this relevant? It means I'm approaching the JavaScript community with a fresh set of eyes, untainted by whatever the norms have been in programming, software, and web development for the past several decades. Here's a dramaticised version of my journey of the past year and a bit.

From the moment you've learned the basics of HTML, CSS and perhaps a little JavaScript, you're overwhelmed with the wealth of choices available to you to enhance your workflow. You'll start off with some sort of frontend library like jQuery or Bootstrap to make things a little easier. Okay, you're now abstracting yourself away from the actual code you need to learn a little (as I've since learned to be a bad thing), but that's cool. You can learn that along the way.

Next up, you add some of the more exotic stuff. Perhaps a preprocessor like Sass. That's great, preprocessors can really enhance the workflow and general code of someone who's already got a solid understanding of CSS. You'll run this from the command line, but that's okay because you've already learned how to use the command line for the sake of version control (did I not mention that bit?).

Ah, but now there's this other cool tool you want to use. Maybe it's a linter, maybe it's some whole other thing whose apparent sole purpose is to confuse and make the simple more complex than advanced algebra. Whatever, it has a catchy name (that's probably not even the same one it started with), now you need a build tool, because not only is keeping a dozen terminals open for all these tools going to get messy fast but you'd also like the tasks to work automatically when project files change. Makes sense.

Introducing Grunt, or Gulp, or Webpack, or who knows what next. (Did I hear npm script? Anyone? I know you're out there.) Once you've spent the best part of the day deciding which of these tools to use, you've now got to configure it. Can't be that hard.

A few hours later you decide to use someone else's Gruntfile/gulpfile/other, but alas, because breaking changes to all these micro packages (that's what they're called now right? Oh wait, that's that other thing) happen in excess of the speed of light not even they will help you.

You're now on your second or third day and you haven't actually written any useful code yet. You could have written a lot in that time. Heck, you could have rewritten your disgraceful attempt at Zork in that time. But no, here you are still fiddling with some tooling.

You finally get it working. It doesn't produce errors in a consistent manner, but all the packages you're using have their own way of doing things and at this point you're just glad to be concatenating, minifying, and doing whatever else with your files. Cool. Are we done yet?

Nope, now come along the cool new frameworks of which there are hundreds, possibly even thousands. Cue the decision paralysis experienced above, and cue more fiddling with your tooling just to make the bloody thing work.

Yay, you can now write code! Let's do this.

Okay, this makes sense.

Ah, that's clever.

That, now th- wait what the f*

There's markup in your JavaScript all of a sudden. As if years of wisdom were always mistaken, you now have to readjust your concept of a separation of concerns and plop the two together. It makes sense though, whatever, all those other people who told you otherwise were just crazy.

You're now coding in something almost entirely other than HTML, CSS and JavaScript.

You've lost any semblance of usability and accessibility in your website.

Your website's performance has gone from lightning fast to so bad that you're failing to retain users as you were doing prior.

You're abandoning accepted wisdom and doing something else entirely, which inevitably you'll change your mind on again within a year.

Your boss, an old timer, is now looking at you wondering why you're taking so long to produce such crap, and why you look miserable doing it. He wonders why you bother with all these tools. Maybe he has a point. Aside from the essentials like version control, all these other things are just bloat. Surely you don't need all of them. Surely the technical debt outweighs the benefits for at least a few of the niceties you've configured for your project.

This issue is even evident in the backend of web development, and who can really be surprised given JavaScript's encroachment upon everything it can spread its reach to. I recently set myself up a Node backend for fun (of which there is none to be found, just so you're aware) and you have to configure and require two packages in Express, the most popular Node framework, just to utilise a request body (POST, GET, etc) and cookies. What the flying fuck? Who the fucking fuck sets up a website with new tech like Node and a framework like Express and won't be doing anything complex enough to require those. More productive question: Would those one or two people who do even notice if they were pre-bundled? This lack of sane default configuration is going to kill me.

What I'm ultimately trying to say is that we've reached a state of spending more time on tooling than on actual code. More time on reinventing the wheel than adding a cool new notch onto that old wheel that solves that old problem. Surely that can't be time well spent?

I hope you enjoyed the rant.

submitted by AnonWebDev180116

/r/webdev Thread