On Sep 13, 2004, at 12:04 PM, John T. Hoffoss wrote:

> 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.

you've nicely stated my real intent here.  getting folks used to the 
basic concepts (logic, looping, etc.) is dead simple in java.  but the 
other thing is the basic object oriented design that needs to start 
early by getting people into the appropriate mindset.   folks don't 
have to focus on the mechanics of the language (which will change over 
time) but learn the concepts.

>> 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 would agree that these are important topics, but in many cases, these 
will vary from language to language and implementation to 
implementation.  a common  trap i've seen folks fall into is to focus 
on how the mechanisms of language operate but forget the principles 
involved with good software development practices.

> 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.

let's be a bit more clear here, MS doesn't employ legions of VB & VFP 
programmers to write software, enterprises do.  MS preached the gospel 
of rapid application development and provided an effective toolkit to 
do just that.  the benefits were very appealing to corporations and the 
market and your daytime TV educational institutions have responded by 
churning out folks that can "program in VB".

there are legions of folks that have learned how to code stuff up in a 
specific language (a principle language offender here is VB) but 
haven't absorbed the principles and the corresponding deliverable suck 
as a result.  there are really good reasons for having GCs and no small 
number of papers have been written cursing and praising the relative 
merits of GCs.

>>> 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.

exactly, the essential point here is: the language doesn't matter, the 
concepts do.  in this industry we churn our toolkits with alarming 
frequency and C vs. java is really just a matter of religious 
preference.  C brings you closer to what's happening on the metal, but 
that's not the critical element for understanding what's going on 
conceptually.

> 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.



-- 
steve ulrich                       sulrich at botwerks.org
PGP: 8D0B 0EE9 E700 A6CF ABA7  AE5F 4FD4 07C9 133B FAFC


_______________________________________________
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