I've been thinking - not just this morning, nor only this past week, but really this whole semester - about what we need to get some

**foundations of mathematics and theoretical CS**percolating into the heads of our undergrads again. As usual, YMMV, this is only IMNSHO, and expect no mollycoddling.

What makes a computer

**scientist**, anyway, as opposed to a computer engineer, or a software engineer? Are these things that belong in an arts and sciences CS curriculum and not an engineering one? I maintain that the math that CS students should have, in order to be properly equipped

**to comprehend a very large range of additional concepts**, is generally a superset of the engineer curriculum. This is a

**transferrable**, transmissible knowledge.

Here are some suggested topics for a partial list of "essentials". By this I don't mean that every topic has to be covered, but rather that if a CS curriculum is going to cover, say, algorithms, it would be reasonable to expect that people coming out of it would know something about graph algorithms

**or**be able to pick it up. So, "sweepline algorithms for computational geometry" is certainly not "essential", but understanding how to do lexicographic sort and being able to grasp the use of priority queues for sweepline algorithms

**is**essential.

__General Mathematics__[***]: One should not be able to get a Bachelor of Science degree in Computer Science without being able to define a:*Relations and functions*

**relation**- subset of the Cartesian product of two or more sets**function**- binary relation denoting a mapping from a preimage/domain to an image/range, such that no element of the domain maps to more than one element of the range

I took a straw poll recently in my data mining and machine learning courses, and the hit rate was about half and half even with some prompting. Articulating the most basic, fundamental concepts of math should not be so hard.[**]: The concepts of "one-to-one and onto mapping", correspondence, and perfect invertibility are essential to many things. Among these are proofs of the cardinality (especially of an infinite set), soundness and completeness of inferential systems, and derivations of mappings.*Bijection*[**]: The most mileage to come out of CS125 (*Tail vs. linear vs. tree recursion**Introduction to Computer Science*), UIUC's counterpart to our CIS 200, was having students understand the foundational concepts of recursion before they even touched iteration, and then relating iteration to it. In 1996, when I was a graduate TA for that course, and it was still taught using Scheme, the 11 homeworks were: variables, recursion, environment and mutable state (assignment), lists, functionals (`map`

,`filter`

,`reduce`

*aka*`foldr`

), iteration, arrays, abstract data types for data encapsulation, a two-part project on object-oriented programming (write a simple line editor), and OO design (iterator patterns). There were 13 labs covering the same material.

One week between homeworks 4 and 5, I taught a help session covering linear and tail recursion. I used the definition of*n*! and the linear and tail recursive implementations of`factorial`

as a starting example, and then showed the students how to calculate`fibonacci(n)`

using tree and tail recursion. And they**got**it. At least, some 250 of 375 first-years in the course got it. And yes, 125 dropped the course and the major. Harsh, but better than slow attrition.

Recursion is fundamental. Teach it early when students have the requisite neural plasticity, and when they are just getting inductive proof technique. Give them both barrels and they will fish for a lifetime. Or something like that.[**]: Radix sort as an extension of bucket sort is one of the most beautiful concepts in CS: simple yet elegant, like most good ideas in CS. It's a joy not only to learn about such things but to pass them on and see people's faces brighten as the light of knowledge enters their minds. Hence, it is a little disappointing when I mention radix sort in a class and get blank looks. "Dutch national flag? Anybody? No?" I think that whether elementary number theory is required of our students, they should be able to define "ceiling", "floor", "modulus", and the mathematical meaning and significance of some simple integer operations. A good student should be able to derive radix sort with a little help; an excellent one, with none, if he or she understands bucket sort.*Basic number theory: base and radix arithmetic***Diagonalization**: Another elegant and useful concept in mathematics is the use of diagonalization in order to prove by contradiction that one set has greater cardinality than another. Cantor's diagonal argument can be generalized to prove Cantor's theorem (that |*S*| < | 2^{S}|, i.e., any set*S*has cardinality smaller than its power set) and analogously demonstrate Russell's paradox, that the "set of all sets that do not contain themselves" is contradictory in definition under naive set theory. Diagonal arguments underlie fundamental theorems of decidability (Godel's Incompleteness Theorem) and computability. The latter is Turing's proof that*L*, the diagonal language, is not recursive enumerable) and that, by reduction, the complement of the halting language is also not RE. Thus, the Halting Problem is semidecidable (the language_{d}*L*of universal Turing machines_{H}*M*and inputs*x*such that*M*halts and accepts*x*is recursive enumerable but not recursive), as is first-order logic (FOL) validity,*aka*Hilbert's 10^{th}problem or the*Entscheidungsproblem*("decision problem").

