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

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

Sometimes I regret not having paid more attention in Mathematics, however there are many great resources on the web to learn about specific topics so it hasn't really held me back and I think that is probably true for most things. If you're motivated you can still learn the majority of things by reading the internet.

I do think that foreign languages are harder to learn the older you are, I've noticed this myself having started learning French, Spanish, German and Welsh.

share

I have not needed anything I could have learned in school. All I ever needed in programming was taught hands on. My school did not teach OO and the ONE SINGLE THING I need the most is touch typing - which was also not taught. I can do 4 finger touch typing on my own, but I wish I had had the opportunity to learn it at school.

share

Sorry that this in nothing to do with programming, but:

Singing

Effective learning techniques (mind maps, anybody? Wish I'd had them at school)

Time management

Mnemonics

Spelling

How to get along with others, and conversly, how to argue my point eloquently.

Other things will cmoe to mind later, I'm sure!

share

Use the libraries and tools that are available!

While fundamental knowledge is critical both for writing one's own code and for assessing the value of the stuff you can find in libs and online, I wish one of my professors had sat me down and said, "this is pretty good code you wrote in 30 hours, but you could've done it a lot faster and just as well if you'd downloaded and used foolib, barlib, and libbaz. Next time, hunt before you peck."

…but then again, we were all still getting used to the Internet back then.

share

Hardware. I should have taken a few classes from the CE and EE curriculum. Being perceived as a "software-only" guy tremendously limits your job opportunities.

share

economics (especially accountancy) and logistics.

We spend most of our time as IT professionals working on software to do accountancy and logistics related tasks, knowing how that works helps a ton.

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

Calculus of complex variables. Forgot it all, and had to relearn it decades later when I wanted to develop and also explain some heavy DSP audio processing code.

Psychology. Helped me eventually gain a greater interest in reading about the very human cognitive limitations that can help lead to such things as aviation pilot error and common programming bugs.

share

When to settle and just get it done. I Fuss and fret over the stupidest detail and make code portable and reusable to the nth degree when n-1 would work in almost all cases and take half the time.

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

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

I would say at the time recursion and memory management are two things that I shook off in college as things I didn't care for that I ended up needing to practice and relearn on my own time.

For me recursion was taught poorly and seemed almost like "magic" that I never cared to get the full grasp of. The lessons and assignments related to recursion were always trivial and made me write it off and do things iteratively whenever possible. Later, I obviously began to realize the benefits of recursion and put some time in to feel confident having it in my back pocket for whenever it's applicable. Funny thing now is I administer a lot of the hands on programming interviews for my company where recursion is necessary for completion of the problem - all too often I see young candidates struggling to use recursion, apparently I wasn't the only one that didn't master it in college.

Regarding memory management - I did my part to get through my C programming class, but when I went back to predominantly Java it was as if that poorly understood part of my memory was erased. I later forced myself to do some real development in C and get my bearings on all of the basics and beyond. I felt I needed to learn it all for my own sake but doing mostly higher level development I didn't expect to use it - until I started doing iPhone dev where the garbage collector wasn't available. Relearning the foundation saved me a lot of time and headaches in learning the Objective-C way of memory management.

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

Quadratic equations and trigonometry.

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

share

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

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

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

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

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

share

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

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

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

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

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

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

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

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

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