Login  Register

Re: Query about rating agencies/groups

Posted by Owen Densmore on Jul 31, 2010; 10:47pm
URL: http://friam.383.s1.nabble.com/Query-about-rating-agencies-groups-tp5350015p5359646.html

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 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" <[hidden email]> 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