Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

gnat (29)

gnat
  (email not shown publicly)

Journal of gnat (29)

Friday November 04, 2005
11:23 AM

Learning Curves

[ #27449 ]

"Learning Curves" sounds like the title of the O'Reilly beginner's guide to soft porn, but that's not what this is about. I'm writing my first Python program. It is quite the adventure, and I'm learning a lot about learning (always good).

Things I have learned include, in no particular order:

  • Learning Python and Programming Python aren't what I expected them to be. They're not the direct translation of their Perl equivalents. This goes double for the Python Cookbook , which seems to assume you already know everything in the standard library and so only covers stuff outside the standard library. I lost a non-trivial amount of time trying to find the StringIO class. Apparently Python in the Nutshell is the book I should be looking for.
  • Working sample code is real important in documentation. It's not ubiquitous in the Python documentation, which gave me grief. And when it is there, sometimes it's misleading. For example:

    f = StringIO()

    won't work. You need to use StringIO.StringIO() or you get a message about not being able to call a class as function. Twitch, twitch. Fortunately, the nice people on #python were able to set me straight.

  • Python has different behaviour for compile- and run-time binding of names to code. There is no compile-time binding of function names to code. The Python equivalent of sub foo {} is identical to *foo = sub {}. There's no compile-time binding of function names to code, so you can't call a subroutine until the subroutine definition has been "executed". This tripped me up ("what do you mean the function isn't defined! It's right bloody there!"). Again, #python to the rescue.
  • CPAN is fantastic. Not that Python doesn't have amazing libraries, it does. But the one-step CPAN shell is just a treat. As much as I've been cursing it as I drag in 3/4 of CPAN just to build one of Jesse's modules, it's a damn sight better than having to download and install each module by hand from a separate location .... I'd hate to do something big. I wonder how widespread is the use of Activestate's Python Package Manager.
  • Indentation versus curlies is, as I'd long suspected, a bogus issue. You lose a little context when you close many blocks at once (without lines of close curlies, it can be hard to tell whether that's three or four blocks being closed) but that's not as big a problem in practice as I'd thought.

It's been fun to do something new, though I'd have found it quicker to just port the library I wanted (the Universal Feed Parser) to Perl than to learn the Python I need around that library. That's okay, I'm doing this to learn another language and not to get the job done in the shortest possible time.

--Nat

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • he lives! :)
  • So does this mean ORA isn't doing an into to soft porn?
  • Indentation versus curlies is, as I'd long suspected, a bogus issue.

    There are a couple of real issues with indentation, but mostly in Python's favor.

    Indentation without line noise is a major convenience for those typing with their voice or quite possibly other adaptive technologies.

    Indentation without line-noise lacks the redundancy that braces and a "tidy" reformatter can provide, but gets a similar effect directly. Editors that have been trained to match brackets may have a harder time skipping back to

    --
    Bill
    # I had a sig when sigs were cool
    use Sig;
    • the eye can do it easier if it is on page.

      Not these eyes, alas. It was messing me up bigtime when I closed a bunch of blocks at once (if in a loop in a loop). No doubt I'll get used to it, but don't make the mistake of confusing familiar for intuitive. Nothing about these infernal machines is actually intuitive, and eyes can no doubt learn to see the invisible indents the same way that fingers can learn to hit the match-curly key sequence.

      Most tellingly, the Ubuntu team feels the simpler visually obv

      • I've had new programmers revel in Perl the same way I've seen new programmers revel in Python.

        As a new programmer I revelled in QBasic, but it doesn't meant that was a good language. Programming is fun, people can enjoy it in nearly any language. Maybe not COBOL... submitting batch jobs isn't satisfying. But all languages that aren't soul-eating are fun.

        But new users aren't all equally successful in what they are trying to do. Moreso, they don't even know how to judge their success; they don't have

  • Are going to release your port of universal parser to cpan? I would like to use it, if possible.

    Right now, I'm using a bunch of modules from CPAN but they don't match the breadth of stuff that universal parser catches.

    Thanks,
    --
    life is short
    • You misunderstand me. Sadly there is no port of Universal Parser--I did my coding in Python because of this. Sorry!
  • It wouldn't have helped with the fundamental issue in the example you mentioned (you probably got a "'module' object is not callable" error, there) but as far as working code is concerned, many modules contain useful examples in their test code. "help(StringIO)" tells you the file containing the StringIO module, and then you can read the "test()" function in there. In the same directory there is also a "test" subdirectory, which contains "test_StringIO.py". Those test files can also be worth looking at
  • Python CPAN = CheeseShop + EasyInstall:

    http://cheeseshop.python.org/ [python.org] - a repository of links and downloads for Python projects

    http://peak.telecommunity.com/DevCenter/EasyInstall [telecommunity.com] - a simple package manager for automatic find/download/build/dependency resolution. For example, running "easy_install SQLObject" will search the Cheese Shop for the "SQLObject" object-relational mapping package, then download and build it for you, along with any dependencies it needs.

    Both the Cheese Shop and EasyInstall are fairl
  • Anyone looking for the analog of Perl in some language, or at least the equivalent of Perl Cookbook recipes, should check out PLEAC [sourceforge.net], which is a (not always complete) translation of the Perl Cookbook into different languages (including Python)