How Harvard Teaches CS Students How To Code (kqed.org)
Harvard computer science professor David J. Malan "is pretty amazing!" says long-time education-watcher theodp. And he's sharing a link to the online version of Malan's famous CS50 class, "if you can't pony up the estimated $63,025-a-year sticker price to take 'the quintessential Harvard (and Yale!) course' on campus."
KQED's education site "MindShift" reports: Malan's class attracts students who have never taken computer science before, as well as kids who have been coding a long time. His goal with this diverse group of learners is to create a community that's equal and collaborative. One way he does this is by asking students to self-identify by comfort level. Those groups become different section levels, and they sometimes get different homework, but harder assignments are not worth more credit. Malan said recently that the "less comfortable" group has dominated his 700-person course. "At the end of the day all students are treated with the same expectations," said Malan, speaking at the Building Learning Communities conference in Boston.
Students are graded based on each individual's growth; Malan and his team of teaching assistants don't use absolute measures when assigning grades. Instead, they look at scope, how hard the student tried, correctness, how right the work was, style, how aesthetic the code is, and design, which is the most subjective. When it's time to assign grades, Malan and his teaching fellows have lots of in-depth conversations about how each student has improved relative to where he or she started...
The course includes a tool that rewrites error messages to make them easier to understand, plus a code-checking tool which they're planning to open source. There's also a cloud-based IDE which "allows students to access their code from multiple locations," though students can also submit their code through GitHub. (The original submission complains that Harvard's students are "coddled.") But Malan says the class works partly because there's an intentionally social aspect to it -- including numerous teaching assistants holding office hours in public spaces and "the human structure within the course." Guest lecturers have even included Mark Zuckerberg and Steve Ballmer.
But all these technical details don't really capture the wild flavor of the course and all of its multimedia bells and whistles. Malan's fast-paced lectures often close with relevant clips from movies -- for example, a lecture on cryptography which ended with video from a movie you'd see "if you turn on your TV on December 24th."
KQED's education site "MindShift" reports: Malan's class attracts students who have never taken computer science before, as well as kids who have been coding a long time. His goal with this diverse group of learners is to create a community that's equal and collaborative. One way he does this is by asking students to self-identify by comfort level. Those groups become different section levels, and they sometimes get different homework, but harder assignments are not worth more credit. Malan said recently that the "less comfortable" group has dominated his 700-person course. "At the end of the day all students are treated with the same expectations," said Malan, speaking at the Building Learning Communities conference in Boston.
Students are graded based on each individual's growth; Malan and his team of teaching assistants don't use absolute measures when assigning grades. Instead, they look at scope, how hard the student tried, correctness, how right the work was, style, how aesthetic the code is, and design, which is the most subjective. When it's time to assign grades, Malan and his teaching fellows have lots of in-depth conversations about how each student has improved relative to where he or she started...
The course includes a tool that rewrites error messages to make them easier to understand, plus a code-checking tool which they're planning to open source. There's also a cloud-based IDE which "allows students to access their code from multiple locations," though students can also submit their code through GitHub. (The original submission complains that Harvard's students are "coddled.") But Malan says the class works partly because there's an intentionally social aspect to it -- including numerous teaching assistants holding office hours in public spaces and "the human structure within the course." Guest lecturers have even included Mark Zuckerberg and Steve Ballmer.
But all these technical details don't really capture the wild flavor of the course and all of its multimedia bells and whistles. Malan's fast-paced lectures often close with relevant clips from movies -- for example, a lecture on cryptography which ended with video from a movie you'd see "if you turn on your TV on December 24th."
Who cares tho
Guest lecturers have even included Mark Zuckerberg and Steve Ballmer.
and some wouldn't have to waste the time on reading the whole thing
When it's time to assign grades, Malan and his teaching fellows have lots of in-depth conversations about how each student has improved relative to where he or she started...
Because precious snowflakes can't handle the reality that computer programs are supposed to work?
asking students to self-identify by comfort level.
Comfort???? I think I'm going to barf.
"I don't know, therefore Aliens" Wafflebox1
..thereâ(TM)s a real engineering school down the river.
I remember when I went to MIT that back then all the engineering classes were always graded on a curve. How hard you tried was secondary, how good you were on absolute level and vs. your peers was all that mattered. I think A+ was given to 5% of class, I believe no more than 20-25% of A grassâ(TM)s.
Once I took a class with a TA who was a Harvard economics post-doc. Two weeks into the class that he was teaching he said that we had just covered the whole first half year of the subject in Harvard.. Maybe that puts things in perspective.
IMO, grading on how well a student improves can be easily gamed. My son goes to a high school that does this, and he frequently gets lower grades, even if he performs better than others in the subject matter.
The problem is improvement is not linear. For those who are more advanced, it is likely levels of improvement is less because the more you know, the less there is to learn. Therfore, those with a higher level of initial competence will not show the same amout of growth as those newer to the subject matter.
Students aware of this method of evaluation can lie about there starting level to give the appearance of more improvement over the life of the course, therefore, getting better grades then those show more advanced knowledge and skills.
I am all for praising improvement, but those with lesser knowledge and skills should not get higher grades than those who are better for the same course.
I'm involved in hiring new programmers quite often. Way too many of them have absolutely no idea what they're doing, despite making it through some kind of program.
I guess maybe they made a lot of progress towards understanding the flavor of programming. Maybe they learned to leverage the "social dynamic" of programming to cobble together some garbage out of other people's code.
I think it would be better if they learned how to program, and had to prove they could do it before someone gave them a certification. You can learn programming the same way you learn anything else, and there's no reason to teach it or evaluate it differently. It's not magic, and I think with time and a sane approach you could teach most people how to do it in a couple years.
Let's not stir that bag of worms...
...where you get hired and paid for ability, rather than commitment.
I actually studied psychology at Harvard, did IT for several Harvard departments, and audited several software law courses. Fortunately for my sense of reality, I actually majored in engineering over at MIT. I'm also old enough to remember the ill-founded student radicalism of the 1960's. What's going on is a replay of the ivory tower fantasy politics of the 1960's, where "the people", where academic excellence became based on left wing politics rather than on verifiable facts.
I approved of a lot of the politics then, and now, but the "we judge you based not on verifiable results but on the 'self-identificaton' and social approval of teaching assistants who are still suckling from the academic tit of their parent's money and a lot of student loans they'll be unable to pay back.
> with time and a sane approach you could teach most people
Most recently, I've met a "psychotherapist" in Boston who specializes in Harvard students who helps them "identify" as successful, and then inveigles them into "PTSD" and "neuroatypical" treatment, who has no degree, no formal training, but "identifies" as a psychotherapist. Scary, scary, but typical of Harvard academia. Funny thing: as best I can tell, none of their clients has ever gotten a job that pays the rent.
Best CS101 course ever!
https://en.wikipedia.org/wiki/...
Love it? You have the heart and mind to succeed in programming.
Confused by it? Go learn WordPress or pick something more in line with your talents.
>Instead, they look at scope, how hard the student tried, correctness, how right the work was, style, how aesthetic the code is, and design, which is the most subjective.
"How hard they tried" isn't relevant. Whether it works or not, is.
"How aesthetic the code is" is more subjective than design.
None of my professors in CS, Physics, Chem, Calc, whatever, had a problem with saying "It's wrong. You failed." and I am the better for it.
Feelings are irrelevant.
I think that's going a bit too far. If this is a course designed for anyone to take as a first programming course, I think this approach is ideal, or at least much better than many alternatives.
You kind of went into this, but I think it's a real problem to have a base class that you can't use in any way to understand if you will be able to handle other classes. At the university I went to, they had a "programing for non-programmers" course but then also an intro to CS class. I think you really need something like that to attend to two very diverse populations, to me I just can't see there would be a real spectrum of needs - either people who need to learn enough about programming to understand what it is but not really carry on, or a group of people meaning to do programming and so they would need something more intense right off the bat (or someone coming out of the introductory class could move into).
What if you wanted to go to another school, how would you even transfer credit from that class? Of course it being a Harvard course, that probably is not a real issue in practice.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
A bridge was being built, funded by donors from both Harvard and MIT.
At first, each university wanted the bridge named first after themselves. Harvard wanted it to be the "Harvard Bridge" and MIT wanted the "MIT Bridge".
Then the MIT Department of Civil Engineering performed a structural study of the bridge, and decided that it probably should be named after Harvard after all.
Was from a famous university with an over $50k/year price tag for tuition. Not Ivy League, but not far from it in prestige.
- Couldn't use Google to answer truly dumbass questions like "derp derp how do I run duh script." (Answer it was inter-name script)
- Couldn't pick up a new language to save his life.
Dude quit his job like 2-3 weeks after starting.
We could have gone down to a Northern Virginia Community College (very good CC, on par with most of Virginia's 4 year schools as much as a 2 year school can be), swung a dead cat into a filled CS room and every candidate it hit would have done better than this guy.
I have also been involved in hiring new programmers. Once in a while we get a gem, fresh out of college, who can actually write code that solves problems they haven't seen before. They can figure it out, and they can make it work.
Most of the candidates, with Computer Science or Software Engineering degrees, freeze up when given a problem that requires them to create their own data structure and write an algorithm to traverse it, in order to solve a business problem. Every piece of the problem is straight out of algorithms textbooks, and yet these A-students can't do it.
It isn't that all of the candidates are stupid. Well, some of them may be, but many of them are quite smart; they have just been victimized by an education system that makes its money by dumbing-down the criteria to cater to a huge group of people who want the degree (presumably for the money) but don't want to get their hands dirty doing the work. It has created quite a challenge for us, since we are needing to try and use the interview to gauge intelligence and the ability to learn programming skills on the job, rather than a simple proof of existing abilities.
Don't even bother asking green candidates about how to make their software secure. Just assume you will have to teach them all of that on the job.
Yes exactly! Students should be given a test on the first day of class to ensure they can AT LEAST write a basic Linux kernel driver. If they are unable to do such a basic task, they should be axed from the course. On the second day they should be tested to ensure they can write a complete memory allocation system for a custom embedded ASIC and if they cannot, they should be axed from the course. Things should go from there, each day getting more and more complex such that by the end of the course the meritocracy has winnowed the useless from the useful. Back in the 30's when we used to beat students, which we did because it was fun mostly. First we'd put an onion on our belt, as was the fashion at the time. And next we'd take the next bus to springdale, which is what ogdenville was known as back then. What was I talking about again?
There are a lot of classes like this (one example I remember was college vs university physics...)
Exactly - the reason we have two courses is because we need to have fixed learning outcomes for the course and fixed standards against which students are graded because there are two levels of physics required by different programs. When I teach either the calculus or non-calculus course I assess students against a fixed set of standards which are lower for non-calculus than calculus.
Having flexible standards based on how confident the student is when they start the course is utter nonsense. It's great if a student massively improves their understanding of the subject but if they fail to show that they understand the material in the course then they still need to fail because otherwise you are just setting them up to fail in subsequent courses which rely on them understanding the material in an intro course at a certain level.
I already regularly have to explain to students that we reward performance not effort with grades. The reward for effort is putting in the best performance you can and getting the best grade you can. How many people would be happy seeing a doctor who qualified based on how hard they worked rather than how well they understood medicine? Who would want to live in a building or drive across a bridge designed by an engineer who did not understand basic physics but worked really hard at trying to?
The real purpose is to let privileged people connect with other privileged people so that they can get privileged VCs to fund their startups or hire each other. Harvard is just capitalist america's version of aristocracy.
Avantgarde Hebrew science fiction
Clearly not, and they state they're using subjective criteria in the grading.
"the human structure within the course." Seriously, what is the meaning of this phrase? The whole thing reads like babble.
You are all focusing your righteous ire on the snowflakes, but missing the obvious benefit of the "comfort level" approach. Those who get CS, like it and are happy to work at it don't have to sit in section with those who don't. They don't have to do all the project work for those that can't (the bane of the "working in groups" ideal), instead they get to collaborate with others like themselves and probably achieve something pretty cool. Those other kids, meanwhile, are helping fund the class for them. I'm a university teacher and if I could get away with this, I'd do it in a second, purely for the benefit of the abler students. I can't get away with it because its expensive to implement, and its a kind of intellectual apartheid that won't go down well in my public university.
A mish-mash of random topics with no proper introduction nor depth. It's a show, where Malan is the star and only performer, every night, as the whole course is presented as such.
Nobody who takes CS50 learns anything solid. It's just loose fragments of knowledge without any real theory or application to use it in.
College is one of the biggest scams of all time, and I say that as someone who has an M.A. and is published.
Eventually, economics will catch up and we will see most of these colleges go bankrupt. Why pay some professor to teach you things you can learn in the business world?
https://jamesaltucher.com/2011/11/10-things-i-didnt-learn-in-college/
Social aspect. How much a coder has improved relative to how their were. How hard they tried.
Yippee.
Zuck "they trust me, the dumb fucks" the PHP coder.
Ballmer, the monkey king.
Yeah, that's a great course. With 700 people.
I bet they use 37 different sets of genders in that zoo.
I see lots of comments complaining about how this isn't a hardcore CS course, but it isn't meant to be. It's basically a survey course, and apparently is widely attended by non-CS majors. I haven't had time to go through the entire course on edX, but I've browsed a few units over the years. They do things like explain the absolute basics of sort algorithms, control statements, etc. in a very accessible way. It sure beats getting a textbook read to you by a TA who can barely string 2 words together...or being told by the "real" CS students that you're trespassing in their little club.
Consider this as well -- the course is at Harvard. No one truly hardcore goes to Harvard for CS. It's the most expensive and exclusive university in the country. The Harvard grads taking this class are going to get some extremely cushy research job, inherit Daddy's business, or go into investment banking or management consulting...coding is that stuff they send over to India after the McKinsey MBA delivers the PowerPoint to the executives.
So.... it costs 65k a year to go to Harvard (or Yale or other ivy leagues) for a four year degree.
So all up you're north of 240k for your degree.
I understand most top companies try to hire those grads in preference to a grad from Bumfuck U , Tennessee.
So. basically what you're saying is that you need to have family wealth in order to get the top jobs in the US ??
How is that not a pseudo-aristocracy ?
Why hold back the best students a nation produced that generation?
If people who have "never taken computer science before" want to really do computer science, let them take night classes or a correspondence school to catch up.
When they are finally ready to learn introduce them to a university setting with classes set to their educational standards as they enter university.
The smart students who got in on passing real exams and merit can advance with the very best.
The students who are new to study, learning and education can then be educated in different classes that are set to a slower educational pace.
Re the individual's growth and grades. If a student who passed exams to get into university is now failing to study at the same level as an average find out why.
They have some medial problem? They cant study this year? They won't study? They are distracted by something? Help them get back to getting good grades.
They did not pass their exams well and got some social advancement for non academic reasons? What are they doing at university that accepts students who passed real exams?
Help them find some education they won't fail at. Music? Art? Languages? Vocational education?
Before the below average students take out more loans on their own education or a scholarship is totally wasted on a person who cannot be educated.
Start looking after the students who can learn and want to learn. Who put in years of extra effort before university and who actually got good grades and passed their tests well every year.
Accept students on merit, graduate on merit. Sort your students before they take a class.
Domestic spying is now "Benign Information Gathering"
Yet another prof has "discovered" dynamic assessment; a teaching method that was developed by Soviet developmental psychologists in the early 20th century. Expect it to continue to be discovered again and again in higher education because teaching staff have no training in teaching and therefore no historical context to place themselves in. Just re-inventing the wheel over and over again.
Considering how the students get advanced over the years. Some better way to find out if they can "program" is needed. Could other people who graduated over the years program? Have they found good jobs?
The paper given out by a university no longer indicates any ability to study, pass an exam and program after years of attendance and social advancement.
How can a graduates skill level be considered after they are handed academic paperwork for sitting in a class for a few years and have not been tested to show they can program as a university claims with the paperwork presented?
Someone should make an app for people who have to look for workers that ranks US university graduates by actual merit and real exam results?
Sort resumes by university and then interview only the best graduates. If no actual grades are been given by a university, just don't accept their graduates.
Stop accepting junk graduation paperwork. Accept the best and sort from a list of only the best academic universities.
A private sector ranking app of US universities ability graduate useful workers with real world skills.
Rank the social advancement campuses to the few universities that still only graduate the very best academic students.
Companies that hire the best will profit and grow. Companies that hire social advanced graduates will fail as their workforce is totally useless.
So if someone wants an app project, start looking at the hidden statistics surrounding years of graduates and how well they do in the work force.
Who gradates people ready for work every generation? Who gradates students that are still looking for work every decade?
Good people looking at resumes need support to get past the results of social advancement that now fills US graduations.
Domestic spying is now "Benign Information Gathering"
As an intro course, you can't start out assuming anybody already knows anything about programming. You can't assume that a student knows about operators, data types, loops, binary, algorithms, etc. -- otherwise it wouldn't be an introductory course.
Thus, if you graded everybody on the same scale, those coming in having already programmed would be completely unchallenged. So to make it challenging for people who have had some exposure to programming, they make the coursework relative to the students' abilities.
I know a 3rd-grade teacher who does the same for spelling. At the beginning of the year he gives the students an evaluation to sort them into four groups: below grade level, at grade level, above grade level, and way above grade level. Each group gets a different set of spelling words every week and each student is graded based on how well they can spell the words in their group. That way a slower student is rewarded for learning to spell a word like 'see' while at the same time an advanced student is rewarded for learning to spell 'imperceptible'.
dom
high school?? seriously? you don't learn anything in high school to completion! The more you learn the more there is still to learn. Sure, some kid would go beyond the required course materials... but that is ideally what should then happen. Having a fixed pacing of a course is not a wise move; maybe a practical one or not... but it is not wise. If improvement is the priority then it should be continual and extend beyond the arbitrary schedule-- the kid can go into the next class--- except there isn't a next class in that mindset there is only a time period for advancement. 4 years of high school math for X amount of time. You move forward during that whole time. One would think that after 4 years regardless of speed that a student would end up at a good place. Now it may not be calc... but if they are not going that direction or have the interest to motivate them in that direction it won't matter when they get one of the many jobs that will never ever touch calc.
Not that I'm advocating anything; I'd rather more science was applied to education without regard to existing systems, rules, and stupid traditions.
Furthermore, having been a teacher for a long time now, I know 1st hand how helping another learn makes you stronger at it. Especially people who think completely differently and trying to adapt your understanding to their way of thinking as opposed to trying to force them to think like you do--- the experience is mind altering and difficult; it would help people in ways far beyond the subject at hand and produce a better society. The kids who are ahead should be aiding those who are behind and possibly learning that those kids are not inferior to them. How to create such an environment I do not know-- especially in a selfish culture which brags about it's Christianity and/or morality while practicing little of it.
It would seem to me we should follow completely different models of education and it also needs to differ by age. brains are developing-- the AGE matters a lot. Hell, the social science points to middle school kids needing social development and emotional development more than anything else and the HUGE impact it has on their lives. We should drop ALL academics from those ages and do nothing but mushy emotional work that the kids will likely hate as much as all the hormonal and emotional pains that come with that difficult time in life. I would bet the house that we'd have massive rewards and accelerated academic progress in the later years that make up for the investment as far as pointless academics metrics. If you foster continual learning that is self actuated then the teachers become coaches -- motivating and assisting; that is how you practically facilitate a situation where improvement is your goal/metric--- the kid will improve beyond todays textbook constrained boundaries of growth and do things on their own timing with the teacher there to help on their journey.
Students learn; you can't learn for them or show it to them. They are NOT A PRODUCT and the teacher is not the producer, nor are the kids workers. All these idiotic analogies to other areas are just that: idiotic. learning is unique and has no proper analogy to any other task. It is far worse than say, comparing electricity to water (which only works in the most simple sense, electronics is far beyond water analogies.)
Don't know how many read this-- but human brain training is a difficult topic and everybody thinks they are an expert. nobody gets it. it's hard to even detect the talented ones because how you measure success is a big game in itself... plus people differ. It is like you are telling your doctor how to do their job because you've been to doctors before so you know medicine too! educators know more than you do; professors know only a bit more because they have zero education on learning-- only some experience doing. It's false reasoning to think somebody who is great at learning something well is going to be good at telling others how to do the same sort of t
Yes, that is vital when your future endeavours fail.
Future employer:
"The project failed due to your incompetence; but you tried really hard! We are giving you a promotion and a new project to fail after, we hope, even harder work!"
This whole prerequisite thing is a giant edifice of institutional convenience.
I was highly accelerated coming out of high school. I had a fistful of glowing test scores and competition results in math and physics, top AP scores in biology and chemistry, and I was no slouch at the softer or more subjectively creative subjects either (though I never had the specific work ethic to succeed at mastering a foreign language, linguistics would up as a major focus of my professional life).
By the end of second year I had flunked out of a double major in mathematics and computer science due to a severe sleep disorder (medical science caught up twenty years later, and then it took me about a decade to best apply this new learning, so my sleep disorder has recently been reclassified as a solved problem).
Well, now I want to dive headlong into machine learning (linguistics again), but I've got a big hole in my education surrounding third and fourth year applied mathematics. I'm just a wee bit weak on my trig identities and related problem set arts, and it's often a challenge for me to work the standard problems from scratch.
So here I am reviewing in my mid-fifties what would have been basically a minor challenge if I had better had my metabolic shit together on the first pass.
What I soon discovered is that conceptually I lack for nothing. The one somewhat non-traditional year I did complete of advanced-stream mathematics coursework tended to focus on the formal equivalence of limit superior/limit inferior to the more common epsilon/delta construct (by which point—if you have any natural intuition—measure theory amounts to a common-sense extrapolation). Mainly I just lack for a layer of finger skills to work the actual problems. The notation of linear algebra slowed me down for a couple of weeks before this became comfortable again (though I still don't read this nearly as smoothly as APL, in which I was once quite proficient).
I find this interesting, so on the side I'm reading about mathematical pedagogy, and I finally found some exposition about why it matters to master those confounded trig identities.
At a certain point, as a card-carrying member of the machine learning research tribe, one needs to have a certain outback survival mentality, whereby one can easily derive most of the elementary results from a quick pencil and paper exercise.
For me, from where I now stand, such an exercise would not be "quick" (though with great effort, possible in most cases).
It's an institutional presumption of mathematical pedagogy that this skillset needs to be relentlessly driven into the fingertips by many, many manual problem sets.
The more rarefied claim here was that failing to have these patterns embedded into your fingertips, a working mathematician will suffer from weak intuition in many formal settings; that these finger skills amount to an indispensable form of pattern recognition, which one can not otherwise supplant.
As an institutional precept, I can't argue against this. As a person rudely rejected from the standard path by a balky metabolism, I can advance a strong special-case argument that this is complete bull pucky.
I didn't cease to think mathematically just because my formal education rudely ejected its crankshaft. I've been thinking deeply about gradient and curvature for most of my adult life (specifically, the unholy marriage of curvature to the asymptotic equipa