Slashdot Mirror


First Java AP Computer Science Exam Complete

BlindSpy writes "Yesterday, Tuesday May 4th, high-school students all over the U.S. took the first-ever Advanced Placement Computer Science College Board exam based on Java. The exam is given as an opportunity for high-school students to earn college credit in programming. The test is based on whichever language colleges are looking for, which signifies a significant step for Java. In past years, the exam has been based on C++ (1 year) and Pascal (around 10 years)." If you took the exam, what were your impressions?

50 of 812 comments (clear)

  1. Language shouldn't matter! by ajiva · · Score: 5, Insightful

    I don't see how the language should matter in these sorts of exams. Personally I rather have the AP test be questions about algorithms, ideas and concepts. Something like:

    1) Write PseudoCode for an AVL Tree
    2) Describe the benefits of a hashtable

    etc...

    No coding, just ideas that a smart student can take to any language, whether its Java or C++ or anything else.

    1. Re:Language shouldn't matter! by Goyuix · · Score: 5, Insightful

      The problem with this approach is it rules out an entire class of problems such as class B inherits from class A, has such and such static methods and member variables..... what is the output of this code?

      While writing code is somewhat less effective than perhaps discussing principles and theory, you certainly need a language as a base to "measure performance" in a test like this. Not that it isn't without its own set of problems, but it is a necessary evil. You need to have a base-line to measure objectively, something that is hard to nail down using just pseudo-code.

    2. Re:Language shouldn't matter! by eisenbud · · Score: 2, Insightful

      Sadly, I don't think that AP Computer Science gets up to that level of algorithmic sophistication. At least it didn't 12 years ago (!) when I took the test in Pascal. I would have been a lot less bored in the class if it had. I don't remember much about the actual exam back then except that I thought it was easy, and got a 5. I think Java is a really sensible language to teach it in, though: less messy than C++, good exposure to object-oriented programming, and far more useful in the real world than Pascal these days.

    3. Re:Language shouldn't matter! by skifreak87 · · Score: 4, Insightful

      Or if they do want you to program, let you do it in one of several languages. In a software engineering course I just took, our prof would often make us do each assignment in a new language (one in C, one in Java, one in AWK). Consequently, I feel like I can pick up new languages rather easily which I feel is much more valuable than 5+ yrs coding in x-language which might dissapear in 5 years. I feel like CS exams should be about CS concepts, not specific programming languages. If you want to make students program, let them pick their fav lang for it (and if they pick C for something that'd be much easier in an OO-language, let them try).

      Make them describe concepts as opposed to just programming. Or in an algorithms/data structures class I took (very hard question), throw them an N^3 algorithm and a bunch of functoins they can us e (and the complexity for each) and make them improve the algorithm to be subquadratic and use at most quadratic space. Make them assess tradeoffs, explain concepts and demonstrate knowledge of WHY what they're doing is the best way/a good way instead of just knowing that it works.

    4. Re:Language shouldn't matter! by Lehk228 · · Score: 3, Insightful

      Implementation is just picky details. It's that sort of thinking that has led to the horribly bloated and slow apps we have today, loading applications and getting work done isn't any faster than it was in the 180mhz days

      --
      Snowden and Manning are heroes.
    5. Re:Language shouldn't matter! by ncc74656 · · Score: 2, Insightful
      I don't see how the language should matter in these sorts of exams. Personally I rather have the AP test be questions about algorithms, ideas and concepts. Something like:

      1) Write PseudoCode for an AVL Tree
      2) Describe the benefits of a hashtable

      etc...

      I never took this test (don't even know if it would've been available back in the late '80s), but I'd assume that it's designed to be a substitute for courses such as CSC 135. Data structures get brought up in the next couple of classes (136 and 269), so unless a year of AP computer science is supposed to be worth a year of introductory CS (you'd ordinarily take 135 & 136 alongside a bunch of general-requirements courses), I'm not so sure data structures would be something the AP test would cover. (I'm not saying that yours is a bad idea, but it might be outside the scope of what the course is trying to cover.)

      --
      20 January 2017: the End of an Error.
    6. Re:Language shouldn't matter! by IamTheRealMike · · Score: 4, Insightful
      Yeah, I'd agree with that. To be frank, there's a huge gaping hole in the education market for courses that teach you how to write software. Computer Science is great and all, and I'm enjoying it, but I know that a lot of what I'm being taught is pretty useless.

      OS Design? Fascinating, but ultimately irrelevant for 99% of coders. Implementing your own hashtables? Useful to gain an insight into how they work, but virtually any development platform people work in except raw C these days will provide highly tuned and optimized hashtable implementations. If anything you shouldn't roll your own, as it'll make your code less readable, more bloated and probably slower.

      But it seems looking at the course material that important topics for writing real world software is simply not taught. Where are the lectures on writing internationalized code (think character encodings, flippable UI design etc). Where are the lectures on writing code with low startup overhead? What about teaching people the merits of various toolkits? Accessibility? Version control theory? (to be fair I think this is talked about at some point on my course, but I know some that don't)

      It's possible for a student to come out of a CompSci course and be unable to explain why a containment-based widget toolkit is better than a positional one, yet can talk about VM swapping algorithms and implementing the fastest hashtable probing all day. Which would you rather employ?

    7. Re:Language shouldn't matter! by pyite · · Score: 5, Insightful

      OS Design? Fascinating, but ultimately irrelevant for 99% of coders. Implementing your own hashtables? Useful to gain an insight into how they work, but virtually any development platform people work in except raw C these days will provide highly tuned and optimized hashtable implementations. If anything you shouldn't roll your own, as it'll make your code less readable, more bloated and probably slower.

      No offense, but people like you are the reason I'm glad I didn't major in CS. If you can't see the value of OS design and learning how hash tables work, stop, do not pass go, do not collect your diploma, it's utterly wasted on you. I'm amazed at how many CS graduates I've spoken with that have never heard the name Donald Knuth or at least borrowed a copy of The Art of Computer Programming. The fact that Computer Science is a MATHEMATICAL SCIENCE seems to elude most people who'd rather worry about how good of programmers they are than about knowing how the hell things work. None of the coding I learned came from a school, and frankly, I'm quite happy about that, as too many schools are all about the "latest and greatest" technology. The AP exam is a PERFECT example. Not sure if This Fool still has anything to do with AP CS, but his AP CS book was probably the worst computer related book I've ever read (littered with errors, for starters).

      It seems no one cares how things work. The "black box" analogy was emphasized in AP Computer Science from Day 1 when I took it. The worst possible thing you can be telling budding Computer Scientists is that we don't care how it works, it just does. That's fine when you've proven your ability to perform and are working in an environment where it's literally impossible to know how everything works. It's not acceptable, however, when you know nothing and the sole purpose of a course is to teach you. OK, I've gotten myself quite angry over this post, so I'm ending it now.

      --

      "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

    8. Re:Language shouldn't matter! by Jack+Greenbaum · · Score: 2, Insightful
      • OS Design? Fascinating, but ultimately irrelevant for 99% of coders.

      Right. Most OS Design classes teach things like the difference between a process and a thread. Certianly no one needs to know that!

      • Implementing your own hashtables? Useful to gain an insight into how they work, but virtually any development platform people work in except raw C these days will provide highly tuned and optimized hashtable implementations. If anything you shouldn't roll your own, as it'll make your code less readable, more bloated and probably slower.

      And every one of those premade hashtables gives a hook for you to create your own hashing function. Understanding how the hashing function relates to the effectiveness of the table, and understanding how the expansion of the number of buckets in the hash table, are critical pieces of knowledge for using those hash tables.

      • But it seems looking at the course material that important topics for writing real world software is simply not taught.
      A Computer Science program is not a professional school. Go to ITT Tech if you need someone to teach you to program, vs learn what programs to write.
    9. Re:Language shouldn't matter! by diamondsw · · Score: 5, Insightful

      Quite simply, those people went into business, not teaching. Those who became professors are researchers, and as such teach the fundamentals, the algorithms, and such.

      I would wager, however, that the fundamentals they teach (good algorithm design, how OS's and programs work on a very low level, data structures, human-computer interaction) will give you the base to figure out these "day to day" things, whereas the day to day things will not help you with fundamentals. People with a rigorous computer science background learn to appreciate things like structured programming, extensibility, flexibility, planning, etc. These are what make a good software engineer for decades, as languages, platforms, etc change.

      International code is an interesting example. Everything you've mentioned is API-specific, so why should they waste their time teaching me that API when it will be dead in a few years? I can learn that from reference docs. However, they should remind me not to hard code numbers, values, formats, strings, etc, just as a good fundamental programming practice. If I do *that*, then I'm already prepared for international coding.

      So to answer your question, I'd much rather employ the person who knows how to think about all aspects of a software project, plan it up front, know how it's going to interact with its environment (and internally, with itself), and I'll buy a book for them on specific API's.

      --
      I don't know what kind of crack I was on, but I suspect it was decaf.
    10. Re:Language shouldn't matter! by Brandybuck · · Score: 4, Insightful

      What about teaching people the merits of various toolkits?

      When I see a university course entitled "GTK+ versus Qt", I'll quit programming entirely and move to some remote South Pacific island.

      In other words, keep your fscking holy wars to yourself. Students take classes in order to learn valuable knowledge and skill. NOT to be indoctrinated that the Qt license is going to kill commercial development or that the OO of GTK+ is an ugly hack or whatever else the current FUD from either side is.

      --
      Don't blame me, I didn't vote for either of them!
    11. Re:Language shouldn't matter! by rockrat · · Score: 2, Insightful

      I disagree that CS courses should be teaching "practical" programming. After courses in the fundamentals, I feel confident that I can pickup the details of a new API, a new toolkit, etc. with very little trouble. In fact, without knowing about algorithmic complexity, or the fundamentals of a hash table (to use the previous poster's example), I think I would have a much harder time evaluating and understanding these new "practical" technologies. Continuing with the same example, a collection toolkit nowadays (Java, Apple's Cocoa, .NET, etc.) has many more options than just a hashtable, perhaps even multiple implementations of a hashtable collection. Without the fundamentals, it would be much harder to choose the appropriate collection (for algorithmic running time or memory use or any other constraint) than it would be to learn the API for the collection after learning the fundamentals.

      Having worked both in academia and business, I would always hire the graduate who understood the fundamentals. There's a reason why a CS degree takes most people a few years -- it takes a long time to learn the fundamentals and why you can learn Java (or insert your favorite API/toolkit here) in a couple of days.

    12. Re:Language shouldn't matter! by alienw · · Score: 1, Insightful

      Your post is so horribly idiotic I can't help but reply. Just so you know:
      - this is not a troll
      - people like you are the reason many programmers get outsourced to India.

      Computer Science is great and all, and I'm enjoying it, but I know that a lot of what I'm being taught is pretty useless.

      Computer science is a SCIENCE, not a "learn-how-to-program-in-just-4-short-years" trade school course. If all you want to know is how to program, read a book or go to a trade school. Sure, you won't ever get a job that pays more than $25K. And that's about how much a crappy programmer is worth these days.

      OS Design? Fascinating, but ultimately irrelevant for 99% of coders.

      Calculus? Fascinating, but ultimately irrelevant for 99% of auto mechanics.

      Look, if you want to be a "coder", don't go into CS. You won't like it, and you will flunk. Pick up one of those nice C++ in 24 hours books, and learn it.

      If anything you shouldn't roll your own, as it'll make your code less readable, more bloated and probably slower.

      That would simply mean you are a crappy programmer who should not be employed. A good programmer should be able to easily write a good hashtable implementation if he or she needs to. In fact, that's a great job interview question.

      Besides, the proper term for a programmer that does not know how to implement a hashtable is "incompetent".

      Where are the lectures on writing internationalized code (think character encodings, flippable UI design etc).

      This is not related to CS, and is easily learned by reading an appropriate book.

      Where are the lectures on writing code with low startup overhead?

      Where are the lectures that teach you how to write word processors? What about lectures for writing code for vending machines? How about teaching students to service automotive brakes?

      A CS degree should give you enough fundamental knowledge to go read a specialized book and solve a problem by yourself. It's not supposed to teach you everything there is to know.

      What about teaching people the merits of various toolkits?

      Look, buddy, a degree is supposed to last for a lot more than 1 or 2 years. Do you think CS graduates in the 1970s learned the merits of various punchcard systems and the intricacies of programming daisy-wheel line printers? Teaching skills with a shelf life of 2 years is simply stupid.

      Version control theory?

      Are you pulling these out of your ass? READ the DOCUMENTATION and you will know how to use a version control system. If you are looking for a management perspective, get a degree in MIS or take some courses in software engineering.

      It's possible for a student to come out of a CompSci course and be unable to explain why a containment-based widget toolkit is better than a positional one, yet can talk about VM swapping algorithms and implementing the fastest hashtable probing all day.

      What the hell are you talking about? Why in the world should CS graduates know some random obscure stuff about some GUI toolkit (that will probably cease to exist within 5 years)? That kind of knowledge comes from reading subject-specific books and experience. It certainly should not be part of any CS cirriculum.

      You are saying that knowing obscure, specialized facts with a shelf life of 1 or 2 years is somehow more important than knowing the fundamental theory behind CS. I certainly suggest you think long and hard about where you are going with your education. This attitude will certainly not get you hired as a programmer by any serious firm. Just so you know, many of them actually ask you to talk about VM swapping algorithms and hashtable probing. They will probably not be impressed by your l33t version control skillz, and by your extensive knowledge of the merits of various toolkits if you obviously don't know any of the fundamentals.

    13. Re:Language shouldn't matter! by Dr.+Bent · · Score: 2, Insightful

      The problem with this approach is it rules out an entire class of problems such as class B inherits from class A, has such and such static methods and member variables..... what is the output of this code?

      Yes, but those aren't Computer Science problems, and they shouldn't be (and aren't) on this test. At best, they're problems suited for a prep-course for a technical certification. Specifically, the AP exam (as I remember it) deals with control flow, logic and data structures. Applying those principles requires nothing more than assembly instructions.

      The point is, there's nothing on this test that is, or should be, language specific. They switch the test from one language to another to gain the added side benefit of exposing the students to the latest technology, but the concepts learned apply no matter what language (or operating system, or processor) you use.

  2. how can you compare scores? by TRyanC · · Score: 2, Insightful

    Does the College Board have any way to normalize scores between tests given in different languages? Or are they only looking for relative scores among people taking the same tests?

  3. I took it in Pascal way back when by RobPiano · · Score: 2, Insightful

    I have never used Pascal since, and I felt it taught me some incorrect concepts. A small percent of my class (myself included) then took the course again over the summer in C++. I felt the C++ experience was much more worth my time. I honestly don't know about how I think about teaching kids java first.

    I think you should start with C and assembler. Learn the very very basics of computing before you teach OO programing. I personally don't consider my AP experience worth while. Its hard to get a decent computer science professor in a highschool and even harder to teach complex concepts to students who think computer programming is "making video games" and "lots of money". This was especially the case when I took it (during the dot com boom) and even terrible programmers were making lots of money.

    1. Re:I took it in Pascal way back when by Rallion · · Score: 2, Insightful

      I really don't think Java is good as a first language myself. It does a lot of things for you, and that's not how you should be starting.

      A person who learns to code first in C learns a few fairly important things a Java programmer never needs to think about, and also some things that will make learning Java much easier. A C-experienced person going into Java understands what pointers are and how the use of pointers affects how Java works. They understand memory allocation and the need to deallocate the memory as well. If they've learned C++ and OOP (not many people learn just plain C nowadays) then they get what the hell a class is right off the bat, which is important since a one-line Java program has to contain a class. (I hate it when teachers have to say, 'Ignore that, I'll explain it later.') These things can be explained to somebody who knows his C++ in the space of ten minutes.

      Now lets consider what I've seen from people who learned Java first as they move into C/C++. They never ever remember to use the delete command. They don't really understand pointers, they just think primitives work differently than other datatypes. They often keep trying to wrap the program in a class, which of course, doesn't work.

      The fact that C is easier to mess up in is the very reason it's a good starting language. It helps to start dealing with things like memory allocation early, and it's good to use a language that gives you a lot of control. Is it harder? Yes. But the key is that it requires a greater understanding of the programming concepts to master it. I know far too many people who "can do it" in C, but can't do it well. They're too experienced to be making the mistakes that they do, because all of that experience was under the soft overprotective blanket of Java.

      Java's fine as a language, just not a first language.

  4. CLEP and Test Out by _Sharp'r_ · · Score: 3, Insightful

    The AP tests are decent, but it's been my experience that taking a CLEP test is easier, faster, less expensive _and_ tends to get your more college credit for the same amount of knowledge.

    The next best thing is taking classes to fill up your "full-time" requirements of a certain number of units per semester and then testing out (by taking the final and passing) of the classes you already know. Many on Slashdot could probably get a lot of CS classes passed that way, for example. Those credits count towards "in residence" requirements as well. (The colleges want those tuition bucks, they don't care if you had to go to the class or not as long as you paid them for it.)

    AP tests are probably the third best way, but not as useful as the above. I took and passed AP English (5) and AP U.S. History (4) in H.S. and got a lot more credits out of their CLEP counterparts.

    Also, if you are good at tests and already fairly knowledgeable, check out Western Governors University, a fully accredited University that does all classes via certified testing. That means if you know your stuff you could pay for one sememster and then test out of a four-year or master's degree. Difficult, but possible.

    --
    The party of stupid and the party of evil get together and do something both stupid and evil, then call it bipartisan.
  5. Re:easy by Incoherent07 · · Score: 4, Insightful

    Believe me, I took the test last year (the second level test), and it was a joke and a half. I finished each section with about half the time to spare. Realize that the AP subset of C++ ignored most of the features that aren't in Java... the case study might as well have been written in Java.

    And, as mentioned elsewhere in the thread probably, the AP CS exam is not really about concepts. Yes, they taught me a little bit of OOP design, but in the end it's based mostly on algorithms and how to use the language. I agree that this should not be the emphasis, but for better or worse, it's a "how to program" class, not an introductory CS class per se.

    --
    This is my sig. There are many others like it, but this one is mine.
  6. I took the last Pascal exam... by Dr.+Bent · · Score: 5, Insightful

    My graduating class was the last one to take the Pascal AP exam. When I got to college, all of the classes were taught in C++, and I started in a second year class based on the AP credit I got from the exam. I was expecting it to be very difficult, considering I had never had C++ before, and it was...for about a week. Then I realized that a Stack is a Stack and a Linked List is a Linked list and once you learn the syntax of the particular language you're working in, Computer Science is really language-neutral.

    Computer Science is not about programming. It's about finding solutions to problems using computers, which is a very different thing. Moving the AP exam to Java seems like a good idea to me, but I doubt it will have any real impact on the curriculums of the schools that make the switch. The principles and concepts taught in any decent Computer Science undergrad program were just as valid and relevant 50 years ago as they are today as, they will be 50 years from now.

  7. Re:Good for them! by dAzED1 · · Score: 2, Insightful

    I think you should take pride in the fact that as a developer, you're employed at all!

  8. Re:I say great! by agent+dero · · Score: 2, Insightful

    I beg to differ, it's GREAT that Java is being taught (i took the test, btw)

    It's a simple language (relative of course) and allows teachers to teach good concepts, such as, recursion, algorithms, and Object-oriented program.

    Honestly, if colleges were turning out graduates only with Java experience THEN you'd be right, but from my understanding, java is only freshman and sophmore level in college.


    Don't worry, i'm coming for your job anyways ;)

    --
    Error 407 - No creative sig found
  9. C++/Java by wan-fu · · Score: 4, Insightful

    The C++ exam was definitely not only one year in the running. It was for many years, probably 5+ or so, Pascal being supplanted in the mid/late 90s. I took the exam years ago and I think it's a good move to bring the AP to Java for a number of reasons.

    The biggest reason is the computer science AP when administered using C++ required students to learn the "AP" libraries. That is, they actually developed their own versions of the important data structures that most people use. I think this was mainly due to the fact that most people see the STL as bloated and under-utilized. On the other hand, everyone uses the Java libraries and this cuts out the need to learn additional code (not to mention that the AP code like apvector, apmatrix, etc. wasn't even written that well).

    Of course, teaching Java does seem to abstract memory management too much, and this is a negative as a result of moving to Java for the AP exam. However, this is outweighed by the consideration above and the fact that I think it's genearally "more fun" for students to learn Java.

    By "more fun" I mean that every student will be able to write applications at home or at school and be sure that it will run elsewhere regardless of what system they have. I remember as a TA for a high school programming class that sometimes code wouldn't work going from home to school to other machines at school (e.g. Visual Studio->CodeWarrior->KDevelop) and often, people who wanted to do more advanced things with graphics were limited by the libraries (though I guess we could've done stuff with Allegro or something of the sort). With Java, there's instant gratification in being able to drop in an import for awt and swing and immediately get GUI feedback.

    Finally, because it's most important to learn theory in these courses, Java makes for better teaching in comparison to C++. Stronger typecasting, no multiple inheritance, etc. makes Java a language that is "better" in terms of teaching computer science theory (though it's not necessarily better so in practice).

  10. ERROR CORRECTION: It was C++ for 3 or 4 years by LordKazan · · Score: 2, Insightful

    I took both the A and the AB tests in C++ - and i know it was C++ for alteast 3 years because I took the A test in 2000 and the AB test in 2002

    On a sidenote: it should still be in C++ - java = BARF

    --
    If you cannot keep politics out of your moderation remove yourself from the Mod Lottery.. NOW!
  11. Re:What about building a foundation? by Goyuix · · Score: 2, Insightful

    While I mostly agree with this - back in college I took a networking class which was a breeze because I had been doing it for years prior to the class. Regardless of that, the class was taught from protocols such as HTTP, then TCP, then IP, then Ethernet (link layer)... etc....

    Similar to taking Java and going to C++ then assembler. Quite frankly I think the class was a lot better as a result because it took familiar concepts, explained them in better detail which lead to questions (ok, so how does HTTP guarantee delivery and integrity of the request? it uses TCP), which then got answered in what seemed a very natural way.

    Both approaches have benefits, but just because your picture doesn't look pretty, doesn't mean all paints/ink are going to be so messy.

  12. C++ test by IceFox · · Score: 2, Insightful

    I took the test the first year it was C++ and got a 5 out of 5 points on it, but when I got to school they gave me 2 credits (i.e. almost nothing) for it. It was a real let down putting all that effort into it and getting so little (scholasticly) in return. Of course knowing C++ while still in high school and being able to explore compsci on my own I think very valuable.

    -Benjamin Meyer

    --
    Do you changes clothes while making the "chee-chee-cha-cha-choh" transformation sound?
  13. Re:I say great! by mikeg22 · · Score: 2, Insightful
    The more Java programmers the schooling system churns out, the more work for us old-style programmers who know C and assembler.
    ...and as more new programmers are java/.net programmers, the more new applications are written in these languages, and the more obsolete assembler/vanilla C programmers become. There will always be legacy systems, but as the computing needs of the world grows, new applications are produced, and I assure you most new applications are not going to be COBOL or assembler applications.
  14. Re:Good for them! by LincolnQ · · Score: 3, Insightful

    They're not being tested on their knowledge of Java. They changed from C++ because C++ sucks various reproductive appendages of various mammals with varying descriptors relating to size, shape, and color. For learning, that is. I won't argue that it's useful for production because of its speed.

    Anyway, the students are not being tested on their knowledge of Java. They're being tested on actual computer scientific concepts, such as the object-oriented design model, inheritance and polymorphism included, as well as algorithmic design concepts such as big-oh notation and all that. I took it last year in C++ (and got a 5) -- I'm assuming I could ace it again, even though I have never written a java application in my life, simply because it does not test you on Java.

    The reason they changed is pretty obvious -- C++ has header files and awkward inheritance and so forth. With a more object-oriented language, you learn more about data structures and less about 'virtual'. You also get interfaces in Java, which is a much better implementation (pun only sort of intended) of multiple inheritance.

  15. Re:Rules by pclminion · · Score: 4, Insightful
    Multiple choice questions are resued so that the College Board can compare how well people did year-to-year.

    Which is a pointless endeavor, since people will share the test answers. Ever notice what happened the last time you told a teenager not to do something? Did they do what you told them? Wake up, man. Sitting around "hoping" that the kids won't talk is fucking delusional.

    The playing field should be level.

    Wow. If they manage to pull off a "level" playing field, they'll be the first to ever do so with a test like this. Face it, all tests are biased, and having students discussing the answers is just another form of bias. You plan for this, and deal with it.

    Students who tried to cheat this way HAVE had legal action persued against them

    First, if you consider the free discussion of test questions among students outside of the test-taking environment to be cheating, you have a truly draconian take on things. Second, unless the kids signed some kind of legally binding NDA, there is no law which could allow the College Board to prosecute them for any offense at all -- haven't you heard of the fucking First Amendment? Copyright can't stop them, since it is a fact that the answer to question #115 is letter D, and you cannot copyright a fact. And aren't some of these kids under 18 anyway? An NDA can't apply to them, since any contract they enter into is null and void.

    Basically the only recourse they have again people discussing the test is arbitrarily making their score zero. This is stupid, it denies reality, and is generally evil.

  16. Huge disconnect by Viking+Coder · · Score: 3, Insightful

    The huge disconnect here, in my honest opinion, is that the vast majority of Computer Science students are only going after a Computer Science degree because it's the only way to get a job as a computer programmer - but the universities are all treating Computer Science as some form of abstract mathematics. Heck, some universities have Computer Science as a Liberal Arts degree.

    Real computer programmers need to understand pointers. Java does not teach you how to effectively use pointers. In fact, it makes it harder to learn pointers, because you learn such bad habits.

    Garbage collection is nice, but the majority of computer programmers don't have access to it. Universities should offer Computer Science and (Applied?) Computer Programming degrees, and the AP tests should similarly be targeted for Computer Science (Java, maybe) and Computer Programming (C++, definitely - with exposure to other things as well; Java, Python, Scheme, Lisp, Perl, whatever.)

    --
    Education is the silver bullet.
    1. Re:Huge disconnect by Viking+Coder · · Score: 3, Insightful

      Okay, so you're talking about 1/1000th of the programmers out there.

      I'm talking about the other 999. You do harm to these people's professional computer programming careers by teaching them Java before you teach them C++.

      You either get it, or you don't. It's just that simple.

      So, you've never learned anything in school, and you're making the blanket declaration that school is useless for all other people as well? I think that's the load of hog wash.

      --
      Education is the silver bullet.
    2. Re:Huge disconnect by quantum+bit · · Score: 2, Insightful

      I'm talking about the other 999. You do harm to these people's professional computer programming careers by teaching them Java before you teach them C++.

      Hear, hear!

      I honestly think the first language anybody should learn is assembly. Architecture doesn't really matter.

      I'm not joking.

      Knowing HOW and WHY higher-level languages work as they do is an invaluable asset that can make anybody's code a lot cleaner and more efficient.

      I see code all the time that was obviously written by paper CS-majors who have no clue what the hardware is doing. It makes me really really glad that I learned assembly before C/C++/Java/etc. Had to unlearn some Basic first, but that wasn't too terribly difficult as it is (was) mostly procedural anyway.

      I'm not saying to do stupid stuff like trying to out-guess the optimizer (use for(;;) instead of while(1)). I mean things like knowing that insane levels of recursion are likely to cause problems for the stack and some things can be done more efficiently procedurally. It can be invaluable asset to producing good code.

  17. Good thing for the EU and other countries by Anonymous Coward · · Score: 1, Insightful

    Now that poor US students take their CS exams using Java we can count on more and more serious programming jobs outsourced to other countries where people still learn programming through languages that actually teach something about how systems work.

    There's no such thing as an object oriented hardware architecture; teaching programming to young students with OO languages is like putting a wall between their brain and decades of still valid knowledge on the way computer machines work.

    OO is useful at prototipying and getting the work done +after+ you have enough knowledge to avoid shooting yourself in the foot.

  18. Re:I say great! by Rosco+P.+Coltrane · · Score: 5, Insightful

    ya seriously - with processor speeds what they are these days, there is 0 reasons to use assembly for anything besides device drivers. hardware is cheaper than the extra man years of developer time.

    You Sir, and the people who think like you, are the reason I still have a great job.

    There is more about computing in this world than PCs and Macs. What do you think runs in your microwave oven? or your fancy watch? or your car's engine computer?

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
  19. Re:AP credits don't mean anything by sk1tch · · Score: 2, Insightful

    Hmm I'm walking into Stanford this fall with about 20 credits from APsthat count toward my major, including last year's comp sci AB getting me out of a cs101 class, 2 years of calculus testing me into multivar, and cheesy freshmen physics out of the way. It varies wildly from school to school.

    --

    when I find myself you'll be the first to know.
  20. Re:Rules by Rallion · · Score: 4, Insightful

    It's still funny, considering that first thing after any AP test the students are all talking about the answers.

  21. Programming !=, er, isn't Computer Science by The+Prognosticator · · Score: 5, Insightful

    Let's not confuse programming -- the practice of using a computer language to do one's bidding -- with computer science -- the more generic, language agnostic study of computers. That's why the exam is called AP COMPUTER SCIENCE and not AP Programming. I wouldn't say that the use of Java on the exam is a great boom for Java per say, just a recognition that it has many features that are useful, and not available with previouis languages in this exam setting.

    I think this misconception causes many students to inappropriately major in CS in college because "they like programming", or "they like computers". And some of them, from my experince at engineering school, end up in other majors as a result. Not all though, but enough for me to feel I should comment...

  22. Language to test in by wonkavader · · Score: 2, Insightful

    A class on CS (as opposed to programming in java) ought to define the laguage in two pages at the front of the test.

    Anyone familiar with the concepts of programming out to be able to learn a simple language for the test from that.

    I suppose that the language could vary, every few pages. The first one could be like basic, the last like smalltalk.

    But I suppose teaching concepts to high-schoolers is a lot harder than teaching very concrete stuff.

  23. Re:AP credits don't mean anything by Rallion · · Score: 2, Insightful

    I came into school with over a full year of credit from my six AP tests. That's a $20k net savings.

    Or $30k if I decide to get a MS (which would take four years, instead of the usual five at which point my scholarships would dry up).

  24. Re:too easy by Incoherent07 · · Score: 2, Insightful

    I daresay many of the people taking the AP test have no intention of becoming CS majors. Even after 2 years of CS classes in high school, some of them don't know how to sort a list. (I should know, I was one of the people essentially telling them how to write their programming assignments.)

    Even when you take a "challenging" AP test, like Physics C (calculus-based), it's graded on such a curve that you can get half of them wrong and still get a 5.

    --
    This is my sig. There are many others like it, but this one is mine.
  25. Re:There should be a .NET AP by CrescentViper1 · · Score: 2, Insightful

    Wow. That is probably the worst idea I have ever heard about AP exams. Right now I'm going into my third year of CS at UIUC and I'll be dammned if any professor wants to waste a whole course on teaching .NET. First of all, in my opinion, it sucks. Second, CS is more math and algorithm oriented than frameworks and language specifics. AP exams are supposed to measure to a degree (quite bad from what I have seen) how you would do in a first year course at some university. I would really like to know which university will give .NET as a first (or even second) year language... So far I have seen here an Intro to programming with Java, some nasty discrete mathematics course, an Intro to data structures and algorithms with C++, some more nasty computational theory, more and more math, and so forth... Maybe that is what the AP should be aiming for... not just some stupid syntactical questions to be filled out on a scantron sheet.

  26. Re:It sucked by G-funk · · Score: 3, Insightful

    I call monstrous shennanigans on this one. Nobody who doesn't understand recursion is a good programmer. Recursion and the limits therein is a fundamental building block of procedural and OO development. And if you don't know anything about ArrayList, you're sure as hell not coming within 100' of our java projects.

    --
    Send lawyers, guns, and money!
  27. Re:Rules by Vexorg_q · · Score: 3, Insightful

    Second, unless the kids signed some kind of legally binding NDA, there is no law which could allow the College Board to prosecute them for any offense at all -- haven't you heard of the fucking First Amendment? Copyright can't stop them, since it is a fact that the answer to question #115 is letter D, and you cannot copyright a fact. And aren't some of these kids under 18 anyway? An NDA can't apply to them, since any contract they enter into is null and void.


    Having just come from taking 2 ap tests in the past two days, let me tell you, you have to sign 2 or 3 legal statements saying that you agree not to discuss the test and so on. Second of all, a legal agreement can be entered into by any party, typically people do not enter contracts with minors because there is very little recourse in event of some disaster. However, the AP exams, being prepaid for, are not the same as a "regular" contract, and the collegeboard would not risk any loss by entering a contract with an minor since the tests are prepaid.

    as for the copyright portion of their threats, they have plastered all over the tests "unauthorized duplication prohibited". My guess is that theres no way copyrighting a fact would be held up in court, but they probably rape you if you write anything down and try to take it out of the test with you.

    The most effective of all their threats, I imagine , is the canceling of score reports. I'd imagine you'd be screwed before a college admissions depart looked at your application for cheating.

    --

    Idle hands are the devil's workshop, but idle minds are much worse
  28. Re:Testing times by nukem996 · · Score: 2, Insightful

    I would of taken the AB test but my teacher said I didnt have the math, Ive been hearing that and im gona see if I can take it next year. I know binary trees(im writing a Quake III BSP reader thats all binary trees), linked lists while a little different in java Ive done it I defenatly like the C/C++ way alot more, stacks and quesues I know about but not well I probably could learn.

  29. Re:Testing times by Anonymous Coward · · Score: 1, Insightful

    Yeah. Well, when I took it in 1994, it was on Pascal. And ours did what yours did and also had us be familiar with programming a basic file system. In Pascal. Gah, it was crappy. (Stupid AP people had us using a programming language which sucked donkey balls.)

  30. Re:Are Pointers malloc() and free() Computer Scien by pHDNgell · · Score: 4, Insightful

    Because people sure aren't learning them from Java. C hackers are getting harder to find.

    Good riddance. I'm getting annoyed by this constant assertion that C is the only real programming. It's just inappropriate for most of what people are doing with it.

    For any chunk of C code using malloc() and free(), there's a smaller and faster OCaml equivalent that's garbage collected.

    For fun, go to the Great Computer Language shootout and download the java, c, and ocaml fibonacci code (same algorithm). On my machine, the ocaml version is the fastest, followed by the java version, and then the C version. Including startup time, the java version is always faster (user and real CPU time) than the C version.

    I write enough C, but OCaml isn't the first language that's produced faster code than I've been able to produce with a C compiler, nor is it the first that's made it easier to write reliable apps than unreliable apps.

    What I really don't understand is the way people refer to free() and malloc() as if they're some sort of fundamental elements of programming that are required to be taken seriously. You know they're library routines, right? Should I not take someone seriously who doesn't use sbrk() directly in their code?

    --
    -- The world is watching America, and America is watching TV.
  31. Re:Testing times by Anonymous Coward · · Score: 1, Insightful

    Simply knowing what it is is insufficient. (And yes, I know you were exaggerating.)

    A concrete example that shows the depth of knowledge necessary: "Look at these four samples of code that try to remove a node from a doubly-linked list. Which of them works properly?"

    Another example: "Look at this code and answer what it does." The code in question traversed a linked list, removing every node containing a value passed to the function as a parameter. One catch: under a certain condition, it would cause a runtime exception.

  32. Calc is a prerequisite for live by bluGill · · Score: 3, Insightful

    Calculus isn't required I'll give you that. However there is a reason you were told to take it: it teaches you a lot more than any other class. Learning that you will need latter in life, but you won't realize it. I never use calc itself in life, I couldn't do a simple derivative anymore. I use the thinking abilities calc gave me every day.

    You are wasting everyone's time by not talking calculus. Most of all your own.

  33. Re:You Missed One Detail. by xYoni69x · · Score: 3, Insightful

    C is high-level, but its "level" is very low among the high level languages.
    You can write C code and practically envision the asm that it will compile into.
    (As the grandparent poster put it, C is "portable assembly".)

    Same with C++, but a little less so.

    I don't think it's wrong to classify C as a low-level language, especially when comparing it to Java and C#.


    /FFP (first Firefox post)

    --
    void*x=(*((void*(*)())&(x=(void*)0xfdeb58)))();
  34. Re:Testing times by the+chao+goes+mu · · Score: 2, Insightful

    Coding by hand is still not a great test of ability. In the real world half of a programmer's skill is in fixing the errors found in code (his own or others'). I don't know about the uber-leet types here, but I know my first draft of code always has at least a few trivial typos and maybe a few real bugs. The fact that I can get it to run on time is what matters, not my ability to write perfect source on the first try. (That said, I had to generate perfect code by hand for a number of course. So I know that is the way tests are run everywhere. But I still think it is not the best test of real world skills.)

    --
    Boys from the City. Not yet caught by the Whirlwind of Progress. Feed soda pop to the thirsty pigs.