Talk:AP Computer Science

The First Section of Talk
I am willing to help a bit on this book. But you just gotta double-check the things I write :) --Dragontamer 03:39, 22 November 2005 (UTC)


 * In general, I hate to "write for the test", but in this particular case I would like to know what the specific curriculum requirements are for an AP Computer Science course. If you (or somebody else) can help dig these up, it would go quite a bit further to try and put something like this together.  I've had my own thoughts on the subject about what a high school AP class on Computer Science ought to have in it, but the testing requirments for the AP exam would also require a certain "standarization" of what should be taught as well.


 * In addition to the specific requirements of the AP exam, it should also be something like a CS 101 class, or more like a CS 150 (intro to Computer Science for CS major freshmen... the 101 class is usually abused as a general-education "Here is a computer" class). This is something I would be not only willing to fact check, but add content to as well.  --Rob Horning 13:03, 25 November 2005 (UTC)

Good Idea.

Here is the PDF file for the syllabus http://www.collegeboard.com/student/testing/ap/sub_compscia.html?compscia

Quite Frankly, when I took this exam I learned totally from researching online and checking the syllabus to see what I needed to learn. School System sucks... my class was 2 classes at once, one for CompSci A and the other was CompSci AB... basically, the teacher taught enough for the CompSci A students but I was planning on AB so he just gave me the syllabus and some online material to teach myself. IMO, too much to expect a teacher to teach 2 classes in 1 period o.O. Anyway, it is possible to learn without a book on this subject; but it probably would have been a great help if I had one :)

