Umm, saint. I'm just curious(this is not a flame by the way and don't take it as one) how you can pass college classes if you can't capitalize your Is and proper nouns.
Warning warning!!! This is NOT A FLAME!!!!!
;-)
Thanks for writing a good article Katz; it might not be an original idea, but it is an insightful reminder to us in the universe of 'net.
As a person who took the AP Computer Science B test(credit for 2 semesters) with a perfect score(I had time to comment my code:), I find the hubub over the choice of Java rather interesting.
First, I want to make it clear that the CollegeBoard AP tests don't test OOP at all, not even in the 'advanced' test. They test a subset of normal programming techniques not limited to any single programming language. The 'toughest' thing on last year's test was a series of questions on tree data structures. So all this talk about OOP or not really is unfounded.
This brings us to a good question: is Java an ideal learning language? What should someone look for in a first language? Should they look for the same things they look for in a 'best' language, should they look for an 'easy' language, or should they look for something different?
IMHO, they should look neither for an easy-to-learn language nor an ideal working language.
Take Java for example: Java is fundamentally object oriented- to teach Java would be to introduce a topic early on that is usually reserved for later classes and isn't even tested by the AP tests. It was tough enough for my fellow students to understand recursion without trying to teach them object-oriented-programming before they even know what a data structure is!
But let's look at an 'easy to learn' language like Basic. The problem with Basic is that it's too basic, that they'll have to re-learn programming to a large degree once they do some real programming later on.
So what do I suggest as a language to teach students with?
Good ol' C++(or any close derivitive like Perl). Now before you flame me to death, here's my reasoning: When we teach someone a language, we want to teach them a language that is conceptually incrementive, that is to say that it is possible to start them with the very simple things and then move them to more complex things without requiring complex understanding(ie oop) right at the beginning. C++ and its close derivatives are also desirable because they include a full set of programming capability. Students are not hindered by lack of functionality in C++ and its derivatives. Thirdly, one must choose a language that resembles as many other languages as possible. This accomplishes(almost) the effect of learning in algorithmic notation(the benefit of which is language independence), since the student would(ideally) be able to move to other languages without having to relearn language syntax.
Certainly, Java is a wonderful language, but teaching Java to beginning programmers is a faulty system, since it introduces them to OOP too early and because of its OOPness, students cannot as easily move to other, non OOP languages after learning in Java.
I think that Java is certainly one of the better languages to learn in, but I firmly believe that C++ || Perl are the ideal languages to teach beginning students
Sure, badly written C++ and Perl are horrible Kludges, but it can also be coded elegantly. Anyone can write obfuscated code; the language itself is neither obfuscated or elegant. That is up to the teacher.
Free Software(Open Source, whatever) was not originally conceived as a business model. If you want to make tons of money(as the FSF song goes), don't do Open Source. If you want to make a little less money yet help your neighbor(again as the FSF song goes), develop Free Software
In my experience, Free Software has been developed by the people that use it. If it is their job to use or create it for someone else that uses it, then they will make money. No- they won't make piles of cash, but they'll have a lot more fun doing it.
Umm, saint. I'm just curious(this is not a flame by the way and don't take it as one) how you can pass college classes if you can't capitalize your Is and proper nouns.
Warning warning!!! This is NOT A FLAME!!!!!
;-)
Thanks for writing a good article Katz; it might not be an original idea, but it is an insightful reminder to us in the universe of 'net.
As a person who took the AP Computer Science B test(credit for 2 semesters) with a perfect score(I had time to comment my code :), I find the hubub over the choice of Java rather interesting.
First, I want to make it clear that the CollegeBoard AP tests don't test OOP at all, not even in the 'advanced' test. They test a subset of normal programming techniques not limited to any single programming language. The 'toughest' thing on last year's test was a series of questions on tree data structures. So all this talk about OOP or not really is unfounded.
This brings us to a good question: is Java an ideal learning language? What should someone look for in a first language? Should they look for the same things they look for in a 'best' language, should they look for an 'easy' language, or should they look for something different?
IMHO, they should look neither for an easy-to-learn language nor an ideal working language.
Take Java for example: Java is fundamentally object oriented- to teach Java would be to introduce a topic early on that is usually reserved for later classes and isn't even tested by the AP tests. It was tough enough for my fellow students to understand recursion without trying to teach them object-oriented-programming before they even know what a data structure is!
But let's look at an 'easy to learn' language like Basic. The problem with Basic is that it's too basic, that they'll have to re-learn programming to a large degree once they do some real programming later on.
So what do I suggest as a language to teach students with?
Good ol' C++(or any close derivitive like Perl). Now before you flame me to death, here's my reasoning: When we teach someone a language, we want to teach them a language that is conceptually incrementive, that is to say that it is possible to start them with the very simple things and then move them to more complex things without requiring complex understanding(ie oop) right at the beginning. C++ and its close derivatives are also desirable because they include a full set of programming capability. Students are not hindered by lack of functionality in C++ and its derivatives. Thirdly, one must choose a language that resembles as many other languages as possible. This accomplishes(almost) the effect of learning in algorithmic notation(the benefit of which is language independence), since the student would(ideally) be able to move to other languages without having to relearn language syntax.
Certainly, Java is a wonderful language, but teaching Java to beginning programmers is a faulty system, since it introduces them to OOP too early and because of its OOPness, students cannot as easily move to other, non OOP languages after learning in Java.
I think that Java is certainly one of the better languages to learn in, but I firmly believe that C++ || Perl are the ideal languages to teach beginning students
Sure, badly written C++ and Perl are horrible Kludges, but it can also be coded elegantly. Anyone can write obfuscated code; the language itself is neither obfuscated or elegant. That is up to the teacher.
/me pulls on his asbestos pants
Free Software(Open Source, whatever) was not originally conceived as a business model. If you want to make tons of money(as the FSF song goes), don't do Open Source. If you want to make a little less money yet help your neighbor(again as the FSF song goes), develop Free Software
In my experience, Free Software has been developed by the people that use it. If it is their job to use or create it for someone else that uses it, then they will make money. No- they won't make piles of cash, but they'll have a lot more fun doing it.