HomeBlog“Maybe you should get a CS degree...”

“Maybe you should get a CS degree...”

I got this reply to one of my previous posts—which was basically a rant about how Java affects nowadays programmers.

Well, do I need a CS degree?  Let's think.  I mentioned in that post (or somewhere else) that I've been programming for the last 15 years.  Giving I'm 28, that might seem huge.  (Looks like it isn't just me—there are others who think that learning programming takes 10 years).  Here's my story.

Early days

I first touched a computer when I was seven.  It was an “HC-85”, the Romanian clone of the Z80-based “Sinclair ZX Spectrum”.  During communism it was the best you could get.

Being a kid, I was mainly playing games, but however, I was also playing with BASIC and LOGO.  I was lucky with my father... oh so lucky!  My father is a teacher of maths and computer science at a high school in our town.  I will talk a lot about him here.

The very next year (so I was 8) I joined a computer club—it was basically a the only place in our town where children could get to learn computers at that time.  (No, there were no computers in schools).  This club was free (all payed by the government) and, yearly, there was a national programming contest where the best kids from each club in the country were competing.  Two years later I went to my first such contest and I earned 3rd place.

At that club I met Alexandru Costin of InterAKT (he's about 3 years older than me).  You might have heard of him—he's a successful man now; he had a fairly big company which was bought by Adobe.  It worths mentioning that my father was his teacher during his 4 high school years.

I remember Alex too went to that contest (and many others).  I don't remember what he earned though.

I went to a few other national contests, but somehow to me that first one mattered the most.  I think I still have the prize (it was a gigantic lantern); and my parents definitely kept the diploma somewhere. :-)

