Tech Life Education or experience?

Best. Class. Ever.

The current gig has presented me with a technical scenario I’ve never been in. I’m managing engineers who are writing in a language that I’ve never programmed in Cocoa… Objective C. Yes, many of the lessons of Java, C, and C++ do apply, but when I sit down to do a code review ALL THE SQUARE BRACKETS SCARE ME.

Brief Sidebar: The situation has the unintended side effect of preventing me from violating Rule #7 of Rands Management No No’s: “Don’t try to save the day by turning yourself into a programmer”. If you are the manager of an engineering team and you commit this error, you’re waste everyone’s time. Yes, I know you know you think you know the code, but you don’t… your engineers know this code and mastering this subtlies of this codebase is going to take more than a long weekend.

You’re confusing the hell out of the team. Aren’t you the conflict resolution guy? The person your team goes to when a decision gets sticky? Now, you’re putting yourself on the front line. Who are they supposed to bitch to about management? The time trying to figure this out will now waste more time and, guess what, now you’re now further behind.

Nice move.

Ok, the real point. I’m still able to have a technical discussion with my team because I was a software developer for a decade… I also went to college (Go Slugs!) for a computer science degree. The combination of the education and the experience means I’m technical even though I’m a management boob.

While I’m confident experience is much more relevant than education, I still remember, on a daily basis, the first time I learned about certain computer science topics and that’s what my question is. What class in college do you still refer to on a daily basis?

Easy easy easy. Introduction to Abstract Data Structures. Taught by some professor who essentially read from the book, but the book was quite good. Arrays, queues, hashes, linked lists… all the basic building blocks of constructing data structures combined with a healthy dose of abstraction. I apply the ideas I learned in the one semester class every single day.

How about you?

