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