“Computer Science” Versus the Real World

Why did I get into a master’s degree program? I had hoped to learn new technology, learn about the insides of existing technology and to learn and practice some advanced programming. I have been in the program for about two years now, and I can safely say that every bit of my education that has to do with recent technology, has been from work that I have done outside of school or at least outside of classes taught in school.

That is a sad revelation. I am on the second highest level of Computer Science education possible. I have learnt little in school. Where are the professors and classes that pertain to real world computing? Why are all the gurus and technology innovators outside of educational institutions? Where are the Mark Pilgrim, Phil Ringnalda, Joel Spolsky and Jakob Neilsons of the educational world? Why are we teaching classes about Ada and Cobol instead of classes on (developing) programming standards and .NET? Let me give you some examples.

I only signed up for classes which sounded interesting to me. Two of the most fun classes were advanced database systems and wireless networking. However, if I had stuck to the information taught in the class, I would have learnt very little of present technology. In our wireless networking class, we learnt about call centre routing and advanced prediction systems for wireless networks. We were told that these were the basic constructs of wireless networks and it was really important to learn before jumping into contemporary technology. I played along till there were only four weeks left in the semester. We had not talked about any present technology yet. I finally decided to make up my own project so I could learn something of consequence from the class. I did some work on 802.11b and Bluetooth co-existence problems. But where is the beef?

I could go so far as to say that if I had worked with Phil Ringnalda, Joel Spolsky and Matt Mullenweg for the past two years (instead of going to school), I would have learnt more and would be a much, much more capable computer scientist. (I already have learnt lots from them just from associating with them) My physics education tells me (and furiously prompted me) to work with the cutting edge of technology. I had been pushed to find new ideas to explore and forced to think outside the box. I worked with three seperate research projects while at The College of Wooster. All three of them dealt with cutting edge technology either from NASA or from OARDC. I was learning about things which we talked about and heard about everyday. I have compeltely missed that in my present education.

There is another arguement often used. Higher education is designed to be supplemented with real world knowledge and the more you learn outside, the richer your own educational experience. That is a load of crock coming from people that have stopped learning themselves and are unwilling to work any harder to learn the new technology and adpot it in their teaching. If a student is forced to learn everything that is worthwhile on their own time, what is the point of going to school? There needs to be some serious rethinking of education and educational objectives!

So, are we producing truckloads of “dumbed down computer scientists” (with arcane ideologies) who are supposed to lead the technological future of this country and of the world? Are computer professors and scientists worried about the usefulness of their work? Am I spending oodles of money to just get the “masters degree stamp” on my forehead? Is the computer science profession on its way out? To be replaced by the free-thinkers and self taught gurus?

I might be jaded because I went to school that is really short on money and does not have a very good computer science program. Are other Universities the same way?

