8 ms·
High school CS teacher here. I really hate taking shots at Khan Academy, because I love what they do and his other videos have really helped a lot of my studen
by teach 15y ago
High school CS teacher here.
I really hate taking shots at Khan Academy, because I love what they do and his other videos have really helped a lot of my students in chemistry, economics, etc.
However, he's moving through the material MUCH more quickly than I've ever been able to do as a teacher. And I get nearly 5 hours a week of face time with my students.
For example, his third lecture is on for loops. My students, on the other hand, complete literally 80 assignments before beginning for loops. And they still have some trouble.
Admittedly I'm using Java, and Python is simpler, but I think he's VASTLY underestimating how slowly you need to move through seemly obvious concepts for the average total beginner.
- kenjackson 15y agoMy students, on the other hand, complete literally 80 assignments before beginning for loops. 80 assignments? What are these assignments? Are you teaching them how to use recursion before looping in Java? I get that Java has some ceremony, but not 70 assignments worth. The first day I learned to program (with BASIC) I learned looping. I didn't know the details of it (like there was an index variable I could access), but it was as easy as anything else. Seriously, what are they learning before looping?
- teach 15y agoHow to use a compiler. Basic shell of a Java program. That statements occur in a sequence. Practice with getting details right. Mathematical expressions. What variables are, and how assignments to expressions differ from formulas (in Excel, say). If statements and conditions. The concept of "incrementing" a variable or accumulators in general. Loops in general. See for yourself: http://cs.leanderisd.org/current/cs1/assignments.html http://cs.leanderisd.org/current/cs1/assignments.html
- kenjackson 15y agoWow. Not quite 80, but still an order of magnitude more than I would have expected. Interesting they learn Swing before loops. For me, the first thing I learned was printing, then goto, then for-loop. Maybe just a function of language you learn with.
- wyclif 15y agoYep, me too. Of course, that was in BASIC around 1983.
- teach 15y agoYeah, it's 70, not 80. Not sure what I was thinking there, and now it's too late to edit my original comment. Anyway, the "Swing" assignments are there in the sequence for four reasons: 1) To break up the monotony a little bit. 2) To give them more practice copying details accurately. 3) To make them say, "That was kind of cool." 4) To explain why we're not doing "real" programs (a.k.a. GUI) yet. "It takes that much code just to display a blank window on the screen? Guess I can live with the command prompt a while longer."
- flexd 15y agoYour CS curriculum is much better than my schools! I just started my first year of Computer Engineering and the Java course so far is horrible compared to this. I'm a bit disappointed to be honest. I am very glad I already have been coding for years because our teacher and the planned curriculum seems to confuse people even more. I think I will refer some people to your assignments, if that's okay? Hopefully someone can learn more from this :-)
- teach 15y agoI'd be honored for you to point some folks at my assignments, although please only share the link one-on-one: a few of the assignments on there (the ones with an author of "Stacey Armstrong") are part of a curriculum that our district pays to license. Technically I could get in trouble for having his assignments on a public website without permission.
- fjw 15y agoInteresting schedule. My school's AP Comp Sci A class (also teaches Java) is designed for people who are completely new to programming, but we are introduced to loops fairly early. After first being introduced to the different variable types, mathematical expressions, and how to read user input, the students jump directly into boolean, if, switch, and then the for/while/do-while loops.
- teach 15y agoHow many kids take the class? How many do well? I have 75 kids in three sections, and I'd have 100 kids in four sections if they'd open up a fourth section. And all of my students except maybe the bottom 5-10% are moving confidently through the material at their own pace. I'll bet your school either has 1) a lot fewer students 2) a much more hand-picked set of kids, or 3) is leaving a much higher percentage of kids behind, who are either lost or cheating.
- fjw 15y agoWe only have 12 students. I'd estimate that of those 12, about 6 do well in the course. Of the remaining 6, only 1 or 2 are actually struggling with the course. My school is a small (~130 per grade), but renowned international school in Shanghai, China. Your first two guesses are very much spot-on, but I'd have to disagree with the third. Those of us that are ahead help out with the one's who are struggling and in the end, I'd like to think that it all works out well. With that in mind, however, your numbers are indeed more impressive. Because our class size is so small, we're constantly involved in face-to-face interaction with our instructor and with our peers. I doubt our pace would translate into the same success in your school. Is your course designed for the AP exam?
- garbledNonsense 15y agoInitially, I thought this sounded ridiculous. But when I look carefully at what you've done, I'm impressed by your thoroughness. I think you have an excellent course for weak-to-average students. I do wonder if your most able students might appreciate more opportunity to "play" and be creative, but in all honesty, they just need to stick with it into the Project Euler stuff at the end. Is this a whole-year course?
- teach 15y agoFirst, thanks for the kind words. This curriculum has been relentlessly pivoted and iterated based on feedback from over a thousand real students for the past fifteen years. Yes, this is a whole year (36 weeks). The material you're seeing is only the intro material, though. I teach three other courses, including video game development. The faster students are encouraged to skip assignments if they're coding something they already understand, and they get bonus points if they do something creative with an existing assignment. I've tried to optimize for the normal case: the weak-to-average student. The great ones however, don't need much help from me to learn a ton very quickly.
- scdc 15y agoWe learn to read before we learn to write well. Why do we start out writing programs? I've always thought programming classes should start with reading and understanding a program that has some loops, assignments, etc. Maybe a program that draws some shapes or parses/prints some strings. Then have students modify it some. Then afterward, start writing your own stuff from scratch.
- GlennS 15y agoIt's an interesting idea, but I disagree: I think you remember things much easier if you write them out (and have to make them compile/execute) yourself. If I read some code in a language I haven't encountered before, I find I don't absorb any of the little details of syntax. Moreover, I think it makes sense to expose learners to the fun of programming early. And to me that means seeing something that you wrote running.
- seabee 15y agoYour point seems detached from reality. You don't learn any language (native or foreign) just by reading it for months. You are instructed to use it yourself and create sentences, paragraphs, essays, and speeches. You build up your writing skills in tandem with your reading. Perhaps you don't write well until you've read a lot - but nobody expects you to write well as a novice.
- seabee 15y agoYour point seems detached from reality. You don't learn any language (native or foreign) just by reading it for months. You are instructed to use it yourself and create sentences, paragraphs, essays, and speeches. You build up your writing skills in tandem with your reading. Perhaps you don't write well until you've read a lot - but nobody expects you to write well as a novice.
- omaranto 15y agoAccording to my parents, at the public elementary school I went to for first grade in Toronto, Canada they taught writing before (or at least concurrently with) reading. Each kid had a diary in which we would at first draw and eventually write about something that happened each day. Kids would start with just pictures and gradually add more and more text. I don't remember any of this, but I can still read and write English even though we moved back to Mexico the following year, so I guess it worked.
- aboodman 15y agoSelf-taught-programmer here. I've done a lot of pondering about how to teach programming because I tried to learn several times myself, both on my own and in classes. I bounced off each time, until finally sticking. I always wonder what made it different that last time, and if it applies to others. === Have you considered starting with something with less conceptual overhead than java-in-a-shell? There's so much you need to understand before you can even get to writing code that way. You need to learn how to start and navigate a shell on your computer (different on each type, and depends on your system configuration). You need to learn about paths, and java versions, and sdks, and what 'compiling' even means, and the concept of source code vs a binary. This doesn't seem like much to people in the field, but I remember it being really intimidating. In contrast, I really love codecademy.org: http://www.codecademy.com/ http://www.codecademy.com/ You're writing code within seconds. You can access it on any computer and it always works the same way. Which is to say, it works like any other web site. You start seeing things happen right away, and you don't need to understand all the infrastructure initially. === I feel like getting people to that first high where they see their code generate output is really important. If you can get them quickly to feeling a little bit of that power that comes from software, that starts the fire, and they'll have more motivation to figure out terminals and paths and verisons and OSes and everything else.
- teach 15y agoI agree. I don't get to choose whether or not I teach Java; that's determined by the state. However, in my class, we write our first working program on the first day of coding. We install the JDK, do a basic DOS primer, type in our first program (in Notepad), and compile and run it on the command line in a single 90-minute period, like the 3rd day of class. Getting to the "bang" as quickly as possible is HUGELY important.
- sethg 15y agoDo the students move on to using an IDE? I realize that Eclipse or Visual Studio comes with a lot of overhead and you can easily spend a whole semester getting bogged down in all the options, but I would think that an editor with syntax highlighting and parenthesis matching would make a big difference.
- Legion 15y agoHeh. From the way I've heard some parents talk about Leander ISD, I would have figured the kids would have for loops down by 4th grade. :)
- teach 15y agoI wish we could start teaching real programming in middle school at least. I think just variables, if statements and some sort of looping construct ought to be mandatory in education.
- n2dasun 15y agoThanks for posting that. I love how thorough and paced it is. I'm definitely bookmarking that link, as well as /cs2/assignments.html
- teach 15y agoYou're welcome. Happy coding!
- rudiger 15y agoSICP doesn't introduce assignment until two hundred pages in.
- tel 15y agoAssignment isn't idiomatic in functional programming.
- dpritchett 15y agoThe functional programming is a side effect of the desire to teach computer science in a low-friction way. It's nice to not have to also teach Java along with your CS concepts. I know that when I teach myself anything it's best to focus on one new concept at a time. Scheme's light weight allows all but the CS concepts to fall away from the new coder's consideration.
- tel 15y agoThe functional programming is a side effect of the desire to teach computer science in a low-friction way. And why not code in a low-friction way even when not being taught? I wasn't intending to defend FP, but I think it's silly to think of assignment as a fundamental part of CS or the art of coding. It's just one tool.
- tikhonj 15y agoAnd, if I remember correctly, it never introduces loops. On the other hand, you learn about laziness, higher-order functions, deterministic and logic programming and how to implement the aforementioned, on top of a bunch of stuff you would learn in a Java class like recursion, OOP and networking. All this in the first four chapters; the fifth one introduces a low-level register based language but my class never got to it :( It is pretty cool. Ultimately, SICP just has drastically different (and I think better) priorities and topics than any course taught in Java or Python. I also suspect that a good SICP course moves even faster than the material here, simply because of the sheer density of big ideas in the book and the simplicity of Scheme.
- jiggy2011 15y agoWhen I first learned programming YEARS ago starting with Acorn BBC Basic it actually took me quite some time before I learned how to do 'proper' loops (e.g for , while etc). I was initially far more interested in how I could change the colours of things on screen and get the speaker to make funny noises. Most of what I wrote were text based adventure games so I didn't really need to loop very often. When I did need to loop I just implemented this using a conditional IF with a GOTO that jumped back to the start of the "block" (I kept paper notes as to which line numbers each subroutine started on) if required or continued to the next line of code. Later when I started using MS Visual Basic and figured out how to use GOSUB I would do loops essentially with recursion that would call the same subroutine again if required. It wasn't until I decided to learn C and php that I learnt about real loop structures. At this point I assumed that everything I had done before was stupid and wrong, it was not until I took formal CS classes where I was introduced to recursion and assemly language (JMP and JE) that I realised that pherhaps I hadn't been quite so naieve before.
- clistctrl 15y agoWhat's awesome though is a student can move at their own pace. If they're not ready for a for loop, then they can stay where they are, and continue practicing.
- Tichy 15y agoI guess that I taught myself programming from a book makes me a kind of super genius? Or maybe frontal teaching simply is not the right way to teach programming?
- TreesCanCode 15y agoI think there is a world of difference in the "average total beginner" high school students taking a class to meet a district mandate, and the "average total beginner" self-motivated learners actually interested in computer science.
- teach 15y agoMy class is an honors elective, fulfills no state requirements, and there's a waiting list to get in. My kids are already pretty motivated. You really, really have no idea how difficult precise logical thinking is for an average person.
- elviejo79 15y agoWhat other languages have you used? Im starting to teach an intro cs course n highschool next semester and would love to hear some real experiences on this. have you looked at: etoys scratch starlogo alice or scheme ?
- wiredfool 15y agoI'm doing scratch with some middle school students (grade (6-8). Most of them got looping within a class or two. Hell, we had kids doing chase games in the first hour and a half of messing with it. Oe of the kids now is working on space invaders, and star ting to get where scratch falls down on maintainability and repeating onesself. and the royal pita it is when you can't type in things, and have to rely on shaky mouse movement. At some point soon, I'm planning on moving to something where they can distribute what they're doing, either as JavaScript, or pygame, or something. I'm hoping to be able to literally translate a scratch program to the n+1 environment so that they can see the equivalence of the looping constructs and the event handlers and everything else.
- tikhonj 15y agoI think JavaScript would be a great option here: you could have them show off what they've written online, the language makes drawing pretty pictures and the like relatively easy and JavaScript is simply a nice language overall. I can't imagine anything that would have pleased me more than being able to show off my own web site when I was that age. Of course, making silly web sites for myself is how I got into programming in the first place, so I'm probably biased ;)
- elviejo79 15y agoThis goes to prove that java is a pretty bad language to teach pogramming. in logo this is how you draw a square forward 100 Right 90 Forward 100 Right 90 Forward 100 Right 90 Forward 100 Right 90 Then in the second lesson you introduce loops repeat 4 Forward 100 Right 90 End then you ask kids to draw hexagons octagons etc. and they will never forget what a for loop does. Edit changed repeat 8 to repeat 4. Thank you.
- roryokane 15y agoYou could do that in Java if you just imported a turtle graphics library. A quick search brings up one such library, http://www.bfoit.org/itp/JavaTurtleGraphics.html http://www.bfoit.org/itp/JavaTurtleGraphics.html. I agree that Java is a hard language to learn with, but its faults are not related to being unable to use turtle graphics as examples.
- mquander 15y agoNo, you couldn't. Did you look at that link? You have to wrap all this OO ceremony around it. I don't think it's optimal to make someone type class Cross extends TurtleGraphicsWindow { public void myTurtleCmds() ... at the start of every program when they don't yet have the background to understand what a single one of those words are for. It instills a habit of doing crazy shit mindlessly to try to satisfy the mysterious computer.
- tricolon 15y agoI remember learning Java for the first time. I literally thought of "public static void main(String[] args)" as an incantation I just had to know. It took some practice to memorize it. It took far longer to actually learn what it meant.
- elviejo79 15y agoMy point is that there are good tools to learn programming. I think that there are languages in which difficult concepts befome easier to explain. logo being the prime example of such a teaching language.
- pbhjpbhj 15y agoI taught my 6yo for loops in the first lesson using Scratch, but I think our treatment may have rather less rigorous/complete ...
- sethg 15y agoI’ve been programming professionally for over ten years, and when I have to look at Java code that other professionals have written, I am constantly irritated by how the actual point of the code is buried in… mquader’s “OO ceremony” label elsethread is an apt phrase, although “Java ceremony” might be more fair. It wouldn’t surprise me at all if high-school students learning Java as their first language got confused much more readily than students learning Python (which was, after all, originally designed as a language for teaching OO concepts). Of course, the College Board, in its infinite wisdom, has decreed that the AP Computer Science tests be given in Java. I suppose we should be grateful that they no longer do it in C++.
- tikhonj 15y agoI think that just starting out with the assumption that OOP is the "one true way"--AP CS really comes across that way--is flawed. A languages like Scheme would be a much better choice for an intro CS class.
- sethg 15y agoWorse than “OOP is the one true way” is “OOP is the one true way and Java’s style of OOP is the one true OOP”. I’ve heard of a CS curriculum that starts by teaching Scheme and ends with a segment on “OK, now you know how to program in Scheme, here is how to do it in Java”. I don’t know if that can fit in one high-school class, though.
- archgoon 15y ago>>... Python (which was, after all, originally designed as a language for teaching OO concepts). This isn't quite right. The teaching language was ABC, a different project that Guido worked on. Python was his own language, created for the Amoeba project (an OS research project), inspired and influenced by, but not the same as, ABC, which was not object oriented. Guido says that the purpose of python for the Amoeba project was to: "bridge the gap between C and the shell" http://en.wikipedia.org/wiki/ABC_%28programming_language%29 http://en.wikipedia.org/wiki/ABC_%28programming_language%29 http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi.html http://python-history.blogspot.com/2009/01/personal-history-... However, if you have additional information, I'd love to hear about it. I've heard the "Python was originally a teaching language" several times, but as far as I can tell, that's not actually true.
- jbermudes 15y agoIf I may ask, what is your credential in? There seems to be quite a mess in regards to how to get in to the field since there doesn't seem to be a computer science credential, and coming in with a math credential will almost certainly get you assigned to teaching math classes and math teachers are always in demand.
- teach 15y agoI've got a bachelor's in CS, and teaching certificates in both mathematics and "computer information systems", which was what the CS certificate was called 15 years ago. There is now a teaching certificate in just "Computer Science", although it wasn't offered in Texas for a few years while they were switching from one to the other. Other states vary widely, I'm sure.
- speleding 15y agoIsn't a core credo of teaching that you should first draw the wide vistas so students will have an easier time comprehending where all the details go in the big picture? It seems that you would at least mention loops early on, to tell them that repetition is something a computer is very good at.
- bradgessler 15y agoYou seem to imply the speed at which the Kahn Academy teaches loops is a bad thing? I'm catching that vibe from your post. What if the Kahn Academy is teaching the concept in a more clear, concise way than you are? Maybe Java isn't the best language to teach these concepts? Maybe your lessons could be more effective? I don't know what your particular situation is, but I encourage you to play around with your lessons to see if you can teach it as fast as the Kahn Academy. Then again, they could have it totally wrong.
- savramescu 15y agoHe does say that java isn't his language of choice, but it's one he has to stick with. But if you've got a CS course as introductory to programming than his assignments go a long way to learning stuff. Bear in mind that this is not a class designed for elementary or high-school students, but for college, for people that really want to learn how to program, and how everything works.
- teach 15y agoMy class is a high-school course. Not sure if you're suggesting that Khan Academy's material is pitched at college students, but I don't think that's true.
- teach 15y agoIt's unlikely that Khan Academy's curriculum is better than mine. My curriculum has been relentlessly pivoted and iterated based on feedback from over a thousand real students for the past fifteen years. I've taught literally one thousand teenagers to program, face to face. I'd be shocked if Salman Khan had taught even a couple dozen students face to face. Edit: I accidentally submitted this too early, and then replied instead of editing. See my reply for the rest of this thought.
- teach 15y agoSo what I'm suggesting is: take 200 students, and have 100 go through Khan's material, and 100 go through mine. Khan's kids would finish faster. Then, have all 200 kids attempt to code FizzBuzz on their own, with no assistance. I think probably 60-70% of my students could get it working. I suspect less than 20% of Khan's would have understood/retained enough to get it done. You are in the 20%, so it's hard for you to see the difference. Salman Khan is in the 1%, and he hasn't been in the trenches long enough to see the difference. That's what I'm saying.
- nextparadigms 15y agoI think Khan is moving too fast through them, too. Have you tried these: http://www.thenewboston.com/?cat=40&pOpen=tutorial http://www.thenewboston.com/?cat=40&pOpen=tutorial
- wattjustin 15y agoI have been using these to learn programming (Python specifically, which is my first language). I am curious as to what others think of these tutorials if they've seen them before?
- capkutay 15y agoI wish I had a CS teacher go that in-depth before covering loops. My first CS class was in c++ and the material came off as extremely unintuitive (like what the hell is int main()?!?!). Learning CS is definitely a slow process. Actually understanding CS took me as long as understanding music theory enough to be able to improv/solo on a musical instrument (piano and guitar in my case).