Learning After College

March 15, 2008

I am now over five years out from college.  Five years seems to hold no particular substance beyond any other measure, aside from being used by industry as a benchmark for someone that now has a little bit of experience under their belt.  (This, I’m quite sure, is an arbitrary measurement linked to some facile business practice developed by someone who found the number of fingers on his hand fascinating.)  I do feel more experienced than I did when I left college.  Perhaps I feel more aware - I have a very Confucian feeling of my ignorance.  When I left college, I had a very large head planted firmly on my shoulders.  I had an engineering degree, which is no small feat compared to other degrees, and that degree commanded a salary beyond most college hires.  It seems inevitable that some form of arrogance will result.  It was a foolish arrogance though, based squarely in not knowing (and not wanting to know).

UML is teh winnar!!11!1

My first job out of college, they wanted to train me on RationalRose configuration management and ClearCase.  They had teams dedicated to making sure these things worked right.  If you don’t know, really caring about ClearCase is the same as caring more about requirements and maturity processes than actual algorithm development or any other truly computer science based topic.

The question of what computer science actually is - especially vs. software engineering - is, of course, an open question covered frequently in lots of other places, so I won’t go there.  Suffice to say, a newly graduated computer science or computer engineering student does not dream of a job in configuration management.  They dream of meaty, substantial problems about logic, graph traversals, language paradigms, or whatever else.  Taking all that ambition and throwing it at superficial, mindless problems - which is the typical track for big businesses, pay your dues and the like - is a death knell to your creativity and desire for growth.

That’s exactly what happened too.  I got the very distinct impression after college that software development was crap.  Yes, it paid well, and yes, it had a lot of flexibility.  But the job itself, the meat, was just not that interesting.  All that interesting stuff from college was saved exclusively for the academic realm.  I stopped caring, and I focused on other academic pursuits.  I did a lot of reading, in a breadth-first fashion, to cover the topics I always found interesting but never pursued.  None of it was about computer science.  I regret this greatly now, but I’ll get to that shortly.

After my brief near-death exposure to RationalRose and ClearCase, I moved on to Gantt Charts.  A real big move upwards, I can tell you.  I continued along with that (and my modest 2 weeks of vacation) for about 6 months before looking harder.  When I switched to a far better company, it came with a nice bonus: better work.  My next set of projects had a much more researchy bent, and gasp actually involved programming!  Amazing.  Merely eighteen months after graduating, I might actually be asked to write some code.  I was rusty.  Really rusty.  (Hell, I’m still rusty).  And wouldn’t you know it?  I still didn’t like what I was doing.  Boyer-Moore and Aho-Corasick are really neat string searching algorithms, but over the next three years I finally discovered what really matters to enjoy your work.  Your environment.

People People

For the first four years out of college, I really didn’t like the people I worked with.  There were one or two people I enjoyed working with, but I didn’t engage with them on an everyday basis.  I didn’t like the physical environment either.  My single 17” CRT monitor in the corner of my cubicle just wasn’t the paragon of high technology I hoped to use.

This is a curious realization for an introvert.  Most of my days, I’m quite happy talking minimally during work (which, I think, is common for computer-related fields).  So based on raw quantity of exposure, the pleasure I derive from these relationships should not matter.  That’s just not how it turns out.  I switched jobs again about a year ago, and the dynamism of that change still boggles my mind.  I really, really owe the person who helped me make the switch.

The people I work with now all share a common set of factors that have completely changed the way I look at this entire field.  They’re all smart, they’re excited to learn more, they’re insatiable about it and about getting things right, and they’re very laid back.  Through the people I work with, I’m rekindling a love for computer science, math, and figuring shit out.  It’s like college all over again, and it makes me think a lot about my college years.

Efficiency Models and Their Applications

I liked computers in high school, and I seemed to have a certain ability with them.  I liked math more and always figured a job in the hard sciences was in my future.  When I decided on a college, I picked Computer Engineering based on difficulty rather than interest.  I never really hooked up with a crew in my major that was into the field.  Instead of learning efficiency algorithms in the classroom, we had a real world algorithm that mattered more: we wanted to spend the least amount of time possible to get by. (Caveat: Getting by had a varying definition, but usually meant a 3.3-3.5 GPA depending on scholarships, honors, etc.. so we weren’t total slackers.)  That was our idea of an efficiency model, and we applied it as well as we could.  Psych 101 meant getting the syllabus and taking two exams during the semester.  Studying for transistor logic meant a night spent cramming instead of good note taking and regular study habits.  Skipping class was an extracurricular activity, the books just weren’t all that special, and neither were the projects.  It was always just something you had to do, staccato’d with the occasional epiphany.  I still remember staring at a whiteboard for a solid half hour bewildered after a few of us arranged 16 boolean operators into a hypercube based on their associations.  If only it had application.

That whole application thing got in the way a lot.  Academia today is often looked at as a sort of trade school for different fields, and especially for engineers.  (Not including the psychology, sociology, history and english majors which are all a basis for, depending on your point of view; everything, graduate school, or unemployment.)  So when you’re learning your craft, the theory of it doesn’t seem particularly interesting.  It’s never proposed as the foundational element; the building block.  It’s just crap you have to do.  It’s ironic that in the workplace many people consider research or theory to be the holy grail.  Usually it means you’re developing new applications and charting new territory.  It’s glamorous.