13 comments

  1. Travis Berthelot says:

    I find lab experience is the best tool for problem solving.

    The process:

    1. Read A Little
    2. Solve Some Small Real World Problem In A Lab
    3. Goto Step 1.

    The going to class thing is about socialization. It is great time to network with professors, staff, and fellow students. This is something that is just as important as knowledge and problem solving.

    Read = Knowledge
    Lab/Testing/Problem Solving = Problem Solving
    Class/Socialization = Networking/Find A Job/Find Friends

  2. Quiet says:

    AMEN! Just goes to show that college is all about jumping through hoops just to get a degree. They focus more on that, then on the learning itself. But oh well at least you get the degree.

  3. dennis says:

    I had a similar outlook when I was in university. The theory really is the important part. What you’ll find is that every company or organization has their own unique style of implementation and development process, so having a structured background is important.

    The difference between academic and corporate software worlds in terms of process, attention to detail/quality, and timelines are almost incomparable. Unless you land a research position, you’ll inevitably spend most of your time working around other people’s problems.

    If nothing else, use the time to learn to be adaptable and creative in problem-solving.

    I like the new logo, by the way!

  4. MtDewVirus says:

    I couldn’t agree more! I could have passed nearly every one of my CS classes at Saginaw Valley State University without ever showing up. All you have to do is read the book and take the test. The profs simply regurgitate the information from the pages and don’t add any real knowledge in. So basically I wasted 4 years going to school so that I have a piece of paper saying I could pass their stupid tests. Don’t even get me started on how I think tests are such a dumb indicator of someone’s ability for something such as programming, networking, etc. Why not solely grade on projects and give students worthwhile information that they will actually use in a job somewhere?

  5. Mark says:

    My opinion is slightly different from yours. I believe that what you are looking for is a technical college and not a 4 year engineering degree.
    I agree with some of the items that you mention, but instead of making it completely practical or completely dependant on book reading, there needs to be a contemporary stance to education. If everything that is taught in class, is taught from printed books, we have to remember that in this digital age, by the time something is printed in a book and the book comes to be well known, that subject and that knowledge has already become old and needs to be replaced. So, in order to keep pace with working technology that is contemporary, there needs to be a further influx of electronic methods of learning and information absorbtion.
    :)

  6. MtDewVirus says:

    Oh…I agree, learning everything from the books isn’t what we need…but those doing the “educating” think otherwise. We need a more hands on approach.

  7. David Gray says:

    I went to a school with an excellent computer science program (I will not say which). We had classes on algorithms, concurrent programming, distributed programming, etc. If we had had a class called “bluetooth” or “802.11b” I would have laughed, then been disgusted. A “class” about .NET belongs in a computer science program as much as a class about a particular calculator belongs in an accounting program.

    It reminds me of the saying “Give a man a fish, and he eats today; teach a man to fish, and he will never go hungry” (paraphrased). Sure, classes about current technology may serve you well today, but without the fundamental theory you will eventually go hungry.

    – Dave

    • Jon Spencer says:

      I disagree Dave. If I am an accountant and go work for a big company…it doesn’t matter what calculator I use, 2+2 = 4. In computer science, once you leave academia and go to work for a company, there is a 90% chance you will be doing programming in .Net or Java, and using some flavor of SQL. And while 2+2 is still the same here….teaching me how, when, and what order to press the buttons on this non-command line calculator is a BIG learning curve.

      Given that Microsoft has programs like Academic Alliance, Dreamspark, and such….it is ridiculous that in a master’s program, I am still creating command line programs using g++ for my ‘advanced’ classes. I don’t expect to walk out an expert in WPF, or even MFC…but walk out after 6 years of computer science education and never once seen Visual Studio used in the classroom, much less C# .Net, is amazing. Would it be too much to expect at least one semester where theory meets the real world? Spending 3-4 months covering what Microsoft, Sun, Oracle, etc. have brought to the programming table would be useful. COM, T-SQL, J2EE are a few of the basic concepts that come to mind.

      And yes, I know computer science doesn’t mean a programmer…but since the majority of job are programming, that is what you’re looking at, unless you get a job with admin on the back end. And even then, you will probably still be writing some code (scripts).

      But take for example my 5000 level DB class. Guess what…it was a shared class with undergrads! OK…so my college makes me spend twice the tuition to learn again the exact stuff covered in my undergrad class. Is it really necessary for me to learn relational algebra…or how useless 4th and 5th normal form is…when the job market wants you to be a DBA, or at least have a clue what the difference is between a clustered and non-clustered index. Knowing 3rd normal form is important, but so is how to create an index in Oracle or MSSQL is also important.

      I agree with Nick below…but I would be happy with a 80/20 or even 90/10 ratio of theory to application. Honestly, the best information, the best education I have ever received with the most understanding of the theory, came from those PhD prof and master’s instructors that spend some time in the real world. By the end of the first class, I can always tell the profs that got their PhD and then started research/teaching, and those that actually worked for a living. The latter ones have always explained how and why the theory is important, and given an understanding why theory one outlived others.

  8. Mark says:

    Surely I agree with you, any educated person would agree with what you just said. However, there needs to be a balance. Concurrent and distributed programming are useful to understand the fundamentals. But the fundamentals are useless without knowledge of how they can be used.
    If you are looking to write code in a cubicle for the rest of your life, courseware in the basics of programming might be for you. However, in order to appreciate, learn, understand the push the limits of technology, you need to be aware of what technology is available.
    Please do not consider this a retort, but rather a plea to look over the fence. What might have worked for you (I dont know how long ago you were in school) might not work for other people with other goals. There needs to be a choice in education, not a pre-determined ideology that is set in stone.
    A few questions for you to ponder upon. Do you know whether you code better in .NET or in VS6? If you do know the answer, how much experience do you have in both languages to prove your opinion? How much time was wasted in productivity in order to garner that opinion? Do you know if Cobol is capable of generating an SHA1 hash effectively? Why not? If you were to improve upon the nested queries of MySql 5, what would you improve? Tell me that you knowledge of algorithms and concurrent programming is going to help you make the better decision.

    “Give a man a fish, and he eats today; teach a man to fish, and he will never go hungry” That is a BAD analogy.
    That is like saying that particle physics is going to be taught to the granularity of atoms and molecules. The student should be able to figure out nutrinos, quarks and leptons themselves once they get into the research positions.

  9. Jason says:

    Well… At least the computer scientists will be able to teach the “History of Technology”.
    Really though, does anybody know is NC State also sucks when it comes to modern technology? I am planning on pursuing a computer science degree there, then going to Florida Tech, MIT, or Carnegie Mellon for my master’s.

  10. IST Student says:

    Computer Science (CS) involves the study of the internal workings of the computer, programming, systems programming, networking, algorithms, etc…

    It seems that you were very dissatisfied with the CS program at your school. In reality, I am in a program called Information Systems Technology (ISTE) where we learn Information Systems, Information Technology, and Computer Science concepts. For instance, in our Introductory Programming class, we learn Programming History and Design, as well as a high level programming language (in my case Visual Basic .NET) We focus on concepts and theory, as well as the \”real-world\” applications. In CS, you are limited to learning the internal aspects of computing, and mostly shy away from applied concepts.

    IST is real in terms of its program. You learn how to fish, and eat the fish, too…

  11. I agree with \”IST Student\”

    If theory is not what you are interested in, maybe just major in IT or CIS.

    The key is, if you can learn CS, then you can solve ANY problem. I majored in CS, and when I want to learn a new technology, I just go to Barnes and Noble pick up a book, read it, then download some software and experiment. I always find that its based on the same theory i\’ve already learned, just combined in different ways.

    I don\’t think master\’s degree CS student really needs a class to learn a new technology.

  12. Nick Yeates says:

    The authors way of thinking is that schools dont teach the new technologies, E.g. the applied stuff like a class on .NET . While in undergrad, I used to think this same thing too, until I have been in industry now for a number of years. Tech college such as places like DeVry, etc tend toward teaching particular technologies: Windows server, CISCO training, wifi 802.11, .Net coding. Real programs do not do *just* these for a good reason. Think about the long run. If you are taught the latest greatest name brand techs, web interfaces, programming languages, etc, but have not been taught basic theory, you will get by in the short run, but will not adapt to new problems and solutions and languages in the long term. Its a pain in the butt, but learning CS and Information theory is best for building long term problem solving skills. I really think that a 70/30 or even 60/40 rule for Theory/Specific Implementation is a good balance. More theory than specifics, but you need both.

    Food for thought.

Leave a Reply

Your email address will not be published. Required fields are marked *

*