42
votes

This question made me think that there was a better question to ask.

What did you learn in school that you didn't care about at the time, but turned out to be useful or you had to relearn in the workplace because you had it in school, but didn't retain the information and you needed it? (I mean for software related jobs.)

I think this might help college students identify some of what they really should be paying attention to while they are in school.

1
  • 16
    I regret not having spend more time learning spoken languages (it just clicked for me 10-20 years later), but this is not programming related. Commented Mar 2, 2011 at 14:51

40 Answers 40

36
votes

Most developers I've seen fresh out of school didn't have much experience with OO development. They've heard of it, but most thing it just 'putting stuff in classes'.

At school you get loads of examples about cars & people which can be placed in the OO-framework. This teaches you polymorphism, overloading and stuff like that. Rather 'basic' stuff. It's good to know these things and how they work, but I never got an example of a real-world use for this. I think it's important to show students some real-world scenario's where some design is used.

One other thing I missed in college is the use (or mis-use) of usable design patterns. I think these days the most important patterns should be introduced somewhere in the late 1st year or beginning of the 2nd year. Students should get familiar with them.

Writing clean code is something which isn't taught (enough) at school. We could make a real mess of the code and still get an A+. 'If the application works, it's good.' was the motto. Students should learn how to write clean and high quality code and get rewarded for it, this also means refactoring and using the patterns or best practices they've learned.

Of course the eager students learned all this stuff by themselves, but others who weren't that eager didn't. This could be placed under a lack of motivation, or they just didn't know where or how to look. When paying a lot of money for a school, I think they should really teach you this semi-advanced stuff.

Also, some decent (professional) writing is a lacking skill for most people. Too bad as it's very important in the real world. Most important is being able to make yourself clear in your native language. If you can't write clearly in your main language, it's hard to communicate in a company.

I don't know if you can teach someone to write at this age, they should already be familiar with this skill. One could repeat the stuff taught at high school. Maybe teach students how to write comments & technical documentation. I still find it hard to write technical docs as nobody ever seems to know how to do it, or what the default format is.

9
  • 1
    this answer is not to OP but to its complement: what should they have taught you better/more in-depth
    – davka
    Commented Mar 2, 2011 at 15:42
  • 1
    The purpose of an undergraduate education is introduce the student to the breadth of a field. Specialization is what one does at the graduate level. I do expect candidates fresh out of college to be experts in anything. I expect recent university graduates to have a well-rounded set of fundamentals that span the gap between computer organization and basic algorithm analysis. I do not care if a candidate has memorized the asymptotic bounds of all of the searching and sorting algorithms. I prefer a candidate that can ascertain the asymptotic bounds for a real-world piece of code. Commented Mar 2, 2011 at 20:08
  • 3
    Am I the only one to cringe when 'learn' is (incorrectly) used instead of 'teach'?
    – dr-jan
    Commented Mar 2, 2011 at 20:36
  • 1
    @dr-jan: Thanks for pointing it out. Edited.
    – Jan_V
    Commented Mar 3, 2011 at 6:57
  • 1
    In my opinion, the only way that serious software writing could be taught is to have multiyear courses where you get your face ground into your very own past mistakes. Commented Mar 9, 2011 at 20:43
120
votes

Girls. You may think I am joking but I am not.

Don't go mad or anything, you still need to learn the academic stuff. But you also need to spend some time learning about the people, from the people around you.

That includes the half of humanity who have completely different interests and attitudes from you and your friends, but who you will still want to get along with.

4
  • 16
    I wish I could give this more upvotes.
    – immutabl
    Commented Mar 3, 2011 at 0:53
  • 3
    Spending more time with people who don't grok computers in general is a good thing(tm)
    – Rob Allen
    Commented Mar 3, 2011 at 14:13
  • 16
    48+ people who upvoted this just quietly sigh'ed to themselves.
    – George
    Commented Mar 3, 2011 at 15:22
  • Otherwise know as 'Users'. Commented Oct 21, 2011 at 18:14
61
votes

I feel I should have put about 42% more energy into statistics.

