70 comments

[ 4.5 ms ] story [ 138 ms ] thread
While the author implies that making a website is an overly complex, daunting process and things used to be so much better in the past, the key phrase in the article is this;

The tech I know may no longer be suited to do the things I want...

The old tech that the author knows doesn't work for the modern web. He says as much. If you want to build the new shiny you have to use the new shiny tools. You don't have to make a website that does all the fancy reactive, responsive, Web 3.0 stuff. You can make a site exactly how we did it 20 years ago today and it'll work fine. But if you want to build a modern website, you've got a giant pile of things to learn first.

My personal recommndation for "modern" would be Next.js. It abstracts away all the surrounding "stuff" and lets you skip to just directly defining pages as React components, which gives you a complexity baseline that's only slightly above just writing HTML directly.
Next.js is amazing. Hopefully someone smart enough makes it in rust.
My personal recommendation would be to stay away from anything that ends in ".js" and do it the good old way with HTML & CSS.

No customer ever asked for React, or Angular, etc. I have never heard someone say "I wanted to buy your product/service but I'm not going to because you use boring HTML instead of React".

Use the good old proven stuff until you can't, and then look at your options. There are scenarios where using React/Angular/etc makes sense. But for 99% of websites, it doesn't, especially if your website is a way to showcase content/goods instead of being an application itself.

Agreed. Whatever happened to progressive enhancement or graceful degradation? Many a website and user experience is not enhanced by using Javascript at all.
Not only is a lot of Javascript useless, but it actually degrades the user experience.

The "new" Reddit completely kills my 12-inch MacBook when I load a page, and it still feels sluggish afterwards. That pile of garbage literally loads more code than content.

YouTube's crap navigation system is the same - if you click on a video it will actually load it & update the page within the client using JS, and in my case it's considerably slower than just loading the server-generated page from scratch. I often find myself opening videos in new tabs (and closing the old ones) or hitting refresh as soon as the URL bar is updated just to avoid this shit because fetching & loading a brand new page is actually faster than their so-called "improvement".

I really hate the new Youtube experience, taking several seconds to display a full page.
Not to mention that MANY (too many!) websites don't display anything AT ALL, if you don't have Javascript enabled.

Why?

I'm not talking about "app"-like sites (like Gmail), where it -somewhat- makes sense to use Javascript, but blogs or information sites (i.e. text + images).

The worst is that when you look at the domains to unblock, you often get dozens (not counting the Ads networks that I have already marked as untrusted)! This is crazy, a pretty simple page should NOT require all that complex (and slow) architecture.

And don't get me started about the comments sections! Not only do they usually require Javascript to see anything (which is stupid since just reading them should not require it), but ALL their UIs seem to compete for the title of "most aggravating interface ever". They always seem to try their hardest to be slow, confusing, and once you get more than a few dozen messages on the page (as they load on demand), they become simply so difficult to use that it's a chore then a torture to try to reach the last (or first) one.

I could also rant about the loss of bookmarking functionalities (because of infinite scrolling for instance), and of the previous/forward browsers' buttons...

In summary: in many cases, if not most, Javascript is used in a way that kills the user experience instead of enhancing it. And I don't see things getting any better, quite the opposite.

The majority of web development that I do still makes mostly use of server side rendering in Java and .NET frameworks, with the minimum JavaScript required for some dynamic behaviors.

Works pretty well.

On the .NET front MS is even bringing back a saner script management for Web devs.

https://blogs.msdn.microsoft.com/webdev/2018/04/17/library-m...

I have a story about a team that did this. They built an app using "good old" stuff and spaghetti features into it until it's impossible to add anything more, then spent a year rewriting everything in angular just so they could continue working on the product. It was probably not only a problem of a tech stack, but if you know that you need an SPA that is going to need to scale and have more components, it's only a waste of time to try to do it with vanillajs/css/html imo.
> if you know that you need an SPA

The problem is that every site out there thinks they need one while in fact only 1% truly needs one.

That's true for prototypes, 3 view web apps and simple stuff like that, but if you are building something more complex that you have to maintain for years with a team, then you better have some battle tested scaffolding.
No customer ever asked for React, or Angular, etc.

