This is a response to TehAusum’s post, My Future? How about yours? as well as his comment on my post, The Great Office War.
So here are my rather unstructured musings on my experience as a Computer Science student (I’ve completed two years towards a bachelors in CS and Math):
It was not what I expected. That’s not a bad thing. It would be contradictory to the point of a liberal education if my perspective on what computing is hadn’t changed after a couple years of college.
I’ve been interested in computers ever since I was a little kid. I wrote my first C program at 8 years old, toyed with Visual Basic for a while, and discovered Linux and Open Source in high school. When I started college, my view of computing (And also of my prospective career) was limited to the world of server administration, coding for commercial and/or open source projects, and web design. I new I wanted to do *something* with computers — which I generally figured would either be programming or 3D graphics design. Funny how I tended to lump them all together vaguely.
IT is a Subset of CS. I homeschooled three years of high school, most of which I spent marinating in a Linux-dominated world of open source software. The skills I learned there were extremely beneficial, and without them I would have struggled when it came to my first IT-related jobs (Most useful skill: Use Google, mailing lists, etc to find answers when you want to do something technical. Never let yourself get stumped in cluelessness). Emerging into college showed me a bigger world, however. From my class notes in 2006:
“There is a distinction there between a programmer and a computer scientist.”
[The professor] emphasizes the advantage of educated programmers (”Computer scientists”) over “High-school drop-out” who learned only by experience. With a greater understanding of the why and the math beneath the functions, efficiency and security (Not to mention stability) can be more comprehensively implemented.
Some of my classmates grow frustrated when we learn things from a top-down approach, and aren’t given enough real-world practice to really learn practical skills. This is true to a degree. Rocket science isn’t very useful to a bulldozer operator. But if you really want to go on and accomplish something big in life (Like, say, going to the moon), the theory is important. It will become practical if you find sophisticated applications.
One of my favorite classes so far has been, believe it or not, Formal Theory of Computing. For an entire semester we built silly looking graphs that look something like a whole bunch of ping-pong balls connected by fishing line. The pesky, painstakingly created “automata” (Simple computers) would do little more than tell you whether or not a string contained a certain pattern of 1’s and 0’s (i.e. it would recognize a “language”). Most of us will go on from that class without ever using such designs again. Some of us, however, recognize these ideas as foundational to computing in the abstract as well as practical applications (i.e. automata are the heart and soul of parsing and Regular Expressions) — and perhaps we’ll be able to do our part in advancing the field in fundamental ways (Think for a moment on why it might be important to prove that a Neural Network can do anything a Turing Machine can do, which is pretty much anything).
If nothing else, there’s the whole “liberal education” thing: we have a better understanding and appreciation for the saga, the history of computing, and why things are the way they are. If you’re like me and enjoy relishing in the architecture of the big picture, and seeing where you might fit into it, that alone is worth the hordes of money we pay for school.
In short, IT is where the rubber meets the road, computing for the common man. Computer Science is where advancements occur, from the grand ideas (Turing Machines, Neural Nets, NP-Hard problems, Big-O notation) to common R&D (Systems analysis, DBMS design, software architecture). If you want to be able to make top-notch contributions (*cough* Scientist *cough*), you want to have a grasp of the big picture.
Experience is Imperitive. Most employers, I expect, feel that a degree is little more than a formality. A firm grasp of grandiose theoretical concepts does not translate to familiarity with the tools and tricks of a specific application. Even if you have enough conceptual understanding to single-handedly rebuild a multitasking OS and accompanying CPU from scratch in the event of global catastrophe (If given a few decades to tinker) — if you don’t know the programming language or software suite they’re using at XYZ inc., they’ll be hesitant to hire you (And with good reason).
Good programmers aren’t produced by the educational system — all school offers is perspective — they’re self-motivated. If the first programming you ever do is in CPTR101, it’s a red flag that you might be the bottom of the bucket. There are exceptions, of course, but don’t wait to be told how to program (Because you won’t be, not completely) — learn by doing. Finding projects can be hard at first, especially as a novice, and motivation to complete anything genuinely stunning can be tough to come by, but do *something.* Set up a web server. Build a personal website with a databased guestbook and photo album. Make a screensaver, or a game. Find an open source project to help out with.
As for me, I did a few programming projects, sure (Some games in Visual Basic, a couple utilities in C++, a website in PHP), but what really got me going was using Linux. Yes, we live in a primarily Microsoft world, but Linux is a big part of the industry too, and more importantly it has a community and system design that is perfect for the student. You learn just by using it (In conjunction with Google, forums, and IRC) and trying to do things the hard way. If you tackle Linux (Think of it as Latin), Windows be a cinch (Modern romance languages) when you go back to learn specific skills for the work place. Windows, then, will also insult your intelligence every time you turn around, and constantly get in your way, but that’s besides the point.
The most practical class I’ve had so far is Database Concepts & Theory. Databases store information, which, this would be a good time to remind you, is what the “I” stands for in Information Technology. Even if you haven’t done much database programming by the time you have a class in it (Though you really should at least teach yourself the basics ASAP), pay attention (This coming from the guy who made up fantasy alphabets and drew Pac-Man comics while the teacher rambled about the relational model — oops!). All that abstract stuff about relational algebra is perfect mental exercise for constructing SQL queries, and a good understanding of all those confusing cross product flavors (Joins) will come in handy someday. Oh, and I love Entity Relationship diagrams (Maybe it’s that latent affiar with graphics design coming out).
Computing and design are two distinct fields. At the University I attend, the Computer Science and Digital Media departments are literally on opposite corners of campus, in the two buildings that are further apart from eachother than any other pair of structures. I have several friends who are in both programs (I considered it myself), but there really is very little overlap courswise. Where I’m working now, the web designers and programmers are on two distinct teams. We work together closely, I do some CSS and image editing now and then, and I’m sure some of the designers know how to code, but the idea is that we are two separate specialties that compliment eachother.
Knowing both is surely beneficial: Graphics programming is a very intricate, not to mention titillating, field (One of my professors specializes it), and I wouldn’t be so proud of my personal and/or freelance websites if I hadn’t developed some artistic skill along the way. My point is, though, that the joy of creation is somewhat bifurcated into the visual technical realms in the real world — perhaps because of most people’s tendency to fall into the left or right brain camps (?).
My world has grown tenfold since I started college. The once gigantic and intricate world of IT has shrunk to one subset of the commonplace world of business application, a smaller fish (Though no less intricate) in the great lake of technology, research and science. I never would have dreamed to take on a Math major in addition to CS, but after seeing what I could do with it it seemed only natural. At this point I intend to go on to graduate school for AI research, having been attracted by Computational Intelligence — but high school is to CS as college is to CI, I suppose, and I don’t really know what I might be getting into yet (I would love to be able to ask a CI grad student what it’s like).
Of course, I just tend to be the sort of guy that gets interested in things — I also love history and philosophy, compose music, and am something of a writer. I realize that a lot of people despise liberal ed (Even if it changes their entire lives). On that note, CS is not a bad route if you want to go into IT. If you really, really hate school, and if you have enough experience to feel truly competent already, there are plenty of more business-oriented two and four-year IT degrees (Though at a small university like mine CS really is the only viable option, and serves as a catch-all). A CS program is geared with the real-world in mind (ex. our CS dept. has a masters program in Software Engineering) — it has higher aspirations for you than code monkey or cable-runner.
In short, the world is huge. Aim high. Computing is a gigantic and titillating field, and you will never be out of a decent job (Unless you’re an absolute dufus). If you’re good with technology, and it interests you, learn all you can as soon as you can — because all those skills will come to help you (Not to say you can’t be well-rounded — social reclusiveness and nerdhood is not a prerequisite for excellence).
*yawn.* Wow I’m tired. Too tired to edit. Hope this posts made sense
.
SigmaX