Ask HN: What web technologies should I learn before entering the field?

4 points by svermeulen ↗ HN
I haven't done web development in 5+ years and am anticipating re-entering the field shortly. This could mean writing any web site from e-commerce, to basic company landing pages, to a complex javascript/html5 app, etc.<p>I assume I'll need to know jQuery for client side stuff, and I've heard Node.js is really useful. But what other frameworks are gaining traction today that are worth knowing? It seems like there are so many frameworks, each with different advantages/disadvantages that I have a hard time figuring out where to start!

12 comments

[ 5.3 ms ] story [ 38.3 ms ] thread
The current trend in the web industry is obviously ruby on rails and node.js. You may stick with both these and also client side technologies as well.But the basic thing you want to keep in mind that, "right tool for the right job" is the key.If you want to do some serious web applications, you may go with ror and node.js.Node is really handy and it is getting some respect as well.

Good luck :)

node.js is a server framework. You should consider learning foundation and bootstrap. If you just want to go for jobs then php is the way to go otherwise you should consider learning python or ruby for web development as there are a lot of jobs for it in the field as well.
How comes this is the first response to mention python and php? Is the choice really only between ruby and node.js?

- earnest question.

Of course, there are jobs for quite everything, including COBOL and Fortran.

But mentioning the near future in web development or general "app" development (typical stuff, not AAA Games and the like) in startups, there will be probably only one question:

"why not javascript?". I expect every other language/stack to fade away over time, at least for startups. However, managing legacycode will last forever and have it's jobs, too. See Cobol.

Of course, all the other coders of all the fascinating and interesting other technologies out there are pissed off by that statements. They have valid points about the ugly "design" of javascript, circumstances where it doesn't shine, and so on, and they are right. But for the majority of all technology decisions, this just won't matter.

Javascript in general is going to be a worthwhile language to spend time in, since it is both client-side and server-side now. All the sides. Having a good working knowledge of Rails I think would be a good complement to that as well.
Raw Javascript both client / server. Then learn basic HTML/CSS with the help of bootstrap.
Let's look at the stack bottom-up.

You'll need probably some kind of Database, right? For most of the usecases in different web-apps a document-based approach is just a perfect fit, i recommend MongoDB, since its fast and very easy to use, and the query language is just javascript. If you need something really fast, choose an in-memory-DB like Redis (again, mostly you don't need this, 99% of all webapps won't have serious traffic).

For the serverside-stuff itself, i highly recommend Node.js. Pair it with one of its great frameworks like express, and you'll be up and running in a couple of days. Don't even bother with RoR, as of today it is quite a steep learning curve to master, especially with all the different components of the rails-stack. Also see https://news.ycombinator.com/item?id=6171440 about Ruby/Rails in startups. Since you wrote what kind of webapps you're writing, node.js should be a good fit for you. It's lightweight, fast and you don't need another language to learn, since its just JS.

For the Frontend-development it depends on what type of websites you'll be developing. If its a "classic" webapp, you'll be fine without additions. If you want to build a single-page-application, have a look at backbone.js, it's a client-MV* framework. I prefer it over the alternatives because of it's minimalistic and intuitive approach, the spirit of node.js.

When it comes to styling and the view-code, you'll have jade as html-templating-language and stylus as css-preprocessor-language if you want, thei're some kind of default with node.js / express and pretty good. For layouting, bootstrap is the best ui-framework out there, hands down. Take a look at the (mature) version 2.X or the (upcoming) version 3.

If you take my suggested road down, you'll have a complete javascript-stack, one language to rule them all. Using the same skillset, you can even build desktopapps with node-webkit or mobile apps with phonegap for example. Just don't bother with additional languages, ecosystems and all the hassle, JS will do the job for you today.

If you want some kind of standardlibrary for javascript, or better known as the "swiss army knife", have a look at http://underscorejs.org/ .

I will go ahead and add some points and disagree with other points.

1. I believe that the best path is to start from the top. Start with the most user-facing side of the tech stack, the client-side. Why? Because further down the stack (esp. deployment and DBs), there are more and more modern services/libraries that abstract things away. So things like Parse, Firebase, ORMS, Heroku, hosted DBs, MongoHQ, etc. I'm not saying you should never learn these things, just that in terms of getting an app out the door really quickly, the client-side is the most important piece.

2. Agreed with sentiments on this thread about starting with Bootstrap and jQuery. I'll chime in and say that while I greatly prefer Angular to Backbone, Backbone can be fairly educational. If you find Backbone frustrating, check out AngularJS. Whether or not you use an html templating language or CSS preprocessor is really up to personal choice. I'd start with bare HTML honestly. Although CSS is enough of a pain to code in that I'd recommend SCSS from the get-go.

3. I'll be pedantic for a bit and point out that Node.js is not a framework - it's a runtime environment for JS with some additional standard libs (like a barebones http library). You almost certainly need something like Express.

4. Here things diverge a bit. I'm a big fan of node.js. But let's be clear about what your goals are. If you want to get employed at a startup, Rails is vastly more popular and widely used than node.js, and for good reasons. So if that is your goal, that should be a clear winner. But if that doesn't concern you, or if you're too lazy to learn Ruby, I wholeheartedly endorse starting with node on the server-side. You get to focus your energy on one language, get to share your IDEs, tooling, and testing setup between the client and server, and get something that's highly scalable to boot.

1. Oh, i personally start from top, too. But the people around me tend to start from the bottom, because most of them are used to rails. You know, choose a datastore and start modeling/scaffolding right away, it's the rails way. That's why I inverted this in my post. I agree with you - the client is the most important thing to think about. When all is said and done only the client experience matters for your customers.

2. Of course, there are many solutions out there. I especially like Backbone for it's minimalistic nature, forcing you to nothing else than using something jQuery-ish thing. Since it's written by the same guys that wrote coffeescript (i prefer over JS), i like the combination of both. subtile thingie.

3. Yeah, of course it's not a real framework. But for some usecases, like providing special APIs, pure node.js without express might be enough. If not, you may pick express or anything on top of it. (most frameworks seem to be built on top of express nowadays)

4. Well both know that rails won't die the next years or even centuries. Personally i am currently employed as a Rails developer and see the mindshift... slowly but steady. Many developers are playing with it, don't find it amazing first time ("nothing new to see here, i can do this too with language XYZ"), but after some time passed, they realize what's different and they're impressed more and more. Especially startups that built their first release with a classic rails/mysql-stack and need to (often struggling to) scale seem to be interested to switch over.

Finally, the most important point is: master JavaScript. This includes (!) stuff like Coffeescript if you like it. And then look at the vast and emerging ecosystem around it. If you don't need rocketscience-numbercrunching and/or don't have the tight constraints of embedded systems, nearly everything is possible. Take any other "server"-language, and you'll have to deal with tons of Javascript anyways. Just remove the mental burden you'd have with additional (fading?) ecosystems.

Thank you both for your fantastic answers. I now have a roadmap.
3. I think pure node.js is pretty much never a good choice. Express.js or alternatives like restify are lightweight enough that there are virtually no cases in which using those would be "too much." In fact, that is precisely Express.js's weakness - people say that Express is like Sinatra, when the truth is that Express has even fewer features then Sinatra.

That being said, I personally learned node.js by starting with raw node (and the http module).

Gaining traction, JS and everything in its ecosystem. In a very, very big way. Forget Rails if you're starting out. Good chances are we're all going to be writing JS in the near future.