|Notify me of new responses
Since you seem to have taught both Computer Science and Electrical
Engineering at MIT, I want to know which one you would recommend.
I'm currently a high school senior in California, and I've had an
interest in computer science ever since I got my first 486 in the
4th grade or so, and taught myself QBASIC. From there, I went
through C, assembly for the x86 and a bit of 68HC12, and all the
other little languages perl, tcl, php, etc. that seem to be easy
enough to pick up nowdays. I've programmed a whole range of things
from games to simple bits and pieces of operating systems (drivers
and such for custom hardware I make), mostly DOS'ish type stuff, if
you can call that a real OS in today's protected mode world. I feel
I'm fairly competent at programming things, I hope.
Soon, I suppose, I will be going to a college (applied to MIT-- hey,
I might see you, never know), and I'm having a bit of a dillema
whether to choose electrical engineering or computer science. I have
done a bit of electronics (mostly digital), from the basic circuits
to moderately complex digital things using CPLDs and such, and I've
always fully enjoyed it at least as much as programming. However, I
do not feel that I am as good at it as programing, just because I
haven't spent as much time with it (also electronics costs a
lot :| ).
The basic problem is, I've sampled some university level computer
science stuff, and taken the AP Computer Science class (supposedly
representative of a university-type introductory class) last year,
and it all seems to rub me the wrong way, so to speak. While I tend
to favor low, system level programming, and I try to program for the
maximum efficiency (for the machine), all the new courses nowdays
seem to favor high level, abstracted, inherently inefficient
approaches. For example, one of the first few things they tend to
teach is recursion, and they often solve simple things with it. Or,
they force you to make maximum use of abstraction, making a function
for every little thing you wish to do, etc. And, because of my
previous programming experience, I tend to program in more quick,
efficient, and hackish ways, and I usually end up getting a bad
grade on the assignment because of this (even though my program runs
perfectly well, better then pretty much all the other ones).
I don't know if I should either just go with what I know, computer
science, and give in to the "dark side", as I see it, of overdone OO
and lazy programming, as I see it, or go with the unknown, EE. I'm
sure I would enjoy EE, but I'm worried that maybe something is wrong
with my take on computer science, and I might realize that later,
and wish I had gone down that path instead. Or maybe I just worry
that EE will be too hard and challenging (I swear radio electronics
makes absolutely no sense to me, but I do love it). Maybe my views
of computer science are just too idealistic, or elitist, or
something of that nature. After all, I tend to hate almost
everything created (in the computer realm) after 1980, and I still
enjoy using a VT510 hooked up to an old freebsd machine (I also have
a sparcstation 1+ and an old pa-risc machine that I use a lot). I'm
a strange sort of new age dinosaur...
So, what do you think? I enjoy both programming (not necessarily CS,
it seems), and electronics. What should it be? CS or EE?
-- Michael H., December 5, 2003
Good question and thanks for writing. Academic CS is especially great if you want to go to grad school in CS and continue on to work at a university. But as you've perhaps noticed there is a bit of a disconnect between the theory as taught and practical applications. Sometimes the theory leads to beautiful and practical solutions, e.g., the SQL query language for relational databases and recursive Lisp programs for solving geometry problems. But most undergrad CS departments don't bother to motivate the material with practical examples. They didn't have to in the 1990s. Undergrads flocked to CS just to get the degree! They could have taught basket-weaving and gotten full classrooms.
In terms of lifetime skills that are tough to learn on your own and that are tough to outsource to a Java Certified Indian Villager, EE is a better choice than CS. Given the stuff that you've done on your own, for example, you might be a better programmer already than some CS professors, many of whom have spent their lives on highly theoretical material. But almost no self-taught person can design functional analog circuits. You refer to EE as "the unknown" but that's just what college is for!
Let me encourage you to consider one more alternative: Mechanical Engineering. At MIT, for example, many of the best classes in thinking about engineering, solving real problems, etc. are taught in the Mech. E. department. The Mech. E. professors whom I've met all have world-class industrial skills, i.e., if they left MIT tomorrow they could be designing cars at Honda or airplanes at Airbus. Check out http://pergatory.mit.edu/2.007/ and http://web.mit.edu/2.009/www/ for a couple of examples of how Mech Es learn at MIT. Some of the same arguments could be made for the Aero/Astro Engineering dept. at MIT, which does a lot of interesting things with computers while keeping the focus on the application.
A more general statement of the preceding paragraph is "remember that programming is done in every technical and scientific area". If you loved to write about genetics, for example, you wouldn't major in Writing at college (assuming they even had such a major) but instead would major in Biology. If you loved to write about life in Roman times you'd major in History. Computer programming [as distinct from Computer Science] is a bit like writing. It is used almost everywhere, it is something that you get better at with practice, but it isn't necessarily a fit subject for study on its own, especially if you don't want to be bored out of your skull for four years.
Good luck with the applications game. Please come back and post a reply to this thread letting us know where you decide to go.
-- Philip Greenspun, December 6, 2003
Thank you so much for your response. I'm just trying to sort this all out right now, although I still probably have a few more years during college. It's just nice to know what you want to do beforehand :)
Also, thanks for pointing out mechanical engineering. I've always enjoyed building things, inventions, and such, and a large part of my electronics experience is with robots. Strangely enough, I never considered mechanical engineering, though after looking at those course websites, it looks like another field which I would enjoy greatly. Your comparison of programming to writing seems to have finally solved my dillema about why CS seems to have a bit of conflict with my love of programming. I was leaning towards EE anyways, and now I have another great choice in mechanical engineering (which seems to be a bit of electronics, a tiny bit of programming perhaps, and a lot of construction all packaged together). Just as a side note: I don't think it's anything I'd major in, but I do enjoy photography a lot as well, which in part prompted me to ask this question here, as you seem to enjoy many of the things which I do as well.
Thanks once again for your reply. I'm applying to USC, the UCs, MIT, stanford, purdue, and harvey mudd. Probably UCB or MIT would be my 'first choice' schools, but all these places seem to have good programs in what I enjoy. I certainly will write back and inform you guys of my choice, once I get those letters back! :)
-- Michael H., December 6, 2003
Micheal, It might be a little late, but have you considered Caltech?
-- Xaviero Cervera, March 8, 2004
It is a bit late to apply to caltech (just getting acceptance/rejectance letters back). Although I did consider it before, many said that it was too competitive an atmosphere, and I suppose I just discounted it at that. Interestingly enough, I did just get rejected by MIT today (although at the interview, the person said that if it were solely up to her, I'd be accepted). Oh well... guess I won't be attending any of Philip's lectures.
-- Michael H., March 16, 2004