12
  • 10
    My brother and I both told our mother last year that we wish we had studied more stats. I'm a quant and he's a physician. Oh, and my mother is a stat teacher... Commented Mar 2, 2011 at 15:17
  • 4
    @davka: It comes up more often in testing, especially performance testing. Also in data analysis, which I have a lot of these days. Commented Mar 2, 2011 at 15:44
  • 4
    @davka - I work in a data driven company and good statistical analysis would be helpful for developers to be able to present their findings on 'why code x is better than code y', or 'yes, I can prove that if you allow me to invest 2 weeks to improve this thing, statistical analysis shows it will speed up by x%'. Knowing how to apply statistical techniques to design your experiments is really the goal here.
    – wkl
    Commented Mar 2, 2011 at 15:46
  • 3
    I think there is a 70+/- 2 % chance that I should have taken stats.
    – Zachary K
    Commented Mar 2, 2011 at 16:38
  • 10
    60% of the time, it works every time. Commented Mar 2, 2011 at 16:58
50
votes

Writing would be one of the biggest for me. I don't think this is limited to just developers though.

1
  • stack overflow and blogging has helped me a lot on that one.
    – Svish
    Commented Mar 3, 2011 at 14:17
36
votes

Functional programming. At the time it seemed like a swarm of parenthesis that couldn't do anything useful. Now that lambda expressions are finding their way into widespread use, I've had to retrain my brain to think in that way. In college I just wanted to get LISP and Scheme as far into the rearview mirror as possible and never look back. If I had any idea how useful some aspects of functional programming could be, I would have paid more attention.

3
  • 9
    +1. It is my firm belief that for somebody who doesn't know how to program, functional programming is easier to learn than imperative programming, that imperative programming is easy to learn if you know functional programming, and that functional programming is hard to learn if you learned imperative programming first. Therefore, it makes sense to not only teach functional programming, but tech it first, and most importantly don't make such big f-ing deal out of it! I love how SICP does it. The first assignment doesn't appear until a couple hundred pages in, and you don't even notice. Commented Mar 2, 2011 at 20:54
  • 1
    +1. Scheme turned me off functional paradigms for several years in college, as I had a C and C++ background before I took that course. I didn't list it as something I felt I should have paid more attention to because in my senior year, I took a languages course and used SML and really enjoyed it, and I also enjoyed Lisp too. Probably just the product of experiences throughout college making it far easier for me to understand how to use those paradigms. I am also teaching myself Scala now and enjoying it very much. :D
    – wkl
    Commented Mar 2, 2011 at 22:10
  • 1
    I generally agree (more functional in school) but it's impossible to prove that it's easier or harder to learn functional programming based on what style you learned first.
    – Kevin
    Commented Aug 17, 2011 at 20:18
34
votes

Regular Expressions. I distinctly remember blowing them off in college. They have been indispensable for work.

6
  • 2
    Regular expressions should only be used as a last case scenario however
    – billy.bob
    Commented Mar 3, 2011 at 11:04
  • Yes! I remember thinking how much I hated it back then... Learned it for the class and removed it from my mind until I needed it again several years later. Then I was cursing myself because I had to re-learn it.
    – Bmw
    Commented Mar 3, 2011 at 13:16
  • 4
    @m.edmondson, regular expressions are great for simple tasks. You might be doing something wrong if you're using them in your code (after all, parsing combinators are a way much better), but for your typical search-and-replace in a text editor they're just fine.
    – SK-logic
    Commented Mar 3, 2011 at 13:17
  • 3
    Regular expressions are a great tool for using on the command line and in powerful editors such as vim or emacs. Not just for use in code. Commented Mar 3, 2011 at 13:31
  • 1
    @m.edmonson, no - regular expressions are fantastic tools which should be chosen first! For those situations where they apply - knowing when they don't is where experience is required.
    – user1249
    Commented Apr 6, 2011 at 13:47
33
votes

My favorite answer (statistics) is taken, so I'll give my second favorite answer. Big-O notation and a knowledge of the efficiency of various key algorithms. It is less of a "secret weapon" for me than statistics, but it is still very valuable.

