On Mon, 13 Sep 2004 11:26:18 -0500, Chad Walstrom <chewie at wookimus.net> wrote:
> steve ulrich wrote:
> > the point of using java as the programming language in csci coursework
> > is to emphasize the principles behind software engineering and to do
> > so with something that has an acceptably developed toolkit.

This point I would nitpick...I think the point of Java is less about
software engineering process, and more about learning the simple
basics of programming itself. By focusing on loop optimization, logic
controls, etc. you remove some of the tedious and fickle parts of
programming in C/C++ as a newb. More on this at the end.

> This will always be a topic of contention within the scholarly circles.
> I found learning about memory management and pointers in C as quite
> valuable.  It roots you into the basics elements of the computer,
> perhaps not so much as Assembly would, but for a high-level languages,
> it gives you access to memory that Java doesn't.  If you forget about
> the differences between passing references and passing copies, your
> program is foobar'ed.  Pointer arithmetic and resolution was actually
> fun.

I agree wholeheartedly, but learning about memory management in your
first or second course is a bit too much, as would be software
engineering principles at anything but a high-level overview.

> I feel that software engineering with Garbage Collection environments
> makes programmers lazy.  Hence, we see the bloat of Microsoft when it
> employs armies of Visual Basic and Visual FoxPro programmers to write
> software.

Agreed.

> > from that perspective, java is a decent language to learn on.  one
> > would hope that the objective in a csci curriculum isn't to churn out
> > coders but to develop engineers, which are capable of picking up any
> > appropriate tool and solving the problem at hand.

In a good curriculum, yes. A BS of CS grad should be able to pick up a
language with relative ease, and should at least understand why C/C++
or Java may be better in certain situations, where others may want
Python or Ruby.

> I equate programming to engineering with carpentry to architecture.  You
> can't build a house unless you know how to use the tools.  You can't
> design a house unless you understand the process involved or the
> physical strengths and weaknesses of the materials you're using.  You
> can become an architect without ever picking up a hammer, but you can
> never become a carpenter by exclusively designing buildings.

A good analogy, IMO.

> CSci programs have four years to make their students both carpenters and
> architects, programmers and engineers.  I don't believe that the first
> year is critical for introducing engineering concepts, nor do I believe
> Java is essential to teach engineering concepts.  Besides, by learning
> C, you learn more about the "materials" than you would with Java.

In a full four-year degree curriculum, you don't need software
engineering or in-depth "materials" knowledge immediately. First you
need to learn how to use all your tools. In the case of programming, I
would posit these tools are loops, logic controls, variables, and
other data structures. Next would come all the libraries available in
a particular language.

I would start a student in this phase with Java, I think. The U
actually uses Scheme here. From this stage, I would take the student
and hand them C. (The U uses Java here, now.) Make them learn all the
same stuff again, in a different language. This cements immediately
the fact that on some level, the language does not matter, as you can
do the same thing in another language once you learn it.

It is at this point, that a student would move onto advanced
optimization, software engineering, memory management, assembly,
architecture, etc. Ideally, this would be finished with a senior
project of some sort that goes back over everything, so the student
can review all those concepts learned in the beginning, together with
all the in-depth and advanced knowledge gained since, and then
hopefully "get" how it all works together.

Interestingly enough, the Programming for Scientists & Engineers
course uses C++, rather than Java. This forces non-computer science
students to get into exactly what I would avoid teaching even computer
science students, immediately. I was a Teaching Assistant for this
course for a semester, and I'll tell ya, some of those kids would have
been great programmers had they learned to program before they had to
learn pointers, references, and memory management. Others would have
still sucked had we used Java, but it would've been easier to teach
them. IMO, Perl or Python would have been much better suited to these
kids...of course, I don't teach or design curriculum anywhere.

My [rather long-winded] $0.02.

_______________________________________________
TCLUG Mailing List - Minneapolis/St. Paul, Minnesota
Help beta test TCLUG's potential new home: http://plone.mn-linux.org
Got pictures for TCLUG? Beta test http://plone.mn-linux.org/gallery
tclug-list at mn-linux.org
https://mailman.real-time.com/mailman/listinfo/tclug-list