College Board AP CompSci Exam Will Be In Java
orangesquid writes: "Looks like the College Board has changed the tune for their AP Computer Science test: in a few years, it will be in Java. Eep!" From the announcement linked to in there: "In October 2000, the AP Computer Science Development Committee made a formal request to the College Board that the AP Computer Science curriculum be revised to include object orientation and to use Java as the delivery language for the AP Computer Science Examinations, beginning with the 2003-2004 academic year. The request was approved by the College Board in November 2000."
The Java2 spec clearly states:
Wow. Go figure...;->
Easy, automatic testing for Perl.
Why does a compuer science test have to be confined to a language? Regardless of the arguments that the language could die, or changes too fast, it seems a little restrictive. I've taken many pseudo code and theoretical tests which in my opinion are much better for testing understanding of the material such as procedural vs object oriented, algorithms and complexity, data structures, etc. They could have chosen Perl, Python, [insert your favorite language here] and my answer would be the same. Test theory, at least at the AP level.
to help clarify:
etc.worth looking at just to see what they'll be looking for
"It is a greater offense to steal men's labor, than their clothes"
Yes, Java is much easier to learn than C++. (Although, I have heard some purists argue the point.) Yes, Java does teach basic "object orientedness," but if the aim of the Board is to teach true object oriented programming they ought to teach/endorse SmallTalk where EVERYTHING is either an object or a message between objects. Granted, we want our high-schoolers to stay sane, however, there is something to be said for teaching the right way the first time.
Sometimes I worry that our high-schoolers are being taught tools instead of concepts. I know that univerities go much more in depth than any high school can. At the same time, I sure wish that I had had a stronger theoretical background in computer science from my high school that only taught Word Processing and Basic.
When I took it in 1986, it was based on Pascal.
The language doesn't really matter, the programming concepts do. However, it's very difficult to talk about programming concepts in the absence of a language, so they need to settle on one.
It makes sense to use one that has real practical use, so students can learn relevant skills along with the theory. That makes the education more valuable and easier to grab onto for the students.
I am a final year CS student, in the UK. On my course, we were taught SML, lisp, mips assembly & C in the first year and Java from the second year (amongst other languages). From next year on, SML & C will be cut, and they will teach Java from day 1 of the course.
;-)
:-)
The C course was tough for people new to the language - and most people like me who knew the language well skipped every lecture & aced the exam. I can see an arguement for dropping C from the core compulsory syllabus - most of the language overlaps with Java - and there are many CS related jobs in the world for which you never need know what a pointer is.
But it is a shame that SML has to go. SML is a functional language, and few people had programmed in it prior to starting the course, so it brought everyone to the same level. It taught something new to everyone, and opened up the minds of a bunch of hardened C hackers to a different paradigm. I'm sure exactly the same could be said for lisp, but I hated the lousy stinking language myself
I'm sure that most people reading this have probably never programmed in a functional language, and if you are a C hacker I recommend you do so - it will expand the way you approach programming. Or try something ever more, uh, different - go look up the language brainfuck, and get yourself stuck in a turing tarpit.
End rant. Just thought I'd relate this experience
cheers,
G
C++ is the medium, not the message. The class isn't "AP C++", it's "AP Computer Science", and my original point was that C++ is an unnecessary encumberance on learning computer science. I learned French in high school by studying grammar and conversing, not by reading Sartre. The medium can interfere with the message. Why do you think children don't learn to play, say, the oboe or bassoon at a very young age, instead starting on the clarinet? Unnecessary complication gets in the way of learning the basics.
The goal of computer science education is not to churn out C++ coders; rather, it is to churn out people who are capable of describing solution generators rather than merely "solving problems", people who are capable of procedural epistemology, abstraction, and analysis. That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts. I taught myself Java and implemented LZW in a total of three hours, because I had a strong foundation in the basics. Making students learn computer science via C++ is like making them take the President's physical fitness test in shackles.
Why does everyone on Slashdot hate Java so much?
The losers and poseurs hate Java. The real hackers see Java as just another tool in the toolbox. It's not a tool I have much use for, nor a tool that I'm particularly fond of. But I don't go out of my way to slam Java, either, and more to the point, I don't know a single serious programmer who does.
I consider the One True Language belief to be a childhood disease.
C++ is simply a pain in the ass and it's [sic] OO design is crap.
Please show me how its OO design is crap. Just give me a good, solid example of unadulterated crap in the C++ spec. I've been looking for years and I haven't found any. That's not to say there aren't warts and blemishes on C++; but unlike almost every other language out there, C++ was not designed--it evolved.
There isn't a single feature in C++ which went in just because it was "elegant". Nor is there a single feature in there which was left out to "enhance the purity". C++ was originally C With Classes, when Bjarne was just starting out... and then people gave him feedback, and then people began to mutate Bjarne's C With Classes to fit their own needs.
A lot of people complain that C++ lacks garbage collection. That's a fair criticism; that is one of the warts of the language. What people don't understand is that C++ lacks garbage collection because GC is something that's very hard to implement correctly. C++ lacks a standard thread library for the same reason.
Compare C++'s lack of GC and thread libs to Java. Does Java have GC? Yes, and it's Godawful. Does Java have a thread lib? Yep, but it changed dramatically between 1.0 and 1.1, and even now Java threads still are being tweaked on.
I originally learned OO programming in Eiffel for NeXtStep here and that was coming from learning Pascal for the AP test back in 1996.
I'm happy for you. Now open your mind a little bit and realize that Eiffel is not the be-all end-all of OOP. Nor is Smalltalk, nor is Clu, nor is Simula67.
OOP is a concept, not a concrete reality. Just like a PIII is conceptually a Turing machine, but it doesn't have a paper tape and a symbol scanner. There are dozens of implementations of the OOP concept--I've seen them done in C, in C++, in Java, in LISP (!), in Simula67, in Smalltalk, in Objective C... and all of them have their warts and flaws. But by studying them and realizing where they're flawed and where their flaws are actually stunning successes, I've been able to better grasp the abstract notion of OOP.
If the only thing you study and appreciate in your CompSci career are languages you think are neat, you're going to wind up a well-educated idiot.
Java is NOT bad
Undisputed by every programmer I respect. Of course, just because it's not bad doesn't mean it's good, either. I'd give Java a grade of "painfully mediocre", myself.
Java has the best networking API on the planet
How many networking APIs have you studied? Have you fully grokked the raw power of the UNIX C socket API? Have you seen the beautiful elegance of some of the C++ socket libs out there? What about Perl and its networking abilities? Python? CORBA?
They're all just tools in the toolbox. Use the right tool for the job. If you like the Java networking API, fine; I'm not going to tell you it's bad (because it's not). But if you're going to say Java's API is unquestionably the best, you're going to have to prove it, and I don't think you can.
C++ is crap for OO
You apparently don't know beans about OO, or programming in general, or else you'd know that this statement is false.
Is C++ perfect? God, no, not by a longshot. I beat my head against it frequently. But that doesn't change the fact that for OO, C++ is one of the best languages out there. Not the cleanest, not the most elegant, not the best-designed... just one of the best.
If true OO design philosophies are held so highly by all of the geniuses on Slashdot why do programmers for Linux make EVERYTHING in C and then try to fool themselves into thinking they are actually OO when they are not?
Ever seen GTK+ or GNOME? Both are object-oriented. Written in C, natch. This probably boggles your mind, since you think that C isn't OO. The truth, which all of us real OO programmers know, is that almost any language can be used to write OO code. C++ just provides some syntactic sugar to make it easier.
The kernel is also rife with objects.
Motif is OO C as well.
Maybe if people learned OO programming...
... like you did?
and used decent OO languages...
... like the ones you think are decent?
before trying to do everything in C and half attempts at C++...
Define a "half attempt" at C++, please. I can write procedural code in C++ and have it be perfectly valid C++.
then we would have a better Linux/Unix today.
I think you need to learn a lot about OO, and expose yourself to a lot more languages and paradigms, before you'll be able to sell me on any of this.