The OP is asking "what abilities are required to effectively build complex web apps and services?"
99.9999999999% of data structures in web programming are arrays and hashes. Look those up on wikipedia and read it, then you are done, now get to work.
Processor architecture??? Is that really to be taken seriously? Not only was it previously not relevant to the OP's question, but its becoming more irrelevant because virtual machines and the "cloud" paradigm.
OOP details are great if you are going to write your own libraries or plugins, but its not necessary for cranking out websites. Most of the time the OOP you are going to be dealing with you can fake.
Javascript is a must have, but you don't have to get so fancy with it. Just enough to drive a popular framework. I'd recommend jQuery, it seems to be the emerging winner.
Learn the CSS, broken browsers, and the box model, which will waste so much of your time.
If you just want to work for yourself try a few web frameworks and go with what works for you. Using anything from PHP to rails to Django, you could take over the world, they are all good.
Look into scalability. Its fun stuff to learn about, even if you never lucky enough to need it, here's a good place to start http://highscalability.com/
As part of scalability look into AWS like EC2, EBS and S3, they are game changers. You don't have to use them, but if you need them, they are there to save your ass.
Learn about "viral" marketing and how sites go viral.
Learn about database backup and recovery, and as part of scalability learn how you can scale databases.
Learn about unit testing, QA or even something like Selenium, figure out which works for you best and in which ways.
Learn to figure out what users want and what itch you need to scratch.
Figure out how to make interfaces that don't suck. And when you do, let me know how.
i.e. I believe you started the response with a rather silly statement then structured the rest in a sort of out-of-breath "OMG SRSLY" way. Unreasoned response is bad - but badly structured reason is worse.
I apologise for the rudeness but I feel that sort of posting needs to be discouraged.
I'd have let it pass but for the cancer comment: that's just idiotic.
(sorry, I hope it comes in as constructive criticism - because the point was good, I just doubt anyone really read it)
Sometimes people down vote poorly or for the wrong reasons, I agree. I think this case was justified - but for the cancer comment I myself wouldn't have - indeed I'd probably have upvoted because I do agree. That is how badly it came across (and as you might read elsewhere this is about my 2nd vote today :))
But I have no regrets about the rest. I don't want to see this guy going in the wrong direction, and the suggestion of learning about chip design was just way beyond bad.
But why bother. Hacker news is becoming an echo chamber. I should stick to LISP being my answer to every question.
In data structures you learn how to properly use a data-type. You learn how to implement a hash and a list. That is knowledge that is very valuable when programing high level stuff later on.
In algorithms you learn how to construct loops and programs that run faster than they would otherwise. For instance, think about how much faster it is to search for something in a sorted list than in a unsorted list (its log vs exp if its a nested search).
Processor architecture because you want to know where those bits go, if you dont, how are you ever to truly understand pointers, variables and data structures?
Your life will be soo much easier with these fundamentals in Computer Science in regards of scalability, performance and even user design. It's not for everyone and you can certainly do without it. But what you're advocating is basically "luck". Not everyone will write plentyoffish or twitter.
"While I agree about your points I still maintain that a couple of courses in data structures and algorithms is a very good investment of your time."
Maybe a good investment of your time, but not if you are going to just be building websites, that would not be a good investment, the returns on that investment would be small.
"In algorithms you learn how to construct loops and programs that run faster than they would otherwise. For instance, think about how much faster it is to search for something in a sorted list than in a unsorted list (its log vs exp if its a nested search)."
Do you even do any practical web programming? Unless you are hitting a amazing load on your server this would never come up. Also, if you are digging into these details you better have a good reason because there a good chance of creating bugs or overloading your web box. However if you keep it basic, and just scale horizontally, which you don't seem to understand web hosts can do, its a much better use of resources.
"Processor architecture because you want to know where those bits go, if you dont, how are you ever to truly understand pointers, variables and data structures?"
I've been in web development and scripting for 15 years, can you show me where these "bits" are, I must have misplaced them.
I used to have a site that carried 5m uniques/month, but I've also run sites that had has worse performance problems with much less users. I know of several instances where I got stuck and had help from academic books (to refresh my memory) or friends that paid more attention in class than I did :-)
My point, and as others point out, you just dont learn these things yourself unless you are forced todo it. Learning to solve a problem and learning to learn are two very different things and the later makes your view of a issue much more complete. Many subjects is completely useless stuff that is only in the courses to make them hard, but when I look back I tend to see that many courses were very valuable.
Perhaps I would have done fine without them, but I'm sure my projects are better as a result of me spending a couple of years learning stuff.
If you want to become a "better" programmer in the context of writing more efficient code, more bugfree code and become more efficient (learning to use the concepts that comes with the language instead of reinventing the wheel). Then yes, school helps.
You can learn it outside school aswell but I bet it will take more time in the long run. I think we'll have to accept that we disagree on this topic.
http://www.techcrunch.com/2008/04/23/amateur-hour-over-at-tw...
Sure. You can get big speed-ups by exploiting the storage hierarchy, and by writing less-branchy code that does not bamboozle the branch predictor.
These can be studied from the top-level functional perspective. The low-level details can be ignored.