Slashdot Mirror


User: MattoxBeckman

MattoxBeckman's activity in the archive.

Stories
0
Comments
1
First seen
Last seen
Profile
(view on slashdot.org)

Comments · 1

  1. It depends on what you want to emphasize on Java as a CS Introductory Language? · · Score: 1

    The answer is "It depends on what you are trying to teach". We throw around the term "computer science" a lot, but it really means quite a few different things to different people. There are two major components to computer science: abstraction and implementation. You eventually need to master both of these, but it's usually convenient to emphasize one at the expense of the other at first. Here are some examples of emphasis and which languages would be used:

    • Computer programming: This is what you will learn if you take a CS course at many community colleges... and many universities. The goal of the class tends to be to master the syntax of the language, and to be able to write some simple programs. You'll see things like Visual Basic, C, C++, and Java used for such things. The main things you want from a language is that it be easy to learn, and something that you see "in the real world". The availability of graphics (Java) and OOP is also a big draw. The advantage here is that you get people started quickly, and you don't lose too many people at first; more advanced topics can be covered in a later course.
    • System programming: sophomore level; at this point, you want the student to master the internals, to know why referencing a pointer you've called delete on is a bad idea. C and C++ are okay, but there is really no substitute for assembly, even if it's on something like a Z80 or MIPS. With the newer processors coming out, it seems like very few people will be writing assembly themselves anymore, but you still need to know what's going on under the hood. The downside is that, in practice, assembly is too low level to start people off---you lose a lot of people that you didn't have to. It can be done, of course, but there are easier ways to handle things.
    • Computer science: usually senior level courses will get into this, though many universities start off this way. To learn computer science (I'm using the word in a technical sense, in regards to languages here; I'm not talking about things like algorithms or hardware), you really need a functional programming language, like Scheme, ML, or Haskell. Emphasis will be on things like recursion, higher order functions, and abstraction. Computer programs written in such languages (at least the modern ones) look more like mathematics, and allow you to emphasize higher level concepts without having to worry (much) about things like memory allocation. So here, the goal is to understand what kinds of things we can do first, and then in a later course we'll get to worry about the implementation details.
    You can use any of these approaches very well if you userstand its strengths. In a well designed program, the later courses will pick up where the other courses left off. For example, at UIUC, we start them off with Java (we don't have to spend so much time explaining why we picked it like we do with Scheme), the 200 level courses introduce assembly and C++, and the 300-level programming languages course usually uses SML. Furthermore, no matter which language you pick, you can cover all of these things; when I teach Java, I draw memory diagrams on the board to show what is happening under the hood when an object is instantiated, for instance.

    - Mattox