Ask HN: Where can one learn about boring web development?
If you want to learn web development today and you use Google—even with the “one weird trick” of appending ”reddit” to your searches—all you find are micro-services, serverless/lambdas, >1M react packages, >10M npm packages, and >100M tutorials of how to do yet another to-do list with MongoDB or Firebase or the amazing marvel that is using SSR/CSR with Vercel.
For the sake of over-simplification, let's call this exciting web development. Now, where can I learn about the other side of the spectrum?
Request:
Is there an insanely pragmatic website or book containing everything you need to know when creating production-ready (yet simple!) web applications?
I am talking about HTML5, CSS3, modern JS (do you even need it? and if so, how does simple javascript look like?); `cron` jobs; database persistence; difference/explanations of when to use bare-metal v. vps v. vm; what there is to know about reverse-proxying and load balancers and how to correctly setup and deploy those and so on?
61 comments
[ 4.3 ms ] story [ 135 ms ] threadThere is a full stack JS track with Node instead of Rails.
Side note: As a Ruby on Rails developer, it's amazing to see so many Rails-based recommendations to the question "how to learn boring web dev?". This is exactly what Rails (and Ruby) is great at. Just get shit done quickly without the shiny things.
The Flask Mega Tutorial https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial...
I’m guessing there’s something similar for Ruby on Rails and Laravel.
For persistence, consider Litestream/SQLite. Or just good old PostgreSQL. Or MariaDB.
also. loved your LISP pun in your about page for HN :-)
https://fastapi.tiangolo.com/
Or look at Django - for something more full-featured in python.
https://developer.mozilla.org/en-US/docs/Learn
You are on the right track…. strive for simple.
That’s exactly what I aim for when doing web application development.
A React application uploaded to a static web server, talking to a plain old Linux server running a simple back end like nodejs or python, talking plain SQL to a Postgres server.
Do you want server-side rendered app or will your app require client-side processing?
Do you anticipate that the app will, at some point in the future, need to be scaled to multiple servers?
Once you answer these questions, then what boring tech stack to choose will become easier.
One example I will give you of a boring stack, but highly effective, that I know of. Postgres as DB, Wt toolkit for both JavaScript and without JavaScript for hybrid server-side/client-side rendering, and HAProxy for load balancing. That is it. Nothing else is required if you are developing a small to medium sized web project.
Why are you suggesting HAProxy for load balancing?
Why did you immediately jump to comparing JavaScript approaches?
It is perfectly legitimate and practical to build a web application using little to no JavaScript. It is also abundantly evident that consumers and professionals are still happy to pay to use web applications which employ little to no JavaScript.
By all means learn about raw DOM manipulation with JavaScript first, but do not go directly for react.
We are repeating the same issues we had years ago where people started conflating JavaScript with jQuery - people are conflating JavaScript with react l.
JavaScript is an insanely powerful flexible and widely deployed language. It is so much more than just react/jQuery. It is the Lingua Franca of modern computers.
Yep, where is the documentation for modern JS without any libraries?
Preferably something that doesn't try to teach you what an if and a loop are first.
Now where's the equivalent for actually using JS in a modern web browser :)
https://www.railstutorial.org/
Closer to what you want is Free Code Camp, which is pretty good for front end stuff:
https://www.freecodecamp.org/
There is nothing more boring than Rails + Postgres! Maybe Django and Postgres…
My definition of boring is a good looking web page with a CRUD flow and user authentication.
This is an afternoon exercise with Rails, a good tutorial, and a couple gems and a bootstrap theme deployed to Heroku or Elastic Beanstalk.
Compare to having to navigate the latest Typescript, SPA front end, server side component, nosql and serverless deployment hotness.
If you mean web applications rather than (mostly static) web sites then I believe that the boring pragmatic approach is to use React + Typescript, at least for the front end stuff. This is where the tooling, documentation, and community all currently come together in the most cohesive manner for modern web application development - or in other words, where you'll be fighting the tech least, and have the most support when you need it.
I know that's a loaded opinion and I spent years resisting it. But I'm glad I overcame my scepticism.
I would love to be working closer to the metal, in this case meaning HTML, CSS, and JS. I spent the first 5 years of my web dev career doing this. But this means you have to deal directly with several different browser engines running across hundreds of potential devices, you have to deal with bundling your assets, transpiling, worrying about what JS and CSS features you can use - it's basically endless, more than one person can handle. Web dev is inherently many layers of abstraction deep and highly fragmented. By using a framework like React and following their best practices, you let someone else, at least partially, deal with that chaos. That's the closest thing we have to a safe, boring, pragmatic path in modern web dev. Yes it's a long way from perfect and you're still barely surfing above the chaos, but I don't think there's a better option.
You have fronted, backend, UI, database and infrastructure layers at least.
Rather than searching for a resource to cover all poorly, I would focus on a resource that covers each.
You can search Pluralsight, Udemy and Amazon for good tutorials books for: HTML, CSS, Javascript, a fronted framework (I like Vue because it seems more sane), a language for the backend (C#, Java, Go etc.) a framework for the backend, infrastructure (bare metal, VM, Kubernetes, cloud Docker etc).
These would be the bare minimum to get started as just the system design is a complex thing which you can't master with just one book.
Since you deal with complex topics there isn't any book or tutorial that can cover all at a decent level.
https://pragprog.com/titles/rails7/agile-web-development-wit...
(note, not quite finished yet - last chapters should be done in ultimo January).
https://fresh.deno.dev/
You will figure out what you need and what you do not very quickly this way.
It won't be easy, but you'll end up with the skills you need in modern web dev.
And be thankful you did not have to spend a decade dealing with cross browser issues. You have it very easy today.
https://nuxtjs.org/ (I prefer Vue).
https://nextjs.org/
And backend can start as simple as https://codeberg.org/jugendhacktlab.qdrei.info/gaestebuch. You may not even need one to start.
This is more of a manifesto but there is a small movement around simplicity at https://grugbrain.dev/ which is written by the guy behind https://htmx.org/ -- a nice little way to add the bare minimum JS needed for a 'modern' app. You can find a community of likeminded people at HTMX-adjacent places like their Discord and Twitter. I've also been an advocate of this kind of 'primitive' dev style and it's great to see it gain some popularity.
This recent talk from Djangocon "React to htmx on a real-world SaaS product" might be of interest: https://www.youtube.com/watch?v=3GObi93tjZI
Ironically, the ultra-modern serverless platforms such as Cloudflare Workers have strict size constraints which is leading to a kind of back-to-basics approach that minimizes dependencies and bundle size. You can find a lot of small libraries for this at https://workers.tools/. The latest JS framework to buzz here, Deno's Fresh, even touts "no JS is shipped to the client by default". We can see there is a resurgence of interest in server-side rendering.
The classics such as Rails are still alive and kicking. Phoenix seems to be a promising candidate for "the modern Rails".
As someone who experienced the Good Old Days of web development, I would recommend at least trying out the managed cloud services for things like databases and cron jobs and deployments. IMO, it's a lot easier to use them than manage it yourself. And with the new serverless stuff, we're actually pretty close to how CGI on shared hosting used to be where you could upload a script and not have to worry about the gory details so much.
There's also the Indie Web wiki which has lots of getting started guides for hosting your own website: https://indieweb.org/Getting_Started
Backend: PHP with Laravel I haven't used it in a while since I work on greenfield projects now. But when I did, Laravel did wonders. Documentation is complete, everything you need is documented and it's basically copy and paste for all the common things.
Frontend: Hard to say. If you don't need much functionality, just use basic HTML, JS and CSS. Render your HTML with PHP and use the minimum amount of JS you can.
Otherwise I'd say React. I work with it every day and I think it's great. But wouldn't consider it to be "boring" at all. There's new things every day and you need to keep up & navigate the traps.
Unfortunately frontend is still very unstable until now.
I'm currently working on a course for something like this at https://nickjanetakis.com/courses/deploy-to-production.
It won't cover building the app from ground zero but it'll cover a bunch of patterns in development to build apps in a way that makes deploying them flexible, then the majority of the course focuses on deployment related topics.
I screwed up initially by trying to focus the course on everything (single servers, multi-servers, Heroku, Kubernetes, etc.) but since then I've scoped it down to focusing specifically on the boring case of "I just want to frikken deploy my app" and it'll go through a ton of things around taking a web app you've developed and shipping it onto 1 or more servers while doing everything in such a way where you'll be able to Docker Compose up your project on 1 or more servers (not load balanced but you could split up things like your web, worker, db and cache onto separate servers if you wanted to). It won't do things in a half-assed way tho, you'll be set up to horizontally scale if you need to since we'll stick to creating 12 factor style apps.
The course won't cover Kubernetes but if you wanted to "evolve" your set up to that in the future you'd have a really strong fundamental knowledge base to do that so you could focus specifically on learning Kubernetes, not Kubernetes + the 100 other things you need to know beforehand since this course will cover a lot of those other things.
So I did the same - circled back to html/css/js first. I'd keep this part very light though. If you can code already (any language) then a couple hours skimming over html/css/js gets you far enough to grasp the absolute basics. After that I'd stick to the "exciting web dev" part and circle back to basics on an adhoc basis.
There is a very real risk of losing enthusiasm here so there is definitely something to be said for rushing towards something that works and does something.
I've found code-along youtube sites to be the best. Traversy Media, Web Dev Simplified and James Q Quick are my go to channels. Also Fireship channel is very useful - they have 100 sec descriptions of most web technologies helpful for "wtf is it and do I need this?".
>`cron` jobs; database persistence; difference/explanations of when to use bare-metal v. vps v. vm; what there is to know about reverse-proxying and load balancers and how to correctly setup and deploy those and so on?
You don't need any of that at this stage. In the medium term a VPS would be useful though...web dev on local machine hits limitations in the sense that local isn't all that "web" and vps is good for learning linux basics too.
0. Don’t waste your time dicking around with tools. Save that immaturity for the children you will ultimately replace.
1. Make a new language in XML Schema. This will teach you about node relationships, DOM theory, lexical models, semantics and data description. The things you will learn from this will shape everything else.
2. Learn accessibility. This will expand your learnings from step 1 in a very practical way. Added benefits are better SEO and slimmer more precise HTML code. When I say learn accessibility I mean to take this seriously. It is a qualitative investment and not checking a box in a checklist.
3. Learn CSS. When you really learn CSS well you will gain the confidence to create any kind of visual presentation without ruining your accessible HTML.
4. Learn the DOM. Again, this reinforces everything learned in the prior steps. Walking the DOM in Firefox is as much as 250000x faster than querySelectorAll. The DOM is the backbone of everything in web frontend technology.
5. Now it’s time to learn JavaScript, but I recommend jumping straight to TypeScript. Type everything and keep your type definitions extremely primitive. In TypeScript clever code is very slow to compile.
To really really understand frontend JavaScript well all you really need is a thorough understanding of the lexical scope model, functions, and events. Functions are first class citizens, which means functions can be used anywhere primitive types can be used. If you can understand those three with great confidence you can do 98% of everything you will need in the language.
6. Finally, don’t listen to the ignorance. Most of the opinions I have seen in my 25 years of web development are about what people can’t do and how hard life is, great insecurity searching for validation. Toss all of this negativity and weakness aside. Instead, always focus on what you can do. Less is more. When you push yourself to exceed your potential after great effort you will do what the complainers can’t.