Re: [Edu-sig] Migrating to Projects - Was: Low Enrollments - programming as anti-intellectualism

2005-11-05 Thread Laura Creighton

(cc'd to Peter Hansen, because it is of interest and also mentions him - lac)
In a message of Fri, 04 Nov 2005 12:31:03 MST, Trent Oliphant writes:

>This brings up an interesting discussion point, one in which I would be 
>extremely interested personally:  How do you help students (or yourself) 
>move 
>from writing scripts, functions, classes, modules etc. to writing a large
>r 
>project.  I am actually at that stage right now in my personal learning c
>urve. 
>That curve seems extremely steep.
>
>I have looked at pythoncard for example - because I thought it could help
> with 
>that curve.  Maybe it is just me and the way that I think, but it doesn't
> seem 
>to really help with that.
>
>Is that part of the reason for the perception that Python is not approria
>te for 
>large scale projects - because there are no tools that make the job reali
>stic? 
>The discussion of CS departments and whether they are becoming mere techn
>ical 
>schools is fascinating.  However, could we (or are there) tools available
> that 
>would make programming more available to more people (if not everyone).
>
>As much as I may have opinions on Microsoft and their products.  I think 
>that 
>Access is an excellent model of allowing people to create "Applications" 
>without 
>having to already know how to do it.  Its big drawback is it doesn't allo
>w you 
>to get beyond the constrains of the program.  Sure you can move the data 
>- but 
>the application - the interface, much of the business logic, etc - is stu
>ck in 
>Access.  Plus that is only for database based projects.
>
>I know it may seem that I am talking about an IDE - but even those (at le
>ast the 
>ones available for Python that I have seen) assume that you already know 
>how to 
>do a project.  So I get overwhelmed.  I want them to work for me - but th
>ey just 
>haven't yet.
>
>I have thought about writing my own - because I think there is a real nee
>d for 
>it.  I am a lone programmer - entirely self taught - and this is a daunti
>ng 
>task.  I feel confident that I could handle programming most of the indiv
>idual 
>components that would make up the project, but I don't even know where to
> start 
>and there appears to be nothing out there to help me learn that.
>
>Trent Oliphant

I think you are looking for the wrong sort of magic bullet.   What you
need to learn is how to think about large projects.  You need new 
thoughts, and new work habits, not an IDE or some sort of tool.  Any
tool will only help you once you have the correct sort of work habits,
which you need to develop first.   So read: Kent Beck: Test Driven 
Development: By Example

Get it from your library if you can, because this is not the reference
book you want to keep on your shelf.  This is the introduction to
thinking about large projects which needs to be read once before you
read something else that is more difficult.  If you aren't one of the
people who grasps things faster when presented with examples, you will
need a different introduction, but I don't know one to recommend.
Whatever you get, make sure it is about Test Driven Design.  There are
other competing methodologies for designing large programs, which have
a long history, of which the most famous is called Waterfall.  All
you need to know is to avoid them like the plague.

There is lots more to learn, and lots of places where you can learn it,
but the magic search terms are 'agile programming' and 'test driven
design'.  Lots of people, including me, are willing to discuss this
exhaustively at the drop of the hat, but I am limited right now having
broken a bone in my elbow and doing this one handed.  

Peter Hansen http://www.engcorp.com/main/contact had at one time
(and probably still does) the largest set of web references, mailing
lists, resources and the like.  He can make better recommendations
than I can.  And if all else fails, you can hire his company to teach
you how to manage large projects. :-)

good luck,
Laura
___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


Re: [Edu-sig] Migrating to Projects - Was: Low Enrollments - programming as anti-intellectualism

2005-11-05 Thread Peter Hansen
Laura Creighton wrote:
> (cc'd to Peter Hansen, because it is of interest and also mentions him - lac)

(Thanks Laura... I've temporarily subscribed to edu-sig in case my 
comments/opinions can be of value to someone.  If that concerns you, 
don't worry, I won't stay long! )

> In a message of Fri, 04 Nov 2005 12:31:03 MST, Trent Oliphant writes:
>>This brings up an interesting discussion point, one in which I would be 
>>extremely interested personally:  How do you help students (or yourself) 
>>move from writing scripts, functions, classes, modules etc. to writing 
 >>a larger project.
[snip]
>>I know it may seem that I am talking about an IDE - but even those 
 >>assume that you already know how to do a project.  So I get 
overwhelmed.
 >>I want them to work for me - but they just haven't yet.
[snip]
>>I am a lone programmer - entirely self taught - and this is a daunting 
>>task.  I feel confident that I could handle programming most of the 
>>individual components that would make up the project, but I don't even 
 >>know where to start and there appears to be nothing out there to help
 >>me learn that.
>>
>>Trent Oliphant
> 
> I think you are looking for the wrong sort of magic bullet.   What you
> need to learn is how to think about large projects.  

I could keep all of Laura's comments as they are, of course, right on 
the mark.  I'll comment directly on a couple of her points below and 
then say one or two things that come to mind in response to Trent's 
issues above.  I suspect this could be a long response so I'll write 
fast to make it easier on you. ;-)