3
  • 2
    Maybe I am just not writing complex enough stuff, but the only time I had to know Big O was at an interview at a high end tech company. So while I learned it 20 years ago, since I don't use but once every 10 years or so I don't remember it. Commented Mar 2, 2011 at 17:20
  • 2
    @bill-leeper: My experience is that Big-O is not something you use every day, but it is something that, when you know about, every so often helps you figure out a problem that you didn't know you had, or otherwise wouldn't have figured out. If you don't know it, you never have those insights and don't know what you are missing.
    – btilly
    Commented Mar 2, 2011 at 22:00
  • 1
    @bill, big-O is just a formalized way of saying that you need to be careful with how many loops you put inside on another when you need to scale. Most programmers learn that one way or another without having to know the formal name.
    – user1249
    Commented Jul 28, 2011 at 8:07
23
votes

I wish I'd listened to what my teacher told me when I was 14. Unfortunately I can't tell you what it was, because I didn't listen.

0
21
votes

Has to be the course on Finite Language and Automata Theory.

Thought it was too theoretical, till my job demanded me do a domain specific language compiler from scratch.

2
  • 4
    Whoa. What do you do exactly ? If you don't mind me asking =)
    – fouronnes
    Commented Mar 2, 2011 at 22:25
  • 1
    @otibom: I work with semiconductors, and it has its own domain specific languages with reasonably stringent performance requirements.
    – Fanatic23
    Commented Mar 3, 2011 at 6:12
18
votes

I would say C, as well as UNIX. Though I learned UNIX soon after college, I feel I would have benefited from getting more ingrained with UNIX and C earlier.

2
  • UNIX? Is that still taught in colleges?
    – apoorv020
    Commented Mar 3, 2011 at 7:13
  • 1
    It should be... or well, more like Linux. Any programmer should know a bit of bash (or an other shell). Commented Mar 10, 2011 at 22:43
17
votes
  • Artificial Intelligence/Data Mining - took the class, was bored, years later I am learning about topics like collective intelligence on my own. Large data set analysis is a big deal in my job and previous jobs.
  • Database theory/design - Again, took the class, was bored, so I've been learning stuff about databases myself
  • Just high level math and interesting math techniques in general - I took 4 calculus classes, linear algebra, statistics, probability, discrete...but felt I should have also done:
    • Numerical methods
    • Advanced statistical methods, even stuff like Markov chains - again, related to large data set analysis
  • Human-Computer Interaction - in school I didn't feel this was in any way useful to what I would be doing in my job (I liked working at a low level or behind the scenes), but in any job I've had, usability has been a focus at times.
  • A second language - I've always had a gift for languages, but in college I didn't take a language, and I find it difficult to try to teach myself Japanese.
13
votes

Technical writing. I spend a lot of time writing requirements, communicating with customers and co workers. This is an area that I had a 1 credit hour class in in College. The only other class that really helped in my career was another 1 credit hour class. That was in C programming. The rest while interesting and probably helped my overall analytical skills hasn't really been a direct benefit to my career.

Granted I went to school 20 years ago and C was considered cutting edge in the Electrical Engineering department. The CS folks were doing some stuff with Lisp and C++ but still probably not as much OO as I would hope is going on with Today's graduates.

11
votes

Design Documents

I always assumed someone else would be the one creating these things, or that they were just simple docs. They are not simple at all and my team is small enough that I do my own design docs.

1
  • someone else WILL be writing them if I'm no good at it, which is the way I like it.
    – Kevin
    Commented Aug 17, 2011 at 20:19
10
votes

Second foreign language. Russian in my case. Lots of books, resources, and more in this particular language in my surrounding space.

