Best Computer Science School in Utah

Nicholas Leippe nick at
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

> 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.


More information about the PLUG mailing list