Ask HN: What is the best language/framework for getting things done on the web?
Background: I’ve spent years learning “trendy” programming languages and frameworks. But now I just want to get things done.
Server rendered web pages, no fancy client side js, just good old websites. Quick to build, easy to maintain, just ship it.
So what are your recommendations? For a web developer that wants to be productive, not trendy. PHP => Laravel/Symfony, Python => Django, Ruby => Rails You just can't go wrong with one of these 3 above. Boring. Tested. Server side web pages All the 3 above also have great communities, support, documentation and above all, plenty of experienced talent over the years. These are battle tested. Add HTMX over any of them (me I use Python Django) and you're golden. Could you recommend a new one to learn for someone who only knows spring boot? I can pick up any language quickly. The main thing I'd be looking for is good resources/blogs to learn the framework quickly from. I work with Laravel a lot so I recommend it. But you can also do Python/Django which is very good. For laravel, start with https://laracasts.com I would say not laravel because it has new releases every other day, forces you to use tailwind and webpack and all that, etc. Their old simple API framework is deprecated. I started looking at Yii and Phalcon a bit but not crazy about either. Yet. I want something like Struts but for PHP. So, I might have to... create another framework. :-D Thought about RR but every time I jump in again, I nope out again. Maybe just need to really learn it. FastAPI seems interesting but can't find simple videos on how to do login/auth sessions in under an hour -- red flag. ASP.NET Core is very straightforward and easy to work in. It's typically more performant than interpreted language frameworks, but it can be more verbose. ASP.Net core is powerful but even with it being my day job I still wouldn’t recommend it for this niche. * It’s damn complicated with a real learning curve to get your head around dependency injection, the vast standard library, heavy abstraction and Microsoft terminology. Day 1 basics can be easy but there’s a steep intermediate learning curve. * ASP.Net has some nice plug and play stuff for generating Open API docs or logging for example but take a look at Laravel mentioned above and see how focused it is on making it easy to add features that the customer cares about. * Documentation is expansive but not great, heavily focused on brand new user tutorials but terrible for quickly answering how do I do X? They struggle to stay up to date and i recall spending a good hour going down a rabbit hole because none of the tutorials were using the up do date magic spell to enable something. * For pretty much everything you can think of there’s 3 ways to do it, good luck figuring out which one is the ‘correct’ way. This may seem like a rant, I think ASP.Net Is good for a larger, more long term project where these annoyances are outweighed by performance and maintainability but I recently did a quick project in NextJS and the difference was night and day, despite it being my first ‘real’ project with the framework. Good write up. It’s important to hear from someone that works with the tech day to day. Yea, I think that might be a good shout. I’ve seen some articles about it’s performance recently and it’s definitely not trendy. The one you are most familiar with. Any major MVC framework is fair game if your'e familiar with the language & package ecosystem surrounding it. It’s PHP. Laravel in particular is very productive. Can't go wrong with Ruby/RoR If you want something less niche, PHP/Laravel If you want something super niche, Elixir/Phoenix NextJS is my recommendation. The React ecosystem is incredible, and NextJS brings it to the next level. Also the documentation is fantastic, you should be up and running in 5 minutes. Pair it with a good IDE (i.e. WebStorm) and the websites write themselves. React fails the main requirements: “Server rendered web pages, no fancy client side js, just good old websites.” "By default, Next.js pre-renders every page. This means that Next.js generates HTML for each page in advance, instead of having it all done by client-side JavaScript. Pre-rendering can result in better performance and SEO." Good to know. Thanks for correcting my misapprehension! React JSX is hands down the best templating engine for Server Rendered Pages, imo. Doesn't have to be a SPA or include a bunch of fancy client side JS or anything. Cool, good to know. What makes JSX such a good templating engine? It's personal preference of course, but imo JSX is just a very clean way of writing frontends. Easy composability, easy data bindings which don't have to be two-way if you don't want. My sense with many templating engines is they are trying to crowbar programming functionality into HTML and always comes across clunky. It's usually a separate language from your server code entirely. Inline If statements and For Loops embedded in your HTML. And composing a template with a subtemplate is often clumsy. With JSX you just write your normal JavaScript or Typescript and output JSX. Then the JSX is turned into HTML and returned to the browser. But of course I'm not familiar with every HTML templating library out there, but I've used a few and I really love working with JSX. My own favorite syntax(es) are TAL, TALES, and METAL (Template Attribute Language, TAL Expression Syntax, and Macro Expansion TAL). There are many implementations in various languages. The OG implementation was in Python as part of the Zope: https://pagetemplates.readthedocs.io/en/latest/tal.html These days I reach for Chameleon, another Python implementation: https://chameleon.readthedocs.io/ I'm aware of at least five implementations for JS: template-tal, jstal, Distal, DomTal, ZPT-JS. Cool, thanks for the recommendations! I don't write a lot of python anymore but I'll check these out. I guess you've never used NextJS because it basically uses JS as a server side templating language, and since pages are by default server side rendered, there's no client side JS (unless you want to add it). You can go to a server side NextJS rendered page that worked even when JS is disabled, that uses only HTML and CSS and no JS whatsoever. You're right. As my other comment makes explicit, my wheelhouse is mostly Python. The last time I really dug into JS frameworks was about a decade ago, and was largely jQuery, D3, and friends. Thanks for bringing to my attention something I didn't know! People are getting caught up on ‘no fancy client side JS’ rather than ‘getting stuff done’. Next will let you use SSR to avoid all those OAuth & async loading headaches but also leverage more complicated components and when you do, handles all the bundling and tree shaking for you. Recently moved my app from ReactJS to NextJS to support SSR. The community support and the amount of resources it has is incredible. Ruby on Rails Php/Vuejs/composer. Instead of php framework I just use an independent component for routing. Php has the ability to handle the rest well without requiring a server side framework (at least for my use cases) The one you already know. Svelte/Sveltekit. No. How is that anything more than a front end framework? It's as if people don't even read what a technology is about before bashing it. SvelteKit, like NextJS, is a server side rendered framework that just so happens to use JS as the templating language but in the end serves raw HTML to the client without any client side JS (unless you want it). Django, if you know Python, can be very rapid Define 'things'. I'm playing with Hugo right now, no fancy things, just a plain static pages. Has anyone used NestJs or AdonisJs in a real way here? Would love a quick review I suggest you choose a framework based on whatever language you know well, or are willing to learn well. I'm assuming you aren't building internal apps in an enterprise environment that would push you toward Java or .Net, but instead public facing sites/apps as an independent developer. For Python, the major popular choices are Django[0], a "batteries included" framework, and Flask[1], a more lightweight option. For Ruby, the equivalents are Rails[2], and Sinatra[3]. There are many other options, mostly created with a specific niche or use-case in mind. Personally I am most familiar with the broader Python ecosystem, so additional frameworks that come to mind are Pyramid (Lightweight framework that scales up to complex projects as needed), Tornado (async non-blocking), Dash (low-code for ML), Cube (semantic web). And of course there are many other languages (eg. Java, PHP, JS, etc.) in which you can create web sites and apps, but sticking to the popular options to start with has advantages in terms of ecosystem, documentation and other learning resources, and so on. I'd be remis if I didn't mention one other option that has a lot of bang-for-the-buck if it fits your use case: Most websites (and a lot of web apps) are content-oriented and just a content management system. In which case, starting from an open source CMS and doing a bit of customization will get you to "done" a lot faster. There are plenty of open source CMSs to choose from (most are written in PHP) but the most popular by far is humble WordPress[4]. Check it out if your site is going to have anything like a simple posts and pages organization, and a drafts and publication workflow (personally I am invested enough in Python that even for that sort of site I default to choosing something like Wagtail or another Django-based CMS[5], or Plone[6], which reinforces what I said at the start: make your choice based on the languages and tools you know well).