7
  • @FrustratedWithFormsDesigner yes now, but when I was child... :)
    – lfx
    Commented Mar 2, 2011 at 15:14
  • I studied french and german personally, and actually spent some time in germany. It's something everyone should experience.
    – Ken
    Commented Mar 2, 2011 at 15:48
  • 12
    Really? Programming-related resources in Russian? I am a native Russian speaker, but I hardly ever make use of that when I search for stuff on programming. Most of the time, typing an English query into Google gets me an answer. Also, technical books in Russian are often very bad translations from English.
    – Dima
    Commented Mar 2, 2011 at 21:12
  • @Dima, what situation is nowadays don't know, but when i was in collage and in school, every teacher said that.
    – lfx
    Commented Mar 3, 2011 at 6:37
  • 3
    @FrustratedWithFormsDesigner: that I'll believe. There is certainly a lot of math-related material in Russian. But if you are talking about computer-related subjects, then you are better off knowing English.
    – Dima
    Commented Mar 7, 2011 at 17:58
8
votes

From the CS side of things:

  • User Interface design
  • Testing
  • Version Control
  • Concurrency

From the everything category:

  • Technical writing
  • Speech communication
  • Time estimation skills
1
  • +1 for Testing and Version Control. Seriously, we heard a lot that testing was very important... never really learned how to though... (and that wasn't our fault. we just never had anything about it really)
    – Svish
    Commented Mar 3, 2011 at 14:23
7
votes

Vector math and calculus. I had 'em, but my profs were awful and didnt actually teach the subjects. But as someone who's heavily into graphics programming... a better vector math foundation would have helped.

7
votes

Obviously, History and Literature. Problem is often, school doesn't make those interesting.

1
  • When learning those as a home schooler, they can be far more interesting. Commented Oct 21, 2011 at 18:51
6
votes

Electronics

I hadn't much software related stuff at school. Ah - informatics, but I canceled it. :) But it was easy to learn later. Whereas electronics, I often don't get it. Microcontrollers, PWM, GPIO - wtf? I wish I would understand the stuff.

1
  • I took Electronics at (the EU equivalent to) high school because there was no "pure" IT choice. Still glad to this day that I not only know how to use computers and it's peripheral hardware, but also how they work. Commented Mar 3, 2011 at 8:59
5
votes

Distributed networking/computing. Programming is not a challenge, but the prerequisites in current architecture are in-depth knowledge of distributed concepts.

A detailed course was offered as an elective, but had to choose between this and AI: so, it is not really a regret.

5
votes

Design Patterns: The way they were presented didn't actually tell you how useful they are, since then i've read a couple of books on them and think they are incredibly useful.

1
  • This bugs me in general about programming training, we are acceptable at explaining the how but not the why. And no good practial examples. This is why we have peole using the worng techniques for the problem, they pick the first one that occurs to them that will work without the knowledge to tell that this other technique is better for this particular problem.
    – HLGEM
    Commented Mar 3, 2011 at 14:51
4
votes

Unix, Shellscripting, C. Had a chance to learn it well in school, but had to do that later on the job.

4
votes

Non computer science stuff:
Personally, I wish I had a native language like most normal people around here. By that I mean that most people were born speaking one main language and maybe picking another one or two later. In this situation, the additional languages usually don't impair the native language because you already have a solid foundation that encompasses speech, writing, and listening. I grew up speaking, writing, and listening to three distinct languages simultaneously. Even though I always did well at language classes both at school and college, I wish I had complete fluency in ONE language. This results in me having to think a little bit for a split second before formulating a response. Some people notice that and conclude that I'm too shy (which is not wrong to a certain extent). So I wish I had taken more classes that involved a greater amount of speech, discussions, group work, etc.

4
votes

Economics. It may be boring (and a bit cruel), but anyway it is the only one that is truly essential in this society. After that, statistics.

4
votes

I think the three classes that gave me the most insight into how computers operate in the execution of software (which this understanding allows for more optimal programming) were:

Assembly Language Operating Systems Compilers

Its perhaps very easy to think that these classes aren't as useful unless you go in to a career specifically focused on any one of these things but even if you're a web developer and don't utilize any of these directly that underlying understanding would still be extremely helpful to code effectively.

3
votes

There are about a dozen classes I wish I had taken in college but didn't. Mostly not CS. Photography, General Chem, more writing!

3
votes

It's funny the number of people who are saying liberal arts: I was a cognitive science major (Philosophy/CompSci/Anatomy)...Ended up switching to Philosophy/CompSci with a heavy minor in English (I could have gotten a BA, but didn't bother taking the 101's I'd skipped).