> Whatever you get, make sure it is about Test Driven Design.  There are
> other competing methodologies for designing large programs, which have
> a long history, of which the most famous is called Waterfall.  All
> you need to know is to avoid them like the plague.

Other than to have a basic understanding of what those other 
methodologies are, and more importantly why they fail (often, and 
gravely), I'd agree that you can get pretty far with TDD alone in 
building large projects.

I think the first thing to understand is that successful large projects 
are just small projects that have grown.  It is possible, more so in 
theory than in practice, to "start big" by designing everything in 
advance, documenting the heck out of it in requirements specs and design 
docs and test plans, building the beast, testing it thoroughly, and 
shipping it.  Possible, but rarer than a white crow.

There are dozens of reasons why this is so, but I'll focus on the 
positive side here instead: how do you grow a small project?  You can 
write one module, then another, and so on, but you'll just rightly say 
"but I don't even know where to start."  And assorted random modules 
don't form a cohesive whole, and really this approach works only if you 
already did "big design up front" and know where you're headed.  Most of 
the time, nobody really knows that, even though many people delude 
themselves into believing that they do.

You could try writing one piece of functionality instead, even if it 
involves code in a few different modules.  Think of it as a "slice" of 
the future application, maybe a bit of GUI, maybe a bit of the 
algorithms, some persistence.  You'll quickly get into trouble here too, 
however, since when you start to evolve you'll have massive breakage, 
awkward interfaces, and no idea where you stand after only a few changes.

Test-Driven Development will help with this, though I don't personally 
find it sufficient.  What it will do (as you try this "slice" approach) 
is _lead_ you in the right direction as you code.  You are writing the 
tests _first_, before each chunk of code that will pass those tests. 
You are building a body of tests which get re-run often, ensuring you 
cannot write more than a few bad lines of code before an alarm goes off 
telling you you're going off track.  It forces you to implement less 
awkward interfaces, and gives you a measuring stick to tell you where 
you stand.

What I find it doesn't do is lead you from at a "big picture" level. 
What "slice" do you work on first?  How do you prioritize the other 
slices?  How complete do you make each feature in the first pass?  When 
are you "done"?

These are areas where complete "methodologies" come in, and where 
Extreme Programming has value for me.  Without a "methodology" (one 
could just call them project management strategies), you may have 
excellent, working code, maybe even lots of it, but you'll look back on 
it after six months and realize you've wasted the last four months on 
features non-essential to your users, maybe things even you don't value.

Trent says, "I'm a lone programmer - entirely self taught - and this is 
a daunting task.  I feel confident that I could handle programming most 
of the individual components that would make up the project, but I don't 
even know where to start "

