Domain: holtsoft.com
Stories and comments across the archive that link to holtsoft.com.
Comments · 13
-
Ontario Highschool Fun
In Ontario (Canadian province in case you are wondering) there is highschool competition organized by the ECOO (Educational Computing Organization of Ontario) http://www.ecoo.org/ecoocs/Contests.html. when I took part in them there was no age restriction, I took part in all of them once I knew of their existance.
Its generally is in teams of 4 and you are provided a set of 4 problems and have 2 hours to solve them. 4 people 4 problems, does not sound bad, until you notice you have 30mins to code and test. There are bonus points for handing in sollutions earlier (the faster you do, the better bonus), also, there is bonus for flawless first attempt.
As per the language, I dont think there is a restriction. First year we wrote in QuickBasic (closest to my c64 basic), the other years we wrote in Turing (another Ontario specific thing, Turing is a language developed for Ontario Highschools by HoltSoft / University of Toronto http://www.holtsoft.com/turing/).
Choose a language you know well and dont have alot of trouble getting to work with. One year a team showed up with their own pc (requirement at higher levels), but could not work with their tools.
Some questions are simple, here are some I remember:
1) draw a star provided you know the number of spikes
2) game of life
3) kernel / process simulation
It is assumed you know what a highschool student should know, hence trigonometry is not explained, but for game of life or the kernel/process simulation the problem was explained in detail.
One question we were given (third stage) was:
1) here is a formula for volume of tetrahedron
2) here are 4 points, calculate the volume
3) here is another point, tell us if this point lies within the tetrahedron
we were at a loss, how were we to know if the point lies or not? My friend who had this problem (I had kernel/process simulation, but was writting way too verbose code that amounted to nothing) knew that answer lies within the question, and tried to get us to help him, but 4 people 4 problems, everyone had own thing to do.
So what we did? cheated... ;D ... we calculated the volume, and then just always said 'yes' that the 5th point was within. We got volume properly on all counts and 3 of the points properly. The Judge told us that our neighbouring team coded 'no' for the answer, hence got only 2 of the points right and was contemplating weather to rerun the test (judges have alternative data sets for second runs) and hope if they could get better results ;D.
For Canadian Highschoolers there is another contest being run, this time by one of the Worlds best computer universities, the University of Waterloo (watcom = Waterloo Compilers, Sybase and RIM are also Waterloo graduate startups). Its called Canadian Computing Competition http://cemc.uwaterloo.ca/ccc/index.shtml. Unfortunatelly I never took part in this as no one at my school knew of it, and when I became informed it was too late.
Finally, for university studs there is the ACM competition, the mother of all computer competitions. Checkout the problems archive, if you solve one question a day you will have years of fun http://www.inf.bme.hu/contests/tasks/
Both in my highschool and my university people who were interested in competition banded together and ran clubs that were mentored by knowledgable people who were out to help us.
In highschool by last grade we coded basic stuff in ASM, C, C++, Watcom Basic, QBasic, Watcom Pascal, Borland/Turbo Pascal, Turing, OOTuring. I with my friend for class project did simple statistics based AI in bp. Heck, we went through all sorting methods. I had nothing to do at University for first 2 years, computer programming wise.
ahh, those were the times... -
Turing Programming Language
And here I was all exciting about the Turing Programming Language being used in testing. Slashdot and it's deceptive bait-and-switch
:)
For those of you curious ones:
http://www.holtsoft.com/turing/
One of the greatest languages you'll find at the basic level, with advanced graphic capabilities, and a really well-thought-out syntax. It's an impressive, powerful language (as far as powerful for DOS and it's graphics modes, pointer interface, etc can be). Not to mention ability to convert to EXE and a fast interpreter.
-M -
Re:What do they teach in undergrad now?
You mean something like this?
The University of Toronto used to use it for their first-year undergrads (they now have switched to Java). It was (and, I believe still is) being used in many high schools in Ontario, Canada to teach programming.
I started learning Turing in high school. It was quite a good interpreted language, and while it generally was safe to use, it was also capable of some pretty advanced things too. It was also quite similar to Pascal, which is what made me think of this. -
Re:HTML
While I hated it when I was in high school (mostly because I had a programming background), Turing, developed by Holt Software, is a pretty neat pascal-derivative language. It enforces good style in that there is no "goto" statement, a big problem with BASIC. Plus it has a lot of fun graphics mode routines like drawfillmapleleaf() for wasting classroom time... I mean... studying!
It's got a fairly decent IDE with syntax highlighting and the like, and even a compiler should you want to redistribute your dinky little maple leaf assassins. There was also an Object-Oriented Turing (OOT) available, but once you're into OO I'd say you should move to a real language like Java. -
JRE is NOT freely redistributable!
People might like to look at the JRE license agreement before they talk about free redistribution. The agreement *clearly* states that it's *only* allowed to be redistributed for the *sole* purpose of running the *accompanying* Java program. (JRE 1.2 and above)
In other words, you can't give JRE to somebody else to allow them to run their program.
How do I know this? I've been trying to get permission from somebody at Sun to redistribute the JRE with our educational Java IDE for months. So far, no go. Even worse, you can't even purchase a license to redistribute it because it's "freely redistributable" and there is no provision at Sun for licensing it :-(.
My sales guy at Sun has tried heroically, but the lawyers have the final say.
Now, we're just small (well, miniscule) fry compared to the manufacturers, but it certainly means prolonged negotiation with Sun before obtaining permission to put it on their machines. -
Difficulties with Java in High School/CS1
While Java is usually considered more suitable than C++ for CS1, Java has a number of deficiencies from an educational perspective.
Remember that in general, the only issues that matter are those that make it harder to teach the general CS1 concepts. Speed of Java execution is *not* an issue for most. (By the way, please note the word "in general" and "most". There are counter-examples, but one generalizations about the teaching of CS1 are, in my experience, fairly accurate.) For what its worth, my experience is 14 years of producing/selling resources for teaching computer science in universities/high schools.
(1) No simple I/O package. To read an integer from the keyboard takes multiple lines of code. Most programs are not pedagogically improved by adding mandatory error trapping. The solution, of course, is helper classes. My company produces its own, but many are available free over the net. Interestingly enough, while 2 years ago, most university teachers were not interested in helper classes, or in books using them ("I teach pure Java"), there has been a fundamental shift towards the use of them over the last year. The other alternatives are a lot of handwaving ("use this block of code, don't ask why") or using applets only or have all your examples carefully not every need integer input from the keyboard. Each of these techniques are used in different books.
(2) References are Hidden. The fact that many variables are references and can't be treated the same way as primitive data types. This is a personal gripe of mine. I'd say that about 50+% of students who've completed CS1 can't give a clear answer as to what happens when you say "a=b" when both are references. Java doesn't help the situation with the class that most students first encounter - String. Because String is immutable, you can say "a=b" and it works. Even worse, most of the time you can get away with "a==b" for a comparison (because Java efficiently caches identical strings). I spend an inordinate amount of the Java courses I teach (to teachers, mostly) on this problem.
(3) C++ Syntax. In other words, a misplaced semicolon can still waste many hours of student's time for little pedagogical gain. Of course, this was simply a marketing trade off in the creation of Java.
(4) Overly complex environments. Of course, development is focused where there's money, which means education gets (for very little money, mind), what's developed for business. For educators, you generally want an environment that has the basic features but can get students writing programs within about 15 minutes. There are a few educationally focused Java IDEs out there. We have our own (Ready to Program), but there a number of others suitable IDE's out there such as BlueJ.
(5) The Java class libraries. This is both a good and a bad thing. With C++ there was never any question about teaching the Windows API. It just wasn't done. But with Java, you *have* to use part of the class libraries, and from there, it's a slipperly slope to (HORROR!) graphics, applets and GUIs. These can add a lot to a course, however, what concepts get eliminated so that you the fun stuff?
Aside: I've noticed a distinct reluctance when people suggest what should be added to CS1 to also suggest what should be removed so that it can fit. You only have so much time.
Anyway, that's a mini-capsule of what we've found. I could go on for hours (and do, as a few people at NECC will find out :-)).
Another Aside: Does anyone know any web sites that cover this topic in depth? I've been amazed at the paucity of web sites about high school/university CS instruction in general (lots of good individuals posting content, but few general resource gathering sites). -
Difficulties with Java in High School/CS1
While Java is usually considered more suitable than C++ for CS1, Java has a number of deficiencies from an educational perspective.
Remember that in general, the only issues that matter are those that make it harder to teach the general CS1 concepts. Speed of Java execution is *not* an issue for most. (By the way, please note the word "in general" and "most". There are counter-examples, but one generalizations about the teaching of CS1 are, in my experience, fairly accurate.) For what its worth, my experience is 14 years of producing/selling resources for teaching computer science in universities/high schools.
(1) No simple I/O package. To read an integer from the keyboard takes multiple lines of code. Most programs are not pedagogically improved by adding mandatory error trapping. The solution, of course, is helper classes. My company produces its own, but many are available free over the net. Interestingly enough, while 2 years ago, most university teachers were not interested in helper classes, or in books using them ("I teach pure Java"), there has been a fundamental shift towards the use of them over the last year. The other alternatives are a lot of handwaving ("use this block of code, don't ask why") or using applets only or have all your examples carefully not every need integer input from the keyboard. Each of these techniques are used in different books.
(2) References are Hidden. The fact that many variables are references and can't be treated the same way as primitive data types. This is a personal gripe of mine. I'd say that about 50+% of students who've completed CS1 can't give a clear answer as to what happens when you say "a=b" when both are references. Java doesn't help the situation with the class that most students first encounter - String. Because String is immutable, you can say "a=b" and it works. Even worse, most of the time you can get away with "a==b" for a comparison (because Java efficiently caches identical strings). I spend an inordinate amount of the Java courses I teach (to teachers, mostly) on this problem.
(3) C++ Syntax. In other words, a misplaced semicolon can still waste many hours of student's time for little pedagogical gain. Of course, this was simply a marketing trade off in the creation of Java.
(4) Overly complex environments. Of course, development is focused where there's money, which means education gets (for very little money, mind), what's developed for business. For educators, you generally want an environment that has the basic features but can get students writing programs within about 15 minutes. There are a few educationally focused Java IDEs out there. We have our own (Ready to Program), but there a number of others suitable IDE's out there such as BlueJ.
(5) The Java class libraries. This is both a good and a bad thing. With C++ there was never any question about teaching the Windows API. It just wasn't done. But with Java, you *have* to use part of the class libraries, and from there, it's a slipperly slope to (HORROR!) graphics, applets and GUIs. These can add a lot to a course, however, what concepts get eliminated so that you the fun stuff?
Aside: I've noticed a distinct reluctance when people suggest what should be added to CS1 to also suggest what should be removed so that it can fit. You only have so much time.
Anyway, that's a mini-capsule of what we've found. I could go on for hours (and do, as a few people at NECC will find out :-)).
Another Aside: Does anyone know any web sites that cover this topic in depth? I've been amazed at the paucity of web sites about high school/university CS instruction in general (lots of good individuals posting content, but few general resource gathering sites). -
The choice is only Java or C++
My company has had some experience with the C++/Java debate. Its sole business is providing materials for CS instruction in high schools and universities.
For the vast majority of high schools, the AP determines the sole language of instruction.
For the vast majority of colleges and universities, the perception of industrial relevance by the students and non-CS administration mandates what language will be used, regardless of the suitability for pedagogical purposes. Otherwise they might be using Pascal, Python or Turing.
What this means is that most faculties can only realistically teach either C++ or, now, Java. C++ was not well liked for a huge variety of documented reasons. We were able to give out 600+ "C++ Sucks!" buttons to attendees at the SIG-CSE (Computer Science Education conference) mostly on the strength of educators being forced to use a language that they considered unsuitable for use as a first language. Or as one educator put it:
If we don't teach C++, nobody takes the course. If we do teach C++, nobody passes the course.
Sun's marketing of Java has allowed it to be perceived as industrially relevant by the student body, who generally get their information from newspapers, magazines and want-ads. This means that Java has become an acceptable choice for teaching first year computer science.
(Generally, AP follows the general trend of CS1 a few years later. The quick switch from C++ to Java indicates, in my mind, a lot of unhappiness of high school teachers teaching C++.)
When weighing Java vs C++, it's not too suprising the Java comes out ahead in the minds of most CS educators.
Remember that, in general, the only real goal is the efficacy of the language in teaching the concepts covered in CS1. Things like actual efficiency (as opposed to the order of algorithms) is not really a concern of CS1. Things like garbage collection vs explicit freeing are also beyond CS1's purview.
Hence they look at syntax issues, ease of expression of algorithms, etc.
All opinions are mine, not my company's. -
The choice is only Java or C++
My company has had some experience with the C++/Java debate. Its sole business is providing materials for CS instruction in high schools and universities.
For the vast majority of high schools, the AP determines the sole language of instruction.
For the vast majority of colleges and universities, the perception of industrial relevance by the students and non-CS administration mandates what language will be used, regardless of the suitability for pedagogical purposes. Otherwise they might be using Pascal, Python or Turing.
What this means is that most faculties can only realistically teach either C++ or, now, Java. C++ was not well liked for a huge variety of documented reasons. We were able to give out 600+ "C++ Sucks!" buttons to attendees at the SIG-CSE (Computer Science Education conference) mostly on the strength of educators being forced to use a language that they considered unsuitable for use as a first language. Or as one educator put it:
If we don't teach C++, nobody takes the course. If we do teach C++, nobody passes the course.
Sun's marketing of Java has allowed it to be perceived as industrially relevant by the student body, who generally get their information from newspapers, magazines and want-ads. This means that Java has become an acceptable choice for teaching first year computer science.
(Generally, AP follows the general trend of CS1 a few years later. The quick switch from C++ to Java indicates, in my mind, a lot of unhappiness of high school teachers teaching C++.)
When weighing Java vs C++, it's not too suprising the Java comes out ahead in the minds of most CS educators.
Remember that, in general, the only real goal is the efficacy of the language in teaching the concepts covered in CS1. Things like actual efficiency (as opposed to the order of algorithms) is not really a concern of CS1. Things like garbage collection vs explicit freeing are also beyond CS1's purview.
Hence they look at syntax issues, ease of expression of algorithms, etc.
All opinions are mine, not my company's. -
Main Reason They SwitchedSpeaking as someone employed by a company whose raison d'etre is computer science education, the reason is simple. The wave towards using Java in CS1 courses in high schools and universities is actually turning out to be a tsunami.
Programming language choice is most colleges and universities is a attempt to mix teachability with the appearance of industrial relevance. (Note I say appearance because in most cases, the whole industrial relevance thing is a bugaboo of students. The educators know that whatever they teach, the students will, in all likelihood, eventually use a different language. However, students (and some administrators) tend to freak if they are learning a language they've never heard of.)
Unfortunately, until recently, the only language that passed the "appearance of industrial relevance" test was C++, perhaps the world's worst language for teaching (not counting BASIC). Educators realized this, but couldn't do much about it. One educator put is succinctly.
If we don't teach with C++, nobody takes the course. If we do teach with C++, nobody passes the course.
Our anecdotal evidence of the teachability of C++ was that a few years ago, our company attended the SIG-CSE (Computer Science Education) conference with a few hundred "C++ Sucks!" buttons, figuring a few educators might be unhappy with the language. (Our company does not provide C++ teaching materials because we feel that pedagogically, C++ is unsound.) Anyway, two hours after the conference began, we had to phone home to have the remainder of the buttons expressed to us. We gave away some 600 in about 8 hours of booth time
:-). (Admittedly, we didn't make any converts to our language, but it sure gave a reflection of general sentiment about C++.)Anyway, with the advent of Java, educators finally had a choice. It's not perfect (they had to keep with a C-like syntax (and those damn semi-colons) for marketing reasons), but it's got most of the features that allows educators to focus on concepts rather than language idiosynchrasies. (Safe pointers, array bounds checking and for heaven sakes, real booleans...). Even we, teachability bigots that we are, felt that we could support Java in education in good concience. And, most important of all, there are stacks of trade books and magazine articles about Java that most students equate with industrial relevance. When we surveyed American universities and colleges a few years ago, we found that even institutions that had just switched to C++ were considering switching to Java (and I can tell you, there's usually at least five years of recovery to bury the bodies and rebuild the facilities after a language switch war
:-).)Java use in CS1 and CS2 may never be as ubiquitous as Pascal was 10/15 years ago, but it may well be close (unless the next hot language is even more teachable).
Since AP is meant to replace introductory computer science courses, it only makes sense for AP to use the language it's replacing. This despite the fact that, as many have pointed out, most high school teachers do not have the background or the professional support that will make learning a new language easy. It's a major undertaking that will force a burden on computer science teachers for which there is no equivalent in other subjects. (Sort of like being told that your language in the workplace is switching to French in two years, so get started learning...) Sadly, if history is any guide, most states will not provide any form of professional development to teachers. I'd ask those who choose to disparage teacher's abilities whether they'd be willing to make teaching their career. It's funny how few are willing to take a 50-75% pay cut
:-). -
Main Reason They SwitchedSpeaking as someone employed by a company whose raison d'etre is computer science education, the reason is simple. The wave towards using Java in CS1 courses in high schools and universities is actually turning out to be a tsunami.
Programming language choice is most colleges and universities is a attempt to mix teachability with the appearance of industrial relevance. (Note I say appearance because in most cases, the whole industrial relevance thing is a bugaboo of students. The educators know that whatever they teach, the students will, in all likelihood, eventually use a different language. However, students (and some administrators) tend to freak if they are learning a language they've never heard of.)
Unfortunately, until recently, the only language that passed the "appearance of industrial relevance" test was C++, perhaps the world's worst language for teaching (not counting BASIC). Educators realized this, but couldn't do much about it. One educator put is succinctly.
If we don't teach with C++, nobody takes the course. If we do teach with C++, nobody passes the course.
Our anecdotal evidence of the teachability of C++ was that a few years ago, our company attended the SIG-CSE (Computer Science Education) conference with a few hundred "C++ Sucks!" buttons, figuring a few educators might be unhappy with the language. (Our company does not provide C++ teaching materials because we feel that pedagogically, C++ is unsound.) Anyway, two hours after the conference began, we had to phone home to have the remainder of the buttons expressed to us. We gave away some 600 in about 8 hours of booth time
:-). (Admittedly, we didn't make any converts to our language, but it sure gave a reflection of general sentiment about C++.)Anyway, with the advent of Java, educators finally had a choice. It's not perfect (they had to keep with a C-like syntax (and those damn semi-colons) for marketing reasons), but it's got most of the features that allows educators to focus on concepts rather than language idiosynchrasies. (Safe pointers, array bounds checking and for heaven sakes, real booleans...). Even we, teachability bigots that we are, felt that we could support Java in education in good concience. And, most important of all, there are stacks of trade books and magazine articles about Java that most students equate with industrial relevance. When we surveyed American universities and colleges a few years ago, we found that even institutions that had just switched to C++ were considering switching to Java (and I can tell you, there's usually at least five years of recovery to bury the bodies and rebuild the facilities after a language switch war
:-).)Java use in CS1 and CS2 may never be as ubiquitous as Pascal was 10/15 years ago, but it may well be close (unless the next hot language is even more teachable).
Since AP is meant to replace introductory computer science courses, it only makes sense for AP to use the language it's replacing. This despite the fact that, as many have pointed out, most high school teachers do not have the background or the professional support that will make learning a new language easy. It's a major undertaking that will force a burden on computer science teachers for which there is no equivalent in other subjects. (Sort of like being told that your language in the workplace is switching to French in two years, so get started learning...) Sadly, if history is any guide, most states will not provide any form of professional development to teachers. I'd ask those who choose to disparage teacher's abilities whether they'd be willing to make teaching their career. It's funny how few are willing to take a 50-75% pay cut
:-). -
Main Reason They SwitchedSpeaking as someone employed by a company whose raison d'etre is computer science education, the reason is simple. The wave towards using Java in CS1 courses in high schools and universities is actually turning out to be a tsunami.
Programming language choice is most colleges and universities is a attempt to mix teachability with the appearance of industrial relevance. (Note I say appearance because in most cases, the whole industrial relevance thing is a bugaboo of students. The educators know that whatever they teach, the students will, in all likelihood, eventually use a different language. However, students (and some administrators) tend to freak if they are learning a language they've never heard of.)
Unfortunately, until recently, the only language that passed the "appearance of industrial relevance" test was C++, perhaps the world's worst language for teaching (not counting BASIC). Educators realized this, but couldn't do much about it. One educator put is succinctly.
If we don't teach with C++, nobody takes the course. If we do teach with C++, nobody passes the course.
Our anecdotal evidence of the teachability of C++ was that a few years ago, our company attended the SIG-CSE (Computer Science Education) conference with a few hundred "C++ Sucks!" buttons, figuring a few educators might be unhappy with the language. (Our company does not provide C++ teaching materials because we feel that pedagogically, C++ is unsound.) Anyway, two hours after the conference began, we had to phone home to have the remainder of the buttons expressed to us. We gave away some 600 in about 8 hours of booth time
:-). (Admittedly, we didn't make any converts to our language, but it sure gave a reflection of general sentiment about C++.)Anyway, with the advent of Java, educators finally had a choice. It's not perfect (they had to keep with a C-like syntax (and those damn semi-colons) for marketing reasons), but it's got most of the features that allows educators to focus on concepts rather than language idiosynchrasies. (Safe pointers, array bounds checking and for heaven sakes, real booleans...). Even we, teachability bigots that we are, felt that we could support Java in education in good concience. And, most important of all, there are stacks of trade books and magazine articles about Java that most students equate with industrial relevance. When we surveyed American universities and colleges a few years ago, we found that even institutions that had just switched to C++ were considering switching to Java (and I can tell you, there's usually at least five years of recovery to bury the bodies and rebuild the facilities after a language switch war
:-).)Java use in CS1 and CS2 may never be as ubiquitous as Pascal was 10/15 years ago, but it may well be close (unless the next hot language is even more teachable).
Since AP is meant to replace introductory computer science courses, it only makes sense for AP to use the language it's replacing. This despite the fact that, as many have pointed out, most high school teachers do not have the background or the professional support that will make learning a new language easy. It's a major undertaking that will force a burden on computer science teachers for which there is no equivalent in other subjects. (Sort of like being told that your language in the workplace is switching to French in two years, so get started learning...) Sadly, if history is any guide, most states will not provide any form of professional development to teachers. I'd ask those who choose to disparage teacher's abilities whether they'd be willing to make teaching their career. It's funny how few are willing to take a 50-75% pay cut
:-). -
Ever heard of OOT?
I am in grade 10 in Ontario, Canada and last semester I took my first programming class. They taught us in an interpreter based language called Object Oriented Turing. It contains most major commands (print, graphics, math and ever TCP/IP) the best part is the editor completely prevents any errors from being in the program (syntax or logic) by checking before. It teaches first timers how to prevent their own work from having errors by having a good syntax. I recently even won a competition for one of my programs. More info is available at the Holtsoft website. Holtsoft