Best Computer Science School in Utah
Nicholas Leippe
nick at leippe.com
Tue Sep 25 11:11:59 MDT 2007
On Tuesday 25 September 2007, Paul Seamons wrote:
> I'm biased. I did Engineering. But if I had it to do all over again - I'd
> do it all over again.
I totally agree. I have a B.S. from BYU in Computer Engineering. (When I
started, it was an emphasis in the EE program.)
I learned more about OS internals in the EE real-time systems class than in
the CS OS class (which I took simultaneously).
I learned many things relevant to compilers in the EE architecture class
(where we hand-optimized assembly for our DLX simulators) that we never
covered in the CS compiler class (which, I might add, is still a very good
class and should be a requirement--at least it wasn't at the time).
I feel that if you want to be a professor and teach, or research, then pure
theory is great, and enough practical to do your research is all you'll need.
But, if you're going for a career path, then you are going to need practical.
IMO, practical is pointless if you have no theory to back it up. Practical
requires mentoring, experience, and good examples to learn from. IME, BYU
does not do much practical where CS is concerned. And, IME, in some cases I
got more relevant CS theory from the EE side of classes than the CS side, for
whatever that's worth. But, IMO you definitely need both.
I truly believe any programmer will be better if they understand the hardware
and what's actually happening underneath the hood:
- Learn assembly
- Learn C (it's about as close to bare hardware as you can get in a high-level
language), and once you've already learned assembly, you begin to think as
you write code what is going to physically happen when it executes.
Additionally, having already learned assembly makes understanding pointers
a no-brainer.
- Learn Lisp so that you can get all of the fundamental mathematical concepts
of CS w/o having to deal with the hardware--closures, data structures,
recursion, lambda functions, functional programming, procedural, etc.
- Learn some hardware design, so you understand state machines at the logical
level--mealy vs moore. You never know when knowing the difference might
make your code more manageable--when you apply the right one for the job.
- Learn regular expressions (not a single class at BYU that I took even
mentioned them)
- Learn basic Unix and Windows system administration--it can never hurt to
know how to manage the tools you're gonna use your entire life.
- Learn at least basic networking. Goes hand-in-hand with basic
administration, even if you never do network programming.
- Learn revision control: CVS, git, bitkeeper, subversion, etc.
- Learn software build tools--Make, compilers, linkers, etc. It does no good
to learn how to write a program if you can't get it built into an
executable.
> In the end though, I've skirted the real issue here. You have asked what
> Computer Science program is best, but you haven't given us the most
> important piece of information: What do you want to be when you grow up?
> What do you want to do with your degree? That is a hard question to
> answer. I still haven't answered it very well for myself.
Me either. There are endless possibilities, and each company, each position
even, may only offer a few of them at a given time. Finding the right
position in the right company that offers the challenges that are of interest
to you can be difficult sometimes.
Nick
More information about the PLUG
mailing list