

Ask YC: do you use what you learned in school? - supahfly_remix

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.<p>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.
======
pg
Few people have to do all the specific algorithms stuff we learned, because
now that's all in libraries, but it's still useful to know how those things
work, just as it's useful to a pilot to know how all the systems in his plane
work.

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.

~~~
yagibear
Universities seem to be struggling to cope with the depth of knowledge that
has accumulated. It is empowering to "know how those things work" from first
principles, but as time progresses, the volume of such knowledge grows towards
and beyond the capacity of the courses that convey it. Universities must then
(as they are now) make a delicate balance between covering fundamentals (which
most practitioners consider too "academic") and preparing graduates with
skills that they can immediately apply in practice. Many graduates seem
dissatisfied with the balance that universities choose.

~~~
mercurio
I would suggest reading this great short story by Asimov. Its called
"Profession". <http://www.abelard.org/asimov.htm>

~~~
yagibear
Thanks for the link; I've always been an Asimov fan. The short story format is
fine for entertainment, but takes a while to get to the point:

 _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.

------
gcv
All the time, believe it or not. For example, in one class, I learned about
garbage collection algorithms, which I used to explain to a coworker why he
was seeing a certain memory usage pattern in the JVM. I'm also glad I learned
about DFAs and NFAs in my theory of computation class, because they come in
pretty handy for figuring out some problems. My favorite incident was when the
same coworker was suggesting project ideas, I used Turing's halting theorem to
show him that his idea was impossible. Granted, that doesn't happen every day.

------
thorax
Operating Systems and assembly-level courses taught me the foundation for what
I need for low-level and kernel debugging that I do now quite frequently.

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.

~~~
thorax
To touch on your "web gui code" comment-- I think that may be marginalizing
people a little bit.

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.

~~~
supahfly_remix
Glad to hear that such opportunities are open to the CS-knowledgeable. Where
do you find such jobs? (Not on Dice -- they seem to just be about buzzwords).

------
iamelgringo
I should be finishing my degree this summer, and I knew going into the program
that I wanted to be doing web startups when I was done. So, I chose a program
the focused more on Software Engineering than straight CS.

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.

------
henning
Just the other day I had to use a non-trivial string algorithm for some batch
string searching (searching for occurrences of any of a few million different
strings on a large text corpus). A colleague is working on creating a little
language for doing batch image processing, requiring use of undergrad-level
compilers material.

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.

------
davidw
CS classes? I studied Italian in school, and yes, I use it every day to speak
to my wife, who is Italian.

------
greendestiny
Its hard to answer because honestly I can't remember what I learned in uni
specifically. As for using advanced CS topics let me give an example.

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.

------
secorp
The main thing I gleaned from undergraduate university (applied math) was how
to collect and structure data in such a way that useful information can be
derived from it. This has helped me in writing software for image processing
programs to doing market research for new products. The key courses in this
were signal processing courses along with the math and numerical analysis to
understand the analysis techniques. The computer science courses I took in
programming languages, compilers, hardware, etc. were very good practice in
how to abstract a problem and codify it. I have not used too many of the
specific languages or techniques in my professional life however as that tends
to more or less keep up with the industry.

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.

------
rms
The best thing I learned in school was typing in middle school. It is by far
the most useful thing I have ever had taught to me.

~~~
curi
I learned (initially) from Mario Teaches Typing, at home.

I imagine this was considerably more enjoyable than learning at school.

~~~
paulgb
I wish I had Mario. Instead I was stuck with Mavis Beacon.

~~~
rms
I don't think anything beats this...
<http://en.wikipedia.org/wiki/The_Typing_of_the_Dead>

~~~
paulgb
Ok, that game wins. Now I want to play it. Apparently it's on GameTap.

~~~
rms
and it's freely available abandonware hosted at the Underdogs! Though it
probably doesn't count as abandonware now that it is on GameTap. I won't tell
anyone if you don't.

<http://www.the-underdogs.info/game.php?id=4973>

------
wheels
It really depends on what you're working on. One thing that I've figured out
is that you don't learn software engineering in college at all. Even if you
took a bunch of courses in it.

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.

------
omakase
school taught me the grind and to not shy away from a challenging problem,
seriously.

~~~
curi
well, what your experience was is that you learned that while at school. but
that doesn't necessarily mean school taught it to you. it could also be that
school actually makes it harder to learn that, but also puts so much pressure
on people to learn it, that they figure it out anyway, despite that added
difficulty.

This alternative view is consistent with the evidence in general, and with
what you related about your experience.

~~~
paulgb
Good point. The question is do you use what you learned at school, but if it
was do you use what you were taught at school, the answers could be quite
different.

------
brlewis
I use high school algebra more than any other school learning aside from
English.

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.

------
fgb
All the time. Just recently one of guys I work with got stuck because he was
using an STL priority queue to maintain a scheduler's data. The data was keyed
on the time a scheduled event needed to run. The problem was that sometimes an
event's time needed to change. Normally theses priority queues do not let you
change items on the fly. Things get added and they come out based on their
priority. He figured out how to override this behavior but couldn't understand
why the priority queue was broken after he modified an item inside the queue
directly. So, I had to explain to him how heaps and priority queues worked.

------
whacked_new
Even if it doesn't look it, you should, unless you went to school for nothing.
Broad exposure to a particular subject, if anything, hones your intuition
about it, such that even if you make "blind guesses" about solutions, they are
better suited than those without the education.

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.

------
caudicus
Yes, you can get away with doing web programming without a CS background, so
this practice does not "require" such a degree - but having a CS background
will only make you better at what you do. In addition, you will utilize some
of the knowledge you acquired in college in places where you would least
suspect.

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.

------
yummyfajitas
Well, I'm not 100% sure you are asking for my experience, but here goes anyway
(I'm a mathematician/physicist, by training and profession, and I don't write
web GUI's except for fun).

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).

------
dhouston
1) algorithms and distributed systems

2) my negotiation class (although practice is more useful :P)

3) getting used to busting my ass/grinding through problems

------
edw519
100% of what I use is from work.

0% is from school.

Not a judgement. Just an observation.

------
wlievens
I work on a compiler for a living, so yeah I kinda use my compilers course.
And pretty much all the other CS courses.

I think people who say their education hasn't been valuable just picked the
wrong education.

