[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: [PLUG] Educational Languages
|
Matthew,
I would give serious thought to Java.
One of the first languages I learned (in 1979) was Pascal. It was a
good
choice for a teaching language because of its strong type-checking, and
good support for data structures. It enforced good habits, preventing
you from doing sloppy things that C and scripting languages would allow.
Also, the compiler catches lots of simple first-time-programmer errors.
Generally, almost anything you write in older versions of C or in a
scripting language will get past the compiler or interpreter with no
error messages, and will do something. However, too often, it doesn't
do what you intended, and you are left to puzzle out why not. Pascal
was a good safety net for me, shielding me from my own dumb mistakes and
focusing me on the assigned problem.
Java is even better than Pascal in these regards. It has very thorough
type checking, and a very powerful data structure library, as well as
strong facilities fro building your own data structures. Also, it is
free, very easy to get started with, and generates its own API docs
(javadocs). To see how easy it can be, read my first few articles on
Getting Started with Java. Each article is a bite-sized (usually one or
two screenfuls of text) intro to a single Java topic. Despite their
small size, each one is a complete working program, including details
of how to download the compiler and other tools (Web servers, etc) that
you might need, how to compile and run, etc. See:
http://bristle.com/Tips/Java.htm#applications
http://bristle.com/Tips/Java.htm#applets
http://bristle.com/Tips/Java.htm#servlets
http://bristle.com/Tips/Java.htm#jsp_intro
http://bristle.com/Tips/Java.htm#java_beans
http://bristle.com/Tips/Java.htm#jdbc
http://bristle.com/Tips/Java.htm#javadoc_intro
Don't rule Java out simply because of its power. It is very easy
to get started, and to just use a small subset of the language until
you are ready for more. All of the local high schools and colleges I've
contacted in recent years are moving from Pascal, C, and C++ to Java
as a teaching language.
Addressing your specific points:
I'm primarily investigating Python, Ruby, and Eiffel. Python and Ruby both
have the advantages of being interpreted and can use bindings to Qt, which
lets the students make programs they can run at home (all the programming
there is done on Apples).
Java runs on absolutely everything. You write and compile the code
once,
and then run it on Mac, PC, Linux, PDAs, cash registers, cell phones,
whatever. Have you ever downloaded a large free software component
from
the Web and had to choose whether you wanted the Windows version, Linux
version, Mac version, etc? That question never comes up with Java.
You
just download THE version and run it on whatever. I've done that
successfully with many large complex components like Web servers
(Tomcat),
XML parsers and XSLT transformation engines (Xalan/Xerces), complete
development environments (Eclipse), etc. Never a problem. It just
works.
Furthermore, have you been frustrated that you ran a setup program to
install a piece of software and suddenly unrelated things stopped
working?
You really don't want to suggest that the students download and install
any tools that might break their computers and cause them to lose the
use of them for other classes. With Java tools and components, you
never
run a setup program. Just download the zip file, unzip it into any
folder
you like, and run it. No chance to break anything else on the computer.
If you don't like it, just delete the folder. No mucking around with
registry entries, restore points, backups, etc.
Speaking of development environments, the students will want a powerful
IDE (interactive development environment) in which to edit, compile, and
debug their programs. Eclipse, written by IBM, is free and is the
single
most powerful IDE I've used in my 25 years of professional
programming.
See:
http://eclipse.org/
Also, you will want books, and there are a ton of books on Java. I
particularly recommend "Thinking in Java" by Bruce Eckel:
http://www.mindviewinc.com/
though perhaps not for introductory students. The instructor should
read it however, and will come away completely convinced of the merits
of Java and why it is such a good teaching language. You can download
the entire book for free, but I recommend buying a paper copy also
because you'll want it handy to thumb through. Anyhow, there are tons
of other Java books, free and otherwise. Do a Web search at Amazon, or
O'Reilly, or walk into any bookstore and count the shelves of books of
the various programming languages.
I should think the goals of a teaching language
would be:
+simplicity: easy tasks should be easy and straightforward
-Not C++ or Java then
I agree about no C++, but why would this rule out Java?
+consistency: things should behave in similar ways, so you can apply what you
already know to what you want to find out
Java is very consistent. Things do what you expect, and they "just
work".
+cleanliness: no ugly hacks please
-Python's unicode handling is somewhat hackish IMO
No hacks in Java.
+strictness: ideally the language should enforce good practise, sloppy coding
is something to be avoided early on!
-Dynamic-typing may very well be a hindrance here?
I agree.
+relevance: it's not quite as important, but hopefully this language should
be able to do the tasks needed by modern programmers
-Big problem with Pascal & Scheme, also somewhat with Eiffel
Another argument for Java. For recent trends in programming jobs, see:
http://www.indeed.com/jobtrends?q=java%2C+c%2B%2B%2C+pascal%2C+c%23%2C+vb%2C+ruby%2C+perl%2C+python%2C+eiffel&l=
For recent trends in Web searches, see:
http://www.google.com/trends?q=java%2C+c%2B%2B%2C+pascal%2C+c%23%2C+vb%2C+ruby%2C+perl%2C+python%2C+eiffel
All have their upsides and downsides for educational purposes though. Python
and Ruby may be great for real-world coding, but I'm worried they might lack
the enforcement of coding discipline that I feel is important for teaching
beginners.
I'd say Python and Ruby are great for real world SMALL programming.
They
are powerful scripting languages that are good for demos, test
harnesses,
etc., but don't scale well to large mission-critical applications. Not
what you want to be teaching. If so, you might as well teach in Perl,
C,
_javascript_, VBScript, etc. Powerful, but no discipline, so they tend
to
generate unmaintainable code.
Eiffel is very strict and requires good practise, but does not
seem very widely used, although perhaps it will grow now that its tools are
GPL...
Agreed. I'd bet that 90% of the professional programmers in the world
have
never even heard of it.
Perhaps it's just paranoia and coding correctness can still be enforced by the
teacher? Being able to write Python or Ruby (or C++ for that matter) would
facilitate a program where students could spend a semester working on FOSS
projects for real world experience (SoC-style), whereas something like Eiffel
or Pascal would definitely not... Is there something important I'm missing?
If you want to be able to wrote FOSS, use Java. Most of the world's
FOSS is
written in Java.
P.S.: Teaching beginners PHP is a crime, it would be better for students to
learn how to manipulate CPU registers with a hammer and chisel.
Agreed.
P.P.S.: Same with Perl.
Agreed.
Sorry for such a rant, but after 25 years of working in dozens of
different languages, and having to put up with the quirks and bugs of
so many different environments, it is nice to finally settle on one
that "just works".
--Fred
--------------------------------------------------------------------------
Fred Stluka -- mailto:fred@bristle.com -- http://bristle.com/~fred/
Bristle Software, Inc -- http://bristle.com -- "Glad to be of service!"
--------------------------------------------------------------------------
Matthew Rosewarne wrote:
On Tuesday 20 March 2007 15:43, Douglas Muth wrote:
On 3/20/07, Matthew Singleton <msingle1@sccs.swarthmore.edu> wrote:
I would suggest Python. My school has recently switched over to Python
for CS intro courses, and it has been very successful.
I'm not an educator, but I would also suggest Python for beginners.
The biggest thing I like about it is that if forces indentation in
blocks of code, which is a habit best learned early. :-)
I also like the fact that you can "dump" arrays and hash tables just
by printing them out. That's not something that you'll ever find on a
production system, but is very helpful for the beginner who doesn't
fully understand how those data structures work.
I'm primarily investigating Python, Ruby, and Eiffel. Python and Ruby both
have the advantages of being interpreted and can use bindings to Qt, which
lets the students make programs they can run at home (all the programming
there is done on Apples). I should think the goals of a teaching language
would be:
+simplicity: easy tasks should be easy and straightforward
-Not C++ or Java then
+consistency: things should behave in similar ways, so you can apply what you
already know to what you want to find out
+cleanliness: no ugly hacks please
-Python's unicode handling is somewhat hackish IMO
+strictness: ideally the language should enforce good practise, sloppy coding
is something to be avoided early on!
-Dynamic-typing may very well be a hindrance here?
+relevance: it's not quite as important, but hopefully this language should
be able to do the tasks needed by modern programmers
-Big problem with Pascal & Scheme, also somewhat with Eiffel
All have their upsides and downsides for educational purposes though. Python
and Ruby may be great for real-world coding, but I'm worried they might lack
the enforcement of coding discipline that I feel is important for teaching
beginners. Eiffel is very strict and requires good practise, but does not
seem very widely used, although perhaps it will grow now that its tools are
GPL...
Perhaps it's just paranoia and coding correctness can still be enforced by the
teacher? Being able to write Python or Ruby (or C++ for that matter) would
facilitate a program where students could spend a semester working on FOSS
projects for real world experience (SoC-style), whereas something like Eiffel
or Pascal would definitely not... Is there something important I'm missing?
P.S.: Teaching beginners PHP is a crime, it would be better for students to
learn how to manipulate CPU registers with a hammer and chisel.
P.P.S.: Same with Perl.
___________________________________________________________________________
Philadelphia Linux Users Group -- http://www.phillylinux.org
Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
|
___________________________________________________________________________
Philadelphia Linux Users Group -- http://www.phillylinux.org
Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
|
|