Teaching Programming Now Emphasizes Sharing
An anonymous reader writes "The NY Times explores some of the best ways to teach kids and finds that some of the new tools are encouraging the kids to share their work with each other. One teacher first tried to keep the kids quiet and staring at their own monitors but found it was better to let them copy each other. He calls MIT's Scratch a 'gateway' tool. Then the article points out that programming Blender with Python is not as hard to pick up as your grandparent's programming languages — and kids today are learning them in a few months." The Wikipedia entry on Scratch is worth reading, too.
The summary makes it sound like these kids are being encouraged to cheat off one another. The actual article just says that they're looking at each others' work to build on one another to make more complex programs. That pretty much describes what any good programmer does. Unless you live in a bubble building all small projects solo, you're always going to be working together on a project with other programmers and designers. And even if you live in a bubble, you had to learn coding from SOMEWHERE. You look at code in a book or on a website, you learn how it works, you start using it and adapting it in your own projects. That's just learning.
I, for one, say "Huzzah!" for these kids. If they keep at it and get their CS degrees, they'll have a great future working for $3-an-hour in India someday.
Wait, that sounds cynical. I meant $4-an-hour.
Oh, and I've found Alice to be a great teaching tool for kids too. It teaches programming principles in a way that's a little more exciting for beginners than having to learn Commodore 64 PEEK and POKE coding (the way some of us came up).
SJW: Someone who has run out of real oppression, and has to fake it.
Sounds like a gateway drug into P2P, torrenting, and ultimately murder.
In high school my math teacher organised us into pairs and encouraged us to work together on the problems. It's can be very enlightening to see a situation from someone elses point of view. And teamwork is also a skill that has to be learned, preferably in school.
If your students are motivated by "building cool stuff", sharing is great - they are trying to add the elements they find into their own designs. However, if your students are motivated buy "getting the passing grade", then sharing may become copy-pasting, and they will not retain any knowledge of the process. In real life, students are motivated, to a different degree, by building cool stuff, grades, and a host of other factors. My policy up to date has been "ideas sharing is fine, peering at screens and finding out how others did things is fine, but if I find evindence of significant copy-pasting, you will get a stern warning and/or a some sort of discipline". Works fine with undergrads learning compsci, especially once they learn that our in-house copy-pasting detection system is quite accurate at finding cases of badly-disguised cut&paste.
I am even going one step further, and *making* my students review each other's code (they get good grades for writing good reviews, not for receiving them, and reviews are anonymous, so there should be little incentive to 'cheat'). I find that far too many students are not exposed to a) the potential beauty and simplicity of good code vs. b) the horror that bad coding is to the unwary mind.
Does anyone know good systems to automate this peer-review for undergrad coding exercises?
It'll teach the kids to write the most simple programs - but once they need to use a real programming language, they need to unlearn Scartch.
I've taught Scratch to kids before, though only briefly. None of the class picked up much on their own, so it's no replacement for good tuition.
Or so the corps want us to think...
Be seeing you...
It even comes with many different interface language options, making it ideal for children who just started reading in their mother tongue.
High school computer science teacher here in my 4th year of teaching. This year, I've emphasized group programming much more than the past 3 - I used to do 50/50 group/individual in-class stuff, but this year nearly every in-class exercise is done with randomly-assigned partners in my Intro and AP courses. The difference in comprehension is astounding - students are grasping concepts much quicker than usual. The thing is, when they go off on their own to do individual assignments now, they do so with much more confidence, thanks to the discussions they were able to have with their partners.
FYI, I teach at an all-girls school, so it's possible that these are unique results for girls, but I imagine that boys would similarly benefit from working with partners.
Back in my college days students always shared code, secretly.
I almost got myself caught. Luckily I talked my way out of it by explaining that we discussed the code, but didn't exchange it.
We all learned better from each others mistakes, and overall made us each stronger programmers.
The problem with sticking strictly to one's own code is that sometimes simple problems can easily be over looked (syntax).
Not everyone has the same learning style, and it's helpful to work as a team.
I'll admit that in my advanced programming courses that relied more on group work, often had its fair share of slackers, as well as many bad group leaders.
Even with the caveats of group work, I still to this day prefer to work as a team member.
go away brony
Once proficiency in fundamentals and advanced fundamentals are demonstrated should code sharing and collaboration be encouraged.
This kind of goes back to "when should math students be allowed to use calculators?" Obviously, it is established that they should be allowed only after they have a firm grasp of those functions which the calculator performs for them. Otherwise bad things begin to happen.
So what I am getting at is that once those fundamentals are present in the minds of these students, then they should be able to share and work together. Otherwise, what we end up with is one or a limited number of talented coders carrying the load for the many. And as it turns out, these "users" are also the ones who are good at doing job interviews and the good coders are the ones that often suck at them.... so who gets the good jobs? Right -- the "salesmen" who are good at selling their bullshit but then later cannot deliver on the skills he promised to offer the company when he got hired.
Theoretically, schools train people to an expected level of proficiency. Sharing too soon will affect that level of proficiency for quite a few and we end up with people in jobs they don't deserve... and the real nerds unable to get the jobs they are suited for at the pay they deserve. (Yes, this is a personal gripe of mine... not good in personal, but pretty good in technical... typical aspergers I suppose.)
0n1y n00bz0r$ u$3 pyt#0|\|, r3@1 #@x0r$ u$3 @$$3m813r!!1! I can't wait to see these kids get introduced to newsgroup flamewars, obfuscated C, IRC abuse and all the other wonderful things in the world of programming.
I'm a high school comp sci teacher and I fully support this way of learning. Kids do much better when they collaborate because it's easier to remember concepts when you've had a conversation with someone about it. Cheating is different from collaboration. They aren't working together during the final exam.
In high school my math teacher organised us into pairs and encouraged us to work together on the problems. It's can be very enlightening to see a situation from someone elses point of view. And teamwork is also a skill that has to be learned, preferably in school.
That's annoying as hell for the smart kids paired with kids who just don't get it. Being one of those kids that didn't like "showing my work", I would have spent 50 minutes of a 60 minute class teaching my partner how I got the solutions. Conversely, there were kids smarter than me, and I didn't want them giving away the answer before I'd figured it out on my own. People need to learn how to solve problems on their own. In my humble opinion, math is only a team sport for anyone going above Calculus. I don't believe in that one for all, all for one junk in school. Let's save the teamwork for Phys-Ed.
Sounds like a great way for the teacher to make other students do the job of the teacher. I certainly don't want my son going to school and spending the majority of his time teaching rather than learning something new under some false assumption that they can all be winners. As the kid who always held the class record for math speed tests in elementary school, its a shitty teacher that would make that me spend most of my time helping other students on rudimentary problems when I could have instead moved on to something more challenging.
If that kid's parents want to pay me for after school tutoring, that's fine! Heck, I paid another student for music lessons over a summer in high school. He was a first chair, and I was 5th. My money resulted in him being paid for a valuable service that helped me make second chair the next year. But should he become the instructor of all the kids below him? Hell no, he was allowed to shine on his own. This guy went on with a music scholarship, and the rest of us just have band camp memories. Why hold him back? Why hold back excellence? I can only imagine someone like modern Einstein in high school wasting time trying to explain chemical bonding to a kid who will grow up to flip burgers. That's a far out analogy, but it highlights the problem, at least until later years of college where classes aren't just large groups of kids lumped together not by knowledge, but simply by age and geography.
I want kids to go to school to learn, not teach remedial topics to their classmates.
I8-D
I agree with you completely. Sharing may become copy-pasting, and putting off motivation is probably the better way to teach.
If only there were some way to compare different models of teaching to determine which way was better. Some process where the amount of learning could be measured in both methods.
Until that magical method is invented, I suppose we'll just have to keep teaching kids in the best way we know how.
Reading (and figuring out) someone else's code is one of the best ways to learn to program. It also teaches the value of commenting your code and making it understandable and maintainable by others.
As for the "cheating" aspect:
1. In the real world, programmers "cheat" by sharing code to get the job done with the least effort.
2. Switch up the groups after every assignment so the learn to work with different people, you'll see a pattern in who is productive and who is a slacker.
3. In the later phases, switch up the groups in the middle of the assignment, just like a real workplace.
make imaginary.friends COUNT=100 VISIBLE=false
But the funny thing was, a 1571 drive was apparently affordable by 1986 when I got my C128, and I don't recall Dad making the fuss like "oh dear gawd this will cost more than a month's mortgage". I still sorta wish I were 10 years younger without all that "legacy baggage" but I still think amiga style tracker mods are better music than a third of today's stuff, so go figure.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
I believe your premise has some merits (obviously, bright students should be allowed to progress), but I don't think it is a terrible idea to, at the end of every unit/chapter/major concept, quiz the class and let students take turns teaching other or flailing on a chalkboard in front of the class. Sure there's some pressure but you get used to it, and better because any job has a habit of putting you in the spotlight from time to time.
Sometimes it is incredibly instructive to "teach" another student, or at least be able to do a presentation of some sort and reframe the concepts in your own words, because it forces one to approach a topic/problem from another method (i.e., "how can a person not as familiar with me understand my thoughts?") that might not have otherwise come up, and in those moments, you personally grow in your understanding and expertise by wrestling with the topic, even when the topic seems "remedial".
The more optimistic (perhaps?) way of looking at "remedial" is "foundational". If you do not have a solid foundation, then you do not truly understand the concept, no matter how much you can convince yourself and others that you are an expert. At the suggestion of another discussion on /. a few days ago, I looked into the Force Concept Inventory (FCI), which is a standard test of sorts to fish out misconceptions of basic physics. Fascinating topic, in which the lead author specifically points out that many people -- even graduate students in physics -- significantly screw up on what should be "remedial" topics if you have had any physics course. They aren't mathematics problems with crazy solutions, they are straight-forward conceptual problems that immediately are solved, if one properly understands "remedial" physics, i.e., how to properly quote and use Newton's laws. In other words, you can get significantly far in schooling while still retaining incorrect or incomplete concepts of other things, which are only noticed when forced to use concepts and, as the author of the FCI points out, personal interviews where students are forced to explain their reasoning. The key is putting a student in a position where an explanation is required. I'm speaking in terms of the STEM fields where critical reasoning is key, I couldn't speak for a subject such as music. Maybe music is more memorization and doesn't require such explanations?
This all being only an example of course, but if there is a way to double check a student truly understands a concept or philosophy or what have you before throwing them to the next challenge, I support it, and forcing one to be able to explain a concept or methodology to others is a fantastic way of doing so. Much rather that the gifted students refine their ideas and grow while helping the lower-performing students, than to let the gifted students move on to another topic without any verification that they truly understand the material and not simply found a way to feign understanding on the exam/project. To counter your Einstein argument, Feynman was also a brilliant physicist but had a way of talking with the public and students about it and bringing the level down. I personally think being able to function brilliantly and describe it to others is a mark of a well-developed understanding and intellect.
just because its MIT doesnt make it any different. my undergrad CS profs would encourage me to collaborate but only so long as
i gave credit for functions or logic i used from other students. if only math worked this way too.
Good people go to bed earlier.
Then again, who of these (grand)parents didn't (even have to) learn BASIC, Pascal, PHP, Perl or even assembler in a matter of days?
Sharing is communism!!
If a kid wants to learn something they will. If they really want to learn it they will read a 2000 page book on the language. What did you do with your commodore 64 ? I had to write pages and pages of code to get a game to work.
I have tried to teach programming to two of my sons with Scratch. While I like the approach, the software itself isn't stable. Before encouraging anyone to share their work they should perhaps make the software work so that a saved project works even after reload. It is not a good idea to introduce the frustration of debugging "compiler bugs" before even learning to code. I'm considering switching to Perl.