Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yeah, modern web development is actually really fucking hard mainly because you have to know so many different things. To build an application from scratch, and do it well, you have to have deep knowledge of, let's see...

* At least one server side language

* Probably a server side framework

* HTML

* CSS

* Maybe a preprocessor language like SASS or CoffeeScript

* SQL

* HTTP

* Probably a SCM like Git

* At least one server, which means the server software itself, like Apache or Nginx, the server for your language like phusion passenger, probably an OS that you're not familiar with

* a whole slew of build tools and the like relevant to whatever ecosystem you're in

And more shit I'm not thinking about (oh, all about images types and compression). And that's just basic stuff, not even considering setting up a database server or, heaven forbid, a cluster. Or anythging like redis, or a queuing system or redundant hardware.

That's not nearly a comprehensive list, but I think my point is made.

It's true that generally web dev is less mathy. I personally scratch that itch with graphics and game programming, but web dev is a hairy beast, so don't let anyone get you down about it.



DNS, Javascript, JSON, TLS and certificates, client side frameworks.

I always find it amazing that people recommend web programming to beginners. The amount of stuff you have to learn all at once as a programming beginner is really overwhelming when you are just writing a simple local program, never mind adding all the complexity of networking and deployment and server config and the half dozen web techs.

I think a lot of people forget just how overwhelming it is to first learn programming, either because it was so long ago for them, or because they learned it gradually as a kid. They take it for granted that everybody already understands DNS and CSS and server configuration and conclude that getting started on the web is easy because all you need to do is learn a bit of python/ruby/php/etc.


> The amount of stuff you have to learn all at once as a programming beginner is really overwhelming when you are just writing a simple local program, never mind adding all the complexity of networking and deployment and server config and the half dozen web techs.

You don't need to know more than HTML, CSS and PHP to "get started", and you can learn those one at a time, in that order - and once you know those 3 you can keep progressing, learning one thing at a time.

When I was younger and learning programming, I had an extremely hard time seeing what I could do with it. I was working with C and Python, which lends itself to simple command-line programs - but at the time I had no experience using command-line programs, so I had no idea what sort of thing I'd want them to do.

Things I had experience using, GUI programs and games, had a far higher barrier of entry and/or a much steeper learning curve. Now, I'd have a much easier time, I could separate the UI from the logic and write unit tests to have a sense of progression, but as a beginner, those things are out of reach.

The first really useful thing I wrote was an IRC bot in python, but even that was incredibly difficult. I had to work with sockets, threads, events, character sets... I don't even think I had a server to run it on, so I just ran it on my desktop machine that was on all the time anyway.

Compared to when I discovered PHP a few years later, it was immediately clear to me what I could do with it. I had experience using a lot of different websites, so there was a lot to draw inspiration from, and the barrier of entry was really low.


This.

Now, the thing with web developers is that most of the Web developers I have worked with don't know anything of this in depth. They manage to get something done by copypasting together examples, tweaking code at random until it works for the single case they are trying manually, telling users to ignore certificate warnings, etc... and when the application finally crushes under its own impossibility, the consultants are called in.

The most beginner-friendly part about Web programming is in my opinion that you can get visible results quickly, especially if you can ignore the complexity of all the dependencies you are using.

Back when I was a kid, I could write "mode 2" in QBasic and immediately start drawing stuff on the screen. When more structure was needed, you could add it until you hit the limits of the language... which weren't very far. I don't know if there is anything as simple available today.

Edit: Reading other comments, Processing looks like a modern and much, much better language for the same use.


I think JS in the browser is a great way to start developing these days. The setup is close to zero (a script tag), the dev/build/deploy cycle amounts to saving the file and reloading the browser, and the language itself, while far from perfect, is quite typical of many widely used C-type languages. I'd say this is probably the optimal environment for someone looking to learn programming.

On the server, something like PHP is so ubiquitous, that even though the dev/build/deploy cycle is a little more complicated because it involves a server, it's still a good candidate. With preset stacks like XAMPP/MAMP, all the user has to do is write some code and upload the file to the right place and reload their browser. I think that can be manged. True, the beginner will not know about servers and things like that initially, but that knowledge is not essential or even important to starting out.

