Best Computer Science School in Utah

Levi Pearson levi at cold.org
Tue Sep 25 11:27:16 MDT 2007


I like this below list, but having started a CS degree at BYU instead
of CE, I'll say how well it fit the list at the time.  I didn't
complete my degree there, so just because I didn't experience it
doesn't mean it's not there.  I'll also mention what UVSC has, though
I didn't take the lower-level CS classes there.

Nicholas Leippe <nick at leippe.com> writes:
> - Learn assembly

CS 143 was assembly language, and at one point (I took it 3 times. ;)
) it included designing a computer from logic gates as well.  I also
had to learn an assembly language for an upper-level UVSC class on
computer architecture.

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

I know I had to learn C++ for a class, but I honestly can't remember
if plain C was required as well.  The basics of C are covered in the
OS Theory class at UVSC.  I think OS Theory is big enough to warrant
at least a full class, so that kind of annoyed me.

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

CS 330 at BYU teaches the fundamentals of programming languages with
Scheme as the vehicle.  It's widely complained about; I think it's
because Scheme is introduced too late, after everyone thinks they know
what they're doing, and it's too much of a paradigm shift.

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

I didn't take the required EE class that had you build a UART, but
later on CS 143 took on the hardware design element, using a design
program to build up a simple CPU and simulate it running assembly
programs.  I think things have probably changed again since then.

State machines, from a theoretical point of view, were also covered in
the intro to CS theory class, AFAIR, though I don't remember what the
number was.

> - Learn regular expressions (not a single class at BYU that I took even
>   mentioned them)

This was also covered in a CS theory course.  The textbooks was
'Languages and Machines', and it covered the different classes of
grammars, complexity classes, and other fun theory stuff.

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

For some reason, basic Unix usage was covered in the C++ class.  No
classes I took really covered administration, though.  I think this is
outside the scope of a CS degree, but still very useful to learn.

> - Learn at least basic networking. Goes hand-in-hand with basic
>   administration, even if you never do network programming.

I didn't take the class, but IIRC there was a required networking class.

> - Learn revision control: CVS, git, bitkeeper, subversion, etc.

I didn't take a class that covered this at BYU, but one of my Software
Engineering classes at UVSC covers revision control.

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

These were glossed over at BYU in the unix/C++ class.  You were
expected to mostly figure out the details on your own, IIRC.

                --Levi



More information about the PLUG mailing list