Fred Stluka on 20 Mar 2007 23:46:00 -0000


[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