I think the big reason for suggesting web development to beginners is interpreters and their ecosystem. Learning an interpreted language is much easier, IMO, for beginners than JIT or AOT compiled languages because the tool chains dev/build/deploy are simpler and many times invisible to the user. Web development does use a lot of interpreted languages. Finally, getting real results on the screen is huge. Showing people they can build real things with only a few lines of code is very powerful and something that is much more powerful in a graphical web environment than on the command line. In web development, the product is graphical by nature, so that is also a huge plus.


>I think the big reason for suggesting web development to beginners is interpreters and their ecosystem. Learning an interpreted language is much easier, IMO, for beginners than JIT or AOT compiled languages because the tool chains dev/build/deploy are simpler and many times invisible to the user.

If you want to do web dev in python then you need a local python environment setup (which is actually trivial on desktop Linux or OS X), and that is no different from somebody using python for local programming. Except their code will be far simpler since they can just read standard input and write to standard output, without having to worry about parsing https requests and constructing valid HTML just so that the results of their basic fizzbuzz code is visible. And they won't need to worry about deploying a server, setting up the domain names, setting up a web server and so on.

Setting up a server is also more intimidating because you move into the world of things costing real money and your mistakes being publicly visible. If there's bugs in my small local programs that I write to educate myself then nothing happens the fact majority of the time (rm -rf style bugs can happen of course). If I screw up deploying my server, or do something insecure in php etc, then there are public facing consequences of that (my site gets pwned).


Setting up something like XAMPP is not as friction filled as setting up something like a *NIX development / production environment. In some cases you could get away with using shared hosting or spinning up a simple DigitalOcean LEMP box to some degree.

On another note:

I personally prefer to recommend Python due to a lot less friction, and semesters of helping students with learning C as their first language: "Don't forget the semicolon, don't forget the parenthesis, don't forget the curly brace." All things Python lacks, and with a good editor, their white spacing would be automatically formatted, and at least when they get to their next language they format their code a lot nicer. But that's just my experience helping out students.

A lot of wonderful languages are perfect for first time programming languages. One of our teachers uses Processing for his Intro to Programming course. It's so easy to just download and install Processing, compared to downloading and setting up Java (at least in Windows).


As a beginners thing for web dev, Meteor is pretty good. Although it can get complicated when you get in to it like most stuff.


Some people argue web developers have it harder than iOS developers. In fact, good full-stack web developers arguably need learn more about technologies in a faster period of time than many other specialties within software.

Why? Because the web, and the skills needed to make a competitive web app, evolve extremely quickly. Just on the Javascript side, in one year, you're learning Prototype or jQuery, the next year you're learning Angular, then React, etc. Browser standards change -- wildly, as do the frameworks used to build things. One day its SQL, the other day its NoSQL. One day its Bootstrap, next day its material design.

In comparison Native iOS developers have had an evolving but relatively consistent set of API's from Apple to learn for iOS / Objective-C to stretch into useful skills for nearly 10+ years now.


One day its SQL, the other day its NoSQL. One day its Bootstrap, next day its material design.

I think you've been spending too much time in the SV echo chamber if you think those two examples are pertinent.


Where do you think the most successful web apps (like Slack recently) are emerging? From the SV echo chamber.

To be a talented full-stack web application developer for a successful consumer facing app, you sort of need to have an obsession with UI/UX design trends. Finished web apps that delight customers have an attention to detail that put them over the edge into the realm of being successful.

What you need to learn to become a top web app developer is actually punishingly brutal. People now expect all web apps to operate with the smoothness of having AJAX everywhere that you see with apps like Youtube, Gmail and Facebook. Web app developers who can actually build web apps to that level of quality are extremely valuable.

Web development is not easy if you really specialize in it. By that I mean people who have really accumulated best practices and knowledge over common core problems of the web. These are the people who within a month can return you an app fully loaded with user accounts, multi-tenancy, notifications, emails, subscriptions, the ability to upload documents, search, credit card payments, google maps, API gateways, chats etc.

In addition to having programming chops, a lot of their value actually comes from having spent time collecting good "widgets" of useful software they can use for new projects. These "widgets" allow them to build impressive experiences quickly. Examples include having an opinion about what a "joyride tour" javascript widget looks like, having an opinion about what makes a good date-time picker, mastering form validation, -- the list is nearly endless, but they all come down to the person having an informed opinion about what UI/UX paradigms are best from a human-computer interaction perspective, and knowing that these paradigms change quickly. A person who I would call an elite (front-end) web developer is somebody who builds their own widgets frequently just to see what works.