Well.  Later I went to more advanced languages, such as "BETA BASIC", Pascal (HP4TM — I think this is it, but I'm not sure), Z80 assembly.  I remember I was an expert writing double-speed tape code loaders. :-)  I think this was one of the primary ways to do copy protection—using a non-standard speed to read the bits from the tape ensured that it could only be read with my loader.  I even managed to stuck the whole subrutine in a REM declaration in BASIC code—it was totally incomprehensible for anyone to look into.

You might think that loading code from tape is old-school and an useless idea nowadays, but you know what?  Modern modems that can send/retrieve data through an analogical phone line use that exact same idea.  The first time I connected to the Internet (using a 486) I was stunned about how much similar is the sound to what was on my tapes for Z80.

High school

In the high school, my father was my teacher of maths and computer science.  He's quite a tough guy; he was criticized by many for being rough with his students (to his defense, I swear that those students he was rough with fully deserved this treatment; this includes me).  He always preferred to produce few great students, rather than 30 mediocre students.

We were always at least one year ahead competition.  My father taught us Pascal, while others were doing BASIC.  My father taught us assembly language, while others were still doing BASIC.  My father taught us C++ while others were doing Pascal.

His biggest obsession at that time were big numbers.  I never understood why and I actually criticized him for spending way too much time on this problem, but: he made a program that computed 10000! (that's the factorial of ten thousand), in a matter of seconds, on a 486 DX4, 100MHz.  Got that?  I forgot how many digits did the result have—something like over 30000 digits anyway; it can be computed with some logarithm formula that I forgot.

He was also obsessed with prime numbers and had programs that ran amazingly fast; in fact I'm not sure anyone has beat him on this yet.  He should really make all this work public.

He invented a few ideas that are common nowadays—such as using base 256 to represent big numbers.  All solutions that were taught in school were using base 10 and represent the number as an array of digits.  This sucked—imagine the great performance boost when you work with a base that's native to the CPU!

He taught us all this.  No other teacher I know of has been working on real problems in class—they were all like "int numbers[10]; do qsort on them".  That's not a real problem.  You never need an algorithm to sort 10 numbers.  Another great thing about him was the fact that he linked maths with computer science.  These are regarded as disconnected things in our education system, which is plain wrong.

A consequence of all this is that most students from different high schools were weaker than us.

I know I'm supposed to talk about myself, not my father, but hear this (and you can quote me): “tell me who your teacher is, and I'll tell you who you are”.  I'll get back in a moment, now let's continue with myself.

My first big project

When I was 14 (during my first year of high school) I implemented an “American Poker II” game (similar to this one).  You know, the one you see on big consoles in bars; some people are wasting a lot of money with these games.  I did too, until I coded it—I realized how easy it was to make the machine cheat the gambler.

I implemented this game in Pascal + Z80 assembly on my XZ Spectrum (the second computer we had).  It had graphics, sound and music (created with “Wham!”).  All done by myself.  I realize that this game might seem trivial now—I think I could write one in JavaScript in a matter of hours—but back then I was 14 and I was working with a machine having 48K RAM.  Even a mouse has more memory nowadays.

I actually made a few money by selling the game to a few addicted gamblers, colleagues of mine.  They wanted it “for training”, so they actually win when they play on real consoles.  I told them “you know, my game doesn't cheat; but I could easily make it do so” :-)

This project also earned first prize in a national contest initiated by my father and organized at our high school.  Coincidentally, a few years later many high schools in the country “invented” such a contest.

The next years

That game was my last project on the Z80 architecture.  We had our revolution, we were no longer communists, so real technology enters our country.  We afforded our own PC a lot later, but I studied at my high school (where we had a 286, then a 386, etc.).  During the summer holiday, my father managed to get the school computer at our home—because he was working on real stuff where a computer was needed, such as managing the admission exams, or creating the teachers' and students' time table.

Yes he's damn good about this too; his time table program does an optimal job.  He is in charge with creating the time table at our high school for about 20 years and very, very few people complain about it.

During my end years in high school, my preoccupations started to diverge from my father's.  I was learning protected mode assembly (I was using Watcom C++ and DOS4GW), then I moved to Borland C++ 5 where I was building Windows applications.  In an attempt to help our high school with the admission exams, I created a pretty solid application to manage this—with a nice GUI, with print and print preview, etc.  I was 17.  This application earned second place at our yearly contest.

If I remember correctly, the first prize was accorded to a project created by Alexandru Costin and Bogdan Râpă (both of InterAKT); it was a voice recognition bullshit that I never understood (and never fulfilled its promise anyway)—but it was drawing nice graphs. >-)

When I finished high school, I was already thinking about myself as a C++ wizard.  I (thought I) knew everything possible about this language.  Meanwhile, a lot others were still doing Pascal.  There were a few computer science teachers in our school, but except my father, none of them knew C, let alone C++.  One of them actually came to me to help him with some problems.

College

Finally, let's go to college.  The admission was based on a solid exam which had two parts: one math exam, one programming exam.  For the programming exam you were required to give the solution in Pascal.  So I started looking at Pascal again (having not using it for 2 years at least).  Boy it look so weak compared to C.

Anyway, I join the college.  During first year (when I was a conscious student) I was remarked by a lot of teachers for knowing things that no one else did.  I was a wizard in x86 assembly.  I was a wizard in C/C++.  Some teachers even agreed I can miss classes because I proved there was nothing I could learn there.  It was around that time when I realized what a great job had my father done with us!  We knew all essentials and we knew how to learn by ourselves!

One infamous class was Visual C++.  I never understood why was I required to learn MFC (by that time I was already a fanatical Linux user).  So the teacher asks us to build a drawing application in VC++ and MFC.  I say “look, I don't even have Windows on my computer; can I build this thing with GTK+ and Linux”?  The answer was “no; we are learning MFC here so that's what you must use”.

Finally, I built my application with MFC (it's still available here) and got an A, but my belief in the education system started to erode.  The next year, the MFC class has been removed from the curriculum.  It was gone!  I learned it for nothing—anyone agrees now that no sane people use MFC.  Meanwhile, GTK+ is still there—but I was forbidden to use it for passing that class.

You see, it was such a big difference from high school!  In the high school I was learning useful stuff that I loved—and I was free to use any tool I want to solve a problem.  My father did not ever impose “curriculum” restrictions on us.  We were ahead many other students.  In the college, though, we were all required to do the same things.  I don't know, I simply didn't fit.

One year later I got employed and that's about the end of my college experience.

Irony of our education system

To put pieces together, now, let me tell you a funny story.  My father is not allowed to teach computer science!  That's according to the law.  Why?  Because the CS degree that he has taken 30 years ago, is no longer regarded as a computer science degree.  With the communism fall, a lot of rules have changed.

Indeed, 30 years is a lot of time.  My father did not learn C++ in college.  He learned it by himself.  Except for the solid theory, nothing he knows now could have been taught in a college 30 years ago.  But theory changes so rarely—and all other things can be learned as you go!

It was indeed more biased to math than to computers, but that's only because those were the times—a computer was as big as the whole laboratory!  He sometimes quoted a smart man whose name I forgot: “if you get a math degree, you will be able to do anything else!”.

My father recently started using HTML, CSS, Perl, Apache, JavaScript—and he learned all this by himself! (well, with just a little help from his son).  He runs a website which was primarily dedicated to the high school where he works.  And he's over 50!  Show me one other teacher in Romania that is still capable and willing to learn new things!

So according to the law, my father now has two options: either quit teaching computer science, or do it for half the standard salary (which is anyway miserably low)!  That's amazing, I'm telling you, I can't understand why people even send their children to school.

My father wrote 3 books on programming; he wrote countless articles to the math gazette and to “GInfo” (a gazette on programming).  He produced a few great students, and others are on the way.  Yet, according to the fucking law, he can't teach programming.  That's the country I live in.

He sent a memorial to the Ministry of Education.  He didn't get any reply the first time, so he decided to send one again after about a year.  The second one got a reply within a few months, and the reply was negative—all his work in this field is not recognized, because, well, he doesn't have a recognized computer science degree.  The sad truth is that he does have a computer science degree, but laws have changed in between.

The fate of a student

Romanian education is in a vicious circle.  The salaries of teachers are miserably low—so naturally, great students (which are very rare) chose to work in some other field rather than education.  So, those who chose to become professors are the weak ones.  They produce weak students; this, consequently, results in even weaker teachers.  Meanwhile, great teachers are not allowed to teach.

After the communism fall, our education system is changing every year—teachers are confused, as well as students, as to how things will go.

For example, when I started college it was supposed to take 4 years + an optional year for master.  Now it takes 3 years + one for master.

Another example is that MFC class.  It was obviously useless, but I had to take it.  Now it's not there anymore.

[ Politics: Microsoft has sponsored a few of our laboratories.  We have great computers, but we're required to run Windows on them.  We're also required to teach students MFC, .NET and other Microsoft technologies; in those modern laboratories we're not allowed to run Linux, Java, nor anything else that competes with Windows.  We're controlled by those people who give us money—which naturally lowers the level of expertise we can get. ]

And the most horrendous thing: there are no more admission exams!  You can join the college based solely on the grades you took in high school.  This sucks because: (1) as a former communist country, corruption is still at high levels here and (2) in high school you learn very general things, while the college is supposed to be very specific.

I had to learn biology in high school, even though I've got nothing to do with it during my two years of college (and during the rest of my life for that matter).  However, my 10 years old biology grade could now influence the fact that I am or not admitted to a computer science college!

If I wanted to join a computer science college right now, I would compete with guys that knew that their high school grades will help.  I didn't know that—because during my high school time, there were no such rules.  My high school grades are low—I never knew I'd have any advantage if they were high.

Whole generations of students have been sacrificed in Romania for the purpose of “reforming and modernizing our education system”.  The result?  Now we suck.  During communism, we didn't.

All this results in more confusion and even less interest.  I sometimes feel that someone intentionally tries to imbecilize the Romanian nation.

I have many former colleagues that did have the patience to waste 4 years to finish their degree.  Many of them are working for software companies, but most of them have pretty low wages.  Others, however, left country to go to Italy for seasonal work.  Others are cab drivers.

And none of my former colleagues (well, no one that I know of) produced anything interesting in a computer-related field.  By contrast, however, some of the most intelligent programmers I know are self-taught and did not have the patience to finish a CS degree.

It doesn't really matter if you have a CS degree—it's not something to decide how the rest of your life goes.  What matters, for any kind of job, is determination and a sense of happiness doing it.  I'm happy programming and perhaps the greatest thing that my father taught me is how to learn by myself.  I do programming for a living and I'm not complaining about how much I earn.  I also can tell you, with no shame, that I'm one of the best DHTML programmers nowadays.  (Yes, I'm even better than my father.  Such a great teacher he is!).  And this is the platform of the momentum.  When it will change, I will adapt—because I have the power to adapt.

So do I need it?

Tell me, honestly, if you have read all this: do I need a computer science degree?

Comments

  • By: Luis FurquimAug 07 (23:17) 2007RE: “Maybe you should get a CS degree...” §

    I live in Brazil. we didn't have communism. But
    we had military government for about 20 years.
    And I notice the same imbecilization process in
    our education system year after year since the
    end of the military government. Maybe military
    governs implement education systems targeting
    better skilled professionals. It's just a tought
    I had reading your history.

    The truth is that our education system were better
    before our military govern. But after the end of
    the military period it got a really horrable fast
    degradation. If we draw a graphic it should
    appeared as an abiss. And the sense is that we're
    falling in it...

    So, what people can do? The system is a giant
    machine in such a way that is far away from our
    powers to make any kind of change.

    But here is the Internet! I used to buy many
    CS books (imported ones), but now there's
    nothing in the books that I did not find in
    Internet months or even years before! Now
    my teachers are found in the web! You said
    "I also can tell you, with no shame, that
    I'm one of the best DHTML programmers nowaday".
    I really don't know if this is the truth, but
    I'm sure that this is at least very close to
    it! The fact is that I have many bookmarks
    pointing to pages from where I learn. But
    your blog isn't in my bookmarks. Your blog IS
    MY HOMEPAGE!

    So, as your father, you became a teacher and
    the world is your classroom. There's no selection
    process to study in it, everybody is welcome.
    There is no grade/certification to earn with
    you, people come to you to earn the knowledge
    itself, nothing more, nothing less!

    So, thank you for all the words you have written
    here, they were and are very precious.

    Att
    Luis Furquim

  • By: Ángel VelásquezAug 17 (07:21) 2007RE: “Maybe you should get a CS degree...” §

    Mihai, nice too meet you. I am from Venezuela, a Country that seems that will go to a Communism way or something.

    First of all, i like all of your works, really i think that you are one of the best web developers that i ever see, in fact, i know that i have not see all your work pieces, but the work pieces that i have seen, are cool for me :-).

    The fact is, that sometimes the fact to have not a 'degree' qualify us lower than other persons who have it. Just for the fact that exist an University supporting him degrees.

    My best advice is, that if you can study, just do it, specially because you have talent, and you are up from that degree, and.. try to don't see that effort like a 'waste of time'.

    I hope you can understand what i want to say.

    Sincerely

  • By: Justin BakerMay 10 (01:38) 2008RE: “Maybe you should get a CS degree...” §

    I am currently 15 and I just really got into learning more about computers at the beginning of 2007. I have self-taught myself every thing, beginning with HTML and CSS to simple Javascript. Now I am currently learning PHP to manage pages and make it easier for me to learn other languages. With the information and documentation that there is available, being self-taught is quite easy.

    I say you don't need one.

    • By: mishooMay 11 (11:50) 2008RE[2]: “Maybe you should get a CS degree...” §

      Well, I'd lie if I told you I'm *completely* self taught. :-.  As I outlined in my missive, I learned a great deal of things in the high school, thanks to my father, such as essential algorithms, C, assembly language, etc.  Even if I don't use C and ASM much these days, it was an important phase of my training.  If you don't understand how the machine works, you won't be a top programmer.

      Also, I don't recommend you to start with PHP... it'll teach you bad practice.  It worths spending at least an year or two with C/C++ as it will give you the discipline you need to program in a more "forgiving" language, such as JavaScript (or even PHP).

      You're young, no need to rush into current "top" technologies (which could be ephemera).  Make sure you start with the basics and get them right; you'll see that it then takes days instead of months to learn PHP, and you'll be a better programmer than many who claim "years of experience" in PHP.

      Read the hacker howto [1] and be prepared to spend a few years hard working... ;-.  It's worth it.  I wish you success!

      [1] http://www.catb.org/~esr/faqs/hacker-howto.h…

      • By: Sean UttMay 31 (03:05) 2008RE[3]: “Maybe you should get a CS degree...” §

        I would also be lying to say I'm _completely_ self-taught. 15 years ago at the tender age of 34 I was working on a 2 year degree in electronics that included a one term course in 8086 assembler on the IBM XT PC. For my "Tech Fest" project that term, I built a simple resistor ladder D/A converter that attached to the parallel port and proceeded over the next two weeks to write a slightly less than 64k wavetable lookup synthesizer in assembler that played an octave and a half of notes (shift in and out of turbo for an additional octave) with 8 different voices to choose from. Because DOS only slowed things down, the application interacted directly with the BIOS and the hardware, effectively acting as a simple OS. It was restricted to less than 64k in size because the freeware assembler I was using could only make .com files and .com files were limited to a maximum of 64k in size. When reps from Intel came around to act as judges, they wondered why I hadn't used a sound card instead and babbled about what would later become USB.

        Later after I got a job doing tech support for a large company, I enrolled in a C++ for windows correspondence course. The computer wasn't shipped until you had paid off a certain number of courses, but I was sending them back as fast as they sent them, and reached a point where code had to be written and work but I had no computer yet. So I wrote the code, sent it in, and completed the course with a A+ before the computer even arrived. I ended up loading Linux on it (0.99 pl7 whooo!!!) starting the local Linux user's group and then an ISP in the garden shed in my backyard, using the computer I got in the course. That was 14 years ago now, and the company continues today doing web applications.

        I have had many people come and go who had degrees of many types, including CS, and have known many people with CS degrees. I know that having a Bachelor's in any subject will increase your job opportunities and the salary you will be paid, regardless of whether or not you can perform at a higher level than someone without the degree. The sad truth is that companies don't have any way of determining competence, and so they rely on superstition. The reason that an advanced degree is an indicator of employability for them is that the modern University system is as absurd as the modern workplace. Getting a Master's Degree in any subject shows that the recipient has a high level of tolerance for absurdity and inconsistency. It really doesn't matter if you graduated with honors. Just that you graduated.

        Once you get to the workplace, you will find that decisions are made using arcane rituals, and justified using what passes for logic. You will be told that you are getting a raise but not getting promoted because you haven't performed up to par. You will feel that they must have really high standards because in your first year you became qualified to take support calls for every single piece of equipment they have. Later when you and your manager transfer to other departments in a different division he will come to you and apologize because he had to deny you a well deserved promotion because they "ran out" of promotions.

        This is what your CS degree prepares you for. So if your career path is to wake up one morning as a monstrous vermin, get your degree now so the shock will be lessened when the alarm goes off.

        -- Sean

  • By: Justin BakerMay 11 (14:43) 2008RE: “Maybe you should get a CS degree...” §

    Ah yes, I've looked over that page before.
    The only reason I am learning PHP is to manage a website with a friend of mine.Everyday is a new day for me to learn new stuff, and I really like doing this stuff. I'll definitely start learning C/C++ soon.

  • By: Justin bakerDec 11 (18:10) 2008RE: “Maybe you should get a CS degree...” §

    Looking back, I can see why you recommended against learning PHP. I have gone on to learn cleaner and better designed languages such as Ruby and Python and soon Java. Thanks for your advice months back!

  • By: Sergey ChernyshevJan 01 (00:48) 2009RE: “Maybe you should get a CS degree...” §

    Hi Mihai,

    I don't know how I came across your site, but when I'm reading this post, I feel like I'm reading about my life with one exception - I managed to get CS degree.

    It took me a while to do so - 8 years total and 3 tries, but I'm happy that my parents and my own brainpower were strong enough to get me through it.

    My father is a biologist and my mother is a chemist and I didn't have a math/computer guru to teach me, but I got into computers early and I think people considered me the best in it during high school and college, but I also had my business after I left my first college and worked as development lead in a small company during my last (and successful) attempt at it.

    I'm not a low level programmer as you are and I realized I'm not interested in being one when I saw two of my friends being so much better at it, so maybe my experience is different and my motives will not work for you - but when I was going to college and painfully studying during bullshit classes and listening to clueless teachers (most of them were), I came up with the formula that amount of information that is worth of going to college for is about 3% from total, but it's information that you will not get anywhere else and will most likely never get to through your regular work experience.

    Most of this information is about how big systems operate in the industry those teachers do work with (they need money too - teaching is not paid good in Russia either), or about problems that are being solved in one industry in the way that another industry is approaching from different perspective or some scientific approaches that might be different from mainstream (not only commercial mainstream like MS/Oracle stuff, but non-commercial like MySQL stuff for RDBMS example). Even not very smart teachers have experience that they were gaining by years of work, even in a worst college there are people who are worth listening on some topics, even most boring stuff (like the way college administration is organized or where teachers work on the side to feed their kids) - all of this is information that's very hard to get without going to college and studying.

    Once again - I speak from my own experience and those two friends of mine went different ways - one of them finished first college straight (we actually got into the same college and faculty originally) and another one never finished college (he was the one we started business together and made second attempt at getting a degree) and both are great people in their area (first one is a great system and application developer, working on Linux and second one great sysadmin with knowledge of networking and Linux) ... so my experience might not work for you, but I think it's worth it even if you do not realize you need it during college and in first years afterwords.

    That said, it's not the only way to get the same knowledge and experience, but you need to be much more proactive in learning it and it is quite hard when you're one a path of your career.

    Hope this post is useful ;)

    Best regards,

           Sergey

  • By: Paul GreshamMar 02 (08:04) 2010RE: “Maybe you should get a CS degree...” §

    Great article.

    At a French Bank in London, we had a graduate programme. HR interviewed 5 or 6 thousand candidates. They chose 6 (yes six). I had this one guy join my team, he was/is a great programmer and had sat at home for a year looking for a job ... It's not just the education system that wastes time and money but sorting through the chaff afterwards too.

    So, in my opinion, it doesn't matter whether you get the degree or not, What matters is that you can do something of value and then you make the effort to get yourself in front of people that need those skills.

    I also started at age 11 with a ZX81 and left school when I was 15. My father is a diesel fitter/engineer, so no such luck to have a mentor as you did, but at that time we had popular computing weekly, which published buggy programs that I fixed.

    I actually didn't know what a college/university was, I thought it was for the government to keep unemployment figures down whilst young people look for jobs.

    Personally I think we should bring back apprenticeships, give young people some real experience and a real chance and remove an expensive administrative system and replace it with something that helps and works.

  • By: bachelors degree programApr 08 (10:42) 2010Thank you §

    Thank you for this very useful information.

  • By: Jonas NielsenJul 11 (16:34) 2010RE: “Maybe you should get a CS degree...” §

    The world is not black and white and knowledge will not only be created and evolving in the world of academics and universities. The internet has been one of the reasons here but local communities as well as curiously people have also contributed to this. In other words a degree is not always useful and necessary. It can be a great way of starting but certainly not the only way of starting in this business. Hence that some people with degrees often make one big mistake here; They believe that only people with degrees know their stuff... That is obviously not correct. Nothing stop the common man with a high school diploma from learning from the internet, friends and books he buys from on-line stores and in bookshops. This is the real truth of the world we live in. Some arrogant people in some offices at some universities might have missed that hard fact here, but huge firms have defiantly not missed out this important factor.

    Written by a Computer Science student from Northern part of Europe.

  • By: OisínAug 20 (05:20) 2010RE: “Maybe you should get a CS degree...” §

    That's a strange and rather closed-minded comment they made. Last I checked, there are no Java degrees, and CS is vastly broader than Java. Many computer science courses do not use Java at all (obviously, any CS course designed before Java existed or became popular).

    Not only that, but many (good) CS courses don't even teach about closures - including the one I took. The closest we got to even first-class functions was the concept of function pointers in C, interrupt routines in assembly and maybe a passing hint in the compiler construction subject.

    Don't get me wrong, getting a CS degree was one of the best things I've ever done, but it did not teach me everything there is to know about every aspect of computing in general or programming (I also started learning many years ago, when I was about 10 years old with the horrible C64 Basic).

  • By: Andrei MateiAug 23 (03:03) 2011RE[3]: “Maybe you should get a CS degree...” §

    That's a lovely story, Mihai. Really enjoyed reading it. Thank you for sharing it.

Page info
Created:
2007/08/02 13:21
Modified:
2007/08/07 02:06
Author:
Mihai Bazon
Comments:
15
Tags:
life, programming
See also