It would take me a week of stories to tell you about all the crap I got from my CS peers for taking those liberal arts classes. No matter that a half dozen classes in logic did more for my programming than any amount of calculus. No matter that all my best AI courses were Philosophy courses. No matter that there were fricking GIRLS in my English classes. No no, I was some kind of unserious poser for taking those courses.

Take heart though. At least you don't have to explain your education every time someone looks at your resume.

4
  • Could you please explain what you meant by "my best AI courses were Philosophy courses"?
    – Mark C
    Commented Mar 3, 2011 at 4:09
  • @mark: "Cognitive Science", which was my original major, is basically nothing but AI, and largely comprised of philosophy. There are two kinds of philosophy: analytic and continental. All the stupid shit is continental. Analytic is logic, cog. sci, linguistics and shit like that. Commented Mar 3, 2011 at 5:08
  • +1: As a philosophy major myself I took a class called Philosophy of the Mind. This class was basically devoted to Turing Machines. My Philosophy advisor was a CS major in undergrad and my CS advisor actually had his Phd in Philosophy.
    – user3792
    Commented Mar 3, 2011 at 5:17
  • + 1 : "you don't have to explain your education". And there I was, thinking things were different in the US/UK... I know exactly what you mean.
    – Raveline
    Commented Mar 3, 2011 at 13:45
3
votes

Quadratic equations and trigonometry.

Very important in writing software in the for the traditional engineering disciplines.

5
  • Does not compute.... since a majority of good programmers are engineers, why is someone who feels lacking in their basic arithmetic skills writing software for engineering disciplines when there are a ton of engineers who understand the math, the physics, and the computing?
    – Ben Voigt
    Commented Mar 3, 2011 at 6:21
  • @Ben. Believe it or not...ALOT of people managed to get into software development, and do not have formal training in it. This is probably before "your time". Me being one.. I managed to learn it, but it would have come alot easier if I had paid attention in school.
    – angryITguy
    Commented Mar 3, 2011 at 23:22
  • In case it wasn't obvious, I'm advocating for engineering software to be written by engineers who aren't trained in software development. Software engineering isn't hard to pick up if you have been trained to think logically. OTOH learning to solve engineering problems automatically, if one is lacking in such basic math skills as quadratic equations, is going to be next to impossible.
    – Ben Voigt
    Commented Mar 4, 2011 at 5:00
  • @ben. Those that are lacking in "basic math" skills are now called social media consultants and making considerably more than engineers.
    – angryITguy
    Commented Mar 5, 2011 at 5:20
  • @guilio: I respectfully disagree. There are a few engineers at the top making an insane amount of money (we typically call them "inventors", but they used engineering skills to design the product). Then there is a small group of the most sought-after media consultants. Then the rest of the competent engineers, below them the incompetent engineers and the rank-and-file media consultants are intermingled. And all of 'em make more than your average college graduate with a math degree who teaches quadratic equations to the next crop of engineers.
    – Ben Voigt
    Commented Mar 5, 2011 at 5:27
1
vote

Ya I didn't pay much attention to compilers as I should have.

1
vote

CS/Math: more logic, algebra, category theory. More fundamental and less applied stuff: understanding applied stuff when you know fundamentals well is much easier tha the other way around, and more fruitful.

(I had A in statistics but it took way long to link it to real programming needs, I forgot a lot.)

'Humanities': natural language, writing, formulating, understanding and being understood. It does not look important until you join a team of more than 2-3 fellow hackers, that is, in so called 'real life'.

1
vote

Computer Graphics (3d rendering in opengl/directx)

I honestly was very interested in it but so busy that I couldn't put in the time I would have liked. It became a chore instead of a hobby. I think I may have to pick up a book on it to get me interested in it again.

Not the answer you're looking for? Browse other questions tagged or ask your own question.