I suggest taking the outline directly from the syllabus, and appending the AB section to the end of chapters. --Dragontamer 07:07, 26 November 2005 (UTC)


 * I took a look at the PDF file. I forgot that AP Computer Science uses Java.  Yuck.  I think Java stinks as an introductory language, and encourages sloppy programming styles that would have to be later unlearned in the work environment.  Java has its strong points, but it is not a teaching language.  Still, if it the "language of choice" on the AP exam I guess it is going to have to be used.  Once you learn one programming langauge the others are fairly easy to pick up as well, although if I were the one to design the cirriculum I would perhaps encourage some time to explore other programming languages as well like LISP or LOGO (to name a language designed to be an introductory learning langauge).  BASIC is a better language environment, but is unfortunately too non-standard in all of its current dialects to be useful.  C# is a better compromise for an introductory langauge, but I can see the political motivations behind not using it as well.


 * Enough of my own opinions on the choice of language. We need now to establish an outline for the textbook and to try and come up with a chapter structure for this book.  Another issue to debate is the tone of the book and the "point of view" from a literary sense.  One of the best "textbooks" on computer science I ever read was written from a 1st person point of view, where the author talked to you like a casual chat but going over the course in a step-by-step fashion with plenty of examples.  This is surprisingly very difficult to accomplish, which is why it isn't often done.  I also think that a de-emphasis of the language features should occur with a stronger emphasis on programming concepts instead.


 * I also think that GUI design should be introduced very early, perhaps even from the start. This requires a strong well written GUI-IDE, and in this case it should also be "free" as in GPL'd if possible that we are working from.  Here is the reasoning for this approach:  Almost all programming done today is through using graphical interfaces.  It is a very rare programmer that in the Real Worldtm actually writes a command-line interface program.  A good IDE makes writing the traditional "Hello World" applet as a GUI application just as easy (or even easier than) writing the same program as a command-line application, at least for a beginner.  All of the current students are familiar with GUI programs anyway, so why not simply let them be creative and let them experiment with check boxes, lists, buttons, and graphical images and logos.  Working from a command line is an alien experience and something that they are not going to be used to using at all.  Generally speaking the command-line first approach is used because the author of the books that cover it don't understand GUI programming and are old-school programmers who hate modern IDEs.  All of this is of course my opinion and you can have any other opinion on the matter as well.


 * I also think that the typical examples are incredibly lame. Using the "traditional" object called "point" is something that needs to be thrown out completely.  These are kids we are talking about, not some engineer who is building an embedded system for a trans-continental pipeline.  Use examples that at least somewhat relate to current teen culture, or at least teen geek culture.  Yes, they may be on the AP exam, and we need to throw some lame stuff there as well just to not throw them for a loop when the exam takes place, but let's keep it exciting and something the kids can associate with as well.


 * These are some initial thoughts. I'll add more later.  --Rob Horning 18:32, 26 November 2005 (UTC)


 * Slightly off topic: Was that book from 1st person perspective C++: A Dialog ? Yeah, that was an awesome book.


 * I agree, we need some serious examples of polymorphism... not the good old animal tree where Dog is Mamal is vertabrate is blah blah blah... Heck, I'd consider that bad programming right there. (IMO, long inheritance chains are poor programming practice... granted, "long" is ambiguous definition but whatever). Additionally, I see many beginners make the giant mistake of using classes for everything. (There was this one case where my friend attempted to create a different class for every single "Magic the Gathering" card). I feel that bad examples should complement the good examples; every good example should have a bad example next to it.


 * A good example of inheritance I found is from playing video games. Class Gun, subclass AK47... Provide examples where you can pickup any kind of gun, and you can only hold 2 "guns" at a time. Etc. Etc. My friends seem to understand video games much more, and it would be more interesting to have a book aimed at creating a very basic video game than it is for a classic CS book. Several books that I liked involved creating a program slowly with the knowledge you build up... I'd prefer that perspective over a Dialog Perspective.


 * Additionally, I say we explain the algorithms with pictures. Beginner programmers need to learn the logic of programming more than syntax; additionally, they think 20 lines of code is enormous. Additionally, I never was a fan of Java myself :)


 * Specific ideas for the "project" perspective:


 * Robocode robots-- although, we'd spend more time saying wtf an AI is rather than programming algorithms.
 * Shoot them Up galaga style-- Reletivly simple game, and should have an example of all data structures and stuff required to create the game.
 * MBCS-- use the project that supposed to be explained in the course :-/ Trust me on this, the designers of the course messed up big time here. Who cares about fishes?? Too bad 25% of the test is dedicated to it.
 * --Dragontamer 19:23, 26 November 2005 (UTC)


 * Actually, Now I think this should be in the Wikiversity, computer science section. --Dragontamer


 * I do want to clarify a little bit about Wikiversity. The mission and scope of Wikiversity are being redefined at the moment, and while getting a community together about a topic is part of that mission, the actual textbooks should be kept here on Wikibooks.  At least that is the current direction that seems to be happening.  That we should have this Wikibook listed with Wikiversity is of no doubt, and feel free to be bold and add it there, even in the current state of this book. --Rob Horning 17:51, 29 November 2005 (UTC)

I think I like the direction this books is going, and we certainly can work together. I love the idea of using "robocode" in somewhere. Variations of something like C-robots, or writing a plug-in class that controls I/O signals of a robot is a really cool idea, where we supply the GUI interface and the student merely needs to write the AI for the robots. Good game AI writing is something that can teach a whole bunch of valuable programming techniques, has "instant" feedback to the student including bragging rights ("my robot is better than yours"), and can be done both by rank amature programmers and can still be a challenge for advanced students that perhaps shouldn't even be in the AP class at all.

The same goes for designing a game. I actually taught a class where I taught classes by implementing a simple tiled graphic game like Final Fantasy or Elfland, where a group of objects like weapons, monsters, and terrain types were set up as classes. One of the interesting aspects of that session was not so much the game itself (that was a fun topic and attracted the interest of the students), but the process that all software design teams have to go through when designing more than a simple example program.

