Owen,

re: "they share many features, (loops, conditionals, types)"

Smile when I say this---

but, good Smalltalk programmers would almost never write a loop
(instead they would use do: or select: or send some similar
message to a collection), would use only simple conditionals (no
boolean or nested IFs and never a case statement), and - because
they are not brain dead - would never use types.  [No, a class is
not a type, even an abstract data type.  At most it is a
'prototype' ala Lakoff and Johnson.  It is also an "object
factory."  -- At least this is the way it was supposed to be.
Sigh!]

davew


On Sat, 31 Jul 2010 16:47 -0600, "Owen Densmore"
<[email protected]> wrote:

  Given the constraints and goals, my approach would be to teach
  that there are many languages in different environments, but
  that they share many features (loops, conditionals, types,
  ...).



Then I'd pick the following areas:

Command-line programming: Bash & Python

File/Text manipulation, ssh login, regular expressions, commands

System Programming: Java

objects, GUI, Applets, types

Web Server Programming: PHP

client - server networking architecture, http requests, how it
won over java

Web Client Programming: Javascript

DOM, AJAX, html, css

That may look like a lot, but it covers most programming
environments and goals.  And the design issues would pop out when
discussing the environments in which these languages excel.

I would NOT go into a lot of detail (clearly!).  Instead I'd
generalize what they have in common, and possibly use
cheat-sheets which have 80% of the important syntax.

The bash/python initial work would also have a lot of pragmatic
elements: how to login and use a remote unix box (bash), and the
historic evolution of awk, perl, and now for many, python.  I'd
note that python does not have a native gui (but is considered
the best "pseudo-code" by theoreticians -- see [1]sagemath.org)
thus the transition to java would have even more meaning.  The
two web languages would clarify the tcp/ip world we live in and
most do not understand.

The goal is to leave the students with a language framework from
which they can choose how to proceed in future work.
    -- Owen
On Jul 31, 2010, at 3:22 PM, Ed Angel wrote:

