Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #90526

Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea?

References (9 earlier) <4628bce6-98d5-44b7-bb3b-bcb796c0df77@googlegroups.com> <d4559cef-69fb-4a62-a300-cde3a9e127d6@googlegroups.com> <PRINT-20150512175315@ram.dialup.fu-berlin.de> <mailman.400.1431446739.12865.python-list@python.org> <5552a591$0$12979$c3e8da3$5496439d@news.astraweb.com>
Date 2015-05-13 14:54 +1000
Subject Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea?
From Chris Angelico <rosuav@gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.428.1431492908.12865.python-list@python.org> (permalink)

Show all headers | View raw


On Wed, May 13, 2015 at 11:14 AM, Steven D'Aprano
<steve+comp.lang.python@pearwood.info> wrote:
> On Wed, 13 May 2015 02:05 am, Chris Angelico wrote:
>
>> So if you're writing a library function, it probably shouldn't use
>> print()... but your application is most welcome to. You usually know
>> which one you're writing at any given time.
>
> You might be, but beginners are not.

I meant the generic "you" there. A beginner may well not know whether
to use / or //, whether it's better to use a list or a dict, etc etc
etc. That's what instructors are for. Make the distinction that
library functions shouldn't use print but application code can, and
then examples like this...

> I'm not sure I accept Rustom's fix for the problem (I think that his cure is
> worse than the disease), but it is *hard* to get some beginners to use
> return instead of print:
>
> def add_twice(x, y):
>     """Add twice y to x."""
>     print x + 2*y
>
>
> sort of thing.

... can be answered simply by explaining that "add_twice" ought to be
written as a library function rather than an application. It's the
exact same answer as this:

def find_all_whatevers(base_dir):
    whatevers = []
    os.chdir(base_dir)
    for fn in os.listdir():
        if fn is a whatever: whatevers.append(fn)
        if fn is a directory: whatevers.extend(find_all_whatevers(fn))
    return whatevers

The working directory belongs to the application, not to a library
function, so this shouldn't use os.chdir(), even though it does spare
you the effort of string manipulation. (Of course, a real-world
version of this should use os.walk(), but that's a complete rewrite.)

The precise boundary between reusable functions and the actual
application isn't always easy to draw, and there'll be times when you
refactor something across that line. That's not a problem. There are
still plenty of cases that are clear enough to use for explanation.

> Personally, I think that banning print is only useful if you wish to
> encourage cargo-cult programming:
>
> "Don't use print!"
> "Why not?"
> "My CS lecture said not to use it! I dunno, maybe it has a virus or
> something."

Agreed. There are VERY few features which should be utterly and
totally banned, and they're usually kept only for backward
compatibility with a time when people didn't know how dangerous they
were. In Python, the only one I can think of is Py2's input(), which
should be treated as XKCD 292 treats GOTO. (If you really *do* want to
take a string from the user and immediately eval it, just write it as
"eval(raw_input())" so everyone knows.) C has gets(), which is
similarly dangerous and has a similarly straight-forward replacement.
PHP has register_globals (or did until recently - it took a long time
to go from "default is on, we recommend you turn it off" through
"default is off, we recommend you don't turn it on" to finally "bad
feature is removed"). Beyond those, there's not much that doesn't have
at least _some_ reason for existing.

> I'd rather give them exercises designed to show (rather than tell) the
> differences between printing a result and returning a result, and how they
> effect re-usability of software components and function chaining. Using a
> procedural language is *perfect* for that, since you can highlight the
> differences:
>
> function foo(n:int): int;
>   begin
>     foo := n+1;
>   end;
>
> procedure foo(n:int);
>   begin
>     writeln(n+1);
>   end;

Yep. I'd also use clear function/procedure names to make it more
visible, and probably tie this in with loops to show how you can print
more than one thing but can only return one. (Generators are a more
advanced topic.) A few examples go a long way.

ChrisA

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Seberino <cseberino@gmail.com> - 2015-05-10 13:43 -0700
  Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Mel Wilson <mwilson@the-wire.com> - 2015-05-10 20:59 +0000
  Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Marko Rauhamaa <marko@pacujo.net> - 2015-05-11 00:16 +0300
    Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Ian Kelly <ian.g.kelly@gmail.com> - 2015-05-10 19:37 -0600
      Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? beliavsky@aol.com - 2015-05-11 12:01 -0700
        Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-12 12:04 +1000
          Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Michael Torrie <torriem@gmail.com> - 2015-05-11 23:04 -0600
            Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-11 22:38 -0700
              Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-11 23:42 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-12 16:57 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 02:16 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 08:18 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-13 02:05 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-13 11:14 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 19:02 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 19:47 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-13 14:54 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 22:56 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-13 16:17 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 23:31 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 10:35 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-05-12 19:22 +0100
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 20:08 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-05-12 17:04 +0100
          Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 08:11 -0700
            Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rob Gaddi <rgaddi@technologyhighland.invalid> - 2015-05-12 17:03 +0000
              Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-13 03:15 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Marko Rauhamaa <marko@pacujo.net> - 2015-05-12 22:52 +0300
              Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-13 03:26 +1000
                uPy Unicode [was Re: Instead of deciding between Python or Lisp blah blah blah] Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-13 11:23 +1000
                Re: uPy Unicode [was Re: Instead of deciding between Python or Lisp blah blah blah] Chris Angelico <rosuav@gmail.com> - 2015-05-13 15:13 +1000
              Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 10:57 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 15:00 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Marko Rauhamaa <marko@pacujo.net> - 2015-05-13 01:24 +0300
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 20:11 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Ian Kelly <ian.g.kelly@gmail.com> - 2015-05-12 21:46 -0600
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 23:36 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-13 07:49 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Grant Edwards <invalid@invalid.invalid> - 2015-05-13 17:56 +0000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-13 12:30 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Paul Rubin <no.email@nospam.invalid> - 2015-05-12 19:38 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-12 20:27 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-12 20:35 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-13 07:44 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Ian Kelly <ian.g.kelly@gmail.com> - 2015-05-13 09:26 -0600
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-13 11:07 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Ian Kelly <ian.g.kelly@gmail.com> - 2015-05-13 15:38 -0600
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-13 16:16 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-05-13 22:55 +0100
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-14 11:40 +1000
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-05-14 03:35 +0100
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? wxjmfauth@gmail.com - 2015-05-14 00:38 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-15 20:25 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-15 20:36 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-15 21:24 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-14 11:48 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Marko Rauhamaa <marko@pacujo.net> - 2015-05-13 22:50 +0300
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-14 20:14 -0700
                Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2015-05-13 19:19 +1200
    Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-10 19:33 -0700
  Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-10 18:03 -0700
    Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? zipher <dreamingforward@gmail.com> - 2015-05-10 18:29 -0700
  Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Chris Angelico <rosuav@gmail.com> - 2015-05-11 12:11 +1000
  Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-05-11 13:59 +1000
    Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-10 21:42 -0700
      Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Skip Montanaro <skip.montanaro@gmail.com> - 2015-05-11 09:04 -0500
        Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Grant Edwards <invalid@invalid.invalid> - 2015-05-11 14:35 +0000
          Re: Instead of deciding between Python or Lisp for a programming intro course...What about an intro course that uses *BOTH*? Good idea? Rustom Mody <rustompmody@gmail.com> - 2015-05-11 09:29 -0700

csiph-web