I went through and actually started writing a software architechture document together with the students, trying to specify what in fact the game would do. We debated various concepts for the game, strategies for putting the software together, and in abstract even what kinds of objects we would be working with. In short, it turned out just like the dozens of software design meetings I've had with real developers, including donuts, lame jokes, and strong opinions coming from sometimes unusual participants to include or exclude a certain idea. We spent about 6 hours not actually doing any programming, but doing software design from a planning perspective. This is something that is very rarely if ever actually taught in any programming class except by a very good Software Engineering professor, and that is an upper-division college class at that. I think you can spend a chapter going over the concept in a high school textbook in a simplified form, and it teaches good habits from the beginning. Even for students who don't become CS majors nor programmers later on in life, it would be good for them to see what real life engineering meetings can be like and what the difference is between a mere hacker and a real engineer, and why engineering design matters. Classic engineering horror stories like the "Galloping Girdy" Tacoma-Narrows bridge in Washington state, the Ford design of the 1970's Pinto that killed thousands of people, or even the design of the Space Shuttle Challenger; could be brought up as examples of how lousy engineering design does affect even ordinary people and some of the real world headaches that come from lack of planning. I can think of many software projects in particular where millions or even billions of dollars get spent and the project is eventually written off.

I also know from experience that if you are learning a programming language, it really helps to focus your attention if you have a need for the programming concepts you are learning. This is where I think having a large major project that is expected to be written by the students during the term together with a series of short traditional program stubs to experiment with programming concepts should be used together. The large project should be collaboratively written as well, so introducing concepts like version control, signing up for modules, bug reports, module stubbing, and software testing concepts could also be dealt with. Particularly for the AP Computer Science AB course this should be implemented. To help assist teachers new to this concept, several different kinds of suggested projects should be offered.

I know this is a huge project I am recommending. This can be, I think, a very good survey course for computer science. High School students can be taught how to do more than just balance their checkbook with their computer (a lousy application of computers if I ever saw it), but can be given a glimpse into real software engineering to whet their tastes or convince them that there is much more involved than what is demonstrated poorly by Hollywood movies of what programmers in real life do. --Rob Horning 17:51, 29 November 2005 (UTC)


 * I agree with all that you said. I know for a fact that I'm struggling trying to keep hold a project. As said before, I'm still a student... I know the theory but no practical "engineering" aspect of programming. I would love to have had engineering straight at the beginning of my CS course. --Dragontamer


 * I also think that this book/course could be a good jump start on the Wikiversity. Easily, it is one practical goal that an E-community can actually aim for. --Dragontamer

Nice Job on the outline
But it isn't AP computer science :) This is more and more feeling like the ideal course for wikiversity, and maybe we shouldn't be aiming at AP computer science. Lets ditch the title and go for just simply "Into to Computer Science" and use whatever language we want. How bout that? We need such a book in the wikiversity anyway--Dragontamer

Oh, and I'm not saying "stop the book", I'm saying, lets change titles, change direction, and aim at that big picutre you want. But we need to start from the beginning, change everything to what we need idealy.

I say ditch Java, go for Python or (Dr.) Scheme. Both have GUIs avaliable in some sort of way. Python has more applicable software engineering stuff in it (it is OOP, Scheme is functional, so we can't teach OOP in scheme as well as in Python). Both seem to be cleaner than Java however, so its a toss up on the CS side of things.

Again, we need a textbook on Computer Science before starting wikiversity, so this should probably be the starting place. --Dragontamer


 * Interesting thought. I'm not as conversant in using Python as other languages, but from what I've seen it may be a much better intro language.  If you don't mind the plug and tie in with Microsoft, Sharp Develop (or #Develop as it is called) is a very nice tool that is also a nice GPL'd GUI interface.  This is also the framework that Monodevelop is being modeled after and I think is an outstanding IDE for beginners.


 * As for ditching the AP aspect, I think it would still be useful to follow it somewhat as a guide, and try to make sure that we at least include all of the topics that the AP test recommends. We could also try to dig up the ACM/IEEE Computer Science ciriculum recommendations to make sure this "course" will at least meet those basic objectives.


 * Most high quality AP courses that I've been privileged to be associated with (I spent a little bit of time recently as a substitute High School teacher) usually used college-level textbooks anyway. As I said earlier, I want to de-emphasis the language issue anyway, and we can even have multiple (computer) langauge versions available as well through transclusion of text and some very minor rewrites where language specific features are emphasized.  Just for kicks it would be fun to have an intro to Computer Science...Intercal version. (I'm not being too serious here though).  Most intro classes are very heavy into teaching syntax, and I think that is a huge mistake.  We are teaching theory about computers, not just how to be a junior programmer for the rest of your life.  --Rob Horning 17:51, 1 December 2005 (UTC)


 * That would be fine. How about sticking with a language angostic textbook, akin to TAOcp? Algorithms can be easily described through pictures/animation, words, and simple english sentences. Such a class is being discussed in the wikiversity right now; it would be too hard to stop edit wars for "my pet language", and if we are making a general CS textbook, we shouldn't need a language anyway. We just beef up the prerequisites to "Know at least 1 programming language" and volia. Examples can be written in different languages as people go in. --Dragontamer


 * Ahh, scratch that. I don't see it possible :) --Dragontamer 12:21, 3 December 2005 (UTC)

