Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Dijkstra assumes that students will already have been exposed to imperative languages before joining university, and will appreciate the change. I think that this assumption might leave behind students that have not yet been exposed to any programming (that stuck).

Over in the UK I certainly hadn't encountered anything more complicated than html before I hit university, and was very happy with sticking with Java for the entirety of first year. I had been exposed to C++, ADA(!), Prolog and had an in depth look at Erlang by the time my course finished...



I think that this assumption might leave behind students that have not yet been exposed to any programming (that stuck).

Let me provide some anecdotal counter-evidence: during my last year of high school, I was in a university class where they taught us programming using Haskell (this was in 2000). I observed a fairly consistent pattern - those who had prior experience with imperative programming (me included), had far more difficulty picking up Haskell than those who hadn't.

The girl I worked with (who had no prior experience) was surprised, since "it's just like maths" :).


A hypothesis is that it might be harder because you are learning a bit more: you not only have to learn the new way, but also internally how it relates to the old way.


Despite the fact that I learned imperative style first (as most have) -- I think that functional programming is also a valid start point. I don't know that you necessarily benefited from starting in Java/some other procedural language.

I actually graduated from UT's Comp Sci school and I know many of the "elements" courses (super introductory, even for non-majors) are taught in python. That, I think is a good introduction, but for people in the major, I don't think learning Haskell/functional programming is a stretch at all.

If one can wrap their minds around functional programming (which introduced correctly is actually relatively easy to grasp) -- it will be MUCH easier to learn imperative programming. In the end, any good imperative programming seeks to be modular (s/procedures|methods|subroutines/functions/g), and will liken itself to something you would write in functional programming (loosely couple functions that do a specific task well). Yes there are places this gets hairy (side effects, I/O based operations), but computer science is not about writing procedural code, it's really more about algorithms, which is why 4 year universities are NOT trade schools, but do prepare you for the real world (in that you're not COMPLETELY useless). Program syntax is easy to learn (a skilled faker can just repeat it verbatim), efficiency/correctness/proper data-structure usage is difficult.


