Having interviewed people fresh out of college for both web-startups and established companies, from my view the most important thing you'd need to know if you want to work in a web start-up are:
1. how to get around a UNIX system (be comfortable with emacs and/or vi, know your shell, be able to install Apache/your favourite web frame yourself on a machine
2. know basics of TCP/IP networking (know how HTTP works, be able to debug it using telnet/netcat and tcpdump/pass through proxies)
3. know databases (not just "SELECT Ajax FROM Php", but know about indices, joins and normalization/de-normalizations)
4. or more dynamic languages (Python, Perl, Ruby, Php etc...) as well statically typed as object oriented languages (Java is common for enterprise web development)
These are really just the basics (give or take). Most of these (except for databases and dynamic languages) are a standard part of any CS curriculum. Databases course should be readily available as an in-major elective. Dynamic languages -- if not available as an elective -- should be easy to pick up as you go along.
These are also very nice to have and would make you not look like a "PHP script kiddie":
* Understand how your OS works, at the least be comfortable using strace and gdb and digging around /proc and tuning sysctl/proc/kernel parameters
* Understand more about networks: more about DNS, know how a load balancer works (NAT)
* Know C/C++: that's what the extensions for your dynamic programming language are written in, that's what your web server/web proxy and database are (usually) written in.
* Know algorithms, data structures. Be able to do bitwise manipulation (e.g. how would you track on which day of a month a user visited a site?). Understand the advantage a message queue would provide, understand non-blocking I/O and threading/forking models.
* Know more about OO, meta-programming/reflection, functional languages -- be able to hack up your own ORM layer/ad-hoc MVC.
There are jobs in web development that don't even heavily touch HTML/CSS/Javascript and tend to be heavier towards algorithms, databases and UNIX hacking. These are called "back-end jobs". The other end is "front-end", which requires more familiarity with UX principles/Javascript/ActionScript/Flex and basic graphics design/layout in addition to HTML/CSS. The specific hot things (current frameworks, etc...) change but the general of computing is an invariant. The latter is what you learn in computer science classes.
Lastly, you should absolutely do programming/web-development for fun -- first, it's the way to learn things you won't learn in class (or at your first job). Secondly, many start-ups operate under the maxim of "don't hire anyone who doesn't code for fun", thirdly -- chances are, working for a web start-up won't make you a millionaire: if you don't find programming to be fun and worth your time (making long hours non-monetarily rewarding), enter a field that you would (you're lucky to be amongst the few who has the chance to choose).
These are definitely good things to know, but I wouldn't necessarily expect a fresh-out-of-college 22 year old to know them all - I think you can pick them up on the job in the first couple of months/years.
The important thing is to be willing to learn and improve yourself, and to just have a natural talent for programming. Nobody expects you to hit the floor running in your very first job.
I knew most of these things at twenty two, coming out of college -- however, my case is slightly different -- I've been a hobbyist before and during college.
Nonetheless all of the material I've described was offered at university I attended and getting a formalized training in the matter (particularly a rigorous mathematical approach to algorithms, data structures and formal languages/automata) definitely helped.
Nonetheless -- if one is motivated and disciplined -- they can pick these things up at a job (provided you get a job where the environment is conducive to learning, vs. one that merely expects you to crank out business logic 9-5) as well as entirely on their own.
I guess my experience is a bit different, since I was a math major.
Even in my first job, which was pretty much just cranking out business logic 9-5 I've learned a lot about databases, OO programming, UNIX and software development in general.
At the beginning you have so much to learn that even if you don't work for Google or Microsoft (they actually do a lot of non-trivial R&D) you will still probably be learning a lot.
1. how to get around a UNIX system (be comfortable with emacs and/or vi, know your shell, be able to install Apache/your favourite web frame yourself on a machine
2. know basics of TCP/IP networking (know how HTTP works, be able to debug it using telnet/netcat and tcpdump/pass through proxies)
3. know databases (not just "SELECT Ajax FROM Php", but know about indices, joins and normalization/de-normalizations)
4. or more dynamic languages (Python, Perl, Ruby, Php etc...) as well statically typed as object oriented languages (Java is common for enterprise web development)
These are really just the basics (give or take). Most of these (except for databases and dynamic languages) are a standard part of any CS curriculum. Databases course should be readily available as an in-major elective. Dynamic languages -- if not available as an elective -- should be easy to pick up as you go along.
These are also very nice to have and would make you not look like a "PHP script kiddie":
* Understand how your OS works, at the least be comfortable using strace and gdb and digging around /proc and tuning sysctl/proc/kernel parameters
* Understand more about networks: more about DNS, know how a load balancer works (NAT)
* Know C/C++: that's what the extensions for your dynamic programming language are written in, that's what your web server/web proxy and database are (usually) written in.
* Know algorithms, data structures. Be able to do bitwise manipulation (e.g. how would you track on which day of a month a user visited a site?). Understand the advantage a message queue would provide, understand non-blocking I/O and threading/forking models.
* Know more about OO, meta-programming/reflection, functional languages -- be able to hack up your own ORM layer/ad-hoc MVC.
There are jobs in web development that don't even heavily touch HTML/CSS/Javascript and tend to be heavier towards algorithms, databases and UNIX hacking. These are called "back-end jobs". The other end is "front-end", which requires more familiarity with UX principles/Javascript/ActionScript/Flex and basic graphics design/layout in addition to HTML/CSS. The specific hot things (current frameworks, etc...) change but the general of computing is an invariant. The latter is what you learn in computer science classes.
Lastly, you should absolutely do programming/web-development for fun -- first, it's the way to learn things you won't learn in class (or at your first job). Secondly, many start-ups operate under the maxim of "don't hire anyone who doesn't code for fun", thirdly -- chances are, working for a web start-up won't make you a millionaire: if you don't find programming to be fun and worth your time (making long hours non-monetarily rewarding), enter a field that you would (you're lucky to be amongst the few who has the chance to choose).