Re: PPIG discuss: Programmer education ain't what it used to be

2008-01-27 Thread Richard A. O'Keefe


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

2008-01-21 Thread Robyn McNamara


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

2008-01-21 Thread Lindsay Marshall
>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

2008-01-15 Thread Peter Gutmann
"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

2008-01-15 Thread Russel Winder

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

2008-01-15 Thread William Billingsley


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

2008-01-15 Thread STEVEN SHAFFER
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

2008-01-15 Thread Luke Church
(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

2008-01-15 Thread William Billingsley


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

2008-01-15 Thread Lindsay Marshall

 >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

2008-01-15 Thread Alan Blackwell

> > 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

2008-01-15 Thread Ruven E Brooks
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

2008-01-15 Thread Michael Kölling

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

2008-01-14 Thread Michael Kölling

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

2008-01-14 Thread Clendon Gibson
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/