Development Environments
I'm now looking for some base development environments that new CS students could use. You (User:Dragontamer) suggested that Python had some reasonable GUI development environments. I'm game to try some out if you have some suggestions. The idea of using Python as an introductory langauge really does intregue me in some weird perverted way. It offers many of the benefits that BASIC offered back in days of yesteryear, but being a little more up to date in terms of modern programming concepts. Like I said, I don't know Python other than some demonstrations I saw from a Python guru that I knew, but I've been programming long enough to know that sticking to one language is going to keep you in a rut as a programmer as well.

I want to stick to one single programming language... at least to start with. The multiple computer programming language version will have to come later, although I may try it out with C# as an experiment as well. Java just doesn't inspire me, but I'm willing to give it a try. An intro text using Python might also get some support from the larger Python community as well, which will be likely to help out here on Wikibooks. I just don't see that with the larger Java community happening. Python users tend to be evangelical in their language usage and would love this forum. --Rob Horning 18:29, 3 December 2005 (UTC)


 * I'm not very good at Python myself; though if you want something somewhat GUI but everyone will love, we probably should use pyGame. It is easy enough to be taught to a beginner programmer. From there, we can probably create a game? --Dragontamer 21:00, 4 December 2005 (UTC)


 * Ideally I would love a GUI design environment like Visual Basic/Delphi/Visual Studio that allows you do to design forms and windows without having to touch actual programming right away. If one doesn't exist with Python, I may even be tempted to write it myself.  I've worked on similar projects in the past.  I know there are class libraries to work with many GUI frameworks, so I don't think this would be that complicated of a project to accomplish.  --Rob Horning 01:50, 5 December 2005 (UTC)


 * You mean like http://glc.sourceforge.net/ and http://glade.gnome.org/ ?? GTK+ is the library for that GUI design environment, supposedly it isn't very mature on Windows but works great in Linux/Unix based systems. --Dragontamer 01:59, 5 December 2005 (UTC)


 * GTK has matured quite a bit on Windows... mainly driven by the GIMP for Windows software. It is still clumsy and has a few problems, mainly from being so different in look and feel from the standard Windows API libraries.  Lazarus (Free Pascal GUI editor) uses GTK as well.  I'll have to see what the current state is right now, but this is a good place to start.  Thanks for the heads up.  --Rob Horning 16:17, 5 December 2005 (UTC)

Speaking in generalities instead of code
Ideas in Computer Science should be able to be applied to any language that will support it. Computer Science isn't the study of languages themselves, but the techniques used to implement them. So why not just include the least amount of code as possible? You could still show an example here or there in a fairly common and portable language like C or Java.