I feel exactly like that at the start of every project!  (

Re: [Edu-sig] Low Enrollments - programming as anti-intellectualism

2005-11-05 Thread Arthur


> -Original Message-
> From: Kirby Urner [mailto:[EMAIL PROTECTED]
> Sent: Saturday, November 05, 2005 1:12 AM
> To: 'Arthur'
> Cc: edu-sig@python.org
> Subject: RE: [Edu-sig] Low Enrollments - programming as anti-
> intellectualism
> 
> I develop curriculum for a more screen intensive lifestyle.  Computers and
> digicams are a given.  Yes, lack of physical exercise is sometimes a
> problem
> and needs to be addressed.  Using screens a lot doesn't preclude that.

Good for developing hand eye coordination, I've been told.  Of course my
instincts, when I have been told that,  has been to look to find a way to
defy physical reality, and reach through cyberspace, to go one on one with
the source of that assertion - feeling confident that I can hold my own
against anybody getting their exercise with their favorite HCI device.
> 
> Don't paint me as trying to force my curriculum down your throat.  I don't
> have any investment in making you do as I do.  I'm a recruiter, yes, but
> that doesn't mean I think others have no rights to the same field.  I'm
> here
> to compete.  I relish competition.  I don't *want* to be the only game in
> town (I'd *hate* that).

I have no doubt as to your sincerity and integrity.  

Moat importantly because I have seen it in action  - among other things,
defending my right to express myself here despite the extent you might
disagree with both my message and the manner in which it is sometimes
delivered.

I relish fair competition as well.

But you cannot ask me to ignore the fact that there are financial forces at
work on your side of the aisle that value winning more than fair
competition.  And it is even more complicated than that - the *job* of these
financial forces is to win.  I am not one to condemn anyone for doing their
job.  But it is the job of publicly funded educational institutions to bring
the argument back to one fought purely on its merits. So I have no problem 
going into attack dog mode when I don't see *that* job being adequately
performed - it being important that *everybody* concerned do their job.

In truth, there is more naivety, awe and ignorance than corruption at work,
in my view, that is distorting outcomes. Indeed, some of the technology we
are discussing is in fact awe-inspiring.  But while being the world's
leading proponent of Naïve Programming, I am nonetheless not a proponent of
naïve public administration.  

> 
> The future is nothing if not surprising, always.

I would be surprised if you are wrong, here.

Art


___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


Re: [Edu-sig] Low Enrollments - programming as anti-intellectualism

2005-11-05 Thread Arthur

> But while being the world's
> leading proponent of Naïve Programming

Trying to formulate the tenants:

1. Only solve the problems you know you have.
2. It's only a problem if it is worth solving.
3.  The future is nothing if not surprising, always.

Art
 



___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


[Edu-sig] Python + Tkinter open source videos

2005-11-05 Thread Kirby Urner

If you're unaware of video.google.com, a beta video service, this might be a
good time to click on: 
http://video.google.com/videosearch?q=python+chieh&page=1&lv=1

What you'll find is a list of open source (cc) Tkinter + Python vtutorials,
done on a GNOME desktop, by a gent named Chieh in Boston (although he used
to live in Madrid).  

He's got an entry at the PythonInfo Wiki:
http://wiki.python.org/moin/Intro_to_programming_with_Python_and_Tkinter

If you check the OurMedia archive, you'll see he's allowing Remix in
non-commercial work, i.e. a student could splice Chieh clips into some later
work (with attribution):  http://ourmedia.org/node/2128

"I must apologize that many people would find my lectures over simplified or
goes too slow. I wrote these lectures aimed for kids and people that never
had any programming experience. Lecture 16 is going to start picking up the
pace. -- chieh" 

===

In other news IronPython 0.9.4 is out -- the first on to use the non-beta
.NET 2.0.  This version includes a helpful tutorial.  Vtutorials around
IronPython would be useful too.

Kirby


___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


[Edu-sig] web service demo (geocoder.us)

2005-11-05 Thread Kirby Urner

Using Python shell to lookup lat/long of my home address:

>>> import xmlrpclib
>>> server_url = 'http://rpc.geocoder.us/service/xmlrpc'
>>> server = xmlrpclib.Server(server_url)
>>> result = server.geocode("3745 SE Harrison St., Portland, OR 97214")
>>> result
[{'city': 'Portland', 'prefix': 'SE', 'suffix': '', 'zip': 97214, 'number':
3745, 'long': -122.624652, 'state': 'OR', 'street': 'Harrison', 'lat':
45.5087403, 'type': 'St'}]

Try it, if you've got a US address you want to check (then maybe enter the
coords in Google Earth to see where that is).

The server is actually written in Perl.

Kirby


___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


Re: [Edu-sig] web service demo (geocoder.us)

2005-11-05 Thread Kirby Urner

Adding to demo:

>>> address = ("3745 SE Harrison St., Portland, OR 97214",) # params tuple
>>> print xmlrpclib.dumps(address ,'server.geocode')


server.geocode


3745 SE Harrison St., Portland, OR 97214




Idea:  when we introduce "You Are Here" segment (a take-off on "Hello
World"), we're beginning a series of experiences aimed at helping students
internalize the Earth (in the context of Universe (Celestia, Stellarium
etc.)).  

Integral with that is emphasizing the need for global standards, i.e. ways
for humans to collaborate cross-culturally.  This is a segue to "open
source" not only in the sense of sharing source code, but in the sense of
sharing standards like XML, Unicode, ASCII and so on.  

The above demo shows XML in action, used to pass a method call, with
parameters, to some remote host.

We want kids to appreciate their heritage, the tools at their disposal, the
importance of building on what humans have been able to co-create to date.  

Even as they look out on all the divergence going on, from their schooling
they'll be getting a sense of convergence.

Conversation w/ Trevor today, re Karl Popper:  

Some folks develop the point of view that humans are extremely intelligent,
so all the stuff that doesn't work, seems threatening (wars, pollution,
rioting) must be an expression of willful evil, as we have the smarts to not
have any of that.  

But Popper's view, which I share, is that we're *not* extremely intelligent
(our shared smarts is emergent, not the property of any one individual, and
not under any one small group's control), and all that evil stuff is more
reflective of our being collectively retarded, not willfully evil.[1]

Kirby

[1] related blog entry ("Retarded Design"):
http://mybizmo.blogspot.com/2005/09/retarded-design.html



___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig


[Edu-sig] Knuth's books.

2005-11-05 Thread Scott David Daniels
First, I think they are some of the best out there.  Hard to get
through, but worth keeping as references for the next 30 years.

I suggested them to you (rather than generally to students) because
you said you felt:

My own experience is more toward the learning to program to learn -
in my case - mathematical ideas. But ultimately, to get to where I
want to get, I realize that "basic computational skills" are not
sufficient - that I need to get somewhat beyond the basics.

Knuth was a mathematician by training, and quite a good one at that.
Concrete Mathematics is a math book built with an eye to the kind of
math that you need the deeper you get into CS.  The others, the
slowly evolving The Art of Computer Programming (TAoCP) address CS
directly.  The reason I was suggesting Fascicle 1 (the MMIX machine)
was that I think it is an excellent introduction to current machine
architectures from the point of view of a programmer, rather than that
of an electronics designer.

They are all tough books, but none gratuitously so.  Concrete
Mathematics targets (smart) undergraduates, and so might be a more
accessible start.  It certainly reads faster than the Fascicles,
which go at the same rate as the rest of TAoCP.

--Scott David Daniels
[EMAIL PROTECTED]

___
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig