Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007
My name's Peter Budny. I took CS 2340 a while ago, but these pages never disappear, and Google still finds this page. So I've edited it to be something useful.
And by something useful, I mean a link to my résumé.
And now back to the original content of the page.
The specialization classes I've done so far are OS (3210), Networking (3251), Databases (4400), and I'm currently in 4240, the compilers course.
I study Japanese, and will be getting a minor in it. I've done through Japanese 3001, and I studied abroad the summer before last for 6 weeks. I'm not fluent, but I can carry on a conversation with a native speaker.
I also sing very enthusiastically. Did you even know that Georgia Tech has choirs? Well, it has three of them, and they're all easy 1-hour A's.
The article I read was the first of several articles which details thoughts on "teaching languages" suitable for introducing first-year students to object-oriented thinking. They assert that it is not object-orientation which is difficult, only the transition from procedural programming which takes time. First-year students who have no formal training in programming and who are introduced to object-oriented programming pick it up quickly compared to students who are first taught procedural programming.
They then describe a list of qualities which would make for an ideal object-oriented language for first-year students. Some of these qualities conflict with each other, but as there is no perfect programming language, they are unconcerned with this; the list is simply a guide to determining the suitablility of a language for first-year students. Their list includes:
- Clean concepts - The explanation of an abstracted idea in class should parallel the construct in the language.
- Pure object-orientation - A language which easily permits procedural programming allows students to continue in their bad habits instead of forcing them to think in an object-oriented way.
- Safety - Type checking, bounds checking, and pointers are all trouble spots for students, and should not be an issue in a teaching language.
- High level - A teaching language should not force the programmer to worry about the internals of the computer, particularly memory allocation.
- Simple object/execution model - Programmers should not have to distinguish in the language between, say, objects in the stack and objects on the heap.
- Readable syntax - Today many programmers spend at least as much time reading code as they do writing it. The language should reflect this and make code easy to read, rather than easy to write.
- No redundancy - There should only be one way to do something in a language.
- Small - Teachers should not have to use just a subset of the language, as this is non-ideal for both the students and teachers.
- Easy transition - Students who have learned this language should learn programming principles, which they can then apply to other languages.
- Correctness assurance - The language should natively support software engineering principles used to assure that the program is correct.
- Environment - Perhaps the most important point, according to the authors, the language should have an environment that hides everything not directly related to the language, encourages easy development, and deeply supports the object-oriented paradigm.
The authors then discuss several languages.
- C++ fails to meet almost every requirement. It is a hybrid language (procedural and object-oriented), has many redundant constructs, an overly-complete library, an unsafe type system, baroque syntax, and a complex execution model.
- Smalltalk meets many of the needs very well, but fails on a few. It ignores some fundamental object-oriented concepts like public/private distinctions, has incredibly dynamic typing, a syntax that is awkward and almost entirely unlike most other languages, and a very rich function library that can be overwhelming.
- Eiffel comes the closest to being ideal, but also fails in a few places. It has some constructs which are duplicated simply for efficiency reasons, with the caveat that some constructs cannot be used for certain tasks. It is a very large language, and has an enviroment which is not at all suited for teaching general programming techniques. There is also no good development environment environment for it.
- Java is a popular language for teaching OO, but it has a few problems. It is not a very clean implementation of OO, as demonstrated by the redundant "int" and "Integer" types. Also, the very first thing students must write is "public static void main (String args)", which brings up several concepts that should not be taught early in the course. It uses the poor C/C++ syntax, and can depend heavily on type casting. It compares very favorably to C++, but still fails to meet several key requirements.
In short, the authors have found that all the common languages used for teaching OO do not meet various goals that would make them ideal teaching languages. The most common problem is that the languages are general-purpose, which means they are much richer than a teaching language should be, and they usually do not implement OO in a clean manner. In a later article the authors explore a language they developed which attempts to meet these ideals. (I did not read that article yet.)
I read Kevin Adkisson's summary of an article that discusses how easily different languages allow implementation of a purely OO program. This would seem to be a point which the authors of my article did not consider or address, assuming instead that all languages make it equally easy to properly implement a program using purely OO techniques. Put under another light, it seems that the qualities which make for a good teaching language–clean concepts, simple model, and pure object-orientation–would guide the programmer to using a more "correct" object-oriented model, but the language can still make it easier for the programmer to "slip" and fall back on more familiar procedural constructions.
Discussion 2 - Peter Budny
Links to this Page