Diagonalization and Godel and Turing numberings: two great tastes that taste great together, and form a foundation for all of computability theory, not to mention the four families of mathematical solutions to Russell's paradox: the theory of types, formalism, intuitionism, and Zermelo-Franckel set theory.- Unifying theory of state machines: Mealy & Moore models, automata, HMMs!
- Basic graph theory
- Constraints
- Pattern matching

__Discrete Math and Set Theory__- LOGIC of sets!!!
- Venn diagrams and syllogism, quantification!
- Equivalence classes!
- Set difference

__Proof Technique__- Strong vs. weak induction, structural induction!!!
- "iff"!!
- Examples of well-founded orderings: number systems, structured orderings (lattices and semilattices)

__Data Structures and Algorithms__- Divide and conquer: INTUITION behind recurrences and master theorem!!
- Clever constructive ideas: satellite data, bucket sort, lexicographic sort!!
- Sorting: array operations, iterator patterns!
- Dynamic programming!
- Proving properties of greedy algorithms
- "Advanced" topics in data structures: heaps, disjoint set (union-find) data structures, non-master theorem analyses (e.g., path compression in disjoint set data structres)
- Maximum-weight spanning tree
- Ratio bound
- Applied data structures: sweepline algorithms, basic computational geometry, etc.

__Automata Theory__- CONSTRUCTIVE PROOF!!!
- Closure properties!!
- Minimization!
- DFAs
- Pumping lemma
- Decision problems!
- UTMs, decidability

__Software and Programming Languages__- Functionals!!
- Metacircular evaluation!!
- Message-passing architecture!!
- Implementing OO interpretation!
- Generic polymorphism!
- Type variable polymorphism!

The $64 questions:

- How can course-based coverage of the fundamentals be enforced? Can we tighten our prerequisite structure?
- How much of this is psychological or cultural aversion to courses numbered 500 and higher, which could be self-reinforcing?
- What have I missed in the above lists as universal building blocks of a serious CS curriculum?

**Edit**, 11:10 CST Sun 23 Oct 2005 -

**altamira16**made a comment that reminds me that I should have mentioned that we have course numbers beginning with 2, 3/4, 5, and 6/7 for CS majors instead of 1-4. Anyone at K-State CIS: please correct me if I am wrong in my understanding of any course below.

**100:**strictly service courses for nonmajors**200:**intro CS (currently there is only CIS 200, the CS1 course; intro programming courses have been lifted to 300 level)**300:**foundational courses - 300 is Data Structures, 301 is Logic for CS (really rudiments of propositional logic, FOL, proof theory, and proof rules for imperative programs), 308 is an Intermediate Programming in C/C++ now required between 300 and 501, 350 is a Hardware/Logic course for nonmajors**400:**more foundational courses - 450 is an Architecture course for majors, 462 is the Computers and Society course (Computing Ethics and some survey of the ramifications and impact of computing), and there is at least one course just for Information Systems (IS) majors.**500:**"upper-division" undergrad courses, but really almost everything substantial beyond the freshman-sophomore level - 501 is Software Architecture, 505 is the first course in Programming Languages, 520 is Operating Systems, 525 is Computer Networks, 540/541 are Software Engineering 1 & 2, 570 is Automata Theory and Formal Languages, 575 is Algorithms I. Graduate students taking these courses to fulfill a "deficiency" (prerequisite or remedial) requirement do not receive graduate credit**600:**technical electives for undergrads; grads are permitted to enroll for credit**700:**technical electives for grads; undergrads are permitted to enroll

Some notes:

