Murdoch's AP Computer Science MOOC Goes Live
theodp writes "Friday saw the launch of Rupert Murdoch's AP Computer Science MOOC. Taught by an AP CS high school teacher, the Java-centric course has students use the DrJava lightweight development environment for the exercises. 'If this MOOC works,' said Amplify CEO Joel Klein, 'we can think of ways to expand and support it.' Only the first week's videos are posted; course content is scheduled to be presented through March, with five weeks thereafter set aside for AP Exam prep. Might as well check it out, you may have helped pay for it — a MOOC-related Amplify job listing notes that 'This position may be funded, in whole or in part, through American Recovery & Reinvestment Act funds.'"
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World. Obama is a muslim.");
}
}
Does anybody know about the historical genesis of the choice?
Was there some aspect of Java that was seen as particularly useful pedagogically, or did somebody get seduced by the 'Java is the Enterprise Language Of The Future, don't you want students to be learning Relevant Job Skills?' line?
Nothing on the site explained what "MOOC" stood for, including the FAQ where it should have been question and answer #1. Luckily Google helped me out, but it's still something that should be front and center on the site. This is like Communications 101: define your jargon/acronym the first time it's displayed, don't just assume everyone knows what you're talking about. It's indicative that these people are so far up their own ass they just assume everyone already is on the same page as they are.
...head explodes.
Be fair: I ordered an extra 16 GB of RAM not long ago, and the two DIMMs together only weighed maybe 50 grams.
As best I can determine:
It was Pascal for many years, which had once been widely used as an introductory language. But by the late-'90s Pascal was starting to be seen as an obsolete choice, and the exam was switched to C++ in 1999, with the justification being that C++ was widely used and more practlcal than Pascal.
However this move was seen by many educators as producing significant teaching complexities, since the classes (partly exacerbated by what material the exam chose to test) ended up spending an inordinate amount of time on accidental complexity that obscured real issues for novice programmers, like how iostreams works. I took AP CS in 1999, and we spent weeks on iostreams, along with miscellaneous other C++-specific nonsense. Dissatisfaction was high enough that the exam fairly quickly abandoned C++, but wasn't willing to go back to Pascal, which was still seen as obsolete. So they moved to Java in 2003, with the justification that Java could exercise many of the same concepts as C++ (you could teach OO and whatnot), but with less up-front complexity for novices. And it's stuck there since.
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Python already has a dictator - no role for Rupert.
Lisp is illegal in Russia.
Google uses it so it must be good.
Java is maintained by a large corporation.
Java is not a functional language.
Too many third-world software designers already - first world kids should learn to become something non-exportable like plumbers, waits, or politicians.
Smart phones!
Rupert thought it was just like Javascript, only shorter.
Teaching a language they could use would be too dangerous. Leave cracking to the Nazional Sekurit Apparatus.
Paid off.
Verbum caro factum est
Every part of the method declaration you quoted is important for a student to understand. And not just the student who is learning java.
1. "public". This speaks to the difference between public, private and package visible methods. That is to say, information hiding, which is a key concept in object oriented design.
2. "static". This speaks to the difference between class and instance methods. Again, a key concept in object oriented design.
3. "void". Return types. Or, in this case, the lack of one. You'll be hard pressed to learn how to program w/o learning about functions that return a value.
4. "main". This speaks to the need for the operating system to know where to "start" your code when it's executed.
In fact, I'd even go so far as to to say that java being verbose and requiring that these modifiers be explicitly specified is a positive in the context of it being used in a teaching context.
Right, that's 4 concepts which have to be explicitly explained (or passed over) before we even get to how to put a single character on the screen, or add two numbers....
Sphinx of black quartz, judge my vow.
'Asserting that the K-12 education market is “ripe for disruption" Joel Klein, former New York City schools chancellor, now executive v-p at News Corp. and director of Amplify, its education unit, offered a presentation of Amplify’s business model and plans to release hardware and software solutions`
...
No comment necessary
I'm fine with pausing to explain. Putting "hello world" on the screen isn't worth much if you don't understand the other stuff. In an intro class you could give a cursory mile-high explanation and go into more detail later on. Glossing over the OO concepts is why you get guys in industry who write java like it's C.
Am i the only one that was hoping this to be a story about crazy ass pilot Murdock (actor Dwight Schultz) from the A-Team having built a computer laboratory/system much in the spirit of programmer Zimmerman (actor Dwight Schultz), the creator of the EMH (Emergency Medical Holographic) doctor program from Voyager?
I hope not..
Hivemind harvest in progress..
I really find it a tedious stumbling block explaining to my kids all the ``public static void main'' stuff --- really wish that Oberon had made it instead. Niklaus Wirth at least has his manuals heading in the right direction (Pascal, hundreds of pages; Modula, a hundred or so, Oberon, dozens).
As a professional who has done Java for application (enterprise/web/web service) and system/network protocol development for 12 years, I would say no. Java is not a good choice for a beginning or even intermediate level programming curriculum. As a very productive platform for developing robust systems, Java delivers.
For pedagogical purposes, specially as a starting programming language, it is atrocious. I would have preferred Python or Ruby focusing first on procedural programming, leaving object and functional features for later (rarely does a student leverages OOP and FP cleanly without having a good grasp of procedural programming, data structures and algorithms.) Or *gasp* BASIC or a Pascal variant or even C (students need to know right of the bat what a segfault is.)
I would typically choose Java for development of robust systems. I would never use it as a language in an into-to-programming course.
Right, that's 4 concepts which have to be explicitly explained (or passed over) before we even get to how to put a single character on the screen, or add two numbers....
Exactly this. It's accidental complexity that has nothing to do with the fundamental tasks of programming that are supposed to the focus of study.
A BASIC/Python "print" or a Pascal "write/writeln" is supposed to be obsolete and clunky, but System.out.println enclosed within a mandatory class that is just not a class, but a public one, with not just a main function, but a static one, and with its name exactly case-matching the filename that declares it while making sure that no other "public" class exists in said filename, that is supposed to be pedagogical progress </rolls eyes>
Ruby and Python are scripting languages. Students are better off being exposed to Java or C++ from the start so they can see if they have the knack for programming or not. Sink or swim, as it were. Putting students on scripting languages just creates the perception that they are doing true software development when they are not. If you're going to use Python or Ruby you might as well put them on VBScript or JavaScript. Or go whole hog and put them on CoffeeScript so they don't have to deal with the agony of curly braces and proper formatting.
That's bull. Scripting or otherwise doesn't make a difference for the tasks of learning the basics. Again, based on my 12 years of programming experience with Java, Java is not a good pedagogical choice. And C++ (where I also have work experience)? Please, that's another bad choice. Too many semantic subtleties that have nothing to do with elemental programming tasks. Plain old C is a much better pedagogical option. Like C++, no memory management and plenty of segfaults and pointer management. Unlike C++, no semantic complexities related to OOP, STL, IO streams, clunky/incomplete exception handling mechanisms and the like.
At that level, I'm interested in a student to immediately know how to focus on the details of an algorithmic solution, and the essence of data structures and basic control flows. I'm interested in him/her understanding procedural programming principles.
All the additional semantic baggage that comes with Java and C++ (a function of what *WE* thought was essential language/compiler design principles at the time) just get in the way.
Moreover, this semantic baggage requires the learner to have a certain programming dexterity on the fundamentals that are better obtained when we focus on those alone. Yes, I believe in sink-or-swim as well. But do it with purpose by exposing the essential complexity of programming, not because we suck monkey gonads at choosing our pedagogical tools.
Programming is hard. News at 11.
Programming can be taught hard. But compared to other academic fields, it's relatively easy.