Re: PPIG discuss: Programmer education ain't what it used to be
On 21 Jan 2008, at 9:14 am, Jan Erik Moström wrote: Paola Kathuria <[EMAIL PROTECTED]> 08-01-19 16.00 behalf of PPIG admin, I don't think anyone's gonna object! I would ... I wouldn't visit yet another forum, takes way too much time. Me too. Mail is quick and easy and works fine. -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
On 16/01/2008, at 2:30 AM, Luke Church wrote: There is an interesting question here, which is why do we teach students how to write linked-lists, stacks etc anyway? I can think of two good reasons. Firstly, if we want our students to get good at programming, they're going to need practice. Implementing these data structures is one way to practice. It also gives you an opportunity to discuss abstract data types, code reusability, encapsulation and abstraction, and so forth. As such, it's not a bad exercise for training programmers. I'm not claiming that it's the *best* exercise, but if done properly it can certainly provide opportunities for teachable moments. Secondly, if we are teaching Computer Science as opposed to training programmers, then our students actually need to come out understanding about space and time complexity. That's going to require at least some understanding of what's going on down in the guts. (Knuth makes this point in TAoCP. It's the reason he gives his algorithms in a pseudo-assembler.) I think that a lot of the arguments I read on PPIG stem from nomenclature: many institutions have only one IT-related course, and it often seems to be called "Computer Science" but serving the needs of vocational training. Most of your remarks are spot-on if one is only considering the student who's only after a programming job with perhaps a transition into management down the track. It seems a misnomer to me to call such a course "Computer Science". I have to say here that although I'm speaking from the CS side of the fence, I'm not knocking vocational programming. It's an academic specialty in its own right, with a different skillset to CS. Besides, we need a heck of a lot more programmers than computer scientists. People who are not interested in programming for its' own sake drop out and do something else. This is something of a tragedy is it not? I don't think so. Why sign up to spend the next forty years doing something that does not interest you? A student who detests programming per se but is interested in using computers or working elsewhere in IT has plenty of other options. He or she should probably not sign up for a vocational programming course, and is unlikely to enjoy computer science as very few degree programs adopt a purely theoretical approach, but might well enjoy a course in IT Management or Information Systems. IT is a broad church. It is true, though, that course advice for incoming first years is generally pretty dreadful. Many of the students in my first-year Computer Science classes don't seem to know what to expect. So as a collective, we're simultaneously arguing that people should be taught to think computationally, and also, that if they aren't interested in the computer for its own sake, well then, they should go away. People *should* be taught to think computationally ("algorithmically", perhaps). Current computer literacy classes are inadequate in that way, since they seem to concentrate on negotiating a UI. The take-home message for computer literacy ought to be, "the damn things do exactly as they're told, whether it's what you want them to or not -- and it's mostly the programmers doing the telling". I don't think it's necessary to teach industry-grade programming in order to get that message across. People who don't want to learn to program really *shouldn't* have to. Perhaps we should teach programming as a tool, and mathematical theory as mathematical theory and acknowledge that they're really increasingly separate disciplines? Perhaps we might allow people to choose? Precisely. But I think what you call "mathematical theory" might be what I call "computer science". -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
RE: PPIG discuss: Programmer education ain't what it used to be
>Do significant numbers of universities really plan like that? yes L. -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
RE: PPIG discuss: Programmer education ain't what it used to be
"Luke Church" <[EMAIL PROTECTED]> writes: >There is an interesting question here, which is why do we teach students how >to write linked-lists, stacks etc anyway? http://thedailywtf.com/ has an extensive list of examples for why this is important. Peter. -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
On Tue, 2008-01-15 at 14:57 +, Alan Blackwell wrote: > I've just come out of a meeting reviewing the choice of teaching > languages for Cambridge, so can report directly on the criteria > that were raised by my colleagues. All my experience on these issues stem from the introduction of C++ and Scheme then Miranda at UCL in 1985-7, and then the switch to Java in 1996-7. Also the switch from Modula-2 to Java at KCL in 1997-8. So I am way out of date :-) > First language taught here will continue to be ML, because it > allows clean expression of basic computational concepts. > > Second language is intended to offer an alternative paradigm to > that of functional programming, for which the best choice is > believed to be object-oriented programming. (Students encounter > other paradigms, such as logic programming, in later years). > > We believe that the feasible options for teaching OO programming > at undergraduate level are presently C++, Java and C#. > > We have most pressure from employers to teach C++ not Java. > However, we think that C++ has disadvantages as a teaching > language. We have most pressure from language suppliers to teach > C# (well, from one language supplier). Despite both forms of > pressure, we think that Java provides the best teaching language > at present for basic object oriented concepts. I think you must not have the banks as your major pressure group. As far as I am aware they want Java and C# primarily and then C++ perhaps with C. The embedded systems community are fundamentally C and assembler based with some C++, Ada and SPARK. I think Java is the right second course in this context. It bridges ML and C++ reasonably, is wanted by employers (it is currently the number 1 language for use), and it really is multi-platform (with a few minor caveats). Despite Mono, C# is still Windows only. > Furthermore, the tool sets and libraries are sufficient, that > students are later able to carry out substantial personal project > work in Java if they wish to. They are also able to choose other > languages if they wish. Many Cambridge students do project work > in ML, Matlab, C#, C++ and other languages, but the majority > choose Java. > > Based on the discussion I listened to, the statement that > "applicants equate enrolling on this program => becoming great at > Java => well-paid employment" is not true here, as Michael > suspected. I think the point is that as long as Java and C# appear in the curriculum over 3 years, the appropriate box has been ticked. -- Russel. Dr Russel Winder t: +44 20 7585 2200 41 Buckmaster Road m: +44 7770 465 077 London SW11 1EN, UK w: http://www.russel.org.uk/ signature.asc Description: This is a digitally signed message part
Re: PPIG discuss: Programmer education ain't what it used to be
On 15 Jan 2008, at 15:30, Luke Church wrote: If what we're doing is teaching a set of techniques for analysis of algorithms, that's fine, but isn't that rather different to saying 'if you can't write quicksort you're not a programmer?'? Hmm, I suspect quicksort is taught so widely simply because it is a pedagogically very useful example: - It's a compact example of a recursive algorithm that doesn't require the student to know much else yet - All the swapping and indexing makes it a handy exercise in pointers - We can ask students to compare it to other small algorithms in terms of O() analysis - It has some interesting wrinkles about "what if the set was already sorted in reverse order", so we can show students they need to think rather than just blindly apply the O() analysis There can be a very human tendency for cultural assumptions to creep in ("if you've had an education of course you'll have read Hamlet / learnt Latin / ...") but I doubt that is the intent of CS course designers. Will Billingsley -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
RE: PPIG discuss: Programmer education ain't what it used to be
Although this posting will sound political and somewhat wishy-washy, I think we need to make some important differentiations here. There are at least four categories of people who "program": 1. "End-user" programmers who write Excel macros, Javascript, VB mini-programs, SQL commands, SAS scripts, etc. These people may be professionals in engineering or finance or other "real" disciplines, but their main job title does not include the word "programmer." 2. Application programmers who use development environments to create customized solutions to specific problems. 3. Systems programmers (at least that's what we used to call them) who /write/ those development environments, including compilers, graphics libraries, etc. 4. Computer science researchers, who investigate theoretical aspects of CS and forward their findings (via journals, etc.) to category #3 above and therefore down the line. All of these people create "real" programs. The problem that I see after years of both industry and, later, academic experience, is that many CS departments are not clear about which of these categories of "programmer" they are interested in. I don't think I need to elaborate too much -- some schools are serving students in category 2, some 3, and some 4 -- all of us probably have to also serve group 1 in service courses. I've been associated with U.S. post-secondary institutions from community colleges to a research-1 university, and I have seen this all the way up the line. Many students come to a college or university without even enough knowledge to know how to ask the question "what kinds of computer science do you teach?", let alone what the answer means. Also, many departments are loath to let any potential students walk out the door, and so attempt to be all things to all students. Thus we have the kinds of arguments posted here in curriculum meetings. Maybe we can come up with a standard nomenclature to differentiate these aspects of "programming" so we can have the opportunity to move forward in researching how best to educate each type of student. Steven C. Shaffer Assistant Professor Computer Science and Engineering Penn State University Park USA [EMAIL PROTECTED] ALSO CHECK OUT: WWW.TEACHINGPROGRAMMING.COM -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
RE: PPIG discuss: Programmer education ain't what it used to be
(This is not a criticism of the authors of specific quotes I use, but rather what I believe is a somewhat widely held opinion) There is an interesting question here, which is why do we teach students how to write linked-lists, stacks etc anyway? It seems to some degree that statements like 'but I know how a quicksort works, and if I were writing in a different language I could write it myself. Otherwise I don't know how to program.' Have become sufficiently accepted to no longer need justification. There are a few things which give me cause for concern: A. This argument seems to reflect a form of dishonesty on the part of computer science. - If abstractions and implementation hiding worked properly, then you'd never have to know how a sorting function worked, unless you needed to implement one. How many people need to implement one? Primarily (perhaps exclusively?), framework developers. So are we saying that if you can't write a framework, you're not a programmer? I don't know how many framework programmers there are outside academia, it would be an interesting question to ask. I suspect very few. (I've now seen several companies doing things that you would think might need a framework, like high security embedded systems development. But they just used an available one) - The alternative view, is that abstractions don't work properly, and we need to peer inside them every now and again to understand why something isn't working, or something is going slowly, or indeed to achieve security. I can remember the first time I looked inside something that implemented one of the algorithms that I had to learn, 'to be a programmer', it was a very unpleasant shock. I couldn't understand what on earth the code was doing. The reason I suggest being that the internals of algorithm libraries are one of the places, where companies can spend money to get high performance implementations without making life very hard for their 'consumer programmers'. Consequently they look nothing like the nice theoretical, psudeo-mathematical descriptions. In my, somewhat limited, experience, they're full of nasty sensitive threading models and scarey CPU + Compiler optimizations. So what are we teaching: -> We're not teaching what's practically relevant. Very few people write sorting algorithms. When people have to peer inside the abstractions, they need a set of intellectual skills which I believ may be somewhat disjoint for being able to create a simple linked list in C. -> We're not teaching concentrating on theoretical value. The requirement to make people 'implement them' means that they have to be able to express something which is comparatively simple to describe in pseudo-code in a somewhat tedious notation. This indeed seems to put many people off. During my algorithms course, we were encouraged to implement the things that we were being taught, I did for the first couple of times, but rapidly stopped because the time to implement was so much higher than the time to understand. Further, as suggested above, the theoretical knowledge is only weakly transferable, I couldn't go and implement quicksort in any manner which competed with a real implementation despite knowing what the algorithm is. If what we're doing is teaching a set of techniques for analysis of algorithms, that's fine, but isn't that rather different to saying 'if you can't write quicksort you're not a programmer?'? - B. What are the side effects of mandating that people have to learn, and implement things like quicksort? I believe the statement below precisely the effect: 'If students must do GUI programming or they will find programming 'boring' - well, they should drop out now. More sensibly, they should not have been enrolled to start with.' People who are not interested in programming for its' own sake drop out and do something else. This is something of a tragedy is it not? So as a collective, we're simultaneously arguing that people should be taught to think computationally, and also, that if they aren't interested in the computer for its own sake, well then, they should go away. Perhaps we should teach programming as a tool, and mathematical theory as mathematical theory and acknowledge that they're really increasingly separate disciplines? Perhaps we might allow people to choose? Just some musings Luke ___ Try the all-new Yahoo! Mail. "The New Version is radically easier to use" The Wall Street Journal http://uk.docs.yahoo.com/nowyoucan.html -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
On 15 Jan 2008, at 15:02, Lindsay Marshall wrote: Based on the discussion I listened to, the statement that "applicants equate enrolling on this program => becoming great at Java => well-paid employment" is not true here, as Michael suspected. No, there it is "applicants equate enrolling on this program => get degree from cambridge, even a 3rd => well-paid employment" I'll provide a datapoint without the cachet of Cambridge, then -- In 1998, the University of Queensland chose Java as a teaching language. Although I wasn't directly involved in the decision, I did observe it taking place. There had been a tension between the electrical engineering department's desire to teach C early in the course (because students were expected to use it in the microcontroller practicals) with the CS department's concerns that C promotes bad habits when taught as a first or second language because it makes it too easy to do unsafe pointer arithmetic (so instead the CS department had taught engineers Pascal and Modula2, which they could not use in practicals due to poor compiler and tool support on the relevant microcontrollers). When the departments merged, Java was adopted because it was a strongly-typed language with a good OO model and C-like syntax -- this hit both bases of teaching good habits and reducing the learning barrier to using C in embedded practicals. Again, there was no "applicants equate enrolling on this program => becoming great at Java => well-paid employment" process involved. William Billingsley -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
RE: PPIG discuss: Programmer education ain't what it used to be
>Based on the discussion I listened to, the statement that >"applicants equate enrolling on this program => becoming great >at Java => well-paid employment" is not true here, as Michael >suspected. No, there it is "applicants equate enrolling on this program => get degree from cambridge, even a 3rd => well-paid employment" Cynically. L. -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
> > 5. Java is usually offered as a first language because it sounds good > > and applicants equate enrolling on this program => becoming great at > > Java => well-paid employment. The fear on the part of providers is > > that > > no Java = reduced applications > > I have heard this assertion several times now, in different contexts. > > Is this really true? I've just come out of a meeting reviewing the choice of teaching languages for Cambridge, so can report directly on the criteria that were raised by my colleagues. First language taught here will continue to be ML, because it allows clean expression of basic computational concepts. Second language is intended to offer an alternative paradigm to that of functional programming, for which the best choice is believed to be object-oriented programming. (Students encounter other paradigms, such as logic programming, in later years). We believe that the feasible options for teaching OO programming at undergraduate level are presently C++, Java and C#. We have most pressure from employers to teach C++ not Java. However, we think that C++ has disadvantages as a teaching language. We have most pressure from language suppliers to teach C# (well, from one language supplier). Despite both forms of pressure, we think that Java provides the best teaching language at present for basic object oriented concepts. Furthermore, the tool sets and libraries are sufficient, that students are later able to carry out substantial personal project work in Java if they wish to. They are also able to choose other languages if they wish. Many Cambridge students do project work in ML, Matlab, C#, C++ and other languages, but the majority choose Java. Based on the discussion I listened to, the statement that "applicants equate enrolling on this program => becoming great at Java => well-paid employment" is not true here, as Michael suspected. Alan -- Alan Blackwell Computer Laboratory, University of Cambridge http://www.cl.cam.ac.uk/users/afb21/ Phone: +44 (0) 1223 334418 -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
In fact, you can easliy teach about pointers and memory management using Java. Simply have them use a large array to simulate physical memory and give them exercises chasing pointers through the array, etc. Unsupported hypothesis: They will actually learn about memory management and pointers faster and easier this way becauses debugging will be easier; addresses will all be integers starting at zero, rather than hex starting at an arbitrary offset. I've even heard of giving exercises like this when teaching C++, before introducing the native pointer constructs, because of the easy of visualizing what is taking place. Ruven Brooks
Re: PPIG discuss: Programmer education ain't what it used to be
On 15 Jan 2008, at 13:45, Walter Milner wrote: 5. Java is usually offered as a first language because it sounds good and applicants equate enrolling on this program => becoming great at Java => well-paid employment. The fear on the part of providers is that no Java = reduced applications I have heard this assertion several times now, in different contexts. Is this really true? I find this hard to believe. Since Java was heavily used in education, I have worked at three institutions. In one, I was involved in the process of language choice, in two others I am familiar with the reasoning of the choice. In none of them was the argument you mention ("it sounds good" on the course description) a deciding, or even important, factor in the decision making process. All the debate I am aware of was about pedagogical value, teachability, representations of concepts in the language, and practicality. Marketing did not significantly come into it. Do significant numbers of universities really plan like that? Michael -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
On 14 Jan 2008, at 18:30, Frank Wales wrote: What are the design patterns for 'Efficient' and 'Transparent' again? http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html My response: http://www.bluej.org/mrt/?p=38 Regards, Michael -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
Re: PPIG discuss: Programmer education ain't what it used to be
This sort of thing makes me glad I learned to program out of the back of a Commodore 64 Programmer Reference Manual. - Original Message From: Frank Wales <[EMAIL PROTECTED]> To: discuss@ppig.org Sent: Monday, January 14, 2008 12:30:51 PM Subject: PPIG discuss: Programmer education ain't what it used to be What are the design patterns for 'Efficient' and 'Transparent' again? http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html -- Frank Wales [EMAIL PROTECTED] -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/ -- PPIG Discuss List (discuss@ppig.org) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/