42

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.

HLGEM
  • 28,759
  • 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 02 '11 at 14:51

40 Answers40

120

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.

Ben
  • 863
61

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

cregox
  • 687
FrustratedWithFormsDesigner
  • 46,235
  • 7
  • 128
  • 176
  • That was going to be my answer! http://elem.com/~btilly/effective-ab-testing/ shows one of the ways in which statistics has proven useful for me. – btilly Mar 02 '11 at 14:37
  • Totally agree with @frustratedwithformsdesigner , statistics and Logic are two things i really should have paid more attention – guiman Mar 02 '11 at 14:46
  • 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 02 '11 at 15:17
  • where in your work as a programmer you feel that not knowing statistics enough is an impediment?? This is a very surprising answer for me. Unless you are in a very specific field... – davka Mar 02 '11 at 15:40
  • 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 02 '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. – wkl Mar 02 '11 at 15:46
  • 3
    I think there is a 70+/- 2 % chance that I should have taken stats. – Zachary K Mar 02 '11 at 16:38
  • 10
    60% of the time, it works every time. – Matthew Read Mar 02 '11 at 16:58
  • 1
    You probably all should have... –  Mar 02 '11 at 22:12
  • 1
    47.2% of stats are made up. 60.3% of all people know that. – George Mar 03 '11 at 15:12
  • @chrisaycock, very interested to know how physicians use stats. Do you mean they use some sort of probabilistic expert-systems for diagnosing the sickness and prescribing drugs? – CMR Mar 07 '11 at 17:03
  • @CMR Mostly for reading publications, or submitting research for their own publications. – chrisaycock Mar 08 '11 at 06:02
50

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

Erin
  • 2,358
  • 3
  • 19
  • 23
36

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.

Jan_V
  • 1,632
  • 1
    this answer is not to OP but to its complement: what should they have taught you better/more in-depth – davka Mar 02 '11 at 15:42
  • I thought I was pretty darn strong at this coming out of school now, but some technical interviews made me realize there is alot more to it than I thought. – Panky Mar 02 '11 at 18:00
  • 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 02 '11 at 20:08
  • 3
    Am I the only one to cringe when 'learn' is (incorrectly) used instead of 'teach'? – dr-jan Mar 02 '11 at 20:36
  • Good point, I got some basic experience with OO but since all the class exercises were small projects, didn't get a chance to work on a project where you have to refactor "big" code using good OO practices. – Jon Onstott Mar 03 '11 at 00:14
  • 1
    @dr-jan: Thanks for pointing it out. Edited. – Jan_V Mar 03 '11 at 06: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 09 '11 at 20:43
  • 1
    I always wondered why there was never a "CS 5511 Advanced Debugging" course or something like that. Could easily fill a semester with that – ses011 Apr 01 '11 at 04:09
  • The reason being universities are there to "Teach you how to learn" or some such crap. "They aren't there to teach you a job, that is what a trade school is for." –  Aug 17 '11 at 19:35
36

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.

Jason
  • 855
  • 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 02 '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 – wkl Mar 02 '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
34

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

  • 2
    Regular expressions should only be used as a last case scenario however – billy.bob Mar 03 '11 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 Mar 03 '11 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 Mar 03 '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. – Stephen Paulger Mar 03 '11 at 13:31
  • @m.edmondson, Regular expressions should only be used in programming when they make the program easier to understand. – zzzzBov Mar 03 '11 at 17:02
  • 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. –  Apr 06 '11 at 13:47
33

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.

btilly
  • 18,290
  • 1
  • 50
  • 76
  • 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 02 '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 02 '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. –  Jul 28 '11 at 08:07
23

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.

21

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.

Fanatic23
  • 7,493
18

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.

17
  • 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.
wkl
  • 2,710
13

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.

Bill Leeper
  • 4,125
  • 16
  • 20
11

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.

Rachel
  • 24,029
10

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

lfx
  • 814
  • @FrustratedWithFormsDesigner yes now, but when I was child... :) – lfx Mar 02 '11 at 15:14
  • I studied french and german personally, and actually spent some time in germany. It's something everyone should experience. – Ken Mar 02 '11 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 Mar 02 '11 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 Mar 03 '11 at 06:37
  • @lfx Depends on when you were in school. :) We have a joke about how the Russians supposedly invented everything, with a punchline that Russia is the motherland of elephants, and the Russian elephants are the most advanced elephants in the world. Seriously, though, it depends on the field. If you are talking about literature or physics (e. g. Landau and Lifshits' course on theoretical physics), then yes, there is a wealth of material in Russian. If you are talking about computer-related stuff, then you are much better off knowing English. – Dima Mar 03 '11 at 14:27
  • @Dima: I also had a friend who did a PhD in pure math and remarked that they wished they could read Russian because a lot of the material in their subject area was written in Russian. – FrustratedWithFormsDesigner Mar 07 '11 at 17:07
  • 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 07 '11 at 17:58
8

From the CS side of things:

  • User Interface design
  • Testing
  • Version Control
  • Concurrency

From the everything category:

  • Technical writing
  • Speech communication
  • Time estimation skills
Tyanna
  • 9,528
  • +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 Mar 03 '11 at 14:23
7

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

jokoon
  • 2,242
7

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.

GrandmasterB
  • 39,224
6

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.

user unknown
  • 797
  • 7
  • 14
  • 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. – Vincent Vancalbergh Mar 03 '11 at 08:59
5

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.

CMR
  • 827
5

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.

  • 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 Mar 03 '11 at 14:51
4

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

user281377
  • 28,382
4

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.

chiurox
  • 1,498
4

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

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.

Kenneth
  • 2,703
  • 2
  • 22
  • 30
3

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

Zachary K
  • 10,413
  • 2
  • 38
  • 55
3

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.

Satanicpuppy
  • 6,200
  • Could you please explain what you meant by "my best AI courses were Philosophy courses"? – Mark C Mar 03 '11 at 04: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. – Satanicpuppy Mar 03 '11 at 05: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. – Morgan Herlocker Mar 03 '11 at 05: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 Mar 03 '11 at 13:45