13 Responses

  1. Yeah same with me, Data Structures. I’d be hard pressed to create a circular queue again but there’s never really a need.

    The professor who taught most of my upper division comp sci classes was a real OO advocate. It was from him I learned how to implement a facade and a singleton. Big skills used all of the time.

    I still recall the dining philosophers problem as well as the barber shop problem, very important for any multi-threaded applications, semaphores and the like. I think that was the Operating Systems class…

    Funny you should mention Objective-C, I’ve been using it quite a bit lately, learning the ropes and so forth. Coming from a Java background the most annoying thing is dealing with its memory management model. I have been spoiled by Java’s garbage collector. Using retain and release is much better then dealing with pointers though.

  2. That’s funny I had the same reaction to cocoa then you.. I was even more shocked when I tried python ( what you mean my whitespace is now a control mechanism for a code block? ). My brain just can’t see indented code without bracket…

    Anyway, to answer your question which is quite good ( btw congrats on calling beta dead many months before Wired ), I think it’s math applied to information science ( in college, in canada ). It’s was really useful to have a complete semester only on bool algebra and related topics, having a test completely in binary was weird however.

    I still use that knowledge every days, it’s funny because at university we get all those advanced math class and well I don’t remember any of them, even if they were much more expensive.

  3. I still have my copy of Dale and Lilly’s ‘Pascal: Data Structures’ on my shelf, next to Java in a Nutshell, the Weems and Dale introductory Pascal book, and K+R. I don’t program for a living – never did – occasionally I like to look at a simple open source program and figure out what it’s doing and how, maybe tweak it a bit for fun. This is a hobby.

    The class in data structures – I took it in high school – equipped me splendidly to understand what is going on in most code segments; overall modern program structure I don’t understand at all.

    In my daily work, the most useful class is Gross Anatomy. After that, Gross Anatomy occupies the number 2 spot, and #3 would have to be Gross Anatomy. Around number 15, Pharmacology probably shows up on this rather monotonic list. Did I mention that understanding Gross Anatomy is very important for the kind of doctor work I do? Not only neuroanatomy (I’m a neurologist), but also spinal cord and vertebral anatomy, the nerves of the body, the muscles, and the various innervations of the sympathetic and parasympathetic systems and the sundry hollow and solid viscuses. Less important but still probably daily concerns are neurophysiology, cardiac physiology, and renal/pulmonary physiology, in that order.

    I use nothing at all that I learned in college on a daily basis. Occasionally I have to do some stoichiometry, but I learned that in high school. The classes in Michelangelo and the Writer’s Craft were probably the most important in my college career, because not only did I enjoy them, but they laid out a framework or a method of enjoyment for a lot of future things (art and literature, basically.) Enjoyment is as important in life as anything else, I imagine.

  4. I’m still in school, so I know that I don’t quite fit into this question (I don’t have any real experience to back up my choice). Howeer, I would have to say the Intro to Java course I took. I’m not a CS major because I thought that the only people who could be CS majors were the ones who had been programming FORTRAN since they were in Middle School. However, this course showed me that people trying to get into programming often know a lot less about computers than I do.

    So while I might not ever get a job programming (although I’m *very* sersiouly considering going for a Masters in CS), it has become kind of my passion as I slowly experiment with different languages.

  5. Ditto. Data structures is pretty much the only subject I have referred back to.

    P.S. Rule #7 is important, but when it gets broken its a good way to discover lots of dirty little secrets. The last time I broke this rule I discovered that the automated setup scripts we had weren’t ever actually being run – instead the nerds were copying chunks of SQL out of the scripts and applying them by hand. Of course it turns that that the scripts didn’t work (fancy that).

  6. I would say algorithms, and, more specifically the *analysis* of algorithms is the most thing I retain from college. An understanding of data structure is important, of course, but most modern programming environments like Java and Cocoa provide collection classes that obviate the need to ever construct your own linked list or hashtable. It’s not as easy to eliminate the need for programmers to be fully aware of the performance consequences of their design decisions.

  7. Dr. Hertling’s “RF Engineering” course at Georgia Tech. The course turned out to be more valuable in the general domain of engineering than about any RF-related. He demonstrated why we learn to do things first by hand, and only then with the help of computer-based tools. (I loved the story of his student who proposed a circuit with a 23 foot stub — cuz *that’s* what the computer software said!) He also emphasized how engineers *must* always remember the cost of things — how the last 10% cost the most, and is usually already within the bounds of acceptability.

  8. Kindred 13 years ago

    Personally, the most important class to me was Intro to AI at UMass Amherst. Not necessarily because of the things i learned it, but more because it was that class alone that finally sparked my urge to ‘enjoy’ programming, rather than treating it as a chore.

  9. I just finished the Data Structures class at UMass Amherst, and already I can tell that it will be one of the most important classes I’ll take.

    Red-Black Trees hurt my head.

  10. Kindred 13 years ago

    If you do any distributed programming, you will love the “N-dimensional Hyper Cubes”…i still get a headache trying to picture something in n-dimensions… 😉

  11. frisbeememex 13 years ago

    Yo Rands, I’m a UI guy/non programmer with a high threshold for nerrrrd (w/Rainier Wolfcastle inflection). I’m interested in gaining a better understanding of abstract data structures. Any recommendations on a text? I don’t need it to be specific to any programming language.

  12. Orion 13 years ago

    GCSE Chemistry and Physics, (I took them when you could do them separately at that level in Britain), taught me the lesson that ‘for better or worse, those who know more than you will lie to you in order to explain a concept to you’.

    At school it was done for your own good – there is only so much you can grasp at once. Nuclear Physics to a 14 year old needs some dumbing down when they don’t understand the basic constructs.

    In the last 12 years of my working life though, I have discovered that people guard information jealously, and only give you enough to make an asshole of yourself if you repeat it to someone else.

    It’s a hard lesson, but once learned is never forgotten. It’s the time when you learn who the real assholes are, in fact.

  13. John Whitlock 13 years ago

    I agree, some text recommendations, please. Until then, there is always CanonicalTomes on Algorithms:

    http://www.canonicaltomes.org/topic.cgi?topic_id=88

    Knuth’s $135 collection is too much of an investment for something I won’t get to for a while. CanonicalTomes is a great site for getting your feet wet in a discipline.