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 <[EMAIL PROTECTED]> 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
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/