I'm a student too, as well as a paid developer, as well as a guy in my early 30s, as well as a person who changed careers within the past year to software development.
I've been doing this (programming) in earnest for a little over a year. Already I want to broaden my horizons beyond web development. It's getting stale, and frankly a little repetitive. Granted I'm not working on Big Problems, but that's the point, right? It doesn't take a CS degree to put together a web-based startup with a great idea, some market research, sexy CSS and some funding.
However, I'm already bumping up against the limits of what I know. I'm a ... let's say, voracious and enthusiastic autodidact. I don't think there's anything about developing for the web I either couldn't handle right now or learn rapidly. I'm talking UX, backends, servers, etc. You know, until the actually fucking difficult problems come along that aren't answered all over StackOverflow. The problems the people in IRC channels don't have a macro for answering. The problems that aren't well-documented, or, better yet, tread new ground.
On the web it seems like treading new ground is pretty tough. There are a lot of uber smart people who started a lot younger than me who had the ideas and thoughts and problems I'm having, but 15-20 years before I had them. Web development is a solved thing, it seems like. That doesn't interest me.
It seems to me that I can't do anything new if I stick to the web-startup-centric (or just web business) world. And I am not bright enough to work on new and/or unsolved problems right now. I need education, and I need the fuckin' good stuff. Discrete math, data structures, algorithms, linear algebra (hell, I don't even know how linear algebra applies to CS, but I've read a million times it's central), the stuff I can't figure out in an hour or a day or a weekend. That's why I'm going to school.
So yes, school might be boring the fuck out of you right now, but in a year or 5 or 10 you're going to want to do more, different, arguably better (more meaningful?) things than iterating a web site.
Plus, I don't know about you but I don't want to be the guy who really really really knows Python|Ruby|JavaScript (plus HTML and CSS!!!) and gets really emotional about why my high-level languages of choice are awesome or better or whatever than the others. I've seen it already among my co-workers and fellow students and tbh it bores the piss out of me. I want to know WHY Cython is slow at X while Ruby is great at Y, or why the JVM's disadvantages exist. In short, I want to be prepared so that when the day comes that I get the chance to ask a brilliant guy (or girl!) like Rich Hickey a question, I ask an awesome question.
I haven't gone back and read this over, and I feel like I sound way too grizzled for my experience level. Sorry in advance if I sound smug or condescending. Just trust me when I say it was unintentional. I fully accept the fact that I am 100% full-blown stupid and know nothing, in practical terms. And frankly I don't think I personally would ever rise to anything other than the mediocre, run-of-the-mill peon I am now on my own. That's why I'm studying the science of computing.
Don't get all frustrated about school. Trust me, part of me wants to work full-time and get the money rolling in and so forth. But shortcuts are almost always the long way around.
> I don't think there's anything about developing for the web I either couldn't handle right now or learn rapidly. I'm talking UX, backends, servers, etc.
Does that include some of the more modern browser frameworks like Cappuccino [1]?
I mention Cappuccino specifically because it is almost identical to Cocoa. Once you know Cappuccino, you know how to build native Mac apps; and are only a stone's throw away from developing iOS apps too.
From there you have a whole slew of new technologies to explore.
Native development opens you to a whole new world of technologies. Having nearly direct access to the hardware means you can do a lot more than the browser sandbox allows. Like, I am currently playing around with computer vision to do some pretty neat things with video cameras. Something that is difficult to nearly impossible in a web browser.
I'm not sure what exactly you want to do, but the possibilities are only limited by your imagination.
I would also add that school affords one with the ability to focus full time without the distarctions and fateague of a full time job (especially if the job is in a non related field). This is imparative to those who haven't been programming sense age 12 and are relatively new to the space. Everything is "easy" when you know how to do it. I guess the point I'm trying to make is that the value in higher education extends beyond its curriculum and that value is entirely dependent on the individual.
Your post sounded a little bit like Steve Yegge's talk about how we should focus on more important stuff. Instead of doing another pointless startups we should read some hard math and do some hard stuff. Did you happen to watch it? ;-).
> Web development is a solved thing, it seems like. That doesn't interest me.
I was in the exact same boat as you when I started out. After a few years of web development, I was getting closer to a sinking suspicion that I was nearing the end of the rope, so to speak...
And then the rabbit hole opened up to me. Trust me when I say: the web development stack is very, very deceptive. It would take at least a decade, if not more to fully master every aspect of it. And it hasn't even been around that long (comparatively), which makes finding true experts for our "hard problems" quite difficult.
The knowledge that I have to go into work knowing inside and out every day? Domain registration, sysops, provisioning a server from scratch, chef/puppet for configuration management, bash scripting, server security, firewall rules, DDOS prevention, nginx/apache hosting software usage and configurations, the dozen and a half different fucking flavors of wsgi servers and how to properly reverse proxy into them, redundant load balancing with HAProxy and heartbeat, postgres/mysql/nosql database software usage and configuration, database sharding and connection pooling, master/slave and master/master setup advantages and disadvantages, proper schema creation/indexing/querying efficiently, proper static and media file headers/caching/expiration, python/ruby, django/rails, process management ala supervisord/runit/upstart/initd, semantic HTML, flexible CSS through a separate tool like SASS/LESS, javascript and what used to be the giant clusterfuck of front-end engineering, ajax, comet/long-polling/buzzwordsgalore, getting SSL to properly work with all of the above, Solr search engine usage/configuration, caching with varnish and memcached, queuing all over the place with rabbitmq, lightweight key/value stats with redis, proper version control, continuous integration, project management, one-click builds and deploys with fabric/capistrano, and the 1001 insecurities built in to naive web development and how to properly protect against them. The list goes on and on and on. I'm sure I'm forgetting to mention a lot more.
Now I know how silly I was back then to believe that I was "done" with web development after a short amount of time setting up toy websites. I still consider myself a novice, and I haven't even scratched the surface of what it takes to make a web site/service scale to massive amounts of traffic.
The parent comment from a Facebook dev is somewhat spot-on though: for the hard Computer Science problems, you have to get into the low-end systems level programming. On the complete opposite end of the spectrum, I deal with problems at the macro level. Computer Science, while extremely helpful in some cases, in no way, shape, or form prepared me for the bottomless pit of knowledge required for modern web development.
To each their own, but both sides are deluding themselves if they believe that they somehow have the "tougher job" when it comes to programming. The only difference is that a CS degree better prepares you for one over the other, due to the nature of the work involved.
Sorry if I gave you the impression that all I've done is set up toy websites. In your list, just in the past year, I've touched a solid 80%, if not more, of the technologies you listed, professionally. The only ones I'd leave out are database sharding, connection pooling, redis, project management... and I think that's it.
That's kind of my point. This stuff isn't hard and oftentimes the things you mentioned are the big obvious solution, because a million people have done it before and blogged about it. That's not to say it isn't really cool. ad hoc multiprocessing with rabbit (or whatever) & celery is awesome. Sass is neat, etc., etc. But by and large they're solved problems. That doesn't make them unworthy of anyone's time, or stupid or dumb or whatever. I didn't say the tech stack is shallow; I said the problems you try to solve on the web are solved by and large, except at the edges where companies like Twitter, Disqus, etc., are doing new things to scale.
There are people out there who collect spoons. They have an enormous wealth of knowledge about all kinds of spoons. There is practically a bottomless pit of knowledge about spoons. Their history, origins, etc. That doesn't make it interesting to everyone, necessarily.
That was partially my point. It doesn't matter if you're doing systems engineering, high frequency finance trading, web development, games development, database systems creation, mobile app development, or working with embedded systems. Most of the problems you run into are solved.
But when you work with any of these fields at length, new and largely unsolved problems crop up. That's not unique to people working on cache systems. Whenever you're in a field that runs into scaling/performance issues (which is all of them), you run into hard problems.
If you were to do a 180 and go into a job building database engines instead of web sites, guess what? Most of the stuff you deal with has been blogged about, answered on StackOverflow, and is generally a solved problem. Where does it break down into tough programming? Making it perform bleeding fast. Same goes for web development, and games, and so on.
It might _seem_ like web development is more trivial than the rest, but that's just a common misconception.
I've been doing this (programming) in earnest for a little over a year. Already I want to broaden my horizons beyond web development. It's getting stale, and frankly a little repetitive. Granted I'm not working on Big Problems, but that's the point, right? It doesn't take a CS degree to put together a web-based startup with a great idea, some market research, sexy CSS and some funding.
However, I'm already bumping up against the limits of what I know. I'm a ... let's say, voracious and enthusiastic autodidact. I don't think there's anything about developing for the web I either couldn't handle right now or learn rapidly. I'm talking UX, backends, servers, etc. You know, until the actually fucking difficult problems come along that aren't answered all over StackOverflow. The problems the people in IRC channels don't have a macro for answering. The problems that aren't well-documented, or, better yet, tread new ground.
On the web it seems like treading new ground is pretty tough. There are a lot of uber smart people who started a lot younger than me who had the ideas and thoughts and problems I'm having, but 15-20 years before I had them. Web development is a solved thing, it seems like. That doesn't interest me.
It seems to me that I can't do anything new if I stick to the web-startup-centric (or just web business) world. And I am not bright enough to work on new and/or unsolved problems right now. I need education, and I need the fuckin' good stuff. Discrete math, data structures, algorithms, linear algebra (hell, I don't even know how linear algebra applies to CS, but I've read a million times it's central), the stuff I can't figure out in an hour or a day or a weekend. That's why I'm going to school.
So yes, school might be boring the fuck out of you right now, but in a year or 5 or 10 you're going to want to do more, different, arguably better (more meaningful?) things than iterating a web site.
Plus, I don't know about you but I don't want to be the guy who really really really knows Python|Ruby|JavaScript (plus HTML and CSS!!!) and gets really emotional about why my high-level languages of choice are awesome or better or whatever than the others. I've seen it already among my co-workers and fellow students and tbh it bores the piss out of me. I want to know WHY Cython is slow at X while Ruby is great at Y, or why the JVM's disadvantages exist. In short, I want to be prepared so that when the day comes that I get the chance to ask a brilliant guy (or girl!) like Rich Hickey a question, I ask an awesome question.
I haven't gone back and read this over, and I feel like I sound way too grizzled for my experience level. Sorry in advance if I sound smug or condescending. Just trust me when I say it was unintentional. I fully accept the fact that I am 100% full-blown stupid and know nothing, in practical terms. And frankly I don't think I personally would ever rise to anything other than the mediocre, run-of-the-mill peon I am now on my own. That's why I'm studying the science of computing.
Don't get all frustrated about school. Trust me, part of me wants to work full-time and get the money rolling in and so forth. But shortcuts are almost always the long way around.