Loads of mine have, but I write things for other software companies.

My personal recommendation is to adhere to KISS (keep it simple ####) and less is more.

If someone want to learn to do a simple website I recommend Grav CMS. No database, just edit your pages with markdown and off you go.

I really miss the days when I started almost 15 years ago sometimes when we would just build a site with Dreamweaver Templates, and FTP it up to the server when it was ready. Maybe add a CGI form if we’re feeling fancy. It was remarkably more simple to keep an understanding and mental model of the entire project.

Honestly part of me still feels like that would be good enough for most businesses these days still, but that’s just not what developers want to build.

This is indeed good enough; in fact there was a post recently about how demand for Ruby On Rails (a "boring", server-side MVC framework) is still going strong.

Javascript, single page apps and React are all the hype, but outside of a few unicorns (Facebook, Airbnb, etc), the "boring" way is still where most of the money is being made. A lot of businesses still rely on Wordpress for example, and while that platform is garbage from a maintenance & security perspective, it does its job and proves that customers don't actually care about your site being powered by hype technologies.

The front page of Wordpress.com claims "WordPress powers 31% of the internet."

A lot of mileage in the "boring" frameworks!

I just googled Dreamweaver and it still exists! I wonder who uses and pays for such software today. I used it like 15 years ago when I was a kid, that and Microsoft Frontpage, but can`t imagine paying for Dreamweaver today.
It comes as part of the Adobe Suite license. I’ve kicked the tires recently but I don’t know who is actually still using it. ColdFusion developers I guess. I don’t know if it still holds true but the government had a lot of ColdFusion as of a few years ago.
Which government?
Probably why static site generators are popular. Highly effective, shallow learning curve, simple.
And those businesses just opt for a nice Weebly or Wix template, or something similar - there's no need for a developer.
Hell, I’m a developer and I just made myself a Squarespace blog. It’s $12/month and I set the whole thing up in a few hours.
Seems kind of pricey to me for a personal blog. I host 8 sites on a $5 a month DigitalOcean droplet two of which get pretty high traffic.
That seems rather expensive just to host a blog...
And they don't work without js enabled. It's embarrassing when I visit a web designers or developers site and it's a blank page.
I don't think we're talking about developers' pages, but small businesses. And I don;t think small businesses in general give one jot for people who have JS turned off.
> Veering ever so slightly from the common, but entirely non-documented, approach makes it hard to get help. Places like StackOverflow are increasingly useless: instead of answers you get “Why are you doing this at all?”, “Yuck, you’re doing it all wrong, but I won’t tell you why” [...]

While I disagree with the premise (that using old approaches should still take you just as far (and further) 20 years later), I do agree with this particular quote.

Often on SO I see well-supported answers like, "that's because you're doing it wrong" without going into detail on what doing it right would mean, or better yet, suggesting alternative frameworks or patterns where what's "wrong" over here is "right" over there.

If programming in 2018 has become more like plumbing, then plumbers in 2018 have become more dogmatic, and less willing to steer novices that prefer tools like 'x' towards approaches that use tools like 'x' more often.

> If programming in 2018 has become more like plumbing, then plumbers in 2018 have become more dogmatic, and less willing to steer novices that prefer tools like 'x' towards approaches that use tools like 'x' more often.

Do you think that real plumbers are excited to teach novices how to do their own plumbing? Plumbing is boring, and novice technique 'x' is even more boring. And in programming tools change so fast, that you'll be explaining the same thing again in six months from now.

Somehow SO has solved the problem of getting experts to weigh in on questions by novices, even though experts are typically busy and the landscape of tools/patterns changes quickly.

The remaining problem to solve is getting experts not only to weigh in, but to model patterns or point to alternatives that incorporate (rather than deride) the novice's original approach.

> Often on SO I see well-supported answers like, "that's because you're doing it wrong" without going into detail

Disagree, but that might be because we frequent different territories of the StackOverflow space. I admit I don't often delve in to web-dev topics. For .Net questions, I'm continually impressed by StackOverflow's answers.

I used to do .net and I admit that I was always impressed in that territory too. Good point!
I agree that SO is a great place in my experience.

The worst area seems to be JavaScript, since that world is full of trendy new options. The most common one I see here is where someone wants a solution to a JavaScript problem and gets a JQuery response; even though a JavaScript solution would be trivial and the OP's not mentioned JQuery. That has a tendency to push people into using libraries where they're not required.

For .Net questions most of the issues seem to be in the ORM space; i.e. the boundary between .Net and SQL; where people asking for help with SQL are pointed to LINQ, and people wanting to do database-first are pushed towards code-first solutions.

It's not really an SO problem (or at least not a problem that I can think of an easy way they'd be able to solve); more there are so many solutions and no best way; and giving the full context of the developer's experience, preferences, and situation would take several essays, then matching that to those qualified to supply a suitable answer for that particular scenario would require really intelligent filtering; assuming that such people exist and are active on SO. So the current solution of having lots of answers to pick from, and allowing people to up-vote and comment to help remove bad answers and help show which answers are the more generally preferred (thus driving those who don't have a preference to follow the general consensus and thus move towards some form of standard approach within the community) seems a pretty good one.

> a JQuery response; even though a JavaScript solution would be trivial

That's just SO reflecting the culture of JavaScript developers, right? As you say, not really SO's fault, and a forum can't hope to correct for a dev community's vices.

> .Net questions most of the issues seem to be in the ORM space

Disagree. There's plenty on .Net concurrency and asynchrony, for instance, with answers from top experts from Microsoft. That's a field where it's quite common for someone to be 'simply wrong' though, which as you say, isn't universal.

> someone wants a solution to a JavaScript problem and gets a JQuery response

It's a mixed bag, really. Since at least an year if jQuery is not mentioned either in the question or in the tags or in comments from OP, usually users suggesting to use jQuery get told off and, sometimes, downvoted.

While I agree that the quality of .net is impressive, I think that it follows the overall SO problem with outdated answers.

Recently I ran into the 'why Boolean.toString returns an odd "True" value', I visited SO to find a terrific [1] but outdated [2] answer.

Nowadays I shift my teams away from SO. My piece of advice would be to stay away from it (especially junior devs), until they reach a level were they can evaluate and cross check what they are reading.

[1] https://stackoverflow.com/questions/491334/why-does-boolean-... [2]https://msdn.microsoft.com/en-us/library/atahsch6(v=vs.110)....

Maybe I'm missing something obvious, but what's outdated there?

The correct solution remains `b ? "true" : "false"`, no?

If the XML spec requires exactly those strings, why do anything cute with `ToString`?

The function used to return "TrueString" or "FalseString" back then. Nowadays it returns "True" or "False".
Aren't those identical? If I understand correctly, .Net guarantees string internment for all string literals, even across assembly boundaries, so they should end up referring to the same String instances.

https://blog.jetbrains.com/dotnet/2015/02/12/string-internin...

It's not a matter of instance or memory. In the aforementioned example it was me trying to print valid JSON from a razor view, so the capital T in "True", was causing me headaches. I wouldn't of course use "toLower" as a workaround and actually found out the best practice. However this incident made me curious regarding this behavior and triggered my little "research".
SO is getting useless. Search for anything and you have to wade through page after page of “use the search function” replies to legitimate questions. I am, you jackass. The original answer is now a broken link.
Isn't this where WIX and similar products come in? Sure its a lot more complex to create a simple website from scratch, but the process is automated by tools like these. I have non technical friends with blogs these days.
Exactly. A vast chunk of custom "websites" could have happily lived as WiX/squarespace/medium/facebook ready-made object.
I’m a web developer and I just set up a Squarespace blog for myself. I could’ve taken a week to fiddle with Jeckyll and set up plugins for search and RSS, newsletters and this and that, but this is $12/month and so much easier. It took me like 2 hours to get the whole thing set up, getting a domain is a single click with no SSL setup or anything.
As a web developer myself I had never come across a CMS that made life easier for the every day person - friends would always come to me asking for help with setting up or amending their blog.

Then Squarespace came and I've been so impressed with it. It is the first and still only CMS that makes creating and maintaining* a blog super easy.

* images were always a problem with Wordpress and other sites... uploading, resizing, and more so moving and placing images on a page was always a "problem" for the non-tech-savvy but Squarespace handles this perfectly

On the security and distribution side of things, I recently had to guickly throw a website together, and found netlify super convenient for that - it handles the https and cdn part, and you can use it like a folder to drop static html. It allowed me to have something up and running faster thant I thought
Web apps. You don't know how to create web apps.

An actual website (meaning text, images and little more) doesn't really need all the fancy frameworks OP's talking about. The sooner we re-learn this, the better.

Im getting a lot of mileage out of Express/Polka, postgres, handlebars and vanilla js. Redis is good for rate limiting and session store if necessary. Yes it's not one package but I don't need most of the stuff the big bois are offering.
Of course web apps are hard. They run in this weird VM that wasn't even designed for the applications. The popularity caused by the ease of deployment made us brute-force the solutions for the actual development tools, and they keep searching for themselves by sprawling frameworks and libraries for the same thing all the time.
> They run in this weird VM that wasn't even designed for the applications.

I keep reading this and it was probably true 10 years ago, but JS has evolved quite a bit since. Browser differences are now marginal (yes I've seen the outline hack) and now these funny little VM-s are designed for the applications.

> An actual website (meaning text, images and little more) doesn't really need all the fancy frameworks OP's talking about.

Sure, but you still need:

- a server/reverse proxy (h2o, apache, nginx, httpd, etc.), in which you correctly set tons of things, such as headers [0], https (acme.sh? or acme-client?)

- haproxy for IPv4/IPv6 if you want to live in the future, but still be available to people living in the past century [1]

Default versions and settings are still broken (SSL still enabled in 2018, etc.)... Mozilla does help though by publishing some sane templates [2].

In the end, it's not quite as complex as webapps, but still very far from trivial.

[0] https://securityheaders.com/?q=try.popho.be&followRedirects=... for my own static blog, https://securityheaders.com/?q=https%3A%2F%2Fwww.hellobank.f... & https://securityheaders.com/?q=particuliers.secure.lcl.fr&fo... for French banks...

[1] https://try.popho.be/https.html

[2] https://mozilla.github.io/server-side-tls/ssl-config-generat... and https://wiki.mozilla.org/Security

True, but you can still get a ton of mileage from a simple managed web hosting solution and (if you feel fancy) cloudfront.

My point is that this whole post reeks a bit of YAGNI. Or, at least, that we're not talking about "simple websites". If it's the latter, of course, it's a whole different story. But we should call websites "websites" and web applications "web applications". This would also avoid those "the web sucks" arguments that make comments think an article is thinking about the web as "a way to exchange information" instead of "a platform to distribute system-agnostic applications".

I kind of agree but I've just followed the approach of building in what I know, it's too easy to get caught up in alternative cutting edge tech and use it as an excuse not to build something.

If you wind up with something successful you can always switch to modern technology if it provides a solution which your old school tech cannot fix.

It is incredibly easy to create a website. As a member of a university institute you typically get a folder in your home directory "public_html", whatever you put there will be accessible from the internet. So you create an index.html, which basically can be as malformed as you want it to be and it shows up in Google search after a while. This totally suffices for 90% of all personal internet publishing, see http://math.ucr.edu/home/baez/TWF.html for how far this can take you. This page contains ~20 years of original content by a mathematical physicist, a lot of it is of very high quality. Content is more important than presentation.
I'm doing https://wordsandbuttons.online with all the interactive plots, and games, and quizzes in plain Javascript. It was a bit uncomfortable in the beginning, but then I gained some experience and got better at it. I didn't want any frameworks when I started, now I don't need them.
> I no longer know how to create a website.

You do, but you are suffering from analysis paralysis. Fuck it and stick to what you know, your _web app_ will be fine.

For websites you need VSCode, type ![tab] and you are ready to go.

I feel it's easier than ever to get started with frontend frameworks since there are tons of resources to learn from (youtube, course platforms, blog post, official tutorials, etc.) compared to 10 years ago.

As a footnote, I could write a similar blog post about Haskell, but I feel I could use that time better to watch a 1 hour long video and write a fibonacci function.

I couldn't agree more.

> I don’t know why this attracts people to programming — imagine trying to be a chef where the only source of ingredients is scouring the city for restaurant scraps.

I feel this is so untrue - there is a wealth of information on web-dev. The hard part is choosing what resource to use or what topic to study but in terms of learning content available - I think there is oceans.

Apart from websites there are now other things that people deliver via HTTP and browser or a "web view". I would argue that the market for websites has shrunk. There is a booming market for web applications that are just the best way to create a gateway between customers and ever changing business logic. In this space there is a proliferation of tooling and compilers and it's only going to get more complicated in the sake of betterment (JS as a compilation target). I'd focus on fundamentals, one of which is user experience. It doesn't matter if the flow is created in Go, React or closure, it still needs to be user-friendly, intuitive and secure at the same time. The domain knowledge is much more important than tooling.
I agree.

I was in the web dev world early enough to also be uploading pages and files via FTP to production for high profile clients.

In the last 3-5 years with the addition of gulp, sass, npm, etc. it has all become way too complicated and saturated. I found myself with way to many options and worse - opinions - to filter through, learn, and master enough to use in production. Mostly this learning would be done in my own time outside of work and I really started to lose interest/drive to do it.

Oh the nostalgia of fucking up websites with FTP :) You can say it was better than deploying with Git with a serious face.
I think a lot of us technical minded people fall into the same trap; we start with the technology, trying to solve problems of making a site dynamic and secure before considering the content. With the exception of sites solely aimed at demonstrating new technologies, the purpose of a site is to provide content (OK, sometimes to provide functionality too; but that's content in a sense). The key is to work out what content needs to be on the site & start with that. Once you've got that down you can consider how it can be improved; and that's where these other pieces start coming in. But start by defining the problem to be addressed, then look for the tool to fix that problem; don't go off and find something trendy then work out how you can make problems that it can handle, or how you can force your problem into being the kind of problem which that tool could fix; move on and find the tool that makes sense.

This is all obvious at the start of the project, but the moment you see a rabbit hole it's very hard to resist going down it. For that, keep a list of what's important nearby, and each time you get back from a break check that list and ensure you're obeying it. That list will start with a bunch of don'ts; to keep you away from bad habits, followed by your priority task list of what you need to create your MVP / the MUSTS of your solution. Once you have a working solution and have ticked off all the musts from your list, you can then play safe in the knowledge that you've got a checked in working version; and the remaining time is just experimenting / tweaking / playing.

Anyway, that's the theory... I've not managed to stick to it yet; let me know if it works for you though ;).

If you keep up with React, it's super easy. It takes 5 minutes to get CRA working, then an hour to understand React, then days to get good at React, then a few more days to get good at the ecosystem (state management, etc...)

I agree with what you said. The pace of change is daunting, but as long as you keep an eye on where it's headed and what's working, things get easier.

(comment deleted)
There are people who do cargo-cult programming.

They looks like doing something. They use the famous tool and write seemingly similar code we write. But it's not correct. It's not just correct, It's also wrong in all aspects. They don't understand anything. They just imitate the activities and believe it just work somehow.

When facing it, the only answer we can give them are:

> “Why are you doing this at all?”

or

> “Yuck, you’re doing it all wrong, but I won’t tell you why”

Because, these people don't want to learn in the hard way or listen to the advice anyway.

So the last advice,

> “can you produce a complete working minimal example, deploy it somewhere, set up an issue system, accept code reviews, feed my dog, and then maybe I’ll help”.

is actually a kind advice, because these cargo-cult programmers blindly believe that, they are doing it right, it should just work, and the reason it's not working right now is a very tiny trivial issue caused by one wrong setting or something.

Since they don't listen the honest advice(you're doing it wrong in everything) and believe it will work, let them fail and let them know they are doing it wrong is the most kind advice.

You are not wrong but in the end I just prefer not to answer their questions at all. Somebody else will probably be kinder than myself and I am quite sharp on forums because I dislike people who tried exactly zero solutions but just come and cry somewhere. I know sharp language is frowned upon in the moderated forums and viewed as not constructive so I just say to myself "heh, that poor thing" and never even write a reply, and move on with my life.

Better for everyone involved IMO.