High schoolers, advanced placement and Java
Upon further inspection, it looks like The College Board, the company that oversees the Advanced Placement Program (AP) has also standardized on Java, which I'm sure influenced the school's decision.
Before learning that my alma mater offers modern programming classes, I was considering volunteering to teach an adaptation of MIT's 6.00 course as an extra-curricular course. 6.00 uses Python.
This has me thinking about the best language for new programmers. Java is obviously a powerful language with many useful add-ons, and I don't think it's bad for students to have exposure to it, but I wonder if it's the best language to start with.
Are there any teacher hackers out there that can shed some light on this? I'm not a teacher, so this isn't my area of expertise.
Any info on The College Board's reasoning would also be appreciated.
11 comments
[ 2.7 ms ] story [ 38.9 ms ] threadAs someone who went to school during the transition period, it was weird to take intro to programming in C++, then swap to Java for AP-level work, but at the same time, the change wasn't that great since the syntax is quite similar.
When I was in high school, the explanation for the change was always along the lines of "Java is cross-platform and going to be the industry-standard by the time you come out of college." Now as a senior in college, I wonder if that statement is true these days.
C is easy enough until you hit pointers (and arrays give people trouble, strangely enough). Eventually pointers were just dropped entirely, and the students were told to memorize that scanf is magic.
Then came Java. It was taught as if it were a prettier C. No objects anywhere, just a bunch of static methods. The students were told to memorize a bunch of magic once again (what's a "class"? why do I have to type "static"?).
I did not get a chance to help anyone struggling with Python. I think it is a better teaching language, but you still have to teach a subset. If you show beginners a list comprehension, they will likely swear off programming forever :) The advantage is, the subset you teach can avoid magic.
One problem: Java is a (current) standard. Schools want to teach things they think are useful in the workplace. Interestingly, students want to learn these languages for the same reason. Just google "what programming language should I learn", and read the responses. A large number will base their answer on "what's used in industry".
I wish the focus, especially for the AP program, was less on what the industry is doing and more on what is best for becoming a successful computer science student.
If a student is taking an AP course, they're not looking for vocational training, and I don't think that's what colleges are looking for, at any rate.
You forgot recursion. If there are two things you can count on CS1 students to not understand, they're pointers and recursion.
I took AP Comp Sci AB last year, and I found that although the material was somewhat easy, many of the students had difficulty dealing with the syntax. Another major issue i noticed was with the concept of OO programming. IMHO it would be better to start an AP CS course with a semester of Python, so that the students can get an idea of how programming works, without having to deal with Java's verbosity. Then you can spend the second semester exclusively on Java. Because the students will already know the basics of programming at this point, they only really have to deal with the syntax and with generics, instead of having to learn syntax and coding at once. That's just my 2 cents...
The real question is: if you're going to teach an extra-curricular course, what do you want to expose the kids to? A practical language that makes it easy to do projects at home (like Python)? Some more theoretical CS ideas, which can be expressed elegantly in Scheme? Both?
Keep in mind that the kids who take this course will probably also be in the AP class, so you should try to complement whatever material they get there.
It was: Pascal since at least 1990 (probably earlier?), C++ since 1998, and Java since 2003.
Note: years are from memory, and may be off by a bit, but the general idea is right.