**Discrete Math and Set Theory:**Discrete mathematics is offered by the Math department as MATH 510. We do not have a course on set theory and discrete structures at all, and though CIS 301 is a good course, the counting and set theory component falls by the wayside for lack of time. This is, IMO, the single aspect of our entire curriculum that most needs improvement - though as you'll see in a later post, I have an idea for a partial fix.**"600" Considered Harmful:**IMO, the 600/700 distinction is harmful. Undergraduates should not think that because they may or may not be bound for graduate school that they "don't need advanced concepts". Our graduate grades are inflated to Georgia Tech levels^{1}, so that while grad students could kick undergrad ass all week long and twice on Sunday at my undergrad university (Hopkins) and my graduate university (Illinois), here they are comparable. The weakest grads are weaker than the average undergrads, and the strongest undergrads are as good as the strongest grads, better than the average grad. Why not challenge them? Those who have trouble in our 700-level classes, I have found, are almost always missing something fundamental from the "underclass" (300/400/500) level. Numbering a course 600 and mollifying the curve to ludicrous levels isn't going to fix this!**Advanced Comp Models and Algorithms II, for the sweet love of God:**The course in computability theory and advanced computational models (covering NP-completeness and decidability) is CIS 770. Like smaller university CS departments, we don't have an undergraduate version of Algorithms II: CIS 775.**Whatever Happened to Compilers?**There is no undergraduate-level compilers course. Few undergrads take CIS 706, Translator Design.**Numerical Dead Ends:**We require a lot of numerical computing (good), but it's spread out (bad), short on linear algebra (bad), and does not feed anything at the higher levels (bad). MATH 551 (Matrix Theory) and MATH 655 (Numerical Analysis) are required for our undergrads. I think this might have been a wonderful thing if we had undergrads that go on to do numerical computing but as it is, I think it's a dysfunction. We should require**at least one**of Linear Algebra, Calc III, or Differential Equations (all 200-level "non-gut/pud" courses), leave one elective slot for MATH 655, and prepare our students to understand MATH 551 material coming out of Linear Algebra (the only "500-level" things in that course that are not in Linear Algebra are some orthogonalization and triangulation methods that could be covered in about 3-4 hours of class; more advanced decompositions, cubic curve interpolation, and transformations are covered in MATH 655)**Database Systems**CIS 560, Database Systems, is a required course that I will teach next spring. In principle, a DB theory course is not a bad thing, but given that we teach DBMS and a small amount of theory now that the DB theory professor (Maria Zamfir-Bleyberg) has retired, I am ambivalent about it. I think students would revolt if I went 100% theory with the course, and perhaps rightly so; but I also don't agree entirely with the current structure of the course, which IMO emphasizes practical aspects that could be done on a smaller scale in projects and homework rather than using all of the available class time.__and__Theory:

^{1}GA Tech grads are very good. One of my undergrad classmates, Phyllis Schneck, went there for her Ph.D., and one of my colleagues here, Todd Easton in IMSE, got his Ph.D. there around the same time. That said, their undergrads are also excellent, and can compete on a level basis. In a few departments, the undergrads are actually consider

**better**than the grads, or were when my dad was at Emory in the early 1970s and his friends were at GA Tech. This is not so at a lot of top 50, even top 100, "Research One" institutions.

Having just gone through accreditation, I was suprised how much the process now emphasises form (assessment and objective formalization) over function (transferrability of technical content

**or**fundamental methodology of problem solving).

--

Banazir

- Current Mood: determined
- Current Music:Nada Surf - Always Love

## Comments

altamira16I am hating that accredited universities are not somewhat standardized in their curriculums. It makes it quite difficult to go from one to another for a different portion of your academic career.

banazirI am not sure it is an aversion to courses numbered 500 and above but a time and money thing. By the time you hit senior year you may have an elective or two to take 500 level courses...Hrm, I should have mentioned that we have course numbers 2, 3/4, 5, and 6/7 for CS majors instead of 1-4:

100:strictly service courses for nonmajors200:intro CS (currently there is only CS1 == 200; intro programming courses have been lifted to 300 level)300:foundational courses - 300 is Data Structures, 301 is Logic for CS (really rudiments of propositional logic, FOL, proof theory, and proof rules for imperative programs), 308 is an Intermediate Programming in C/C++ now required between 300 and 501, 350 is a Hardware/Logic course for nonmajors400:more foundational courses - 450 is an Architecture course for majors, 462 is the Computers and Society course (Computing Ethics and some survey of the ramifications and impact of computing), and there is at least one course just for Information Systems here500:"upper-division" undergrad courses, but really almost everything substantial beyond the freshman-sophomore level - 501 is Software Architecture, 505 is the first course in Programming Languages, 520 is Operating Systems, 525 is Computer Networks, 540/541 are Software Engineering 1 & 2, 570 is Automata Theory and Formal Languages, 575 is Algorithms I. Graduate students taking these courses to fulfill a "deficiency" (prerequisite or remedial) requirement do not receive graduate credit.600:technical electives for undergrads; grads are permitted to enroll for credit700:technical electives for grads; undergrads are permitted to enrollSome notes:

