Re: [Edu-sig] Migrating to Projects - Was: Low Enrollments - programming as anti-intellectualism
(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
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
> -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
> 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
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)
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)
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.
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