Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
Education

College Board AP CompSci Exam Will Be In Java 323

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

Comments Filter:
  • by Overnight Delivery ( 239468 ) on Monday December 18, 2000 @06:37PM (#549870)
    Agreed.

    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).

  • I would take a different approach. I think CS curricula should be able to employ whichever language or languages the instructor sees fit to teach concepts. Shall this be a computer language grammar test? Or should we instead present algorithms in pseudocode that is less ambiguous to the reader and less likely to go out of style in a few years.

    Languages come and languages go, but the algorithms they represent are like math proofs -- They aren't going to change over time.
  • I am neither teaching nor advising an AP class in CS this year. I do volunteer science work with several small school districts. One method for teaching AP classes (when they cannot afford a truly qualified dedicated teacher) is to have outside experts with Masters or Ph.D.s come in and advise students on a volunteer basis. This has worked very well in the past.

    This year, however, more than one instructor has had difficulty with the example program because College Board did not include the link file with all the C++ files. Result? Program doesn't compile.

    It is beyond the scope of the class to ask the students to construct a link file, and any overworked instructor needs only to go to the instructor's listserve to get the file, right???

    In order to be on the instructor's listserve, you must be manually added by one specific person at College Board. (This, they believe, prevents cheating.) Unfortunately, the listed person does not respond to their mail, and has not for the past 6 weeks!

    Java, Perl, and Python all are languages that don't need the !@#$&%*# link files in order to compile. Since Perl and Python are scripting languages, they work just fine w/ no compile as such.

    As more small schools add AP classes with outside community advisors, the mechanics of teaching the class become even more important. Unless the College Board recognizes this, AP students will suffer in the end.

  • The course wasn't harder for me, but I sort of came in already knowing the material. Basically, they both leave out stuff I consider critical, which always will happen when you design something like this by committee. My school let you take the A or AB, even though it was one class taught to the AB. The kids who didn't know what they were getting into took A. The real geeks or just skilled coders did AB. If you read slashdot, odds are you could've done AB. Then again, YMMV.

  • Java as a first language isn't a bad move. If you learn C++ first, you spend too much time focusing on the mechanics of debugging. In Java, error behavior is well-defined, which is a big win for new programmers.

    I'm suprised Microsoft didn't find some way to prevent Java from becoming a key part of the educational system.

  • I don't think you've been trying very hard. Did you try doing a search for "algorithms" on a bookstore's web site? Introduction to Algorithms [amazon.com] is pretty popular. As for how to structure code, Code Complete [amazon.com] is pretty good, as is Design Patterns [amazon.com]. There are also numerous other domain-specific language independant books like Computer Graphics: Principles and Practice [amazon.com] (while it does have code snippets, you can effectively treat them as pseudo code), Artificial Intelligence: A Modern Approach [amazon.com], and Database System Implementation.

    This post is making me wish I had an Amazon affiliate ID...

    [If any of the above links are busted, it's probably Slash's "long line breaking" bug. Remove the spaces in the URL, and try again...]
  • CompSci AP is the biggest piece of trash to ever grace the AP program. Period.

    Actually, it does currently focus on C++, and object orientation. But it just started, in 1999(i believe), before that the tests were in Pascal. To be fair, I don't think that the College Board is responsible for the trash that is known as High School CS, but instead the fault lies on the teachers.

    A couple years ago, I took High School CS. The AP test is actually pretty good, but it is not taught well at all. Example: my high school CS book would switch code midstream from C++ to Pascal. Seriously. I would see a code sample like this.

    void main() {
    int i;
    i := 3; writeln(i); }

    The test, while covering C++, only focused on the structured aspects of C++(roots in C), no advanced topics are trully covered. Big-O analysis, some other misc bs, the AB test is a bit better, but not by much. Remember, it is a high school test... I find it interesting that the college board has gone from the known to the trendy(PASCAL to C++ to Java).

    I have yet to meet a good CS teacher in highschool. Schools simply can't retain them long enough to develop a good curriculum. (Paying qualified people only $35,000 a year, when companies in my area are offering in excess of $60,000-$100,000, doesn't go to far.)

    (This is just a rant from someone pissed at wasting 2 high school courses, that could have better been spent with Creative Writing.)

  • by the_one_smiley ( 169638 ) on Monday December 18, 2000 @07:14PM (#549893)

    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:

    You may be very surprised to see that your composite score can be two-thirds of the total possible score and you could still earn a grade of 5! Earning that score on other exams might translate to an "F" at worst and a "D" at best.


    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

  • my AP English exam should have been in pig latin.
  • You know every response to this is just going to be "can they do the test in time, with a language that slow/bad?"

    go troll's

  • by tmoertel ( 38456 ) on Monday December 18, 2000 @07:24PM (#549907) Homepage Journal

    The Java2 spec clearly states:

    A conforming Virtual Machine implementation shall support automatic garbage collection. The garbage-collection method is unspecified and left as a design decision for the implementor to consider based on the desired runtime characteristics of the Virtual Machine. However, it is required that any conforming implementation's garbage collection satisfy the required characteristics defined in Section 6.5.2, namely that it be godawful.

    Wow. Go figure...;->

  • Uhm, a quick search on monster.com shows well over a thousand jobs for C++. Hell, there are more than a thousand jobs for C++ in San Jose alone.

    I hate to break it to you, but Java is not replacing C++. If you are developing an application for mass public consuption (which oddly enough is where Java should really shine), the language of choice is still C++ (Windows/MacOS) and C (*nix).
  • There's an answer to this: one of the areas in which Java has been succeeding is for development, not of commercial packages for resale, but of business apps for a company's internal use - often the back end of its public web site or intranet). These kind of applications often used to be developed in things like Visual BASIC, or older "4GL" tools like SQLWindows.

    Java is actually a pretty good fit in this market, and has been adopted rapidly as a standard by large organizations like banks, insurance companies, etc., because of the promise, on which Java to some extent delivers, of more maintainable, quicker-to-develop code compared to what came before. Among other things, the strong typing probably helps reduce errors on larger projects where programmers are coding to each other's interfaces: it catches all kinds of mistakes at compile time, and also forces programmers to at least minimally "document" (via the code) interfaces in some detail, enforcing a kind of discipline which can be expensive to not have.

    At the same time, Java's exposure and ubiquity, the marketing focus on the JVM as a "platform", and its frequent use for web-server-side processing, has created an attractive standardized environment for all sorts of people to port their systems to, including language vendors, academics, etc.

    The bottom line is that Python didn't have a large corporation marketing it at the exact time that a highly portable, VM-based language seemed like a useful solution (how else were people going to animate stuff on their web pages, back in '96?) Sun saw an opportunity and exploited it, and as always, an agreed-upon standard, de facto or otherwise, is a powerful force to reckon with in the marketplace. The large companies adopting it take comfort in the fact that Java, the JVM, and the EJB infrastructure is backed by the likes of Sun and IBM. Python could never have made such inroads in such a short space of time without this kind of commercial backing.

  • For the curious bruce, what scripting/interpreted language do you prefer at the moment?

    I am writing one. Given how busy I am, nothing might come of that. But if I had to make a second choice, it would be Ruby.

    Thanks

    Bruce

  • I'm sure exactly the same could be said for lisp, but I hated the lousy stinking language myself ;-)

    I had something of the same experience after learning LISP in university. More recently, though, I picked up a copy of the famous SICP [mit.edu], and finally "got it" in a way that I never did previously. Sure, I could program in LISP and write code to simulate missionaries and cannibals crossing a river, but I had no real understanding of the principles behind the language. SICP teaches you to program by, in effect, teaching you to write programming languages, complete with real working examples. After working through it, you might still hate all the Irritating Single Parentheses, but LISP (or at least Scheme) will probably seem quite a bit more impressive.

    If you've already worked through it, start over! ;^)

  • I resisted learing perl for a long time. Its an ugly language with some serious semantic difficulties. The syntax (at least a subset of it) is nice though. You dont have that over rigid formatting of python, or the mega-quirkiness of tcl wherin even blocks of scope are a kludge. Perl has lots of libraries, but that doesnt mean much- because so do other not so good languages.

    Perl is so pervasive within the free software community and used so often as a sysadmin lingua-franca for scripting that I ended up learning it anyway. I dont regret it, but I would never use it for any large system if I could avoid it.

    As to failing the AP test, not likely. Even without knowing a lick of perl, any decent programmer who knows any C syntax family language could probably pass that.

    Considering that for pre-compiled applications, the C/C++ duopoly is a given as the language regnant, it seems so weird that the search for the ideal interpreted language goes on. I'm pretty sure its not Perl, Tcl, python, basic, nor Java. I dont know scheme, but I doubt that it or any lisp family language will become the dominant script.

    Java is a whole lot more than interpreted C++, and thats probably whats wrong with it. The AP board is annointing it solely because of hype and popularity. I would predict that more people will be able to pass the test though.

    For the curious bruce, what scripting/interpreted language do you prefer at the moment?

  • There are data types (int, float, etc.) which are not objects in Java.

    Great. Java teaches that good engineering solutions require compromises.
  • Don't forget that one of the primary reasons for choosing a more mainstream language instead of a more "niche" language like Smalltalk: The Readers.

    Somebody has to read and grade the AP tests. Readers are obviously easier to find for more mainstream language than for not.

    Also keep in mind that it will be easier for students (and teachers) to find information and books on a language like Java than for a language like Smalltalk.

  • They should all be programming in a really difficult programming language. How about Intercal? Befunge? Rube? Maelstroem? Dis? Unlambda? BrainF**k?

    The truth is, a student capable of learning to actually write code in Unlambda and/or Brainfuck, would have actually had to learn a lot, and would either gain an intuitive understanding of how either Turing machines or the lambda calculus works, or die trying.

    After taking the AP exam, though, they'd have to go for post-traumatic stress counseling...

  • Obviously I'd need to see the course in order to comment, but my personal experience is that a lot of Java courses right now just aren't very good, particularly on OO concepts.

    Any Java course that teaches OO at the end of the course should be thrown out immediately for a start. Seems a bit odd that in a language where you can't write any code without defining a class, some people think that teaching about what a class is should be the least important thing in the course, but it happens, and on a regular basis, both in university/college courses and (more worryingly) in commercial courses.

    In general I find Java better than C++ for teaching OO, because it presents a simpler, cleaner model to work with, and forces you down the OO route to a certain extent. Just look at the comparative sizes of the language specifications for a graphic example of why Java is a better teaching language. ;^)

  • Personnally, i think that, if an exception is not caught, the function should automattically be marked as throwing it, and a warning should be generated. I find that this often makes writing a quick proof of concept or prototype a pain in the ass, since i usually have to go back and add them manually BEFORE it compiles.

    Two points.

    Firstly, there are very good reasons for enforcing handling of exceptions. Yes, it may make proof of concept applications and quick hacks slightly more painful to write, but it makes real applications a lot more reliable, minimalising the risk of uncaught exceptions causing crashes or unexpected behaviour. This is worth a lot more to me than saving a couple of seconds typing in a throws clause. It also means the method signatures are a lot more meaningful to any other developer working with that code. If you don't explicitly declare the exception that is being thrown then either you have to document it elsewhere (which takes even longer) or anyone else working with your code will have to scan through it and all methods it calls to discover whether they need to handle exceptions.

    Java is a language that is supposed to be used in real-world applications. Many of its benefits lie in the increased ease of development for large teams and decreased incidence of many common problems that arise in other language. Enforced exception handling is part of that, and I would list it as a good feature of Java. Oh, and this isn't a compiler issue - it's part of the language specification.

    Secondly, as everyone knows, Java's exception handling policies are based on Pokemon. Allowing auto-generation of throws clauses would negate the rule.

    For those who aren't already aware of the Pokemon rules of Java exceptions:

    • There are over 150 different types of exception.
    • They communicate by printing their own name.
    • You throw them when you want to use them.
    • Gotta catch 'em all.
  • I think the only valid response to this is 'Well, duh!'. Firstly, the problems you're highlighting aren't really with the use of Java, but with the structure of the course.

    Secondly, your last point is that learning Java instead of C++ may put you at a disadvantage when it comes to taking a C++ course. This is kind of self-evident, surely? In the same way, when it comes to learning Java you're a lot better off if you've already learnt Java than someone whose first courses were in C++.

    Incidentally, it's my personal experience that C++ coders who later migrate to Java do a much worse job of it than Java programmers who later migrate to C++. There are plenty of nasty habits that C++ programmers tend to bring with them when they learn Java, which have led to the death of at least one major commercial product to my knowledge...
  • Well, considering that I go to TJHSST [tjhsst.edu], and we have an entire Linux systems lab along with a lot of other good stuff, I don't think they'd be too adverse to using the raw JDK with Vi(m). The only problem is, the ones using Linux who are competent enough to understand what is going on are the ones who have already taken APCS. So, the question then turns to, again, what environment should be used for the mainstream APCS students.


    47.5% Slashdot Pure(52.5% Corrupt)
  • Whatever the merits java has as a language, it is a proprietary language, and will be until Sun releases it to a vendor-neutral standards body like the ISO.

    I won't even have any real confidence in its validity as a language until there are multiple competing, independently developed implementations.

    While you can purchase Java implementations from lots of different vendors, almost all of them are derived from Sun's code - the virtual machine is ported, and the source code to the libraries is direct from Sun.

    What I'm talking about is commercial quality (whether they're free or not), widely available and supported VM's, and runtime libraries that are written to a spec rather than being from a common codebase.

    You might be interested to read what Bjarne Stroustrup has to say about Java [att.com] - that it is not platform-independent, but rather it is a proprietary platform unto itself.

    I think it is completely inappropriate that the college board is requiring the study of a vendor-specific language for an exam. That just galls me.


    Michael D. Crawford
    GoingWare Inc

  • Well, if you consider the fact that it tests the taker's aptitude on the equivalent of an introductory college level course, this makes perfect sense.

    The focus of the test is on the understanding of OO programming, as well as a working knowledge of C++ syntax. From there, you are able to do all the fun complicated things, but as a basic aptitude test, the AP exam performs admirably.

    Also, you must remember that this test has been developed by people who have degrees in computer science education (Owen Astrachan for one, I believe). They know what they are doing. Perhaps it was easy for you. Great! It was easy for me too. That doesn't mean the test sucks, or isn't much of an exam. Oh well...my 2 cents.


    47.5% Slashdot Pure(52.5% Corrupt)
  • It is a reference to an Alan Perlis quote. (Perlis is well-known for his many witty CS epigrams [cmu.edu].) The quote is "Syntactic sugar causes cancer of the semicolon". Some people (me included) feel that the gains you acheive from "sugary" features like operator overloading are not worth the price other people pay in trying to understand and maintain your code if you misuse them.

    Also see the Largon file entry for syntactic sugar [tuxedo.org].

  • Heh... I remember when I took the test it was given in Pascal. That was my High-school language. C++ became the standard for my college years, and now in the workplace I use Java exclusively, and while it's made me lazy, I couldn't be happier.

    I think that the decision to switch to Java testing was a good one on the part of the College Board, but will miss it's mark by the time it's put into full effect.

    From taking a look at the language subset that they plan on testing (here [duke.edu]) I can see that they are focusing as little as possible on Java's little quirks and try to cover as much broad concepts of OO as possible.

    In this respect I think that Java is a pretty good tool for the job. C++ has too much language overhead that you have to be familiar with in order to be able to use it.

    As far as arguments of a language-neutral test go, I would like to see anyone clearly abstract away an inheritance tree in a way that is can be objectively evaluated. The last thing you want on a test is a prick grader deciding to misinterpret your pseudo-code. And with something as fuzzy as OO in question, I think any kind of pseudo coding will be wide-open to interpretation.

  • by flemflam ( 156743 ) on Monday December 18, 2000 @08:37PM (#549971) Journal
    One of the biggest problems with the change to Java is the high school teachers' attitudes about it. I heard that this change was likely to happen back in July at an AP sponsored workshop.

    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:

    1. I just learned C++ -- now I gotta go learn Java?
    2. AP can't do this unless they wanna a pay for the new software and texts (like Java costs so much more than C++)
    3. By the time we get all the Java syllabus and course materials together and proofed, some other language will be the horizon. (True.)
    4. Who cares -- I can retire before then.
    Very few teachers objected to Java based on the types philosophical issues being discussed on /.; but nearly all of the Java supporters had good basis for their points.

    Don'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.

  • by Smitty825 ( 114634 ) on Monday December 18, 2000 @06:08PM (#549972) Homepage Journal
    Who wants to learn about the fundamentals of programming in an AP class? That stands for advanced placement.

    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 =-)
  • <BLOCKQUOTE><I>C++ does not hide your data very well, but at least it gives you an easy way to separate the interface of a class from its implementation - .cpp and .h. With Java, you can often do so only by subclassing.</I></BLOCKQUOTE>

    Um. Interfaces, perhaps? ;^P

  • by srichman ( 231122 ) on Monday December 18, 2000 @08:40PM (#549982)
    The goal of computer science education is not to churn out C++ coders

    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.)

  • My old High School CS teacher is going to have a fit about this, for two reasons. For one thing, It means he has to learn another language to teach, and C++ was enough of a pain after all those years of Pascal (a wonderful teaching language), and also because this test is set up to work best with teaching languages. Granted, C++ isn't a teaching language, but it's a lot closer to Pascal than Java is. Don't get me wrong, Java is a great development language, but the APCS exam deals in very, VERY simplistic code fragments. The overhead that Java has for these simple things will make it an extreme headache for all involved. APCS only scratches the surface of object orientation, and then mostly only on the AB test. For most purposes, it might as well be in C, except for the safe vector, matrix, stack, queue, and string classes that could easily be done without.

    Java is (or at least will be) wonderful for software development, but the code overhead for simple things like "Hello world." make it impractical for representing fragments of algorithms from toy programs.
  • As a multiple inherenance enthusiast, I have to emplor you to not use C++'s broken implementation of MI dirty what is a good OO mechanism. The heart of the problem with C++'s MI is that is allows for ambiguity. It is possible to have MI with no ambiguity.

    Give the graphical cowboy example, this is illustrated with the following code:
    // Draw a cowboy with his gun drawn GraphicalCowboy gc; gc.Cowboy::draw(); gc.Graphic::draw();

    The problem with C++ MI stems from the language designer's confusing the concept of a method signature and a method contract. A method signature is a short hand for the contract, since it would be futile to write out the contract each time you wanted to invoke the method. So instead of saying "draw your gun" you just say "draw()".

    But it is possible to maintain the connection between contract and signature as long as the signature is kept within the context where they are defined. Thus, even though Graphic and Cowboy both have the same signatured method "draw()", they are contractually different and this is reflected by quialifying the class that originally defined it.

    Similarily, a class should be able to make a new method with the same signature as a subclass without overriding the base class and have both contracts callable by addressing the right signature.

    Now, for thos of you who are all "We can do everything with interfaces," the fact of the matter is that if you are using a 3rd party API that is not designed with interfaces in mind, then you will have to resort to aggregation and delegation. To those of you who say "that's not that bad", you're right, but inheritance is only aggregation and delegation and if you ask "what's the point when you can do MI that way," you have to ask "what's the point of having inheritance at all." It's syntax that helps the design. And honestly, interfaces can often muddle the design.

  • In the company I work for all of our code is done in C++ for applications and assembly for the drivers. I haven't seen a major app written in Java. It might be a good language but with the exception of web page development, Java hasn't hit the big time. C++ is still the king of application development. Might change but I don't think it's going to change too much. People will tend to use tools they are familure with. C++ is a pretty handy tool despite its flaws. It can be used to make good apps and is fairly easy, IMHO, to learn. Java bytecode is still a dog even on a fast processor. C++ produces binaries that run pretty fast for me. I'm not a language biggot by any means and if people like using Java that is great but I don't think it would be correct to state that Java is eating C++'s lunch.
    Molog

    So Linus, what are we doing tonight?

  • >we eliminated C++, COBOL, and a few other
    >languages all together in favor of JAVA.

    Choose the right tool for the right job. Getting rid of all other languages - closing up all diversities - only your teaching staffs, not the students are going to benefit. Even if you want to go the "one single language" way, Java is far from being the conceptual best. Try Ruby.

    >C++ is simply a pain in the ass and it's OO
    >design is crap

    How is Java's OO design better than that of C++'s? Both aren't pure OO.

    C++ does not hide your data very well, but at least it gives you an easy way to separate the interface of a class from its implementation - .cpp and .h. With Java, you can often do so only by subclassing. Compiling stuffs into a .class doesn't count.

    >Java is NOT bad and it's debugging is extremely
    >more Verbose that most C++ compilers I have had
    >the unfortunate time to use

    Debugging facility is VM-specific for Java. Java VM does not guarantee anything except maybe reliably running your code. That of C++ aren't bad either. For example, there are lots of good C++ ASSERT libraries out there, and they can be very useful in good hands.

    >Java has the best networking API on the planet

    ...only if Java is the only language on the planet. Perl, Python, Ruby, Delphi and even C++ have networking libraries at least as good as Java's.

    >Java has been a wonderful language to program in
    >and learn what OO programming is supposed to be
    >about. C++ is crap for OO

    OO is a *concept*. A *mindset*. Is *language independent*. To learn what OO is supposed to be, the best tool is NOT a programming language.

    A better try would be UML, then Design Patterns. Then you can implement your OO concept in any language you wish. Even in QBasic if one's dedicated enough.

    >and to have a student learn it would be far more
    >beneficial as a later course in his/her career.

    It just happens that Java is one of the hot languages right now. What if the ship sinks in 3 years?

    Nothing absolute guarantees you a better career, except your brain and how you adapt things. That's why many universities teach their courses in many languages.

    >If true OO design philosophies are held so
    >highly by all of the geniuses on Slashdot why
    >do programmers for Linux make EVERYHING in C and
    >then try to fool themselves and their programs
    >into thinking they are actually OO when they are
    >not?

    OO is a *language-independent concept*. You can implement a program using the OO philosophies in C. Please do some research before you post.

    >Maybe if people learned OO programming,
    >philosophy and used decent OO languages before
    >trying to do everything in C and half attempts
    >at C++ then we would have a better Linux/Unix
    >today.

    First, OO is not the only nor the best design concept for all applications. Using and applying the best OO concepts does not automagically give you good programs, if you applied the OO concepts in the wrong problem domain.

    Second, "learning OO programing and philosophy" has nothing to do with "use decent OO language".
    I have said it, and I'll say it again. OO is language independent.
  • Of all the languages, they pick a closed source language.

    There is no such thing as a closed source language. A language specification can be open or proprietary. Sun's language specification is open (i.e anyone can read it). There do exist at least on closed source java implementation, but there does exist lots of closed source implementation of C too. Do you consider C a closed source language?

    If they aren't going to be language agnostic and just accept pseudo-code (or straight C), I'd rather see a standard free language. For an AP exam, one of the functional languages would probably be a much better choice, because programming in those requires that you know how to think.

    Most functional languages aren't standardized that much either. And although java doesn't have a formal standard approved by a standardisation body, that doesn't mean that it doesn't have a formal standard (although it is subject to change, and probably not that formal for anyone who knows how to formally specify programming languages). You can read the formal standard yourself here [sun.com].

    As for the comment about programming in functional languages requires that you know how to think. Of course it does. But do you think that programming in other languages does not require that you know how to think?

  • by stype ( 179072 )
    I'm sure they have some good reasons from a code point of view, but didn't they just change to C++ a couple of years ago? I mean, when they changed to C++, my high school CS teacher had to learn C++ well enough to teach it, and now she's stuck having to learn java just as she's getting the hang of C++? I wouldn't be surprised if schools drop their cs programs just because they don't want to train anyone.
    -Stype
  • by Kastagir ( 33415 ) on Monday December 18, 2000 @04:21PM (#549998)
    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.
  • I took the AP in Pascal, and it wasn't so bad. Most of the time was spent on concepts, like linked lists and sorting methods, etc. I don't think we touched the computers very much at all.

    That said, the move to Java is a Good Thing. This frees students from needling around with memory management and helps them focus on the concepts they should be learning. Also, C++ is an ugly bastard language. Forcing students to learn OO also forces them to learn good programming methods.

    Java is great. Error catching is great, a main() function for each class is great, the garbage collection is great. I can't see how this is anything but a step up from C++.

    As for pascal or smalltalk, et al, I think it's preferable to teach kids the language they will most likely use in the future. Most colleges teach in Java, so Java it is.
  • by iElucidate ( 67873 ) on Monday December 18, 2000 @04:22PM (#550002) Homepage
    Whatever they choose uses their own AP classes/libraries/headers anyway, so most programming languages will be similar when doing AP tests. I know when I did it last year we had to learn only the very basic C++ for console, using headers like apstring.h to do our work. They keep it simple. It's not about the programming language on those tests, it mostly about the concepts.

    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.

  • The College Board is listening "to the best educational interests of our children"? I would disagree.

    As others have pointed out, it would be far, far better for logic, pseudo-code, and theory to be taught in such a course. AP courses are supposed to prepare you academically for college--as well as trying to get you out of a class or two. I know--I had 35 hours when I started college, mostly due to AP credit.

    I'm not much of a programmer, but my field [aerospace engineering] doesn't require it. I would have been much, much better served by a AP CS class that taught programming theory and basics--regardless of the language taught!--than a language you'll use.

    If you're going to finish and get a CS degree, having that background behind you will put you at an advantage. As I see a lot lately, those people who seek IT/geek jobs don't always finish school. Companies around here hire workers out who haven't finished their degrees. Consequently, UAH's CS department has stayed focused on teaching fundamentals, as they should. You can pick up a programming language if you have the fundamentals of computer science down--it's much harder if you're just trying to learn the language. I can speak to that--having virtually zero in the way of theory, I struggle with every new language.

    Teaching Java just exacerbates the situation, and teaches HS students to cash in. That's not what the Advanced Placement Program is supposed to be about.


    --
  • C++ does not hide your data very well, but at least it gives you an easy way to separate the interface of a class from its implementation - .cpp and .h. With Java, you can often do so only by subclassing.

    This is an often visited rift in "the way C/C++ does things" vs "the way Java does things". Java does do this. It's with a tool called Javadoc that pulls the interface of your classes and puts them into HTML files for browsing. This is no worse than how C++ does it, and is arguably better. Those that are looking at the interface cannot even be tempted to change it.

    Java is NOT bad and it's debugging is extremely more Verbose that most C++ compilers I have had the unfortunate time to use

    Debugging facility is VM-specific for Java. Java VM does not guarantee anything except maybe reliably running your code. That of C++ aren't bad either. For example, there are lots of good C++ ASSERT libraries out there, and they can be very useful in good hands.

    Actually, there are many parts of the Java specification that deal with what is required in the dubugging information within Java classes. More importantly, the API spec defines that "printStackTrace()" will print the call stack of an exception from wherever it was thrown. The fact of the matter is that I can debug Java no problem without a debugger. I can't do that with C++ (and I have more years experience with C++).

    If true OO design philosophies are held so highly by all of the geniuses on Slashdot why do programmers for Linux make EVERYHING in C and then try to fool themselves and their programs into thinking they are actually OO when they are not?

    OO is a *language-independent concept*. You can implement a program using the OO philosophies in C. Please do some research before you post.

    To be object oriented, you must have the 3 concepts of encapsulation, polymorphism, and inheritance. You cannot have encapsulation in C, as there is no private data. That alone makes C a non-object oriented language.

    Yes you can use function pointers, yes ou can do abstraction (a procedural concept, actually, though often atrribed to OO). But to say C supports inheritance is too much of a strech. It is more accurate to say that C programmers support it. Polymorphism is part of C, but it has limited use.

    Finally, the original poster is right. People do look at a program and go "well this is all abstracted and uses OO philosphy so it's OO". Well it ain't. Because in C I can take your struct and route through its insides. Just because you don't doesn't make you OO. It's the fact you can't.

  • It's not unusual for them to change language.... Back when i took it, it was in PASCAL and they were threatening to change over to C++. THe concepts are really the same at the basic datastructures and algorythms level. A quicksort is a quicksort no matter what language it's written in.
    My one concern is the whole pointer thing... I think it's bad to teach on a language with garbage collection, because if kids don't learn to manage their heap early on, they will get into trouble later... Allocating memory is sort of like drinking beer =:-)
  • No. Everything is an object in Smalltalk, including classes. Class methods belong to the class objects. In addition, global variables belong to the Dictionary object called "Smalltalk". There is no "static" in Smalltalk.
    Sorry for being unclear; I concede that that is a more exact explanation. However, I maintain that the difference between methods belonging to a class object (instead of an instance of that class) and static methods is only an implementation/vocabulary detail. If I wanted to implement the Singleton or Factory Pattern, I would use a class method (for getInstance or createFoo, respectively).

    FWIW, classes are objects in Java, as well.

  • This is good...when I took the course, the language being used was Pascal, and at the time that was probably appropriate. In fact I am still partial to Pascal, and Object Pascal, to this day. The very next year, they switched to C++, and I thought I missed out by just one year. However, in retrospect I'm sort of glad that I didn't start learning with C++. I think Java is a pretty decent starting language. The traditional "starting languages", like Basic and traditional Pascal are all but obsolete, and non-object-oriented. Java allows students to get up and running, programming in a VM, isolated from the nastiness that steepens the curve for learning a native language. But it also allows students to learn something really practical that they can graduate into real work with. Java ain't just for applets. It's really big in the "enterprise" - basically the backend that runs the internals of companies. And you could probably even strip it down to teach plain procedural programming, so that students are not completely lost when he/she sees C for the first time.
  • by goingware ( 85213 ) on Monday December 18, 2000 @09:14PM (#550023) Homepage
    I am dismayed my the comments here that report that AP Computer Science does not teach much about classes or object-oriented programming. I think it is crucial to teach OOP. Consider this for a second:

    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

  • by Alien54 ( 180860 ) on Monday December 18, 2000 @04:25PM (#550024) Journal
    The page with the full specs is here [duke.edu].

    to help clarify:

    In this section, we discuss the Java subset that students will be expected to master to take the AP CS exam. We also mention a number of features that are potentially relevant in a CS1/2 course but that the AP CS exam does not cover.

    . . .

    Keep in mind that this subset is intended for the AP CS exam. The purpose of the subset is to enable the designers of the AP CS exam to formulate questions relating to the AP CS syllabus. The AP CS subset is not intended as a prescription for a computer science course. We expect courses to cover language features that go well beyond this subset. For example, many instructors will choose to cover applets, graphics or user interfaces. However, none of these topics are tested on the AP CS exam.

    To help students with test preparation, the AP CS subset is purposefully kept small.

    We omitted language constructs and library features that did not add significant functionality and that can, for the formulation of exam questions, easily be expressed by other mechanisms in the subset.

    For example, inner classes or the StringBuffer class are not essential for the formulation of exam questions -- the exam uses mundane alternatives that can be easily understood by students. Of course, these constructs add significant value for programming.

    Omission of a feature from the AP CS subset does not imply any judgment that the feature is inferior or not worthwhile.

    etc.

    worth looking at just to see what they'll be looking for

  • It has been suggested that a language-independent examination might encourage a focus on ideas rather than language details. This approach has merit, but...
    This essay [duke.edu] discusses why a language-independent AP exam, and an exam using multiple languages, were both rejected.
    --
  • by woggo ( 11781 ) on Monday December 18, 2000 @04:26PM (#550031) Journal
    One of the nice things about Java is that it's not too difficult to write code that works, even though writing good code still requires some skill and consideration. Contrast this to C++, a language with cancer of the semi-colon, in which writing code that works at all can sometimes be impossible.

    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

  • by goingware ( 85213 ) on Monday December 18, 2000 @09:30PM (#550033) Homepage
    -platform independence

    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

  • Just because I can run dosemu under Linux does not mean dos is platform independent. The JVM is emulated on a lot of platforms, but it is just as much a platform as win32.

    Although, actually I agree with the decision. Java is a much better language for teaching than C++. Personally, I wouldn't touch java with a barge pole for a production [client] system [but servlets are cool..] C++ takes far too long to learn for a teaching language. That language has warped my fragile little mind...

    I think it would be even better if they taught them the abstract machine language designed for java (ie write class files with an assembler rather than a compiler).
  • Intro to Algorithms... used as the text for a sophomore/junior level CS class at MIT... definitely a great text book for your high school students... :)

    Personally, I think that they should have stuck with Pascal. I feel that Pascal has some excellent implementations for learning (I miss my old copy of Think PASCAL on the Mac from freshman year of high school) that don't make you worry about system specific stuff.

    I LOVE Java, I think that Java is a great teaching language. However, I think that the simplicity of Pascal makes it easier to teach concepts and encourage children to see if they like programming, C++/Java just seem to have too big of a learning curve to get that feel.

    It is AP level, meaning it is intended to be college level. Give these college bound students a taste of programming, if they are interested, they can study it in school or elsewhere.

    Alex
  • I learnt OO from Smalltalk. Great language.

    I have to disagree slightly. SmallTalk had some wonderful theory (including "everything is an object" and "code fragments are valid objects"), but the actually implementation was sorely lacking. In fairness, let me qualify my upcoming criticisms with the facts that I'm not sure how much of it was a short-coming of the class I took or the SmallTalk environment I used (Visualworks, IIRC), versus how much of it was due to inherent SmallTalk problems.

    Problem #1: Inconsistent object interfaces. One of the killer features of an OO system is that you don't have to worry about your underlying data. If you've got a "print" method, it shouldn't matter if your object is an integer or a string or a boolean (unless you want to print in some non-default manner). However, in the SmallTalk environment I used, the method to print an integer differed from the method to print a string. Couple this with an untyped system and all of a sudden you've got a bunch of hidden run-time gotchas.

    Problem #2: The development environment was the interpreter. Whenever I tested my code, it was running within the same interpreter as the IDE that I was using to create that code. On occasion, when things completely blew up, I wound up having to restart the whole mess and load my last saved copy. To make matters worse, since the system didn't autosave, it was possible to shoot yourself in the foot rather severely. I do believe in "save early, save often", but this was just absurdly bad.

  • Your story is a perfect example of why teaching OO as part of the fundamentals is so important. A design which ignores how the classes will work together is a clear sign of someone who learned OO as an afterthought, not as an integral part of the language and design process.

    OO is *not* 'the end' when it comes to Java. You can't write a single line of useful Java code without defining a class.

    Who cares if someone who has only learnt OO can't write a useful program? It's not the end of the training process. However, for an object oriented language it should (and must) be the beginning.
  • I did take the test, over five years ago, before they even made the decision to switch to C++ (let alone the actual switch). Computer science, like math, logic, or music, is really "a language". You can learn the basics of a language without writing or speaking it, but practicing communicating in a given language is how you really learn the language. C++ is a hinderance in this regard (like having to learn writing French with your non-dominant hand), which is why it's a bad language for teaching. To really understand binary trees, students need to write programs which use them.

    I'll agree with you that learning a different programming paradigm will have an impact on your universe of discourse, but for the AP CS exam, it really doesn't matter what programming paradigm a student has been exposed to. I took the test in Pascal, but I may as well have taken it in MIPS assembly -- for the most part, the algorithms and data structures didn't even require SP, let alone OOP. These algorithms will be the same as long as we're computing on devices that are equivalent to a Turing machine, regardless of what expression they take.

  • Stroustrup has some things to say about C++ education. I think he mentioned it in his QA a while back here on slashdot in C++ Answers with Bjarne Stroustrup [slashdot.org].

    In general Stroustrup feels that a lot of the trouble people have with C++ is that it's not taught very well and he's making an effort to address that. One concern he has is that a common teaching approach is to teach C first and then "move up" to C++.

    But this is a huge problem because you really don't want to do things the same way in C and C++ - for example, you learn char-array based strings in C and then have to forget them to use the string template in C++ - and often instructors don't bother to teach the different styles or worse don't know them themselves.

    He discusses this in his paper Learning C++ as a New Language [att.com] (PDF format) which you'll find on his papers page [att.com].

    I didn't have too high a regard for C++ until I read the abovementioned slashdot Q&A but I decided then that it would be really worth my while to devote some serious effort to studying it. I did, mostly last spring and summer and the results immediately paid off, in terms of writing cleaner code, more efficient code, having fewer bugs and architecting things that I couldn't have hoped to have done before I'd put that effort into study.

    I discuss that in Study Fundamentals Not APIs, Tools or OSes [goingware.com].


    Michael D. Crawford
    GoingWare Inc

  • "Problem #2: The development environment was the interpreter. Whenever I tested my code, it was running within the same interpreter as the IDE that I was using to create that code. On occasion, when things completely blew up, I wound up having to restart the whole mess and load my last saved copy. To make matters worse, since the system didn't autosave, it was possible to shoot yourself in the foot rather severely. I do believe in "save early, save often", but this was just absurdly bad."

    The environment that I used kept track of everything. It had a log file, which was in Smalltalk. All you had to do was remove the last line that caused the problem and then execute it... back to where you were.

    Smalltalk's excuse could be that it never made it really big. The problems that you describe afflict modern products that are far more widely used. I recently took a look at (gasp! shock! horror!) VB. It didn't offer to save before doing anything. A simple, uh-hum, access violation in my C++ ATL COM DLL was able to bring down the whole VB IDE, unsaved work and all. POS!
  • Arguing over what language to use in the AP CS curriculum obscures a more important issue: the content of the curriculum.

    Judging from the documents I've seen, aside from a little OO gloss, AP CS students in 2000 learn pretty much the same content as they did in 1980. Another generation of high-school overachievers, it seems, will be judged on their ability to implement basic algorithms and data structures, even though:

    • These are tedious exercises that will convince beginners that computers are complicated and boring.
    • Most working programmers, when they need one of these algorithms or data structures, don't need to roll their own.
    • Someone with a degree in CS should be able to write these implementations -- but they don't need to learn how to do that in their first CS course. It's like the value of pi in mathematics: you need to know how to use it early on, but knowing how to compute it can be safely postponed for a while.

    Meanwhile, consider what's left out:

    • Every day, Perl hackers all over the planet (ab)use regular expressions. Regular expressions are also an important part of a theoretical CS education -- both as a building block in designing a parser and as examples of finite-state machines. I don't see any sign of these on the AP, though: the proposed Java subset explicitly excludes "processing string input (e.g. with StringTokenizer)".
    • For decades, large businesses have depended on relational databases, and as the relevant hardware and software have become cheaper, more and more people and institutions have taken up the habit. Experience with imperative programming does very little to prepare you for wrangling a database. It would be nice to have a little bit of DB-oriented stuff on the curriculum (e.g., basic SQL commands and the concept of "third normal form"), but it doesn't seem to be there.
    • I learned about higher-order functions when I learned Scheme, and have applied them with great success in my Perl work; I know I'm not the only one who has found them extremely useful. (Perl is one of the few widely-used languages that treats functions as first-class objects and therefore permits all sorts of functional-programming tricks.) Higher-order functions are well-known among academics, where functional programming has become old hat. Also, discussing these functions creates a link between CS and calculus. But since the AP Java subset explictly excludes inner classes -- heck, it even excludes three-dimensional arrays -- I don't think many AP teachers will have time to teach higher-order functions.

    --
  • Last year, which was my senior year, I took the AP Computer Science course which was billed as the hardest course I'll ever take in highschool.

    Well, speaking strictly from the perspective of a 15-year-old (that's 10th grade), AP Computer Science AB ended up being my easiest midterm exam, and I didn't even have to study for it(!). The class started off really well, too, with our teacher explaining OOP to us in the second week of class.

    From what he tells me, we will be writing our own classes by the end of the year, as well as learning about binary trees, stacks, queues, linked lists, and most certainly pointers. Perhaps you were taking the "A" class instead of the "AB" class, but even then, I think our "A" class last year learned about pointers at least.

    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.

    Well, actually, this year we have a (*gasp*) girl in our "AB" class, and she actually knew nothing about computers before taking the class. Actually, the same goes for almost everyone there except for me, and one kid who took the "A" course last year (this is the first year they offer the "AB" course). We're all progressing fine.

  • Comment removed based on user account deletion
  • Any chance we could move to C# in another 2 years?

    I'm sure Microsoft would fund schools immensely for it. And any argument against it would apply to Java just the same...

  • by Daemosthenes ( 199490 ) on Monday December 18, 2000 @04:32PM (#550074)
    Having recently taken the test (last year), I really think that it really doesn't matter what language the tests are administered in.

    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)
  • (and this true story was only 12 years ago)

    Back when I was a kid, we learned AP Comp Sci (A and B) on Apple IIs, using UCSD Pascal, which 'compiled' (into a non-executable) at 1 line per second! And we liked it! We loved it!

    As for the AP test, java what? the AP test was entirely on paper! We coded the old fashioned way, with scratch paper and a #2 pencil!

    And we liked it!

    Kevin Fox
  • Voulez-vous dire "L'enfers c'est les autres Français" ou "L'enfers c'est les autres >?"

    heh heh..."je deteste la langue des grenouilles"

    Sorry, I haven't spoken French at all in a few years. :-)

  • by TagrenHawk ( 19856 ) on Monday December 18, 2000 @04:32PM (#550077) Homepage
    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.

  • You can even have multiple instances of the same class loaded in Java. Thus, a "static" method isn't really that "static", but static to the instance of the class. If you load the class twice with a noncaching classloader, you can modify one static variable's values, and they won't effect the same static variable in the other class instance.

    In this respect, there is no difference between Java's classes as objects and Smalltalks.

  • AP Comp Sci is supposed to teach concepts like OOP, recursion, data structures, and well encapsulated code. Why should it be taught in a language that has so much overhead code as C++?

    The implementation shouldn't matter. A class that's supposed to teach concepts should use the language that best demonstrates those concepts without clutter. For many lessons, this is Java.

    The first programming course CS majors at Berkeley take are taught in Scheme (basically Lisp). Nobody pretends it's a practical application to write real software in, but it illustrates fundamental coding principles (especially recursion). That's why Java is the second language taught at Berkeley. It teaches the principles.

    If you're going to ITT Tech, then you should expect to be taught C++. If you're getting a Bachelors from a good school, you should be learning theory, not a trade. The rest you should be able to hack out on your own.

    At least, that's what they keep telling me...

    Kevin Fox
  • The thing about the APCS course and test is that it is largely intended to be an introduction of computer science. I believe that an introduction to computer science should focus mostly on the larger concepts of computer science. However, CS is an applied field and the students must be given a way of expressing the new algorithms, data structures and other concepts that they are learning. The best way to apply these sorts of ideas is to use a language which you have a compiler for and it is easier if everyone in the class is using the same language. In an introductory course it seems fair to assume that the students do not have much experience with any particular (non brain dead i.e. VB) computer language so the choice of language isn't particularly relevant as long as it's a comprehensive language with a syntax that isn't overly difficult to grok. Java is a fine choice for this as are C++ and Pascal (in which I took the exam in '96. Passed with a 4.). My memories from when I took the APCS exam are that it had very few questions regarding the particular syntax of Pascal and that the majority of the questions focused on sorting algorithms and other big concepts.
    _____________
  • I sympathize. I am on the advisory boards of all major Linux certification projects. If the test had much perl content, I'd probably fail. I just don't like perl, and thus haven't done much with it.

    Thanks

    Bruce

  • So, what are you suggesting? You want the kernel rewritten in Java? You want Apache rewritten in Java, or perhaps MySQL?

    So what are YOU suggesting? You want major e-commerce sites on a death-march schedule to be coded in assembly and C?

    When will people learn to use the right tool for the right job. When will people learn that there is no ONE right tool?

    Personally, I think it's a good idea to emphasize in Java in teaching because not only is it a very effective language but it is also relatively easy to learn, it allows you to focus on coding methodology and algorithms instead of language weirdness. Once people get good at Java, which will happen much faster than for them to get good at C, they will have a very easy time picking up C/C++ and other languages. You can teach a wide area of things with Java, including threads, network coding, database coding, graphics etc., without the need of extra packages.

    Learning to code is NOT about where the semi colons go so using assembly and / or C, which I think you suggested, is not a very good idea. Since Java is also the fastest growing language right now, and one of the most widely used ones (if not THE most widely used), in *CURRENT ONGOING* projects, it will be good for the students that can put "good Java skills" on their CV. Of course, it will also be good for the industry, which has a severe shortage of Java coders.

  • by istartedi ( 132515 ) on Monday December 18, 2000 @04:34PM (#550101) Journal

    For a true understanding of how stupid the recursion is, see the previous post and follow all replies.

  • I always knew Sun was interested in "education" but this strikes me as going a bit too far.

    Of all the languages, they pick a closed source language. Next we'll see APCompSci.com, and C# certification as requirements.

    If they aren't going to be language agnostic and just accept pseudo-code (or straight C), I'd rather see a standard free language. For an AP exam, one of the functional languages would probably be a much better choice, because programming in those requires that you know how to think.

  • Yes, but you're confusing language design principles with basic OO concepts. I agree that keyword abuse is a problem, and I believe that Smalltalk is more elegant. However, Java is a surprisingly good language, all things considered, and I have been very productive with it.

    My point was, and is, simply that Smalltalk offers a mechanism for implementing factory methods, which are also referred to as "class" or "static" methods in OO literature. How Smalltalk implements this, while noble and elegant, is irrelevant to my point: that it is possible to implement the equivalent of a Java "static" method in Smalltalk. I'm even enough of a vocabulary snob to concede to you that it is wrong to call them "static methods," but the fact remains that class methods in Smalltalk and static methods in Java are equivalent. Furthermore, a large enough number of programmers have the concept of "static method" in their vocabulary that I think it is an acceptable, if slightly inaccurate, rendering for the level of discussion that this forum was engaged in.

    Yes, haha, IHBT, HAND, etc.

    ~wog

  • I was at a meeting of CS educators recently. Several of the local colleges had switched to Java a year or two ago. They had begun to find that their students don't have as good a grasp on the concepts of object oriented programming as they did before (probably starting with C++).

    I don't know why this is (no direct experience), but it's troubling. Does anyone else have similar experiences?

    Greg

  • In college I had a classmate who could write Fortran code in any language. And it was good Fortran. He generally posted his solution to every project two days before it was due. No one ever copied his solutions. They were clear, understandable, and completely identifiable as his, every time.

    On a daily basis, I use C+-+-, sh, Perl, Emacs Lisp, and often awk, SQL, and various other languages. I have written some excellent code in each of these. I have written some stuff that should never have seen the light of day. Good code is good because it is understandable. It is good because it works. It is good because it solves the problem you set out to solve. It is not good because of the specific language you wrote it in.

    Choosing the wrong language for a problem is a mistake. I wouldn't write a tool to quickly match a few regexps and modify files accordingly in anything that didn't provide good native support for it. I would do it in Perl, Python, Emacs Lisp, sed, or awk. I wouldn't touch such a problem with C or Java. The wrong tool for the job.

    Choosing the one true teaching language is akin to giving the students a toolbox with nothing but a hammer in it. Every problem will start to look like a nail. You can fake it when the problem is inserting a screw, but I'd hate to plane a cabinet door with a hammer.
  • High school students shouldn't have C++ imposed upon them

    Yeah. While we're at it, let's not impose Latin, French, difficult sheet music, The President's physical fitness test, or calculus on them either. God forbid anybody should be challenged by an AP exam.

  • Let's pack the AP test with proprietary testing.

    What is best about Windows 2000? (Remember pick the BEST answer):
    (1) It has synergy!
    (2) It's by Microsoft(tm).
    (3) Because PC World magazine says so.
    (4) It makes it wasy to spot losers. [They don't run it!]
    (5) I7 M4K3 U l33t!

    --

  • I took a Pascal version in 1987... Scored a 5, but haven't used Pascal since.
  • I would take a different approach. I think CS curricula should be able to employ whichever language or languages the instructor sees fit to teach concepts.

    But to some degree, choosing the language is choosing the concepts. For example, by choosing Java, you are making a decision to teach certain things (OO) and not teach other things (memory management). Languages may go "out of style", but OO will not.

    Or should we instead present algorithms in pseudocode

    No -- "algorithms in pseudocode" is a relatively advanced course which requires some mathematical foundations. If you're teaching Algorithms to University studets, you could take the pseudo-code approach (See "Introduction to algorithms", Cormen et al) but for beginners, even a course in algorithms should probably start with the students reusing classes, and then understanding how to implement them.

  • by 1nt3lx ( 124618 ) on Monday December 18, 2000 @04:44PM (#550127) Homepage Journal
    I am a application developer and network administrator for a public school department in Massacuhsetts. Ironically, there is no Academic Computer Department. It operates as a function of the Business and Math departments.

    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!
  • I took AP Computer Science in High School the first year C++ was the standard and from my experience it wasn't a good thing. The teacher was primarily a pascal programmer and could hardly teach C++. The College Board needs to realize that most High School Computer Science teachers were not taught Object-Oreinted Design when they were in college. My teacher was primarily a pascal programmer and when the standard changed, he too had to grasp the information. Since I had read a couple of books on C++ and OOP, I helped him out when he can but I am not a qualified instructor, I hardly (and still do) knew the information. As a result many of the people in the class who thought about majoring in Computer Science were turned off since they couldn't understand OO design. At my former H.S. all they had were two programming courses: Introduction to Programming (QBasic) and AP Computer Science (C++). So someone who did well in the former usually took the latter only to not have an understanding of the material. Going from BASIC to C++ is a huge step. Looking back on the experience, I wish they taught functional languages and not OO ones.

    Hell, we wrote classes in C++ while noone really had an understanding of why. Ughh....but at least I lived through it.
  • Ufff now I'm confused... exactly what kind of "real" university are you talking about? I currently am enrolled at the University of California at Berkeley, which last I checked is one of the top CS schools in the country, and here guess what one of the first languages we learn is... wow you got it! Java! Which, after learning a handful of other languages, I think is a fabulous language to teach beginners.
  • by minusthink ( 218231 ) on Monday December 18, 2000 @04:44PM (#550132)
    Last year, which was my senior year, I took the AP Computer Science course which was billed as the hardest course I'll ever take in highschool.

    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)]
  • I took that test in spring of '99. That was the first year it was based on C++. Before that, it was Pascal.

    The test was easy. Like really, really easy. I don't consider myself a particularly good programmer, but I doubt I missed a single point anywhere on the test, multiple choice or essay portion (the essay portion involved writing out programs/functions longhand).

    I got a 5 on every AP test I took in high school (they're scored on a scale of 1 to 5) except economics, but the others were pretty challenging (especially physics C). Not comp sci. That one was so easy I could have aced it at the beginning of the year given an hour to prepare.

    I wonder if the new reincarnation will add a little rigor.


    -------
  • One of the nice things about Java is that it's not too difficult to write code that works, even though writing good code still requires some skill and consideration. Contrast this to C++, a language with cancer of the semi-colon, in which writing code that works at all can sometimes be impossible.

    I've written substantial amounts of code in both C++ and Java and I can attest to the fact that both languages make it easy to write code that works. C++ can become a 'cancer of semicolons' IF you approach C++ as just a fancier C. This is exactly the wrong way to code C++.

    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.

    This is a good point, and I humbly suggest that Java does not meet this criterion. The AP CS exam should switch instead to Python.

    The Free ODMG Project [sourceforge.net] needs volunteers.

  • by Preposterous Coward ( 211739 ) on Monday December 18, 2000 @04:58PM (#550139)
    CS should be about computer science more than computer programming. Students need to be learning about algorithms, data structures, big-O, proofs of correctness, modularity, and so on -- concepts that will benefit them in any language they later choose to employ -- rather than get bound up in the syntactical nuances of any particular language or environment. Sometimes I think that rather than use a language that actually has likely commercial applications, such as C++ or Java, the courses should be based in something obscure but transparent such as Scheme (as in Abelson & Sussman's classic Structure and Interpretation of Computer Programs) or a variant of the hypothetical machine language that Knuth proposes in The Art of Computer Programming.

    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.

  • by Anne Marie ( 239347 ) on Monday December 18, 2000 @04:49PM (#550140)
    Back when the College Board made the original move from pascal to C++, people complained: why move to C++ when alternatives like java existed? People even went so far as to articulate their complaints in protest letters like this [williams.edu] from 1996. This quote is particularly telling:
    Will Java be the solution to all of our problems? It's probably too early to tell right now, but I suspect it will be pretty obvious within the next 12 months, and it looks now like Java is going to be a winner. If this happens, very few schools will be teaching C++ in introductory courses by 1999, when the new ETS exam is first given.
    Which is exactly what happened. Whether it's in brick/mortar colleges or upstart online learning programs, java is eating C++'s lunch, for better or worse. And the results are reflected in the workplace. A quick search on monster.com [monster.com] shows well more than a thousand jobs with java, and such jobs tend to pay more, as anyone who's been looking, lately. I'm glad to see the College Board listen to the best educational interests of our children.
  • by characterZer0 ( 138196 ) on Monday December 18, 2000 @04:49PM (#550142)
    I'm taking Computer Science courses "just for fun" at my college (I'm mechanical engineering) and they start with Java first. Although I can't say that I'm entirely thrilled with the language (hey! lets have the Stack class return the Object you just passed it when you .push, that will be appreciated!), and the fact that its inherently slow, I think its a wonderful language to start learning on. I first learned BASIC, and was told that those who learned BASIC first have a hard time learning other languages, but that hasn't been the case; Java seems to be a high-level enough language not to lose people only familiar with BASIC. Another nice point is that the programs we wrote in lab I can take home and run on my Wintel machine, and my lab partner can run it on his Macintosh, and Joe on his Linux box, and so on; all without recompiling.

    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
  • Comment removed based on user account deletion
  • by crow ( 16139 ) on Monday December 18, 2000 @05:02PM (#550146) Homepage Journal
    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.
  • 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++.

    Actually, Sun's JDK is available for free to pretty much anyone who wants it. The main pain in the rear is going to be figuring out what environment to use. I have a feeling that the school is NOT going to want to use the raw JDK (command line tools and all) with VIM or Emacs, even though that's probably not a bad way to learn it.

    The Free ODMG Project [sourceforge.net] needs volunteers.

  • This is a very, very good thing that the AP board is doing. I am a senior at small Engineering university in Wisconsin, USA (ranked 12th in the nation) and as of 2 years ago we eliminated C++, COBOL, and a few other languages all together in favor of JAVA. C++ is simply a pain in the ass and it's OO design is crap. I originally learned OO programming in Eiffel for NeXtStep here and that was coming from learning Pascal for the AP test back in 1996. Java is NOT bad and it's debugging is extremely more Verbose that most C++ compilers I have had the unfortunate time to use. There are no elements of "cheating" in Java like some of the earlier, more unimformed posts here. Java has the best networking API on the planet and while it may have a few quirks here and there, Java has been a wonderful language to program in and learn what OO programming is supposed to be about. C++ is crap for OO, like I said before, and to have a student learn it would be far more beneficial as a later course in his/her career. Ask yourself one question...If true OO design philosophies are held so highly by all of the geniuses on Slashdot why do programmers for Linux make EVERYHING in C and then try to fool themselves and their programs into thinking they are actually OO when they are not? Maybe if people learned OO programming, philosophy and used decent OO languages before trying to do everything in C and half attempts at C++ then we would have a better Linux/Unix today.
  • fork;
    fork; fork;
    fork; fork; fork; fork;
    ;-)
  • by barracg8 ( 61682 ) on Monday December 18, 2000 @05:03PM (#550153)
    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
  • by woggo ( 11781 ) on Monday December 18, 2000 @05:03PM (#550156) Journal
    Yeah. While we're at it, let's not impose Latin, French, difficult sheet music, The President's physical fitness test, or calculus on them either. God forbid anybody should be challenged by an AP exam.
    You're missing the point. Teaching high-school students Latin is teaching them a language. Teaching high school students computer science is teaching them a sort of epistemology; an entry into a discipline. Teaching students difficult sheet music is teaching them an application of a physical skill and intellectual interpretation.

    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.

  • I'm currently learning C++ AND Java at University Laval and I think that this is a good thing. I know that you will all say that Java is slow and everything, I was thinking this before I started to learn it. Now I see big potential in it. From a technical point of view, it really interesting because of all the things you can do with it.

    And if you think it's slow, just help make a native compiler for it so it will have the same speed than C++. (Work have already begun on such project so you just have to join)

    Beside that, what language would you like to learn in University ? FORTRAN or COBOL ? Those are the C and C++ of yesterday. Schools look at the future, not the past ! (At least they try to do so !)
  • by spludge ( 99050 ) on Monday December 18, 2000 @05:05PM (#550160)
    I originally learned C in highschool and then moved onto C++ in college. So I had been programming in C/C++ for about 5-6 years before I tried Java.

    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.

  • by rjh ( 40933 ) <rjh@sixdemonbag.org> on Monday December 18, 2000 @06:28PM (#550175)
    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.
  • by nebby ( 11637 ) on Monday December 18, 2000 @05:16PM (#550184) Homepage
    There are data types (int, float, etc.) which are not objects in Java. There are static methods and variables which do not belong to a particular object, either.

    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.

  • by woggo ( 11781 ) on Monday December 18, 2000 @05:20PM (#550189) Journal
    This is a good point, and I humbly suggest that Java does not meet this criterion. The AP CS exam should switch instead to Python.
    Yeah, the problem with Java at the HS level is that you have to teach objects to recovering BASIC programmers. :-) Python is an excellent teaching language, and it would be in my top five choices. I'd be pulling for Scheme above all, except then I'd be modded down as a troll and/or yelled at by some 1337 "c++ h4x0r".

    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.

The best defense against logic is ignorance.

Working...