[Pythonmac-SIG] Mac User Python Newbies

has hengist.podd at virgin.net
Mon Feb 14 20:29:15 CET 2005


Bob Ippolito wrote:

>  > MS builds software that way cos they like to get their users locked into
>  > a perpetual upgrade cycle from which they can make money, but what's
>  > OSS's excuse?
>
>Maybe because in many cases, the users are the developers and adding
>those 20%s together makes for some big ugly mess.

I'm not sure that qualifies as an excuse; more making their bed and 
lying in it. :)


>  > Furthermore, those users aren't locked into a single fixed solution
>  > for, say, building GUIs: as long as wxPython, PythonCard, etc. provide
>  > compatible components they can plug in whichever one they want.
>
>Personally, I hope that developers See The Light and do interface
>building in a separate but integrated application like Xcode and
>Interface Builder.

Exactly. Or separate, integrateable components that plug into a 
common base framework. That was the idea behind OpenDoc, for example: 
the user's work is more important than the tools, so make it the 
center of attention by using a document-oriented model instead of an 
application-oriented one. Either way though the technical goal is 
exactly the same: keep the coupling between components as loose as 
possible. That's the _key_ to getting the design right: decoupling 
each functional area from the others. The rest is just finding the 
slickest, most convenient presentation. Unfortunately, I think most 
folk are only thinking about the presentation when they 'design' 
their system, and so they miss this. They get the form looking almost 
right superficially, but they don't get the substance. And then they 
wonder why they can't get the form any better, and why it starts 
falling apart when they try to take it any further.


>  > Python's myriad web frameworks are in exactly the same situation, btw
>
>I think WSGI (pep 333) is a good step to fixing this problem.  If you
>target WSGI, at least you can shoehorn your app into a giant framework
>when you need one.

If I understand it correctly, WSGI decouples the app framework from 
the web server, which is a good thing in itself. It doesn't do 
anything to address the pathological kitchen sink-ism within the rest 
of the web-app framework, however. I think you'd need a chainsaw for 
that.


>  > I've never understood what the obsession with building every
>  > conceivable feature into the application core,
>
>I think this is largely caused by complexity of the alternative and the
>convenience of doing it in this way.

Developer convenience up to a point, yes. It requires less up-front 
planning and major direction changes: just jump in and write some 
code. Yet the same could be said for procedural vs OO construction, 
so why are developers seeing the advantages of modular design in the 
small but still missing it so often in the large?


>The problem with the Unix model is that processes only know how to
>exchange raw data (sockets, pipes, files).  In lots of cases you want
>to exchange a higher level representation of information, and there
>aren't a whole lot of easy ways to do that.

But there are ways. OpenDoc was built upon Apple events, for example. 
And assuming you only have Python talking to Python then you don't 
even need something that complex. It's not like there isn't prior art 
to study and take ideas from.


>I'm pretty sure that these
>large frameworks suffer from the same problem.  It's much easier to
>exchange high level representations of data with yourself than it is to
>exchange them with someone else..

It's interesting that even MS are now moving away from the DCOM 
approach and towards an Apple event/Apple Event Object Model 
approach. I think Apple were definitely onto something with these: 
it's all about where you make the split, and finding the right point 
makes the difference between moving Mohammed or moving the mountain.


>that, and it's much easier to design
>something ad-hoc if you don't concern yourself with keeping things
>modular.

Of course. I often start out that way myself; it's hard to know what 
kind of high-level structure you're going to need if it's your first 
time exploring this particular problem. The trouble sets in when an 
initially ad-hoc design doesn't bother to improve its internal 
organisation as it grows; if you don't keep that burgeoning 
complexity under control then sooner or later the whole thing 
degenerates into a big ball of mud. It's a great very-short-term 
strategy, but an ultimately counter-productive stinker if you're 
planning to be in for the long haul and fail to replace it ASAP.

And it seems that very often programmers never do get around to that 
'rebuild and replace' stage, because as soon as they've reached 
working code it's considered 'done', and to then throw that code away 
and start all over again is anathema. Coming from a fine art 
background, I _know_ that if you've a day to draw a life picture, 
then the best way to spend that time is 'wasting' the first half on 
throwaway sketches and only sitting down to the final version in the 
final few remaining hours, not spend all day hammering away at this 
one single drawing from 9 till 5.

You mention py2app, but must realise yourself that py2app's potential 
for growth and improvement is itself ultimately constrained by the 
framework you've built it in, i.e. distutils. And, conversely, 
distutils' room for improvement is severely constrained by the need 
not to rock the boat for those that have already built upon it. The 
longer code is left to harden, the harder it will be to do anything 
to change it later, so best spend as much energy as you can as early 
on as possible to ensure that when it does set, it's not in a form 
you're going to regret years from now. (Unless you're the perverse 
sort that actively enjoys doing heroic total rewrites for the rest of 
your life...:p)

IDEs are exactly the sort of problem that's crying out for exactly 
this sort of hard, hard tearing down and rebuilding approach because 
right throughout their lives there's going to be this strong 
requirement to add new features, specialist tools, remove obsoleted 
tools, replace, extend, rebuild, etc. One really good, extensible IDE 
application framework and we might not be in this foolish situation 
where there's a dozen all "nearly done" IDEs, all with a huge amount 
of overlapping functionality, which means duplication of effort; i.e. 
a waste of time and energy.

Folk seem to acknowledge there's a constant underlying problem at 
work, so why don't they spend more time trying to put that right 
instead of reinventing the same old mistakes as before? It should be 
a wonderfully rich and tasty problem for those that fancy the 
exercise, and I'm sure there's folk that would; maybe not as 
instantly glamorous as "oh look I just made a yet-another-editor", 
but no passing flash in the pan either if/when they manage to pull it 
off.

Cheers,

has
-- 
http://freespace.virgin.net/hamish.sanderson/


More information about the Pythonmac-SIG mailing list