Slashdot Log In
College Board AP CompSci Exam Will Be In Java
Posted by
timothy
on Mon Dec 18, 2000 09:12 PM
from the why-not-lisp? dept.
from the why-not-lisp? dept.
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."
This discussion has been archived.
No new comments can be posted.
College Board AP CompSci Exam Will Be In Java
|
Log In/Create an Account
| Top
| 323 comments
(Spill at 50!) | Index Only
| Search Discussion
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Re:as a student learning java. . . (Score:3)
Java is the language of the first 2 programming subjects of the CS degree I'm doing.
- 1st one teaches basic programming (syntax etc) and introduces searching, sorting, writing GUI's.
- 2nd one teaches more GUI'd, more searching and sorting, threads, hashtables, linked lists etc.
How is Java a bad choice for learning any of this? What difference does it make?
The next 2 programming subjects are C and C++ repectively, which focus more on data structures, code performance and other more advanced things that are usefull for building real applications.
I think Java is a great language to teach high schoolers. Of the stuff that not's in Java but is in C++ what would be part of an introductory programming course?
Java also has a bit of buzz word value and that is good (hear me out). I'm sure that a lot of kids will take the class because they've heard that Java programmers make easy $$$. Of thost kids I'm sure that some of them will gain a real love for programming and computer science. And that is a Good Thing (tm).
Re:Lowering the standards once again. (Score:3)
I'm wondering how many people here are in or recently graduated from high school and thus know just how Advanced the AP courses in general are. Take a look at the information on Exam Scores [collegeboard.com] at the Collegeboard website. According to them, a score of 5 (the highest score) indicates that the student is Extremely well qualified in the subject.
Now, guess how well students have to do to earn a coveted 5? The cutoff varies between subjects and changes from year to year, but it is quite common for the cutoff to be around 65%. From the Collegeboard site:
The cutoff for Computer Science AB is always one of the lowest. I don't have citations for these numbers, but the year I took the test (1998, my sophomore year) the cutoff was about 55%. So any student that can show he/she has mastered just more than half of the material is considered Extremely Well Qualified. The funny thing is only about 10% of the people who took it got a 5 (indeed, that is how they determine the cutoff - something like "top 10%").
So now they want to teach it in Java. I hope this causes Apple or someone else to develop some resemblance of a decent Java VM for the Macintosh because so many schools use Macs exclusively. Right now the Netscape and the Metrowerks VMs are abysmal...
I met a person in college who said his high school's AP Computer Science course consisted of nothing but playing Need for Speed III the whole semester. He took the AP test and got a 1, but got an A for the course, which boosted his GPA enough to make him valedictorian of his class...
-Albert Mao
Read the spec! (Score:5)
The Java2 spec clearly states:
Wow. Go figure...;->
It gives teachers something else to bitch about!! (Score:3)
Since the school year started there has been a lot of griping and bitching on the APCS listserv about how wrong it is to change. Many of the complaints from the teachers were things like:
- I just learned C++ -- now I gotta go learn Java?
- AP can't do this unless they wanna a pay for the new software and texts (like Java costs so much more than C++)
- By the time we get all the Java syllabus and course materials together and proofed, some other language will be the horizon. (True.)
- Who cares -- I can retire before then.
Very few teachers objected to Java based on the types philosophical issues being discussed onDon't get me wrong -- I am a high school APCS teacher who teaches 4 or 5 other preps depending on the semester. I can respect that teachers will have to spend some (uncompensated) time and effort. I also acknowledge that compared to many others in CS jobs, most teachers get paid far less. Many teachers are forced to spend so much time with paperwork, meetings, and committees that finding time to keep up with changes is hard.
Personally, I don't think that Java is any worse than C++ for the purpose of learning basic concepts and algorithms, but I don't necessarily think it is significantly better either. My biggest problem with the switch is that the unfortunate students who take APCS in 2003-2004 may be dealing with a lot of annoyed, disgruntled or inexperienced teachers. In the short term it will make it even harder for schools to find qualified people to teach AP.
Of the teachers who thought the change was a good idea, many of them already knew some Java. They may be right, but I wish that as a group teachers would spend more time discussing how to deal with the change, not just how it will affect them personally.
I guess I'm agreeing with posts that wonder why we have to specify a language at all. The only good answer I can come up with for that is: arbitrarily picking a language makes the test easier to write and easier to grade. And the APCS being a for-profit part of the ETS, I'm sure that cost efficiency is a factor in the decision.
Before anyone replies that ETS just does what the teachers on the commitee recommend, try convincing ETS to allow the students to pick which language at the time of the test. Hmm... I could teach kids Commodore Basic or 6502 assembler. Let those test readers try to decipher 10 X=PEEK 59468:POKE 59468,(X XOR 2)
As far as teaching engineering/problem solving instead of coding, I know that kids will groan out loud if I tell them they will be learning about concepts and algorithms, without much application to real programs.
How about a list of three languages that local teachers and students can choose from?
Like so much in education -- I guess teachers and students will just have to do the best they can with mandates imposed upon them.
Re:who cares? (Score:3)
That's one of the funniest things between high-school and college. In high-school, AP is Advanced Placement, but in college it's Academic Probation! "Hey, Mom, I'm an AP student" usually still works, though =-)
Re:Good. (Score:3)
Nor is the goal of AP Computer Science to turn out C++ coders. I'd imagine you'd find the College Board's goals for AP CS students are not far off from your own ideals. If you took the actual test, you'd see that it's very little about "What do you use endl for?" and very much about "What are the properties and structure of a binary tree?"
That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts.
Then what language do you propose? I agree that Java is a simpler, cleaner language than C++; I'd imagine most people would concur. There are lots of other good object-oriented programming languages in the world; some people posted to this story requesting Smalltalk, others might want Ada 95, others might want Steven's Toy Language. These, of course, are not good choices, not as much because they are of little practical value to the student, but because they are foreign to the instructors. But, despite what you might think, I would consider practical value to the students to be a worthwhile consideration: Smalltalk is a clean, simple, pure-OO language, and superior to C++ in most every way, but if you take a student who has learned to program in nothing but Smalltalk and a student who has learned to program in nothing but C++ and put them both in front of a Java compiler with the job of writing your LZW compression project, who do you think would fare better?
The fact of the matter is, computer programming has for a very long time been focused squarely on imperative programming languages, and is these days very focused on object oriented programming. These seem to me, then, to be reasonable topics for a high school-level CS class to endeavor to impart knowledge about. At the time the College Board made the switch from Pascal, C++ was the natural choice to satisfy the pedagogical demands. Java had no doubt not proven itself to the glacial folks in the standardized testing world.
You might argue that imperative programming is not a good medium for teaching the concepts of computer science. I wouldn't disagree. I spent a year studying at the University of Edinburgh, where the CS students all start out learning ML. The students bitched and bitched and decried ML left and right -- even more so after they learned an imperative language -- but I though it was pretty cool that they hadn't been thrown into the murk of pointer arithmetic and endianness like I had.
Finally, some people have posted suggesting that the all-powerful language-neutral exemplar, pseudocode, should be used, as language isn't important. This is ridiculous. The AP CS test has to test knowledge of things like pass by reference vs pass by value, self-referential data types, etc. To do so you need constructs in your programming language to support this (e.g., pointers/references). In a multiple choice question on a pseudocode code sample, how is the College Board going to express whether an rvalue is having its value taken or a reference to it? You obviously have to have notes or syntax to express these things, and the kids taking the test have to digest it. I'd much rather spend a little bit of time learning the basics of a "real" language rather than have to guess at the intentions of the author of some fucked up pseudocode...
C++ is the medium, not the message.
Marshall McLuhan would argue that the medium strongly controls the discourse available to the entities conversing in a given programming language. I would agree; a C++ programmer will think very differently from a Prolog programmer. Ultimately, though, C++ was a good, practical choice of CS worlds for the high school-aged computer scientist to dip his feet into. (And Java, of course, is better.)
Why confined to a language? (Score:4)
Doesn't matter (Score:3)
Oh yeah, and stupid recursion exercises just to see if we're paying attention.
And lots of stupid recursion.
And recursion.
And some more recursion.
Teach OOP Before Teaching a Language (Score:3)
Compare how frequently you have to design and implement classes in your own work to the frequency with which you need to design and implement algorithms. These days, all the algorithms and data structures that would be taught in an AP class are provided by libraries that you just use. I know the vast majority of code anyone writes just sort of does stuff, it can hardly be called an algorithm. But making good choices about program structure (and these days this means class structure) is crucial to having any hope of ever getting a program to work, let alone run efficiently.
A while back the San Jose State University Professional Development Center [sjsu.edu] asked me to teach some programming classes.
I proposed to teach two classes, one on the fundamentals of object-oriented programming, and the other an OOP project - writing a program of some significant size (considering the experience level of the students).
My descriptions of the two classes are given here [goingware.com]. The links to the original course descriptions in that page seem to be dead now.
I felt that these two courses addressed two signicant flaws in most introductory programming education - one was an inordinate focus on the particulars of a language without concentrating on how to program well, and the other was that the exercises done in a course rarely took more than a week to do, and even if there was a term project, it usually was mixed in with other work, and so it wouldn't be of significant size.
This means that exercises in most introductory courses typically gloss over important issues that crop up in real software development, like robust error handling and dealing with the architecture of your program on a large scale.
These courses weren't meant to be that long so I really couldn't get that far into it but the point was that I would be neither teaching the language nor computer science (algorithms, data structures, etc.). Instead, I would be teaching what I could probably get flamed at for calling The Art of Software Engineering.
In the first course, I would concentrate on how to make good choices for what classes to use in your program and how they should relate to each other (when to use inheritance vs. composition, for example), basically how to acquire a good sense of aesthetics for the best way to divide your problem into maanageable parts. There are an infinitude of ways you can write a program, but a far lesser number of good ways to write a program, and this is not commonly taught.
I would use Java in the class, but cover the bare minimum of the language required to cover the conceptual material. Someone else was planning on teaching a course on Java itself.
I also felt that the project course would be of significant value in helping the students find real programming jobs. While they may have to expand on the projects after leaving the class, I knew that (at the time anyway), noone would hire a novice programmer until he'd shipped a product (oh how times have changed) - free software and shareware does count as a real product, but the important thing is that you have to have completed a program of some significant size.
Ironically, the courses were canceled after only two students signed up for them by the enrollment deadline.
Our general theory was that the students didn't percieve this classes as having an immediate payoff in a marketable job skill (SJSU Prof Dev was in good part a fundraising component of the regular University so the classes were frequently targeted towards marketable skills) - when really I felt it would do you more good than a class concentrating on Java or any particular language - it's not hard to pick up a language out of a book but what I meant to teach really would need personal interaction and discussion with an instructor and one's classmates.
I'd still like to teach the classes. I am doing just that in one form by writing GoingWare's Bag of Programming Tips [goingware.com].
Michael D. Crawford
GoingWare Inc
Link for full specs (Score:5)
to help clarify:
etc.worth looking at just to see what they'll be looking for
Good. (Score:3)
High school students shouldn't have C++ imposed upon them, because then the medium will interfere with the message. How easy is it to contrast a bad algorithm with a good one when you can't even get the bad one to compile? How do you have time to learn what a hashtable or a Hamilton sequence is when you spend half the semester learning the difference between "const char *" and "char * const"?
I don't hate C++ -- it's not the best designed language, but there are many useful subsets of C++, and combined with engineering discipline, any can produce a successful project. However, it is not a first language. It is not a teaching language, especially in cases (like AP CS was for my little sister) where "C++" basically means "C with cout". A teaching language should be one that a bright student can learn the syntax of in three days, so she can spend the rest of the year learning idioms and concepts that are applicable to CS in general.
~wog
Java isn't platform independent, it's a platform (Score:3)
Java isn't platform independent, it is a platform unto itself, and a proprietary one at that. Just try making use of OS-specific features from a Java program, or doing platform-appropriate things that weren't envisioned by the original designers of the Java platform.
For example, the javax.comm package for serial communications has an API for enumerating the names of the serial ports. On Windows, you get "COM1" and "COM2:" and you can present these in a UI like a popup menu for the user to select a port to use. On Unix, you get something like "/dev/ttya" and so on.
But on Macintosh, you get the words "printer" and "modem". There is no API for getting the icons for the printer and modem ports, because Java was designed by a bunch of textual unixheads from Sun.
If you want to see true platform independence, check out the ZooLib [sourceforge.net] cross-platform application framework. ZooLib allows you to write a single set of C++ sources and compile them to native executables on Mac OS, Windows, BeOS and Posix flavors with XWindows such as Linux.
The platform-specific layer is small and well-architected so it's not a lot of work to bind it to a new platform like, say, QNX.
And you can do that, and sell the results as you like, because ZooLib is provided under the MIT License [sourceforge.net] so you can use it for both open source and closed source projects. Put that in your "Sun Community License" and smoke it.
Please read about Why ZooLib is Good for the Community [sourceforge.net].
Michael D. Crawford
GoingWare Inc
Hmm.... (Score:3)
The test evaluates one's fundamental knowledge on algorithms, data structures, classes, structures, and other processes. Syntax and structure are important, but still secondary. Having not worked with Java too much, I cannot make any proclamations, but I'd say about 90% of what I learned is easily transferrable across all the languages.
Perhaps Java is not a bad thing, although it's gonna be hell for my school, which has something like 250 computers using MS Visual C++.
47.5% Slashdot Pure(52.5% Corrupt)
Why not SmallTalk? (Score:5)
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.
Re:Doesn't matter (Score:3)
For a true understanding of how stupid the recursion is, see the previous post and follow all replies.
Secondary Education: DEC BASIC, PASCAL, C++ (Score:3)
With the two contesting course of studies (Math: APCS, BASIC, PASCAL;Business: MS Office, Corel, etc.) it is becoming increasingly difficult to afford the demands for software alone.
It was a swift decision to move from the Pascal-Based AP program to the C++ based course. In fact, the move was made so quickly for almost a year and a half the students were forced to use joe / g++ to compile the programs on a FreeBSD computer a student was kind enough to set up.
We have 30 licensed copies of Borland C++, the teacher didn't know how to use it. Actually for him to be able to teach the class he needed to equate almost all the C++ syntax to a corresponding Pascal statement. Needless to say, Object Orientation was not covered.
Qualified teachers are needed more than anything else. Funding is a huge issue for secondary education.
Certainly the case with this particular institution is a lack of a clear course progression. DEC BASIC is hardly a lead-in to C++.
The College Board should provide the outlines for a progressive approach to an eventual APCS (Java) course. Something that doesn't involve antiquated languages would be helpful.
We offered Fortran and Cobol classes until 3 years ago, and we were using DEC VT 320 terminals until 2 years ago aswell. Talk about Modern Technology. FEH!
Lowering the standards once again. (Score:3)
The first day of class we were introduced into to the wonderful world of C++. We were told how great is was, and how perfect Object Oriented Programming is.
Excited, I took this anticipation that was instilled in me and what general knowledge of OO languages I hadto the teacher after class.
I introduced myself, and asked when in the course would we learn about pointers.
Response "... Thats college level material"
(Pointers! Pointers college level? um...)
Okay, I then asked about Classes.
Response "MAYBE at the end if we have time."
Discouraged, I asked if we would be at least doing memory management with new and delete.
Response: "Nope, college level"
Now, admittedly it was a novice level course; but whats the point of teaching us OO when they don't even bother to teach us to use classes.
(We did end up looking at them for about a day before the exam)
I think a problem that these intro to CS classes have is that they pander to harshly to the 'non-nerd'. They try to get Jonny QuarterBack to take the course.
Now it might just happen that Jonny QB is an excellent programmer and has a great interest in Design Patterns or something; but most likely he doesn't.
There are of course, exceptions; but anyone who has any real interest in programming, already has experience and/or has enough intelligence to learn a lot more in these classes.
The Jonny QBs and Stacy Makeups in my class were the ones who kept us on for loops for two weeks and are the the peopel who drop out of the class in college.
I believe this is a huge problem with Intro classes in any subject, but especially CS where most of its students already have experience with the subject.
just my opinion,
js.skulski
--
minusthink [Code poet or super hero? (you decide)]
right on! (Score:3)
Though I must add, from my experience as a former employer of Web developers, that I wish every high-school CS student learned at least basic regular expression syntax. (Maybe they do now; it's been more than a decade since I took the CS APs.) Regular expressions are one of the single most powerful and productive constructs I've encountered in all of computing, and they are also a great vehicle for learning about things like state machines.
It looks like they're finally listening (Score:3)
as a student learning java. . . (Score:3)
The point isn't to put out useful programs your first year, its to get you interested and teach a programming foundation. Java is not a bad choice.
But my teacher keeps telling me I think in C, a language I'm not at all familiar with, so I can't wait to get into that.
Stephen Byrne
It used to be Pascal (Score:4)
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.
Functional, SML, pointers, open minds. (Score:4)
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
Re:Good. (Score:5)
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.
Sounds like a good idea to me.. (Score:3)
I would say that Java is the perfect language for introductory courses. Perhaps a good C++ programmer can produce code with no memory leaks, proper exception handling and a good object oriented structure.. but very few beginners!
Java has excellent standard classes that allow beginners to quickly get to work. Need a hashtable to experiment with.. try java.lang.HashTable. No messing around with Templates and complicated STL on top of learning basic C++.
Sure, Java may not be the best language for creating speedy GUI's but it's one of the easiest and most powerful languages to pick up quickly.
From a C++ programmer... (Score:5)
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.
Re:Why not SmallTalk? (Score:3)
I've never used Smalltalk, but either of these two things (the first more than the second) take away from the "true" OOPness of Java.
Re:Good. (Score:3)
I TAed for a C++ class as an undergrad for three years, and it never ceased to amaze me how many students kept making the same class of mistakes throughout every semester. By contrast, the Scheme class I TAed for had students doing harder work with fewer dumb language-related errors. It is all in the medium in teaching this stuff. C++ is just pedagogically unsound.