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."
Re:as a student learning java. . . (Score:3)
Java is the language of the first 2 programming subjects of the CS degree I'm doing.
- 1st one teaches basic programming (syntax etc) and introduces searching, sorting, writing GUI's.
- 2nd one teaches more GUI'd, more searching and sorting, threads, hashtables, linked lists etc.
How is Java a bad choice for learning any of this? What difference does it make?
The next 2 programming subjects are C and C++ repectively, which focus more on data structures, code performance and other more advanced things that are usefull for building real applications.
I think Java is a great language to teach high schoolers. Of the stuff that not's in Java but is in C++ what would be part of an introductory programming course?
Java also has a bit of buzz word value and that is good (hear me out). I'm sure that a lot of kids will take the class because they've heard that Java programmers make easy $$$. Of thost kids I'm sure that some of them will gain a real love for programming and computer science. And that is a Good Thing (tm).
Re:Every response is going to be just about speed. (Score:2)
Languages come and languages go, but the algorithms they represent are like math proofs -- They aren't going to change over time.
Let's hope they get it right.... (Score:2)
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.
Re:Lowering the standards once again. (Score:2)
Probably a good move (Score:2)
I'm suprised Microsoft didn't find some way to prevent Java from becoming a key part of the educational system.
Re:Why confined to a language? (Score:2)
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...]
Re:Didn't it already test OO? (Score:2)
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() { := 3;
writeln(i);
}
int i;
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.)
Re:Lowering the standards once again. (Score:3)
I'm wondering how many people here are in or recently graduated from high school and thus know just how Advanced the AP courses in general are. Take a look at the information on Exam Scores [collegeboard.com] at the Collegeboard website. According to them, a score of 5 (the highest score) indicates that the student is Extremely well qualified in the subject.
Now, guess how well students have to do to earn a coveted 5? The cutoff varies between subjects and changes from year to year, but it is quite common for the cutoff to be around 65%. From the Collegeboard site:
The cutoff for Computer Science AB is always one of the lowest. I don't have citations for these numbers, but the year I took the test (1998, my sophomore year) the cutoff was about 55%. So any student that can show he/she has mastered just more than half of the material is considered Extremely Well Qualified. The funny thing is only about 10% of the people who took it got a 5 (indeed, that is how they determine the cutoff - something like "top 10%").
So now they want to teach it in Java. I hope this causes Apple or someone else to develop some resemblance of a decent Java VM for the Macintosh because so many schools use Macs exclusively. Right now the Netscape and the Metrowerks VMs are abysmal...
I met a person in college who said his high school's AP Computer Science course consisted of nothing but playing Need for Speed III the whole semester. He took the AP test and got a 1, but got an A for the course, which boosted his GPA enough to make him valedictorian of his class...
-Albert Mao
I think... (Score:2)
Every response is going to be just about speed. (Score:2)
go troll's
Read the spec! (Score:5)
The Java2 spec clearly states:
Wow. Go figure...;->
Re:It looks like they're finally listening (Score:2)
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).
Re:It looks like they're finally listening (Score:2)
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.
Re:I sympathize (Score:2)
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
on the lousiness of lisp (Score:2)
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 sympathize (Score:2)
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?
Re:Why not SmallTalk? (Score:2)
Great. Java teaches that good engineering solutions require compromises.
Don't Forget the Readers!!! (Score:2)
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.
Re:It already is object oriented!!! (Score:2)
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...
Re:Learning programming and Java (Score:2)
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. ;^)
Exception handling (Score:2)
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:
Re:Java: Great for concepts, but hurts overall (Score:2)
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...
Re:Hmm.... (Score:2)
47.5% Slashdot Pure(52.5% Corrupt)
They Shouldn't Require a Proprietary Language (Score:2)
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
Re:Hmm.... (Score:2)
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)
Re:Good. (Score:2)
Also see the Largon file entry for syntactic sugar [tuxedo.org].
Re:Hmm.... (Score:2)
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.
It gives teachers something else to bitch about!! (Score:3)
Since the school year started there has been a lot of griping and bitching on the APCS listserv about how wrong it is to change. Many of the complaints from the teachers were things like:
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.
Re:who cares? (Score:3)
That's one of the funniest things between high-school and college. In high-school, AP is Advanced Placement, but in college it's Academic Probation! "Hey, Mom, I'm an AP student" usually still works, though =-)
Re:Why does everyone on Slashdot hate Java so much (Score:2)
Um. Interfaces, perhaps?
Re:Good. (Score:3)
Nor is the goal of AP Computer Science to turn out C++ coders. I'd imagine you'd find the College Board's goals for AP CS students are not far off from your own ideals. If you took the actual test, you'd see that it's very little about "What do you use endl for?" and very much about "What are the properties and structure of a binary tree?"
That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts.
Then what language do you propose? I agree that Java is a simpler, cleaner language than C++; I'd imagine most people would concur. There are lots of other good object-oriented programming languages in the world; some people posted to this story requesting Smalltalk, others might want Ada 95, others might want Steven's Toy Language. These, of course, are not good choices, not as much because they are of little practical value to the student, but because they are foreign to the instructors. But, despite what you might think, I would consider practical value to the students to be a worthwhile consideration: Smalltalk is a clean, simple, pure-OO language, and superior to C++ in most every way, but if you take a student who has learned to program in nothing but Smalltalk and a student who has learned to program in nothing but C++ and put them both in front of a Java compiler with the job of writing your LZW compression project, who do you think would fare better?
The fact of the matter is, computer programming has for a very long time been focused squarely on imperative programming languages, and is these days very focused on object oriented programming. These seem to me, then, to be reasonable topics for a high school-level CS class to endeavor to impart knowledge about. At the time the College Board made the switch from Pascal, C++ was the natural choice to satisfy the pedagogical demands. Java had no doubt not proven itself to the glacial folks in the standardized testing world.
You might argue that imperative programming is not a good medium for teaching the concepts of computer science. I wouldn't disagree. I spent a year studying at the University of Edinburgh, where the CS students all start out learning ML. The students bitched and bitched and decried ML left and right -- even more so after they learned an imperative language -- but I though it was pretty cool that they hadn't been thrown into the murk of pointer arithmetic and endianness like I had.
Finally, some people have posted suggesting that the all-powerful language-neutral exemplar, pseudocode, should be used, as language isn't important. This is ridiculous. The AP CS test has to test knowledge of things like pass by reference vs pass by value, self-referential data types, etc. To do so you need constructs in your programming language to support this (e.g., pointers/references). In a multiple choice question on a pseudocode code sample, how is the College Board going to express whether an rvalue is having its value taken or a reference to it? You obviously have to have notes or syntax to express these things, and the kids taking the test have to digest it. I'd much rather spend a little bit of time learning the basics of a "real" language rather than have to guess at the intentions of the author of some fucked up pseudocode...
C++ is the medium, not the message.
Marshall McLuhan would argue that the medium strongly controls the discourse available to the entities conversing in a given programming language. I would agree; a C++ programmer will think very differently from a Prolog programmer. Ultimately, though, C++ was a good, practical choice of CS worlds for the high school-aged computer scientist to dip his feet into. (And Java, of course, is better.)
Mr. Wainwright is gonna freak... (Score:2)
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.
Re:What's wrong with C++'s OO (Score:2)
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.
Re:It looks like they're finally listening (Score:2)
Molog
So Linus, what are we doing tonight?
Re:Why does everyone on Slashdot hate Java so much (Score:2)
>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 -
>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.
Re:Money must have changed hands (Score:2)
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?
Why? (Score:2)
-Stype
Why confined to a language? (Score:4)
My experience (Score:2)
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.
Doesn't matter (Score:3)
Oh yeah, and stupid recursion exercises just to see if we're paying attention.
And lots of stupid recursion.
And recursion.
And some more recursion.
Re:It looks like they're finally listening (Score:2)
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.
--
Re:Why does everyone on Slashdot hate Java so much (Score:2)
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.
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++).
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.
Language changes frequently (Score:2)
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 =:-)
Re:Why not SmallTalk? (Score:2)
FWIW, classes are objects in Java, as well.
Good (Score:2)
Teach OOP Before Teaching a Language (Score:3)
Compare how frequently you have to design and implement classes in your own work to the frequency with which you need to design and implement algorithms. These days, all the algorithms and data structures that would be taught in an AP class are provided by libraries that you just use. I know the vast majority of code anyone writes just sort of does stuff, it can hardly be called an algorithm. But making good choices about program structure (and these days this means class structure) is crucial to having any hope of ever getting a program to work, let alone run efficiently.
A while back the San Jose State University Professional Development Center [sjsu.edu] asked me to teach some programming classes.
I proposed to teach two classes, one on the fundamentals of object-oriented programming, and the other an OOP project - writing a program of some significant size (considering the experience level of the students).
My descriptions of the two classes are given here [goingware.com]. The links to the original course descriptions in that page seem to be dead now.
I felt that these two courses addressed two signicant flaws in most introductory programming education - one was an inordinate focus on the particulars of a language without concentrating on how to program well, and the other was that the exercises done in a course rarely took more than a week to do, and even if there was a term project, it usually was mixed in with other work, and so it wouldn't be of significant size.
This means that exercises in most introductory courses typically gloss over important issues that crop up in real software development, like robust error handling and dealing with the architecture of your program on a large scale.
These courses weren't meant to be that long so I really couldn't get that far into it but the point was that I would be neither teaching the language nor computer science (algorithms, data structures, etc.). Instead, I would be teaching what I could probably get flamed at for calling The Art of Software Engineering.
In the first course, I would concentrate on how to make good choices for what classes to use in your program and how they should relate to each other (when to use inheritance vs. composition, for example), basically how to acquire a good sense of aesthetics for the best way to divide your problem into maanageable parts. There are an infinitude of ways you can write a program, but a far lesser number of good ways to write a program, and this is not commonly taught.
I would use Java in the class, but cover the bare minimum of the language required to cover the conceptual material. Someone else was planning on teaching a course on Java itself.
I also felt that the project course would be of significant value in helping the students find real programming jobs. While they may have to expand on the projects after leaving the class, I knew that (at the time anyway), noone would hire a novice programmer until he'd shipped a product (oh how times have changed) - free software and shareware does count as a real product, but the important thing is that you have to have completed a program of some significant size.
Ironically, the courses were canceled after only two students signed up for them by the enrollment deadline.
Our general theory was that the students didn't percieve this classes as having an immediate payoff in a marketable job skill (SJSU Prof Dev was in good part a fundraising component of the regular University so the classes were frequently targeted towards marketable skills) - when really I felt it would do you more good than a class concentrating on Java or any particular language - it's not hard to pick up a language out of a book but what I meant to teach really would need personal interaction and discussion with an instructor and one's classmates.
I'd still like to teach the classes. I am doing just that in one form by writing GoingWare's Bag of Programming Tips [goingware.com].
Michael D. Crawford
GoingWare Inc
Link for full specs (Score:5)
to help clarify:
etc.worth looking at just to see what they'll be looking for
the reasons why they're not using pseudocode (Score:2)
--
Good. (Score:3)
High school students shouldn't have C++ imposed upon them, because then the medium will interfere with the message. How easy is it to contrast a bad algorithm with a good one when you can't even get the bad one to compile? How do you have time to learn what a hashtable or a Hamilton sequence is when you spend half the semester learning the difference between "const char *" and "char * const"?
I don't hate C++ -- it's not the best designed language, but there are many useful subsets of C++, and combined with engineering discipline, any can produce a successful project. However, it is not a first language. It is not a teaching language, especially in cases (like AP CS was for my little sister) where "C++" basically means "C with cout". A teaching language should be one that a bright student can learn the syntax of in three days, so she can spend the rest of the year learning idioms and concepts that are applicable to CS in general.
~wog
Java isn't platform independent, it's a platform (Score:3)
Java isn't platform independent, it is a platform unto itself, and a proprietary one at that. Just try making use of OS-specific features from a Java program, or doing platform-appropriate things that weren't envisioned by the original designers of the Java platform.
For example, the javax.comm package for serial communications has an API for enumerating the names of the serial ports. On Windows, you get "COM1" and "COM2:" and you can present these in a UI like a popup menu for the user to select a port to use. On Unix, you get something like "/dev/ttya" and so on.
But on Macintosh, you get the words "printer" and "modem". There is no API for getting the icons for the printer and modem ports, because Java was designed by a bunch of textual unixheads from Sun.
If you want to see true platform independence, check out the ZooLib [sourceforge.net] cross-platform application framework. ZooLib allows you to write a single set of C++ sources and compile them to native executables on Mac OS, Windows, BeOS and Posix flavors with XWindows such as Linux.
The platform-specific layer is small and well-architected so it's not a lot of work to bind it to a new platform like, say, QNX.
And you can do that, and sell the results as you like, because ZooLib is provided under the MIT License [sourceforge.net] so you can use it for both open source and closed source projects. Put that in your "Sun Community License" and smoke it.
Please read about Why ZooLib is Good for the Community [sourceforge.net].
Michael D. Crawford
GoingWare Inc
java is a platform (Score:2)
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).
Re:Why confined to a language? (Score:2)
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
Re:Why not SmallTalk? (Score:2)
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.
Re:I disagree (Score:2)
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.
Re:Good. (Score:2)
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.
What Stroustrup Says About C++ Education (Score:2)
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
Re:Why not SmallTalk? (Score:2)
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!
Real CS Teachers can teach PASCAL in any language (Score:2)
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:
Meanwhile, consider what's left out:
--
Re:Lowering the standards once again. (Score:2)
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.
Re: (Score:2)
C# (Score:2)
I'm sure Microsoft would fund schools immensely for it. And any argument against it would apply to Java just the same...
Hmm.... (Score:3)
The test evaluates one's fundamental knowledge on algorithms, data structures, classes, structures, and other processes. Syntax and structure are important, but still secondary. Having not worked with Java too much, I cannot make any proclamations, but I'd say about 90% of what I learned is easily transferrable across all the languages.
Perhaps Java is not a bad thing, although it's gonna be hell for my school, which has something like 250 computers using MS Visual C++.
47.5% Slashdot Pure(52.5% Corrupt)
Back when I was an AP Comp Sci kid... (Score:2)
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
Re:Good. (Score:2)
heh heh..."je deteste la langue des grenouilles"
Sorry, I haven't spoken French at all in a few years. :-)
Why not SmallTalk? (Score:5)
Sometimes I worry that our high-schoolers are being taught tools instead of concepts. I know that univerities go much more in depth than any high school can. At the same time, I sure wish that I had had a stronger theoretical background in computer science from my high school that only taught Word Processing and Basic.
Re:Why not SmallTalk? (Score:2)
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 (Score:2)
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
Re:Why confined to a language? (Score:2)
_____________
Re:Oh just wonderful... (Score:2)
Thanks
Bruce
Re:Why does everyone on Slashdot hate Java so much (Score:2)
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.
Re:Doesn't matter (Score:3)
For a true understanding of how stupid the recursion is, see the previous post and follow all replies.
Money must have changed hands (Score:2)
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.
Re:Why not SmallTalk? (Score:2)
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
Learning programming and Java (Score:2)
I don't know why this is (no direct experience), but it's troubling. Does anyone else have similar experiences?
Greg
Good programming, bad programming (Score:2)
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.
Re:Good. (Score:2)
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.
Next, cull AP questions from MSCE exam. (Score:2)
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!
--
Re:Didn't it already test OO? (Score:2)
Re:Every response is going to be just about speed. (Score:2)
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.
Secondary Education: DEC BASIC, PASCAL, C++ (Score:3)
With the two contesting course of studies (Math: APCS, BASIC, PASCAL;Business: MS Office, Corel, etc.) it is becoming increasingly difficult to afford the demands for software alone.
It was a swift decision to move from the Pascal-Based AP program to the C++ based course. In fact, the move was made so quickly for almost a year and a half the students were forced to use joe / g++ to compile the programs on a FreeBSD computer a student was kind enough to set up.
We have 30 licensed copies of Borland C++, the teacher didn't know how to use it. Actually for him to be able to teach the class he needed to equate almost all the C++ syntax to a corresponding Pascal statement. Needless to say, Object Orientation was not covered.
Qualified teachers are needed more than anything else. Funding is a huge issue for secondary education.
Certainly the case with this particular institution is a lack of a clear course progression. DEC BASIC is hardly a lead-in to C++.
The College Board should provide the outlines for a progressive approach to an eventual APCS (Java) course. Something that doesn't involve antiquated languages would be helpful.
We offered Fortran and Cobol classes until 3 years ago, and we were using DEC VT 320 terminals until 2 years ago aswell. Talk about Modern Technology. FEH!
C++ exam (Score:2)
Hell, we wrote classes in C++ while noone really had an understanding of why. Ughh....but at least I lived through it.
A note from a "REAL" university (Score:2)
Lowering the standards once again. (Score:3)
The first day of class we were introduced into to the wonderful world of C++. We were told how great is was, and how perfect Object Oriented Programming is.
Excited, I took this anticipation that was instilled in me and what general knowledge of OO languages I hadto the teacher after class.
I introduced myself, and asked when in the course would we learn about pointers.
Response "... Thats college level material"
(Pointers! Pointers college level? um...)
Okay, I then asked about Classes.
Response "MAYBE at the end if we have time."
Discouraged, I asked if we would be at least doing memory management with new and delete.
Response: "Nope, college level"
Now, admittedly it was a novice level course; but whats the point of teaching us OO when they don't even bother to teach us to use classes.
(We did end up looking at them for about a day before the exam)
I think a problem that these intro to CS classes have is that they pander to harshly to the 'non-nerd'. They try to get Jonny QuarterBack to take the course.
Now it might just happen that Jonny QB is an excellent programmer and has a great interest in Design Patterns or something; but most likely he doesn't.
There are of course, exceptions; but anyone who has any real interest in programming, already has experience and/or has enough intelligence to learn a lot more in these classes.
The Jonny QBs and Stacy Makeups in my class were the ones who kept us on for loops for two weeks and are the the peopel who drop out of the class in college.
I believe this is a huge problem with Intro classes in any subject, but especially CS where most of its students already have experience with the subject.
just my opinion,
js.skulski
--
minusthink [Code poet or super hero? (you decide)]
Wonder if they'll make it harder (Score:2)
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.
-------
Re:Good. (Score:2)
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++.
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.
right on! (Score:3)
Though I must add, from my experience as a former employer of Web developers, that I wish every high-school CS student learned at least basic regular expression syntax. (Maybe they do now; it's been more than a decade since I took the CS APs.) Regular expressions are one of the single most powerful and productive constructs I've encountered in all of computing, and they are also a great vehicle for learning about things like state machines.
It looks like they're finally listening (Score:3)
as a student learning java. . . (Score:3)
The point isn't to put out useful programs your first year, its to get you interested and teach a programming foundation. Java is not a bad choice.
But my teacher keeps telling me I think in C, a language I'm not at all familiar with, so I can't wait to get into that.
Stephen Byrne
Re: (Score:2)
It used to be Pascal (Score:4)
The language doesn't really matter, the programming concepts do. However, it's very difficult to talk about programming concepts in the absence of a language, so they need to settle on one.
It makes sense to use one that has real practical use, so students can learn relevant skills along with the theory. That makes the education more valuable and easier to grab onto for the students.
Re:Hmm.... (Score:2)
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.
Why does everyone on Slashdot hate Java so much? (Score:2)
Re:Doesn't matter (Score:2)
fork; fork;
fork; fork; fork; fork;
;-)
Functional, SML, pointers, open minds. (Score:4)
The C course was tough for people new to the language - and most people like me who knew the language well skipped every lecture & aced the exam. I can see an arguement for dropping C from the core compulsory syllabus - most of the language overlaps with Java - and there are many CS related jobs in the world for which you never need know what a pointer is.
But it is a shame that SML has to go. SML is a functional language, and few people had programmed in it prior to starting the course, so it brought everyone to the same level. It taught something new to everyone, and opened up the minds of a bunch of hardened C hackers to a different paradigm. I'm sure exactly the same could be said for lisp, but I hated the lousy stinking language myself
I'm sure that most people reading this have probably never programmed in a functional language, and if you are a C hacker I recommend you do so - it will expand the way you approach programming. Or try something ever more, uh, different - go look up the language brainfuck, and get yourself stuck in a turing tarpit.
End rant. Just thought I'd relate this experience
cheers,
G
Re:Good. (Score:5)
C++ is the medium, not the message. The class isn't "AP C++", it's "AP Computer Science", and my original point was that C++ is an unnecessary encumberance on learning computer science. I learned French in high school by studying grammar and conversing, not by reading Sartre. The medium can interfere with the message. Why do you think children don't learn to play, say, the oboe or bassoon at a very young age, instead starting on the clarinet? Unnecessary complication gets in the way of learning the basics.
The goal of computer science education is not to churn out C++ coders; rather, it is to churn out people who are capable of describing solution generators rather than merely "solving problems", people who are capable of procedural epistemology, abstraction, and analysis. That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts. I taught myself Java and implemented LZW in a total of three hours, because I had a strong foundation in the basics. Making students learn computer science via C++ is like making them take the President's physical fitness test in shackles.
It's already like this in Quebec (Score:2)
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 !)
Sounds like a good idea to me.. (Score:3)
I would say that Java is the perfect language for introductory courses. Perhaps a good C++ programmer can produce code with no memory leaks, proper exception handling and a good object oriented structure.. but very few beginners!
Java has excellent standard classes that allow beginners to quickly get to work. Need a hashtable to experiment with.. try java.lang.HashTable. No messing around with Templates and complicated STL on top of learning basic C++.
Sure, Java may not be the best language for creating speedy GUI's but it's one of the easiest and most powerful languages to pick up quickly.
From a C++ programmer... (Score:5)
The losers and poseurs hate Java. The real hackers see Java as just another tool in the toolbox. It's not a tool I have much use for, nor a tool that I'm particularly fond of. But I don't go out of my way to slam Java, either, and more to the point, I don't know a single serious programmer who does.
I consider the One True Language belief to be a childhood disease.
C++ is simply a pain in the ass and it's [sic] OO design is crap.
Please show me how its OO design is crap. Just give me a good, solid example of unadulterated crap in the C++ spec. I've been looking for years and I haven't found any. That's not to say there aren't warts and blemishes on C++; but unlike almost every other language out there, C++ was not designed--it evolved.
There isn't a single feature in C++ which went in just because it was "elegant". Nor is there a single feature in there which was left out to "enhance the purity". C++ was originally C With Classes, when Bjarne was just starting out... and then people gave him feedback, and then people began to mutate Bjarne's C With Classes to fit their own needs.
A lot of people complain that C++ lacks garbage collection. That's a fair criticism; that is one of the warts of the language. What people don't understand is that C++ lacks garbage collection because GC is something that's very hard to implement correctly. C++ lacks a standard thread library for the same reason.
Compare C++'s lack of GC and thread libs to Java. Does Java have GC? Yes, and it's Godawful. Does Java have a thread lib? Yep, but it changed dramatically between 1.0 and 1.1, and even now Java threads still are being tweaked on.
I originally learned OO programming in Eiffel for NeXtStep here and that was coming from learning Pascal for the AP test back in 1996.
I'm happy for you. Now open your mind a little bit and realize that Eiffel is not the be-all end-all of OOP. Nor is Smalltalk, nor is Clu, nor is Simula67.
OOP is a concept, not a concrete reality. Just like a PIII is conceptually a Turing machine, but it doesn't have a paper tape and a symbol scanner. There are dozens of implementations of the OOP concept--I've seen them done in C, in C++, in Java, in LISP (!), in Simula67, in Smalltalk, in Objective C... and all of them have their warts and flaws. But by studying them and realizing where they're flawed and where their flaws are actually stunning successes, I've been able to better grasp the abstract notion of OOP.
If the only thing you study and appreciate in your CompSci career are languages you think are neat, you're going to wind up a well-educated idiot.
Java is NOT bad
Undisputed by every programmer I respect. Of course, just because it's not bad doesn't mean it's good, either. I'd give Java a grade of "painfully mediocre", myself.
Java has the best networking API on the planet
How many networking APIs have you studied? Have you fully grokked the raw power of the UNIX C socket API? Have you seen the beautiful elegance of some of the C++ socket libs out there? What about Perl and its networking abilities? Python? CORBA?
They're all just tools in the toolbox. Use the right tool for the job. If you like the Java networking API, fine; I'm not going to tell you it's bad (because it's not). But if you're going to say Java's API is unquestionably the best, you're going to have to prove it, and I don't think you can.
C++ is crap for OO
You apparently don't know beans about OO, or programming in general, or else you'd know that this statement is false.
Is C++ perfect? God, no, not by a longshot. I beat my head against it frequently. But that doesn't change the fact that for OO, C++ is one of the best languages out there. Not the cleanest, not the most elegant, not the best-designed... just one of the best.
If true OO design philosophies are held so highly by all of the geniuses on Slashdot why do programmers for Linux make EVERYTHING in C and then try to fool themselves into thinking they are actually OO when they are not?
Ever seen GTK+ or GNOME? Both are object-oriented. Written in C, natch. This probably boggles your mind, since you think that C isn't OO. The truth, which all of us real OO programmers know, is that almost any language can be used to write OO code. C++ just provides some syntactic sugar to make it easier.
The kernel is also rife with objects.
Motif is OO C as well.
Maybe if people learned OO programming...
... like you did?
and used decent OO languages...
... like the ones you think are decent?
before trying to do everything in C and half attempts at C++...
Define a "half attempt" at C++, please. I can write procedural code in C++ and have it be perfectly valid C++.
then we would have a better Linux/Unix today.
I think you need to learn a lot about OO, and expose yourself to a lot more languages and paradigms, before you'll be able to sell me on any of this.
Re:Why not SmallTalk? (Score:3)
I've never used Smalltalk, but either of these two things (the first more than the second) take away from the "true" OOPness of Java.
Re:Good. (Score:3)
I TAed for a C++ class as an undergrad for three years, and it never ceased to amaze me how many students kept making the same class of mistakes throughout every semester. By contrast, the Scheme class I TAed for had students doing harder work with fewer dumb language-related errors. It is all in the medium in teaching this stuff. C++ is just pedagogically unsound.