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.

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

closed as not constructive by Mark Trapp Oct 22 '11 at 3:24

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

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.
–
LennyProgrammersMar 2 '11 at 14:51

40 Answers
40

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.

this answer is not to OP but to its complement: what should they have taught you better/more in-depth
–
davkaMar 2 '11 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.
–
bit-twiddlerMar 2 '11 at 20:08

3

Am I the only one to cringe when 'learn' is (incorrectly) used instead of 'teach'?
–
dr-janMar 2 '11 at 20:36

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...
–
chrisaycockMar 2 '11 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.
–
FrustratedWithFormsDesignerMar 2 '11 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.
–
birryreeMar 2 '11 at 15:46

3

I think there is a 70+/- 2 % chance that I should have taken stats.
–
Zachary KMar 2 '11 at 16:38

10

60% of the time, it works every time.
–
Matthew ReadMar 2 '11 at 16:58

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.

+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.
–
Jörg W MittagMar 2 '11 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
–
birryreeMar 2 '11 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.
–
KevinAug 17 '11 at 20:18

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.

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.
–
Bill LeeperMar 2 '11 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.
–
btillyMar 2 '11 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.
–
user1249Jul 28 '11 at 8:07

Regular expressions should only be used as a last case scenario however
–
billy.bobMar 3 '11 at 11:04

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-logicMar 3 '11 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.
–
StephenPaulgerMar 3 '11 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.
–
user1249Apr 6 '11 at 13:47

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.

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.

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.
–
DimaMar 2 '11 at 21:12

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.
–
DimaMar 7 '11 at 17:58

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.

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.

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.

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.

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.

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

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.