Kuro5hin.org: technology and culture, from the trenches
create account | help/FAQ | contact | links | search | IRC | site news
[ Everything | Diaries | Technology | Science | Culture | Politics | Media | News | Internet | Op-Ed | Fiction | Meta | MLP ]
We need your support: buy an ad | premium membership

[P]
The Workplace and Higher Education Degrees

By cloudnine in Technology
Wed Nov 29, 2000 at 12:37:48 PM EST
Tags: Culture (all tags)
Culture

For years and years, our high school teachers, parents, and sometimes our peers, pressured us into getting that coveted 'college degree'. 'Go to college,' they cooed, 'because thats what the big companies want to see!' After college, when I got a job as a web developer, I found that two of my co-workers (hired at about the same time as me), didn't have degrees. Not only that, but they were (and are still) spectacular perl programmers. So in light of this, did your CS degree (or lack thereof) have a profound impact on your career in technology?


ADVERTISEMENT
Sponsor: rusty
This space intentionally left blank
...because it's waiting for your ad. So why are you still reading this? Come on, get going. Read the story, and then get an ad. Alright stop it. I'm not going to say anything else. Now you're just being silly. STOP LOOKING AT ME! I'm done!
comments (24)
active | buy ad
ADVERTISEMENT
After 4 years of school, I graduated with a music major and a computer science minor, and I landed a job as a web developer in a small company.

That's where I learned that getting an education in computer science and the challenge of real world programming were very different creatures. The level of thought required for real world programming is so much higher (and very different) than that of writing factorial recursion programs and binary tree 'animal guessing games'.

Now granted, these incidental projects did lay a good foundation for my eventual career as a perl programmer, however, i wonder if my programming experience in college could have been more robust. The CS department at my school tended to stress the 'mathy' portion of computer science, and paid little heed to the practical. So my second question is: did your CS degree (or lack thereof) have a profound effect on your real world programming skills?

Sponsors

Voxel dot net
o Managed Hosting
o VoxCAST Content Delivery
o Raw Infrastructure

Login

Related Links
o Also by cloudnine


