College Board AP CompSci Exam Will Be In Java
orangesquid writes: "Looks like the College Board has changed the tune for their AP Computer Science test: in a few years, it will be in Java. Eep!" From the announcement linked to in there: "In October 2000, the AP Computer Science Development Committee made a formal request to the College Board that the AP Computer Science curriculum be revised to include object orientation and to use Java as the delivery language for the AP Computer Science Examinations, beginning with the 2003-2004 academic year. The request was approved by the College Board in November 2000."
I don't know about the vast majority of /. readers, but I can safely say that the introductory CS class I'm taking this year (not AP) isn't actually TEACHING me anything. We're allegedly learning C++, in the "C with cout" form mentioned earlier. However, since the teacher, who was hired about 3 weeks after the beginning of school, doesn't actually know how to code C or C++, and has only limited experience with Pascal, we have yet to learn anything useful. This is somewhat upsetting to me; I had hoped to gain at least a working introductory knowledge of programming. So far, all I've learned has been from reading my dad's C books (the class is taught in C++, but I'm still unclear on the difference, other than the ability to use cout - I still don't actually know what this OO business is all about). The teacher says he'll get around to pointers and arrays once he figures them out... The moral of this story is that public education should not be involving itself with CS; the pathetically low salaries and the school districts' reluctance in providing decent software (yay for Microsuck VC++ - I can barely write out int main(); and I still feel more at home with Emacs) preclude any decent education in the field. Also, note that my experience might be different from that of others; I CHOSE to attend a Liberal Arts magnet program, and this might just be the consequences I'm suffering for my awesome AP Art History class.
This is one of the most insightful comments I've seen in a long time. It's nice to see such a rational, well-thought-out response to such an irrational remark.
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).
When it absolutely positively has to be there.
My teachers were much kinder. They taught the class in Pascal, because that's what the dept standardized on at the time. But students were free to turn in assignments in the language of their choice. Choice rules!
You're right, I did just take the A course. Altough, as you've said, even in the longer, tougher(?) course, they skip major topics.
--
minusthink [Code poet or super hero? (you decide)]
"when life gets complicated, I like to take a nap in a tree and wait for dinner" - Hobbes.
I agree entirly. Although my former high school already offers a class that teaches Java (the CS program rocks), I think that teaching C++ is much better, as it is (IMHO) more marketable than Java at this point. Java is so easy that I think students will miss out on some of the more difficult (and more interesting) problems that come about using things that Java doesn't let you mess with. I guess high school CS must go the way that every other subject has gone... (flush).
Free as in speech, free as in beer, or free as in lunch?
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.
JET Program: see Japan, meet intere
I have yet to meet a good CS teacher in highschool.
I must admit we're few and far between. But once in a while someone like me comes along with a quirky combination of programming ability, teaching skill, and disdain for consumerism.
Blame it on our values as a nation that we don't pay good teachers what they're worth. I make less than your quoted $35,000 a year, and our head football coach makes maybe $80,000. Gotta love the free market.... But paying teachers differently based on skill (rather than purely years of experience) or on market value isn't going to happen in Texas anytime soon.
I find it ironic that 100% of students completing my third-year course last year are now working at some tech company while attending college, and making $11 an hour or more. Oh, well. I reject offers from Dell and Tivoli from time to time. I just really, really love my job.
For the record, a good percentage of my third-year kids also use vi by the time they leave....
Check out my mad HTML skills on my class webpage. The semester final is firewalled out, so don't bother.
Just had to say that we are out here, if hard to find.
Graham "Teach" Mitchell, computer science teacher, Leander HS
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 Java specification merely requires that VMs implement garbage collection. The method employed is left up to the implementor.
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.
Q:Doctor, how many autopsies have you performed on dead people?
A:All my autopsies have been performed on dead peop
--
--
E2 IN2 IE?
The course program at the school I work for uses DEC BASIC. It's much more powerful, but is heavily unpractical.
We have Visual Basic 6, but the teacher is highly unqualified to teach it. Actually, he looks a lot like Santa Claus, but that is something completely unrelated.
The problem is absolutely a lack of qualified teachers. The good programming teachers work for higher education. Public school teachers aren't paid high enough to be sufficiently knowledgeable to teach a modern programming class.
The List of Grievances with Slashdot.
Its amazing what hype can do. In the court of opinion, java is indeed taking C++'s old spot.
Isn't that true of Ruby as well? Seems to me it's a language that might have more practical application, but that's just me.
-lx
LOL!! What a sense of humor. It must be not real in the same sense as world peace or the end of hunger is real, right? I have no knowledge of this college exam, nor do I care about it. However, Java is a pretty 'clean' language, and fast enough for most purposes. I imagine the average class someone would write for this would compile in seconds.
I'm suprised Microsoft didn't find some way to prevent Java from becoming a key part of the educational system.
I read Sartre, too -- but not in the first year. :-)
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 is pretty popular. As for how to structure code, Code Complete is pretty good, as is Design Patterns. There are also numerous other domain-specific language independant books like Computer Graphics: Principles and Practice (while it does have code snippets, you can effectively treat them as pseudo code), Artificial Intelligence: A Modern Approach, 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...]
The fundamental concepts of computer science can be very challenging, plumbing to the core of modern mathematics, only students are less likely to get time to learn them if they are worrying about when brackets are required and when they are optional.
But why worry about the challenge of creating a proper analogy when cheap shots are so easy ;-)
Boss of nothin. Big deal.
Son, go get daddy's hard plastic eyes.
Expanding a vast wasteland since 1996.
Well, at least in my experience learning C++ was no different than learning BASIC. We went through loops, if statements, etc. barely touched on classes or even structs. So why institute a strict language with out using any of its advantages? I just graduated from HS last year so I have a pretty good view on things I think. This problem of pandering to the underachiever is(has) corrupted the whole system. This system creates more underachievers and in turn will have to pander to them; it puts the whole system into a downward sprial. Something needs to change, methinks. High school is not a challenge at all; I don't know anyone who was actually, truly challenged by the work material. HS taught me nothing more than if I am going to learn anything, i'll have to teach myself. just my opinion, js.skulski
--
minusthink [Code poet or super hero? (you decide)]
"when life gets complicated, I like to take a nap in a tree and wait for dinner" - Hobbes.
This is true, yet bogus if you take it, as some do, to mean that you can sanely apply OO to any language. Anyone who hacks ML to do OO and expects others to follow should be shot.
For me, I'm particularly impressed with how Perl gets objects. It's truly really interesting; they're not "pure" objects, but given the flexibility of Perl, you can get the language to implement every feature of OO. A lot of amazing technicques are described in Damian Conways "Object Oriented Perl".
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.)
------ 24.5% slashdot pure
Slow loading tests for slow students... it's a perfect fit!!
I was talking about the professors, actually.
Fawking Trolls!
"Going to war without France is like going deer hunting without your accordion." - Jed Babbin
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 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
"Never put off for tomorrow what can be avoided altogether"
my AP English exam should have been in pig latin.
Have you ever thought of using Integer, Float, etc. and just not using static methods/variables. A little awkward but it works.
Scuttlemonkey is a troll
You shouldn't have problems with this unless you are not looking. Have you ever looked at amazon.com's catalog. There are quite a few books there you know.
> everything is an object in Java too. or am i missing something?
Yep, namely that everything in Java isn't an object, like an int or a boolean. In Smalltalk, _EVERYTHING_ is an object. It's a very elegant language and kind of fun to work with.
That said, I'm still going to use Java for more than I'm going to use Smalltalk for.
Dave
I've been a "C hacker" for a while now, and before that, pascal, basic, and some other various languages. This past semester, my first in college, they started out with scheme and moved to ML. I had never used functional languages before, and I was very impressed by how easy it is to write expressive, readable, and safe code. In fact, it's difficult *not* to write readable code, and imposible to write unsafe code with these languages. I definitely agree that anyone who calls himself a programmer should learn and use functional languages. For a very large class of problems, they're much easier and more appropriate than your standard imperitive language. And they're really not that slow, either. Of course, they're not appropriate for everything (an OS kernel, for example) but neither is C, and there's a whole lot of people who don't realize that.
As for the AP CS test, I took it the last year it was in pascal. In short, I would find it difficult to create a more horrible and misguided test. They tested pascal-specific features and made you manually trace through semi-obfuscated code. It was just disgusting. There was very very little of actual CS concepts, and not very much data structures either. (The AB test included some questions on linked lists and binary trees.)
________
Does anyone actually have a Java program designed to control air traffic, or for the operation of a nuclear facility?
mm. Java is alright, but it's OO or nothing. If this is the only language they are going to use, it risks binding what kids think programming and computer science are to the object oriented view, which certainly has its place, but isn't necessarily the best, most interesting, or most illuminating way of thinking about every problem. I think they ought to give them a taste of all sorts of languages that expose how you can represent problems and formulate solutions. C++ would, in my opinion, be better, as you have the /option/ of object
orientation but are not bound to it. In a perfect world they'd be teaching scheme, prolog, c++, java, , in
tantem with the concepts as they fit, and give
people a better taste of what's out there, and
get them used to switching representations at
will to suit problems. It would be a pretty arduous course hehe, and you'd be hard pressed to find too many high school teachers qualified I'd imagine, but damn, those kids would be the bomb hehe.
The reasons for not using C/C++ is that, as mentioned by a lot of experts above, it can be a lot of ways to do the same thing, which make objective marking difficult. (Similar case on Perl, CLISP, etc.)
Java is a good choice(skipped boring reasons here), but not the best. As we all know Java specifications is being revised from time to time, though it's much more stable recently. But what if SUN's CEO revised the spec. in favour of his son's answers? (kidding)
I of course welcome the news as I'm a Java programmer myself, but I'd say ADA is a much better choice. It's stable(yet ancient ^_^), strong typed, well-defined OO.
High school is still geared towards outputting factory ready students. Which means they must teach a definable, repeatable skill. All that other stuff is what makes a person good at what they do, instead of just letting them put it on a resume.
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
If they want kids to demonstrate proficiency in OO programming, why aren't they using a real OO language like Smalltalk, Objective-C, Eiffel, Python, or any of the dozens of languages that don't cause C++ style brain damage?
If Java is the answer, then it's a stupid question.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
Java SUCKS for cross-platform programming. It doesn't deliver the portability that Sun promised, any more than it delivers the security that they promised.
Write once, debug everywhere.
If you want code to be portable across platforms, use Perl or Python.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
First of all, we should be clear what we're discussing: Java the language, or Java the platform. Obviously the language is platform independent, with the VM running on each machine being tied to a platform.
And on that note: lowest common denominator is the tradeoff for portability. And yes, there's unix-isms like System.out and System.err which irk the Mac people, but it still works for the most part, even if it's a little weird in spots. I haven't seen hordes of Mac java programmers screaming for blood because there's some Unixy stuff in Java.
For example, the javax.comm package for serial communications has an API for enumerating the names of the serial ports. ... But on Macintosh, you get the words "printer" and "modem".
So? For the most part, "javax." is platform dependent. "java." is platform independent. While pure java is preferable in terms of portability, native code is fine as well, which is the point of the javax system. If lowest common denominator isn't good enough, use javax: but then don't be so quick to complain when it returns platform specific values.
If you want to see true platform independence, check out the ZooLib 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.
While this sounds cute, there's no programmer reference available so I can quickly compare the available APIs between it and JDK1.3. The high level feature list has some nice things (the threads), but really, most of that stuff has come for free since Java 1.0, and more: 2D/3D graphic APIs, impressive international support, CORBA, _and_ it runs in a browser.
The Java2 spec clearly states:
Wow. Go figure...;->
Easy, automatic testing for Perl.
As probably one of the few students to have taken both the PASCAL and C++ versions of the AP CS AB test. For those of you who may not know, AB is the test that covers closer to two quarters of CS instead of just the one the A test does. And it wasn't that I scored poorly the first time, it was just that I liked the class and it would be an easy 'A'. The major differences between the two tests questions wise was a tiny bit on classes for the A test. But the AB test did have alot of pointers and recursion. We had to be able to write linked list and binary trees using dynamic memory allocation. Of course this was even a requirement on the PASCAL version of the test. Now after after a year in the CS department at the UW, I would say the material you covered in your class would've been equivilant to the 1st quarter of any CS class in college, except at the UW they are teaching C as the 1st quarter language and only review pointers because the need to pass-by-reference which we all know C doesn't have an easy construct to do but C++ does. And then in our second quarter course they cover most if not all the material one finds in the AP CS AB test. Also your statement that most people in these classes already have experience is totaly wrong. In my HS class which had about 30-35 students in my class and another 30-35 in the other. I would say 75% had no experience but most of them got the material, and of course there were some who would never have a clue. Also several CS majors I know where first introduced to programming from a intro course, and they are out standing programmers that have a different and valuable viewpoints. They don't call intro courses "intro courses" if they weren't there to introduce the topic. If anything it should be an easy 'A' and a chance to help others, which always helps you know your stuff. So in conclusion I don't think it is lowering standerds, it is just that your school didn't offer both courses, which at my HS was a merged class anyways. Just be thankful your school had AP CS at all, most don't or never even heard of it.
Personally, I'm pretty sick of seeing the comments saying "blah, java is slow" or "it's not fair to those who only know C" etc. etc.
What about those who don't know C but do know Java? Think they weren't up shit creek without a paddle before? (unless they decided to learn C for the test)
Java is a technically sound (relatively speaking) object oriented language. It has more merit to be on the AP test than C, and possibly even C++.
btw, C++ is my favorite language to code in.
"I have no special gift, I am only passionately curious." - Albert Einstein
Defending Java in terms of C++ is an extremely weak argument. C++ is not an OO language, as Stroustrup admitted when he first presented it at OOPSLA.
Java doesn't deliver any of its promised benefits, and the hype around it prevents the PHB's of the world from letting engineers who know what they're doing choose languages that actually fit the task at hand.
Java is an excellent language for two purposes: 1) getting funding from pig-ignorant tech groupies who don't know the difference between a buzzword and a solution, and 2) writing Java demos.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
Whoa, I definitely agree with this. I think that "computer science" should be more about the logic and thought process backing the code. For all I care, they might as well make up their own language syntax that is described on the first page of the test. Most programmers should be able to adapt to new syntax quickly.
Whatever the case, I do not believe that the language should be stressed on the AP CompSci test.
Why use JAVA, with poor garbage collection mecanism and not allowing multiple inheritance? [ ] You know what you are talking about.
[ ] You know that C# is also coming with single inheritance.
When did everyone start thinking that comp sci was all about object orient programing? Object oriented programing has more to do with software engineering and really not much to do with computer science.
I suppose it's futile to make this argument nowadays; hardly anyone recognises the difference anymore.
(That's not saying much. Many other people said the same. Just so you don't think I'm bragging here. :)
Anyway, if their point is to teach the concepts, I think C++ suits their purpose just fine. In fact, any language will -- Java, C, Pascal, BASIC, ... what's that one language that tries to break all the rules? ... The problem that I have with it in general is that, well, the test is rather outdated as it is. The majority of the test involves tracing your way through extremely confusing bits of code, trying to keep all the loops, recursive calls, and gotos straight. It seems that this is exactly the kind of thing we're trying to train people to avoid.
If I was to express my personal bias, I think the test should be in straight C. Let's see: lots of people already have experience in it, and it's been proven to work. If written correctly, it lends itself well to the short snippets of code that you're likely to see on a test. Teachers have a vast amount of textbook material and example code at their disposal. And finally, most people are going to have to learn C at some point anyway. It's far too useful and widespread to overlook. But yeah, I know that Java's now considered to be the One True Language by all too many people, so this isn't going to happen... I'd just settle for a test that's well written and thought out.
How can we continue to believe in a just universe and freedom to eat crackers if we have no ale?
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).
The world is neither black nor white nor good nor evil, only many shades of CowboyNeal.
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.
Is this nerdy enough?
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
Bruce Perens.
I have been informed by my roomate that the AP test is somewhat geared toward theory. For example, you are coding on paper, so you aren't expected to be perfect. As long as the reader gets the idea you are trying to convey, a semicolon won't kill you. He said that he went into the exam having never coded a Tree on a machine before, yet was able to write how it would be done (searches and what not).
--------
--------
It's OK to be social, just don't tell anyone about it.
I have to disagree with this. First, I would try to guess the reasoning of this decision. Compared to C or C++, Java is a much better language to be used for introductory classes. Based on my personal experience, using C or C++ involves dealing with a lot of overheads. For those students new to Computer Science, these may discourage them into delving more deeply into the field. Another aspect that may also be a factor in the decision is the growing popularity of Java, in comparison with, say, Smalltalk. OK, maybe Smalltalk is more object-oriented, but the decision makers at College Board certainly cannot ignore market force.
As a concluding remark, let me comment on the suspected money transfer from Sun. Here at Columbia we use Java for our main introductory class, and I don't think the decision was made with the help of money transfer from Sun to the CS department. Sometimes, it's not just about money, but also because the thing--Java in this case--is indeed better for the purpose.
It means that its semicolons are cancerous.
I had something of the same experience after learning LISP in university. More recently, though, I picked up a copy of the famous SICP, 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! ;^)
At first I thought you were merely misspelling Knuth, but since he uses assembly code for the fictionary computer MIX that can't be the case. MIXAL is not a nice language suitable for beginners, and it is not at all clear how to "extend to OO" any assembly language...
So who is Kanuth?
BlueJ!
As an AP CompSci student I felt inclined to post a response to this bit of information. I must say; what I have learned in the first semester of Computer Science, I taught myself in my first week of learning C++ before enrolling in the class. CompSci teaches the very basics of C++ and is more focused on the concepts of devlopment that could be applied to any language. Regardless of the language, the class will for the most part remain the same. New textbooks will be issued and perhaps we can now graduate from a DOS based compiler? Other than that the class will hardly be changed. So, is this a good thing? I am indifferent to the change, but personally I feel that the entire curriculum of the course needs to be changed, but that is an entirely different post :)
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?
It seems that everyone wants to start a "my language is better than your language" debate. C'mon guys, we're supposed to be able to grasp the fundamental concepts of placing logic instructions into a machine that does things with it. It doesn't matter what language you use.
I can tell you already that in Australia my old university has all its fundamental programming classes in Java (another down the road in Smalltalk) now.
Of course that means that everytime we apply for jobs in the states they ask not how easily we can pick up a language, but rather what specific language we know.
I don't think you have to be worried about what language your tests are in, but whether prospective employers will acknowledge your ability to program (in whatever language you need to adapt to) or just ask you if you can do it in one particular language because it's "this week's e-word".
Dan
Why a LISP varient? Why not get even more old school and use FORTRAN?
Seriously though, why do so many people recommened outdated functional languages like LISP varients and ML varients? All of the new hip functional programmers know that Haskell is the hot sexy new girl on the block. Haskell is a strongly typed and strongly normalizing FP language, unlike the weakly typed LISP varients and the less-then strongly normalizing ML varients.
In case you don't know, strong typing catches more errors at compiler time, greatly reducing debug time, and functional languages with normal order evaluation, like Haskell, will always compute when possible, but weakly normalizing languages like ML do NOT always compute when possible - thats what you get for strict evaluation 1960s style (yes ML wasn't made in the 60s, but its evalulation style is OUTDATED!)
...oh, and I forgot to mention that ML nore LISP are purely functional languages, since both allow side-effects AND sequencing of statements, directly in the language. Haskell supplies all of the expressibility and performance gains associated with side-effects and statement sequencing through the categorical concept of monads, reinforcing the purity of the language.
So why not give the language a try? Its free and open! Got Haskell?
There are data types (int, float, etc.) which are not objects in Java.
Great. Java teaches that good engineering solutions require compromises.
Many Universities have practiced the same thing last 2-3 years here in Denmark. Java, java and java again :).
A function which cannot call itself cannot call itself a function.
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.
--------- Beware the dragon, for you are crunchy and good with ketchup.
I fully agree. When I took AP computer science in 1997-1998 it was in Pascal (ha!). I remember going to a RIT info session and saying that I was taking AP comp. sci in pascal and the guy laughed.
However its quite apparent that the language does not make the course. Even though I haven't used pascal since that lowly course, I've used the concepts of abstract data structs, and I haven't had to tax my programming mind until my junior year in College. It all was review in a different language (c++ and some java for those who are counting). And for all those arguments on c++ or java being better, I believe that you most likely prefer the one that you started on (c++ rules!!)
Dan
I have no idea what kind of questions they ask but take this as an example:
Read in paragraph from the following file and store each paragraph in an array. A paragraph is denoted by a line feed followed by a tab. Sort the paragraphs alphabetically and write them to a new file.
This is a fairly long question when you're using C, but in perl it's about 6 lines.
p.s. It's entirely possible I have no idea what I'm talking about. It's not fair to a student who doesn't know perl to have to do so much more work and lose time on the other questions.
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...
I've been employed as a business programmer for a while, and I have yet to use C++ to do any real work. Only C, and Visual Basic. (And don't tell me Visual Basic is OO, or at least really OO.)
OO is only the latest of many programming crazes to come and go. And sadly, I feel that most of the people advocating OO programming, don't understand: A. what it should be used for, and B. the draw backs doing things in certain ways have. Such things lead to operators defined in strange and unusual ways, and a strange mix of Object oriented code, and structured code, mix and matched in no specific order. Ever try managing someone's C++ code after they've left? You might as well start over from scratch. Ever try re using a class in one project for another? I guarentee you, it won't work well.
C++ and Java lead to one thing in the hand of a novice, untrained programmer: bad code, and bad programming practice. I would argue that people should learn code in this order: procedural, structured, and then object oriented. Not the other way around.
------ 24.5% slashdot pure
i had the utmost pleasure of taking the class twice back in the day... i originally took ap pascal my sophmore year (A test) then went back and took ap c++ (AB test) my senior year. pascal was an outdated language and the ap classes that were added to the c++ class were terrible. #include .... i still have nightmares. i can't see how there would be any disadvantage to going to java. i don't really enjoy java, but it does embody important design methodolgies which are important to learn. i'm sure they'll find a way to screw up java however... and with the quality of high school computer science teachers (Ms. Kl**p *cough* *cough* for all of you Mainland students out there :) )... i'm sure young lads will continue to grow up with a warped sense of programming.
Bob
Please show me how its OO design is crap
C++ still has pointers, and you have to use pointers regularly to get anywhere. Now I'm not a SmallTalk purist (although I work with a bunch of them), but IMHO, any decent OO language has to have made the complete switch from using pointers to using references. It's not a coding thing, it's a debugging thing. This is another failing with C#'s "unsafe" pragma. If the use of pointers can exist, then there's no proof of their absence and you have to debug the code in a mind to expect pointer problems. I write applications - I have better things to spend my coding time on than getting memory management secure - that's what my language environment is for.
Secondly, multiple inheritance. Interface-based programming is the way to go, to support multiply-sourced (sic) behaviours, not multiple inheritance. Even VB (FFS!) recognises this.
On both of these counts, I find Java a big improvement over C++.
Another huge advantage of Java over C++ (although this is a pragmatic advantage, not a theoretical one) is the fact that Open Source Java classes are freely available for almost anything, easy to integrate, and usable. C++ in comparison tends to be proprietary, inconsistent and crap (MFC - I rest my case).
What do I know ? Years of O-O Pascal, C++, J++/Java and VB, and even some SmallTalk. These days I write Java Servlets.
i'm a junior at WPI, and Java is used in lots of courses. i first learned it in CS2136 (paradigms of computation). Later, i had to use it in CS3013 (operating systems, although the professor admitted later that using java for that assignment was stupid... (duh!)) In the past it's been used in CS3733 (software engineering) although, this term and D term this year it's in scheme. It's used a little bit at the end of CS4533 (databases I). plus there are other courses that give you a choice of languages to use.
That said, Java is a good language to learn object orientation with. It's syntax is elegant, it's constructs are fairly simple. It doesn't suffer from multiple inheritance problems. (yay interfaces...) Importing packages is a much cleaner way to handle including other code sources than includes.
having said all this, i think i should say that despite the fact that i favor java as a language, i despise it as a platform. it's a slow, clunky piece of crap. I also have issues with sun's java compiler. It requires that in many cases, certain exceptions are either caught or thrown. 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. I frequently just want to know if it works before i handle exceptions.
having said all this, i suppose i should throw in my comments on what should be done for AP in my opinion. start with C. move them on to scheme, then touch briefly on prolog. It's gppd to give the students experience in a variety of concepts of programming language. Java would be a good choice to teach object orientation at some point in the course, but time limitations would probably get in the way.
#define F(x) int main(){printf(#x,10,#x);}
F(#define F(x) int main(){printf(#x,10,#x);}%cF(%s))
I have little good to say about Java myself, but apparently for different reasons than you. My beef with Java is that it's not very strongly typed -- you are continually throwing away type information by storing things in Object variables, then later doing error-prone downcasts to the type you want.
Why on earth do we need strong typing? Run-time efficiency is one nice benefit of strong typing, but perhaps a more important benefit is that strong typing helps you catch lots of errors before you ever even run your program.
Hey,
My School don't teach crap!
The closest slase we have to any of that is Keyboarding (not kidding).
I go to a small country school, that only has about maybe 1500 students in the Highschool.
I'd love to learn JAVA, so I am getting a book about it for Christmas.
One of the best, well-thought-out postings I've ever seen on /., and some lemming moderator rates it as flamebait. I guess I shouldn't expect much better, but it is still saddening...
"there once was a big guy named lou
whose limericks would end at line two"
This comment is mostly right. I do beleive that there is a place to test a students understanding of the syntax, functions, etc. of programming languages. As stated in anohter post, the demand for Java programmers exceeds those of any other language. So, it seems reasonable that this part of the test be in Java.
:(
By the way, I only got a 2 on the test.
Only 1/2 an MLOC? What a bunch of wussies.
While I agree with your main point, teaching a student Latin is not just teaching them a language. Latin is a dead language so knowing it by itself does one very little good in today's world. However, so many words and word roots in modern English are derived from Latin roots. Also, Latin sentences are very structured and logical and learning to construct and interpret such sentences teaches certain logic skills. Finally, it if were just about teaching a language, HS honor students would be taught one with more explicit uses than Latin.
Kids would get more of a technical education reading this web site. I was happy to see they are at least headed in a direction now...
Why schools arent using more Free unix surprises me still, considering how big of a concern budgeting is for them.
No...I am just a tutor of an University but I can tell OO is becoming part of their life now. I'm not sure whether it's due to we start teaching Java, instead of C++, 3 years ago.
In my humble opinions teaching OO with C++ is rather time-comsuming because I also need to teach them a lot of non-OO related things but essential to their project, like overloading, garbage collections, etc.
Of course, there are a lot of things in Java doesn't related to OO, but they could well create a good project without them.
Although you go on ranting about how the original poster is not knowledgeable, you on the other hand seem to have a barely superficial knowledge of Java as your unqualified comments on GC and threads clearly show. By the way, a decent GC requires a VM and threads are heavily platform dependent, which explains why Java has them and C++ doesn't. Not because they're hard to implement.
I believe the only reason you don't slam Java is that you like C++ and you'd have a hard time reconciling how C++ is great and Java sucks.
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. ;^)
++ Say to Elrond "Hello.".
Elrond says "No.". Elrond gives you some lunch.
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:
++ Say to Elrond "Hello.".
Elrond says "No.". Elrond gives you some lunch.
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...
++ Say to Elrond "Hello.".
Elrond says "No.". Elrond gives you some lunch.
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.
I don't think that's necessarily what they're seeking. After all, some of those students will need to move beyond the OO paradigm at some point in their programming work - convenient and popular though it may be, there are those times when LISP, or Prolog, or scripting languages, etc. would be preferred.
Java is a good choice because it nicely balances utility with structural elegance - it's not as rigid and geared towards one Right Way to Program as languages like Smalltalk or Prolog, but also isn't as freewheeling as Perl, which probably provides way too much freedom to the novice programmer. C++, while certainly flexible and useful, is also - hopefully this won't start a flamewar here - a bloated mess of a language with waaaaaay too much syntactic sugar and general weirdness.
Basically, Java is flexible enough to program anything you need in a syntactically acceptable manner. It's a good move on the part of the AP board to do this.
For instance the exam could cover recursion, file systems, memory allocation, etc. The exam does cover recursion, memory allocation and (to a limited extent) the file system.
---
The Hotmail addres is my decoy account. I read it approximately once per year.
Well, considering that I go to TJHSST, 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)
As a person who took the AP Computer Science B test(credit for 2 semesters) with a perfect score(I had time to comment my code :), I find the hubub over the choice of Java rather interesting.
First, I want to make it clear that the CollegeBoard AP tests don't test OOP at all, not even in the 'advanced' test. They test a subset of normal programming techniques not limited to any single programming language. The 'toughest' thing on last year's test was a series of questions on tree data structures. So all this talk about OOP or not really is unfounded.
This brings us to a good question: is Java an ideal learning language? What should someone look for in a first language? Should they look for the same things they look for in a 'best' language, should they look for an 'easy' language, or should they look for something different?
IMHO, they should look neither for an easy-to-learn language nor an ideal working language.
Take Java for example: Java is fundamentally object oriented- to teach Java would be to introduce a topic early on that is usually reserved for later classes and isn't even tested by the AP tests. It was tough enough for my fellow students to understand recursion without trying to teach them object-oriented-programming before they even know what a data structure is!
But let's look at an 'easy to learn' language like Basic. The problem with Basic is that it's too basic, that they'll have to re-learn programming to a large degree once they do some real programming later on.
So what do I suggest as a language to teach students with?
Good ol' C++(or any close derivitive like Perl). Now before you flame me to death, here's my reasoning: When we teach someone a language, we want to teach them a language that is conceptually incrementive, that is to say that it is possible to start them with the very simple things and then move them to more complex things without requiring complex understanding(ie oop) right at the beginning. C++ and its close derivatives are also desirable because they include a full set of programming capability. Students are not hindered by lack of functionality in C++ and its derivatives. Thirdly, one must choose a language that resembles as many other languages as possible. This accomplishes(almost) the effect of learning in algorithmic notation(the benefit of which is language independence), since the student would(ideally) be able to move to other languages without having to relearn language syntax.
Certainly, Java is a wonderful language, but teaching Java to beginning programmers is a faulty system, since it introduces them to OOP too early and because of its OOPness, students cannot as easily move to other, non OOP languages after learning in Java.
I think that Java is certainly one of the better languages to learn in, but I firmly believe that C++ || Perl are the ideal languages to teach beginning students
Sure, badly written C++ and Perl are horrible Kludges, but it can also be coded elegantly. Anyone can write obfuscated code; the language itself is neither obfuscated or elegant. That is up to the teacher.
/me pulls on his asbestos pants
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 - 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
-- Could you use my software consulting serv
As a current high school student, and one who will probably be taking AP compsci sometime in the next few years, I would just like to voice my concern.
Concern about what? Actually this sounds like good news. If I understand correctly, they used to use C++, which is a horrible language for teaching programming. Java is a lot cleaner and therefore more suitable.
Is Java really the language of the future?
Unless you've got a time-machine that's not possible to tell. But a good guess would be "yes", since it certainly is the language of the present.
Isn't C++ more widespread than java anyway?
Yes, and C is even more widespread than C++. And Cobol is even more widespread than C. There is absolutely no correspondence between quality and quantity. But asking for the more widespread language is relatively useless. There are room for more than one language in the world. And there certainly is room for both C, C++ and Java. And if you intend to be a professional programmer, you will probably have to learn all three.
Maybe they're trying to standardize Java like C++... Sun tried to, but then they realized it was too early and bailed out. So now Java is controlled by Sun only.
Isn't this a bad thing? Sun is still having trouble getting java running efficiently on their own specialized hardware...
What is a bad thing? I didn't know sun had specialized java hardware. But java runs very efficiently on normal x86's and sparc's, so you shouldn't worry too much about that.
All I have to say is, I'm not taking my stupid AP compsci class if I have to do it in java. Why... I get all jumpy after 2 cups of regular coffee. A year's worth of java would turn me into a nervous wreck, in so many ways. ;)
Well, it's your loss. I think java is one of the most suitable computer languages for basic educational purposes.
But AP is Advanced Placement, it is supposed to test the students mastery of college level topics, not vocational skills.
Spencer Ogden
If you want to run java progs on Linux, you have to get the software from java.sun.com. It's command lined based, but it works. The package you get frm sun comes with an IDE, but that wouldn't work on a 486, so you would end up using EMACS or VIM syntax is as follows #javac myfirstclass.java secondclass.java where myfirstclass.java contains main to run the program #java myfirstclass note that there it is not #java myfirstclass.class hope this helps, tw
Eat a Rock!
Other languages have their place in the world for various reasons and by far I am not claiming Java as the best language for every real world situation. However, for education and testing, Java is an ideal started language. My CS program started us in Pascal. Pascal is a great learning language also but is very different than Java or C++, and therefore I think it less beneficial to the student for a real world job they may obtain in the future.
But I shouldn't expect the script masters of slashdot to understand this... Maybe the true OO developers will...
What in the hell is your point here?
I/O Error G-17: Aborting Installation
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)
Also see the Largon file entry for syntactic sugar.
And slashdot posters are hardly anti-java. For the most part I believe that Ive noticed more pro java sentiment than not. That also goes for the Free programming comunity as a whole.
and btw C++ is not that bad, really now.
I learned Java in First year Comp Sci at U of Toronto, that was back in 1997.
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) 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.
Ñ'
Since the school year started there has been a lot of griping and bitching on the APCS listserv about how wrong it is to change. Many of the complaints from the teachers were things like:
- I just learned C++ -- now I gotta go learn Java?
- AP can't do this unless they wanna a pay for the new software and texts (like Java costs so much more than C++)
- By the time we get all the Java syllabus and course materials together and proofed, some other language will be the horizon. (True.)
- Who cares -- I can retire before then.
Very few teachers objected to Java based on the types philosophical issues being discussed onDon't get me wrong -- I am a high school APCS teacher who teaches 4 or 5 other preps depending on the semester. I can respect that teachers will have to spend some (uncompensated) time and effort. I also acknowledge that compared to many others in CS jobs, most teachers get paid far less. Many teachers are forced to spend so much time with paperwork, meetings, and committees that finding time to keep up with changes is hard.
Personally, I don't think that Java is any worse than C++ for the purpose of learning basic concepts and algorithms, but I don't necessarily think it is significantly better either. My biggest problem with the switch is that the unfortunate students who take APCS in 2003-2004 may be dealing with a lot of annoyed, disgruntled or inexperienced teachers. In the short term it will make it even harder for schools to find qualified people to teach AP.
Of the teachers who thought the change was a good idea, many of them already knew some Java. They may be right, but I wish that as a group teachers would spend more time discussing how to deal with the change, not just how it will affect them personally.
I guess I'm agreeing with posts that wonder why we have to specify a language at all. The only good answer I can come up with for that is: arbitrarily picking a language makes the test easier to write and easier to grade. And the APCS being a for-profit part of the ETS, I'm sure that cost efficiency is a factor in the decision.
Before anyone replies that ETS just does what the teachers on the commitee recommend, try convincing ETS to allow the students to pick which language at the time of the test. Hmm... I could teach kids Commodore Basic or 6502 assembler. Let those test readers try to decipher 10 X=PEEK 59468:POKE 59468,(X XOR 2)
As far as teaching engineering/problem solving instead of coding, I know that kids will groan out loud if I tell them they will be learning about concepts and algorithms, without much application to real programs.
How about a list of three languages that local teachers and students can choose from?
Like so much in education -- I guess teachers and students will just have to do the best they can with mandates imposed upon them.
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 =-)
Doh!
I for one think this is great for a number of reasons not the least of which is the fact that java is easy and HS students who may have been scared away from CS due to c/c++, will instead see relatively simple straight forward java.
I know the general slashdot sentiment will be "java sucks", "java's too slow', "VM's suck", etc, etc...
Even the largest java bigot has to admit that java developement is very fast and there fore could/will provide a very powerful learning tool.
You got robbed. When I took the AP course (1994, in Pascal) we did:
* primative data types and records
* procedures
* recursion
* loops (while, repeat, for)
* flow control (if, if/else)
* arrays
* pointers
* data strucutres (linked list, stack, que, binary tree)
*algorithms (travesel/insertion/deletion to all data types above, binary sort, merge sort, bubble sort, hashing)
* optimization (ram vs cpu vs complexity, vs programmers time, time complexity (big-O only))
basic software engineering (commenting, code reuse, library desgin and group coding (class had to desgin an interface, and have teams implement componets and then put them together))
* error handling (the test data would alawys crash programs that did validate their input)
I thought it was a pretty good intro course. It was a better foundation then I've seen most people get out of their first year of college...
++ Say to Elrond "Hello.".
Elrond says "No.". Elrond gives you some lunch.
It's useless to debate Java vs. C++. Let the students learn both and many other useful languages. Unless someone invented a way to write a kernel or device drivers in Java itself or someone wrote a cross-platform C++ runtime for a browser, at some point they will need to know both. Anyone who thinks C++ is dead is being downright silly... ever try writing a 3D game or an OS in Java? At the same time, Java is the right tool for the job in a number of cases where a cross-platform client will save time and development costs. They should continue teaching C also... people say C is not used any more, but look at GTK- or the MS Windows PSDK (yes, you can write GUI aps in C without C++).
"As flies to the wanton boys are we to the gods; they kill us for sport." - William Shakespeare, King Lear
>There are static methods and variables [in Java] which do not belong to a particular object, either.
Smalltalk has those, too: they're called class or factory methods.
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.
Smalltalk is simple and consistant. This makes it good for teaching, among other things. Java is complex and arbitrary (but not as bad as C++, hardly a ringing endorsement).
However, Python might be even better as an early learning language, because the learning curve seems more gradual than Smalltalk. Smalltalk's openess encourages rumaginging around in the source code, examining how things are implemented, and tweaking the system. This is great power, once you get used to it, but can be overwhelming for someone starting out.
The university of victoria (a real university) has been using java as its teaching language for comp sci students for a few years now. It may have bad performance etc., but it's still a good language to teach the fundamentals of programming.
--------
Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...
. . . unless that language is Ruby :-)
Seriously, I'd certainly agree that you need to use the right tool for the job, but it is important to consider the fact that some tools are a lot more useful than others!
-----
I've never even heard of a high school that teaches Java. Only BASIC and C were at mine.
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.)
C++ seems a fine language to do it in. We spent about half, if not more, of our time off the computers, just thinking about concepts. We wern't allowed to actually program anything until we had the whole basic concept layed out on paper, with what functions we would have, their basic gists, and the like. Once we had that all done out, we could actually code the thing.
In that way I'm not sure how significant the switch is. The point of the course is to change how you think, and to introduce the basic programming concepts. They're all pretty language-neutral. This applies for the average kids. However, I think that switching to Java will be a detriment to the advanced kids. They are the ones who will score the 5s, and they are the ones who would like to use their coding skills outside of the class. With Java, you can't really do that. Not to bring in my opinion, but Java sucks. C++ is wildly used and recognized, and it does the job needed fine. For my two cents, they should be keeping C++.
Dan.
"Claim everything, concede nothing, and when convicted - alledge fraud"
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.
WARNING: there is a trojan on your
... what's that one language that tries to break all the rules? ...
Intercal
Molog
So Linus, what are we doing tonight?
So Linus, what are we going to do tonight?
The same thing we do every night Tux. Try to take over the world!
---BEGIN SARCASTIC RANT--- I fluently know perl, c, sh, and can probably explain to them more about the inner workings of a computer than than can understand, yet i fail the exam because i never bothered to take a class in java. Yep, sounds _very_ fair to me. ---END SARCASTIC RANT---
I am !amused.
I'd have to say that the best teachers I've ever had don't care about the money - they'd work for $1 a year. My CS teacher in high school (also taught me calc) was the best teacher I've ever had. Even though he was teaching to three levels of CS kids at once (Intro [Pascal] / Basic [C++] / Data Structures [C++]), I learned so much from him. He would stay and work with students as late as possible, and he taught himself C++, then Data Structures when kids were demanding a more advanced courses. He could be a researcher or a professor, but instead he's doing what he loves, teaching high school students. A good programmer does NOT make a good teacher.
We didn't do AP. We do The University of Pittsburgh College in High School Program. It's much more effective, multiple tests and mastery programs are assigned over the year, rather than a one shot deal like the AP test. You end up with actual Pitt college credit, not a goofy AP score. [the Data Structures course at my old high school isn't supported by Pitt]
Carnegie Mellon took my Pitt credits just like they take AP scores, to get out of 15-111/15-112 - I placed into 15-113. (Currently introductory CS courses are taught in C++)
Raise your hand if you've ever heard of the University of Victoria. Just as I suspected... NOT a real university.
<high-level position here>
<name of stupid small company here>
>we eliminated C++, COBOL, and a few other
.cpp and .h. With Java, you can often do so only by subclassing. Compiling stuffs into a .class doesn't count.
>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.
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.
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?
I'm left wondering whether Java will still be a smart choice 4 or 5 years down the line. What if, all the sudden, C# takes over Java's place, or some crazy other language. And are they going to teach Micro$oft's Java or Sun's Java? Java Swings, JavaScript, JavaBeans, what? I admit I know little about the language, but I am familiar white quite a few others, and could easily make a better case for others.
"`Ford, you're turning into a penguin. Stop it.'" -Douglas Adams, THHGTTG
It is slower than my damn 90 year old grandmother thats why we hate it. I dont give a damn what stupid benchmark you recite it is still slow as shit.
Got Code?
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
-Stype
Bus error -- driver executed.
If you intreview for a C position at my company I will laugh at you.
2 years and no mod points. Join reddit. Because openness is good.
My high school had no programming or computer classes. Zip, nada, zero. Granted it was the dark ages; I graduated in 86'.
"I don't think it's selfish, to eat defenseless shellfish." -NOFX
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.
That's exactly my point, you fool. They aren't in the cirriculum! They're a huge part of C++ and yet they aren't even mentioned in the course. Apparently by knowing what the basics of OO programing are, I'm trying to make myself sound smart. Believe me, if I were trying to make myself look smart I wouldn't mention that I know the basics of a topic which 90% of the people here can talk volumes on. Thank you for missing the entire point and generally being an ass. js.skulski
--
minusthink [Code poet or super hero? (you decide)]
"when life gets complicated, I like to take a nap in a tree and wait for dinner" - Hobbes.
Having taken the test (no preparation, by the way. I had no clue what the questions would be like), it seemed to me that all the test was really testing was the test-taker's ability to follow directions. Some of the classes they used for the problem were just begging a rewrite (especially that class for storing arbitrary precision numbers. Ick!). While it tested some simple knowledge, most of the rest of it was simply, "Implement this! Now, implement this!". They didn't even ask the test-taker to develop any kind of algorithm. It was all simple translations of algorithms into code. Didn't seem like much of a test to me...
Aaron
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.
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.
3rd worst Shaft on campus is the CS department, right after Housing and Parking/Transportation.
--
Dyolf Knip
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.
--
-- Geof F. Morris
Why is it that everyone seems to love Java? Why am I the only one who thinks it's a crufty, hacked-together language that's only good for marketing? From a language-design standpoint, Python is a much more well-constructed language than Java, and it uses bytescodes and interpretation exactly the same way. Why on earth do you need strong typing when you're programming in an interpreted language? Makes no sense to me... </rant>
Aaron
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.
-no broken link
you don't get very big speed improvements by compiling java natively, and you have to emulate all the dynamic class loading, reflection and introspection (really cool stuff) gc, etc.. i've seen benchmarks recently and with the new jvm (hotspot), performance are much better than ever. not much behind c++ performance
but it's true that gui apps in java are really slow. i think it's because of the lightweight components that draw themselves, they don't use any of the os widget (except the frame) so they don't benefit from acceleration, and there's double buffering, etc.. i'm not really familliar with these topics and i don't care since i'm doing server side programming with java.
from the comments i read on slashdot, i guess that most of the posters are still in college. and i was in college i only swear by c and c++, asm, etc. but then you get a job in a large company, do some code maintenance.. oh there's a bug in that C++ app on hp-ux, talking with another class on solaris via corba.. so you look up the code to get any hint, hmm ok, it's in that method.. but the pointer, should i delete it? maybe not, etc.. so let's say you find the bug. now you gotta compile that huge app you don't know anything about. and then you can speend weeks on learning that stupid hp-ux linker, etc..
it's sad but there's a lot of shitty programmer. and shitty un-profressional consultants, etc..
at least with java, server side coding is a easy, clean, and portable accross any j2ee vendor. and the language is clean enough so you can pick up java code more easily than c++.
in fact, java is so good in those domain that even microsoft acknowledge it by ripping the ideas for ".net"
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 =:-)
---
Play Six Pack Man. I
...I personally don't think it really matters. The class I'm taking is pretty much a joke. I'm probably the only student in the class who's actually going to take the AP Exam, and that's only because I already *knew* C++ going into the class. In fact, the only reason the class is even coming close to learning anything now is because I told the teacher that it might be a good idea to use an online tutorial for the class, rather than his random Visual C++ sample progs. In general, from what I've seen, the test is designed to be pretty passable to anyone with basic programming/logic skills and has spent at least a week involved with that particular language. I doubt the move to Java will have any real effect, although it might make it a little easier on some of the students.
thats why i like java and jsps. a well defined standard, plus tons of utility built-in to the thing. It's alot of typing, but it makes you work out the details and is an invaluable learning experience (unlike ASP which does about everything for you)
-
FWIW, classes are objects in Java, as well.
L'enfers c'est les autres!
2 years and no mod points. Join reddit. Because openness is good.
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.
It's 10 PM. Do you know if you're un-American?
Yes, but you're confusing language design principles with basic OO concepts...
...Smalltalk offers a mechanism for implementing factory methods...
...") that makes it easy for student to get lost in implementation details and miss the point. There are languages (like Smalltalk and Python) that were designed with this in mind.
Smalltalkers don't consider "static" to be a basic OO concept. It appears to be an implementation artifact of the languages used in your OO literature.
Of course. A "factory method" in Smalltalk is implemented exactly like any other method. Why should it be otherwise?
Smalltalk is OO, but works very well without the "static" concept. Why is it necessary in Java? Does it make something possible that could not be done in Smalltalk? Does whatever it adds offset the additional complexity of the language?
My point is, a simpler (but equally powerful) language would be better for teaching. Java has a lot of seemingly superfluous cruft ("public static final
Doesn't the current AP CS test, which is on C++, already cover OO? I have no experience with it (I took the Pascal version in 1996), but it seems from the AP CS course description on the College Board website that OO is already very much a part of the course... Does someone who has taken the C++ version want to comment?
Besides, how can you teach C++ without teaching OO? That's just C (well, plus iostream, default parameter values, const, ...).
You're probably right; they won't want the kids using just java and javac. I find this ironic:
They're trying to teach kids Object Oriented programming and yet are reluctant to have them use commandline interface. It just seems odd, that's all.
minusthink.
--
minusthink [Code poet or super hero? (you decide)]
"when life gets complicated, I like to take a nap in a tree and wait for dinner" - Hobbes.
Not everyone *wants* to learn java, there are alot better languages that they could teach OO in. I personally wouldn't like to learn java, i think that they could do a resonable course in C++ - what does everyone think the test should be in... Poll Time!
I think that the biggest problem everyone is missing is now the teachers have to be re-educated. Now some might say that is their job. I know for one ( I took APCS last year ) that some teachers really don't even know C++ and making them learn java is kinda a joke. My teacher barely knew the language, just the concepts, and even now I go in a debug programs because I know the language better than him.
I took pascal as my intro to comp sci class, same deal there. My teacher was part of the math department. He is the only calculus teacher in the school because our other one left. No way he could learn java and be able to teach it.
The programming teacher (teachs dataprocessing C, VB) could learn the java but would have trouble teaching the sorting concepts and such non such. Though I'd have liked to have him (I am his student aid) he does not use paper, all assignemnts are in docs online and all.
You might say it is time to get a new CS teacher. Fine. You teach it. We are struggling to get teachers as it is. No one wants to teach HS anyway cause salaries are low and with the lucritive contracts that geeks and programmers can get, it is a big surprise that we don't have any of you teaching us.
the APCS will have to learn the new langauge, but I don't think switching languages will be the right thing anyway. Oh, and BTW, they have to learn to use the editors too. My teacher had enough trouble with Turbo C, only the people smart enought to use the MS vis c++ editor we are given use it. Turbo is quirky. The teacher doesn't even know how to use Vis C++, the college board expects him to teach idiots how to use the editor AND the language (the idiots I am talking about ahve trouble understanding that function prototypes have to be the same as the declaration. No matter how many tiems yous how and tell them.) Anyway back to my point. The Vis J++ editor is dumb, and if you think the high schools run unix in any way shape or form, for teaching at leist, you are wrong. The people in my networking class knew more Unix than our head Bald Computer Guy.
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 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. 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.
Michael D. Crawford
GoingWare Inc
-- Could you use my software consulting serv
to help clarify:
etc.worth looking at just to see what they'll be looking for
"It is a greater offense to steal men's labor, than their clothes"
I took AP CS in 2000.
Nope.
--harlan
Not just because Stroustrup says so. If I were your teacher, I'd rap your knuckles with a ruler, too.
I'm a member of an architecture committee that both buys and develops enterprise-class software systems for one of the twenty busiest sites on the Web.
It's very frustrating to be forced to build a system that we would be willing to pay millions of dollars for because the commercial products were based on "old C-style" code that causes all kinds of problems when anyone tries to upgrade it or integrate it with other, more modern, systems.
Fixed-length arrays are a primitive approach that should be reserved for those rare cases where optimization at that level is called for. When such optimization is performed, the work involved is not the only cost. C-style arrays and const char* strings are probably responsible for more bugs, security holes, and code brittleness than any other programming technique I can think of. Intentionally using such approaches in a serious project when not forced to reflects a lack of professional maturity on the part of the architects of the project.
I would hope that an AP CS class would teach the modern professional approach as the general approach and teach the other later, when the students are prepared to appreciate how much you lose in exchange for some additional speed.
"Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
Turning out a bunch of high level programs that don't know squat about what is under the hood. This of course has it's exceptions (and the type of people I like to hire:).
Even in C/C++ it's been pitiful... ask a potential employee to do a quick implementation of strchr and they obviously know nothing about a char*.
Oh well... it makes my expertise worth more $$$$$$ so I guess on the other hand I can say thank you to all those people in education teaching "programmers" to mindlessly use packages and objects. Having no capability to understand or implement them.
Brian Macy
Many universities are using java as an introductory 100 level course in their CS/IS programs. Although java may not be the best choice for developing high speed production applications, I feel it is a good tool for high school students to understand the concepts of OO programming. The AP program is aimed at giving high school students the knowledge they may aquire during their first semester at a university. If students can pass the AP test then I think that they are ready to move on to bigger and better things in the university programs. They will leave high school with a knowledge of java, possibly move into other languages throughout college, and then finally move into the job force with various tools to help them succeed. I think that java in high school is not such a bad thing. But, tell me what you think.
Java is very good for cross-platform computing but under testing circumstances I think a faster and more operating system specific program would be a better choice. Java is also not generally only used with web-browsers which would make cheating much easier, giving students access to other parts of the operating system which could help students on parts of the test.
"The secret of success is to know something nobody else knows." -Aristotle Onassis
--
send all spam to theotherwhitemeat@ropine.com
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
I took the AB test and I had no knowledge of classes or really anything to do with OO programming when I got to the test. My first course in college was taught in Java and that was where I got my first real introduction to classes.
My case study was also BigInt (1999 test), but knowledge of classes was hardly necessary for the test. I hadn't even *looked* at any of the material on BigInt until 15 minutes before the test, and I can assure you I was freaking out when I saw how long the packet was. However, the test pandered to the uninformed, such as myself, and only asked 2 or 3 multiple choice questions on the case study (both very intuitive). The free response questions were even more pathetic. They asked us to add two functions to the class, but neither of them required knowledge of any other element of the class, and they practically layed out in pseudo-code how our functions should work. I got a 4 on that test despite having very limited coding experience and a class which was less than useless (I took the course as independent study at the same time my teacher had a BASIC class filled with uninterested freshman).
The rest of the test just involved generic programming concepts like recursion and how to manipulate stacks and queues, but nothing involving actually implementing our own data structures. I self-taught myself all of that stuff (not like it was that complicated, especially with the header files they provide). I haven't found a language yet that's as easy to teach OO concepts in, so hopefully the College Board will step up the difficulty of the AP test so teachers will actually take advantage of the ease of Java to teach some of these important topics.
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 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 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.
Michael D. Crawford
GoingWare Inc
-- Could you use my software consulting serv
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).
http://rareformnewmedia.com/
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.
Yeah, I think that presenting hard-core CS and using something like Scheme for people who just need an operational knowledge of computers and computer programming (like business majors) is probably a mistake. It's a little like teaching people mechanical engineering when they were expecting Driver's Ed. Too bad the course guide and/or syllabus were not clearer up front about who the class is really for -- sounds like your brother (I'm assuming he's a computer guy rather than one of the business majors) should have some fun. I *do* think this is the right way to go for people who are seriously considering a CS degree or perhaps something related like EE.
"Biped! Good cranial development. Evidently considerable human ancestry."
>But to say C supports inheritance is too much of
>a stretch
One way, although incomplete, is inheritance through delegation. Using "has-a" relationship to similate "is-a" relationship.
>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
In Java I can take your class and read through its inside too. See. Even if you cannot programmatically access the inside of a class, if you let others *read* the class content, non-functional dependencies can be introduced. (e.g. assumption of time complexity)
I maintain, that OO is language-independent. You could be right. But there are two schools of views and no superior one yet.
it still is on paper. You don't get a debugger. It's no different now.
The only difference is what language the material is tested in. For me (took it this past year) it was in c++ and I must profess, while c++ has allowed me to work on unix project lately, I wish I knew java more because it seems java is more universal, what with VM. Anyway, I got off subject for this responce, but for all those saying it should be tested in pseudo code, I thinks that is just silly. We got the time...we might as well learn a language where you can compile programs and see them work. I think the biggest turn off of all would be to take a class is conceptual programming. Learning how to write algorithms that may or may not work and you don't know cause you can't test them.
Programming language choice is most colleges and universities is a attempt to mix teachability with the appearance of industrial relevance. (Note I say appearance because in most cases, the whole industrial relevance thing is a bugaboo of students. The educators know that whatever they teach, the students will, in all likelihood, eventually use a different language. However, students (and some administrators) tend to freak if they are learning a language they've never heard of.)
Unfortunately, until recently, the only language that passed the "appearance of industrial relevance" test was C++, perhaps the world's worst language for teaching (not counting BASIC). Educators realized this, but couldn't do much about it. One educator put is succinctly.
Our anecdotal evidence of the teachability of C++ was that a few years ago, our company attended the SIG-CSE (Computer Science Education) conference with a few hundred "C++ Sucks!" buttons, figuring a few educators might be unhappy with the language. (Our company does not provide C++ teaching materials because we feel that pedagogically, C++ is unsound.) Anyway, two hours after the conference began, we had to phone home to have the remainder of the buttons expressed to us. We gave away some 600 in about 8 hours of booth time :-). (Admittedly, we didn't make any converts to our language, but it sure gave a reflection of general sentiment about C++.)
Anyway, with the advent of Java, educators finally had a choice. It's not perfect (they had to keep with a C-like syntax (and those damn semi-colons) for marketing reasons), but it's got most of the features that allows educators to focus on concepts rather than language idiosynchrasies. (Safe pointers, array bounds checking and for heaven sakes, real booleans...). Even we, teachability bigots that we are, felt that we could support Java in education in good concience. And, most important of all, there are stacks of trade books and magazine articles about Java that most students equate with industrial relevance. When we surveyed American universities and colleges a few years ago, we found that even institutions that had just switched to C++ were considering switching to Java (and I can tell you, there's usually at least five years of recovery to bury the bodies and rebuild the facilities after a language switch war :-).)
Java use in CS1 and CS2 may never be as ubiquitous as Pascal was 10/15 years ago, but it may well be close (unless the next hot language is even more teachable).
Since AP is meant to replace introductory computer science courses, it only makes sense for AP to use the language it's replacing. This despite the fact that, as many have pointed out, most high school teachers do not have the background or the professional support that will make learning a new language easy. It's a major undertaking that will force a burden on computer science teachers for which there is no equivalent in other subjects. (Sort of like being told that your language in the workplace is switching to French in two years, so get started learning...) Sadly, if history is any guide, most states will not provide any form of professional development to teachers. I'd ask those who choose to disparage teacher's abilities whether they'd be willing to make teaching their career. It's funny how few are willing to take a 50-75% pay cut :-).
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.
++ Say to Elrond "Hello.".
Elrond says "No.". Elrond gives you some lunch.
I worry this move by the APCS committee to use an even more recent language will further limit the pool of capable instructors. In the end, something's gotta go. For all the opportunity for higher education the AP board provides, it'll only be as good as the teachers found to teach it.
--------
--------
Madrox
My brother is actually a SANS (systems analsysis I think) major. He ended up at his preppie liberal arts school since they offered to pay him to go there. This was before he realized that they didn't have a CS program. Whoops. ;)
Anyway, he's making the best of what's available and double majoring in math and SANS, and should be finishing his fourth and final year next year. He's taking the intro to programming class just to see what Scheme is like, and also since he likes the prof.
It's a threat because, by running applications off a web server, you don't have the binary to an application and so the GNU General Public License's requirement that the publisher distribute source does not apply.
This doesn't apply just to .NET but to all server-based computing. I'm particularly concerned with .NET because it threatens to make server-based applications commonplace.
I guess with .NET you'll download some client-side software, but it won't be able to run without the server side software, to which you won't be able to obtain source - even if the source was originally written for a Free Software project and licensed with the GPL.
Please read my article The Web is the Ultimate Copy Protection on Advogato.
And yes, the folks who replied to the article had some very good points about how copyright does not appear to hold any hope of solving this problem, even with my proposed revision of the GPL (which RMS says he's been considering).
It's a sticky problem and a potentially disastrous one, not just for free software but for all computer users because of the losses they will face as application service providers go out of business or change focus from time to time, taking their applications and source code with them.
Michael D. Crawford
GoingWare Inc
-- Could you use my software consulting serv
I'm a 3rd year student at the University of Saskatchewan, in Canada. For 3 years, the first year classes have been in Java, and I see no big deal at all (true, the JVM is a bit slow, but given all the work it has to do, I can't see it getting much faster).
:-)
I took QBasic and Pascal in my high school CS classes in Saskatoon, SK, Canada. Those were a waste of time as I saw it, so I took it upon myself to teach myself a bit of C/C++ before entering University. I had never seen Java before my 1st year, and being that I knew about C++, it truly was a cinch. Java (as a language) is just C++ without the operator overloading, pointer logic, and a slight bit of different structure to class description. Its really a simple language, and I can easily see why it was the 1st year language, especially since most people entering the CS program at the U of S have little/absolutely no previous programming experience.
As a review, here's the language/class breakdown at the U of S as I have taken it (through the software engineering option, this may vary if you take different classes):
1st year: Java
2nd year: Eiffel, Prolog, and MIPS Assembler
3rd year: Java for the first software engineering class (there are two next term I haven't taken yet), C/C++, Prolog, plus the introduction of the OpenGL and Renderman APIs.
As a nice little side note, a few years back a grad student at the U of S devoloped a new 3d-rendering engine/language as his grad project, named it Renderman, then sold it to Disney, founded Pixar, and created Toy Story.
- Brent 'Goose' Towsley -
--
you take the ap test after completing the corresponding ap class... so you would have had a years worth of exposure to java at at that point. the class would have been taught to you based on guidelines set by the college board... so if you fail it would be your own fault.
use LaTeX? want an online reference manager that
-- john
Using Java (or any other similar language) has a "good" side and a "bad" side.
GOOD: this means that students will code at OO and "business level" to solve a "business" problem.
BAD: this means that you won't known much what is happening "under the hood"
If you are familiar with Kanuth's books and the language that he uses, I preface to see Kanuth's language extended to use OO. This way you cover all grounds.
-- George
Karma stuck at 50? Add 2-5 inches.. err.. 2-5x Karmas Count to your pen1es.. err.. Karma all naturally and private
Is java. They're not changing their curriculum to teach java, it's just the delivery platform. Read the release before you respond!
*everything* is Orwellian to cats.
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 (PDF format) which you'll find on his papers page.
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.
Michael D. Crawford
GoingWare Inc
-- Could you use my software consulting serv
Let me tell you why this isn't important. My junior year of high school, I decided to take AP Computer Science. That year they had just switched from Pascal to C++. Let me say, I was much less then satisfied with the course. While most AP's are rigorous, demanding, and require a full year of preparation, this simply did not. The exam was a complete joke. I took almost nothing away from the course, having put a sum total of about 20-30 hours in preparation (over the entire semester). I got a 4/5 on the exam. My friend, a bit more experienced in comp sci easily pulled a 5. Did I mention I learned nothing from that class? This year I took the intro to OOP class at my school, Brown. This was a very rigourous course which at times required 20-30 hours a week. I can comfortably say I know java now. I have started to pursue all the other major programming languages on my own. Why is this important? The AP program is supposed to award college credit for classes in high school. I don't think that the computer science program compares at all to college CS programs. You can learn more from a java in 21 then you can in the typical high school classroom. Until high schools start to take computer science in general more seriously, it doesn't matter what language they teach it in. CS concepts (save for OOP) do not change. I do think however, it is wise to teach OOP in java because it is much less complicated then in C++. It's nice to see the college board keeping up with the times, but unless schools can change the public mindset about CS in general it will be of little import.
I'm disappointed when I see compsci students who dont even know about the file system heirachy, or how a process is invoked. (Probably has to do with being spoilt by the GUI) I say you just cannot program without knowing those.
"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!
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:
--
send all spam to theotherwhitemeat@ropine.com
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.
Friends don't let friends use multiple inheritance.
Comment removed based on user account deletion
Obviously this report is wrong
I DISTINCTLY remember reading reports a year or so ago about Java dying out by 1999. I remember. I won't accept this because it isn't real. You people can bathe in ignorance allll you want, but it won't make it any more real.
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...
They do that so you can do stuff like the following:
SomeObject so = (SomeObject) stack.push(new SomeObject());
((SomeObject)stack.push(so)).someMethod();
Exactly how useful that is aside, that's the reasoning.
You are in a maze of twisty little relative jumps, all alike.
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
Kevin Fox
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.
I'm also an AP Comp Sci student. I had no programming experience whatsoever beyond scripting - HTML and JS, for crying out loud, although I'm rather good at that, and making forays into XML dev at the moment - anyway, and that's the ambient level of pre-OOP experience in the class. At BEST. A semester into the class, I'm pretty irritated with it. A fellow APeon wrote below that we're basically learning someone else's code, not any sort of developmental process, from using proprietary library files (such as the notorious AP*****.h breed) to adopting flatly ridiculous programming "terms." Classic example of College Board text writers on crack: in the first chapter on the syntax and application of functions, my particular text has the audacity to refer to the "main" function as a "driver." I thought the difference between a right and proper hardware driver, and a function that calls others, would be within the grasp of an adroit two-year-old. Pathetic, is it not?
I can't speak for all APCS texts here, but my text is very poorly organized and advocates Hello-Worldish "programming" over organized, logical development and education in all the key principles thereof. If you're using "Introduction to Computer Science with C++" by Kenneth Lambert, et al, caveat emptor! I picked up my boyfriend's ANSI C book, and in ten minutes, acquired a better idea of C/C++ structure and flow than in a semester of antiseptic labors.
Most of the class seems to think they'll emerge as l337 h4x0rs at the end of May. I am quite interested in a Java-based APCS; that's where I intend to go from here. But they could pick COBOL for all I care, if only the College Board would reevaluate the way the language and theory are taught.
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
Kevin Fox
Why shouldn't the AP exam be in java? It's an exam
for college credit, and guess what, many colleges
are switching to Java. Most of the core CS
classes at IU are in Java, and thank goodness.
Unlike Scheme/LISP, Java has an intuitive,
C-like structure and teaches good programming
practices like encapsulation. An education in
Java means that students'll actually understand how
to use OOP in C++, which is what they'll probably
find in the workplace, plus they'll have the power of the Java API to get them started.
Like the from-dept line reads, why not Lisp? I'm learning scheme in the STK environment right now, and find the language terribly tough at times, but also very easy to use as a way for thinking about programming in both a top-down and bottom-up way. The early functional approach to programming has been good for me; my object-oriented programming pals say that they wish they started this way, because it is a good base. There may be dissenters, but Java is a fairly powerful and complicated language.
At least with a variant of Lisp, there aren't as many things to confuse the programmer as he/she is just picking up the theory behind it all. My next college course is taught using Java. The language isn't the only thing important to explaining concepts, but a simple, generally functional language (yes, Lisp can use message passing, for those unfamiliar) might help students transition into computer theory best. Of course, we're talking about AP exams here. As long as the spec includes learning about methods of thinking about efficient and accurate program design, that is what counts.
I'm quite glad about their decision to switch to a platform independent language.
Although C++ (which is what the tests are currently over) is much more widely used, it raises some sticky platform dependency issues. These issues often lead to problems on AP/UIL tests where you have to choose a multiple choice response. In order to deal with these problems the AP board has to decide upon a standard and then all the students taking the test have to learn and memorize this arbitrary standard.
However the most important result of this decision is no more APString!
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.
One of the great things about learning C++ as a first language is that it's a great way to compare procedural and object oriented programming. Both are tools used in different situations, and C++ handles both nicely.
As a current high school student, and one who will probably be taking AP compsci sometime in the next few years, I would just like to voice my concern. Is Java really the language of the future? Is it that much better than C++? Isn't C++ more widespread than java anyway? Maybe they're trying to standardize Java like C++...
;)
Isn't this a bad thing? Sun is still having trouble getting java running efficiently on their own specialized hardware...
All I have to say is, I'm not taking my stupid AP compsci class if I have to do it in java. Why... I get all jumpy after 2 cups of regular coffee. A year's worth of java would turn me into a nervous wreck, in so many ways.
---
While everyone is on the subject of introductory languages...
In my opinion, Perl would be a great language to teach begining comp sci students, as nearly all first level programming concepts can be taught with it. In addition, the hasssles associated with compiling code in the begining are avoided. I can remember my first Comp Sci course in C, half the class couldn't even get their compilers working right.
Granted, this was probably due to a sub-par prof (and sub-par students), but getting the programming/problem solving mindset into a student is the main goal, and the more unecessary things you can cut away, the better.
I cringe, however, at Perl-only programmers learning about C strings!
---
Ben Garvey
Ben Garvey
"Life is too short to get on the good rides"
So? The point of CS is to teach you concepts like algorithms and data structures, not to teach you a specific tool or programming language. If you can't see how the concepts apply across all languages, and if you're incapable of picking up a new language without four months of hand-holding, get the hell out of Comp Sci. Here at the University of Alberta, courses are taught in the language most suited to their concepts, and if you can't adapt to a new language you're fucked. After you've learned a couple of programming languages you realize they all can use exactly the same concepts, with only marginal variations in notation, especially between languages as similar as c++ and java.
I do not love java. And yes.
And, it wasn't developed by a self-avowed Pedophile, the way Java was. In all seriousness, Java's association with pedophilia makes it unsuitable for high school classroom use.
Well, it would help to slow their demise perhaps, just to respond to the stupidity of your comment.
My point was that languages like C or C++ cannot be "eliminated" like the starter of the thread would apparently like to see. I replied with examples of why this would be stupid -- when speed is an issue, you just have to use a language like C or C++ (what is the Java interpreter written in again?).
I don't advocate any language.
I/O Error G-17: Aborting Installation
My code's not in Java.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
What's important is the knowledge of the concepts, which transfers nicely to any language you use (even COBOL). Also, it is important to learn a few languages, so you can be in a position to pick the right language for the job. I wouldn't dream of using C for a web site, nor would I use PERL for an operating system.
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.
I think that's the point. Who wants to learn about the fundamentals of programming in an AP class? That stands for advanced placement. I don't know about you, but I'd rather be learning advanced stuff in my AP class.
---
I don't know why this is (no direct experience), but it's troubling. Does anyone else have similar experiences?
Greg
It is a good thing my High School doesn't offer programming classes or we would be screwed :)
--------
--------
It's OK to be social, just don't tell anyone about it.
I don't like this a bit. This makes it sound as if Java is "the" langue for OO and everything else has to do with programming - a very bad message to send. The fact is, each problem has its own needs and langue to be used.
If you are familiar with Knuth's books, than you must be familiar with his customized programming language (sorry I don't remember its name off the top of my head.) I prefer the use of such language (maybe extend on Knuth's) to cover OO.
-- George
Karma stuck at 50? Add 2-5 inches.. err.. 2-5x Karmas Count to your pen1es.. err.. Karma all naturally and private
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.
The net will not be what we demand, but what we make it. Build it well.
My AP Exam taught me everything I ever needed to know about Programming. It was in Pascal and had questions about The Large Integer Case Study. No questions about pointers, linked lists, queues, stacks or any other abstract datatype were on the test. Why do you need those????
Well, that would be a good comment, but... the AP tests are for high school students.
And for everyone complaining about the speed of Java, remember the tests are done with paper & pencil.
I'd also like to add Washington University to the list of schools that teaches Java
Kurdt
Kurdt
I'm not anti-social. Just pro-technology.
This reminds me of what happened at my high school. When I took AP computer science (1994), it was in Pascal. When the the switch to C++ was annouced, my teacher complained about having to learn a new langauge. He started to do it, but never really had the free time or the interst in learning it. So now my old high doesn't have AP computer science. It has computer science taught in Pascal.
This will just reduce the number of schools offering AP computer science.
I took this test in the 1998-1999 school year (AB to be precise). The test was in C++ and it was definitely object oriented. Half of the test revolved around various classes, especially a study about arbitrary length integers implemented as a new class.
Also, Java has a few oddities that I think may make it worse than C++ and possibly encourage sloppiness among the students. This is of course the biased view of me, but it's not worth getting into a language war anyway.
Bottom line, the test already is object oriented.
Q:Doctor, how many autopsies have you performed on dead people?
A:All my autopsies have been performed on dead peop
Honestly, I don't know what the world is coming to these days. OOP is easy in brainf*ck.
"Any connection between your reality and mine is purely coincidental." -Slashdot
The funny thing is that only three years ago they changed from Pascal to C++. I feel really sorry for all the Computer Science who will have to once again change their curriculums to reflect the new test, and convince administrators to spend the money for new IDEs and compilers.
Freedom's just another word for nothing left to lose
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'm always right.
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!
The List of Grievances with Slashdot.
My brother was telling me about he's taking next quarter, an Intro to Programming class that is going to be taught in Scheme. It's an honors class and something the prof is trying out.
I was thinking that the concept was pretty cool, but that the students who take the class were not getting what they expected. My understanding was that the class is mainly freshman, and taken by a lot of business majors. Granted the syllabus did say Scheme, but how many of the students (at a school know for it's students wearing Abercrombie and Fitch), even honor students, going to realize that Scheme is rather different from C++, Java, or anything else that they might actually use in the real world?
In my opinion, the students who are taking that class would be better off learning C++, Java, or even VB for what they're going to do. I mean, how many business types do you see who really program? I would think having a rudimentary knowledge of VB would at least be useful for them since macro'w will probably be the extent of their programming . . .
Good reason for the switch to Java - you don't have to spend the entire course talking about low level programming concepts - you do object orientation from the start, classes are fundamental from the beginning, and by the end you can program actual applications...
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.
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)]
"when life gets complicated, I like to take a nap in a tree and wait for dinner" - Hobbes.
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.
-------
Vidi, Vici, Veni
The worst thing about this is that almost all of the teachers now have to re-learn a new language. Our teacher had to learn C++, and spent a LOT of time getting it down because he's that kind of great teacher. I can see many other teachers finally getting the hang of C++, and then absolutely sucking at Java. They're who the headache is really for.
Mike Roberto
- GAIM: MicroBerto
Berto
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.
"Biped! Good cranial development. Evidently considerable human ancestry."
-- Anne Marie
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
Go green: turn off your refrigerator.
Everyone seems to be complaining that Java is too "slow" for a good exam. These people have obviously never seen an AP CS exam. The entire exam is on paper. The first half is multiple choice and the second half is free response. At no point in time is a computer used for the exam. The fact that Java code may run slowly (due to it's interpreted nature) will no factor into the exam in any way.
Comment removed based on user account deletion
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.
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.
I remember when they switched from Pascal to C++. It seems like they are switching lanugages every 3 years.
/*
*Not a Sermon, Just a Thought
*/
*Not a Sermon, Just a Thought
*/
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
Being a java coder and having finished the AP comp sci course only a year ago, I feel I can shed some light onto this subject© At first glance, java may seem like a very good choice for teaching Comp Sci AP© The goal of the course is to teach object oriented programming, recursion, and various other language-independent concepts© Java is a finelanguage to do all these things in, so it seems to follow logically that it would be equally suited for teaching them© However, this is not necessarily so© A large portion of the AP test involves pointers© In java, everything is a pointer© Teachers must therefore go out of their way to explain the difference between pointers and regular variables, without being able to show examples in code to the students© Therefore, it seems to me that C++, despite it's often times dangerous nature for begginers, remains the otimal choice for the class©
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 !)
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.
*This* is what /. is all about! Baseless conspiracy theories by a language bigot. First rate work, sir!
I took the AP Computer Science AB test just last year and failed miserably, i think i got a one, but that's OK. It turns out that it really doesn't matter what programming language the test is over because everything in the test is based on propriety libraries developed by the college board for the specific purpose of being tested over. None of it has any real application anywhere else in the world!
I took the first CS class in high school and was prevented from completing the second (I was kicked out around Sept.) but still figured I would at least try to take the test just for the hell of it. It didn't matter if I passed it or not because I figured that since I was going in to Computer Science I would need to take the CS classes in college anyways. Once I saw the test, I knew instantly that I had no chance and a few minutes later turned it in and requested that it not be sent to my university.
But it was basically over what they call the AP Classes, and not class as in a course but class as in Object Oriented. They were developed by the college board, like i said earlier, for the specific purpose of being tested over. There was also a case study that was covered in the test over a big int implementation.
So the point being, the test isn't over the language it's over what they want you to know, so it really doesn't matter what language is taught just so long as something is taught. I personally hate java and think it's a dumb move, but when you think about it, with the current c++ situation the students coming out only know proprietary classes that aren't used anywhere outside of the academic world.
Java is pure beauty, and is rapidly becoming the lingua franca of all languages, so why restrict it to just CompSci??
How much more unambiguous it would be to parse *all* exam questions in Java!
function Discuss()
{
k = new King(Scotland);
m = Macbeth;
if (k != m)
Discuss = Murder(k);
}
writeln(Discuss());
Well, the AP tests are for "advanced placement". Most schools that accept AP credits probably aren't interested in the student's proficiency of any non-mainstream language.
Dave Bremer DipTch, BEd, PGDA(educ), Dip Grad(comp sci), A+, MCP, CNA, and ignorant of AP
As someone previously fluent in C/C++, and who picked up Java in a few CS classes, it took me all of, oh, 2 days to get the hang of it.
Java is so structurally similar to C++, barring a few areas like inheritance, pointers, and garbage collection, that switching from one to another is a snap.
From all the groaning and moaning, you would think they were asking to switch from C++ to BASIC. The old school BASIC.
Note that I'm not comparing implementations of the languages; personally, I think anything other than compiled binaries is heresy. =p Java is a nice language to code in, though.
Light a fire for a man and he'll be warm for a day. Light a man on fire and he'll be warm for the rest of his life.
PS. I'm in Canada
This is completely, utterly, without a doubt the most ignorant statement about java I have ever heard. Java APPLETS (which you are thinking of) is a tiny subset of what java can do. Lest you forget java APPLICATIONS, java SERVLETS, JINI and lord knows what other little systems are embedding a JVM into them.
-
I hope this new java AP program will be better then the current C++ one. Ive been taking it for a semester now and it is fine if you like using other peoples code. #include etc. This is not standard c++ it is the AP version of it and it is wrong to give students a wrong impression of what the programing language is about. Instead of dropping the course i've picked up a regular book and started to read its a lot mroe clear and they actually tell your waht your doing now just saying include this.
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.
AP stands for Advanced Placement, and it's basically a way to take advanced courses in high school and get university credit for them. Typically you take an AP class at the high school (although you don't have to take the class to take the test; I didn't take any classes for the CS AP when I took it) and then in May you pay a fee of around fifty dollars and take the test. They're typically about three hours long, consisting of multiple-choice and free-answer questions, and are offered in a lot of different subjects. They're scored on a scale of 1 to 5, and typically a 3 or above is enough to get credit, though depending on the test and the university it may vary.
Mod down posts with a "Free Mac Mini/iPod" sig, they're spam!
Qualify your statements. I can say that you are the worst posting in the world as well, but without rationale, reason, and specifics, my statement is meaningless. The same applies to your comments about Java and C++.
*THINK* abou things, don't just parrot back what your instructor told you.
This way, they know that Java will still be *around* in 2003. Short of that...let's just say I'm not getting any stock in Sun.
-Waldo
Oh come on, that wasn't a troll, it was a joke! You know funny, ha ha ha...
Here at Cornell U. there is an AP Comp. Sci. test that you can take the first week of class and you can use any language you like. I'm assuming other schools have that too, so it probably isn't that big of a deal for people who don't like Java.
AP CompSci was taught on Apple IIes with UCSD Pascal (1991).
There was no OO concepts involved, but the algorithms and data structures taught still apply today.
Java is a good choice because it is fairly cross-platform, and you don't have to worry much about the quirks of the hardware. You can still do all of the traditional data structures and algorithms, plus the added bonus of learning about objects.
It would be nice to have a dose of traditional structured programming, though.