Like smaller university CS departments, we don't have an undergraduate version of Algorithms II: CIS 775.

at least oneof Linear Algebra, Calc III, or Differential Equations (all 200-level "non-gut/pud" courses), leave one elective slot for MATH 655, and prepare our students to understand MATH 551 material coming out of Linear Algebra (the only "500-level" things in that course that are not in Linear Algebra are some orthogonalization and triangulation methods that could be covered in about 3-4 hours of class; more advanced decompositions, cubic curve interpolation, and transformations are covered in MATH 655)I agree about accreditation: having just gone through it, I was suprised how much the process now emphasises form (assessment and objective formalization) over function (transferrability of technical content

orfundamental methodology of problem solving).--

Banazir

kakarigeikoBeen lurking for a bit and finding your posts always interesting as always. I have some thoughts on this one.

After having been in grad school for a while now (and hoping to stay a grad student for quite a while longer!) I've thought about how to address the problem of undergrad CS. My conjecture is,

"You can't cook computer scientists and software engineers and hardware architects all in the same pot."

No, four years (actually 3 counting required humanities etc undergrad breadth classes) is not enough to cook up a guaranteed polymath with an adequate foundation in all the above. Not to say that many people don't do the whole systems-theory-AI whizzkid thing successfully, just that the majority of students aren't whizzkids.

The solution? Explicitly split the program: Instead of a catch-all BSc in "computer science", you can have a BSc in theory, or software systems, or AI/machine learning, or hardware systems (or subsume the architecture guys under EE). Just have about a year's worth of work in common between them. The beauty of this scheme is that the university's course offerings don't have to change at all, just the requirements are modified so that your theorists don't spend half a semester building an OS if they don't want to, and your software engineers don't have to worry about learning advanced probability theory.

Basically I don't think it's a problem of coverage, it's a problem of coherence. No coherence = low retention. Maybe we should get a bunch of CS BScs in various areas five years after they graduate and quiz them on the things that they found useful and/or retained. I suspect a very low hit rate.

P.S. belated happy birthday!

gondhirtwinbeebanazirYour emoticon and icon imply some satiric or ironic meaning.

Tell me, then: what's "big and fancy" about anything in the lists above?

(And see my addendum about our curriculum in particular; I think it adds some context.)

--

Banazir

prolog- Oct. 24th, 2005 03:20 am (UTC) - ExpandzengeneralCreate SE (Software Engineering) track (which is the current program),

Let CS = SE + Math Degree

Seriously, force students that want to don the title of Computer Scientist to get a Math degree.

Why?In Computer Science, you should know how to write a “proof”. At KSU, there are only two required "proof” courses (570, 575). (301 not listed because it is trivially easy in the same manner that Calc III is trivially easy). In math, there are five. Only two more? no, 575 and 570 had assignments (of 4-6 problems per) every two weeks. Math had assignments (5-15 problems per) every week. So, in effect, 5 math proof courses = 10-15 CS courses. Thus, CS students are deficient by many “proof” courses. Keep in mind, I treat CS and Math majors the same in how they should learn, by doing. Thus, each problem should be rewarding in some regard.

Wah-Wah-Wah, I am a programmer, I don’t need to prove thingsThis thinking is simply wrong; yet, I heard it all the time before and after class. I hear in the halls of Cardwell for Math 510.

The lucid know that a proof is not difficult nor out of reach, but it requires one thing. The ability to think clearly and understand the subject matter. If you can not prove, then how well do you think you can program? If you refuse to prove, then how sound will your software be? Writing code and writing proofs are the same save the language.

You elitist bastard! you’re saying math majors are better than cs majorsSadly, yes. Math and Computer Science should be two sides of a coin. The education, at KSU, for math majors is far better than that of the CS dept.

Wah-Wah-Wah, I want practical experienceWhat isn’t practical about proving theorems? Once you learn the deep theories, the elusive arguments, the technique of convincing another human; it is almost a trivially matter to convince a computer. Theory tests the metal of a person to their very core, practical experience takes but 21 days to gain once you understand the theory.

zaimoniAs long as CIS remains damned to the Dept. of Engineering at KSU, it's going to be proof-deficient. It

wentto Engineering from Arts & Sciences the semester after I dropped back to a single-major in Math, rather than dual-major Math/CIS (as undergraduate). The theoreticians like Myron Calhoun ["Today is the last day to drop with a W"] and Marten Van Swaay [normal curve grading...cool until you realize thatallgrades are recomputed whenanyonedrops the course....] were less than popular in short order.Dept. of Engineering is voc-ed :( Pricey voc-ed that requires moderate intellect to survive and highly trained intellectual reflexes, but voc-ed.

mapjunkieEven UIUC is beginning to change, with the new undergrad curriculum. I don't know if the new changes were necessary. All that UIUC needed was a required systems programming class (as a prerequisite to OS, networking, advanced hardware architecture, and embedded systems) and a required internet application programming class (possibly as a prerequistite to a user-interface design track), and the ability to better integrate CS classes into application-sequence programs (like a data-mining/ML sequence applied to a specific discipline, like a bioinformatics sequence that came straight-out-of-the-box).

Oh, yeah, and a graduate curriculum that integrated the pragmatics of academic publishing and the academic social networking better into the evaluation of student performance.

banazirAs a fellow UIUCer, I only say right on!*high five*

So, I noticed that UIUC turned CS373 and 375 into 473 and 475. I'm not sure this is a great thing. Back when Pravin Vaidya taught the course, it was a holy terror: he would give exams where the mean was 17% and the stdev 14%. People would go in knowing that 40% was a solid B and that anything far over 50% got you an A. I remember people coming out estimating their scores at about 30% and getting 3% instead. If Deja News/Google News/Google Groups kept

`uiuc.cs.general`

, you could see some of these gems from the early to mid-90s. Fortunately for me, I took Algorithms I (old CS373) from Mike Goodrich at Hopkins (now at UC Irvine) and Algorithms II (old CS473) from S. Rao Kosaraju, who was head of JHU-CS between Masson and Smith.All I got were some harsh remarks from Edelsbrunner (I think) on the comp geometry question my Theory Comp, but I still passed with a 74% (which was 7

^{th}of 17 people to take the exam, 16 of whom passed). Oh, and there were 8 questions in 3 hours there, not 4 (or 3!) questions in 4 hours. They were a little easier than the ones we have, but not much easier.Reingold was famous for making every single question on the CS373 final (9 questions in 3 hours!) be from ACM Transactions on Mathematical Software or Symposium on Theory of Computation/Foundations of Computer Science (STOC/FOCS) or JACM. An "easy" or "freebie" question was one that came out of Cormen, Leiserson, and Rivest instead.

Lenny Pitt gave 5 questions on a typical hour exam in CS375. The first one would be 10 true-false questions of the type "x

^{n}y^{m}z^{n+m}is context-free" (questions about regular languages on the first hour exam, CFGs on the second); the second would be a minimization or normal form question; the third, a pumping lemma question; the fourth, a constructive proof ("draw an automaton that accepts L = ...") or counterexample; the fifth, a closure property. We had anhourto do this. 60 minutes.I wrote midterm and final exam questions for Caroline Hayes (CS348) and Sam Kamin (CS325). On the 325 exam I suggested that he do an S, K, I combinators question. "Did you cover that in lecture?" I asked. "No, but let's do it anyway!' he said cheerily.

Sometimes, I look at the performance and motivation level of undergrads and grads in our program, and like

zengeneral, I just find it depressing. It saps the will. But then, I was never one to give up. More on this in a bit.I gave a machine learning midterm my first year here that was 5 questions long (where at UIUC Dan Roth's was about the same length). Of 5 students, I think 3 finished it all, and 2 finished half. The mean was about 75% and the spread was something like 70% to 90%. I'll tell you what this year was like after the last make-up exam is taken.

Please tell us more about how it is in Siebel now, though.

Were you ever in DCL?

--

Banazir

prolog- Oct. 24th, 2005 03:24 am (UTC) - Expandbanazir- Oct. 24th, 2005 05:14 am (UTC) - Expandprolog- Oct. 24th, 2005 01:37 pm (UTC) - Expandbanazir- Oct. 24th, 2005 02:10 pm (UTC) - Expandprolog- Oct. 24th, 2005 03:59 pm (UTC) - Expandbanazir- Oct. 24th, 2005 05:20 pm (UTC) - Expandprolog- Oct. 24th, 2005 06:33 pm (UTC) - Expandsui_degeneris- Oct. 24th, 2005 08:58 pm (UTC) - Expandprolog- Oct. 24th, 2005 03:28 am (UTC) - Expandmapjunkie- Oct. 24th, 2005 10:34 pm (UTC) - Expandbanazir- Oct. 25th, 2005 10:43 pm (UTC) - Expandmapjunkie- Oct. 26th, 2005 12:58 am (UTC) - Expandgregbo"relation: asubset of the cross product of two or more sets"Did you mean cartesian product?

As for retention of what's learned in computer science curricula, most of it won't be because it won't be used.

banazirDid you mean cartesian product?Yes, and so edited; excuse the colloquialism - I didn't mean vector product. :-) I'm used to saying "cross product" for tuples and types

`'a * 'b`

, as in`'a * 'b -> 'c`

.As for retention of what's learned in computer science curricula, most of it won't be because it won't be used.Yes and no. I think a lot of the things listed above

shouldbe used, and where it isn't, we get shoddy (faulty or poorly-designed and hard-to-maintain, hard-to-extend) software. However, I also agree withkakarigeikoin that CSes are not software engineers any more; there is still a lot of overlap (50+% in a good program), but equating them and expecting a trained "CS/SE" (such as a professional of this description exists) to come out of a 4-year B.S. program will just lead to unilateral disappointment. Ergo, what he suggests is (IMO) really the way to go: we need Colleges of Computing with CS and SE departments. Tear that band-aid off.--

Banazir

gregbo- Oct. 28th, 2005 07:59 pm (UTC) - ExpandtmehlingerI am woefully tired and frustrated with all the theoretical froo-froo that's been stuffed in my head over the last three years, and I dread taking courses like 570 and 575. Perhaps if I understood most of it, I wouldn't feel this way, but the fact remains that I don't understand even half of it, and anymore I'm not much interested. I had no trouble with courses like Calc I/II/III, Digital Logic, Data Structures, etc. because I felt like I was ACTUALLY ACCOMPLISHING SOMETHING. There are clear, well defined, unmistakable fundamentals in algebra/calculus--if you understand 1+1=2, you're halfway to a good understanding of calculus. If you can do binary math in your head, you've mastered most of digital logic. These are painfully, ridiculously, monumentally, stupidretardedly simple, yet POWERFUL fundamentals that any idiot can understand an build on.

The "other" fundamentals of math boggle my mind. I understand what set difference/intersection/union/etc. are. I understand conjunctions/disjunctions/implications/q

My brother recently graduated from a technical school. He's got a good job working for a very nice car dealership in Wichita. He gets his hands dirty every day poking around in the bits that make the car go. I want to do the same sort of thing with programming, but in the current curriculum, that's not what I'm expected to be able to do. What I *AM* expected to be able to do is (proverbially) shout the laws of thermodyamics at an engine block and hope that it magically starts. My brother doesn't give a rat's petoot about thermal efficiency, fluid dynamics, etc. By the same token, I really could care less if I can prove the result of one of my functions. You can look at all the parts in an engine and PROVE that it will work, but it doesn't matter one iota until you start it up and drive the car somewhere. I don't think software is any different. If it breaks, you pull it back in the garage and figure out what went wrong.

I'm not a dumb kid. I'm by no means a super-genius, and I'm certainly not a fantastic student, but I'm no dummy. I am, however, tired, frustrated, and moreover, bored with some of the crap that I'm expected to know. I can appreciate having to know some of this stuff for more advanced topics I'd like to learn about (FOL in AI, for instance :). No professor should have to put up with a bunch of deficient students; requirements are requirements, and they're there for a reason (in this respect, I'm probably guilty--at least I'm aware of it). HOWEVER, I'm near my wits end, and I've got three semesters left, and there's still more headache and frustration in my future.

I want to get my hands dirty. I want to see data structures, I want to see algorithms, I want to see functions, I want to see CODE, and I want to be able to improve upon it, recreate it, emulate it, destroy it, [some verb] it, without being bored to tears in classes like 301.

Perhaps Jeff is right, pure CS majors should be required to get math degree as well, and the rest of us can be SEs. Whatever. At the end of the day, I just want to whack a program with a hammer until it falls apart, so I can see what's inside. Right now, I can't do that, at least not with a respectable GPA.

tmehlingermapjunkieTo even find out what the opportunities are, sometimes trudging face-first into the firehose seems to be the only way...

(no subject)-mapjunkie- Oct. 25th, 2005 05:23 pm (UTC) - Expand(no subject)-gregbo- Oct. 28th, 2005 02:25 am (UTC) - Expand