Display: Sort:
The Workplace and Higher Education Degrees | 79 comments (66 topical, 13 editorial, 0 hidden)
Computer Science != Programming (4.08 / 12) (#2)
by Delirium on Tue Nov 28, 2000 at 10:13:06 PM EST

The CS department at my school tended to stress the 'mathy' portion of computer science, and paid little heed to the practical.

I see that as the way things should be. A college CS program should stress the theoretical aspects of computer science - algorithms and their efficiencies, different ways of modeling situations and representing data, artificial intelligence theory, etc. These often have practical applications as well, but purely practical things such as "how do I formulate SQL queries" or "how do I admin a Linux box" you should be able to figure out on your own from reading manuals and examples. They're not the subject matter I'd consider appropriate for a college course.

That said, if that's all you want/need to know, fine - don't go to college. Get some sort of certification or a community college degree to prove your qualifications in practical computer matters, or just amass some experience (as your non-degree-holding amazing-perl-coder co-workers presumably have done). A full four-year Computer Science degree should, IMHO, continue to provide a thorough background in computer science, not just how to use computers. And it does come in handy in many practical matters - if you ever find yourself trying to design a programming language, decide between garbage collection schemes, or a number of other things, the theoretical stuff will turn out to be quite useful.

Amen! What he wants is something more like BIS. (4.00 / 4) (#8)
by Dast on Tue Nov 28, 2000 at 10:58:17 PM EST

Very well put!

I would recommend a CS degree to someone who was either interested in theoretical computer science (and will probably go to grad school) or someone who can pick up the practical knowledge by themselves (and wants to be familiar with the theory or wants to "prove themselves" by getting a respectable degree). Either way, you probably aren't going to be taught how to program, how to write web pages, or how to install an operating system getting a CS degree.

If *all* you want is the practical knowledge or you can't get it on your own, you probably want something closer to a BIS degree at my school (Business Info. Systems). You'll learn how to code in VB x.0, how to maintain an oracle db, how to slap together a web page, etc. This type of stuff is *not* computer science. Don't get a CS degree if this is what you want.

[ Parent ]
Ambivalence, noun: (4.22 / 9) (#4)
by aphrael on Tue Nov 28, 2000 at 10:20:21 PM EST

I was kicked out of my college's CS program for failure to do well in math. (This is a historic problem for me; I gasp concepts easily but am too fucking lazy to do the homework, and since math is most easily absorbed by drill, and most classes depend on homework heavily, i've always had problems getting along in such classes). Part of the result of this is that most advanced programming classes I never got to take.

Has this harmed me professionally? Hard to say. I'm able to read most code and figure out what it's doing, although I usually won't reach the conclusion "he's using a balanced red-black tree" and i'm bad at recognizing patterns (model-view-controller, etc) until i've looked at code for a long time. On the other hand, i'm good at simply jumping in and figuring out how things work, and how things don't work, without understanding the theoretical why, and i've built some neat data structures for efficiency.

Still, I feel like i'm missing something: books like Knuth's are almost impenetrable to me, and that makes me question my own abilities as a programmer and an analyst. I want to go back and get a degree someday, to learn whatever it is I didn't learn the first time around --- but I also think if I stick around I may get to the point where i'm learning details only. *shrug*



I agree. (3.00 / 1) (#10)
by pb on Tue Nov 28, 2000 at 11:39:16 PM EST

I'm in the same boat; I have more problems with how the material is presented than I do with the actual material. Also, I do much better at the low-level, intuitive coding, and I can't stand the generated, contrived, huge APIs and ridiculous practices found in Java; I'm just learning it, but it seems like a sick exercise in B&D Programming. Of course, the Java people probably say the same thing about C programming, but they just don't get it. :)

I'd love to get a copy of the Knuth books, I need to work on accumulating a decent library. I have the C book, and Bach's UNIX book, but there are quite a few more books I'd love to have. I wish more of the classics got covered for a college-level Comp. Sci. education, but alas they find other things to waste my time with, and I'm not going to sell my soul to them to attempt to do in Grad School what I could be doing in an actual job...

Hopefully I'll get my degree, but I wish that had something to do with my merit as a programmer. That's all I've really wanted to do for a living, for a long time, and I hoped that college would accomodate that more than it has. Silly me, expecting to learn so many things that would be useful to me at an institute of higher learning; I mean, I'm only paying thousands of dollars, all the time...
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
Java vs. C, apples to oranges (none / 0) (#15)
by Carnage4Life on Wed Nov 29, 2000 at 12:28:00 AM EST

Also, I do much better at the low-level, intuitive coding, and I can't stand the generated, contrived, huge APIs and ridiculous practices found in Java;

As opposed to the wonderful paractices in ANSI C and/or POSIX.
    Global variables, which lead to non-thread safe code.
    Memory corruption leading to non-deterministic errors that never show up in the same place twice. E.g. writing to my_array[array_size + 1] is likely to cause different errors at different times on the same machine.
    Macros, which are to be avoided like the devil. (Kernighan of K & R fame also said this).
    No exception handling mechanism.
    No string type.
    No standard data structures/collections.


Despite all the above failings C is great as what it was originally designed for (i.e. a portable assembly language). It has just enough abstraction as little overhead as possible that is needed in applications that require performance by any means necessary (e.g. Graphics and Operating systems)

Java was designed to solve a different class of problems from C and it is successful in its target area as well (the proliferation of EJB, servlet and JSP apps is staggering). Comparing Java to C is like comparing apples to oranges, it makes little sense and shows that you may not have a complete grasp of what they were originally designed for.



[ Parent ]
Pardon my deranged ranting; it isn't a Java day... (none / 0) (#17)
by pb on Wed Nov 29, 2000 at 12:57:38 AM EST

You can *have* global variables in C, but I wouldn't call it a good practice; just because it's there doesn't mean you have to use it. In java, you'd make all your variables public and stick them at the top of the class, and do as much as possible in main()... But I like my variables in C a lot better than your Java "public, protected, private, and friendly". Actually, haven't we had this discussion before? :)

Just don't write past the bounds of your array; it's easy to do, and generally expected. Macros are excellent, just write them correctly. I'd kill for even some #define's in Java. C has exception handling, but you don't want to use it; just use the error handling that's there by default. C has a string type; it's called 'char *'. It also has structs and pointers. If you want more than that, well, there are libraries, but it's really not hard.

On the other hand, I wrote a GUI Java program today that averages nine numbers. We were taught to make all nine numbers separate variables in a separate class, and give them all get and set methods. Then we use the GUI tool to associate them to the horrid GUI Widget code with the blue connections. The green connections are for methods! Then... help, HELP! I thought it was LOGO! Where's my TURTLE!

Anyhow, it was a horrible experience, and it produced a semi-working, bloated applet, and some truly frightful code. And that's the way they wanted us to do it--the *good* programming practices. Never mind that all those variables were public anyhow, and when I tried to make some things protected in the first place, it broke my app and made it impossible to diagnose... Never mind that the generated code was impossible to hand-edit.

No, I would sooner write a GUI system in C than be forced to use a GUI-building tool in Java again. I bet it'd be smaller, too. So don't tell me about the glory of high-level languages today, it's just not the day for it. AFAICT, Java was created to quickly produce horribly bloated, unmaintainable applications by torturing large numbers of programmers and making the tech sector expand to fill the bloat. We shall see.

Anyone who wants to, implement a simple example for me in Java, so we can all see how clean and intuitive it is. If you do this, I'll do it in C; here it is in BASIC.

10 PRINT "What is your name?"
20 INPUT NAME$
30 PRINT "Hello, "; NAME$
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
The problem is with your C.S. class not Java (none / 0) (#21)
by Carnage4Life on Wed Nov 29, 2000 at 01:35:47 AM EST

In java, you'd make all your variables public and stick them at the top of the class, and do as much as possible in main()... But I like my variables in C a lot better than your Java "public, protected, private, and friendly". Actually, haven't we had this discussion before?

What exactly does at the top of a class mean? Where variables are declared in a class does not matter. Private, public, protected, etc. are just expansions on extern and static that exist in C. Being able to declare the scope of variables is an important and often used feature in most languages including C.

Just don't write past the bounds of your array; it's easy to do, and generally expected.

How about going past bounds in a hashtable or linked list? Your comments emphasize all that is wrong with C. If you write good code there'll be no problem was the rationale behind the str* and *scanf functions and all it has ended up giving us is buffer overflows aplenty and lots of grief.

Macros are excellent, just write them correctly.

Again here's that lovely, only write good code and all will be well argument. Well unfortunately in the real world, most people do not write good code and macros are an easy way to excarberate certain problems. The most commonly used functionality of macros (creating function macros) is frowned upon by experienced C programmers ,including Brian Kernighan of K & R fame. The only real use for macros is to get around the fact that C doesn't allow non-constant sizes for arrays.

I'd kill for even some #define's in Java.

Why?

C has exception handling, but you don't want to use it; just use the error handling that's there by default.

C has a crusty, global variable based error handling infrastructure that was aging 10 years ago and is obsolete now.

C has a string type; it's called 'char *'.

Your kidding right? char* is a pointer to an array of characters, which people may treat as a string but really isn't. A string type is an atomic type that represents a string and can perform basic string operations on itself or other strings such as the String class in Java or std::string in C++. It also has structs and pointers.

and Java has classes and references, your point?

If you want more than that, well, there are libraries, but it's really not hard.

Anyone who is still writing apps that don't require more than a few structs and pointers is probably writing a trivial application such as a college homework assignment. No decent sized application today can exist without libraries unless it is a project that is using C as a portable assembly language.

On the other hand, I wrote a GUI Java program today that averages nine numbers. We were taught to make all nine numbers separate variables in a separate class, and give them all get and set methods. Then we use the GUI tool to associate them to the horrid GUI Widget code with the blue connections. The green connections are for methods!

This was a poor homework assignment on several fronts. Creating nine variables, with nine get/set methods for a simple average function is excessive. Java GUI applications are too slow to be of any real use as can beevidenced by the fact that Sun has canned most of its Java GUI tools as well as the fact that most Java development is server side development not client side GUIs. Most Java GUI tools suck and introducing students to programming using GUI tools is usually a bad idea.

AFAICT, Java was created to quickly produce horribly bloated, unmaintainable applications by torturing large numbers of programmers and making the tech sector expand to fill the bloat. We shall see.

It is easier for C programs to become unmaintainable as the grow than it is for Java or C++ programs. The growing popularity of Object Oriented programming is centered around the fact that OO code is easier to maintain than monolithic C code. This has been beaten to death in several online forums, textbooks and developer magazines.



[ Parent ]
char* (none / 0) (#22)
by Carnage4Life on Wed Nov 29, 2000 at 01:40:14 AM EST

Oops a char* is a pointer to a single character not to an array of characters.

[ Parent ]
You're at least right about my Java class. :) (none / 0) (#27)
by pb on Wed Nov 29, 2000 at 02:44:50 AM EST

Where variables are declared in a class does matter, doesn't it? If you declare a variable in the middle of a block, it doesn't have class or package scope, does it? And yes, fields in a class are much like fields in a struct, or static variables in a file...

Linked lists are generally null-terminated; you should know the size of your hash table. This is really just a matter of correct implementation, and not even good programming practices. If you wrote your code to do the wrong thing, you lose. If it really wasn't obvious, well, then you write cleaner code, or take it up with the language designers. And yes, they did, so if you want it, C++ does have a lot of this stuff built-in to the STL. :)

I used macros to provide a couple of simpler interfaces to a more generic function; I'd want #define's for inlining constants decently and probably #ifdef's too... having a simple preprocessor is a nice feature.

When macros are useful:

fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.

getc() is equivalent to fgetc() except that it may be implemented as a macro which evaluates stream more than once.

getchar() is equivalent to getc(stdin).

errno is thread-safe; it tells you what the last error that occured was; it is not global...
errno is defined by the ISO C standard to be a modifiable lvalue of type int, and must not be explicitly declared; errno may be a macro. errno is thread-local; setting it in one thread does not affect its value in any other thread.
My recent trivial college homework assignment was a shell; it's about three pages of commented code, and the most complicated data type is 'char **'. I use those for tokenizing the command line, with strtok(). (and if that makes you queasy, use strtok_r() instead. :) It dynamically allocates memory as needed, does error handling, implements pipes and redirection, and has a built-in cd command; I didn't get around to expanding metacharacters yet, but there are some functions to help do that, too, in C.

My first assignment in this class implemented a binary tree; here's the incredibly complicated data structure in C.

typedef struct tree {                   /* binary tree structure */
    char *s;                            /* data */
    int c;                              /* reference count */
    struct tree *l, *r;                 /* left and right children */
} tree;

All of the libraries used in those applications are built on stuff like this. Sometimes the data structures are a little more complicated, but not by much. (remind me to implement a B-tree sometime)

A string in C is a 'char *' that points to a null-terminated array of characters. It has functions that manipulate it. No matter what you might think, having functions (and function pointers) and structs is really no different from having classes with fields and methods. In C, you allocate your data as needed (that's an 'instance' of a string) and you manipulate it with the functions as needed, just as you would with a method in Java. Maybe strcmp looks a little clumsier to a Java person, but not to me.

Besides, you can write code like this in C... ;)

void strlower(char * s) {while (*s++ = tolower(*s));}
Actually, that Java app did take a while to load. I suppose that just gets worse when you have many more class files loading, being interpreted, and loading each other... I tried to just learn the JDK as much as possible, but it was discouraged.

I've tried programming with object-oriented techniques, (which is also possible in C, BTW) originally in Turbo Pascal, and I'm not too impressed. It is one approach to building a hierarchy, but it tends to be an overly complicated hierarchy. I'm not convinced that that's the best approach. As long as your team specifies a good interface first, I don't see how a good C program would get any less maintainable than a good C++ or Java program. All the successful, large projects I've seen written in C are nicely modularized, and often broken up into separate libraries as needed. I'm sure this is the same for large C++ or Java apps as well.

I've also seen the superiority of Windows NT beaten to death in online forums and magazines. I'm sure each system has its initial advantages and disadvantages, because some things are much easier or harder to do, but after a certain point it should depend more on the programmer and less on the tool.
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]

Whoops... (none / 0) (#28)
by pb on Wed Nov 29, 2000 at 02:48:40 AM EST

Sorry, guys; as my monitor isn't actually that wide, I think it's my bedtime. :)

Hey, Rusty: you sure we can't edit our own posts just a tad? No? It's impossible? Then how about another Text Mode? Pretty please, for morons like me? :)
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
Dude! (none / 0) (#30)
by rusty on Wed Nov 29, 2000 at 03:10:03 AM EST

Yipes! Be careful with that >PRE< there, cowboy!

What kind of other text mode do you want? This post, BTW, was easily formatted with P, BLOCKQUOTE, and just a little teeny bit of PRE around the code section. But it's a huge pain for me to fix comments like this, so do be careful. :-)

____
Not the real rusty
[ Parent ]

Yeah... (none / 0) (#32)
by pb on Wed Nov 29, 2000 at 04:56:48 AM EST

Sorry, Rusty, I wasn't thinking.

I said to myself, "gosh, I wish text mode didn't mangle my code". And then I said "all I want is text anyhow; I'll just use the <PRE> tag!".

Oh yeah. And then I didn't hit "Preview". :)

P.S. I did hit Preview this time, and my post looked really funny in HTML mode...
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
A char* is not a string (none / 0) (#41)
by Carnage4Life on Wed Nov 29, 2000 at 10:30:15 AM EST

I used macros to provide a couple of simpler interfaces to a more generic function; I'd want #define's for inlining constants decently and probably #ifdef's too... having a simple preprocessor is a nice feature.

Or you could simply wrap them in a function. Simply because you can force a lot of code into a one line macro doesn't mean you have created something more efficient than a function call. Again, I will state that this is not just my opinion but that of Brian Kernighan, author of the C programming language.

A string in C is a 'char *' that points to a null-terminated array of characters. It has functions that manipulate it.

A char* is not a string. It is a pointer to a character that is assumed to be the first character in a null terminated array. strcpy, strcat, etc are broken functions that work on this assumption and have given us the term buffer overflow. Please ask yourself if you've ever heard the term buffer overflow used with regard to C++ std::string or Java's String class. A basic string type would be immune to the problems that have plagued C style strings for a long time.



[ Parent ]
Hoo boy. (none / 0) (#54)
by pb on Wed Nov 29, 2000 at 06:28:26 PM EST

Just because you *can* do it in Java doesn't mean it won't be clumsy. I happened upon your kuro5hin user info code, and man, would I like to #define const in Java...

Like I said, "A string in C is a char * that points to a null-terminated array of characters". Period. Not "a char * is a string" (at least that time :). Is that clear enough for you?

It isn't too hard to avoid buffer overflows. First, you should keep track of the length of your string. Then you should know what you're passing, or use strncat or strncpy. I wrote a version of fgets that dynamically allocates memory, so now I have a safe version of gets. You're right, it isn't all done for you, (although I'm sure I could find other string routines for C) but it isn't hard to actually fix.

Of course, in Java, if something is broken (or even perfectly good...) they'll just mark it as 'deprecated' and create a whole new, complicated interface, to replace the old complicated interface...
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
you own gets (none / 0) (#56)
by ppanon on Thu Nov 30, 2000 at 01:01:09 AM EST

and of course you deallocate that memory when you are done with it so that you don't have any memory leaks and your program can run for months at a time, like most daemons do. You also have the different memory use semantics well documented so that anybody who ever needs to maintain your code will know he different semantics so that when they use gets() they will know to deallocate, right? Or does your system need to be rebooted once a week when under heavy load?

[ Parent ]
Well... (none / 0) (#57)
by pb on Thu Nov 30, 2000 at 01:13:30 AM EST

I didn't actually replace gets() on my system, mind you; I created a function called 'dfgets' that works like gets(), except it allocates memory for a string on the heap with realloc().

You can, of course, free that string with free(), as you would with any dynamically allocated string. However, I was only using it for reading in single command lines... Maybe I'll rigorously test it later, if I ever need to do so... :)

If you want to look at the code and discuss its flaws, it's on here, and it does have some flaws. I wrapped a few calls in an error() function later, just to make 11223 happy. :)
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]

.. (none / 0) (#63)
by ameoba on Fri Dec 01, 2000 at 11:19:16 AM EST

I appologize in advance for the bulleted list, and unneccessary use of the word "paradigm"

Ok, I'll bite

// Name.java : Simple program to do something like
//   10 PRINT "What is your name?"
//   20 INPUT NAME$
//   30 PRINT "Hello, "; NAME$ 
// -Please don't make fun of my bracket placement-

import javax.swing.JOptionPane;

public class Name
{
  public static void main(String args[])
  {
    JOptionPane.showMessageDialog(null,"Hello, " +
      JOptionPane.showInputDialog("What's your name?"));
    System.exit(0);  // must appease the GUI gods
  }
}


Which, taking up 6 lines (only counting lines containing program statements) compared to BASIC's 3, proves undoubtedly that BASIC is twice as effective as Java. =P

Interestingly, The program actually becomes MORE complex if you try to make it a console program, requiring a 3 line object definition to create an object that lets you readLine() to a String (which is IMHO better than not doing it, and having to deal with byte[]s).

Realistically tho', line-numbered basic is not well suited for projects much larger than, well... this =) why, just today, I was looking at the source for a function graphing program written in Apple ][e basic. GOSUB 4950 is much more "clean and intuitive" than getFunctionValueAt(x).
Perhaps, you could show me a "clean and intuitive" method of doing
public long factorial (double n)
{
  return n>1 ? factorial(n-1) : 1;
}
with line-numbered BASIC. If you can do it, and keep it recursive, then learning to hand-code GUIs in java should be simple, and telling the difference between a shitty drag/drop environment and the underlying language should be simple. *Good* programming practices are those that allow you to write a program:
  1. correctly
  2. simply
  3. quickly


While, at first, I was against Java, for all the normal reasons (bloated, innefficient, just a dumbed-down C++, no preprocessor, no real pointers, etc), as I've learned more about it, and acutally coded in it, it's grown on me. A few things really help with an appreciation of the language:
  • A decent compiler: Lets face it, javac can be painfully slow, since, being a Java app, requires starting up of a JVM each time it runs (which, especially for small programs, is responsible for a large part of Java's appearance of innefficiency). IBM's Jikes is several times faster, as well as helping you fix most single character typos =)
  • A decent JVM: If you're not using a 1.3 JDK, do yourself a favor, and download it. The HotSpot JVM offers a major improvement over 1.2 JVMs. If your running Windows, jview (the microsoft JVM, which is part of IE's default install), is a quick way to test console apps, but doesn't handle Swing, or (m?)any Java2 features.
  • A good editor: It almost goes without saying but, if you're going to program, a good text editor is a must. Both Linux and Windows have a slew of editors available, but you can do a lot worse than JEdit.
  • The API Documentation: One of my favorite bits about programming in Java is the HTML API docs. 100MB of documentation, at your fingertips helps to offset the complexity and size of the language. (almost all of the Swing GUI components start with "J") Not to mention the extensive, well written documentation at Sun's website, covering all aspects of the language, from intro level, Hello World stuff on up.
Keep in mind that Java is not just one thing. It's a language, a portable virtual machine, an extensive library of functions and a network security model, all rolled into one. In essence, Java is a whole computing paradigm, on the order of Unix/C.


To end on that point would surely be blasphemy, however effective it is rhetorically. In short, Java's not the Second Comming, but it's not to be disregarded. If nothing else, it's a lot more useful than having to work in Lisp or Fortran. =)

[ Parent ]
Neat. (none / 0) (#67)
by pb on Fri Dec 01, 2000 at 02:34:41 PM EST

That's a cool little GUI program; however, I accept your challenge, because I believe it will be easier to win.

Ok, this should be the example java program; I believe I'm using JDK 1.2.2 here, and I tried to make it correct, and somewhat like what I think you intended for yours to be originally.


public class Factorial {
public static long factorial (long n)
{
return (n>1) ? n*factorial(n-1) : 1;
}
public static void main(String args[]) {
System.out.println(factorial(5));
}
}

The 5 used here as a constant is just an example; feel free to change it.

The following BASIC program has been tested with GW-BASIC 3.20. It uses tail recursion with an accumulator.

10 n = 5 : a = n
20 n = n - 1 : a = a * n : if (n>1) then 20
30 print a

This is what your Java compiler should be doing in the first place. I suggest you disassemble the byte code to ensure maximum efficiency. Any good Scheme interpreter would do the same.

Also, I hope no one here uses Unix, C, Lisp, or Fortran. Umm... wait a minute. Anyhow, have fun with your Java, buddy.
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]
.. (none / 0) (#69)
by ameoba on Fri Dec 01, 2000 at 04:55:33 PM EST

Zeroth off (ie: too lazy to retype the next sentence, yet I'm more than willing to fill in these parenthesis) thx for fixing my code... I never quite had that whole n! thing down... (and now they're trying to tell me about this Gamma function, which for some reason makes me wanna spit out random letters...)
First off, the 'blasphemy' comment was meant to indicate that Java & whatnot isn't quite up to par w/ Unix/C.

So, what's the difference between your code there, and
n=5; for(a=n;n>1;a*=--n);

As for what the Java compiler should do, I can't say. My assembly skills are just a step above non-existant, but I can tell enough looking at the output from gcc -S (with the C equivalent of the java code I gave in the previous message) to know that pushing a value onto the stack and executing a call factorial is pretty good indicator that the compiler hasn't optimized out the recursion.

Fortran and Lisp are lovely languages, I'm sure, but I'd rather not go to a school that focused the CS curriculum around one of them. Tho', if Microsoft's hype about their .net platform, all languages will be on equal footing with regards to library access, so...

[ Parent ]
Tail recursion... (none / 0) (#70)
by pb on Fri Dec 01, 2000 at 08:35:10 PM EST

Well, first off, gcc might or might not handle this properly, but that's the tail recursion optimization, alright. Basically, if you can clobber the stack, then you can convert a function call into a goto. Hopefully Java compilers can do this, because I know that Lisp compilers should...

So I don't think there's really a difference; just realize that the for loop is equivalent, except that you're destructively modifying n (technically you'd store that in another variable, or get another copy when you called the function) and storing the call stack onto a, and clobbering it as needed. :)

And I learned about this in "Theory of Programming Languages", which was taught in Scheme, which is like a much cleaner, more elegant version of Lisp.
---
"See what the drooling, ravening, flesh-eating hordes^W^W^W^WKuro5hin.org readers have to say."
-- pwhysall
[ Parent ]

Heh. (none / 0) (#52)
by simmons75 on Wed Nov 29, 2000 at 05:21:00 PM EST

That sounds like the same problem I had. I see most the reasons for the theory, I see the ultimate goals, but damn, rote memorization is something I just don't do well.

I always got unlucky, too, with math profs: I'd end up with either 1.) the Pakistani instructor that apparently learned English last month or 2.) the child prodigy who made their first non-A grade (and a B, at that) when they were getting their Ph. D. Oh well. In three weeks I'll be the proud owner of a BA instead of a BS, and can say that I have a minor in CS, which basically means I missed out on, oh, my senior year of CS. :-)
poot!
So there.

[ Parent ]
Math is not rote! (none / 0) (#76)
by phliar on Tue Dec 05, 2000 at 08:26:35 PM EST

since math is most easily absorbed by drill
By "drill" do you mean simple memorisation, or actually doing homework and doing the exercises? I hope the latter! Math is no different than anything else: you need practice. You'll never be a musician if you don't practise mindless drills, or a hacker without writing meaningless little programming assignments.

Hard to say. I'm able to read most code and figure out what it's doing, although I usually won't reach the conclusion "he's using a balanced red-black tree"
So what happens when you're assigned a project? Will you be able to say "If I used a red-black tree there, this will run in O(n log n) instead of O(n^2)!!" (Change the specifics of the example as required.)

Go back and get the degree. But don't just get it just to have the piece of paper, go somewhere where you will actually learn all this stuff.


Faster, faster, until the thrill of...
[ Parent ]

A Ph.D. gets you no money... (4.00 / 9) (#5)
by Friendless on Tue Nov 28, 2000 at 10:24:40 PM EST

I certainly recommend that all programmers have at least one degree. It introduces you to the concepts of structured programming, OO, waterfall methodology, and a bunch of other things you need to know but don't necessarily jump out and bite you in the wild. It gives you a basic vocabulary for discussing software engineering with other people. BTW, I don't think that being a spectacular Perl programmer is necessarily a good thing :-).

However, I did a Ph.D. (because I couldn't imagine doing anything else), and overall that has not helped my career very much. The particular field I chose taught me how to think about abstract things a LOT better, but probably 4 years in the field would have helped in that regard. It also taught me to write a lot better, but despite the lip service paid to communications skills, you don't get money for that.

The best programmers in a team seem to be the honours graduates. I don't know about the U.S. system, but in Australia the best students after 3 years of a normal degree are offered the chance to do a 4th year and receive honours. People who leave immediately after doing that are only 1 year of experience down, and usually progress faster.

I think undergraduate courses do a poor job of teaching programming, but can't be expected to do a lot better. I have been working on one project for 3 years, how can you teach what that is like in a 3 year degree? I have a hundred thousand lines of code for which I am the resident expert. How can you impress upon someone who writes a couple of hundreds lines of code for an assignment why comments matter until they have experienced despair because of the lack of them? I contend that in fact most teachers have not experienced really big savage software projects, and thus aren't equipped to teach about them. Fortunately since the internet has grown up, you can appropriate experience from people who have done it, search for names like Kent Beck, Linus Torvalds, Eric Raymond. Programmers have to teach themselves, but just one degree will help them a lot.

Re: A Ph.D. gets you no money... (none / 0) (#77)
by phliar on Tue Dec 05, 2000 at 08:39:24 PM EST

However, I did a Ph.D. (because I couldn't imagine doing anything else), and overall that has not helped my career very much.
You don't do a PhD for the money, you do it because you're a stupid SOB probably dropped on your head as a child. At least, that's the only explanation I can find now for why I did mine!

Actually I'm very glad I did my PhD. I had a great time, made some wonderful life-long friends, and got to live in the university environment for an extra seven years. I also got to be a professor, and teaching (CS and math) is the most fulfilling thing I have ever done. Yes, even more than writing code!

I contend that in fact most teachers have not experienced really big savage software projects, and thus aren't equipped to teach about them.
Depends on the school. Where I went, many of the faculty had large projects (free software) and you were expected to contribute well-designed industrial-strength code. Examples: the Icon programming language, agrep, glimpse, etc. I also got to meet RMS as well as Cook.


Faster, faster, until the thrill of...
[ Parent ]

College Degrees Considered Harmful (2.00 / 14) (#6)
by the Epopt on Tue Nov 28, 2000 at 10:36:10 PM EST

I work for a consulting company with about $25 billion a year in revenue. My salary is well into six figures. I work from home 70% of the time, 20% at client sites, and 10% in the office.

Project managers with BSs report to me. PhD designers and developers report to them. Me? I'm a college dropout.


-- 
Most people who need to be shot need to be shot soon and a lot.
Very few people need to be shot later or just a little.

K5_Arguing_HOWTO
Has to be said: (4.20 / 5) (#43)
by 0xdeadbeef on Wed Nov 29, 2000 at 12:39:57 PM EST

The Dilbert Principle is still as valid now as it was five years ago. ;-)

[ Parent ]
Whatever (3.00 / 1) (#62)
by palou on Fri Dec 01, 2000 at 05:00:27 AM EST

Sure, but you show a deep inferiority complex. And so you should. There's another college drop-out by the name of Bill who feels much like the way you do. He also gets lots of respect in some parts.

[ Parent ]
Individual case, not general case (5.00 / 1) (#64)
by ucblockhead on Fri Dec 01, 2000 at 12:36:51 PM EST

Yes, you can always find individual cases of college dropouts that did well. The world's richest man, for instance. But in those cases, it is either an example of luck, an example of unusual talent, or some combination thereof. Not everyone has luck or unusual talent.

There tons of statistics on this stuff and the value of a college degree is very clear. College graduates make something like 40% more, on average, than high school graduates. You can put a very clear dollar figure on the value of a degree, using demographic data. And that dollar figure is rising at a faster rate than inflation because of the need for more highly skilled people in today's economy.

So yeah, drop out of college and you might end up making six figures and have PhD's repording to you. But more likely you'll end up spending your days promoting potato-based snacks as a meal addition.

Given two roughly equivalent resumes, a college degree will beat a trade school degree, and a trade school degree will beat a high school degree. And many times, you won't even get in the door without that four year degree, at least not until the company gets desperate.

If you've got an opportunity to get that degree, take it. One of the most foolish things to say is "I can always go back and get one later" because the older you get, the harder it is to do so. If, for whatever reason, financial or intellectual, you cannot get a degree, then don't despair. It isn't the end of the world. But if you can, do it. Don't throw away advantages in life.
-----------------------
This is k5. We're all tools - duxup
[ Parent ]

All Colleges (and Grads) Not Created Equal (none / 0) (#78)
by phliar on Tue Dec 05, 2000 at 08:49:09 PM EST

Project managers with BSs report to me. PhD designers and developers report to them. Me? I'm a college dropout.
So? I know a guy who's a college dropout, and he just won the lottery!

I can match your anecdote and raise it! But the facts are that college grads have a higher median salary in the industry. But speaking for myself, I want college grads from good schools. Don't bother getting a degree from East Podunk Community College.


Faster, faster, until the thrill of...
[ Parent ]

College is what you make of it (3.91 / 12) (#7)
by Carnage4Life on Tue Nov 28, 2000 at 10:38:26 PM EST

It seems like every three months K5 gets an Is College Worth It? article. Anyway instead of repeating the countless benefits of a college education that I have obtained (just got a $90K offer a few weeks ago). I shall simply state what I have noticed about a lot of CS students in colleges today.

Many students simply go to class, do the work assigned to them in class and nothing else. These same students then get pissed of when employeers ask them about CORBA, EJB, the C++ STL, or whatever. The purpose of a college education is not to provide you with trade skills (which is what learning programming is) but is instead as a way to teach you the underlying patterns and principles in programming, networking,m databases, etc. It is then up to the students to apply themselves in whatever specific areas they are interested in.

Students who complain that schools don't teach relevant skills fail to realize that with a basic knowledge of how programming works, learning new languages is merely learning new syntax. On the other hand learning how to use Dijkstra's algorithm to get the short distance to any node on a graph or learning the difference between head and tail recursion is invaluable knowledge that is worthwhile no matter what language you are using.

I like being in school because I have access to some of the brightest people I'll ever know (both students and professors) and I can learn anything I want if I can find a professor interested in helping me. I am currently using CORBA and Java/RMI as part of an independent study project for which I'll get credit for. My senior project became a chance for me to brush up on my C++ and Javascript because we were allowed to design our own projects.

You get out of school, what you put into it, nothing more nothing less.



Agreed (5.00 / 1) (#49)
by kagaku_ninja on Wed Nov 29, 2000 at 03:04:50 PM EST

I learned more on my own time at college, than in all the course work combined.

People do stress the importance having a good grasp of the fundimental theory behind computer science. My experience in the industry is that virtually everyone I have worked with had a BS degree or higher. Unfortunatly, many of these same people did not know what a graph was, and overall, exhibited poor knowledge of basics.

My girlfriend has interviewed people with degrees that did not know what primes or factorials are. I have interviewed people who could not tell me why storing large amounts of data in linked lists is bad; people who could not code a factorial or bubblesort algorithm, even after explaining it to them.

It is easy to get a degree. Most people in the industry have degrees, and most of them suck.

[ Parent ]
Degree does not matter but the experience does! (3.40 / 5) (#11)
by mystic on Tue Nov 28, 2000 at 11:39:41 PM EST

In this fast paced IT world, a degree in CS is not something that wil fetch you a job. This is because the companies realise that what they want is not inherent in all CS students with a degree and because the same thing can be picked up by anyone who has the interest.

So if you are going for a degree with a job as the end goal, I would say you are not doing the right thing.

Like Carnage4Life, I am still in college because of the experience that I get. I meet interesting people who are interested in the same area as I am. I am sure that no company will be able to boast of a higher concentration of intelectual minds than Universities.

So in answer to your question "So in light of this, did your CS degree (or lack thereof) have a profound impact on your career in technology? ", I would say that, I do not think my degree will make much difference in an IT job.

re: Degree does not matter but the experience does (4.40 / 5) (#20)
by bflame on Wed Nov 29, 2000 at 01:35:35 AM EST

Talent and experience will get you through the first few years of a technical career. The only problem is that at some point you will try to take that next step up the career ladder and find out that a college degree is needed to finish that step. I know I have been in this business for 15 years, and have been trying to take that next step for the last couple years, and every time I hear the same thing, you have the experience, but you are missing your college degree.

[ Parent ]
I never thought about that! (none / 0) (#25)
by mystic on Wed Nov 29, 2000 at 02:12:26 AM EST

Good point, I admit I never thought about that kind of a situation because I have never been near that! But I guess what you are telling is true.

[ Parent ]
Contrary opinion (3.00 / 1) (#48)
by kagaku_ninja on Wed Nov 29, 2000 at 02:50:01 PM EST

My father has no degree, that hasn't hurt his career (he got started in the 60's)

A friend dropped out of college; he eventually became a kernal hacker at SGI making more cash than me; now he is at a start up.

It is true that some companies (especially the government) have bureaucratic policies that limit your advancement if you lack the requisite degree.

[ Parent ]
funny (3.60 / 5) (#12)
by Nyarlathotep on Tue Nov 28, 2000 at 11:53:52 PM EST

I think we are discovering another category of automatic -1 stories: the was/will collage be useful stories.

BTW, Who gets a degree in CS? If you want to think while you are in school get a degree in Math, Physics, Chem, Bio, or the more theoretical Engenerings.

Campus Crusade for Cthulhu -- it found me!
Agree (4.33 / 3) (#26)
by a humble lich on Wed Nov 29, 2000 at 02:29:36 AM EST

I am getting tired of all of the same is a degree in CS useful stories. There are people here who are not in CS, just like there are some who are not from the US. Maybe I should submit a story asking if I should continue to get a doctorate in physics or get out with only a masters.

[ Parent ]
Continue, by all means..... (4.00 / 2) (#40)
by minusp on Wed Nov 29, 2000 at 09:59:57 AM EST

As one Dr. Weber once told me... "you get a Masters in Physics and you think you know everything, you get a Doctorate in Physica, and realize just how little you really do know. But your questions get better..."
Remember, regime change begins at home.
[ Parent ]
Degree people learn faster (4.10 / 10) (#19)
by jesterzog on Wed Nov 29, 2000 at 01:27:47 AM EST

I voted this down, but it looks like it might get through anyway. I didn't see the previous stories when they were posted so I'll comment anyway.

Whether it earns me more money or not, I see my degree as more beneficial to any business who hires me in the long term - whether they know it or not. This might or might not reflect back on me. (I have no idea.)

In the real world there's a lot of kludging and a lot of corner cutting that goes on. More often than not, it doesn't take a degree to learn any programming. On the contrary you can learn it most or all of it out of the help files and man pages. When that fails there's the Internet.

Where this seems to fall over is in the theory. Often when I'm working in the real world I just apply various theory that I've learned from my degree where other people wouldn't have. Knowing the good and bad places to use inheritance, for example, can be the difference between saving several months of work down the track because everything's so reusable.

If I didn't have a degree I'd still know how inheritance worked. Chances are though that I would never have been exposed to relevant problems and at the same time, had experienced people there to show me what the problems were when it mattered. IMHO people learn from mistakes at least 10 times faster in the educational sector than they do in the real world. They also have really good resources to be able to decide how to correct themselves. Degrees prove you can learn, but they also teach you how to learn and how to think better.


jesterzog Fight the light


Re: Degree people learn faster (3.00 / 1) (#65)
by forgey on Fri Dec 01, 2000 at 01:37:20 PM EST

I disagree.

University teaches you a lot of things, but the most important one is: How to learn. If you have a degree you should know how to teach yourself something, how to research and how to explain your thinking. These are all very good skills to have in a company, but they aren't exclusive to University grads.

There are a large number of people who have these skills with no university training. There are also a lot of programmers who are interested in learning various programming techniques, this can be accomplished with self-study or even with certification or diploma like courses.

The big advantage a degree gets you is recognition from HR. There are a lot of companies that filter out resumes based on whether they have a degree or not. The other advantage is immegration. If you want a visa it is incredibly eay to get with a degree and almost impossible without one.

forgey

[ Parent ]
What the heck kind of CS degree did you get? (4.25 / 8) (#24)
by delmoi on Wed Nov 29, 2000 at 02:09:11 AM EST

That's where I learned that getting an education in computer science and the challenge of real world programming were very different creatures. The level of thought required for real world programming is so much higher (and very different) than that of writing factorial recursion programs and binary tree 'animal guessing games'.

'Scuse me? Here at ISU that could only be considered first year stuff at most. In order to graduate here you need to take things like digital circuit design, Operating systems, Calc, file systems, Calculus based physics, theory of computing (turning machines and stuff), Programming languages (complete with compiler design). And there's optional courses in things like AI and distributed processing and the like. (<a href=http://www.iastate.edu/~catalog/exp/2001/coms01.html>here are some of the 'experimental' right now. A while ago they had a class on 'information warfare' -- hacking)

I have a job now to, on the side, coding a data FTP based synchronization program for Iowa Student Loan Liquidity Corp in visual basic. Aside from the blatant crappieness of VB, it's a lot easier then things I'll probably have to do in school.

I don't know what you're doing at your job. But I'm betting its easier then writing massive file systems, Linux Kernel drivers, and designing simple CPUs on paper. (well, not really paper, but some strange windows program that lets you simulate circuits.)
--
"'argumentation' is not a word, idiot." -- thelizman
Not Typical (3.50 / 2) (#29)
by DemiGodez on Wed Nov 29, 2000 at 03:04:46 AM EST

As a comparison, I went to U of Iowa and graduated a few years ago (97). My degree is a BS in CS, and I could have graduated without ever taking a class in C, C++ or Java. I could have earned my BS without ever using a programming language other than Pascal, Prolog, Assembly and LISP. That's pretty lame. C, C++ and Java were electives which I took but many people didn't.

I did take a class in digital circuit design and operating systems, but it was a joke. No one learned anything and the insane curve gave everyone a C or better. I took Calc and calc based physics, but these have had absolutely no use in my real job.

Unless ISU is very different the U of Iowa, which I doubt, I learned almost nothing that helps me in the real world. The classes are challenging at the time, but just not real world. I guess if you plan to go into OS design or CPU design, there is the potential for a CS degree to be pretty useful, but I architect web apps. I work primarily in Java and do basically high level OO architecture. I know people with recent OO degrees who have no idea what object oriented really means. That's sad.

And as a side note, I still owe money on my useless degree to Iowa Student Loan Liquidity Corp. Small world.

[ Parent ]

ISU vs U of I :P (none / 0) (#47)
by delmoi on Wed Nov 29, 2000 at 02:25:41 PM EST

Actualy, U of I teaches all core classes in Java now. ISU uses C++, but might switch to Java in the next few years. Pascaland Lisp could theroeticaly be as powerful as "C" at least, Although I'm not sure what kinds of object support the versions you used had.

I've taken Comp E 210 at ISU, and it's no joke. I havn't taken the OS class yet, though. ISU's CS department is actualy pretty good, I think it's ranked 30-somthing in the nation.
--
"'argumentation' is not a word, idiot." -- thelizman
[ Parent ]
Yeah.. (none / 0) (#55)
by DemiGodez on Thu Nov 30, 2000 at 12:15:28 AM EST

I know they switched to Java - they actually did that before I graduated. I disagree with this decision strongly even though it gives students a "real" language, it is a terrible language to learn as a first language.

In my previous job, I got to go back to Iowa every year and interview stuents for jobs. These kids had taken like 6 classes in Java and had absolutely NO idea even the basics of Object Oriented concepts. I guess it goes back to getting out what you put in.

[ Parent ]

It was a minor. (none / 0) (#38)
by cloudnine on Wed Nov 29, 2000 at 09:39:35 AM EST

I got a CS minor, not a major, so i didnt get to some of the upper level stuff. I got to an assembler/digital logic class. I also got to an operating systems class, though we really didnt do much programming, which i felt was very inapropriate for an OS class. All the theory was certainly helpful, but i was provided no information of where/how i could apply that theory.

BTW, Maybe before you went comparing apples to oranges, you probably should have asked what i actually do for a living, and not only that, what my level of experience is. You have no idea how hard or easy my job is, so stop being irrelevent.

[ Parent ]

You said what you do... (none / 0) (#42)
by Carnage4Life on Wed Nov 29, 2000 at 10:57:58 AM EST

BTW, Maybe before you went comparing apples to oranges, you probably should have asked what i actually do for a living, and not only that, what my level of experience is. You have no idea how hard or easy my job is, so stop being irrelevent.

In the article you describe yourself as a web developer, specifically a Perl programer.



[ Parent ]
.. (none / 0) (#46)
by delmoi on Wed Nov 29, 2000 at 02:19:12 PM EST

i actually do for a living, and not only that, what my level of experience is.

Well, if you're not a web developer doing Perl what are you doing? I was basing my comments on the story you posted, and your description of the classes you took.

You have no idea how hard or easy my job is, so stop being irrelevent.

Irrelevent? How do you expect me to get that data if you don't tell anyone? Everyone else had only your story to go off of, so I don't think my comments would have irrelevent to anyone else. I do realize that you got a Minor instaid of a Major, but you seemed to be calling into question the whole idea of a 'CS degree', witch would include a BS or whatever
--
"'argumentation' is not a word, idiot." -- thelizman
[ Parent ]
Americanized schooling. (3.33 / 3) (#34)
by harb on Wed Nov 29, 2000 at 07:35:50 AM EST

I work with a guy from Germany (very smart guy, 24 and has is working on his PhD), and according to him, High School in Germany is much harder than the advanced courses at ASU (Arizona State). Not sure what that says in regards to college versus work experience, but.. heh.

As for myself, I went to a year and a half at a community college, hated it horribly, then spent a year at ITT. ITT (at least the one here in Phoenix), is a great school. The staff was awesome. Unfortunately, it wasn't really what I wanted to be doing, so I dropped it and went back home and got a networking admin job with the high school district. Now I'm a real sysadmin type monkey with a nicely large and more or less geek-friendly corporation, back in Phoenix. So.

I'm definitely not saying that school is worthless. There's a lot of things I miss.. namely being able to interact with people my own age in a non-professional environment. Socializing is something you lose when you're sitting in a server room all day.

harb.

bda.

Depends on your ambitions (4.20 / 5) (#36)
by Mandos on Wed Nov 29, 2000 at 09:33:05 AM EST

The value of a university CS degree really depends on what you want to do. If you want to work with AIs, you'd better have calculus, functional programming, and a heck of a lot of other theoretical stuff. If you want to design web pages, well...
---------------------------------------------------------

`o Mandos `o tyrannos tôn 'exoterikôn

Oh no, not this again... (3.00 / 4) (#37)
by 0xdeadbeef on Wed Nov 29, 2000 at 09:39:27 AM EST

The level of thought required for real world programming is so much higher (and very different) than that of writing factorial recursion programs and binary tree 'animal guessing games'.

If that was the depth of your education, no wonder you feel like you wasted your time. Newsflash for the school is a waste of time crowd: not all schools are created equal.

If anything, most of the "real world" programming I do is far more trivial and tedious than the stuff I did at school, at least compared to higher level classes and the research work I did. Of course, I went to a real school, not some dinky liberal arts college that has decided to be a diploma mill for CS degrees. Your milage may vary.

of the real (none / 0) (#73)
by goosedaemon on Mon Dec 04, 2000 at 06:43:20 AM EST

What real school did you go to? Some of us may want to go there.

[ Parent ]
working in the public sector (4.33 / 3) (#44)
by doormat on Wed Nov 29, 2000 at 01:06:33 PM EST

As a computer engineering student working as a programmer for a local utility, I can say that my lack of a degree has hurt me. My official job title[Computer Drafter] and what I do[VB programming/Automation] are two different things, and to make it worse, there is a job available at my company[CAD Analyist] that I am doing now for about 1/3 the pay. I'd have been hired for the better paying job by now, except for the fact that I lack a piece of paper that says 'Bachelors Degree in -insert something to do with computers-'. The whole "degree required" thing gets to me, because its not like i made the choice of not getting my degree (i am fresh out of high school). I'd have already done the consultant thing except for the fact that I need health insurance and a steady income to pay for school.
|\
|/oormat

Why you should have a degree...(maybe) (3.80 / 5) (#50)
by kmon on Wed Nov 29, 2000 at 03:20:00 PM EST

I'm working on a degree in CS right now, I'm possibly doing a concentration in AI or Computer Graphics, but have already taken enough software engineering and "basic" programming courses to land a good job just about anywhere. As for a career in Perl coding: That's well and good, but I learned enough Perl in an hour to do something useful. Sure its a tough language, but it is a scripting language that is, in my opinion, on the same level as Visual Basic.

When I first started school, I thought I knew everything there was to know about CS. I had already written better programs and understood more concepts than most of the kids in my classes. That attitude really doesn't lead to success. Once I hit my second year, I realized that there was alot more to programming than banging out code for 17 hours straight (although there are some nights where that is neccessary).

Computer Science isn't about "coding" or programming skills. If you want that, you should go to a tech school, then go back when the technology changes. All the jobs I've landed (I'm still in school) have been due to my examination of the market, and learning (on my own) the skills and techniques I would need for the job I was targetting.

The next reason I'm going to finish my degree is this -- The .com stock bubble is deflating pretty quick, and that means that two groups of people are going to be out on the street competing for my job. The first is the college dropout with a couple years experience at technology xyz. The second is the college grad who has a couple years experience at technology xyz. I'm not going to take my chances dropping out now, only to be cut loose from my company without anything to fall back on a couple of years from now. Companies don't care about you or me, and when it comes down to it, I want to be able to walk away if things get too nasty. I don't want to have the feeling that I won't be able to get another job or that it will even be a little bit harder for me without a degree.
ad hoc, ad hominem, ad infinitum!
Math and CS (1.50 / 2) (#51)
by bkeeler on Wed Nov 29, 2000 at 03:51:07 PM EST

Most math just isn't relevant to computer science. Really. It's a prerequisite for most science or engineering disciplines though, so you may want math skills if you plan on using your CS degree for scientific/engineering related modeling, for example.

A computer science degree should not require any but the most basic of math classes in my opinion. The fundamental underpinnings of CS are found in CS classes themselves, and include such concepts as Turing machines, computability, NP completeness, predicate calculus, lambda calculus (not really math despite the name, IMHO), computer architecture, operating systems, language theory, software engineering. There's plenty there without forcing useless math down people's throats.

In fact, the only course I can recall taking that had a math rerequisite was information iheory which required probability theory. (see Cryptonomicon for an overview of that subject...)

As others having pointed out, teaching skills such as languages to be used as bullet points on a resume is not what CS degrees should be about.


...until the word "Maudling" is almost completely obscured.

Math and CS (none / 0) (#53)
by Girf on Wed Nov 29, 2000 at 06:06:47 PM EST

I would tend to disagree. If we are talking about pure CS, I feel it is a direct extension of everything you learned in math class. Pure CS, I do beleive, involves things like algorithms, and hardcore theory. I does not even include things like 'How to program in {C, C++. VB, Java, Pascal, BASIC, Smalltalk, etc}'.

I highly doubt that you are talking about pure CS. I would you are talking of some computer course that teaches you how to say.. network "Ok students, watch here as I demostrate how to plug this blue cable into the proper socket on the back of the computer...". Something taught at a place like RCC.

I'm staying in Math, and I'm going to enjoy it. And for fun, i figured out that there are only 3 possible distinct cats games in X's and O's. Now that's a good example of CS.



[ Parent ]

No math = no computers (none / 0) (#59)
by lmnop on Thu Nov 30, 2000 at 01:16:21 PM EST

A computer is a mathematical abstraction. Math is everywhere inside your computer.

To use your computer and make a lot of money from it you don't *need* to understand all of the math inside. That's a useful and fortunate characteristic.

You'll be missing out on a lot of cool ideas if you don't at least try to understand your computer's mathematical past. Besides, it may make your brain grow.

-lmnop
"If all else fails, immortality can always be assured by spectacular error." -- John Kenneth Galbraith
[ Parent ]
The value of math. (2.33 / 3) (#66)
by antizeus on Fri Dec 01, 2000 at 01:47:41 PM EST

First of all, much of what you listed is in fact mathematics, and is taught in the CS departments simply because it is more important to CS departments than to general math departments.

Secondly, the primary value of a mathematics education is to train you to adapt to, and think in terms of, abstract systems. Little of what I learned in my mathematical education is applicable in my CS-oriented job, but the process has sharpened my mind enough to add considerably to my success.

I think that CS majors can benefit from taking more upper division abstract math courses. Of course I would probably say the same for many other majors.
-- $SIGNATURE
[ Parent ]

math is important (none / 0) (#71)
by _bandit on Fri Dec 01, 2000 at 08:35:21 PM EST

Math is extremely important to computer science, especially algorithm analysis. One truely important area people usually don't associate with computer science is Real Analysis (the basic undergraduate level). It is extremely useful in understanding algorithms, namely because it encompasses the study of sequences.

Next to language theory, the study of sequences is the most pervasive aspect of computer science.

[ Parent ]
Re: Math and CS (none / 0) (#79)
by phliar on Tue Dec 05, 2000 at 08:57:08 PM EST

Most math just isn't relevant to computer science.
Bullshit! Sorry, I got carried away. No, all discrete math is important in CS. Twenty years ago people were probably saying how useless number theory iwas, and voila, today it is the basis of public key cryptography. As for things like Turing machines, computability, NP completeness, predicate calculus, lambda calculus, combinatorics (graph theory, enumeration)... all of that used to be in math; now it just so happens that CS departments teach that stuff instead of math departments because it is more relevant to the CS discipline.

A very important thing that math classes like (say) Axiomatic Set Theory will teach you is step-by-step reasoning.


Faster, faster, until the thrill of...
[ Parent ]

Computer Science!=Computer Information Systems (4.00 / 1) (#58)
by rombios on Thu Nov 30, 2000 at 09:57:58 AM EST

Computer science is NOT to be confused with Computer Information Systems.
Computer Science is study of Algorithms -- it has always been Math based.
-- deflagrate muri tempe et intervallia
Not algorithms (none / 0) (#72)
by Jonathan White on Sun Dec 03, 2000 at 11:23:22 PM EST

Computer science is not the study of algorithms that is but one facet of computer science. It is the study of computing which is much more than algorithmic development.

[ Parent ]
Just ONE reason for a college degree... (2.50 / 2) (#60)
by chipuni on Thu Nov 30, 2000 at 03:23:58 PM EST

There is only one reason for a college degree. It is the same single reason to get certifications.

That reason is a compay's Hiring department. (Sometimes called Personnel, or Human Resources.)

When tech jobs become scarse, bosses will start demanding that their new hires have a college degree. Those that don't -- even if they are equally talented programmers -- won't get past HR.


--
Perfection is not reached when nothing more can be added, but only when nothing more can be taken away.
Wisdom for short attention spans.
College != Trade School (3.50 / 2) (#61)
by paulerdos on Thu Nov 30, 2000 at 10:16:19 PM EST

This is what the DUS here at Yale told me when I asked him this very question.

He said if you want to learn "real-world-stuff" that you can just take to a company and use immediately, go to a trade school; if you want the foundation with which you can make yourself useful in virtually any technology company, go to a college and get a CS degree.

This didn't really answer my question, since I was wondering how I could develop these real-world skills without dropping out of college. He then suggested the perfect combination, which is exactly what I'm doing now: go to college for the theoretical background, then cement this with real experience during summer internships. Then, by the time you graduate, you should have a toolbox that will be hard to match.



Time for a new section! (4.33 / 3) (#68)
by marlowe on Fri Dec 01, 2000 at 04:32:24 PM EST

This same old issue keeps getting posted over and over again, and gets through the moderation stage, for whatever reason. Why not just have a section set aside just for this issue?

With any luck, anybody who's tempted to post yet another one of these, will notice that the section exists, and realize that it's been done to death already.


-- The Americans are the Jews of the 21st century. Only we won't go as quietly to the gas chambers. --
Boggles my mind (2.00 / 2) (#74)
by GreenCrackBaby on Tue Dec 05, 2000 at 05:13:40 PM EST

...to see this topic come up here and in /. all the time, especially when I read the replies.

This seems to be the typical anti-colledge degree response, "It's useless. Look at me...I don't have one and I make xxx." or, "I did two years and dropped out, what a load of crap."

The general feeling I get is that the only people who seem to dump on college education are those that don't have one, or those who tried and failed.

Here in Canada we have two types of post-high school educations: college or university. Colleges general don't grant degrees but are rather two-year diploma courses while universities are normally 4 year degree programs. I'm a university grad (comp. sci.) who gets the pleasure of working with predominantly college grads. In fact, it's my job to correct the errors that those non-degree workers are creating.

At my current position, I work with telecom databases -- predominantly fixing performance problems. All of the problems I encounter, for the most part, can be traced back to a non-degree programmer who just didn't know what he/she should have. For example, I've found linear searches through arrays where a qsort was needed, or constant database lookups where a hash table would have sufficed. When told what the solution to their problem was, I would just get blank stares. Any CS student in their second year could hammer out a qsort routine.

Even worse, almost all our architects are simple (non-degree) college grads. This means that often fixing a problem involves re-engineering from the ground up since the design was flawed. You are talking big $$$ in expenses for my company.

It's hillarious actually. Recently we've made a move away from procedural languages into OO stuff. The company figured that their developers should have a 2-week course in Java and they'd be good to go. For me, it was no problem as I've got the OO theory down pat, but it was funny to see the code that the others produced. You could tell they didn't grasp the concept of OO.

When you are doing your degree, a lot of the stuff you take may seem stupid or completely useless. I thought so too (so much so that I almost quit after 2 years of the crap). However, I've been finding that most of the theory I've taken has been useful, if not fundamental, to my job. Even the oodles of math has been useful.

I think it's best summed up as follows:

Teach a man c++, and he'll know c++.

Teach a man OO theory, and he'll be able to learn c++, java, ....

What do you want from life? (none / 0) (#75)
by phliar on Tue Dec 05, 2000 at 08:14:44 PM EST

did your CS degree (or lack thereof) have a profound effect on your real world programming skills?
Yes. I have a bachelor's, a master's and a PhD - all in CS. I got solid hands-on exposure to writing real, robust code as well as a deep appreciation of what underlies it. I got to look at (and fix bugs in) gen-yoo-wine AT&T Unix source code on Vaxes (4.3BSD). I met RMS. I wrote free software. A few years later I'm a manager and hire programmers; and even though we're desperately short-staffed, I probably will not hire non-grads.

Why? Well, because I don't need mere programmers. I want people who have a deep understanding of the whole field. I want someone who, when the marketing department comes up with a stupid requirement will recognise that it's an NP-complete problem, and will be able to suggest alternatives - heuristics that do well most of the time, perhaps. I want them to know and be able to implement efficient data structures to represent sparse matrices and AVL trees. I want critical thinkers, not VB drones.

Never forget this: if you decide to get a university education (and I recommend it highly),

  1. you will spend a significant chunk of your life at college;
  2. there is more to life than a job.
Go to college to learn and have a good time. For most people that is where they first leave the comfortable environs of home; that is where you enter adulthood. Make it count. Explore alternate philosophies and alternate realities. Be idealistic and skeptical. Pursue what thrills and excites you. There will be lots of time to work and think about money later.


Faster, faster, until the thrill of...

The Workplace and Higher Education Degrees | 79 comments (66 topical, 13 editorial, 0 hidden)
Display: Sort:

kuro5hin.org

[XML]
All trademarks and copyrights on this page are owned by their respective companies. The Rest 2000 - Present Kuro5hin.org Inc.
See our legalese page for copyright policies. Please also read our Privacy Policy.
Kuro5hin.org is powered by Free Software, including Apache, Perl, and Linux, The Scoop Engine that runs this site is freely available, under the terms of the GPL.
Need some help? Email help@kuro5hin.org.
My heart's the long stairs.

Powered by Scoop create account | help/FAQ | mission | links | search | IRC | YOU choose the stories!