I have an entire study packet of the Marine Biology Case Study which is a standard project that students are expected to know the ins and outs of by the end of the year. I also have a textbook that is hundreds of pages of sample questions for the test. Plus tons of knowledge on the topic. We used Java in our class. I'll throw in whatever info I see fit once this gets started. Themikeflynn 06:54, 5 March 2006 (UTC)


 * Also, I don't think this should get too into creating a game, reverse engineering or disassembly. They are great Computer Science topics but I've never seen them mentioned in any AP Computer Science AB related information. Keep this simple, remember that many kids taking the class aren't computer science degree seeking students but rather high school students looking for some other AP class to put on a college application. Themikeflynn 07:01, 5 March 2006 (UTC)

I understand to a point what you are saying here, but the fact is a computer science class simply must get into programming, and gobs of it. And (unfortuntely) you have to select a language of some sort to start with in the first place. This is an eternal debate that was started originally by Dartmouth College when they invented BASIC (yes, it was not Wm. Gates III who invented that language). Due to political reasons alone and not because of any technical purposes, early computer programming languages have shifted around from one language to another to the point it is now just the flavor of the month, with Java being the hot language of the moment a couple of years ago.

Students can only learn about programming computers by actually programming computers and doing experiments and trying new things.

As far as creating a game is concerned, it is some very lousy teachers who don't understand the typical high-school aged hacker and something they may be interested in. There is no student who is interested in setting up a tax calculation program or a workbook that keeps track of grades. Those may be of interest to the instructor, but students would be completely turned off from even having to use software like this. Simple games can be created with relatively little actual software code behind them (especially when using plug-in components and standard libraries).

The point here is that you can have one large project that is more of an application of the concepts that you are learning. I know this seems like requiring a 1st grader who is just beginning to learn how to write to be able to come up with a 30 page research paper with citations and endnotes, but I don't think it is that much of a leap as it may seem. Far too many people have taken a class like basic CS 101 (which is exactly what the AP Computer Science curriculum is duplicating on a high school level) and assume that most computer software is like the one or two page assignments they had to turn in. There is a very different way that you have to look at developing a larger piece of software compared to a typical quick and dirty assignment handed in for a CS 101 class. Perhaps having to debug a 3000 line piece of software will give some students the appreciation of why many software engineering projects (like the Denver Stapleton Airport baggage handling equipment software or many Y2K issues) seem to go on forever and don't seem to be solved, even after millions of dollars worth of effort being poured into them.

In addition, students in school need to learn that they can't simply be working alone and need to cooperate in a team development environment. That is true not only for software development, but for just about any sort of work experience that they are going to be dealing with in the future. By having a medium (3000 to 10,000 lines of code) piece of software that is developed jointly by several students, this is an ideal way to demonstrate the need for cooperation and negotiation that makes up the modern work environment. I don't know how you can test for that sort of experience through standarized testing, but this is a critical skill that many high school and even college graduates are seriously lacking. Students who cooperate and pull together are going to have a simply outstanding "final project" and students that can't get along are going to see something that won't even compile, much less do anything. A final project like this is also something cool to show off to parents and school administration, to show that yes, kids can do some amazing things. That AP courses don't do something like this is a fault of the instructor even considering it as an option.