Were I to do it all over again, I’d study more.  A lot more. Harder too.  I’m not saying I would go to Pysch 101 class, that’s ridiculous, but damn I’d like another shot at data structures, residues, medieval history, anthropology, and algorithms.  Finally, after five years of shlepping, software development is starting to make a lot of sense to me and there are gaping holes in my education.  I couldn’t have covered all of those holes in college - computer engineers had to do hardware too - but getting some more of the basics down would have been better.  It ain’t all my fault either.  I’d never heard of functional programming or design patterns in school and, as far as I know, it wasn’t even taught where I went.  But dammit I’m gonna make up for lost time.

Grad school

I bet it sounds like I ought to be in grad school.  I’ve been waffling about that a bit, and I’m not so sure.  Masters degrees often seem purely devoted to career advancement, which often means program management and other slightly less technical paths.  A doctorate is a remarkable piece of academic discipline and commitment with, let’s face it, very, very little pay.

There’s a third path, and it depends a lot on the people around you.  When you get wrapped up in a group of people dedicated and focused on learning more in a field, it almost feels like college again, and you have a study group.  There are none of the tradeoffs in your life that graduate school can require, since it’s on your own time and you can move with it as it pleases you.  And if the interest is there, the rigor in the subject should follow.  I may not have the formalism of tests and projects with deadlines, but my day job satisfies that property, and I have the freedom to choose between a breadth-first or depth-first approach.

So if you find yourself out of college and thinking that the right thing to do now is grad school, take some time to weigh your options a bit.  It’s entirely possible to keep learning without school, and the subset of people that might consider grad school will probably also be the best at going their own way.  Still, it’s important to have some guidelines on what you should do to keep learning.  Here’s a crack at it:

  • Reading
  • Writing
  • ‘Rithmetic
  • Doing shit
  • Recess

Hey, this is easy, it’s like 3rd grade again.

Reading

I’ve always been a reader, since at least elementary school.  As I said somewhere near the beginning of this diatribe, the amount of reading I do was compounded after graduation.  The topics were, in some ways, irrelevant.  I read to fill in blank places where knowledge didn’t exist.  Sometimes it was broad, sometimes it was deep.  Sometimes novels or poetry.  Sometimes physics or history.  The important thing was (and is) to keep doing it.  The amount of information from different perspectives you accumulate starts to really circulate in your head.  It makes you think.  It makes you meta-think.  Reading is the primary fundamental thing that makes you think more and better.  I know very, very few people that I consider extremely intelligent that DON’T read - and it still makes me go cross-eyed at how that can be.

Writing

This one is hard for me.  It’s one of the reasons for this tiny little corner of the Intarwebs.  I really suck at it, and I want to get better.  If reading makes you think, writing makes you able to articulate what you think.  Everyone has beautiful, dangerous pictures swirling around their head.  Wouldn’t it be scary if you were actually able to make them cogent to others?  That’s what writing does, and it’s hugely important to practice.  Unlike reading, however, it requires a different type of investment, one that makes you feel extremely humble.  Reading a book allows you to climb up to the plateau at which the author’s level of articulation allows.  But trying to write to that plateau is like free climbing with a blindfold.  There are habits that can help tremendously, but it still takes monumental effort.  Articulation is an incredibly precise art, and so I fear my great thoughts.

‘Rithmetic

Math is another exercise for the mind.  Somewhere recently I read it described as weightlifting for your brain.  The reason why math is so important, even to people that don’t care about science, is that it helps you think in levels of abstraction.  Unfortunately, a lot of math taught in schools boils down to plugging numbers into memorized formulas.  It’s really a sad state, but that subject is for another time.  If you hated math during school, coming back to it now may be more interesting than you expect, especially with a well written book to get you started.  Steve Yegge had a great blurb on Math for Programmers, which turns out not to be just for programmers.  Go read that, he’s way better at my second point than me.

Doing Shit

This is part of the first three, but it’s also something else.  It’s not sufficient to read for a half hour on Saturday morning.  It’s not enough to write in your diary for 15 minutes every other week.  “Doing” is an active verb.  You’ve got to be relentless about it.  You have to be insatiable.  Clearly, you really have to want to do it.  You’ve then got to take those skills to whatever real field you want to learn and apply it.  I read for at least an hour everyday.  This takes various forms: articles, blogs, academic papers, novels, books, etc.  I try to write as often as I can, but that’s hard.  I keep up on math, and various bits of theory or interesting wikipedia articles regularly.  (You wouldn’t believe how good a resource Wikipedia is for math.)  But I also go to my specific field, computer science, and do whatever theory/programming I can on my own.  Lately that means Ruby.  The joy of learning a new language filled with buttery goodness adds more fuel to the fire.  Yes, I really said buttery goodness.  Ruby’s that cool.

Recess

This was not on my original list, but it’s an important point.  Being relentless with something like this does not translate to tedium.  If the process seems like a never ending chore, you’ll wind up beating your head against the wall.  It’s important to take breaks, to maintain a Joie de Vivre.  Even in a professional application, I wouldn’t want to work with workaholics.

Coda

That’s it, that’s what it takes to keep learning.  Come to think of it, this formula is really in parallel to school, rather than in series.  You can do these things at any point in your life, and wherever you are, it will make you think more and better. Listen to what I shall call Him: the Bottomless Abyss, the Insatiable, the Merciless, the Indefatigable, the Unsatisfied. He who never once said to poor unfortunate mankind ‘Enough!’ ‘Not enough,’ that is what he screamed at me. ‘I can’t go further,’ whines miserable man. ‘You can!’ the Lord replies. ‘I shall break in two,‘man whines again. ‘Break!’ -Kazantzakis, St. Francis


Like the content? Share it around..