I spent my first few undergrad years as a CS major at UT before this change happened, and had no prior experience with programming (I started in '97).

The INTRO-intro CS class at the time actually used Pascal, and was endlessly confusing to me as a cold beginner.

My next course, however, was taught in Scheme, and immediately I felt more at home. And for the first time, I felt like I might have some actual aptitude for programming.

Without that peek into the elegant heart of computer science, I doubt I'd have stuck with it as long as I did.


> Dijkstra assumes that students will already have been exposed to imperative languages before joining university

For those entering CS, this is probably true. But it's also probably true that that's because of the students' own initiative to investigate a topic that interests them.

I think high schools have gone the opposite direction. In the 80s, most high schools had some sort of computer class (often taught on TRS-80s or C-64s). These were introductions to programming taught in Basic.

Nowadays, most high schools still have a computer class. But now its Word, Powerpoint, Excel, and build a (static) web page. (There are, of course, some high schools with much better programs.)


Addendum: High schools also used to teach typing (on typewriters). Now that keyboards are ubiquitous, typing classes have inexplicably been dropped. Go figure.


> might leave behind students that have not yet been exposed to any programming

And good riddance. If you make it to university without exposing yourself to your subject as a matter of passion (and few subjects are more easily approached by hobbyists than programming) you're going to waste your time there.

University is a not a "school" you attend for learning a subject. You can't show up for English Literature if you have never read a novel. You show up at the music department if you don't already play an instrument very well. You can't show up at Zoology if you can't tell a reptile from a mammal. You can't study Economics if you've never heard of Keynes. And you can't study computer science if you can't program a computer.

This was not always the case for programming, but it certainly is today, and I'm not convinced it wasn't too in 2001.


Plenty of computer science students at my (SICP-using) university had never programmed before attending, yet they're great at it. Your attitude is especially damaging to female students, who are even less likely to lack programming experience. Computer science isn't even about programming all that much.

> You can't study Economics if you've never heard of Keynes.

Have you ever even been to a university?


Surely you won't get onto an Economics degree course if you haven't already studied economics in high school? I'm from the UK and there you can study Economics from 15.

Also, surely the interview will ask you about your background knowledge of economics, and if you didn't know who Keynes was you're unlikely to get an offer.


Your presumption that all education systems are similar to your own is not valid, relative value or effectiveness not withstanding. The reality is there are quiet distinct differences generally and between US and Uk in particular.

In the US, a bachelors degree takes 4 years, consists of extensive 'general education' requirements outside of the emphasis area, and generally start with intro courses that are more in depth than what would have been studied in high school. So a background in the particular area is not required.


That's definitely not the case in the UK. For example, the guidelines for applying for Economics at Cambridge state:

"The Faculty does not have standard requirements for subjects other than Maths: in particular A level Economics, though useful, is not a prerequisite."

http://www.econ.cam.ac.uk/ba/guide.pdf

(FWIW I did mathematics as an undergrad but I considered CS and spoke to CS faculty at various university open days, from what I remember they all considered maths to be the only essential A level for admission.)


High school education in the US typically requires a 1 semester economics course, at most. A one semester or one year government/civics course. Two years of history (US and World, the latter typically being very eurocentric). In the sciences, college bound students will have taken (usually) one year each of biology, chemistry and physics. On the math front they'll have gone through trigonometry, perhaps pre-calculus. For foreign languages they'll have usually taken two or three years of some language (almost universally available: French, Spanish; common: German; some regions or schools will have more options available). For literature (also known as language arts or English) they'll usually have taken three or four years. The first is often a refresher on composition, with reading really being intended only to provide material for discussion and writing assignments. The second and third courses are often region/time specific (American Lit, British Lit, World Lit from 300AD-800AD), the fourth (again, for college bound students) will involve more complex novels and writing assignments.

Knowledge of specific economists is not the norm in the basic college prep curriculum in the US. Students in the IB program (relatively rare, available in major cities so the majority don't have the option) or the AP program will have studied the subjects to a greater depth. At least equivalent to freshman/sophomore college courses in the subject.

For a bachelors degree the students will apply to schools and get in based on: GPA, SAT/ACT scores, extracurricular activities, interview (not used for the average university), and essays. Some schools put all freshmen into the same pot and require them to apply to their major after their freshman year. In that case, it'd be similar to your "Don't know Keynes? Probably won't get an offer." situation. However, that's also not the norm. And once at the school the students can usually change major with ease.


Many of us went into college without the privilege of having a good idea of what we wanted to do with ourselves.

In addition to that, among my circle of friends, it's common to know people who switched majors mid-school because they stumbled upon something they found more interesting - isn't that great? They thought they loved something, but found something they loved even more. Or, I guess they should have just been given the boot instead.


Many of us went into college without the privilege of having a good idea of what we wanted to do with ourselves.

Yes, it's quite silly that college is mandatory rather than somewhere you go for the purpose of learning something in further depth.


I couldn't disagree more. I started with 'Hrm, this particular attitude could be considered exclusionary for underprivileged kids' and you responded with what appears to amount to 'haha, fuck those guys!'.

I hope that you never make it to any position of authority or influence within education.


When I got to University, I had very, very little background in the subject for which I eventually got a PhD.

Thank god you're not in charge.


That's an extremely elitist and exclusionary attitude you have there. Your post is also "begging the question". According to you, people interested in said subject should already be experts by the time they reach university. This is of course flat out wrong, as there are many counterexamples of people mastering and contributing new knowledge of a subject, many many years after attending university. I think you need a reality check.


It's hardly elitest to say that one should show just the slightest interest in the field they are entering college for - enough so to just pick up a simple book and work through it. I had the same experience, students who had no prior experience not only held back classes for those with much more, they tended to fail miserably in labs and exams.


How, for instance, is the average high schooler going to do anything beyond the most basic research in Aerospace Engineering before getting to college? They may have studied physics and calculus, but without access to the tools of a decent shop they can't build much, and most of the worthwhile texts are written assuming a level of understanding of math (specifically calculus and differential equations) and physics (fluid dynamics, statics, dynamics) that they are unlikely to have encountered. Should they not go into AE as a result and stick with the math or physics that they do have some background in?


It is amusing you bring this up, as AE was my major before switching to computer engineering in the 3rd year (Embry Riddle Aeronautical University). I was extremely excited about it in high school. I bought this book -

http://www.amazon.com/Fundamentals-Aerodynamics-Aeronautical...

Started reading it and the math was way above my head. So I went to my calc teacher and he acknowledged the material was beyond my reach. But then he pointed me to materials to help and offered his time to explain the basics.

This was before there were countless free high quality learning materials online.

Are you going to learn differential equations, statics, dynamics, etc... in high school? Maybe. Probably not. Who cares? That doesn't mean you can't start.

Build a model rocket. Build an RC plane. Dive into more accessible subjects like linear algebra. Learn matlab or octave. I could go on forever.

You would not believe the amount of AE students that struggled - and I mean struggled with Ds through intro to programming with C. I helped many with their homework. Get a leg up and start on that!


This strikes me as in principle somewhat wrong and in practice quite wrong. If American universities expelled everyone whose declared major was not a matter of passion, they would in general be pretty empty.


And just imagine then we would not have 1 trillion in student debt with many unemployed college graduates!


You're moving the goalposts.


No I am saying that college is not about "goalposts". I truly now believe that college is not something that should be done solely to further ones career (hence, passionless students). Instead it is something you do because you are genuinely interested in a subject and want to further education. Otherwise you end up in the situation we are in.

If the goal is to have a job, there are better ways of accomplishing that than taking on student debt and pursing something you are not that interested in (or spending lots of money trying to figure out what you enjoy).


"Moving the goalposts" [1] doesn't mean what you think it means.

[1] http://en.wikipedia.org/wiki/Moving_the_goalposts


That I am familiar with. I guess I just misunderstood sinewave. That will happen with a one liner reply I guess.


That could not be more true. I went to a high school that didn't offer any programming or CS courses, and I didn't even know what coding was until I bought myself a Java book on a whim the summer after my senior year of HS.

At college I started as a Bioengineering major, because I really wanted to make medical devices. I took a CS class in the Spring of my Freshman year and realized that it "clicked" for me and I could go forward with it.

I am now graduating as a Bioengineering and Computer Science dual major and moving to a full time software engineering job at Google next year. I am grateful for the opportunity to learn something entirely new, and I worked my ass off to catch up with the kids who had been coding since they were 12. I don't think that I'm an impostor in the world of CS and I have the additional perspective of not always having known that this is what I want to do.


I started programming my second semester of college, and I just got a full time position with Microsoft starting this summer after I graduate so I beg to differ.


"And good riddance. If you make it to university without exposing yourself to your subject as a matter of passion (and few subjects are more easily approached by hobbyists than programming) you're going to waste your time there."

Guess those kids that cannot afford a computer are S.O.L. in your world.

Most subjects are easier to approach than computer programming just because of cost of entry.


>> University is a not a "school" you attend for learning a subject.

Except for the Keynes thing, the stuff you're talking about is included in classes that every 12-year-old has to take. The analog would be using a computer rather than programming a computer.


Please, don't get me wrong, but why would someone with no programming experience pick compsci?

It's not exactly a sexy career (for every übergeek in shorts with a Macbook Air there is an army of corporate drones with comporate-issue desktops using whatever tools corporate IT mandates, wearing corporate-standard neckties), it's difficult (to do it right) and financial return is far from assured.


I went to search for the data to throw in the face of these assumptions, and found some corroborating evidence :)

http://www.studentbeans.com/student-money/a/degree-courses-w...

According to these numbers, of the 2006/2007 graduates in the UK, Computer Science had the highest unemployment rate after 6 months (10%).


If you do it for the money (even if you get good money), you'll lead a miserable life.

I taught many aspiring programmers over my career and it's painful to see the struggle some go through contrasted with the ease the "naturals" have. Programming classes can't turn you into a programmer any more than swimming classes won't make you a fish. A good teacher will help you become a good programmer, but only if you have the knack [1].

1- http://www.youtube.com/watch?v=CmYDgncMhXw


What year did you enter university? I know the number of kids exposed to programming before university now is much higher than it was when I entered in 1996. I think it's safe to assume (but would love to have some real data) that most CS freshmen these days have dabbled with at least one of the mainstream imperative languages before they hit uni.


It may be turning around now, but applicants for compsci at Cambridge were apparently getting pretty dire by 2006, and this formed a significant part of the motivation for the Raspberry Pi (http://www.raspberrypi.org/about)

> The idea behind a tiny and cheap computer for kids came in 2006, when Eben Upton, Rob Mullins, Jack Lang and Alan Mycroft, based at the University of Cambridge’s Computer Laboratory, became concerned about the year-on-year decline in the numbers and skills levels of the A Level students applying to read Computer Science. From a situation in the 1990s where most of the kids applying were coming to interview as experienced hobbyist programmers, the landscape in the 2000s was very different; a typical applicant might only have done a little web design.

I joined at about that time and found it noticeable that having experience with C++ and a few other languages marked me out as more advanced than many of the other students.

Also relevant to this discussion is that in the first term we learnt ML, a functional language. This was partially because of advantages in talking about algorithms in it, but also to put everyone on a level playing field and introduce something that even keener students won't have encountered before. We did Java later, which I found much less rewarding.


Strangely I found myself struggling to pick up Standard ML despite having experience in C++ compared to my peers with no programming experience. It seems that they just treated it as math, while I had trouble changing my imperative programming mindset.

Also Larry Paulson is a legend.


In case you're not learning from it, allow me to 'advertise' Coursera's proglang. A third of about sml (after racket and ruby) and it was pure joy, the language core and syntax is very tiny (unlike it's type error messages hehe).


It's an incredible experience when the bit flips in your brain and you start understanding recursion and top-down design. I don't use ML any more, but it's definitely affected my coding and problem solving style :)

Also, I once heard that Larry Paulson stopped going to a certain college's annual computer science dinner because he was hit with a pineapple during a food fight. Bastards.


I have some younger (sigh ;) friends in the UK attending uni CS now and almost no-one actually ever touched a programming language. Computers, sure but programming no. Same as when I went to uni mid 90s; I remember of the 80 students 3 (including me) had programming backgrounds. Most were there because 'you earn a lot' as a programmer. Don't think that much has changed, at least not in some universities. A lot of these people switched to law or psychology after a few months to 1 year because, well, CS is hard enough if you actually have no problem with the practical assignments; people who never programmed generally experienced a lot of pain and had to put in a lot of effort to do them.


2005. Because I'd been exposed to HTML and some scripting, I was able to skip on ahead pretty quickly. I estimate that most of my class (about 100 CS students) hadn't had any prior exposure to programming. They dropped like flies for the first few months.

However, I went to a pretty poor University (ranked ~60th), I have no doubt that the numbers are very different in the top universities.


I'm a second year CS major. That's not a safe assumption. Some of them learn to swim, and some of them drown. A guy in my CS1 class last year (there was no placing out) failed to comprehend the concept of words controlling a computer.

Further evidence is the four class intro sequence steadily had fewer sections (of the same size) with each passing term


This is why the University of Chicago has two introductory programming classes - one for students with experience, one for those without.

Honors Intro to Programming (161) is taught in Haskell and introduces monads 4 weeks in. Intro to Programming (151) is taught in Scheme (well, Racket) and works through How to Design Programs.


I think many degree programs assume you have programmed before even if it is nothing substantial.

I know my university's first class in programming assumes prior experience (though nothing to worry about for a motivated student) and then offers an introductory course in python for students with no experience if they'd like. The University in question is still stuck in Java for the main courses like many other Universities.


I agree. It's nearly impossible to appreciate Haskell as a first language unless you have a strong Math background or you have an exceptional teacher. However once you've done a little programming in another non-functional language the beauty of Haskell is pretty clear.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: