Ask YC: do you use what you learned in school?
How many of you actually get to use any of the information you learned in your CS classes in college? E.g., implementing red-black trees, operating systems, writing compilers, etc.
From reading this site, I get the impression that people write a lot of web GUI code, but that doesn't require a CS background. That's not to say web applications aren't interesting, and there aren't technical challenges to be addressed.
38 comments
[ 3.8 ms ] story [ 72.7 ms ] thread0% is from school.
Not a judgement. Just an observation.
I imagine this was considerably more enjoyable than learning at school.
http://www.the-underdogs.info/game.php?id=4973
I type slowly, but this gives me time to think about what I type. Can you produce code at touch typing speed?
This alternative view is consistent with the evidence in general, and with what you related about your experience.
However, I'd say that I regularly use stuff from about 4-5 of my college/grad school classes. Virtually everything else I learned "on the job" (i.e., in grad school, doing research).
Oddly enough, I recently found myself using some tricks I picked up from a machine learning class for something completely different (the philosophical kind of quantum mechanics).
The other courses all been used quite a bit towards opening doors for me in starting businesses and job opportunities.
I honestly have to say that there's not a single CS course that didn't provide me a valuable tool which I've used. I'm not sure if that's normal, or if I am just the sort of person who finds uses for the tools in my toolbox.
I think the course (in the last 7 years) that has offered me the least would have been Linear Alegbra, but that's primarily because I didn't go deep enough after it to really broaden my skills to apply to those sorts of opportunities. I see lots of cases where I could use it, I just regret that I didn't improve my grounding in it because it would have opened more doors for me.
I'd say that the first 2-3 years of engineering, I used very little of what I learned in school. Very strange, but now that I'm working as a principal engineer/architect or on my own projects, that CS schooling has been incredibly valuable. It helps that I covered areas like AI, languages, graphics, and networking in my electives.
If you want a generic software engineering job, I don't think a CS degree is really ideal (depending on the school). For me, (i.e. someone who loves computer sciences), it was a perfect choice and I use those building blocks all the time now.
Hackers can do web GUI code. Nowadays they pretty much have to do so, because it's often the ideal front-end for whatever backend software you produce.
Computer-oriented businesses that build up a long-term business advantage are going to start with some solid technology behind them that is difficult to reproduce without knowledge. For example, new search engine technologies, new streaming codecs, new AI prediction routines, etc, etc.
For a less grand example, our site, http://bug.gd is pretty simple from a web design point of view, but I learned from my CS courses that full-text indexing isn't something to take lightly in large quantities. So I know enough to search out tools (like sphinx or lucene) that implement algorithms I can literally understand to be reliable, fast, and memory efficient.
The CS schooling also allows us to write more client software for different OS's that help catch and report error conditions into the global error database. We'd be stuck with only a web frontend if we didn't have people with good CS/os backgrounds to work on lower-level API to catch what we need there.
Secure coding is another area in which core computer science compentencies are worth every penny.
Anyway, sorry to ramble, but I think your question comes from a perspective of misunderstanding just how many zillions of doors open to a computer scientist that are harder/closed/lost/hopeless for those who don't dive into the technology. It's not all lost on web GUI development.
Not that other hackers (non-CS) couldn't do the things I described, but I know those tools come in incredibly handy for me in trying to help shape this computer-heavy world.
The most important things I gleaned from my graduate work about 10 years later (MBA and some more applied math) were how to present interesting data to people in a way that they too could interpret it and derive value from it, and how to manage social networks effectively.
I think the most useful thing I ever learned in a CS class was from Michael Rabin: that the best way to solve a problem is often to redefine it as something that's easier to solve. This turns out to be applicable to practically every kind of work.
Tapes are actually bad. They teach too much; they’re too painless. A man who learns that way doesn’t know how to learn any other way. He’s frozen into whatever position he’s been taped. Now if a person weren't given tapes but were forced to learn by hand, so to speak, from the start; why, then he’d get the habit of learning, and continue to learn.
I've never questioned the goal of schools to develop learning and thinking skills, rather than just convey content. However, the question is with what content should those skills be developed? It is that choice that requires a delicate balance between fundamental and practical content.
In this case the difference isn't so much that I chose a different problem to solve as that I chose any problem at all. I get the impression most language design is driven not so much by explicit goals as by a collection of half-formulated principles.
2) my negotiation class (although practice is more useful :P)
3) getting used to busting my ass/grinding through problems
At the very least, you will know the names of things and where to start looking, which prevents you from reinventing the wheel. This difference, in my experience, is significant.
Don't overstate the importance of a degree, but don't understate the value of knowledge from school; it's knowledge, after all.
I use a lot of the principles from 6.001 (Structure and Interpretation of Computer Programs) at MIT. I think there were other classes with useful learnings, but it's hard to remember specifically.
I'm writing a web app at the moment for orthodontics. On one hand its just overlaying a template on an image, but its using and manipulating a scene graph for the various parts of the template. The templates are defined by the relationship of various landmarks - these relationships (like the angles and distances between certain points) are represented in my own language so that I can send them to client for evaluation (as they move parts of the template) or to R so that I can generate a set of landmark locations that fit the relationships.
I probably make things more complicated than they need to be but I can't imagine not understanding these concepts. The power and beauty of those advanced CS topics is worth learning for itself. If they don't give you any insight as a programmer (whether you use them directly or not) then I don't think you've really understood them.
So, tailored my education along the lines of creating startups. My classes the last 2 years have included Intro to Database systems, Unix programming, Perl, Web Database Programming, Advanced Database systems, Distributed Systems, and Systems Programming. I've avoided Java and Microsoft technologies whenever I've been able to.
Every time that I get a semester break, I work on learning Django, or Ruby on Rails, and every semester web development comes a little easier to me. I've also been doggedly pursuing my own education, and I'm not relying on my school to give it to me on a silver platter. School is there to give you a framework, on which you continue your self-education. So, when I was taking my Distributed systems class, I read up on Erlang, and the other students had no idea what that language was for.
There are people in my advanced database classes that are editing SQL with notepad on windows. I was trying to tell them that a decent text-editor might improve their quality of life a little bit. Several of them didn't know what the difference between notepad and a decent text editor was. Sigh... I guess that it goes to show that it's not the school, it's the student.
As for the string problem I faced, I found an existing implementation in the language I was using, but I wound up having to modify it in order to cope with changing requirements.
If I hadn't learned about algorithms and automata in college, it probably would have been impossible for me to understand what I was using and I'd be flying blind. I probably would have instead not even known about the algorithm and would have believed that an inefficient naive solution was the only way, therefore making the project essentially infeasible (at first glance, anyway).
I'm also thankful that I had the opportunity to learn about functional programming because it made me a better programmer in imperative languages.
That and the real point of education is to learn how to learn and think. View it as a mental workout if you truly do tell yourself "this is pointless, I am never going to need to know this". Remember that it will only make you stronger in the end.
I think people who say their education hasn't been valuable just picked the wrong education.
However, a knowledge of algorithms can be invaluable. I've been out of college for six years and I can remember using at least:
- String search algorithms
- B-Trees, Tries
- A handful of graph algorithms
Other times stuff that I learned in college put me in quick striking distance for stuff that would be more work to understand without a CS background:
- Open key cryptography
- Word stemming algorithms, text coding
- Writing a query optimizer
- Digital signal processing
You can always find cool stuff to hack on without drifting into that territory, but if you actually dig CS-nerdiness, and are good at it, you'll sometimes get some of the more fun problems thrown in your direction.