Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share

locked by World Engineer Jan 21 at 20:45

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

40 Answers 40

up vote 37 down vote accepted

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.

share
1  
this answer is not to OP but to its complement: what should they have taught you better/more in-depth –  davka Mar 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-twiddler Mar 2 '11 at 20:08
3  
Am I the only one to cringe when 'learn' is (incorrectly) used instead of 'teach'? –  dr-jan Mar 2 '11 at 20:36
1  
@dr-jan: Thanks for pointing it out. Edited. –  Jan_V Mar 3 '11 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. –  Paul Nathan Mar 9 '11 at 20:43

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.

share
16  
I wish I could give this more upvotes. –  5arx Mar 3 '11 at 0:53
3  
Spending more time with people who don't grok computers in general is a good thing(tm) –  Rob Allen Mar 3 '11 at 14:13
16  
48+ people who upvoted this just quietly sigh'ed to themselves. –  George Mar 3 '11 at 15:22

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

share
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... –  chrisaycock Mar 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. –  FrustratedWithFormsDesigner Mar 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. –  birryree Mar 2 '11 at 15:46
3  
I think there is a 70+/- 2 % chance that I should have taken stats. –  Zachary K Mar 2 '11 at 16:38
10  
60% of the time, it works every time. –  Matthew Read Mar 2 '11 at 16:58

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

share

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.

share
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. –  Jörg W Mittag Mar 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 –  birryree Mar 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. –  Kevin Aug 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.

share
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. –  Bill Leeper Mar 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. –  btilly Mar 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. –  user1249 Jul 28 '11 at 8:07

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

share
2  
Regular expressions should only be used as a last case scenario however –  billy.bob Mar 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-logic Mar 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. –  StephenPaulger Mar 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. –  user1249 Apr 6 '11 at 13:47

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.

share
1  
+1 a classic mistake –  Matthew Rodatus Oct 21 '11 at 18:50

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.

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

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.

share
1  
It should be... or well, more like Linux. Any programmer should know a bit of bash (or an other shell). –  Per Wiklander Mar 10 '11 at 22:43
  • 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.
share

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.

share

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.

share

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

share
2  
+1 It never hurts to know another language. –  FrustratedWithFormsDesigner Mar 2 '11 at 15:07
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 Mar 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. –  Dima Mar 7 '11 at 17:58

From the CS side of things:

  • User Interface design
  • Testing
  • Version Control
  • Concurrency

From the everything category:

  • Technical writing
  • Speech communication
  • Time estimation skills
share

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.

share

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

share

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.

share

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.

share

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.

share

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

share

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.

share

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.

share

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.

share

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

share

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.

share

Quadratic equations and trigonometry.

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

share

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

share

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

share

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.

share

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