I guess you're not interested in teaching languages appropriate to HPC implementations, Owen. C++ and MPI...
--Doug On Sat, Jul 31, 2010 at 4:47 PM, Owen Densmore <o...@backspaces.net> 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 > 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" <profw...@fastmail.fm> 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