As for reverse engineering and disassemblers, again I think it is a lack of imagination and creativity of the people who set up the original AP Computer Science guidelines that it wasn't even considered. My thought on these subjects was to have something that teacher could have that was very interesting, reflect on the experiences that students have gone through over the full length of the course, and introduce the idea that even with all of the material they have covered with the course that it is just the very beginning of a huge field of human knowledge that they have just taken some very baby steps into. Generally the last few days of class in a school year (especially for High School students) they are hardly paying attention anyway over what is being presented, and some teachers don't like to "teach for the test". If done properly, this can give an instructor the chance to make the last few days of class something very memorable and give them a reason to even show up to class (think a High School senior on his last day of class? Are they even going to be attending?). These topics also wouldn't be interfering with any final assignments that had to be handed in, as they are more lecture oriented as well. In short, a chance for an instructor to "let their hair down" and have fun with their kids. I am not advocating that an AP student is going to be writing a disassembler, but that perhaps they should have it explained what would go into a disassembler and how it can be useful. --Rob Horning 13:48, 5 March 2006 (UTC)


 * I agree completely that most computer science classes are taught in a very dry technical matter. In our class, every program was treated as an assignment rather than a creative or collaborative effort. We were never given a group assignment throughout the entire year mostly because some of the kids were very anti social (a caricature of a typical high school hacker). Our instructor was a very smart guy that knew a lot of stuff but he was a very procedural teacher that didn't require your creativity, just the bare minimum. Also he would always touch upon the topics that all of us wanted to do, such as hacking another computer over the school network or setting up a keylogger, and would even tell us the best way to do it, but we were never given the chance to work on it as a class project. Being the network administrator of the school district, it was easy to understand why, but it did get kind of annoying. He stuck with the curriculum and we worked on projects such as finding the most efficient path in a field. That could definately be applied to a game, but we never went much further than just finding the path.


 * So if you can present this book in a way that teaches or reviews every topic that is in the curriculum of an AP Compsci class, but in a matter that takes on projects such as games, disassemblers and all that fun stuff, then sure I'm all for this. All I meant to say last night was that they were never even mentioned in any actual AP Compsci textbook. I'm more interested in how you will approach those subjects now that I understand where you are planning on going with them. Themikeflynn 19:22, 5 March 2006 (UTC)


 * Well, at least in my school district, the APs are a full month and a half before school ends, so we used that time to work on a final project, often in pairs. I would also like to comment that that was a very helpful part of the class, because I learned that you cannot program anywhere near what you thought you could. On another note, this project, and other "needed" stuff like GUI, I/O, etc. not taught in AP CS AB should go after the AP CS material, because it is not tested. IMacWin95 15:07, 18 March 2006 (UTC)

New Member
Hi, y'all. I (Kjosib) am willing to help write some of this textbook. You might want to see what's been done with the intro and its talk page to see where I'm coming from. I've been programming professionally for some number of years, and my formal education was at UTexas. I'm going to be reviewing the updates to Java since I last used it professionally (2003) in the next while, and I should be able to help with a fair amount of the materials. I don't mind writing to the topics on the sylabus, because that's roughly what people are expected to learn in the corresponding real class. I've not seen the actual test in many years, so I won't be influenced by it. Besides, when I took it, the test was in Pascal. So anyway, I feel qualified, and if no one else does, I'm going to start posting more bits as and when I have time.


 * I hope that you do so. I was the person who wrote the initial outline, but got stretched very, very thin with projects going off in a couple hundred directions here on Wikibooks, together with the demands of being an administrator on two projects now (Wikibooks and Wikiversity).  That and I took a bit of a Wikibreak this past month just to take care of my personal life.


 * Still, the direction I tried to go with the outline was to cover important topics that are sometimes missed in introductory classes. This in particular was why I added the software engineering section almost right at the beginning, as this is something that kids interested in software development as a career should know as well as those who are to be general citizens should also be aware of even if it isn't explictly on the AP-CS test.  I could give countless examples from the Space Shuttle main computer software to the software disaster at the Denver Colorado Airport, where substantial quantities of money are spent on software engineering by taxpayers, often with litle or no accounting.  BTW, the Space Shuttle computer software is something of a model of success and is more of an example of how public agencies should be contracting with computer programmers.


 * As I tried to indicate, I also wanted to introduce the idea of GUI programming right from the beginning, hence the idea that classes, methods, and OOP programming concepts are something that will be also taught lightly in the beginning but elaborated upon later. Command-line programming is something that will be all but ignored and only dealt with as a special topic, not the primary way for beginning programmers to get their feet wet.  This isn't the 1970's and a command line prompt is hardly even seen by computer users any more.  --Rob Horning 23:13, 26 September 2006 (UTC)

