What would an ideal computer science education look like?

I would appreciate comments on a draft article.  The topic is “what would an ideal computer science education look like?” (for a college-age person hoping eventually to get a job as a software engineer rather than staying in academia)


The draft is available at http://philip.greenspun.com/teaching/undergrad-cs but please comment here.


Thanks in advance.

67 Comments

  1. Naum

    October 7, 2004 @ 6:47 pm

    1

    As a CS degree holder, my feedback regarding CS degree would be along the following lines:

    * Concepts, not languages and specific platforms. It seems too many CS graduates these days, at least IMV and XP, are filled full of langauge (C++, Java) knowledge but deficient in the study of algorithms.

    * Data structures and data persistence in a multi-platform, fully interconnected world.

    * Ramifications of office and desktop software and how CS pertains to the average user life.

    * More study of ethics and interpersonal relations, managing global teams or participating in global efforts.

  2. Anonymous Coward

    October 7, 2004 @ 8:49 pm

    2

    The way to make students learn others code is to have them grade each other’s work. When I was a teaching assistant at Berkeley, I tried to make sense of every fragment of code so that I could give partial credit to the struggling students. Incidentally, the two football linemen in the “Lisp for Poets” class did relatively well and were drafted into the NFL a couple years later.

    So now you know: some professional football players are decent programmers. We should teach programming by promoting football.

  3. Josh

    October 10, 2004 @ 1:49 pm

    3

    I am a recent graduate of a computer science program at a liberal arts university. In our program, we never had a software engineering concentration in our studies. The goal of the curriculum was to establish a broad-based foundation of understanding about the academic side of computer science. The belief was that it is much easier to pick up software engineering principles outside of school, than it is to pick up computer science principles as a software engineer.

    This approach certainly has drawbacks, as you mention in your article. Developers graduating from this program are less prepared for their first job than graduates of other programs which include more work experience. I certainly could have used experience working with groups over the long term on the same project — and experience interfacing with people from other parts of a company, in order to fulfill a business goal, not an assignment.

    On the other hand, I like to think that my broader based education will be worthwhile in the long run (assuming a graduate like me does get that first job eventually). It took me longer to ramp up to full productivity initially, but with a firm understanding of computer science, I hope to be able to learn new skills more quickly than if I had a software engineering / real world based education.

    Will a graduate of the school you propose, Philip, be well equipped to take control of his or her life, and continue to learn and adapt throughout life, or will the graduate be only equipped to act as a cog in the programming wheel of a corporation? What happens when the work world moves on – will a graduate be equipped to adjust to the demands of a changing work environment?

  4. Philip Greenspun

    October 12, 2004 @ 11:12 pm

    4

    Josh: I’m not sure where in my article it says that computer science principles are going to be dumped from the curriculum. The goal is to teach all of the same principles and theory but do it in the context of open-ended projects rather than straightforward problem sets. Both students and faculty will have to work a bit harder at the school that I propose but otherwise it is pretty much the same old same old. For example, instead of taking a class on public-key crypto you might build an electronic ticket system and, as a subtask, have to learn all the textbook public-key crypto principles.

    It is not about chucking the principles. It is about students who’ve learned those principles while acting as engineers instead of having those principles spoon-fed to them.

  5. Matt

    October 15, 2004 @ 6:33 am

    5

    How can a graduate be equipped to adjust to the demands of a changing environment when they’re by definition unequipped to meet the demands of the _current_ environment?

  6. Andrew Simons

    October 16, 2004 @ 9:59 pm

    6

    I am just finishing an undergraduate degree in computer science at Stanford and I have spent quite a lot of time thinking about this issue. I am from Bermuda and was involved in a project in which Stanford wrote Bermuda highschool computer science curriculum (see bermuda.stanford.edu). Of course that is very different from a undergraduate program.

    In my experience, one of the deciding factors in undergrad CS is how well someone can adapt to the geekiness of it all. Very little of this is taught. Let me be specific. If there were classes which taught:
    CVS, VNC, SSH, Linux stuff and so on, students would run into so many speed-bumps while learning to program. I have found that classmates have a strong grasp of the various technologies surrounding CS, the developer culture, do much better. For instance, it is much easier to understand an OS course if you are familiar with process ids and forking threads. At times, I have felt completely disconnect from real technology when writing programs for class. Just a few thoughts.

    Andrew

  7. Brian Kates

    October 17, 2004 @ 12:32 am

    7

    The best parts about my CS education at the University of Manitoba (Canada) were the following:

    1) Electives! A few years ago the department put a cap on the amount of CS and math that students are allowed to take. This was in response to CS students graduating having only taken CS and math classes. The product of such an education was a non-rounded individual lacking the much desired “soft skills”. The new rules dictate that at most 3/4 of my classes can be CS and math. In response to the change, most students have pursued minors in unrelated fields, ranging from (most common) management to philosophy to film studies. On top of my impressive array of CS knowledge, I am graduating with knowledge of accounting, finance, business administration, economics, psychology, and political science. I like to think that as a result of taking non-CS electives I am fairly well rounded individual!

    Remember, there is more to being a being a software developer than cranking out code. Any one (including people in India willing to do so for much less) is capable of writing code. To be successful in the industry, one must have the soft skills.

    2) Co-op! The U of M CS program has three co-op work terms. I did all three of my work terms with North America’s top financial planning software company. I spent one work term in the general development group cleaning up the UI, and two work terms in the Enterprise Architecture group working under the guidance of the company’s software architect. As challenging as an academic term is, it is nothing compared to working with the industry’s top talent. After twelve months full-time and four months part-time with this company, I have a very impressive resume. Not to mention a guaranteed job with a booming company.

    Just a few comments off the top of my head….

  8. Jeremy Conn

    October 20, 2004 @ 6:10 pm

    8

    I am currently a striving undergrad (striving against my utter lack of study habits out of high school) and, as such, I have a pretty fresh idea of what I would like to see in the curriculum. As the paying customer for this education, it is my opinion that *I* – not the industry bobble-heads – am most qualified to determine what should and should not be in the curriculum. On the other hand, I am “only” an undergrad, and lack much of the experience that you and other successful grads have acquired – in which case you may be inclined to discount what I have to say.

    My first observation of public institutions and programs of study for computing is what I have already mentioned. A lot of effort goes into seeing what IBM, MS, etc. want of education in terms of the worker-units it produces. Almost no [real] effort goes into determining what the students (we who are paying for the education) want from their education. It is, after all, *my* education – not IBM’s.

    The second related observation is that there is _way_ too much campus access granted to these companies. No matter what public university I go to, I have a feeling that, at least as far as CS, CSE, and IT go, I will be attending the University of IBM, or the University of Oracle, or the University of Microbrain. Not acceptable. Period. Education and business should be separated by a law. A law which first and foremost should eliminate these disgusting corporate payoffs – er, sponsorships. The involvement of IBM and MS in public universities is very discouraging to me. I do not want to work as a code monkey for a giant crap factory. Work is not the goal of university.

    Other observations:

    1) I find professors who know technical details but do not know how to organize a class – these are professors in what way exactly?

    2) I find professors who have never worked in the industry, and really don’t have implementation-level knowledge, yet are excellent instructors – while this is far better than the problem mentioned above, we need to keep these professors outside of classes on such subjects as software engineering.

    3) There is no mentorship. What else is the faculty for except to be mentors? If a lecture is all there is, I could go to the library and read a book.

    4) Problem sets are either too simple and easy, or too time-consuming and equally easy, or completely out of the reach of my present level. The words optimal challenge zone come to mind – but apparently not to curricular planners.

    5) Despite over 40 years exposure to computing as a course in one form or another, universities still haven’t recognized the difference between computer science, computer engineering, and computer technology (my term for IT). These are different disciplines within the same field. If I went into engineering, I would not meet the similar difficulty to distinguish between general mechanical engineering, civil engineering, and aeronautical engineering. 40 years is an awfully long time – let’s get it together already.

    5) Perhaps this is not the case everywhere, but I’d like to point it out anyway – in classes which lend themselves to lecture format, let’s separate lecture from recitation from office hours. When I pay for this education of mine at public school, I do not need to listen to Billy Ray’s problems with installing Linux. After class – not during. “Interactive classes” for lectures in public (which is to say, not overly-selective) universities are a bad idea, serving only to encourage haphazard and disruptive conversation. Many universities get this right. Questions are for after class, during office hours, or in recitation/tutorial – not in the middle of a well-timed, dense lecture. Again, let’s get it together already.

    6) It is an amazing frustration to see professors who are unwilling to learn new things – most of all professors of computer science/engineering/technology. Fix this, please.

    7) Java/C/C++ is not *the* programming language. There is no reason that a programming language choice in a curriculum should ever need to be changed – education is precisely the place where a PL/I (i.e., a language which offers all things to all people) could be of some benefit. On the other hand, instead of sticking to one language, one could teach with many. The problem is, when IBM interviews us they want to see depth of skillset rather than knowledge – this is the tail wagging the dog. If IBM wants me to know something, that’s what OJT is. My education is for education, not job training.

    8) Undergraduate research. This is the proper forum for job training in education. Most universities that offer such undergrad research only offer it as a check-in-the-box for a survey form to show to people, saying “we have x, aren’t we great” – no you’re not great, you’re worse than useless. What we learn about the job in this job training is that most of the time we sit around doing nothing – nothing, not even thinking – because the research head won’t tell us what it is we are attempting to accomplish, and won’t support independent effort. Three months for naught. And so we already hate project managers. Well, ok, maybe this is good job training, but you see my point.

    9) Homework is haphazard. Sometimes there is none. Sometimes a ton. With little or no concern for the time that must be spent in other courses. It seems that professors dawdle and dawdle in the course, only to assign a stack of work at the last moment in order to catch up. Not the right way to go about catching up, but….

    10) …that is still better than leaving out a solid chunk of what we were supposed to cover in the course. When this happens we get to operating systems having only ever been exposed to Java, and now we need C, even though we were supposed to get a transition in some programming course along the way to aid the process.

    11) Then the course in which we need to catch up is a good candidate for a two-semester course, but they decided to “save time” and condense it, so now even those of us who know what we missed begin a tough course lagging behind because the professor is forced to do some “review” which was of course unplanned and therefore inefficient, and when midterms come along we have covered all of about 1/10 of the course content, but it still will be on the exam – or, even worse, passed over.

    I would like to comment on this notion of group projects. From my viewpoint, this is a bad idea with our current education system. Why do I want to entrust my grade – even partially – to someone I have either never met, or have, and know to be less able than I? I mean, I realize that I would have to work with such individuals, but then I am getting paid, and if the project flops, the boss has only himself to blame for hiring such people, but in school there is no boss, and I am not being paid to deal with stupidity – and on top of that, I am earning a diploma – not that _we_ are earning a diploma – *I* am. Very unfair – life isn’t fair, you say? Well, when life is unfair and I have paid for fairness, I sue your butt into the dirt – to make it fair. Let companies pay for this in-group training, and on their time, not mine – they stand to benefit, they want it, they pay for it.

    There are many things lacking in many ways, but I think the majority of the problems could be solved by recognizing the difference between the three different disciplines in computing, altering the programs to suit such realization, and then allowing students to choose a “track” which focuses on one of these three or some area of one of these three, and, perhaps most importantly, fostering a community – amongst faculty, amongst students, and between faculty and students. Not forcing it – supporting it. And mentors. Faculty mentors most importantly, and only after that, industry mentors.

    If I want to be a mechanic, I have two possible tasks. One is education. Maybe I go to school to learn the theories and standards of mechanical engineering – to be a *really* good mechanic. The second task is to learn to do the job that must be done in the place in which it is to be done – this is called job training. For that, I get a job. Now, nothing says I have to do both tasks – nor that I need to do either before the other. Same with computing. If I want to learn how to use a database (!!???), that is a waste of my time in the university. Every place uses a different database, every place has a different situation – industry should be training its employees for this, not making us pay for what I could learn in 20 minutes from a manual or a memo about procedures at XYZ Corp. And so then I pay to learn Oracle databases, then get to a place using MySQL, or PostgreSQL, or dbase, or god knows what else. Umm, hmm. Am I the only one who sees a major, show-stopping problem with that? What if Oracle doesn’t cover all the bases, theoretically speaking? Then some company who doesn’t use Oracle (there are more that don’t than do) is now stuck not only training me in their favorite fad DBMS, but also in re-educating me. That’s just nonsense. And then next year there’s a better DBMS and Oracle is past.

    Learning Oracle, learning Java – these are things for IT certifications. In university, I want to learn database theory and design and programming in the main. Then when I get to a workplace and they say “Do you know how to use Excel (or Oracle or gcc, etc.)?” I can say “Yes I do, first I read the little manual then I point the little cursor to the little Excel icon, then I click (or double-click) – voila, I am running Excel. Give me five minutes and I’ll do your payroll in it if I can wade through all the bugs and poor documentation fast enough.” or something like “No, but I can program something better that will be more interoperable with other programs designed to be the same, and what’s more, I can customize it exactly how you want it, and eliminate the need for an user to touch it by coding in a little expert system.” “Well, I am sorry, you have no training, I can’t hire you.” Yeah right. Give me a break. I’d rather be educated than trained to be a worker for these idiots who run companies looking for “an Oracle database administrator”. If I wanted to work in one task like that, I’d skip college and get a job straight away. For jobs like that, college grads are usually not as good as the ones who just walk in anyway.

    In short – what I would like to see in a CS curriculum is more and better curricular content and instruction, and *no* job training.

  9. Jon Boone

    October 31, 2004 @ 9:00 pm

    9

    Phil, I’d like to offer a few comments on your article.

    First, a brief bit of background about me: B.A. Philosophy from CMU (roughly half of my coursework was in math or CS), 14 years professional experience as computer sys admin/network engineer/systems programmer, two classes (and one thesis) short of completing M.S. in Telecom from UPenn. CCIE. I’ve lectured at Penn and helped to design the class curricula in for the first TCOM lab course they offered.

    My theory of university education: it should be to teach critical thinking and an appreciation for human achievement. The thrust of undergraduate education for the first two years should be basic subject mastery and critical thinking skills. The next two years should focus on original research, perhaps with a focus one year on pure theoretical research and the other year on applicative research in an inter-disciplinary fashion.

    Job training of the type you seem to be advocating is something more apropos to “tech school” education ala ITT Tech. There is a real lack of appreciation for the type of value these institutions offer in our society. These types of schools do focus on marketable skills acquisition. They could be improved through the use of more thorough education in “core concepts”, rather than *simply* learning how to use the de facto industry standard tool for solving common problems. If this is what undergraduate education is going to become, then let’s drop the pretensions and the prices as well. And by all means, let’s make it a 24-month year-round program. We’re talking skills training here, not intellectual development.

    Also, another focus that these tech schools should bring to bear is some rudimentary business training. As the US economy continues to transition from a manufacturing economy to a service economy, the average business size is going to continue to decrease. Students need to come to grips with the reality that they are likely to be best served by either being their own employer – or by knowing enough to judge whether or not their empoyer is running the business properly.

  10. Jerry Weilder

    November 6, 2004 @ 2:34 pm

    10

    Does anyone remember the EDS, Rose Perot, training boot camp? It was written up in the WSJ; this was in the early to mid 80’s. Lets forget for a moment about the EDS work environment, the educational training was unique in that they pro-rated the cost of the 6 months of education over 5 years of work (you worked 4 years and left, you owned EDS some money). They had two tracks, systems or application. When I started in this field, it was common practice for businesses to hire people with business or science skills that complimented their businesses (you’re automating a process you should know something about it), then the very first thing they did was instruct you, in their environment, on the specific technologies they used, anywhere between a month, 6 months, to a year; perhaps maybe not all in one shot. IBM and Amdahl had some awesome courses, plus there were the technical organizations where you could get specific knowledge and share info with others. Some of the best programmers over the years didn’t have formal college education, but were smart, enthusiastic, and could pickup news information really fast and apply it – and age has nothing to do with that. For this type of person, college would have ruined what made them unique and productive. In other words, I would not necessarily hire a CS graduate over a non-CS graduate, it depends. Although these same associates required good, thinking managers. I think we have a management crisis. Old but good books: The psychology of computer programming, Becoming a technical leader, Mythical Man-Month, The Silverlake Project.

    PS: I read where the DOD over the course of the next 5 years will be losing over half of their IT staff due to retirement, and they are looking for those 30 and under (argh :-(). Their biggest concern is that these individuals won’t like the office environment and business rules.

  11. Will Cain

    March 1, 2007 @ 10:42 pm

    11

    I like all the tension between formal education and skills training. I think it’s an important tradeoff to consider. If the goal is to train software engineers for the corporate world, then is school even the right place to do it? Why not at one’s first job, like they do in Germany?

    In any case, one someone starts the skills training part of their career (whether during college or an early job), the most effective approach may be akin to the case method of business schools. Because software engineering is so complex and creative, there is no right answer. It’s more important to learn how to juggle information and people and produce something good enough in the time given, with the ability to adapt to changing requirements. That’s exactly what experiential learning provides.

    It should be no surprise that some of the most talented programmers I know learned how to program in consulting houses, where they worked on dozens of projects in a short time. Talk about opportunity and incentive to learn good software engineering practices! It only works if your mentors are talented, so I urge future programmers to be selective in that regard.

    This sort of thing can work in an academic setting as well (not just a job), but it’s different from mainstream undergraduate programs. If you want to add some software engineering skills to a computer science degree (that’s what I have), why not do it as a rapid series of cases at the end of the degree? Like many folks, I only did one “senior project,” but I would have benefited from doing several in rapid succession, and ones with real or at least realistic customers at that. If you are a college graduate and don’t get this sort of multi-case experiential learning in college or interships, take my advice, and seek it early in your career — ideally no later than your first job!

  12. Jong

    March 4, 2007 @ 9:39 am

    12

    > Methinks thou dost confuse education with skill training. Computer
    > science should be more concerned with the fundamental science of
    > computation.

    Makes me laugh. One of my professors at NYU told me that he isn’t interested in students getting a job afterwards. He said this (NYU) is an academic institute not a vocational school. Yes I’m sure he doesn’t care but his student doesn’t realize it until it too late – sitting in the technical interview. My professors were too worried that their graduates would embarrass them (NYU) in graduate school more than the students standing in unemployment line.

    No, I don’t think that professor (nor few other) actually had worked in the industry. Fact remains vast majority of CS students are ill prepared for their future.
    ====
    By its very nature programming is more like solving puzzles than creative writing – yet CS is taught like creative writing (language, outline, structure, etc.) or pure science (narrow set of variables and often ideal conditions). Even EE is nothing like CS given EE often just design components and leave “glue logic / problem solving” to software. I’m not trying to offend the EE. I tried learning analog electronics for years and just started “getting it” when I finally got my first Oscilloscope. Yet I was “doing” assembly programming the 2nd month of my programming hobby. I’m just saying they are different mindset.
    ====
    There are just very few who are problem solvers and the rest who are not. Just like music / art student are required to show evidence of proficiency BEFORE being allow entrance to the music / art school, so should the CS schools. I don’t believe that general puzzle (problem) solving can be taught to people without natural proficiency. That is not to say that CS cannot be taught. I could learn to play the piano but not to the point of being employed in an orchestra. The same goes for CS.

    I believe my CS was no way preparing me for the job market. But given I was already writing game programs on my home computer in HS, that didn’t matter. My diploma was just a formality.

    Coops and internships help, but that’s something that the students would learn eventually after graduation. Consider that CS with Coops works well. On-the-job experience works well. CS education often doesn’t work well. So the truth be told “on the job” experiences are more important than most pure academic CS education. In which case companies like Oracle, Borland, MS should handout degrees worth more than CS from universities. But the question is “how to fix CS” not “how to suppliment CS with Coop.”

    EX: If I have to get job experience at the local restaurant in addition to my culinary degree, why bother with the culinary degree (assuming all the cooking styles and methods from the school are useless without the restaurant learning – because that’s what’s happening with CS)?
    ====

    > For example, should we consider development of personal values, ethics,
    > character, and spiritually? Should software engineers be well-grounded in
    > philosophy of logic, critical thinking, ethics, metaphysics? What about
    > health and physical fitness and diet which enable more mental, as well as
    > physical energy?

    Oh God here we go. We are talking about students graduating with CS degree who can’t even program and this person wants to know about philosophy, ethics and metaphysics. You can require philosophy to CS students when you require CS to philosophy students. This reminds of all my college administrators who felt science students should master college level humanity courses, when the administrators couldn’t do high school math and science. Yes they should (master college level humanity course), but the administrators should master college level match and science too (and show proficiency regularly). Oh how I would love to push CS courses to humanity groupies. Oh how I would…

    JUST KIDDING…. :-)

  13. Matthew Small

    September 21, 2007 @ 3:28 pm

    13

    A bachelor’s degree is like a black belt in karate – it doesn’t mean you’ve mastered the subject, merely that you’re ready to start learning it.

    Unfortunately, students are expected to get jobs after graduation, which highlights a flaw in the computer science program… and every other program, except perhaps teaching. The truly able will get past this in any case.

    We always hear of the catch-22 – nobody wants to hire a new graduate because the graduate has no experience, but how should the graduate get experience? There’s no answer to this, yet people have been surpassing this hurdle since people existed.

    Computer science *should not* be an in-depth exposure to Oracle, Windows programming, and It’s an opportunity to hone critical thinking skills from a computer science perspective.

    I agree that some newer skills should be taught – debugging, DBMS, networking are some to which I would give some exposure.

    Someone said something about those who have and those who don’t… he’s right. There should be a pass/fail test for people who has the innate skill to do this work. The others (in my school, these were usually females with little programming skill but a great smile) who be weeded out. I think that some schools are very successful at this, some not.

    Updating.. yes. Overhauling… no. Believe it or not, those very theoretical skills you learn in college are used when you go deeper into the field. I see and use things like code decompiled into assembly… network tracing that shows the traffic between computers… reverse engineering. Yes, all of this can be learned outside of school, but school emphasizes these fundamentals. Corporate work does not.

    In a nutshell: if you want to work at a company all your life as a programmer, just learn it on the internet. If you want to be at the top of your game – a designer – a top-notch engineer – someone who thinks of the new ways to acheive efficiency – stay in college.

  14. Jong Kung

    March 10, 2009 @ 4:51 pm

    14

    > First of all, the word “Computer Science” must be dropped because
    > “computer science” never existed and will never exist. It’s an oxymoron.
    > A real science, such as physics or chemistry, is the study and the
    > discovery of physical principles that exist in nature.

    Oooooo. Sounds so intelligent. But the word SCIENCE (in computer science) means “systematic knowledge or practice” – not the “system of acquiring knowledge based on scientific method” – Wikipedia.

    ” Computer science is considered by some to have a much closer relationship with mathematics than many scientific disciplines, with some observers saying that computing is a mathematical science. ” – Wikipedia – See Peter J. Denning

    Assuming (Computer) Science implies the limited definition of science is like assuming OXYMORON refers to morons. :-)

    Jong

  15. Glen Austin

    June 25, 2009 @ 12:38 am

    15

    How about Computer programs focused on solving specific problems? Doesn’t Waterloo in Canada teach compiler design and development to most of the compiler builders at IBM? Instead of learning really simple lex (flex) and yacc (bison) structures, they actually have to build the tokenizer, the language grammer parser (in multiple forms ), the code generator, the opitimizer, and the machine language (or intermediate language in Java or Microsoft).

    The problem is that the world is too complicated now to just teach computer science. A truly successful developer has to not only master the computer skills (in Java or Microsoft, or Unix or Linux, or Apple), but also a “problem domain” (compiler design, GUI development, operating system entensions, game development, payroll processing, tax return processing, or in my case Pharmacy adjudication and reconciliation).

  16. zani

    November 15, 2010 @ 1:37 am

    16

    That idiot here who posted that CS students and workers should always have pet projects–YOU’RE FAT, HAVE NO LIFE AND NOBODY (WELL MAY BE YOUR UGLY FAT WIFEY) WANTS TO DATE YOU. You’re a loser and a jerk.

    Sorry, job or school consume enough time and leave none for pet projects. I like to work out or make art or party and live life in my spare time. If you’re fat, unfit, lacking muscle and fitness, disgusting blog of a nerd……good luck. I’m from Russia, btw, CAN write code, know my math, know my C++ (we Russians are better than American programmers anyway…); my family consisted of prominent engineers and university professors for generations–thanks to that I know that wasting your life on “code and code” isn’t worth it. Do your work and live LIFE after that, real life, not 2nd life or fake one–you only live once. Don’t let people with OCD or schizophrenia who can’t have social interactions or fun tell you that your life should be only code or you’re worthless and don’t let these people drive the industry (there’s no need for super-fast tech progress at all–we ARE fine the way we are).

  17. zani

    November 15, 2010 @ 2:40 pm

    17

    CS school is for development of thinking skills, that can be applied to various areas of technology and theoretical concepts of CS. “Customer satisfaction”, “useful software”, etc..–well if that’s the way you’re thinking, why don’t you just go train to be a car mechanic? Heck, CS is a SCIENCE, just like any other one–a science at its beginnings (wait till we start making really smart computers that grow and modify or improve themselves). If you want to be a programmer as in “trade”–go to community college, they offer tons of programming classes. Write open source, etc, be a code monkey, whatever. Good CS program requires excellent coding skills btw AND theoretical skills/math on top of it. “Pet projects”–well some people do them, some don’t… those who do them often have to develop advanced scheduling in their brain to switch between memories of having a life like 5 years ago, coding, and thinking if probability of them getting laid within next 10 years is significant enough to be considered non-zero.

Log in