Greetings from a wet Alaska.
I agree with Dave and I’d like to add a few more comments about
languages, programming and design that are colored by the
difficulties of teaching computer science and engineering in
large universities.
Most academic computer scientists would agree with Owen about the
advantages of teaching the first course using Scheme. Many
schools tried it and it was a failure. The prime reason was that
almost no schools have a student body as good or as uniform as
MIT. In a typical state university, the first programming course
known as CS 1 is taught to a very diverse group, including
students who intend to major in CS, all branches of engineering,
math, business and  a lot of the sciences. Most of them will
never take another CS course so it’s not clear that a single
Scheme course is the best for all of them. What makes things more
complex in NM (and I think this is typical of other states) is
that you have very few students who start in a program and stay
in it for four years. When you get to the second class, almost
half the students took CS 1 elsewhere (CNM, some other community
college, NMSU, NMT). If UNM were to use Scheme, it’s highly
unlikely that any of the other would follow and in the case of
most community colleges would probably have great difficulty in
staffing such a course.
What further complicates the picture is the state mandates
articulation. Hence, each school must accept the CS 1 that the
others teach and cannot require students who transfer in to
retake CS 1. This is a huge problem for students even when the
two CS 1 languages were C++ and Java. It would be impossible if
one school were using Scheme and not the others. At UNM, we don’t
list a specific language as a prerequisite for the second CS
class which is taught in Java. However, most of the CS majors
take the first class is in Java although there is a python
section. The engineers mostly take a first course using the
programming language in Matlab. The computer engineers take the
Java version of CS 1 and then quickly switch over to C and C++.
Even the better schools are driven somewhat by the market. But I
think once you see why Scheme (or equivalent) doesn’t work, there
are no perfect choices. The market push for Java is there in some
industries and not others. A lot of the market still wants C++
but it is a terrible teaching language (and a lot of industry
sees C++ as the lesser of evils, not as the language they would
like to have). Although some schools focus on a single language
others give superficial knowledge in many.
The accrediting boards were aware of these issues and rather than
requiring a particular language in CS 1, defined the requirements
as proficiency in one language and familiarity with at least one
other paradigm. As well intentioned as this may be, it’s not
clear that is has worked out as hoped. At UNM, students become
proficient at Java, learn both C and Scheme at the second level
and eventually study logic and functional programming. But in the
end most of them become proficient in the language they started
which in the case of Java can be a problem for them in the job
market depending on the industry and to working in areas such as
graphics, game technology and CAD. But if we still used C++, they
would have problems with other areas and other industries.
To get back to some of the issues Owen and David raised, the goal
should be to teach computational thinking and design. If that is
the case, starting in Scheme would be better than what we do now.
When we teach it as a second level course, it doesn’t really get
used nor are the ideas adequately reinforced by later courses.
It’s an aspect of a much larger problem that is a focus of those
of us concerned with the problems the country is facing with STEM
education, namely the replacement of fundamental ideas of
computer science with a focus on what is often called computer
literacy. In higher ed, it manifests itself as stressing
proficiency in some programming language rather than in the
underlying principles. In K-12 education, where the problem is
far more serious, computer science ideas have pretty much
vanished from the curriculum and from teacher training. In NM,
very few schools even teach a CSs course. In those that do, the
course is designed to prepare students for the AP Computer
Science exam which has become a Java proficiency exam. That
presents computer scientists with a difficult dilemma in that
while they are opposed to the course, they are hard pressed to
oppose the only “computer science” in the schools.
Finally there is the design question. I spent a lot of time my
last few years at UNM trying to deal with design in the CS
curriculum. At the college level there are serious issues of
whether you can teach design and if colleges and universities
have faculty who can do it. A more serious issue is the siloing
that characterizes most universities. Engineering schools tend to
think they own design but the reality is that design has gotten
crowded out of the engineering curriculum by the increase in the
new material that most departments feel they have to teach.
Accrediting agencies now require capstone courses which try to
get some design back in the curriculum but it’s not the same as
having design integrated throughout the curriculum. In my
experience the one school that truly understands design and is
good at teaching it is Architecture. Studio artists are also very
good at design and problem solving but at UNM, the College of
Fine Arts doesn’t see design has part of their curriculum. It
will be interesting to see what happens with the new College of
Santa Fe. As for CS, it always seemed to me that design was
fundamental to any programming course and to our overall program.
But that view met vociferous objections from the engineering
faculty who believe that “design” is what separated engineering
from sciences including computer science.
Sorry for the ramble. The sun just came out and I’m going back on
vacation.
Ed
On 7/29/10 1:45 PM, "Prof David West" <[2][email protected]>
wrote:

  Owen,

  Speaking as an academic, I agree with you that too many
  schools believe they need a single language and are driven by
  pure market conditions - i.e. what language will look best on
  a graduate's resume.

  In my program we require students to demonstrate proficiency
  (write thousands of lines of code) in four languages: a
  scripting language, a procedural language, a declarative
  language, and an object language (and no, Java is not even
  close to being an object language). [We have not decided if
  functional is a fifth group or a variation on procedural or
  declaritive as far as the "thinking paradigm" required.]
  Which language is chosed within those groups is mostly
  irrelevant, except as it best suits a specific problem domain
  (.e.g C or C++ for telecom).

  Interestingly, the only empirical research of which I am aware
  as to what is a Good Answer - was done at Carelton (in
  Canada):  Their research showed that students learning
  Smalltalk as their first language picked up a second language
  (did not matter if it was procedural or declarative) about 50%
  faster than if the first language was Pascal (remember that
  one?) - and Pascal was created specifically to be a good
  teaching language.  Conversely if students took a procedural
  (C, Java, Pascal) as their first language, it took them almost
  100% longer to become proficient in Smalltalk and about 60%
  longer to become proficient in Lisp.  COBOL was an interesting
  anomaly - If COBOL was the first language, Smalltak came much
  easier, but Lisp was still a big cognitive leap.

  The Carleton research also showed that Smalltalk-First led to
  a deeper understanding of programming in general.

  The biggest drawback to Smalltalk-First arises from the fact
  that, in Smalltalk, you never use things like nested or
  Boolean IFs and no loops and cyclomatic complexity was an
  order of magnitude lower on average - so moving to a different
  language almost always felt like descending into swamp of
  tedious and verbose complications.

  [[ While I am being opinionated - Design (decomposition and
  distribution of knowledge and behavior), not programming
  language, is the real key - proper design makes the coding
  almost trivial.  (I am in the midst of a hot and heated
  argument with my colleagues in the Software Craftsmanship
  (they are all about code and programming) movement about this
  right now - and doing a presentation to about a hundred
  professional developers in Mpls next week. ]]

  dave west


============================================================
FRIAM Applied Complexity Group listserv
Meets Fridays 9a-11:30 at cafe at St. John's College
lectures, archives, unsubscribe, maps at http://www.friam.org

References

1. http://sagemath.org/
2. mailto:[email protected]
============================================================
FRIAM Applied Complexity Group listserv
Meets Fridays 9a-11:30 at cafe at St. John's College
lectures, archives, unsubscribe, maps at http://www.friam.org

Reply via email to