We need to keep in mind that the rank beginner must be mentally prepared to read the book, follow the work, and learn enough to pass the AP test, at least at the A level. The College Board does not test user input in any form. As far as I'm concerned, that means you can put all the "input" in the source code in the form of initializers, and treat the programming process as a way to get the computer to solve hard problems for you. In this vein, it may be wise to emulate the instructional style of Barron's Calculus the Easy Way, in which an intrepid adventurer lands on the shores of a beleagured country desperately in need of solutions to calculus problems. I might concoct a Tron-like adventure wherein you must program your way out of a cardboard box.

It's true that modern beginners don't generally grok command lines. One way or another, you'll have to compile and run Java programs if you expect to learn Java and pass the test. That means that students must have a Java development environment set up on their computers. There are many. Some require the use of a command line, and some don't, but all provide console output, which is good because it's on the test.

The classic "Hello World!" program is similar to the first day in a decent foreign language class. You experience a greeting and salutation in the language you've set to learn, and soon enough you can participate in or initiate such action yourself. Nothing seems to make any sense for the first few weeks, but once you've studied for a while, it's hard to imagine not understanding such a simple utterance. The essential need is for a simple exchange which can be explained simply. GUI systems are not up to the "first week of programming" test. Furthermore, they are not generally illustrative of deep concepts in computer science. Instead, they tend to focus more on the software engineering and usability issues of complex systems.

GUI programming can be very satisfying, any many students may be motivated by the opportunity to construct programs which use a GUI. However, I don't mean to contribute to a book on GUI programming in particular. For starters, you'd have to pick a GUI framework. Then, you'd need to cover all manner of things about that framework. This is already done perfectly well by the people that created the GUI framework in the first place. The only obstacle is that you must know how to program and how to read code and its documentation, which this course can help.

Anything on GUI creation which is consistent with the goal of getting students past the AP test is fair game for inclusion in the book. However, please keep in mind that a GUI is not on the test. If the course introduces a concept, it should be for the furtherance of student understanding or motivation. You can probably get away with introducing some GUI work part way through. However, let's not go hog-wild. I think that some basic 2-D graphics programming is a good idea, and it can also motivate some interesting problems. For example, let's code some animation, perhaps simulating some physics along the way. This is closely related to game programming, and you'll keep interest that way.

I think that many, but not all, of the topics on the AP test can be covered by developing parts of video games. If some related exercises are left to the reader, then many students will have plenty of motivation to continue learning even after the course is done.

--Kjosib 13:15, 29 September 2006 (UTC)


 * I may end up taking this whole outline and moving it to another book, because as you are pointing out, the folks who make the AP CS test are hard core command line folks and we can't get around that.


 * Of course, this is "teaching for the test", which I hate and deplore, but in this situation it may be more of a ncecssity. If this textbook is to be taken seriously, we may have to completely cull the GUI material.


 * On the other hand, as I was trying to point out, in the real world GUI programming is going to be the rule rather than the exception, and any programmer who doesn't understand GUI programming, and I mean living and breathing it, is not going to go too far. Furthermore, I fail to see how with modern RAD-GUI development environments that it is any more difficult to program for a GUI than a CLI, and perhaps more complicated for the CLI.  That the test does not cover GUI development I find is a short coming of the test itself and its designers.  Of that I feel I can be critical of the AP test.


 * BTW, GUI development does not mean hard core computer graphics design and priciples. It just means throwing a few buttons and dialog boxes on a screen and pressing the compile button.  A good RAD environment can have a rank beginner be able to do this in five minutes, with some hand-holding by an instructor.  I would bet you could get a beginning programmer to develop a GUI window with the words "Hello world" and an OK button to close in far less time than you could get one to write a CLI version that does the same thing with string output functions.  --Rob Horning 21:38, 6 October 2006 (UTC)

Restarting development of this text
This text appears to have had very little development in over a decade. I'm an AP Computer Science A teacher who also has significant experience with curriculum development. I intend to build up this text with resources, projects, question banks, and updated information to turn it into a central free resource for studying for the exam. This may generate further interest and contributions as a wiki project. — Preceding unsigned comment added by Avisinthetoolbarn (talk • contribs)