6 ms·
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
by pmichaud 11y ago
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.
- anon1385 11y agoDNS, 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.
- giancarlostoro 11y agoSetting 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).
- tim333 11y agoAs a beginners thing for web dev, Meteor is pretty good. Although it can get complicated when you get in to it like most stuff.
- oriolid 11y agoThis. 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.
- raziel2p 11y ago> 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.
- joesmo 11y agoI 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.
- anon1385 11y ago>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).
- deleted 11y ago[deleted]
- kelseydh 11y agoSome 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.
- vezzy-fnord 11y agoOne 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.
- kelseydh 11y agoWhere 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.
- hajile 11y agoDon'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).
- EugeneOZ 11y agoI'm not "controllers" programmer, but I think they also need to know few acronyms and tools in addition to C language.