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?

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

    3. 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?

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

    5. 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.
    6. 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!
  2. 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.
  3. 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.

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

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

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

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

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