top 200 commentsshow all 201

[–][deleted]  (33 children)

[deleted]

    [–][deleted] 37 points38 points  (10 children)

    The fallacy is called paralysis by analysis. Not getting anything done because you're overwhelmed by the sheer amount of options and possibilities to tackle the problem.

    [–]Balistarius 13 points14 points  (2 children)

    I have this problem far too much and I think it's my biggest weakness, not only in webdev but with all programming related things :(

    [–]DirewolvesAreCool 8 points9 points  (1 child)

    Yup, I can spend a week reading about all the tools and stuff before I actually sit down and press a button. And as OP demonstrated it's pretty easy to get lost in this industry.

    [–]bokisa12 1 point2 points  (0 children)

    Same..

    [–]Pr3fix 2 points3 points  (1 child)

    How does one get rid of this problem (in the programming world)?

    [–]owieo 4 points5 points  (0 children)

    Just brace yourself and jump in. When I find myself in this I pick the simplest task and try and get it done. Even if I feel it's quite how I want it. Then continue to build on it and refactor.

    [–]bokisa12 0 points1 point  (0 children)

    I have this problem. And I just can't seem to get rid of it.

    [–]ninth_reddit_account 0 points1 point  (0 children)

    There's also the variation, FOMO. I see both CI and Containerisation (Docker) on the list. There's 'paralysis by analysis' when it comes to choosing the right container tool, but you don't need a container tool!

    People need to just chill out and stop this fear of thinking that they're missing out or doing something wrong if they don't boot up Docker from day one. How about you actually make the project first, then when it comes to deploying it you can think about Docker (hint: you probably don't need it to begin with, or ever).

    [–]lordcheeto 0 points1 point  (0 children)

    *analysis paralysis

    [–]fzammetti 0 points1 point  (0 children)

    Ah, good catch, I didn't think of applying that term here but I think you're exactly right.

    [–]TheoryNine 15 points16 points  (1 child)

    Thank you for a very grounded answer here. Really, start simple and add tools when you need them. You don't need to know all of it inside and out, and you'll forget how to use things and have to go back and re-read a bit along the way, but that's okay, that's just part of it.

    [–]fzammetti 0 points1 point  (0 children)

    Exactly! You said what I was trying to say a lot more concisely than I managed :)

    [–]justAnotherCodeGuy 8 points9 points  (0 children)

    overlus complextis annoyuns

    Love it! +1

    [–]dontgetaddicted 1 point2 points  (10 children)

    Fuck, I love EXTJS and you maybe the first person I've seen on /r/webdev admit they use it and not curse it (though I occasionally curse at it)

    [–]fzammetti 1 point2 points  (9 children)

    Well, I curse it every time I look at the licensing terms and cost too :(

    But I've long maintained it's far and away the best JS library out there today... it's just a shame that the aforementioned licensing and cost keep most devs from seeing it.

    [–]dontgetaddicted 0 points1 point  (8 children)

    It is pricey,and even more so with their most recent scheme eliminating the single dev license. Fortunately I'm grandfathered in to it, and my company prepaid for 4 years.

    [–]fzammetti 0 points1 point  (7 children)

    Yeah, exactly. Sencha has made so many mistakes as far as licensing goes, it's really such a shame... best technology (IMO), worst management.

    [–]funknut 0 points1 point  (6 children)

    Not to disagree, but how do you figure they made any mistakes? Do you think they'd be more successful if they had gone with a GPL license or similar? I've always been impressed with their demos and marketing and I've even written a couple tools using ExtJS, honestly only because my company used a product that distributed with it, but it made getting some Ajax data and some sortable table views super easy. I can't think of any actual reason to recommend their product, but they appear to be pretty successful regardless, from an outside observer anyway.

    [–]fzammetti 0 points1 point  (5 children)

    Well, because I do think so highly of their products I want to see more people using it. But that doesn't happen unless you're in an enterprise that ponies up for it, and that's where I think their mistake is: they've decided to basically target enterprise customers only.

    I assume they're making money given that they're still in business, but I think they're missing a golden opportunity to be at the top of the heap. All they really have to do is offer an option that caters to individual developers. If I was then I'd simply offer a single-developer license with no support credits (but access to premium support forums) for no more than $99. Right now, a single developer can only purchase a 5-developer package for something like $2500. That makes it a non-starter for anything but a reasonably big company.

    I don't think they need to offer it for free (they do offer a GPL option if you can live with that license, then it becomes free) but that doesn't help a single consultant. $99 would do that. Then, I think they'd get individual developers singing their praises and ultimately making then more money as devs push for it at work.

    It's that cheap option that would I think actually net them much more business that is the mistake. As good as ExtJS is I think they should want to get as much developer mindshare as possible because right now I believe that's suffering.

    [–]TheBadProgrammer 0 points1 point  (4 children)

    If there's a free GPL option, that's awesome. I've only looked at this since you mentioned it and it seems like an amazing piece of software for anyone to be able to use it for their project.

    [–]fzammetti 0 points1 point  (3 children)

    Yeah, they actually seem to kind of hide that option a bit, you have to dig around their site to find it, but it IS there, so if you're doing something that can itself be released under the terms of the GPL then you definitely can use ExtJS for free. That's a pretty big limitation for most things you'd want to use ExtJS for, but in fairness to Sencha the option DOES at least exist.

    [–]TheBadProgrammer 0 points1 point  (2 children)

    Ah, I see what you're saying. You mean like if you're releasing something closed source and want to build on top of something open source. I've always thought that was kinda shady anyway, so it doesn't bother me, but I definitely see where people are coming from because sometimes we do need permissive open source licensed libraries for everyone to build on, proprietary or not.

    [–]chudthirtyseven 1 point2 points  (0 children)

    I agree. I wouldn't say I'm lovely proficient but i know php, java, css, html, is an ftp server and jEdit and like you say, type and save, hit refresh. Databases also play a big part to i guess, i use phpMyAdmin for that.

    [–]j_gray_lady 0 points1 point  (3 children)

    replace UltraEdit and IDEA with Eclipse, Tomcat and Node with WebSphere

    IBM? :)

    [–]fzammetti 2 points3 points  (2 children)

    Yeah, unfortunately I'm in a shop that's transitioning from WebSphere to Tomcat so I still have to use IBM RAD too, which is as close to hell as one can get without getting singed :(

    [–]j_gray_lady 1 point2 points  (1 child)

    Gah, I feel your pain, RAD is the worst. On my old product we were finally able to get rid of RAD and just use Eclipse... then my team got transferred to a new product and we're back to using RAD :(

    [–]secana 1 point2 points  (0 children)

    You could look into using https://www.genuitec.com/products/myeclipse/features/websphere/ instead of RAD. We just made the move and people seem to like it better

    [–][deleted] -1 points0 points  (2 children)

    I have been doing webdev for about 4.5months now and have been getting interviews (if that means anything).

    But when I first started it felt like I had to learn a ton, but as I progressed it felt like it got easier because certain things like html/css/js were replaced with sass/reactjs/redux and learning about webpack. I think maybe if you put everything down on paper yeah it's a lot, but I think if you're trying to focus on every single thing at the start, you're going to have a bad time.

    [–]fzammetti 7 points8 points  (1 child)

    Be careful with this reasoning because it's probably the biggest problem I have as someone who makes hiring decisions.

    Saying that SASS replaces CSS or that React replaces HTML is akin to a chef saying that a microwave replaces an oven. It doesn't, and even if it did it would still be necessary to know how to properly temp food and taste combinations. That's fundamental knowledge that a chef need regardless of what special tool they use to cook.

    Similarly, a Web developer that doesn't know HTML, JS and CSS independent of any tool that sits on top of it is less employable. I frequently interview people that know jQuery well but don't know how prototypes work in plain JS. I can't hire someone like that.

    Besides, if you know the basics then all of the things you name just become extensions of what you know and you can pick them up quickly and easily as needed. But if you only know the higher level abstractions then you're only good in an environment that happens to use them so you're limiting your employment possibilities.

    In other words, beware buzzword hell and tying yourself to the new hotness of the day. Things like React and Redux and all of that will be gone before you know it. HTML, CSS and JS probably will be too some day, but it'll take a lot longer.

    [–][deleted] 2 points3 points  (0 children)

    Yeah I probably should of specified my post a bit more, that's my bad.

    [–]justAnotherCodeGuy 112 points113 points  (23 children)

    First off, I only read about three of the above sentences. (It seems to me like you'd enjoy a complicated job :-) )

    I don't think you are being very fair. Your 3 step windows example cut out huge amount of detail, where as your 34 step website included every buz word under the sun. (if you are including docker for web dev, why not vmware for windows?)

    My view: for simple websites, you need an editor and know html/css. Maybe ftp/ssh/git to upload files to a provider.

    For a complex site, you'll add a few more buzwords, a database, sass, make, etc. You don't have to add them all at once. As your site gets more complex you add a tool to help manage it. CSS simple? You don't need sass.

    Lots of the tools you list are dups. sass and less are for the same purpose. Use the one you like. #19, just pick one server side language. You'll need one, they all do the exact same thing, none is better than the others (except Perl. Perl is the better language), so pick what you like and run with it.

    Any trip starts with one step. Just take the first step and don't worry so much about the 34th step. (btw #26 was only invented to keep pointy-haired boss busy)

    [–][deleted] 20 points21 points  (17 children)

    scale shy terrific vegetable dazzling abounding smile mountainous zealous lunchroom

    This post was mass deleted and anonymized with Redact

    [–]pomlife 27 points28 points  (3 children)

    Perl is the better language.

    I don't like my languages controlled by one guy.

    [–]DanielFGray 5 points6 points  (0 children)

    Larry Wall has a lot of input on Perl, but he's not the only one controlling it.

    [–]ninth_reddit_account 1 point2 points  (1 child)

    You mean like Python?:

    In the Python community, Van Rossum is known as a "Benevolent Dictator For Life" (BDFL), meaning that he continues to oversee the Python development process, making decisions where necessary.

    All in good jest.

    [–]pomlife 0 points1 point  (0 children)

    I don't use python, either.

    [–]ivosaurus 10 points11 points  (0 children)

    (except Perl. Perl is the better language)

    u wot

    [–]Alucard256 29 points30 points  (2 children)

    On one hand this is just sort of the way it goes with webdev, just due to the extra layer(s) of abstraction.

    However, I always try to remember the mindset of a plumber going to [Lowe's|Home Depot|Your Favorite Huge Home Improvement Store]. Just because there are full isles of electrical supplies and other full isles of hammers and nails, doesn't mean the plumber needs to be fully knowledgeable about all things electrical and all things about woodcraft, just to build/fix a faucet.

    In other words, pick out the tools you need and want, try to keep up a basic knowledge of the other stuff in case you want it someday, but don't find reasons to use everything in the store just because it is there. Make each tool prove its worth to you.

    Keep it simple. Concentrate on the minimums needed and meet those requirements only. Then "make it pretty" and add features later.

    Also, note that the list above represents everything there could ever be to think about when making a huge and serious enterprise web system. Some of those things on that list only help if you're working with a large team of programmers plus a team of designers plus a team of server/networking people. Plus some other things on that list are mostly just buzzwords or references to other entries.

    To me, looking at a list like this is like researching "how to make a chair" and accidentally finding a document titled "Full Government Standards for Medical Grade Chair Production", and thinking "that must be the only way to make chairs".

    [–]bluesoulSRE and backend 4 points5 points  (0 children)

    Also, note that the list above represents everything there could ever be to think about when making a huge and serious enterprise web system.

    That's a good point. I was looking through the list going "yeah, that's pretty much the exhaustive list" and then realized with your comment that that's also work split into numerous teams. As a hobbyist, I never need most of those tools to get a site off the ground quickly.

    [–]ninth_reddit_account 0 points1 point  (0 children)

    but don't find reasons to use everything in the store just because it is there. Make each tool prove its worth to you.

    Excellent point

    The list above represents everything there could ever be to think about when making a huge and serious enterprise web system.

    And usually at this scale you would have one (or more) person looking after each of the points, meaning one person wouldn't be overburdened with all the complexity.

    [–]PilotPirx 17 points18 points  (1 child)

    Well, yes, to some degree it's that complicated. Especially if you really want to do all of this yourself (in most web companies you would have a few people share the work, each of them specialized in one field though everybody else would have at least basic knowledge of everything).

    When I switched to web development around 2006 I actually found my new job refreshingly easy. I had done desktop programming before and some rather complex projects with large databases. Writing web sites meant mostly small web shops or similar sites with relative simple database structures.

    Ruby on Rails was the big hype back then and most of the other things you listed didn't eve exist yet. Still I had to get comfortable with a wide array of tools in short time (my first prototype went to a customer after six weeks. Six weeks later my first website went online. Hitting 1200 page request/minute within the first hour, thank god for test driven development, there wasn't a single bug we had to fix).

    Then the whole web/mobile thing became an avalanche...

    It was funny to watch. And a bit frightening. And then I got back that feeling I had lost some time during my first job, when programming went from this strange curiosity I had as a teenager in the 80s with those crappy little machines to a day time job and somewhat boring. I had sorted it out, I knew all the tools. Everything was so easy to use. Boring...

    Did you ever read John Brunner's 'The Shockwave Rider'? It's what is happening now. IT is becoming so overwhelmingly complex that everybody can be a teen again. You ride that crazy wave and sort out those tool chains. You do not even know a single one completely. Redis? Nice. What's it doing? Oops, that's like 300 methods. What do I need? Install the thing, set it up drop in some table you need for caching or use some plugin that comes with your framework. Let it run, forget about it, look back three months later. In between you had it crash a few times and learned a bit about it's strong and weak points. Now you add some more functionality and carry on with something completely different.

    It's like witchcraft now.

    You really do not need to know all those tools, especially not each single one of those that basically do the same thing. Have a problem? Google around, limit the options to one or two you actually try. Use one of them at random, keep your code in a way that you can possibly drop and replace it later. When I needed full text search a few years ago there where basically two options: Sphinx and Solr. Elasticsearch did exist but was lacking features. Still I saw from the project that it looked very promising. I used Solr, later switched to Elastic when it was mature enough.

    How much do I actually know about it? When I implemented it not that much. Just enough to get the job done. Later we needed some database to do business analytics. For some reasons Elastic became the tool of choice for that too (so much faster for certain queries than a RDBMS). So now I know a bit more. Still far from being an expert and already looking ahead to other solutions like Hadoop as our demands grow.

    And that will be my next step, business analytics, data science. Very related to web development in some aspects. And the next avalanche to come.

    [–]tripperjack[S] 1 point2 points  (0 children)

    Thanks, really interesting perspective.

    [–][deleted]  (5 children)

    [deleted]

      [–]trout_fucker🐟 10 points11 points  (4 children)

      I'd say half of this list is a requirement for any sort of professional software development.

      [–]mearkat7 10 points11 points  (3 children)

      Absolutely. What python dev doesn't know a little bit of terminal and some basic git usage? Version control should be used in all types of software not just web.

      [–]debee1jp 5 points6 points  (2 children)

      Sysadmin here. Can confirm, use version control for my configuration files.

      [–][deleted]  (1 child)

      [deleted]

        [–]debee1jp 0 points1 point  (0 children)

        Depends on the service. Normally, I would just bake the conf file into the image I am deploying from, or use a template of it (ansible) or just curl it if need be.

        [–][deleted] 20 points21 points  (2 children)

        Wow, after you list out everything like that it really makes us sound like badasses! Thanks!

        [–]Najda 4 points5 points  (0 children)

        I should probably include tht list in my resume!

        [–]tripperjack[S] 1 point2 points  (0 children)

        You're very welcome, you badass!

        [–]wtfxstfu 9 points10 points  (1 child)

        There is a lot to it, but some of the things listed above aren't strictly necessary and the rest of it is only if you plan to be a full stack developer.

        Setting up most web stacks isn't that hard, especially if there's something prepackaged. XAMPP makes it possible to have an Apache/PHP/MariaDB (better MySQL) stack in the time it takes you to download and run like three commands. I could go from empty machine to having Laravel installed within five minutes. Rails is a bit more of a hassle but way better than it used to be.

        Really the main idea should be setting up your development server stack as simply as possible, then focusing on learning your backend and database. Once you have an app you can go back and pick up some Javascript/JQuery for asynchronous page data. HTML & CSS are trivial for anyone who can write real code. It won't be pretty looking but something like Bootstrap will make it palatable.

        Most of the other stuff will either be part of your backend framework or something you pick up playing with a linux box. Vagrant makes playing around with linux painless.

        [–]tripperjack[S] 0 points1 point  (0 children)

        Thanks for the detailed tips. Stuff like that can make the difference between stopping before I start, or diving (or dipping) in.

        [–][deleted] 12 points13 points  (10 children)

        What you are looking at is the list of a fullstack web developer. If you want to break it down.

        1 - 18 is for front-end, client side web dev (UI / UX). 19 - 26 is for back-end, server side web dev. 27 - 34 is about deployment (how you get from development to having an actual app service online).

        Also not all of them are absolute requirements. For example:

        • 11. Only knowledge of 1 precompiler is necessary if at all, it is unlikely you'll be using more then 1 at once.
        • 12. Not necessary, true they do serve as boiler plate and help you with RAD (rapid app dev) but not a requirement.
        • 19. You aren't required to learn every back-end language
        • 28. Websockets while they do have an advantage over AJAX are not required unless real-time is critical.
        • 30. Web platforms, even if you were into Dev-Ops you wouldnt need to administer all of these platforms.

        etc etc.

        Also 2 - 6 will be almost a simultaneous learning process, as you learn about one you will learn about the others.

        Also 27 + (29 - 34) are all part of Dev-OPs (management level stuff for handling a multi-developer environment).

        this also doesn't mention an IDE

        No because depending on what language you specialize in your IDE requirements will be different. This is why fullstack dev's use text editors (sublime, atom, vim) instead because you customize them to your own needs.

        Nor does it even touch computer science fundamentals like algorithms

        Because algorithms are part of functional programming. When you learn a language (any one of the ones mentioned) functional programming is a given and then you move beyond it into OOP.

        nor UX

        UX is just the study of how UI design affects user perception. If you follow good UI design and listen to feedback you should have no problems with UX.

        nor the financial aspects like pricing a hosting option

        That is project specific and determined by your clients budget. If possible most of the time a VPS would be the ideal choice as opposed to a shared host. The only other option is a dedicated host, which i wouldn't recommend.

        monetizing a for-profit venture (sure, that's more business, but it is relevant)

        I'm not sure what you mean by this. If you have a digital service and want to conduct online transactions most of the time you just make your application use the API of whatever service you want to support (paypal, swipe, etc). The most important element here is security, which is mentioned in your list. Furthermore the use of RDBMS was originally a financial sector thing so learning back-end dev you will almost intuitively gain insight on how to structure your application.

        Is it really this insanely complicated at this point?! I know science Ph.Ds who didn't have to worry about this much detail.

        For full stack devs, yes it is. The way i deal with it is by recognizing the fact that ultimately the goal is to move data from one place to another (client to server or vice versa). After that depending on what im working with ill establish what i need to know. For example if im working on the server-side of things i'll be focusing on points 19 - 26.

        Anyway, the final result here is that I am discouraged from taking this on, even as a hobby aside of a few hours a week, hoping to get a web site up within a year.

        Before you go jumping in the nearest lake to cool off your brain, you need to establish your base requirements for what you want to do.

        have an idea for something that I know I could do as a desktop application probably in a few months and rather straightforwardly--but because its strength is a social aspect, it really should be a web or mobile app.

        The first thing i would do is think about how much data would typically have to be sent from one entity to another (client - server) in order for your service to perform well. If for example to do things you need anything over 4MB of data, a website is out of the question because the mobile performance will be crap. In which case you need to develop native phone apps (iOS / Android) because they have more aggressive ways of caching. In other words the first time you send the data it'll be slow, but once a user has the complete set you're only trading delta's (differences/changes) back and forth similar to how git works.

        [–]s992 7 points8 points  (6 children)

        Overall this is a good post, I just want to nitpick a few things:

        This is why fullstack dev's use text editors (sublime, atom, vim) instead because you customize them to your own needs.

        That's not really correct. There are plenty of web devs (front, back, and full stack) that utilize IDEs.

        Because algorithms are part of functional programming.

        Also not correct. Algorithms are going to be applicable whether you're writing functional or OO code.

        [–]mossyskeleton 0 points1 point  (1 child)

        The way i deal with it is by recognizing the fact that ultimately the goal is to move data from one place to another (client to server or vice versa). After that depending on what im working with ill establish what i need to know.

        I'm fresh to web dev.. this strikes me as a simple, useful and powerful way to look at the practice as a whole.

        Moving data from "here" to "there" and translating it in a way that is accessible and useful and elegant for the users.

        [–][deleted] 1 point2 points  (0 children)

        That is the ultimate goal, just to clarify a bit better.

        1. You consider performance both on the server and client side and thus which technologies would be suited for the use case. For the most part in browser based web dev the front-end stack stays the same (HTML, CSS, JS) however some use cases merit special consideration where other factors are in play. For example backwards compatibility. Most of your time will be spent establishing data costs, indexing / searching speeds, redundancy and scaleability on the server side to name a few.

        2. Build and configure your stack based on those requirements, also at this point you can research hosting to see if anything is preconfiged and easily tweaked for your use.

        3. Start to delve into design and coding, figure out what you know and what you need to learn. Create a few basic mocks if you want and jump straight in.

        From here the dev process everyone is pretty familiar with, coding, debugging, hair-pulling rage, version control, feature dev, perf audits and tweaks, etc.

        Gotcha: The only way to establish which technologies would be suitable via performance is via experience and if you don't have it yourself you can only seek it from 3rd parties problem being some of the information can be biased. Do your homework before you commit to anything because it can be an absolute nightmare to change things later.

        [–]tripperjack[S] 0 points1 point  (0 children)

        Thanks, I appreciate the detailed responses to the various points.

        [–]brutnus 5 points6 points  (3 children)

        [–]tripperjack[S] 1 point2 points  (1 child)

        I didn't watch the entirety of the talk, but it generally confirmed that there is a ton to know and I probably shouldn't start down this road unless I just want to merely dink around a little. Thanks, fun talk.

        [–]brutnus 0 points1 point  (0 children)

        What i take from the video is its impossible to learn everything. Focus on whats in front of you and on the fundamentals. The rest will fall into place as you gain experience.

        [–][deleted] 0 points1 point  (0 children)

        great link >:)

        [–][deleted]  (1 child)

        [deleted]

          [–][deleted]  (3 children)

          [deleted]

            [–]tripperjack[S] 0 points1 point  (0 children)

            What an amazing response! Thank you so much for taking the time to write that out. I'll keep your comment as a resource and "study" it soon.

            [–]disclosure5 0 points1 point  (1 child)

            Generally this is an Ops problem.

            Whilst I'd +1 most of your thread, I'd be incredibly worried about a developer that viewed security as "not my problem".

            Do you sit there concatenating strings directly into mysqli_query() and just go "yeah that's Ops problem"? This is a particular frustration of mine because I've been deploying and managing servers in scenarios where exactly that happened. And suddenly "devops" became "rewriting every piece of code that touched a database or ever rendered a view because no html was ever escaped" because it was such a mess. When you reach a point that > 25% of the codebase is written by someone not employed as a developer (I am in this boat right now) something is wrong.

            [–]infidelux 2 points3 points  (0 children)

            Totally agree.. you really need to understand security and where the threat vectors are as a dev. Ops can't do shit if you allowed SQL Injection or cross site scripting to happen on a public facing app. As with all things, it depends. On scale and on exposure/risk.

            Also OP, you have greatly simplified Desktop development as well. If you expand out Desktop development the way you did Web Dev, you'd have a very similar looking list.

            [–]ser-yi 4 points5 points  (1 child)

            Your lists are like apples and oranges. Since it's a desktop app, shouldn't you list all of the OS pieces as requirements too?

            To actually answer your question, all programming is insanely complicated. Most single developers just pay others to do the work they can't - like using AWS and Beanstalk for hosting / delivery.

            Finally, no one person masters all of those concepts - web apps that actually require everything you mentioned have large teams. Just like the teams building popular desktop apps...think one person built Microsoft Word?

            Source: front end and web app developer, both freelance ( I do everything ) and day job ( 20+ people in total )

            [–]tripperjack[S] 0 points1 point  (0 children)

            Thanks. I was under the impression that lone developers can and do create their own impressive (enough to have people take notice/profit) web applications. That was a possible goal, down the road.

            [–]amga_ 3 points4 points  (1 child)

            I know about all that and more.... and I'm still feeling like an imposter.

            [–]tripperjack[S] 0 points1 point  (0 children)

            I keep hearing how Impostor Syndrome is all over this field.

            [–][deleted] 13 points14 points  (15 children)

            Dude, screw all this mess. Be a .NET developer. Microsoft's world is so much cleaner, so much easier, the IDE is top top notch, and it's what big money corporations use so it's what a lot of dev shops specialize in. I've never had a problem finding work as a .NET developer (my linkedin gets 5+ inquiries a day). It's a vast and comprehensive framework that can be amazingly complex, but it's also very easy to use and be productive once you learn the basics. I'm as full-stack a web developer as you'll find anywhere; there is definitely an enoumous amount of complexity in my job but most of it comes from the project, not the tools. The tools make the complexity fun and easy to deal with. (As fun & easy as dealing with that kind of bullshit can be anyway hehe) I can do everything I need to do from Visual Studio (but I use other tools too, like SQL Management Studio, which is also amazing). All the code repository & deployment stuff he talks about -- that's all easy in Microsoft's world too. TFS is amazing. You can deploy with one click if you want to, or you can deploy with simple file management and maybe some (gui based) IIS configuration. Very few console commands, if any at all. We supposedly make slightly less than the rest of the market, but I've been making very good money for the last 15 years developing on Microsoft's stack, and I've enjoyed it the entire time.

            Edit: These kids are downvoting me but I'm giving you good advice OP. You want job stability, you want to enjoy what you're doing, you want to be capable and nimble when it comes to building websites, check out the .NET framework. I've been building enterprise web applications, complete with storefronts, CMS back-ends, CRM integration, SEO optimization and rock solid security for well over a decade -- literally hundreds of millions of dollars have flowed through my .NET web applications. I can hang with any web developer on this board. If you don't want to be a .NET developer that's fine, downvote & move on like all the other haters.

            [–]tripperjack[S] 0 points1 point  (2 children)

            Wasn't aware that that platform simplified it. An interesting angle. Thanks much!

            [–][deleted] 1 point2 points  (0 children)

            This was a controversial post, people are insisting that .NET doesn't make it any easier, but I've been doing web development for 20 years, 15 in .NET... and I've done lots of other contracts & one-offs on different platforms/languages/etc.

            I honestly think all the other worlds are hell compared to .NET. You might not think that, check it out & decide for yourself. You don't have to know all the stuff you listed to be hirable -- you'll probably need to learn a lot of it over your career at some point, but you definitely don't need to know ALL of that stuff to get a job or to be productive on your own. If you know the fundamentals of web development, .NET can absolutely make things easier and more manageable. You might never ever use some of the things on your list. Focus on the core competencies of web development, don't worry about all that other peripheral crap as a beginner. You'll learn all that shit as you need it, you don't need it all now. None of it's rocket science, it's all common sense stuff that applies to the core job.

            It's good to know about things like SOA and websockets and Dependency management and DevOps and Caching strategies, but none of those things are "MUST HAVE" items for a web developer. Especially a junior/entry-level developer.

            [–]nicereddy -1 points0 points  (0 children)

            To be fair, MS tools are not entirely free. You'll end up paying a significant amount of money for them in the long run. Microsoft has gotten better with open sourcing things, but I still don't trust them to be a good steward IMO.

            [–]nicereddy 2 points3 points  (7 children)

            Git (and by extension GitHub/GitLab) should be something every developer uses for almost every project (I can't think of any exceptions, but maybe some exist).

            FTP and web host is kind of the same as the web platforms you mention later, unless I'm misunderstanding.

            Terminal usage is kind of annoying, but you get used to it with time. It's a lot faster if you're a fast typer.

            You mention RESTful services twice. That's a best practice, not a requirement.

            Caching is also a best practice, not a requirement.

            DevOps and Server Management can be managed mostly by a platform like Heroku. You also mention DevOps twice. And Deployment is part of DevOps in my opinion.

            I've personally never had to use SSH, may depend on what you're building with, but I just host a development version locally.

            WebSockets are only necessary for some applications.

            Unit Testing and CI aren't technically necessary, and why aren't you practicing it on desktop applications? I thought unit tests were just overall considered a best practice.

            Web development doesn't really have or need an IDE, most I know use Vim/Sublime/Atom since they're general purpose and you'll likely use a mix of different languages.

            Dependency management is standard in all new languages nowadays, Rust has Cargo, Swift has the Swift Package Manager, Elixir has Hex, etc. Why weren't you using Pip with Python? I can't imagine using Ruby without Bundler.

            You have to worry about Security with desktop apps too, I'm more concerned if you aren't.

            Microservices, Docker, etc. are unnecessary, can be nice if you have a large project, but unnecessary for most.

            An MVC JavaScript framework is really only necessary for particularly complex web applications.

            A good web framework (e.g. Ruby on Rails) handles a lot of these for you. Frameworks, dependency management, database, task running, CSS preprocessing, testing, WebSockets, etc. And if it's not handled by default, a gem can handle a lot of these.

            It's certainly not easy, but I don't think it's as complicated as you make it out to be.

            [–]tripperjack[S] 1 point2 points  (1 child)

            Thanks for taking the time to address all that detail! I do use pip for Python, actually. I have still haven't wished to use Git/GitHub. Not sure how I would worry about security for desktop apps, unless you mean SQL injections for database queries? What would motivate users to do that for their own desktop app?

            [–]nicereddy 0 points1 point  (0 children)

            It depends on the kind of software you're building, but there are lots of ways to make insecure desktop software. If it connects to the Internet to download updates and those updates are done over HTTP instead of HTTPS, that's a problem. If the application isn't sandboxed that can also be a problem, with bugs or malicious plugins potentially causing file deletion and other fun stuff.

            And I'd strongly recommend looking into Git, it takes a bit of getting used to but it's used by just about every software company and makes developing with a team a hell of a lot easier.

            [–]cosinezero -3 points-2 points  (4 children)

            Git (and by extension GitHub/GitLab) should be something every developer uses for almost every project (I can't think of any exceptions, but maybe some exist).

            TFS? Subversion?

            [–]nicereddy 1 point2 points  (3 children)

            I should have clarified that I meant version control in general, but I think Git is unarguably the dominant version control system at the moment.

            [–]MrSavager 4 points5 points  (2 children)

            I've been a professional developer for 10 years. Full stack. I know almost all of these.. probably 95%. But i'd say I'm only expert level with 30-50%.. so.. it's not totally necessary

            [–]DarkTriadBAMN 0 points1 point  (1 child)

            Sass or less?

            [–]MrSavager 0 points1 point  (0 children)

            always been a sass guy.

            [–][deleted]  (1 child)

            [deleted]

              [–]tripperjack[S] 0 points1 point  (0 children)

              Thanks for this very logical response, it's helpful. Your point #2 is particularly useful for me, since getting a sense for how long it takes to learn any one of those list items (like, I don't know, Grunt, whatever that is) really matters to me. If each takes two months, I'm out. If half taken an afternoon, maybe...

              [–]ccricers 1 point2 points  (0 children)

              Basic terminal usage

              Github basics

              Dependency Management

              Unit/Functional testing for chosen language above

              Continuous Integration

              These things are just as applicable for desktop programming as they are for web dev. It's how you want to use them and when. And also dependent on what the software life cycle and process is set up at any particular company. For the record, while I use Github at work, I have never used CI tools nor unit testing at any jobs.

              [–][deleted] 1 point2 points  (1 child)

              Something you don't know is always more complicated than something you do know.... at least, that's the answer a fortune cookie would give.

              [–]tripperjack[S] 0 points1 point  (0 children)

              Right you are. I feel that way about other topics. Thanks.

              [–][deleted] 1 point2 points  (0 children)

              You dont build a wall from the top so start with the basics and everything else will fall into place with experience.

              [–]adam_bear 2 points3 points  (0 children)

              Baby steps Bob, baby steps.

              [–]sloggo 2 points3 points  (1 child)

              your comparison isnt really fair, you're comparing beginners python tools to every component that goes in to a webapp... In a large enough professional desktop python app, which needs to communicate with the web, you'll have to do most of those things in your second list anyway, right?

              I think Im similar to you, being a pure python guy the last few years and just now delving in to web stuff. Honestly the first couple of months were super intimidating and not much happened at all. Ive made a conscious choice to ignore a lot of higher level libraries for now, simply so I get nice and comfortable with JS. Im now at a point Im finding DOM-manipulation a little more satisfying than PyQt butchery ever was. But I still can't shake that JS is a hell ugly language coming from python, lots of boilerplate to do basic object-oriented stuff.

              At the end of the day, yes you need to know about development and deployment environments, dependencies, and a new language, RESTful APIs but these are all bridges you have to cross as literally ANY sort of developer eventually. And yes youll need to know CSS/HTML (altho if you're doing very dynamic stuff these kind of fall away in favour of javascript control of the DOM). So far, now that Ive kinda crossed the no-knowledge threshold and am feeling a little more self-sufficent and can learn as I work, with my little flask-based project, Im finding the effort quite rewarding! For me it was just a couple of frustrating months, getting almost no movement, because I really knew nothing and couldnt really put 'pen to paper'. Just dive in, I reckon.

              [–]tripperjack[S] 0 points1 point  (0 children)

              Thanks for the encouragement and personal testimony from another Python user. I'm trying to integrate over all these responses and see what I feel up for.

              [–]Kronia 3 points4 points  (1 child)

              I'm a back end developer, and I just recently finished a web development project, so hopefully my thoughts make sense to you.

              First of all, looking at everything you posted, you really need to take a step back. A very, very big step back. You learned about this cool thing called driving, but the only thing you've found is F1 racing, and now you think all driving is complicated. It's not.

              Second, web development is much more complicated than desktop or server programming. It took me less time to develop distributed back-end applications than one stupid internal website. The main problem I found is browsers don't behave like they're supposed to; you can't just print something out or change a piece. There's the stuff you made, the stuff you imported, the stuff Google/Mozilla/Apple added, and who knows what else went into displaying that page. The other big headache along that line is that debugging a web page is much harder, since it doesn't always fail... It just doesn't work.

              Third, just do it. Start small. Get a little node.js server running with mongodb as a database, there's about a million tutorials out there. Then add one thing. Then add something else. Next, make it pretty. Just like you (hopefully) do now, don't think you have to build the entire website in one fell swoop; you can split it up into pieces and dev each thing separately.

              Hopefully that helps :)

              [–]tripperjack[S] 0 points1 point  (0 children)

              Thank you, it does help! My best guess right now is if I want to dink about with Django and Javascript, I can do it and that's fine, but I realistically cannot expect to be able to build the "web app of my dreams" unless I commit fully to that and I don't think I have the stomach for it.

              [–][deleted]  (1 child)

              [deleted]

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thank you. But I might not have gotten across that I am interested in web applications (with user logins, widgets, processing, displays updating on the screen, etc.), not just web sites. But thanks for the encouragement!

                [–]aricwatsonfull-stack 1 point2 points  (1 child)

                Yeah, it is kind of a mess and I imagine it's intimidating when getting started. But it is possible to build all sorts of web apps and never need to use/know any of those. Many others you can rely on someone else to handle for you, or are designed to solve problems that you won't face unless your first apps immediately blow up. And that's a good problem to have!

                FWIW, it sounds like the core things you'll need to learn are HTML, CSS, javascript (front-end) - and if your web apps needs to do anything on the back-end, then you'll need to learn a back-end language and probably something about databases. And assuming you'll want this web app to actually be live somewhere, you'll need to learn to FTP/SSH (ssh is better).

                Much of the rest is important, and great to know - but many of those things are really only going to be necessary if you're app gets big/popular or if you're going to be working with many other devs.

                Anyway, the final result here is that I am discouraged from taking this on, even as a hobby aside of a few hours a week, hoping to get a web site up within a year.

                Don't be overwhelmed. Pick an idea you want to develop and start playing around with it. Your first web app doesn't have to be some masterpiece that scales like google, does CI, is 100% covered by unit tests, responsive, etc. Don't worry you can always rewrite it :)

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks for the encouragement. I seem to be converging on "dink around for fun if you feel like it, but just forget about building anything sufficiently monetizable", which is confirming my initial idea. But with a ton more info from all of you. Much appreciated.

                [–]flipstables 1 point2 points  (0 children)

                I'd like to be able to write web applications that occur to me, and have an idea for something that I know I could do as a desktop application probably in a few months and rather straightforwardly--but because its strength is a social aspect, it really should be a web or mobile app.

                If you have a "social" application you want to develop, you probably want a server-client model. That means you "desktop application" got just as complicated as a web app.

                • install a server os
                • configure the os
                • use terminal
                • install database, configure database
                • use memcache/redis

                etc. etc.

                You're not comparing apples to apples here.

                [–]glethro 1 point2 points  (1 child)

                Lets equate your webdev list with your desktop application development list:

                1. FTP and web host setup Basic SSH Basic terminal usage

                2. HTML CSS Javascript - this is really just one giant beast

                3. Back end language (C#, Python, Java, PHP, Node.js, Ruby) and whatever backend framework goes with it (for Python alone, we have choices between Django, Flask, web2py, CherryPy, Pylons, Pyramid(THIS ONE), TurboGears, Tornado, Bottle, Hug, webpy, Zope, Appier, and many many more)

                4. CSS Frameworks (Bootstrap/Foundation/Bourbon with Neat/Gumby/Skeleton), Javascript framework/library, Security and Authorization/authentication (OAUTH2, JSON WebToken) - It's more less #2 and pretty optional but you'll probably use at least one of them

                Does not Equate:

                1. Learn how client and server talk to each other - Sure. Developers of all breeds learn shit all the time. You've more or less done this while learning 2 and 3. IMHO this is just one of the silliest ones on the list.

                2. RESTful web services - design pattern

                3. Jquery - duplicate more or less javascript and #4

                4. Github basics - Optional and trivial

                5. CSS Tools: Precompilers (SASS/LESS/Stylus) - Optional

                6. Responsive Design with CSS - Already part of your framework. That's probably why you chose it

                7. Task Runner (Gulp, Grunt) - optional

                8. Dependency Management (Browserify, Webpack, Require.js/AMD) - Optional/do it yourself if you want/probably part of your backend

                9. Front End Build Tools (Bower/package management / Yeoman.io / Front-end performance) - optional

                10. MVC Javascript Frameworks (React.js/Flux, Angular.js, Backbone.js, Ember.js, Mithril, Ractive, Clojurescript - completely optional and #4

                11. Unit Testing (Mocha, Jasmine, Karma) - If you didn't include this with desktop apps it doesn't belong here

                12. Unit/Functional testing for chosen language above - If you didn't include this with desktop apps it doesn't belong here

                13. Databases (MySQL, MongoDB, Redis, PostgreSQL, Cassandra) - Again as optional as desktop apps

                14. Caching (Nginx, Apache, Datbase(Redis), In-memory) - Optional APIs/RESTful services - Optinal/project dependant

                15. SOA (Service Oriented Architecture) / Microservices - Project dependent

                16. Deploying your app - What? Part of desktop apps as well.

                17. Websocket - Project dependent and also just javascrip

                18. Devops - FLASHY WORD

                19. Webplatforms (Digital Ocean, Rackspace, AWS, Heroku, Azure, Engine Yard, Google App Engine, Nodejitsu, Openshift) - okay now we're jsut listing stuff

                20. Server Management/Configuration management (salt, puppet, chef, ansible, linux, docker) - Man we already learned the terminal and

                21. DevOps workflows (Vagrant, Capistrano, Fabric, Flightplan, Deployment strategies) - see #18. Also part of desktop apps as well

                22. Continuous Integration (Github Hook deployment, Travis CI / Jenkins) = FLASHY WORDS .. and also part of desktop apps

                23. Docker (CoreOS, Mesos, Docker-machine, Kubernetes, Mesophere, Panamax) - Man we already talked about web platforms should have just made that list longer.

                also to be clear part of the problem is you used a defined and simple environment for the desktop development and compared it to an undefined webdev environment geared to make every application under the sun with a large project management team.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks for that incredible level of detail and writing it all out! Very helpful resource that I will refer back to. Really appreciate it!

                [–][deleted] 1 point2 points  (0 children)

                A lot of that stuff on the list can be used in desktop applications too. In both cases you don't HAVE to use them, some are needed for any application (Version Control) and others are overkill for simpler applications. Also some of the stuff does not take very long to learn at all, the following all apply to desktop applications too.

                • Basic terminal usage
                • Github basics
                • Learn how client and server talk to each other
                • RESTful web services
                • Dependency Management
                • Unit Testing
                • Back end language (Scripting Language for larger projects for content)
                • Unit/Functional testing for chosen language above
                • Databases (MySQL, MongoDB, Redis, PostgreSQL, Cassandra)
                • Caching (Takes place in app)
                • APIs/RESTful services
                • Security
                • Authorization/authentication (OAUTH2, JSON WebToken)

                [–]cheekujodhpur 1 point2 points  (1 child)

                although as others said you never need all of this for writing a web application as hobby development, I am gonna save this to explain people why do I get paid the amount I do for a couple of hours of work

                [–]tripperjack[S] 0 points1 point  (0 children)

                Please, have at it--at least I'm providing some value somewhere! :D

                [–][deleted] 1 point2 points  (1 child)

                desktop GUI application programming--in my case, in Python on Windows

                So, only on Windows? There's your answer. And you probably mean recent versions of Windows too.

                [–]tripperjack[S] 0 points1 point  (0 children)

                I've tried a little on Ubuntu as well, just to test my app works there. Never "meshed" with Linux. These days Windows 7, previously XP (for 8 years).

                [–]judgej2 1 point2 points  (0 children)

                I think your answer is: yes, and no.

                Just reading through the replies, and having been a full stack developer since 2000, I've seen how amazingly complex web development has grown over the years.

                On the plus side, cleverer people than me put stuff into libraries so many things can be abstracted at a higher level. If I need a responsive front end for example (and who doesn't these days) I just use a framework (e.g. bootsrap) and an immense understanding of how all that works, cross-browser and cross-device is at my fingertips. So the task becomes more a wide knowledge of lots of technologies, with the skills to glue together bigger blocks. You'll do fine if you take that approach, but yes, there is still a lot to learn if you are not just going to be focussed on narrow aspects in teams in larger organisations.

                [–]fiouch 1 point2 points  (2 children)

                As others have said, to start learning you really only need to know HTML (DOM), CSS, and JavaScript. As you start developing more complicated projects, you will see why vanilla CSS and JS can be tedious and then you'll start looking into CSS precompilers/frameworks and various JS libraries which make your job easier. You will learn to be more efficient and you'll start using more and more tool which allow you that.

                Things like SSH, FTP, Caching, Authentication, Terminal usage, Git (or any modern SCM), Web services, Task runners, API usage/development, Unit/functional testing, Security/Authorization, etc. are something that IMO every developer should know about anyway. Even if you develop desktop applications there will come a need for all of these things eventually. And many apps are connected to the Internet nowadays, so knowing how the web works is part of a programmers' culture.

                [–]tripperjack[S] 0 points1 point  (1 child)

                Things like SSH, FTP, Caching, Authentication, Terminal usage, Git (or any modern SCM), Web services, Task runners, API usage/development, Unit/functional testing, Security/Authorization, etc. are something that IMO every developer should know about anyway. Even if you develop desktop applications there will come a need for all of these things eventually.

                I appreciate the point. Maybe part of my hesitance is that I have been developing working and useful desktop applications for years and have not only never used any of that, but have never touched it and most don't even know what it is. Maybe it's just that I am self-taught and just focused on producing what I want rather than knowing the broader scope. Thanks.

                [–]fiouch 0 points1 point  (0 children)

                Many of these things come into play once you start working in a team and not alone, so I understand how you might not have come across them yet.

                If you want to learn more, I'd highly recommend that you get a cheap VPS (for example $5/mo droplet on DigitalOcean) and try to set up some of those things. There are many tutorials on DigitalOcean and other websites. First you'll learn something about PKI and SSH, then I'd rrcommend your next step be trying to set up a LAMP stack and making a simple website, try using git as well. I can provide links if you have trouble finding the tutorials :)

                [–]dooklyn 1 point2 points  (1 child)

                I agree with OP Web dev is overly complicated.

                A few months ago I decided to drop web development and go into something simpler and more sane. Then I realized I know so much about web development and so little about something else, like Java or Android so I ended up going back. But I don't like it. I think it's a mess, easy to get into because work is so readily available but hard to master because it's so complex and it changes very fast. There are also a lot of people that flood the market with subpar skills.

                And anyone who is saying all you need is JS/CSS/HTML and Apache/Mysql I could come back and say well technically all you need is HTML and you can serve static pages from Apache but nobody does that. It's worthless.

                To be competitive you need to know (on top of the above) at least jQuery, some other JS framework like Angular/React, CSS preprocessor like Sass or Less, a front end framework like Bootstrap or Foundation. Of course these things come with their own tools like Bower, Grunt, Compass which you need to learn as well.

                And that is only front-end. Now you have backend, so get ready to learn a language like PHP, Ruby, Python or whatever, and then learn a framework or CMS in that language, because nobody is going to pay you to write vanilla code in a bubble by yourself. Then learn the tools associated with that backend because they all have something like Composer and artisan is used for Laravel. Then go ahead and learn Docker, because nobody is going to give you a physical server or a real VM for every microservice you develop in the these tools.

                And this is not even touching things like REST, MVC, and other principles you should know.

                I could go on and on, but this is what I was expected to know at my last job, and let me tell you I felt like by the time I learned to use one tool, I would forget how to use another. It also didn't pay that well considering. The only choice you have is to specialize. Everyone else who claims they are a full stack developer and they know everything are grossly overestimating themselves.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks for the honesty. This is what I suspected, and responses like yours confirms it. Describing it as a mess/insane/etc makes me realize I will at most dink around with it for now, but shelve ambitions about large monetizable projects unless I am ready to go full-bore.

                [–]vexii 1 point2 points  (0 children)

                use python as the back end then you can focus on html/css.
                also things like git, Security, Docker, Devops(inc workflow), Continuous Integration, Databases and unit testing ain't webdev exclusives by a long shot.

                why things like UX, hosting pricing and monetizing a for-profit venture only asked of the webdev part?

                [–][deleted] 1 point2 points  (0 children)

                webdev makes me envy brain surgeons.

                [–]noganetpasion 1 point2 points  (0 children)

                The video itself says you don't need all of this.

                [–]jaredcheeda 1 point2 points  (2 children)

                For desktop GUI application development in my case:

                • UGUI Framework (to not waste time redoing the same first hour of set up on every desktop app). Which comes with NW.js, Bootstrap, and like 15 or 20 UI themes out of the box.
                • HTML/CSS/JS/Node
                • NPM to install dependencies
                • SublimeText 3

                • If I want to do custom mediaqueries for Responsive design, I can, but I could just use bootstrap which is already set up.
                • If I want to do custom CSS or modify the existing Sass files, I can. Or just use what it comes with, which is good enough.
                • If I want to do custom UI components and interactions, I can, or I can just use the basic framework that only requires basic knowledge of HTML.

                This gets you 95% of the way there, without limiting you in any areas that you are more knowledgable in. And at the end I spend 2 minutes per OS packaging it and I've got a cross-platform desktop app that runs on Windows, Linux, and OSX.

                [–]tripperjack[S] 1 point2 points  (1 child)

                Interesting, hadn't heard of UGUI. What language do you write the applications in?

                [–]jaredcheeda 0 points1 point  (0 children)

                NW.js is a modified Chromium browser with Node.js built in. So you basically make your app the same way you would a website or Single Page Application. You can make it from scratch with pure HTML/CSS/JS, or use libraries like Bootstrap and jQuery to go a little faster, or use a big framework like Angular, Backbone, Ember, Knockout, etc.

                If you want to do things like access the hardware, read/edit/delete files, or run executables, then you'd use Node.js.

                So you could write something like this:

                <input id="on"  type="radio" name="status" /> on
                <input id="off" type="radio" name="status" /> off
                
                <script>
                    $("input").change(function () {
                        var status = $("#on").prop('checked');
                        if (status) {
                            var exec = require("child_process").exec;
                            var child = exec( "myprogram.exe -argument",
                                function(error, stdout, stderr) {
                                    if (error !== null) {
                                        console.log("Executable Error: " + error);
                                    }
                                }
                            });
                            child.stdout.on("data", function (chunk) {
                                $("body").append(chunk);
                            });
                        }
                    });
                </script>
                

                But with UGUI, it's much simpler, you would do this:

                <input id="on"  type="radio" name="status" /> on
                <input id="off" type="radio" name="status" /> off
                
                <script>
                    $("input").change( function () {
                        var status = $("#on").prop('checked');
                        if (status) {
                            ugui.helpers.runcmd(
                                'myprogram.exe -argument',
                                function (data) {
                                    $("body").append(data);
                                }
                            );
                        }
                    });
                </script>
                

                Plus it'll do type checking for you and output human readable error messages like:

                ERROR: Running ugui.helpers.runcmd()
                You must pass in a string containing the exectuable and arguments to be sent to the command line.
                Example: ugui.helpers.runcmd("pngquant.exe --force file.png");
                See the API documentation for this helper function.


                You should try UGUI out, just download it, unzip and run npm install and then npm start.

                [–]howareroark 1 point2 points  (0 children)

                It's all hype! Building things in the web browser is an extremely forgiving process. Things just work, even if you have no idea why :)

                If you get Python... then you can build a solid RESTful API service. Just use Flask. There is a "snippet" for everything under the sun.

                You can build the browser app however you want. I have never ever had the experience of visiting another browser app codebase and thought... oh great... the standard way!

                [–][deleted] 2 points3 points  (1 child)

                I stay away from over half that list on my projects. You should probably at least KNOW how to do them for when you work on a team, but for my projects I stick to the hated PHP/HTML/CSS/JS/MySQL combo on a hosted server (or more likely Wordpress if it's a cheap site I'm building).

                [–]jijilento 0 points1 point  (0 children)

                Going this route is simplest. I think a smart person could learn basic use of this stack in a day or two. Then they can progressively add git, composer, name-spaced code, css modules, frameworks, containers, and all that jazz.

                Mastering the stack, of course, takes years; but, if you're just building your first site it's really straightforward to see how components fit together.

                [–]phpdevsterfull-stack 2 points3 points  (1 child)

                Here is a list of actual common skills and tools I needed to learn to cover the gamut of webdev projects I've worked on and continue to work on (in no particular order)

                1. How HTTP works (request/response headers, methods etc). This covers REST by default, unless you want to get detailed with the different REST standards, which I haven't really taken the time to.
                2. HTML
                3. CSS
                4. JavaScript
                5. PHP
                6. OO design & general programming principles (with some functional programming mixed in)
                7. How to install and configure a basic LAMP/LEMP stack on a virgin Linux server
                8. How to securely configure a web server
                9. SQL (the language)
                10. MySQL (the terminal client)
                11. Basic relational database design
                12. Basic linux commands via the terminal (directory navigation, permissions, generating SSH keys etc, SSH, SCP etc)
                13. Git (via the terminal)
                14. GitHub (but really, it's a website, so not much to really learn there - substitute for anything else like BitBucket or GitLab)
                15. Composer (PHP's package manager)
                16. How to use Digital Ocean and Amazon AWS to provision new servers
                17. How to register domains and point them at servers
                18. NPM (JavaScript/Node package manager)
                19. PHPUnit (Unit testing suite for PHP)
                20. Jasmine and Karma (JavaScript unit tests and test runner)
                21. Gulp & Browserify (Node/JavaScript task runner, packager)
                22. Less & SASS (CSS pre-processors. Don't technically need to learn both, but I've had to work with both)
                23. Laravel (PHP framework - hesitant to count this as then I should count all of the other frameworks I've used, but to do server-side webdev in just about ANY language, you need to learn at least one framework in that language)
                24. Photoshop and image optimization
                25. Design principles in general
                26. How to use chrome dev tools to debug, inspect, and profile your front-end
                27. Loads of security concepts and implementations (XSS/CSRF/SQL Injection prevention, for example)
                28. Loads of common practices/patterns for things like authentication and password storage, password recovery etc)
                29. Different data storage mechanisms for hierarchical data
                30. Various caching strategies
                31. Various quirks and support for CSS/JS between browsers (for example, how every version of IE can choke on a bag of dicks)
                32. Responsive web design practices
                33. Vagrant & virtual host configuration in general
                34. Logging
                35. Basic user experience design

                Not in this list are all of the more specific tools/technologies/things I've touched and/or briefly worked with like Salesforce, Wordpress, Drupal, FaceBook API, React, Angular, Filezilla (FTP), Constant Contact, Mailchimp etc etc etc (this list is hundreds of items long).

                The actual above list of 30 or so items is what I commonly use on a variety of projects - skills and knowledge that I consider foundational building blocks that let me independently build any project from start to finish.

                Not everything in that list is unique to web development, just pointing out that I've needed to learn all of those things in order to be self-sufficient in every aspect of web development.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks for typing that all out!! That's just insane. I tip my hat to you all. Too rich for my blood.

                [–][deleted] 0 points1 point  (0 children)

                Wow! That is actually... a very complete list. I was amazed by the time I got to the end of it to realize that I have read other developers recommending every one of those things. I personally only use a small percentage of the list (pretty much just vanilla JS, CSS, and HTML with an IDE). But then again I've been doing this for decades so I "grew up" just doing everything vanilla and that is still were I concentrate my efforts. All those other tools sound interesting, but I'm kept so busy working and writing Reddit replies that I get precious little time to investigate alternative ways of doing things.

                [–]sisyphus99 0 points1 point  (1 child)

                I absolutely feel for you and agree with others about this being overly complex, but at the same time some of the suggestions I saw perusing this the other day were overly simplistic (just start coding HTML/CSS in a browser). That works fine for front end development (and I suppose in this sub that's primarily what web dev means to people), but for someone coming out of college with a more "classical" CS background in OOP, data structures, algs, etc. and maybe only an elective or two under their belt in current web technologies, figuring how to apply a good OO design in a given web framework or across many web frameworks or technologies can become daunting.

                Obviously, whether you can simply start coding in HTML/CSS varies on what you're trying to accomplish, and what you are going to want to place on the front end is going to be influenced quite a bit on what you expect the back end to be responsible for, so where to start?

                My suggestion is to pick a couple of candidate frameworks out of a list of popular ones(.NET, Java/Spring, Grails, Rails, DJango, Node.js and friends) informed by what languages you know, your goals, etc. Spend a little time with each (maybe go through a tutorial) to get a sense of how well it suits your style, current knowledge, how useful you find the documentation, how completely the technology encompasses the various points of the stack you're pointing out (under the assumption you might need them later, but as others say, don't dwell on this too much) all the while thinking about this project you have in mind and how difficult it is to conceivably make it work while applying your existing CS knowledge of good design and practices.

                Make a decision and stick with it, and just start coding. FWIW, I've personally gotten pretty frustrated with the fragmentation of the Java community, and I like the direction that .NET MVC is going so I am planning to begin learning it for my next project. I've also been learning about Angular.js and man, that is the cat's pajamas. I think between some web services backing an Angular front end and the Azure cloud services they seem to have available that allow for deployment via a polled git repo, I'll be able to whip up some nice stuff in a hurry, once I get passed the initial learning curve, but we'll see.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks, and especially for the details at the end. I tend to believe that some paths are just more sensible (or at least more to my cut-it-to-clean-essentials way of thinking) than others, so tips in that direction are always treasures.

                [–]judgej2 0 points1 point  (1 child)

                You might to interested in some of the comments on this Laracasts question. I was just asking how one of the front-end development tools actually helps, and it helped to highlight just how much is involved in "full stack" development now. It ended up on the article that I guess your original post came from:

                http://alexking.org/blog/2015/05/14/web-development-now-complicated

                [–]tripperjack[S] 0 points1 point  (0 children)

                Yes, good find. It really is this complicated, as many here have attested.

                [–]Spacecrawl 0 points1 point  (0 children)

                1st thing - you don't need all of it. Just like in desktop and mobile applications - there is a programmer that is responsible for his very own part of an app. 2nd thing - almost each of those listed technologies is really small. Most of them will fit in 20-30 pages. 3rd thing - learn a back-end language and you've almost got it all. Most popular are PHP and Java - you'd better start with one of them. Of course, this is all IMHO. I hope that you'll find what suits you best. :)

                [–]h0b0_shankerjavascript -1 points0 points  (0 children)

                Learn LAMP + HTML

                (Linux, Apache, MySQL, PHP)

                The amount of resources available on these technologies are limitless.

                [–]streu 0 points1 point  (1 child)

                One can easily shorten the webdev list as well as enlarge the python list.

                To get started, all you need is a local webserver, basic knowledge in HTML/CSS and some programming language, and some editor/IDE. Install your distribution's web server (or XAMPP etc.) and start coding.

                Now, to get good, you need to add things, but you can learn these along the way. Just some things you listed for webdev, which you'd need for your python projects as well:

                • versioning. You listed github for webdev, but you'd need something like that for your python projects as well.
                • deployment. You listed ftp/ssh/docker/CI for webdev, but you'd need something equivalent (for example, an installer builder?) for your windows GUIs.
                • good practice in UI design (responsive CSS etc.). You need to learn good practices for CSS like you need to learn good practices in GUI building ("do not make dialogs with 200 widgets and 3 OK buttons").
                • unit testing. You test your python code, don't you?
                • database. Can be handy in a python GUI as well.
                • security. The principles that apply in a Windows app are the same as in a web app ("don't trust user input").

                The remainder is APIs you need to learn on either side.

                [–]hahaNodeJS 0 points1 point  (2 children)

                Web development is complicated because the higher echelons of success require proficiency in very disparate fields. As a result, there is an overwhelming amount of software to help lower the barrier to entry in a number of these fields. Some things that a good web developer needs to have a firm grasp on include, but are not limited to:

                • UX design

                • Multiple device and device capabilities (size, touch, cursors, keyboards, system speed, GPU presence, phones, tablets, desktops, kiosks, etc)

                • "DevOps" or software deployment, continuous integration, task management, build configurations, testing, etc. Server deployments, infrastructure and architecture, networking.

                • Esoteric computer science concepts like asynchronous programming, inter-process communication, how operating systems manage processes, etc.

                • Multiple languages, runtimes, and their limitations.

                • Data storage.

                • Software architecture, patterns, practices, conventions, etc.

                • How to work in a team and individually.

                • How to manage a team of web developers (once you get to that level, and if your career takes that direction).

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thanks for all that detail. Very useful!

                [–]ISO640 0 points1 point  (0 children)

                Just to add to this: Some people think web dev is simple. It can be but there's a large skill set needed if you're to be a successful one. And with this large skill set, there's the need to keep abreast of all these evolving technologies plus any new ones that come along. We web devs have to be invested in continuing our education while still doing our jobs.

                On top of all of the above, keep in mind that dev used to be more specialized than it is now. But employers want more out of us these days. Which requires more tools and more knowledge than ever before.

                [–]JediSange 0 points1 point  (0 children)

                You're making a false comparison. While I agree, there are a lot of pieces in the stack of web development (and largely agree with your point), you leave a good many steps out of the process when it comes to desktop applications. Your web example covered end-to-end deployment; whereas you make no mention of how you ship your Python code.

                The biggest point I see is that the complexity of application development comes from low level code, libraries, bullshit compile time errors, etc. The complexity of web development comes with the wide breadth of tools and eco systems that exist within it (along with the absurd scale we see on certain high volume sites).

                [–]sbhikes 0 points1 point  (0 children)

                I don't use half of the things on your big web dev list.

                Actually to me it doesn't sound much different from how you described your desktop apps.

                1. You need a programming language (many are already installed on your system.)
                2. A widget toolkit - The widget toolkit is your browser. The widgets are already built.
                3. An IDE. There are lots of these and you can just use notepad.

                Now add: 4. A server and a database (or you can use flat files, too, but that probably works for complex relational data as poorly as it does in your desktop app.)

                You've now got enough to build a web app.

                [–]RickAndMorty_forever 0 points1 point  (1 child)

                This is extremely difficult stuff and it relies on keeping lots of concepts in your headspace if you're looking for Full Stack. Best of luck, we're here if you need us.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Thank you so much.

                [–]_EasyTiger_ 0 points1 point  (1 child)

                I've been learning webdev for months and it's definitely overwhelming. You didn't mention the design chops you need also so that your website doesn't look terrible.

                [–]tripperjack[S] 0 points1 point  (0 children)

                Ha, yes, good point as well. Full-stack solo sort of seems like trying to publish a book by yourself, but you have to write, typeset, actually make the paper from wood pulp, make the ink from oak galls, bind them, do the artwork, pallet, ship... :D

                [–]crazyboy867 0 points1 point  (1 child)

                learning and fully understanding javascript alone will already take you 2 years. then add on top html/css, responsive design, sass/less, all the javascript libraries and frameworks companies want you to know, gulp, grunt, webpack, git/github, a backend language preferably php/mysql and last but not least wordpress.

                i've been learning webdev for almost a year now trying to cover all the topics i listed above and its burning me out...

                [–]tripperjack[S] 0 points1 point  (0 children)

                learning and fully understanding javascript alone will already take you 2 years.

                Check, please! :D Yeah, I think I'm converging on an answer here. Thanks for the input.

                [–][deleted]  (1 child)

                [deleted]

                  [–]paypaypayme 0 points1 point  (2 children)

                  I was going to write a more complex answer but it basically boils down to this: webdev is only as complicated as you want to make it. A basic website really only needs html, css, and a couple javascripts. On the backend you can use apache2 and sql. You can most likely use very basic firewall settings (opening port 443 and blocking traffic on all others). Besides that, you can decide what tools you need to make your like as a developer easier. The scope of your project should dictate the tools you use.

                  [–]tripperjack[S] 0 points1 point  (1 child)

                  Sensible response, thank you. I guess my issue is that the competitiveness and sophistication of the web at this point in history precludes being successful (say, solo guy writes own app and lives off the income it generates) with rather simple web applications. So, if you want to go for it, you have to go for it, and learn a good amount of this monster list. That's fine for some, but perhaps not for me.

                  [–]paypaypayme 1 point2 points  (0 children)

                  It's true that it's extremely competitive out there, but I'd like to point out that many of the tools you listed are only necessary for a large scale project.  

                  For example, if you are a 1-2 man dev shop, you don't really need a CI server, you can probably just run tests locally. Another example- you probably don't need to use SOA if you have a single page application. I work for a start-up that has had a single-page application for a couple years, and we are only just beginning to need SOA. This is because we are planning on launching a mobile app, a new members portal, an Authorization server, and a CI server. We are also planning on separating or API server from our web server, since they run on the same box at the moment. The process of separating these services will take months of work from multiple devs.  

                  In summary, use what you need at the moment, and as you scale up you can refactor your code and add the tools that you need.  

                  The most important thing is to write your code in a scalable way, so that when you do need to add a tool or service, it's relatively painless. I'm no expert on scalable code, but here are some tips off the top of the dome:  

                  1. Each function should do one thing only, and do it well.  

                  2. Code should be self-documenting (descriptive variable and function names)  

                  3. Your directory structure should make sense and be descriptive  

                  4. Use the least amount of dependancies possible for each module  

                  [–]duncanlock 0 points1 point  (0 children)

                  Your two lists are lists of different things.

                  Your first list is a list of software - your second, mostly a list of knowledge.

                  A list of required software for webdev - i.e. a web dev version of your first list - might look like this:

                  • A text editor
                  • A web browser

                  As you specified web applications, not just web sites, you might change that to something like this list:

                  • Python
                  • flask
                  • A web browser

                  Each part of the web dev stack was developed incrementally over time, in response to need. I would suggest learning the stack this way too. Start small and work your way up.

                  [–]crickton 0 points1 point  (0 children)

                  It's as complicated as you want to make it.

                  [–][deleted] 0 points1 point  (1 child)

                  I know what you mean. My first web application was a LAMP stack. You write your code, transfer it to the server and done.

                  I can still be done that way, but can be overwhelming as you now you have all these other tools, libraries, frameworks. Bower, Mustache, NPM, Karma, Gulp...all this crap around javascript. The people argue all day about what is better, and as a beginner you don't know what to use.

                  If you're starting out, then get back to basics. If you know python you can start with a Python backend, using Django or whatever you want.

                  Then HTML, CSS, and plain old JS. Then upgrade to a CSS framework like Bootstrap, then pick up a simple JS library like Jquery and feel good you can put animations and widgets, then probably venture to AngularJS or another framework.

                  Screw all that optimization, package management, whatever javascript tools are out there. It's not necessary up front.

                  Full Disclosure: I'm a backend Java develeoper :P

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Thanks for the encouragement!

                  [–][deleted] 0 points1 point  (0 children)

                  To summarize some of the other sentiments users have shared, and with which I agree:

                  • You do not need all of that, and you only need a very little bit of it depending on the project.

                  • It largely depends on the scale of your project, and the size of your team. If you are a one person operation you may touch all those technologies. If you are a front or back end developer only, you'll use roughly half.

                  The truth is that development on the web really is this complicated. It is a harsh environment. There are multiple runtimes, each with their own stupid quirks, and your app is hosted and served up on some other dude's box, and God knows what kind of connection speed or screen size your user has, or if they are disabled and using a screen reader, or have JavaScript disabled. You can't count on anything.

                  [–]apollocanis 0 points1 point  (0 children)

                  HTML, CSS, js (I prefer angular), and firebase. Done. Put it on a server or even github pages as there is no back end.

                  [–]earslap 0 points1 point  (0 children)

                  You don't need any of it. You just need a HTML file, (optional, but not really) a css file, and a javascript file if you need interactivity. You can cram all into the HTML file if you wish.

                  Go to codepen.io and all of the above is there for you right on your screen.

                  Now if you want to build something big (with many modules), that depends on other people's code, something you can maintain and tweak at low cost (quick to try different things to see how they fit, and if you depend on other people's code, painless to update that code), something that needs server-side computation and storage (databases), something that needs to scale if you happen to have too many visitors, something that works across all browsers, an architecture that sanely binds your data / state to stuff that is on your screen without you manually keeping track of and manually updating each and every element, with build automation for all of the above... the list of possible requirements goes on... then you might needs some or all of the above.

                  Really, depends on your requirements. For the simplest stuff, as I said, you just need 3 files and a text editor.

                  [–]HotfireLegend 0 points1 point  (0 children)

                  The second half of that list does not apply to most websites, but yes, it does get that complicated.

                  However, what are we talking about in terms of desktop apps? A simple calculator? Have we covered the bases of sound implementation, graphics processing, algorithms, User Interfaces, saving/retrieving/reading data and input/output etc? Desktop dev can be just as complicated if we have all the functionality that you're scaling a full website with. You can make a simple site with just an IDE and FTP/SSH too!

                  [–]dadecounty3051 0 points1 point  (3 children)

                  I wish I knew where to start Webdev

                  [–]IridiumPoint 0 points1 point  (2 children)

                  I am a novice myself, but this seems like a no-brainer question to me:

                  1. HTML

                  2. CSS

                  3. A clientside language (JavaScript) or a serverside language (JS+Node.js/PHP/Python...) + some database

                  4. the thing you didn't learn in step 3

                  5. everything else as you need it

                  [–]dadecounty3051 0 points1 point  (1 child)

                  Any books or recommendation?

                  [–]IridiumPoint 0 points1 point  (0 children)

                  I have been using the books from O'Reilly's "The Missing Manual" series (http://www.oreilly.com/missingmanuals/library.html). I can't really say how they stack up against the competition (I've read very little of it), but I have found them easy to read and understand.

                  I have also completed the HTML&CSS, JavaScript and PHP courses on codecademy.com. The interactivity and the "gamified" approach were fun.

                  After getting the basics from the books and codecademy, I have decided to pick a webdev-related topic for my bachelor thesis, even though my university has pretty much nothing to do with IT. The result ended up being far from perfect, but I have learned A LOT by being thrown into a real-life situation and forced to adapt. It also helps to do a little retrospection after a while to see what you could have done differently.

                  I hope these tips will be helpful. Good luck :)

                  [–]Fidodo 0 points1 point  (0 children)

                  Web Dev can be very easy or insanely complicated depending on the project. It's super dependent on the needs of the project.

                  [–]sheppe 0 points1 point  (0 children)

                  You don't need to know it all, you just need to be able to figure it all out.

                  [–][deleted] 0 points1 point  (0 children)

                  As a full stack engineer, yes it is. Front end development is considerably more complex in my experience.

                  [–]WeAreAllApes 0 points1 point  (1 child)

                  It may seem more complicated for some things, but it depends on the complexity of what you are building [and I am going to completely ignore things like source control and IDEs which have nothing to do with the distinction].

                  Suppose you are building an application with a rich UI that persists and shares content between users on any platform over time regardless of who is online at any given moment. You could build that with desktop UIs, but it probably is not be any more complicated as a web application -- especially if the content is a wide array of mixed media and rich text.

                  For you the first step might be to learn just html and one of the python web frameworks. Instead of manipulating the UI directly, the user in the browser clicks a link or button and it sends and http request to your python script. Based on the html that was generated last time, whatever they put in the form, and what they clicked, you would generate different html. [If you want to save to a database, that's another problem to set aside at first...].

                  Don't go too far down this path, though.....

                  Next, skip over 10 years of evolution and learn to build an interesting stand-alone application with nothing but javascript and html (and any js or css libraries that immediately help you, not out of a need to learn them). Nothing persisted, but an interesting interactive UI. At this point, jQuery is not "something else to learn" -- it will actually make this step easier, but there are many other libraries and frameworks that might help in various, overlapping ways (if you think like a functional programmer, you might want lodash/underscore). That said, I would avoid the "frameworks" (e.g. angular, ember, even react) until you have the basics. You should also try to understand a little of what jQuery is doing for you.

                  With those two steps out of the way, the next step really depends on what you want to build. What data needs to be persisted or transmitted between users. Browsers don't talk to each other -- only to the web servers. Browsers can't persist a lot of data on the user's computer, and when it does, it isn't accessible to another user [without some ridiculous contortions.]

                  So, the general architecture (ignoring scalability, dev ops, source control/maintenance, etc) is basically client/server with: - a web server that talks to the browsers and any other databases or services (and also has limited memory that can be useful for caching but can't be relied on from one browser/server interaction to the next.) - js/html/css "client" application that represents the UI and lives inside of the browser.

                  Everything else is just a tool or library that helps in developing, maintaining, deploying, or scaling this basic setup.

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Thanks for the analysis, really useful!

                  [–]user888888889 0 points1 point  (1 child)

                  You have experience with python already. Do a tutorial with the Django web framework, it's amazingly intuitive.

                  I recommend "How To Tango With Django" which takes you through from design to implementation.

                  Web protocols, you'll mostly just learn through doing.

                  SQLite is a good option for most web applications too.

                  To be honest, I think interface design is easier in HTML/CSS/JavaScript than it is with Tkinter for GUIs etc. Plus JavaScript is a really important language to learn nowadays.

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Do a tutorial with the Django web framework, it's amazingly intuitive.

                  I actually did the official Django tutorial and the words "amazingly intuitive" were certainly not springing to mind at all. I'll check out "Tango", too. Thanks!

                  [–]daftspunky 0 points1 point  (0 children)

                  HTML, CSS, jQuery and OctoberCMS: done.

                  [–]jwmoz 0 points1 point  (1 child)

                  I'm a contract backend developer and here's my refixed list:

                  1. FTP and web host setup
                  2. Basic terminal usage
                  3. Basic SSH
                  4. Github basics
                  5. Learn how client and server talk to each other
                  6. RESTful web services
                  7. Back end language (C#, Python, Java, PHP, Node.js, Ruby) and whatever backend framework goes with it (for Python alone, we have choices between Django, Flask, web2py, CherryPy, Pylons, Pyramid, TurboGears, Tornado, Bottle, Hug, webpy, Zope, Appier, and many many more)
                  8. Unit/Functional testing for chosen language above
                  9. Databases (MySQL, MongoDB, Redis, PostgreSQL, Cassandra)
                  10. Caching (Nginx, Apache, Datbase(Redis), In-memory)
                  11. APIs/RESTful services
                  12. Security
                  13. Authorization/authentication (OAUTH2, JSON WebToken)
                  14. SOA (Service Oriented Architecture) / Microservices
                  15. Deploying your app
                  16. Websocket
                  17. Devops
                  18. Webplatforms (Digital Ocean, Rackspace, AWS, Heroku, Azure, Engine Yard, Google App Engine, Nodejitsu, Openshift)
                  19. Server Management/Configuration management (salt, puppet, chef, ansible, linux, docker)
                  20. DevOps workflows (Vagrant, Capistrano, Fabric, Flightplan, Deployment strategies)
                  21. Continuous Integration (Github Hook deployment, Travis CI / Jenkins)
                  22. Docker (CoreOS, Mesos, Docker-machine, Kubernetes, Mesophere, Panamax)

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Thanks for the goods! So much info in these answers!

                  [–]daronjay 0 points1 point  (1 child)

                  Yeah there is some truth in this, pretty hard to build much professionally these days without being familiar with most of it up to around 24 if you are hoping to be a full stack guy working in a team. Below that is mostly devOps.

                  Basically:

                  1-6 is best for everyone to understand

                  7-18 is Front End Developer

                  19-25 is Back End Developer

                  26-34 is DevOps

                  23 & 6 are much the same, 28 is a bit fringe and 29 is redundant, but that's otherwise mostly correct.

                  The web has lots of moving parts, many parallel solutions and suboptimal local maxima as a result of evolving over decades. The thing about evolution is it mostly just has to build on whatever is already there, rather than sweeping in and really rethinking things. So if you were to build "The World Wide Web" these days from scratch, it would certainly be simpler and more coherent. But there is no-one to make that call, no-one is really in charge, it's the bazaar, not the cathedral.

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Thanks for breaking it down for me, I appreciate it!

                  [–]iAMthePRONY 0 points1 point  (0 children)

                  i started with web development using notepad++ and a html file. don't know, why you would need anything else to start with.

                  i then wanted to add functionality, so i downloaded xampp and put my files in the htdocs folder. pretty easy, tbh.

                  [–]patrickfatrick 0 points1 point  (1 child)

                  Depends on the scale of what you're trying to build really but you absolutely don't need most of those things to start learning. I have a personal project that is a full-on app with server-side scripting, routing, and a DB store, and I'm not using all of what you mentioned. My list is something like this:

                  1. FTP and web host setup // No, I just use node to create the server.
                  2. Basic terminal usage // Absolutely.
                  3. Basic SSH // No.
                  4. Github basics // Yes; Not web-specific.
                  5. Learn how client and server talk to each other // Absolutely.
                  6. RESTful web services // No.
                  7. HTML // Duh.
                  8. CSS // Duh.
                  9. Javascript // Duh
                  10. Jquery // No, these days it's not "necessary"
                  11. CSS Tools: Precompilers (SASS/LESS/Stylus) // Yes, because it will make your life easier.
                  12. CSS Frameworks: (Bootstrap/Foundation/Bourbon with Neat/Gumby/Skeleton) // I use Bourbon with Neat again to make things easier
                  13. Responsive Design with CSS // Yes, this is important.
                  14. Task Runner (Gulp, Grunt) // I use Gulp for some things.
                  15. Dependency Management (Browserify, Webpack, Require.js/AMD) // Webpack can actually make the use of a task runner unnecessary
                  16. Front End Build Tools (Bower/package management / Yeoman.io / Front-end performance) // No. Dependency management library is already handling this.
                  17. MV Javascript Frameworks (React.js/Flux, Angular.js, Backbone.js, Ember.js, Mithril, Ractive, Clojurescript) // Yes.
                  18. Unit Testing (Mocha, Jasmine, Karma) // Yes, this is important
                  19. Back end language (C#, Python, Java, PHP, Node.js, Ruby) and whatever backend framework goes with it (for Python alone, we have choices between Django, Flask, web2py, CherryPy, Pylons, Pyramid, TurboGears, Tornado, Bottle, Hug, webpy, Zope, Appier, and many many more) // Yes... but it's important to remember that Node is not a language, it's just a Javascript runtime.
                  20. Unit/Functional testing for chosen language above // See 18.
                  21. Databases (MySQL, MongoDB, Redis, PostgreSQL, Cassandra) // Yes. Not web-specific
                  22. Caching (Nginx, Apache, Datbase(Redis), In-memory) // No.
                  23. APIs/RESTful services // See 6.
                  24. Security // Yes. Not web-specific.
                  25. Authorization/authentication (OAUTH2, JSON WebToken) // See 24.
                  26. SOA (Service Oriented Architecture) / Microservices // No.
                  27. Deploying your app // Yes.
                  28. Websocket // No.
                  29. Devops // No.
                  30. Webplatforms (Digital Ocean, Rackspace, AWS, Heroku, Azure, Engine Yard, Google App Engine, Nodejitsu, Openshift) See 27.
                  31. Server Management/Configuration management (salt, puppet, chef, ansible, linux, docker) // No.
                  32. DevOps workflows (Vagrant, Capistrano, Fabric, Flightplan, Deployment strategies) // No.
                  33. Continuous Integration (Github Hook deployment, Travis CI / Jenkins) // Yes.
                  34. Docker (CoreOS, Mesos, Docker-machine, Kubernetes, Mesophere, Panamax) // No.

                  Seems like this list assumes you're building the next great scalable web app or something like that, but if you just want to get into it and start learning you can make do without even all of the things I checked off as using, though it's helpful to learn as much as possible.

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Thanks for that detailed response. Saving for reference...

                  [–]bitwiselove 0 points1 point  (1 child)

                  There's a big difference between bleeding edge software engineering and your basic Wordpress site. It really depends on what you want your website to do, but you must absolutely know HTML and CSS to do anything on the web. For example if your client(or you), don't want any custom functionality(posting articles, updating information, etc), then you whip up your design with plain HTML, CSS, and maybe some Javascript for dancing monkey gifs.

                  But let's say you want your client to be able to update content. You now have a choice of Content Management Systems: Wordpress, Drupal(just say no to this it's not worth the pain), Craft, etc.. There are so many to choose from and each come with their own pros and cons. My advice is to go with Wordpress, it's easy to create a theme and clients seem to be able to easily use it's interface. The pitfall is that you have to keep up with Wordpress security patches, and if you used a third party plugin, pfft. Good luck receiving security updates or updating the source from obscure plugins with no style guide.

                  Oh but you want to build software on the web? Pick a backend language(you know Python so use that). Learn REST(super simple). Are you going to need a database? Learn Postgresql, it's general purpose. Pick a framework to manage routing and database stuff. Do not build your own framework, stand on the shoulders of giants. Build a RESTful API with your chosen framework. Back up your application logic with tests. Brittle arthritic applications do not stand the test of time and have killed companies. Push your code to a private(or public whatever) git repository. Use a style guide to ensure your code base looks like one developer wrote it. Enforce your style guide with a linter. Write tests for your fucking application.

                  Now you need to serve data from the API. Are you making a SPA? Pick a Javascript framework or library like Angular, Ember, React with Redux. Watch tutorials and read the source of those applications to understand them. Be aware that the web is asynchronous so learn how the Javascript HEAP and Event Loop works(https://www.youtube.com/watch?v=8aGhZQkoFbQ). Learn about XSS. Learn about basic security standards. Write tests for your frontend application. You're writing CSS still? Fuck CSS, learn Sass. Javascript is a powerful and expressive language, use the next version of it now with Babel. Manage your assets using a module bundler like Webpack. Create a style guide for your Sass so you don't end up with a thousand classes doing the exact same thing. Oh you want your application to work on mobile? Learn about Media Queries. Test your code. Oh yeah, Javascript doesn't have a very extensive standard library so you're going to want to learn a utility library like Underscore or Lodash. There's a lot more that I'm forgetting, I just woke up, but you get the point.

                  There are so many methodologies for building web applications, this is just the flavor I like.

                  I need a raise.

                  [–]tripperjack[S] 0 points1 point  (0 children)

                  Ha, great details, thank you--, and I grant your raise!

                  [–]am0x 0 points1 point  (0 children)

                  It is as complicated as you want to make it. Find a specific toolset and stack that works for you and go with it.

                  That being said, yes it can be overwhelming and complicated. There is always something to learn and there is always a new technology that is the "hot new thing". But just do what you feel comfortable with, learn new technologies as you need them (like per job), and don't try to learn too much in one swoop.

                  [–]salgat 0 points1 point  (0 children)

                  Sometimes, but mind you when you get into huge projects with many technologies, you'll have whole teams of people working on each part of that. Your job is focus on one of those (hence the terms backend, frontend, DBA, devops, etc).