Such sideskills of a web developer only come from constant learning. In my opinion it is one of the most brutal sectors of software in terms of how quickly your skills fall out of date and how much you constantly need to be learning in order to remain competitive.


I wasn't making any value judgment on web development's difficulty. Bootstrap versus material design isn't some top-notch innovation like you portray it. It's a bikeshed issue. Most people use Bootstrap as a formulaic placeholder, and material design is a Google trend. It isn't any more relevant to the web development community at large than Microsoft's Metro is.

NoSQL is ancient, and the value of NoSQL is in specialized data models and workloads. Modern SQL databases remain general supersets in terms of functionality, but the value of NoSQL is tuning features for data structured outside the relational model. It's by no means a generic tool, nor necessarily innovative, as you portray it.

AJAX everywhere has been going on for quite a while. It's not necessarily relevant for all web-based CRUD and no, it's not expected universally. The boring truth is that most web apps are still best suited to standard server-side pages with more dynamic content sinks for certain parts of the app (though there's been a concerted effort to redefine "web app" as SPA). HTTP is a dumb file server, at the end of the day. Rest is very flimsy client magic.

Finally, there's nothing special about Slack. It's successful. It's by no means interesting.


Fair point, I bring Bootstrap up as an example of how frequently the actual frameworks relied on to build things on the web change. A better example of is the endless paradigms popping up to handle highly interactive javascript.

RE: NoSQL and SQL, I agree and I understand the nuance (my go-to database is PostgreSQL), I'm just pointing it out as "another thing" web developers need to understand.

And that's the point I was trying to make. When it comes to how many "other things" web developers must constantly be learning, I actually think developers in iOS or at the lower-level sometimes have things easier despite the stereotypes about web development being easy.

RE: Slack - Slack is interesting because it combines many elements of traditional web app design, and succeeds simply by executing on those elements extremely well. I believe web developers (particularly front-end ones) could learn a lot by studying how polished Slack's design and interactivity is.


When it comes to how many "other things" web developers must constantly be learning

The reason for learning many of these "other things" is precisely because of your limitations to the confines of the browser's VM, where all superior OS APIs must be poorly reimplemented (Web Workers, local/session storage, WebSockets, WebAudio, the file API, etc.) to get around the fact that the web was designed as a file server for static documents. In the process, the same-origin policy was gutted through cross-origin resource sharing and cross-domain messaging.

These same limitations partly inspire the massive framework churn, most of which are formulaic.


You're completely right that the problem comes from being trapped inside the browser's VM. Anyone building a highly interactive single page Javascript app definitely has their work cut out for them.

It's funny, but in some ways web development has actually regressed in terms of difficultly. 10 years ago before its death, browser plugins like Flash actually made a lot of inroads towards making it easier to build highly interactive web experiences.

The current shift towards Javascript has arguably left developers with a weaker set of tools for producing dynamic experiences than they had with Flash even if Flash really did need to die.


Don't forget to mention time budgets. If I were making a desktop application for windows using the standard windows libraries, my clients would expect it to take a while and wouldn't even expect to see anything for a few weeks.

In web development doing the same app, I have far less consistent tools and loads of square peg problems, yet the client believes development should be seeing a demo in a couple days and a finished product a little after that.

Learning all of that is hard and the market is booming, so I'm in huge demand as a good JS developer. Even with the demand, the supply of good devs is short because of that barrier of entry. Programming noobs get eaten alive and most devs with experience in more traditional fields take a lot more time to adjust than they think the will going into the web profession. JS isn't an easy language to learn (especially after you've been programming in a traditional C-like language for years).

I'd say that this state is a silver lining to the learning problem, but because of the perception of web development barrier of entry and the swath of noobs, the market in general still doesn't pay equal to the real demand. I'm lucky enough to work at a company that respects JS devs, but when I worked as a contractor, I passed on loads of jobs and job offers (even from fairly large companies) because they had no idea what a good web developer knows/does let alone how to tell a good dev apart from a poor one.

Most of these companies go on to hire inexperienced devs and paying a huge price. When I went back to fix some of these issues later (I was too expensive for them until they started contacting other experienced devs/shops looking for someone to fix everything). Most of the good devs aren't going to go down the trial by fire path in order to get a worse-paying job (and let's face it, the companies that pay well know that only a year or two of JS experience is a dealbreaker despite an excellent resume with 20 years as a C++ programmer).


I'm not "controllers" programmer, but I think they also need to know few acronyms and tools in addition to C language.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: