create account | help/FAQ | contact | links | search | IRC | site news
 Everything Diaries Technology Science Culture Politics Media News Internet Op-Ed Fiction Meta MLP

 My Brother Wants a CS Degree By Iesu II in Op-EdWed Feb 06, 2002 at 06:11:12 PM EST Tags: Science (all tags) ...and I don't know what to tell him. Myself, I'm just trying to learn about relational databases. I want to organize my recipe collection intelligently. I figured a SQL database was the way to go, so I got a recommended text from the library. I'm figuring it out, because otherwise I'd be compelled to question my manhood, but formal computer science seems rather Sisyphean to me.

The following is as direct a quote as is possible from Section 2.1.7 of Relational Database Systems. It is necessarily paraphrastic because of the text's compulsive use of "some inductive mathematics".

Let H = (H1,...,Hn) be a sequence of finite sets of attributes. An H-database format is a database format S = {S1,...,Sn}, where Si = (Ti, Hi) for 1 <= i <= n. The set of H-database instances is the set DB(H), where

DB(H) = UNION{DB(S) | S is an H-database format}.

Let t be a tuple of the relation rho of a table tau = (T, H, rho). Using the fact that t is a mapping defined on H, we can talk about the restriction of t to a subset of H.

It hurts my head. I want to know how to design and use an efficient relational database. The book goes on to discuss SQL and some specific examples, so I'm able to wring practical advice bit by bit out of the line noise. But is it really necessary to present everything as a set-theoretic proof? If an expert in the subject says that it works and that it's efficient, I'll mostly believe him and I'll be content to absorb methodology and examples. I don't want or need to derive the innards of a join from a null set and a list of axioms. I believe wholeheartedly that it does advance the human species that it's recorded for posterity, and I'm sure that if I was going to design another Oracle I'd be happy that someone else had wangled it for me. But english majors don't get drilled on memorizing etymologies, and I as a musician wasn't required to learn how to solder saxophone keys, so why all the drivel in CS curricula?

Indeed, I don't have a CS degree. I have a music degree instead, but I do have the temerity to consider myself a fairly hardcore geek. I make music on Linux, using mostly Python, Csound, and PD. I have composed musical scores in Perl .I use a crontab to wake up in the morning. I've done contract programming in C++ with Windows CE Platform Builder. I tend to think I have a good grasp on bending computers to my will. I say this to forestall nattering about whether I should be meddling in CS wizardry.

I'll move on to my brother. He doesn't possess the same lust for software innards and ultimate power that I have, but he's a bright kid. He loves computers and their culture too, and he wants to do interesting things with them. I think that last qualification is key: interesting. He's reached the point in his life where he must, by middle-class American standards, choose his path in life by either selecting a course of higher education or entering a vocation directly. He's asking me for advice and I'm stumped.

He wants to go to college. I found college to be an amazing and worthwhile experience, as a sort of monastic period of social and intellectual preparation for the Real World. However, I was lucky in that my computer pursuits are both esoteric and well-defined, and so I found a niche program that suited me well. While in college, it was my impression from talking to people and taking a few extraneous courses that there are two kinds of computer science education:

1. Mathematics/engineering-oriented CS that produces unreadable dreck like the above.
2. Web monkey minors. My brother doesn't want to be a web monkey and I wouldn't let him.
Discarding option 2 as a salve for weak-minded sycophants, we're left with the traditional CS degree. But I hesitate to recommend a CS major; my brother wants to do interesting things in the Real World. I've talked to friends of mine and looked at various curricula (COBOL! Assembly language!) and the impression I get is that when computer science courses aren't actually anachronistic, they're technically exhaustive to the point of absurdity. I know a lot of computer professionals, and not one of them speaks well of a CS education or claims to utilize knowledge imparted by required courses. How many of you with computing jobs use multivariable integrals? How many of you have been paid to design a compiler? How many of you have modelled your application as a finite-state machine before writing any code?

Academia begets academics. If my brother wanted to be an academic - if he wanted to acquire knowledge for knowledge's sake - I'd recommend a typical CS major wholeheartedly. However, I know he wants to actually touch and manipulate a real computer to get real work done. He doesn't quite know yet what he specifically wants to do, or I'd tell him to get vocational certification and go for a job. College is an institution tailored for people like my brother. College is for people who need a bit more general knowledge and a broad survey of contemporary, practical knowledge.

I do know he doesn't want to be bored to tears by exhaustive, outmoded, theoretic jargon. What would you tell your little brother to do?

 Poll
I found the CS text example to be:
 lucid, entertaining, and informative. 23% a little dry, but probably necessary to rigorous understanding. 53% utter dreck. 23%

 Votes: 64 Results | Other Polls

 Display: Threaded Minimal Nested Flat Flat Unthreaded Sort: Unrated, then Highest Highest Rated First Lowest Rated First Ignore Ratings Newest First Oldest First
 My Brother Wants a CS Degree | 75 comments (72 topical, 3 editorial, 0 hidden)
 Ahhh, painful subject.... (4.00 / 4) (#1) by yankeehack on Wed Feb 06, 2002 at 01:38:26 PM EST

 Anyways, I work in the "Technology" field as an instructor and (I guess) a techie. I hold industry certifications. I have a undergraduate liberal arts degree. I just withdrew from a C++ class I was taking as a prerequsite to entering a CS Master's program. And I withdrew from the course not because I didn't understand the material, but because it was taking me double the time to learn it, and I was falling way behind. So what this means is that I am ablt to build, troubleshoot, repair and even teach folks how to use a computer. My mind just isn't wired to program. Am I a loser because of this? Not necessarily. But the one thing that does bother me is that in order for me to pursue formal education (like a Master's degree), I am going to have to take an MBA or a MS with a technology concentration (CIS/IS/MIS). I just am unable to meet the prerequisites for a "pure" CS Masters, even though I am quite fluent in certain technological areas.
 Perhaps (none / 0) (#64) by ucblockhead on Thu Feb 07, 2002 at 12:05:42 PM EST

 My mind just isn't wired to program. Or you just had a crappy teacher. Given my experience talking with friends and aquaintenances taking C++ courses at community colleges and extension programs, I'd bet on the crappy teacher. ----------------------- This is k5. We're all tools - duxup[ Parent ]
 Depends on the kind of programming (4.00 / 5) (#2) by wiredog on Wed Feb 06, 2002 at 01:45:36 PM EST

 The CS degree involves more than just learning the Math and CS. It involves all those "useless" classes that make for a well-rounded individual. English comp and lit, a couple of business classes, sme history, etc. College teaches you how to teach yourself. For one thing, if you've gone to college and studied in the field, you know how to select a book to learn from! I've got the CS degree, and damn glad it isn't just a cert. When I was in college the big cert was the CNA for Netware 3.x (IIRC), a cert that's fairly useless these days. The set theory, however, is still useful. The mathemmatical logic, and assembly, courses were extremely useful when I had to write my own device drivers. If you can't do a truth table, you are gonna have problems figuring out binary i/o devices. This field is still evolving, and few people do the same thing for more than a few years. 5 years ago I was doing programming for automated machinery, some of it in C, some assembly, and some bare metal. That program looked something like "0x01ff 0x02de 0x35fa". Today I'm doing XML processing for web applications. Loading xml files into Oracle databases. I have no idea what I'll be doing 5 years from now. I do know that people who got certifications in 95 have spent (or their employers have) quite a bit of money, and time, to keep up to date, or else left the field. The CS degree has allowed me to be a generalist. Peoples Front To Reunite Gondwanaland: "Stop the Laurasian Separatist Movement!"
 It's called -Science- for a reason... (3.14 / 7) (#3) by Jehreg on Wed Feb 06, 2002 at 01:59:51 PM EST

 I had to do all that math that you seem to be wary of. That's why I have a Computer -Science- degree. If the more touchable part of computers is what you are looking for, may I suggest Computer Engineering, or even better, Electrical Engineering ? Oh, +1 section, cuz I want to see how many CS will respond to this :-)
 Computer/Electrical Eng. curricula (3.00 / 2) (#4) by Iesu II on Wed Feb 06, 2002 at 02:12:43 PM EST

 ...seem to have even more math than CS, AFAICT. Engineers strike me as relishing the nitty-gritty. My brother's good at math, but that's not what he wants to do. I've been doing Python/Perl/C/C++ for several years and have never needed more than pre-calc math. Except for some ray-tracing I did, wherein I called upon my uni experience and bought a calc textbook. :) [ Parent ]
 CE/EE uses a different kind of math (4.00 / 3) (#9) by Rocky on Wed Feb 06, 2002 at 02:35:57 PM EST

 If I remember correctly, CE/EE is one great big gob of analysis (calculus and differential equations), mostly having to do with the care and feeding of transistors and Maxwell's Equations. Fun things like Laplace Transforms and the Runge-Kutta Method. CS is closer to pure mathematics, e.g. things like Set, Order and Category Theory. Many CS research papers use the Lemma-Theorem-Proof style like a mathematics paper, especially in more theoretical areas such as Computability and Programming Language Theory. A good graduate CS program has as much math as a EE program, if just a different type. If we knew what it was we were doing, it would not be called research, would it? - Albert Einstein (1879 - 1955)[ Parent ]
 Yabbut (2.00 / 2) (#24) by core10k on Wed Feb 06, 2002 at 04:34:54 PM EST

 If Engineers acknowledged Discrete Math with any respect, then they wouldn't be able to look down upon Mathematicians and Computer Scientists. And we can't have that! ERTW! *coughs* [ Parent ]
 look down on mathematicians? (2.50 / 2) (#28) by Weezul on Wed Feb 06, 2002 at 05:06:20 PM EST

 Ok, everyone looks down on CS people, largely due to the "I wanna learn Java and graduaate" losers, but my experence as a math undergrad at a tech school was that no one looked down on you. They feared you like they feared their math classes.. and they wondered why you were not in a major where you would make lots of money. btw> I think real mathematicians (and *maybe* physicists) are the only ones who look down on discrete math. It's pretty easy to come to the conclusion that discrete math is not as "deep" or "beautiful" as the rest of mathematics.. at least when your a grad student in mathematics. "Fascism should more appropriately be called Corporatism because it is a merger of state and corporate power." - Benito Mussolini[ Parent ]
 here's what you do (2.66 / 3) (#17) by eLuddite on Wed Feb 06, 2002 at 04:05:52 PM EST

 You apply to a trade school such as The Institute of Data Processing, Restaurant Management and Fashion Design. --- God hates human rights.[ Parent ]
 The recurring computer-majors question (4.92 / 14) (#5) by Delirium on Wed Feb 06, 2002 at 02:15:08 PM EST

 The answer is that this isn't really sorted out. Computer science should really be the "unreadable dreck" and set-theoretic proofs that you decry, rather than be a course to teach programming. Those are the only "science" part of it (more math, really, but anyway); the programming part is really just engineering (applying known results and methods to solve a particular problem). Much in the same way that Physics majors study, for example, electro-magnetic theory rather than studying how to most efficiently design a maglev train - that's an engineering problem. There is of course overlap - Physics majors may well be able to design a maglev train, and engineers should know some relevant physics, but the emphases are different. Similarly, computer scientists will likely be able to program fairly proficiently, and programmers should know at least some relevant computer science, but the two groups of people concentrate on different areas (one on theory, the other on implementation of that theory). Where the problem comes in is that a lot of "computer science" majors really don't want to be computer scientists; they want to be programmers. To them, you're correct, a great deal of computer science is fairly useless (though I'd argue some fundamental basis is still a good thing). The reason it's taught is that for a computer scientist it is necessary - you can't do any significant computer-science research without first having a rigorous understanding of computer science theory (not just its applications). The other problem then is that there isn't a good alternative for the people who want to be programmers. There should really be a "software engineering" major which focuses on applying computer knowledge to practical problems (i.e. programming) rather than on the computer science itself, but this often doesn't exist, and when it does it's usually some sort of bizarre business major that's better-suited for the manager of a group of programmers, not for a programmer. There's often "computer engineering" majors, but these seem to lean more towards EE, which may not be what an aspiring programmer is interested in. And then there are MIS and similar majors, which should theoretically be good for people who want to do things like sysadmin, except that usually they end up being far easier than computer science degrees (and thus less prestigious), so getting a computer science degree might make it easier to get a job as a sysadmin even though it's less relevant to the job.But the main point is that computer science really shouldn't be the default "if you want to work with computers, do this" major; that would be akin to having physics as the default "if your future job will involve the terms 'friction,' 'heat,' or 'energy,' do this" major.And I have the opposite problem - being interested in the math/theoretical aspects of CS myself, I'm a bit annoyed by the continual intrusion of useless things like learning the specifics of various programming languages and operating systems (implementation details that are mostly uninteresting from a theoretical perspective). A proof that a certain task-switching mechanism will never cause an indefinite wait for any processes is fundamentally important; the details of how fork() in UNIX or C++'s STL vector class behave are not.
 Nothing to add (3.33 / 3) (#36) by CaptainSuperBoy on Wed Feb 06, 2002 at 06:27:37 PM EST

 Nothing to add, just that this is the best explanation of the computer science / programming / school major thing I've read yet. I wish schools could explain the difference this well.. --jimmysquid.com - I take pictures.[ Parent ]
 the thing is though.. (5.00 / 1) (#49) by rebelcool on Wed Feb 06, 2002 at 11:43:07 PM EST

 that one of the most important pieces of software engineering - the ability to do algorithmic analysis - requires alot of math and logic notation similar to what the original poster showed. In fact I imagine that at many colleges, this is about as indepth in the 'theory' side of things they're willing to get except maybe for grad students. Your average codemonkey might be able to slide by without knowledge of how to properly analyze an algorithm, but if you want to progress to a senior designer working on non-trivial projects, you absolutely must know how to analyze an algorithm in order to decide which to choose, judge tradeoffs and accurately predict how the program will operate. And for that, there really is no substitute for college. To get the mathematical and logical knowledge and experience to do it, you really must be in a classroom and peer-oriented environment. COG. Build your own community. Free, easy, powerful. Demo site[ Parent ]
 streetlawyer summary service (plus BONUS!) (4.50 / 8) (#6) by streetlawyer on Wed Feb 06, 2002 at 02:22:51 PM EST

 "My brother is intellectually snobbish about any course which looks too 'applied'. I think that there is a moral requirement on difficult mathematics that it should be as immediately accessible and stimulating as a DieHard movie. Is there a university out there prepared to prostitute itself to the extent of giving as an 'academic' degree which doesn't require academic work?" Thanks, thanks, I don't get paid for these, just the joy of precis.and as BONUS! to you my readers, I can reveal that joy of joys, YES THERE IS a solution to both your problems. "Atlantic University", which advertises in the classified sections of all good speciality-interest periodicals will provide you with the degree of your choice for a remarkably reasonable "tuition fee". And the best thing is that they give credits for "life experience", so you won't even have to crack the spine on any more of those difficult textbooks! What's not to like? --Just because things have been nonergodic so far, doesn't mean that they'll be nonergodic forever
 Application (2.75 / 4) (#13) by Iesu II on Wed Feb 06, 2002 at 02:51:26 PM EST

 My brother is intellectually snobbish about any course which looks too 'applied'. You miss my point. I would say that, to someone who wants to actually apply computing knowledge, the effort of apprehending a bunch of set theory is simply wasted effort except in specific cases where said theory is necessary - say, in a dissertation on databases or as a low-level programmer working out use-cases. You may argue that someone uninterested in some bit of knowledge is a lazy loser, but no one can cover all knowledge and I would say that presenting such a fine-grained mathematical approach in an undergraduate curriculum is simple overspecialization. My girlfriend's a Master's candidate in Spanish literature. She doesn't know or care about bookbinding. Bookbinding is absolutely crucial to the propagation of literature. Does she suck? [ Parent ]
 well .... (2.40 / 10) (#20) by streetlawyer on Wed Feb 06, 2002 at 04:15:41 PM EST

 Does she suck?Have you asked her nicely? --Just because things have been nonergodic so far, doesn't mean that they'll be nonergodic forever[ Parent ]
 Speak the language (4.50 / 2) (#25) by X3nocide on Wed Feb 06, 2002 at 04:43:12 PM EST

 You seem to be missing something here. Design revolves around problem solving, analysis and justification of choices. If you want to design a database, you have to look long, hard, and rigorously at things. And set theory is essential to CS: working with discreet objects (i.e. members of a set) is part of chosing a design. Using it as a common language helps to not only justify our own choices to ourselves, but can enlighten others. I agree that your example may be a bit overboard (what exactly is Ti?), but then I would expect 40 years of research into the concept to be at least a bit complicated. These mathematical relationships are what make it interesting. Without them, theres a single correct answer that a simple proof of concept might itself satisfy the need for. I would rather hope Oracle includes more technology than what is widely published and researched. I caution you to not attribute too much of your own feelings to your brother. Knowing the math is just as important in design as knowing Spanish in critiqing and analysing Spanish literature. And for the record, there are many people involved with compiler design. Sun, MS, IBM. Its one of the few places where CS and the Real World really do mesh together well. The vast majority of Compter Science undergrad programs can be considered Applied Mathematics. I sense that the meaning behind "apply computing knowledge" is really "implement previously known algorithms." For that, a CS degree is overkill. Of course, that also gets uninteresting rather fast. If you feel set theory (which is the basis for basic Patterns like "Collections" and containers) is to specilized for him, perhaps you should recommend an Associates Degree. I hear they're well rounded and not too specialized. For the record, I recommend Kansas State University to your brother. I suggest that he strongly looks at individual degree programs hosted under a university's College of Engineering. If he's really interested in doing interesting things and doesn't find entry level programming classes interesting enough to complete (to get to the fun stuff) perhaps a Math major would be a good suggestion. I found I really enjoyed the Intro to CE class at KSU. pwnguin.net[ Parent ]
 Here's my experience (4.25 / 4) (#7) by quartz on Wed Feb 06, 2002 at 02:27:03 PM EST

 What would you tell your little brother to do? I can't tell you that, as I don't have a little brother. But I can tell you what I did. I said "screw college" and I taught myself what I needed in order to get a job. Got a job right then and there (not a problem during the '90s tech boom). I kept on doing "interesting stuff", learned how to program in a dozen different languages, tackled a lot of "real life" problems, until I finally realized that in fact the "real life" stuff was actually starting to bore me to tears. Real life is highly overrated, there's nothing interesting about it. Once you learn the basics, it's just stupid routine. You write the same damn code over and over again, because companies don't care about what you find interesting; they only care about their damn ERP system. Bleh. So I got tired of this whole real world thing and went to college, where the really interesting stuff is going on. Assembly, architecture, discrete maths, where the hell can you learn that in "real life"? Real life is all about .NET and shit now. Bo-ring. As you can see, the whole college experience can mean very different things depending on where you stand. To your brother I say go with whatever sounds best to you at the moment. You probably won't regret it. -- Fuck 'em if they can't take a joke, and fuck 'em even if they can.
 A Metaphore (4.00 / 6) (#10) by Hillgiant on Wed Feb 06, 2002 at 02:38:49 PM EST

 The technician knows What. The engineer knows How. The scientist knows Why. I guess it is just a matter of how [H]ard you want to be. ----- "It is impossible to say what I mean." -johnny
 And the English major ... (5.00 / 1) (#57) by Kalani on Thu Feb 07, 2002 at 01:32:49 AM EST

 ... actually knows what a metaphor is. ;) ----- "I [think] that ultimately physics will not require a mathematical statement; in the end the machinery will be revealed and the laws will turn out to be simple, like the checker board." --Richard Feynman[ Parent ]
 And the Philosophy major... (none / 0) (#63) by Hillgiant on Thu Feb 07, 2002 at 11:23:25 AM EST

 ... wonders "what is a meta for?" ----- "It is impossible to say what I mean." -johnny[ Parent ]
 CS Degree does matter (4.33 / 9) (#11) by miker2 on Wed Feb 06, 2002 at 02:38:53 PM EST

 I have a CS degree (well, almost, 3 more credits) and have been working in the field for four years and I can say that having the textbook and classroom knowledge is very beneficial to anyone who wants to be a great programmer. I have dealt with people in the workplace who have both technical (CS, EE, Particle Physics) and non-technical (Psych, English, Education) degrees and have noticed that the CS/EE people are a lot more open to other means of solving a problem whereas the non-technical-cum-technical folks tend to latch onto whatever they've gleaned from \$LATEST_HOT_TECH_BOOK to solve any problem. There are always exceptions to the rules, but in general, a CS degree will help him become a great programmer and will enable him to pick up new languages and methodologies in a snap along with giving him the mathematical background (CS is a subset of math after all) to see the other solutions to seemingly difficult problems. Just make sure that wherever he decides to go that they have a CoOperative education program (very valuable) and that there's at least two semesters of Software Engineering, both of which have served me well.
 Computer Science is Useful (4.33 / 9) (#12) by Simon Kinahan on Wed Feb 06, 2002 at 02:44:37 PM EST

 "Computer Professionals" who claim otherwise tend to work in jobs where the actual programming involved is very easy. If you want to spend you life building GUIs, writing web front-ends, implementing business rules, or slapping out atabase schemas, yes, CS is useless. If the principle appeal to computing to your brother is the results, then you're right, computer science is not for him, although he'd probably be better at it if he understood some of the subject matter. You do need to know something about software engineering, though. Unfortunately, the courses usually taught in this field are extremely poor. There are good books, though. For people who find computers fascinating in themselves, and this is a group in which I include myself, computer science is both interesting and useful. If you're going to implement tools for other people to use - operating systems, compilers, VMs, databases, mapping tools, even IDEs - you need to understand computer science. Computer science is about models of computation and communication and their interaction. As such it is really a branch of mathematics. These things don't change much over time, because they're mathematical truths, and advance with the intellectual development of man, not the churn of commercial activity. Computer science courses are not taught with the latest technology, because what is being taught is not the specifics, but the general underlying principles. People who try to write these kinds of tools without an understanding of computer science, they tend to produce C++. Simon If you disagree, post, don't moderate
 I agree mostly (3.50 / 2) (#15) by Iesu II on Wed Feb 06, 2002 at 03:08:56 PM EST

 And I especially agree with your subject, 'CS is useful'. It just seems to me that CS as a field has broadened to the point that it's no longer necessary or very possible to have a deep, holistic understanding of everything CSish to do insightful, solid academic work. I regard the text example I gave as a particularly painful example of this. I'm sure it's a great book for someone trying to write database software from scratch, but I would find coursework (say) teaching practical MySQL use from design through administration more suited to most people's needs - including CS undergrads in 'most people'. I also totally agree that comprehension is necessary to quality of work. I would just qualify that by asking, "Comprehending what?" and "Working on what?" How do we know where to set the bar? [ Parent ]
 Sounds like you got the wrong book (4.00 / 3) (#26) by Kellnerin on Wed Feb 06, 2002 at 04:51:33 PM EST

 There are many books out there that are about databases in one way or another. I'd venture you'd be happier with a book on SQL (general or specific to a particular implementation) with a chapter or two on database design. There's nothing inherently un-manly about that. For your brother, on the other hand, who knows. His problem is not the same as yours. At that age, it's easy to fixate on an idea for your future path because you've heard of it and it seems like the right one. It might not be, but it doesn't mean it's not a good starting point for exploration. Why not show him the infamous book, and see if he drops it in horror, or actually wants to read it. Better yet, (to move this discussion out of the theoretical into the practical), check out the CS programs at specific colleges he may be considering, see what their focus/requirements are, and if that sounds like something he wants to do for four years (also keeping in mind whether the programs are so rigidly structured as to leave you no opportunity to take any courses unrelated to your major -- variety is the spice, etc. etc.) Then have him check out some possibilities that he didn't think were what he wanted to do, and see if he still thinks they're not right for him. And let him decide. --mrgoat wants a top hat--[ Parent ]
 A bit of honesty (4.28 / 7) (#18) by trhurler on Wed Feb 06, 2002 at 04:12:28 PM EST

 Sort of (3.50 / 2) (#30) by Simon Kinahan on Wed Feb 06, 2002 at 05:23:35 PM EST

 I agree about the useful papers on VMs: there are damn few of them. Same goes for garbage collection, memory allocation, windowing systems and many other things I've occasionally taken an interest in. On the specifics on compilers and OSes I can't comment, except to note that the algorithms for classic OS problems used in, say, Linux, are the ones from the classic OS texts. May not be true of more commercial OSes, of course. Admittedly most of what I write on a day-to-day basis right now (middleware tools), I didn't learn at university either. However, I don't withdraw the idea that CS is actually useful. Maybe I'm overly romanticising my conception of what I learned, but if I hadn't done a CS course, I wouldn't know what an FSM is, wouldn't know how to program in a functional style, wouldn't know how to design an instruction set (although I would know how to program in one), and so on. Although I don't doubt I *could* have learned these things, I might not have done, and they have deepened my understanding of what I do, even the ones I don't use. Simon If you disagree, post, don't moderate[ Parent ]
 Fair (3.66 / 3) (#37) by trhurler on Wed Feb 06, 2002 at 06:31:59 PM EST

 except to note that the algorithms for classic OS problems used in, say, Linux, are the ones from the classic OS texts Even Linux is increasingly moving towards more complex(and better) algorithms for many things, but yes, sort of. Linus certainly had a "classic OS text" education of sorts. However, there's some question in some areas, because many times, the "classic OS text" solution is also the blatantly obvious solution, such that you can't really be sure anyone who implemented it wasn't just dreaming things up as he went. I wouldn't know what an FSM is I wouldn't know what one is called, but I wrote my first when I was seven or eight, as I recall. Dreamed it up as a way to handle a user interface. wouldn't know how to program in a functional style Agreed, but I tend towards the "who cares" camp. wouldn't know how to design an instruction set A far more practical chore than anything I learned in class:) Although I don't doubt I *could* have learned these things, I might not have done, and they have deepened my understanding of what I do, even the ones I don't use. And similarly, you would have learned things you don't know at a different school, and not learned things you did, or even with different instructors. Yes, you can learn things in school; that is obvious. CS is not a totally useless degree, and I don't want anyone mistaking me on that point. However, it is not what most programmers really need, be they black box writers to prewritten specs or designers of a whole new system, and there's nothing offered today that fills that rather glaring gap. Yes, they need some CS, but they need a lot of other stuff, and there's a lot of CS they don't need. It is not unreasonable to think that CS degrees should be like math - mainly of interest to those who want to become professors - and that there should be some other course of education through which real, actual programmers are produced - a course that includes academics as instructors, but that also includes people with actual real world experience building large software systems of various sorts, and that emphasizes programming and what I call "practical theory" more. It is a bit hard to explain this "practical theory" thing, but look at it this way: explaining relational databases in terms of set theory is not "practical theory." Explaining it in terms of tables, rows, columns, query languages, keys, foriegn keys, indices, assorted different normal forms(which themselves are explained in terms of these other concepts listed,)and so on IS practical theory. Explaining an OS scheduler in formal finite state notation is not practical theory. Explaining it informally, whether as a state machine or something else, and explaining the benefits and drawbacks of various algorithm choices in real world terms IS practical theory. There's a middleground here between pure math and hacking code, and that middleground is where we real programmers spend large amounts of time if we want to be any good. I like knowing what a mathhead means when he says "finite state machine," but I'm more than happy to use them, knowing full well their practical benefits, without giving a damn about the set of things that have been proven about them. -- 'God dammit, your posts make me hard.' --LilDebbie[ Parent ]
 Agreed (none / 0) (#62) by Simon Kinahan on Thu Feb 07, 2002 at 09:39:33 AM EST

 We do need a new kind of course. We're hardly the only profession in that situation, mind you, though it is perhaps particularly extreme in computing, because of the lack of professional institutions (not that I want them, I hasten to add). Simon Simon If you disagree, post, don't moderate[ Parent ]
 In case you're still reading this thread ... (none / 0) (#73) by jacob on Mon Feb 11, 2002 at 05:05:59 PM EST

 Boo hoo, I guess I have to learn to read (4.50 / 12) (#14) by czth on Wed Feb 06, 2002 at 03:05:00 PM EST

 Well, golly gee, who'd've thunk you'd have to actually learn theory to be good at a science? There are good reasons why relational database theory is couched in set-theoretic terminology. First of all, sets are a well known (dare I say understood?) mathematical objects. If I can describe a database in terms of sets and mappings, then I can apply a lot of interesting results from set theory to making databases more efficient. It also brings databases from the realm of the web monkey to the realm of the scientist. Mathematical vocabulary is very good at precise definitions. For example, if your database is in Bryce-Codd Normal Form (BCNF), then you'll be saved from finding out later that you have to make a critical change in seventeen different fields across thirteen tables in incompatible formats, or from having a database in an inconsistent state. I have absolutely no sympathy. You may not be looking to become (or have your brother trained as) a web monkey, but what you're looking for isn't very many rungs higher up the ladder. Don't like thinking, learning, proofs, theory? Find a good community college and learn Visual Basic. Don't blame me when neither one of you can find a job. My Databases course used a similar textbook with similar theory. Sure, it took a bit of getting used to (and I'm a Pure Math minor) but it gave an excellent foundation for dicking around with SELECT statements. But is it really necessary to present everything as a set-theoretic proof? If an expert in the subject says that it works and that it's efficient, I'll mostly believe him and I'll be content to absorb methodology and examples. I don't want or need to derive the innards of a join from a null set and a list of axioms. You want to be spoon fed (or you want your brother to be spoon fed, whatever). You want the knowledge without the work. But the best developers know how things work so instead of looking around stupidly when presented with something outside their experience, they can build something new - even if it's just new for them - extending on the principles of what they've learned. It's like the difference between Windows and Linux: with Windows if you crash you're screwed, you reboot and pray; with Linux you can (sure, not everyone does) dig right in and track the problem down to the line of code and fix it because you can get at the guts. The background is important and your knowledge needs to be a level higher than what you're doing so you can step back and look at the big picture. Yes. Abstraction. But english majors don't get drilled on memorizing etymologies Are you sure? I'm sure many English programs include study of classical languages, or many majors elect to study them anyway. And they help similarly: if you come across a new word and you know the components you have a good shot at figuring out what the word means. If you've just sat there and learned vocabulary, you haven't a clue; you're the proverbial web monkey asked to implement internationalization for an entire site that has no idea how to start because it's a five-banana problem and they're only trained to three. czth
 A steaming pile of shit, that comment is (3.71 / 7) (#19) by trhurler on Wed Feb 06, 2002 at 04:15:04 PM EST

 You numbnut bastard. The guy said he wants to organize his recipes. He's not looking to become a computer scientist, and he's not begging anyone for a job. The proper level for most people to understand relational databases at is the actual basic operations and structures of a relational database; tables, columns, rows, schemas, tablespaces, data types, interface languages, and so on. You can then use very conventional complexity theory and algorithm analysis and so on to do optimizations if you're an implementor of an RDBMS itself, and you can easily understand things like BCNF in terms of those basics even if you couldn't write code to save your life. Set theory? What a stupid idea. What an abominable waste of time. The fact that some boneheaded ivory tower math freak who probably pays someone to tie his shoes for him wrote a description in those terms does not mean that such a description is inherently better in any way than actually describing what it is and how it works. Sure, you can prove things about RDBMSes with the math, but most of us don't need or want to do so. Your talk of optimizations in terms of set theory is so incredibly stupid that I wonder if you even have the degree you're so loud about; nobody optimizes an RDBMS in terms of math, except for the usual algorithm analysis stuff, and even that is usually done informally. By the way, no, English majors do not sit around studying etymology, unless they specifically elect to do so. Not even at the fancy schools. It is a niche field, just like database explication in terms of sets;) -- 'God dammit, your posts make me hard.' --LilDebbie[ Parent ]
 Response to crap (2.33 / 3) (#27) by czth on Wed Feb 06, 2002 at 04:57:34 PM EST

 I know you are but wh^H^H^H My dear sir:^H^H^H^H Yo hurler! He'll want a job someday. He's doesn't want to be a boneheaded ivory tower math freak, that's for sure. I didn't mention my degree, just my minor. I direct you to this article for more information about verifying such claims. As I said (and streetlawyer so aptly summarized): he wants the degree without the work. Either you do the work, or you don't get the degree. Am I typing too fast for you? Back up a little, I only said that some English majors probably study classics, and that it is beneficial (I took Greek myself, found it extremely interesting). czth [ Parent ]
 He does? (3.85 / 7) (#29) by trhurler on Wed Feb 06, 2002 at 05:14:35 PM EST

 I didn't see any "I want a degree with no work" in there. What I saw was a genuine question as to whether an academic degree would provide the knowledge desired at all. The answer is "yes, if you do a bunch of extracurricular work to fill in the gaps in practical knowledge that they won't bother to teach(or more accurately, that the profs don't know either, as if they did, they'd be making the big bucks instead of working as profs,) but you'll also have to do a bunch of mostly useless crap." And I still maintain that describing a database system in terms of sets is a sign that you're useless. To show why, I'll use a different example that may make the issue clearer. A former prof at the school I attended wrote a paper describing a new algorithm for perfect minimal hashes when he was a much younger man; the paper is couched in so much needless mathematical obfuscation that so far, the algorithm has no known actual adopters except a friend of mine. Odds are the fundamental principles are simple and easily understood once you know what it is you're trying to do, but being a typical academic goofus, he just had to use matrix algebra and graph theory to describe it. I will use set terminology to explain why that's a bad idea. The set of people who can understand and implement an algorithm for perfect minimal hashing is reasonably large. The set of people who want such a thing is quite large. The set of people who can understand the math this guy used without extreme effort is of reasonable size. The set of people who belong to the first two sets I mentioned is of reasonable size. However, the set of people who belong to all of the first three sets I mentioned is so small as to be irrelevant. I despise people who blather about their superiority in computing based on mathematical knowledge. Universally, these people are either useless or else are good for reasons having little or nothing to do with mathematics; a CS degree is useful in the same way that a BMW 3 series sedan or coupe is useful; it lets you pretend you're better than everyone else without actually being better, and it has an air of credibility in this role because the BMW 3 series is actually superior at a few things - but unfortunately, almost nobody who drives one is realistic about what those things are or actually uses them in practice. -- 'God dammit, your posts make me hard.' --LilDebbie[ Parent ]
 Not a troll... (3.00 / 1) (#32) by Zapata on Wed Feb 06, 2002 at 06:00:42 PM EST

 do you have a CS degree? Your comment sparked my curiosity. "If you ain't got a camel, you ain't Shiite." [ Parent ]
 Nevermind, I found the answer (nt) (2.00 / 2) (#33) by Zapata on Wed Feb 06, 2002 at 06:04:27 PM EST

 "If you ain't got a camel, you ain't Shiite." [ Parent ]
 yeh but on the other hand (3.25 / 8) (#40) by streetlawyer on Wed Feb 06, 2002 at 08:04:29 PM EST

 given that the guy wants to organise a few recipes and decided that the best thing to do was to buy a book on SQL, he was kind of asking for it, wasn't he?What possible fucking SQL query might you be wanting to run on your recipes that would justify getting out the full apparatus of SQL? Surely nobody's *that* confused about what they want for dinner. --Just because things have been nonergodic so far, doesn't mean that they'll be nonergodic forever[ Parent ]
 Oh for God's sake (4.00 / 2) (#43) by jabber on Wed Feb 06, 2002 at 09:41:05 PM EST

 C.J. Date ties his own shoes. So do Djikstra, Knuth... Von Neumann and Turing did too. The brilliance of the description at the head of the article is that it is purely mathematical. It is clean, provable and patently unambiguous to anyone who takes the time to understand the language. Further, it is absolutely generic, so you do not carry any conceptual baggage with you as you would when dealing with a real world example. The man's brother is considering a CS program. That IS what he is in for. Few computer scientists are able to make the subject matter as accessible to the general public as Sagan and Feynmann could. Don't get all crotchety about it. Not everyone who uses a database needs to know the fundamental theory behind how they work. True. But you can bet your ass that anyone who aspires to design cars needs to understand the basic principles of internal combusion, gear ratios, aerodnamics, metallurgy, etc... If my little brother was considering doing 'interesting things' with cars, I certainly would hope he looked at Mechanical Engineering programs at good Universities before he decided to become a diesel truck mechanic. But if he couldn't get his mind around abstract physics equations... Anyway.. It all boils down to what 'interesting' means, and if the dull stuff along the way is an obstacle or a means.
 Heh (5.00 / 1) (#66) by trhurler on Thu Feb 07, 2002 at 12:33:19 PM EST

 The brilliance of the description at the head of the article is that it is purely mathematical. It is clean, provable and patently unambiguous to anyone who takes the time to understand the language. Further, it is absolutely generic, so you do not carry any conceptual baggage with you as you would when dealing with a real world example. So what you're saying is that you can understand set theory as an abstract concept, but you cannot understand abstract entities called tables, tablespaces, columns, rows, and so on? (By the way, nobody learns databases without "real world examples." I am willing to assert as fact obtained from improbability that in the history of mankind, not one person has ever really understood relational databases, even in theory, by just looking at some math.) Not everyone who uses a database needs to know the fundamental theory behind how they work. You missed my point. My point is that if you understand a database in terms of its actual abstract components, YOU DO understand the fundamental theory behind how they work. Translating into set notation is just a difference of language; it makes no change at all to the material understood. But you can bet your ass that anyone who aspires to design cars needs to understand the basic principles of internal combusion, gear ratios, aerodnamics, metallurgy, etc... So you're saying that since I've never seen internal combustion explained using college level math, I don't understand it? Hey, I've never seen copy on write virtual memory explained that way either, so I guess I have no idea how that works! Have you ever considered the possibility that you might just be a complete fucking idiot? (By the way, I'd wager that most car designers know jack shit about metallurgy, only minimal amounts about aerodynamics, and more about the existing engine selection of their employers than the principles of internal combustion. They might know something about gear ratios; you got that part right.) If my little brother was considering doing 'interesting things' with cars, I certainly would hope he looked at Mechanical Engineering programs at good Universities before he decided to become a diesel truck mechanic. If you want to do interesting things with cars, you work for or start a speedshop, restoration facility, or similar. In case you haven't noticed, production models are not "interesting" very often. And to work for or run those kinds of businesses, what you need is extensive expertise that you can only get by experience. A mechanical engineering degree may help you get a job, but it won't be useful in the work you'd be doing. -- 'God dammit, your posts make me hard.' --LilDebbie[ Parent ]
 "Complete fucking idiot" (none / 0) (#71) by jabber on Fri Feb 08, 2002 at 09:15:14 AM EST

 Nicely dodged point and shifted context. Add a point to the number of sigs you're quoted in.
 Whatever (4.50 / 2) (#44) by tjb on Wed Feb 06, 2002 at 10:14:00 PM EST

 Look, I'm a DSP guy, I deal with a lot of formailized math, and I can tell you, and 90% of it is bunk that can be better explained in an algorithmic manner. For example, if I'm designing a second-order phase-locking loop filter and I need to choose coefficients useful to my circumstances, I can either: 1) look to the formal definition for the filter and try to optimize the filter by spending days writing a complicated simulator that may take a very long time to run, even when its finished, or 2) Recognize, via common sense (just think about what will happen), that my 2nd order coef scales the bandwidth and my first order pulls in the phase but may cause overshoot proportional to bandwidth, and just pick some coeffs in a reasonable range for what I want, see if they work, and adjust as necessary. Number 2 may sound decidedly non-elegant, but I can (and have) done it in an afternoon. Number 1 was attempted by one of the PhD-guys I work with. It took him three weeks, its way too idealized to be useful, and it takes a half-hour to run through just a couple symbols. Effective programmers look for the best way to do things, and time is generally a constraint that they have to deal with. If you're too wrapped up in the theory, the customer will bolt to someone who can actually deliver product (not saying that having few theory guys around isn't useful, but they aren't exactly a profit center). To you, I guess, I'd just be another college-dropout webmonkey that hates proofs. Tim [ Parent ]
 Stealth analysis (none / 0) (#56) by czth on Thu Feb 07, 2002 at 12:36:36 AM EST

 For example, if I'm designing a second-order phase-locking loop filter and I need to choose coefficients useful to my circumstances, I can either: 1) look to the formal definition for the filter and try to optimize the filter by spending days writing a complicated simulator that may take a very long time to run, even when its finished, or 2) Recognize, via common sense (just think about what will happen), that my 2nd order coef scales the bandwidth and my first order pulls in the phase but may cause overshoot proportional to bandwidth, and just pick some coeffs in a reasonable range for what I want, see if they work, and adjust as necessary. What's common sense, but a transparent application of knowledge? (2) isn't nearly so ignorant as you pretend. Effective programmers look for the best way to do things Sure. But knowing the theory isn't going to hurt, and it's generally very useful. That doesn't mean you have to derive everything from first principles all the time. czth [ Parent ]
 CS degree prevents obsolence. (4.50 / 12) (#16) by rebelcool on Wed Feb 06, 2002 at 03:26:36 PM EST

 10 years ago, even 5 years ago, things were vastly different in all aspects of computing. Except in one area. Fundamentals. The fundamentals are the basic mathematics and logic which govern computing. You can build a computer on paper using just math and logic. This is what Turing and all great computer scientists did. And as much as I hate math and logic syntax too, you simply have to learn to deal with it. By learning the fundamentals, your skills will NEVER be obsolete. You can build a new system, learn a new language well into your old age. The same old math and logic equations will be valid 50 years from now. Just the way they're represented and the speed they're computed may change. Someone who goes to a trade school and learns just java, or just SQL and all that, will be obsolete in a few years. Everyone of those webmonkeys you speak of, are already becoming obsolete. You cannot become a decent computer scientist, or even a decent software engineer without knowing how the most basic pieces of the system work. And the most basic piece of a computer is the equations which govern it. COG. Build your own community. Free, easy, powerful. Demo site
 "Interesting Things" (3.00 / 2) (#23) by der on Wed Feb 06, 2002 at 04:31:06 PM EST

 As far as I can tell, "interesting things" are getting fewer and farther between in "The Real World". Programming in general seems to be moving more and more towards 'webmonkeydom'. .NET, GUI Builders, Web this and Active that, blah blah blah. None of the fun stuff. Unless you consider drawing buttons in VB fun. This is why I just applied to several universities for Computer Science next year; I know if I just 'get a job', it's probably going to be something that I really hate (if I get a job at all). Let's face it, the chances of you 'pulling a John Carmack' are pretty damn slim nowadays. At least if I end up in one of those jobs I hate I'll have had the experience of all the non-webmonkey-programming I did in University.
 What it means (4.60 / 5) (#31) by freddie on Wed Feb 06, 2002 at 05:50:54 PM EST

 Let H = (H1,...,Hn) be a sequence of finite sets of attributes. An H-database format is a database format S = {S1,...,Sn}, where Si = (Ti, Hi) for 1 <= i <= n. The set of H-database instances is the set DB(H), where DB(H) = UNION{DB(S) | S is an H-database format}. Let t be a tuple of the relation rho of a table tau = (T, H, rho). Using the fact that t is a mapping defined on H, we can talk about the restriction of t to a subset of H. Here's a translation to more common terms one might use when talking about databases in every day language: Hj normally might be referred to as the headers in a database table. Tj would be the values for a particular row. DB(S) would be an entire table in a normal database DB(H) refers to an entire instance of a database such as Oracle or MySQL t is referring to the set of foreign keys in the database DB(H) As you can see, what they're talking about is a set of extraordinarily simple concepts. But it's like it's written in a different language. This kind of set math is relatively new (invented in the 60s), and although more respected, it does the same thing for mathematicians as the 31337 language does for hackers; it allows mathematicians to separate themselves from the crowd and impress the young and innocent with their mumbo jumbo. Imagination is more important than knowledge. -- Albert Einstein
 Qualifier (none / 0) (#47) by greenrd on Wed Feb 06, 2002 at 11:35:42 PM EST

 I have a hunch most "real" mathematicians don't spend much time on the kind of set theory involved in relational databases, because that's all comparatively simple. In higher mathematics, like in serious computing and engineering, jargon isn't only about making yourself sound smart - it's also about speaking concisely without having to say things like "you know, the round thing that's attached to the green wobbly thing" all the time. However, set theory and databases isn't a good example of useful jargon, as you point out. All that set theory jargon in relational databases texts is just a way to formalise something that, for undergraduate purposes at least, doesn't really benefit from being formalised. (Maybe it helps in certain theoretical contexts, but as an OO databases man I wouldn't know about that.) It's almost like teaching addition by starting with group theory and then introducing "the integers under addition" as an example of a group. (I just know someone is going to tell me actually, yes, that has been tried. ;-) So the relational databases theorists might be making themselves look silly by dressing up essentially simple concepts in fancy clothing - but don't tar all mathematicians with the same brush! Higher math really is hard! "Capitalism is the absurd belief that the worst of men, for the worst of reasons, will somehow work for the benefit of us all." -- John Maynard Keynes[ Parent ]
 CS a waste of time?!?! (4.50 / 4) (#34) by erp6502 on Wed Feb 06, 2002 at 06:16:16 PM EST

 I'll second that (2.33 / 3) (#39) by core10k on Wed Feb 06, 2002 at 06:41:07 PM EST

 Computer Science is a terrible undergraduate major. What was I thinking? There's probably few worse majors than Comp Sci. [ Parent ]
 semi-OT: Quote (none / 0) (#41) by fluffy grue on Wed Feb 06, 2002 at 08:28:53 PM EST

 there is no field of endeavour with "science" in its name that is, in fact, a science (think "food science"). Dunno if you intended this, but that's a very good paraphrase of a quote from Dr. Frank Harary ("rhymes with Safari") here at cs.nmsu. I've yet to see the quote directly, but I see it paraphrased quite often, so at least I'm familiar with the content. :) In any case, he's been doing CS since well before the expression "CS" came about (when he started, he was just doing a specific aspect of graph and set theory), and even though he's something like 80 now, he's still actively researching. Cool guy. --"Is not a quine" is not a quine.I have a master's degree in science![ Hug Your Trikuare ] [ Parent ]
 Possibilities (3.66 / 3) (#35) by dennis on Wed Feb 06, 2002 at 06:23:05 PM EST

 But is it really necessary to present everything as a set-theoretic proof?Not in the least. Go to your local Borders and pick up a nice intro book on the relational database of your choice. Then get something like Celko's SQL for Smarties.I say this to forestall nattering about whether I should be meddling in CS wizardryBetween the fact that you've learned all that stuff on your own, and that a large portion of the great programmers have been musically inclined, I'd guess you're pretty damn well qualified.I don't have much in the way of college advice. All I'd say is, if your brother wants to get into technical work, he needs a way to prove he has that kind of smarts. I majored in anthropology, and breaking into the programming field later was rather difficult. I think it would have been a lot easier if I'd had a degree in math, physics, or any kind of engineering. (I did take a fair amount of math and some physics, but not enough for a minor.)But a degree isn't the only way. I pulled it off by doing some volunteer programming work, then a freelance job. The dot-com boom was a big help, though. And I do sometimes wish I had more of a formal education in the field, though more for home projects than work.Another possible resume-builder might be to figure out something you'd like to program, dive in and learn what you need as you go, and release it opensource. I don't know how much that impresses employers...depends on the project maybe.There have to be some interesting college possibilities, though. Maybe someplace with a good robotics program...
 Tell him to get the CS degree (4.40 / 5) (#38) by epepke on Wed Feb 06, 2002 at 06:40:38 PM EST

 Academia (3.00 / 2) (#42) by blues is dead on Wed Feb 06, 2002 at 09:22:47 PM EST

 Why are you reading that database book? It's not Academia, it's a badly written book. I can counter with an unreadable O'Reilly book. In fact, half of them are likely pretty bad. Get a different book. Get C.J. Date's Intro to Database Systems. Or Elmasri/Navathe's book, but I like Date's much better. How do you know you've got a good teacher? Seek out the best books. Colleges are just as incompetent as companies; some companies are intelligent, and the others aren't. So don't be overly trusting. There are books out there written with humor, but are also uncompromising with the concepts. Find them, and if it's not easy, then realize that finding signal is never easy. But signal exists. 95% of people don't search for the best. Hope you make it into the 5%.
 Why does he want to (none / 0) (#45) by PlanetJIM on Wed Feb 06, 2002 at 11:01:43 PM EST

 As an academic myself I get the impression that CS degrees are less and less the track of the professional coder and computer enthusiast that wants to work in computers and more the track for the mathemetician type that wants to go on to become a researcher/analyst. I mean, if you want to just learn programming and have some credential to prove your worth (such as it is), there's plenty of 2-year programs that'll get you on your feet and into an entry level position where you can really make your career. Let's face it; most disciplines have a vocational and a research track. CS is a research track. The same sort of distinction exists in linguistics (something I have a bit more first-hand experience in). Nobody smart gets a linguistics degree to go teach English to Chinese businessmen. 4 years of syntax and pragmatics won't prepare you in the least to do that kind of work because that's not what it's for. Linguists do research on language, so they need to spend their 4 years getting training in what are understood to be the essential principles on which a language is founded. People that teach learn the methodology and the practices to go get work done in the "Real World." It's not the same work, but it's part of a similar discipline. Same way with CS, I think. I'd ask your brother whether he wants to be a geek or Dr. Geek. Dr. Geek worries about the math because that's his job. He learns about saxophone keys because he wants to build a better saxophone, not use the one that's in front of him. Of course, if he can answer this question at 17 years old I'd say he's probably just a liar. Does anybody finish college the way they started it anymore?
 eh.. (none / 0) (#48) by rebelcool on Wed Feb 06, 2002 at 11:35:48 PM EST

 I think for things like algorithmic analysis, which you need to be able to do if you want to get past bitch-work coding, you need a degree. It's one of those things that requires more than a book to learn. It requires learning fundamentals of logic (usually taught by philosophy faculty) and some advanced math. Those are the kind of topics your average geek can't simply pick up a book and figure out on their own. COG. Build your own community. Free, easy, powerful. Demo site[ Parent ]
 Algorithmic analysis (none / 0) (#52) by greenrd on Wed Feb 06, 2002 at 11:48:46 PM EST

 Really? We only did the very basics, such as "What does O(N^2) mean, and how can you tell when code is O(N^2)?" Certainly you could get 100% in the final exams without having studied logic or any math beyond highschool level. Can anyone give me a concrete example of where in the non-academic world you'd need to do algorithmic analysis for which you'd need to have a good grounding in logic and advanced math? In terms of space and time limits, I would have thought that a lot of the time you're going to be interested in t(N) where N varies in some fixed range, which you can estimate - or in some cases actually measure - without doing any really difficult analysis. (Sure, you need to be aware of disastrous worst cases, I accept that.) "Capitalism is the absurd belief that the worst of men, for the worst of reasons, will somehow work for the benefit of us all." -- John Maynard Keynes[ Parent ]
 precision analysis (none / 0) (#55) by rebelcool on Thu Feb 07, 2002 at 12:16:41 AM EST

 some applications require more than the rather ham-fisted approach (like lumping a N^3 * N^2 * N + 45.2 into just N^3). Knowing some calculus will be of definate benefit there when comparing two algorithms (figuring the area between the curves). Real-time medical and safety applications are where you run into these things. And maybe wherever you got your big-O schooling didnt require you to prove (using logic notation, of course) the basis behind the big-O, little-O, omega and all the others, but some unis such as mine do like you to know that :) COG. Build your own community. Free, easy, powerful. Demo site[ Parent ]
 motivation + books + mentor > degree (5.00 / 1) (#46) by HagakureGuy on Wed Feb 06, 2002 at 11:27:14 PM EST

 Based on my personal experience, I am usually more impressed with software produced by a motivated amateur than a recent college graduate. As someone who has done technical interviews and been a team lead, I can't count the number of recent graduates who have not yet distinguished the difference between a class assignment and a real-world application. They don't exactly realize that they don't get partial credit from clients. Of course, being self-taught requires a lot more commitment. For myself (a non-degreed person), the best thing that happened to me when I first started programming was getting a sub-contracting job from a very experienced and talented programmer. He taught me the practicality of naming conventions, structured code, real-world performance trade-offs, and so on. For us self-taught programmers, I also suggest a LOT of extra reading (a good idea for anyone). Not just language tutorials, but books on project management, testing, design, etc. Having said that, it is probably easier, in the current economy, for a degree-holder to find a job. Since his true passion isn't computers, he may be better off getting a degree in something he is truly interested in. He can certainly take some computer classes that interest him while he is getting his degree.
 but.. (none / 0) (#51) by rebelcool on Wed Feb 06, 2002 at 11:45:11 PM EST

 can you determine if your software is processing data in O(N), O(log(N)) or O(N^2) time? COG. Build your own community. Free, easy, powerful. Demo site[ Parent ]
 Yes (none / 0) (#61) by HagakureGuy on Thu Feb 07, 2002 at 09:30:15 AM EST

 Yes. As a matter of fact, I was the "go to guy" at my last job when people wondered why their SQL queries took 2 minutes to execute. However, that is probably because I come from the days where we used to write our own sort routines (or crack open the algorithm books to get a good one).I wonder (and this is a serious question, not a flame) how often people use any sort of analysis like this while coding. I rarely see anyone do it. Maybe DBAs occasionally, but even then, I think most of them just "know" how to join tables, when to do sub-queries, etc. Maybe the people writing OSs and the code for router switches actually do this type of analysis before they code, but I don't see it being done on most client/server or web apps (except for the occasional middle-tier objects). [ Parent ]
 Do a degree (none / 0) (#50) by milksop on Wed Feb 06, 2002 at 11:45:01 PM EST

 For sure. Programming is a technical skill that you should learn as you did. By yourself, and as necessary. It's actually typing words and learning syntax (and frankly, that's the boring dreck after not-very-long). CS is the study of computer-related problems. If you're interested in how computers work, then have at a CS degree. Otherwise, pick a different degree in a topic that's interesting. Cognitive Psychology, Physics, and MechEng I wish I could have taken more of. To use a computer (by programming) in any of those domains requires domain-knowledge, not CS knowledge. To solve CS problems, you should take a CS degree. To solve MechEng problems you should take a MechEng degree. In either case, doing interesting things in the "Real World" on computers in either of those fields is something that either could do, and neither degree has any impetus to teach you programming. I think the confusion appears because there's an unfortunately low number of people outside of CS who do any programming. I do know a few who are very good at it though, and really aren't CS-y. (And for the record, a CS degree is useful if you want to understand computers. I have used multivariate calculus, have been paid to design+implement a compiler, and though I've never modelled an application as an FSM before coding, anyone who's done any programming has probably written an irritating number of FSMs.) -- i make games.
 Computer Science is Science (5.00 / 1) (#53) by eann on Wed Feb 06, 2002 at 11:49:49 PM EST

 That means there's lots of theory, and math, and other similar stuff that only relates tangentially to the "real world". I can say that. I have a CS degree. You've encountered exactly the same issue in your relational database example. Exactly. The book you got is about theory, not about how to pick what goes into which tables. CS, as an academic discipline, exists to perpetuate itself as an academic discipline. CS is to programming what the study of Literature is to writing. You can't do CS without some programming, and you can't do (effective) programming without some CS, but the two are not the same thing. Except that job postings want "CS degree or equivalent experience". Really, they're looking for the Bachelor's degree itself (demonstrating reliability and commitment and all that rot) and some indication of formal training in how to write programs that work. If your brother's not afraid of moving away from where he lives now (whereëver that may be), there are some possibilities. I've heard of Computing Software and Systems at the Bothell campus of the University of Washington. Drexel's College of Information Science and Technology is interesting; in fact, I'm considering the Ph.D. program there myself. I was looking at some school recently that has a program in "informatics", but I don't remember where. In general, look for phrases like "software engineering" or "information science". You'll find some real duds that way, but you'll also find some cutting-edge programs that give students the theory and background they need to be focused on practical applications of programming. Good luck with the db stuff, too. I learned from someone who already knew what he was doing. The basic idea with relational databases is to repeat as little info as possible. I'm sure there are resources out there, but the best way to learn is by doing. Grab a copy of MySQL or something similar and play. Our scientific power has outrun our spiritual power. We have guided missiles and misguided men. —MLK \$email =~ s/0/o/; # The K5 cabal is out to get you.
 What exactly is wrong with "WebMonkeys"? (4.00 / 1) (#54) by cymen on Wed Feb 06, 2002 at 11:52:01 PM EST

 The whole geek derision towards "WebMonkeys" is growing rather long in tooth. Obviously there are a number of people out there without the technical knowledge to do a lot of work but there are other people. Take a look at Zeldman (zeldman.com), Dave Winer* (scripting.com), Licoln Stein, Philip Greenspun, etc. So why the dismissal of an important category without any justification besides pointing to webmonkey? You don't even pretend to argue the point. How do you expect a response? Obviously there are people between both extremes and I doubt these people are going to let preconceived notions of the web stand in their way. * yeah, that might just get a strong response but no matter what you think of Winer he does some interesting work
 Webmonkey (none / 0) (#58) by enterfornone on Thu Feb 07, 2002 at 01:40:23 AM EST

 Follow the Webmonkey link that was given, then compare to the people you have listed. Big difference I think. There are lots of talented web developers out there, but there are also a lot of people producing ugly unusable flash pages. And a lot of the web design education out there seems to teach more of the latter and less of the former. -- efn 26/m/syd Will sponsor new accounts for porn.[ Parent ]
 Why studying computer science shuold be mandatory. (5.00 / 1) (#59) by katie on Thu Feb 07, 2002 at 06:30:43 AM EST

 Should it? (5.00 / 1) (#65) by blues is dead on Thu Feb 07, 2002 at 12:18:14 PM EST

 There are a lot of atrocious programmers from CS. When they learned computability, they had no context; it was an intellectual exercise far removed from the situations of Turning and von Neumann. In practice, intelligence counts far more than the degree. Think of knowledge as a graph. Anyone of intelligence will add new nodes, and traverse any node as if it were the one they started out in. Basically what that means is one should be a very well-rounded individual. You picture the ideal of CS, while contrasting it with the most dystopic view of the Industry. [ Parent ]
 It's articles like this that make me want to ... (none / 0) (#60) by gauze on Thu Feb 07, 2002 at 08:02:08 AM EST

 throw myself under a truck. I mean I know I don't know ANYTHING in this field (at least I realize it). I have the stereotypical Community College CS degree: almost no theory, some "current"[1] skills. Before yelling at me for "what do you expect go to a normal college if you want a real education" I didn't even start 'College' until I was 31, I'm not sure my brain can handle stuff like the set theory example above plus 13 more credits of other stuff. I had no problem staying on the Dean's List in CC but suspect 16 credits of stuff like the stuff above would ruin me. (Not like I can afford to take 4 years out of work anyway) Oh and I can't find a job, what a suprise. I'm going back to working in a factory[2] in a couple weeks. Anyway if your goddamn brother can't handle a real CS program because it's too esoteric and academic, tell him to work in a factory for a few years with me and then decide. I tried to break away from the factory but I'm a born loser apparently. [1] I actually skipped VB and Java for COBOL and C++, I dunno which combo is worse ;) [2] If anyone wants to hire a desperate web-monkey[3] for minimum wage (yes, \$6.15 an hour or whatever it is now) I'm game :-P [3] I actually didn't take any web related courses, just trying to be topical. There's nothing wrong with a PC that a little UNIX won't cure.
 The first step ... (none / 0) (#70) by Kalani on Fri Feb 08, 2002 at 12:37:52 AM EST

 ... is to stop beating yourself up. Nobody ever learned anything by insisting that they were incapable the whole time. Have a little bit of patience and try to accumulate a lot of different sources to learn a particular subject (that way it'll be easier to filter out the poorly written texts). Set theory is based on a set (ha ha) of simple principles, and if you study it you'll probably be amazed at how intuitive it is (well, mostly). The study of mathematics is a very human activity, and it underlies any field that you get into. You'll find that if you already have an intimate understanding of some quantitative concept, the only difficulty you'll have in understanding the mathematics of it will be in picking up the notation (no more difficult than learning a new programming language once you've been programming for a fair amount of time). Some people think that they should be able to just look at some complex mathematical expression and immediately understand it. Firstly, that's ridiculous if you aren't even familiar with the notation. Secondly, equations have context. If you understand the problem being analyzed, the equation is obvious (in fact, the more you think mathematically, the more you'll find yourself generating equations in your head while you think about a real-world problem). Most importantly (and I repeat myself because it's so important), have patience. Reading a math book is not like reading a novel or a technical book. You might spend a day or two on a chapter in a programming book, but you might spend months on a single chapter in a math book. In fact, a famous mathematician (I think it might have been Boole but I can't remember) once said that he bought math books because they lasted longer than any other kinds of books. There is no shame in having to mull over a problem. Very few people solve anything on their first try, and none do so consistently. Don't worry about your age and making it a race either. You don't have to meet up with Newton or Gauss or Archimedes when you die, and to deny yourself the enjoyment of mathematical insight just because you might not ever reach the "summit" is a tragedy. ----- "I [think] that ultimately physics will not require a mathematical statement; in the end the machinery will be revealed and the laws will turn out to be simple, like the checker board." --Richard Feynman[ Parent ]
 "Unreadable Dreck"? Hardly! (5.00 / 1) (#67) by phliar on Thu Feb 07, 2002 at 03:10:37 PM EST

 Boundaries (none / 0) (#68) by jblaine on Thu Feb 07, 2002 at 06:12:14 PM EST

 Really depends on what he wants (none / 0) (#69) by bruce on Thu Feb 07, 2002 at 08:26:48 PM EST

 ...not what you want. It's hard to become really good at something unless you're intrinsically interested in it; if your brother tries CS and finds out it's not his bag, he can try something else; either way, more power to him. Really, that's what freshman year is for. I want to repeat a lot of what people have said. If you just want to organize your recipies, you picked up the wrong book. The theoretical principles you learn in CS are the one thing that won't become obsolete. Math is generally useful, and you should learn as much as you can stand (but not more). I went to school in physics, never got a degree, and have worked in computers ever since. The math I learned in school is not necessarily useful all the time, but there are some things I do that would be hard-to-impossible without it. E.g., computer graphics is easier for me than it might be for most CS majors, because I've had analysis and linear algebra ground into my soul. The most valuable thing I learned in school was how to learn. If I need to know about some obscure subfield, I feel confident that I can go to the library, find a stack of books on the subject, and grok it on my own. That's something independent of any major, so in the end you really just need to find a subject you're interested in. If your brother likes CS, he should try it out.
 let hi m make the decision (none / 0) (#72) by sisyphus on Fri Feb 08, 2002 at 05:30:17 PM EST

 I think everyone here has thoughtfully laid out their thoughts, but really let him make his own decision, because if he doesn't like it, he will always blame you, But personally i don't think CS can claim to be "interesting", unless you work the Linus Torvalds angle that you can "change" the (computer) world, be adored by the masses and hold a job that pays well, however you need an obsession with detail, otherwise he should do business studies and do a steve jobs (thanks 'woz, I'll take the credit sort of thing). ---- The gods had condemned Sisyphus to ceaselessly rolling a rock to the top of a mountain, whence the stone would fall back of its own weight. They had thought with some reason that there is no more dreadful punishment than futile and hopeless labor.
 Comment from the brother (none / 0) (#74) by nakedpretzel on Tue Feb 12, 2002 at 12:14:23 PM EST

 As I have had more time to think of how I want to spend my future years of education and life. I don't know if a CS degree is what I desire. I want to take programming classes, but I don't if I want my occupation to be all programming. Programming may be a large part of my future job which is fine, but I also want to be involved in the electronic and mechanical side of what I am doing. So maybe a EE, ME, or CE degree would be better? The purpose of my response is to ask for some information. Links to info about these majors, recommedations of colleges that are known for thier engineering department, or anything that would aid me in my decision making. I know I am young, and I will most likely change my major more than once in college, but at this point in my life I think that computer/electronic engineering and some programming is what I would like to learn about. I thank everyone for the responses and time. And a big thanks to my brother. \\nekked
 Some information (none / 0) (#75) by jacob on Tue Feb 12, 2002 at 12:54:44 PM EST

 A warning: whenever somebody says, 'So-and-so university is the best,' don't trust them. 99 times out of 100, they're saying that because it's the university they attended. Sure, they think it's the best, but then, they didn't go to all the other schools in the world so they don't really have a basis for comparison. And even if they did, how do you know your experience will be the same as theirs was? That said, Rice University is the best. It has a good, theoretical/practical computer science program that goes all the way from electrical circuits to computability theory with a decent-sized emphasis on designing working programs. It focuses on teaching you the principles of building working software; not how to program in today's hot language, and not just a bunch of inapplicable theorizing either. I can't speak from experience about Rice's EE program, as I didn't take EE classes, but I hear it is very good as well. I do know that ELEC 201, the first class you're likely to take, is a very fun engineering class where you build an automated robot from scratch using lego blocks and various electronic components. At the end of the semester, it competes in a contest against the robots your classmates built. Anyway, I think Rice is a great school if you're interested in engineering. You ought to take a look. -- "it's not rocket science" right right insofar as rocket science is boring --Iced_Up[ Parent ]
 My Brother Wants a CS Degree | 75 comments (72 topical, 3 editorial, 0 hidden)
 Display: Threaded Minimal Nested Flat Flat Unthreaded Sort: Unrated, then Highest Highest Rated First Lowest Rated First Ignore Ratings Newest First Oldest First