It’s been quite a while since I last blogged and I thought I’d blog about something that I’ve thinking about in the interim.
The IB Program (International Baccalaureate) is a program that has a international curriculum and testing which has high standards and among other things, gives college credit. The IB Program is great and in some respects, primarily with it’s international reach, exceeds what most would need. However, the IB Program in my school, in Computer Science particularly, is exceedingly disorganized.
My school offers an Intro to Programming class that introduces Java (which is not my favorite language) and the basics of programming albeit weakly (and I’m talking basics like classes and arrays, not basics of computer science). I already knew programming so learning another language was as simple as picking up a new syntax and learning the (bloated) philosophy behind Java. It’s not so bad when you’re already a programmer who loves to program. For others though, it gets dirty from there.
The Intro class, from what I have been told and what I have seen, has been run differently each time. I’m not saying this is a problem in the least, differences is fine. My problem is that what I have seen in each separate iteration of the class is the lack of consistency. For example, when I took the class (which I imagine was the very first iteration) the use of the terminal was taught. In successive iterations, no terminal was found. (For those who know not what a terminal is, a programmer must generally compile their code, which is like baking a cake once you put the ingredients in a pan, mixed.) The Intro class doesn’t really have a set-in-stone curriculum, but that isn’t a problem, I’d adapt it for each year myself, but the problem is that not even the basics of Java are covered (in any real depth to an intimate understanding.) Understandably, user interfaces (for you non-programmers, UI’s are very difficult to program at any level) are not taught and only count for a tiny 5% at most in the IB Exam for Computer Science.
If one is going to each Java, fine, teach it to the fullest. If one is going to teach programming however, then, it is different. One must learn programming and that involves an entire approach. One must learn multiple languages and philosophies of programming (like classes, prototypes, functional, and for non-programmers, these are like cultures of food). Let’s focus on the impression I get out of the IB Computer Science class in my school.
I asked a junior (I think) last Friday about what they were working on in the IBCS (I’m shortening this now) class. They seem to be nearing completion on their giant project the dossier. The dossier is a huge project in the class that involves finding a person who has a problem and then going through the development process (note this) and working with them (for a while) and producing solutions and prototypes and eventually a (hopefully) working program. Well, I asked the junior what his thoughts were and he said he hadn’t really even started. I know this guy and I have no reason to think he is a slacker. I know the class though. The class is at root the problem. I found the few documents pertaining to the dossier as pdf’s in the IBCS class’ moodle. They explain little and show much less than the way things are graded and what (a single example at each level) would get what score. These documents, which can’t possibly be all that there is, don’t provide a reasonable foundation to build such a large project off of.
My belief is that there branches of computer science. First, programming which is the knowledge of syntax and language among the vast sea of source code. Second, theoretical concepts which range from programming structures (like linked-lists) to classes or prototypes. Third, (this is the dossier’s focus, from what I can tell) is what I call development. Development entails finding a person (a human being) to get a task from (to build a program) that would satisfy their needs (usually to improve a task). Development, starts off that way, but there is more, like the refinement of client needs, understanding, researching, thinking, suggesting solutions, prototyping and so on. This third branch of Computer Science is less Computer Science and more subtle than the other two in what I could call a totally different field of work (but it’s not, since you will need this to be a professional programmer at some point). Yet, I raise the concern that a high-school IBCS student wouldn’t need these skills at this time in their developmental progress in the field.
So, you’ve seen my first argument of why there is a problem? Let me clarify. IBCS students (in my school) should not be overly concerned about development at this point in their developmental progress in the (CS) field. This of course doesn’t mean I don’t want them to go through with the dossier. In fact, I would like them too. What I’m asking for is transparent explanations about what exactly is required and how to go about it. Let’s examine a problem.
These students have only taken the weak Intro to Programming class (which is Java-only [though I admit that IB is Java-only]) so these students must spend additional time in the IBCS class learning more Java. So, then, you ask them to go help a real person with a problem. I propose (and you non-programmers can do this too) that you think about all of the hard things you do daily that are data-oriented (in other words, something a computer could handle better) and think of a way to make whatever that activity is, better, with a computer. Now, (non-programmers too), I want to you to think about the first image that came to your mind. Did you think of a black box with white text? I bet you didn’t. I bet you first saw a nice user interface, with buttons and menus, if you saw anything at all. Here’s the point. You can’t realistically improve any one’s life (or a task-driven system) with a black box with white text (I’m refering the terminal which I mentioned earlier). A User Interface is an unspoken requirement that all non-programmers would immediately assume is a given. Programmers generally could also. What does this to have the development argument?
As it stands, these students know nothing about User Interfaces (where no blame is given to them or anyone else, for no mortal should attempt it without a IDE and/or immortality). The thing is that this development-oriented project relies on that one crucial thing, it seems, from the sparse documentation I find. It requires that you find a person that you can do something for. So I walk up to my librarian and, for example, I tell her I’ll try to design/program/etc a problem for her needs. So she tells me about some problem she has being a librarian, like keeping track of who enters the library for using books or the computers. This example is slightly less data-oriented than most dossiers would be, but it suffices. The librarian would explain to the programmer than before a person can enter the library, they must write down their name and student ID number or something. Then she’ll face the problem of checking the time if a student doesn’t show up at the proper place. And then storing those records for years because there is always a chance a dispute could come up. The dossier student will then probe her ideas and think of more questions and raise more points. Generally, this is fine, if you found a client, (and I’m saying that is hard enough) but then, you explain what this would look like to the librarian. She has no idea that you’re a mortal programmer (only immortals can create User Interfaces) and you suddenly tell her your idea and present a prototype. She has no idea what you were doing because her entire perception of a program is a UI. Of course, you can improve the situation as it is with your prototyped solution of a system. It would improve it from it’s current paper-booking state, but at what cost? Would seriously expect a black box with white text to be on the screen (of a computer) and have a student type their name and sID when they walk in? I could, yes, but I can also think of a thousand problems with using a terminal-based approach to this. What of the librarian? What if she needs to search through the system to check if a student was really in the library when they were said to be? Well, she would normally click on a search records button and type the student’s name and a list of results would appear if there were any. Yet, with a terminal based approach, things like this aren’t as nice. It’s an entire different world.
Okay, enough about that argument right? I agree. Let’s focus on another aspect of IBCS that irks me. The lack of information compared to APCS. For one, I can google AP Computer Science and I can google IB Computer Science and I get an entire different list of things. The first thing you notice is that with the IB search, you get a site with resources but to every one’s surprise, it’s not from IBO. With the AP search though, you get top results from the College Board who have set up the AP Exam. Interesting? And you find an exquisite listing of AP Computer Science from wikipedia (which includes so much you should just look for yourself) compared to the bland search results you get in the IB search.
So, why did I blog about this anyway? I’m tired of gripping about this subject to my limited number of friends I talk to who are interesting in programming. I’m tired of the IB Program (in my school) not having a reason to be taken in place of an AP class. While there is no APCS class at my school I would take it in a heart beat. I have a limited perception of each class however I currently see less potential in the IB classes. Why? It’s perception and opinion and based on my research (limited though) and gut feeling (that changes when I eat). I had to rant about this finally so that someone can tell me I’m wrong (I’ll mope around if you do that though) or that I’m right (I’ll glow if you do that though) so I can get it over with.Ã‚Â I had to pick my classes for my Junior year last week and I picked IBCS as one of classes. I’m not going to drop it either. I’d much rather go through it and force them to change it to reasonable class.
Have a good week.