GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-11-27) - page 1 of 10
 
___________________________________________________________________
Norvig's Python programs to practice or demonstrate skills
544 points by federicoponzi
https://github.com/norvig/pytudes
___________________________________________________________________
 
jypepin - 8 hours ago
Norvig's notebooks are my favorite resource for code reading. He
has so much of them, written is such a nice, clean, clever but yet
understandable and readable way, it's always a pleasure and amazing
learning experience to go through them.For example, going through
his notebook for code advent (the first linked) [1].[1]
https://nbviewer.jupyter.org/url/norvig.com/ipython/Advent%2...
 
b0rsuk - 4 hours ago
I get it that Peter Norvig is a very smart programmer. But can
someone explain to me - like a farmer to his cow - how do these
resources differ from typical programming challenges found on the
web ?How will these make me a better programmer ? Is each designed
to teach a different programming concept or technique ? Are they
useful in fields lower than machine learning or AI ?What's the
benefit of a program that detects palindromes ?
 
  nafizh - 4 hours ago
  You should check out Norvig's design of computer programs course
  on Udacity (https://www.udacity.com/course/design-of-computer-
  programs--...) where he uses these kinds of puzzle programs to
  teach programming design concepts. It is a hard but really
  rewarding course.
 
  stiff - 3 hours ago
  Peter Norvig has this unique style where he explains his design
  process in detail, including exploring the problem on example
  cases, writing multiple solutions, the thinking involved in
  moving from one solution to the next one, including profiling and
  finding bottlenecks etc., you see how he goes about problem
  solving and he is a master problem solver. In fact his writing
  provides a good opportunity to reflect on what designing programs
  even means: investigating and choosing trade-offs, choosing an
  adequate representation (data structure) for a problem etc. This
  illustrates on a small scale how a lot of the most serious
  software engineering happens, the engineering where you actually
  have a definite, hard problem to solve, rather than just making
  the program pretty by criteria on which there is no agreement
  etc.He does this not only in those notebooks but for example also
  in his "Paradigms Of Artificial Intelligence Programming" book. I
  have not seen this done to any serious extent in any algorithm
  textbook or tutorials.
 
    [deleted]
 
    AnkhMorporkian - 2 hours ago
    I code Python professionally (and passionately), and would
    consider myself quite experienced. His code in ' When Cheryl
    Met Eve: A Birthday Story' is the most beautifully constructed
    stuff in the world. That sort of stuff isn't about coding
    ability, it's about a reasoning process that some people have
    developed to such an extent that it's innately beautiful no
    matter how it's expressed. I'm sure his javascript solution
    would be nearly as beautiful.
 
      gozzoo - 2 hours ago
      >  His code in ' When Cheryl Met Eve: A Birthday Story' is
      the most beautifully constructed stuff in the world.Where is
      this published? I couldn't look it up.
 
        bosie - 1 hours ago
        https://github.com/norvig/pytudes/blob/master/ipynb/Cheryl-
        a...
 
        tclancy - 1 hours ago
        Isn't it right here? https://github.com/norvig/pytudes/blob
        /master/ipynb/Cheryl-a...
 
      nextos - 1 hours ago
      > I'm sure his javascript solution would be nearly as
      beautiful.I really like his Python code, but I think his Lisp
      code from PAIP is extremely underrated. In fact, it makes me
      sad he switched to Python for some AI tasks (same as Goodman
      & Tenenbaum in http://probmods.org) given that Lisp offers
      some unique feature for AI: homoiconicity.This is something
      that I think will make a comeback with Bayesian program
      learning. For a glimpse of the future, see above link.
 
  coldtea - 4 hours ago
  >I get it that Peter Norvig is a very smart programmer. But can
  someone explain to me - like a farmer to his cow - how do these
  resources differ from typical programming challenges found on the
  web ?By virtue of being better written and more thought out.Also,
  they are not "programming challenges". They are solutions to
  programming challenges.
 
  leblancfg - 3 hours ago
  The content of the challenges aren't the focus. The main take-
  away is to see how Norvig does it after you've had a whack at it
  yourself. You can learn a lot by seeing how he reads the problem,
  dissects it into different functions, documents and tests them,
  and keeps an eye out for performance and computational
  complexity.His code is highly readable and elegant, and I wish
  every single person I'll share a codebase with will have studied
  him before.
 
    b0rsuk - 3 hours ago
    Ha, brilliant programmers can sometimes be hard to appreciate.
    They make problems look easy. But the simplicity comes from the
    complete understanding of the problem.I think it's a trait of
    brilliant minds. They simplify things. I don't remember the
    exact quote, but it was something like this:  * a fool doesn't
    understand   * a normal person can be taught   * a in
    intelligent person can teach   * a genius can simplify
 
      irrational - 2 hours ago
      This reminds me of the quote attributed to Albert Einstein?If
      you can't explain it to a six year old, you don't understand
      it yourself.?I really thing what Einstein is getting at here
      is the ability to simplify things to the level that a six
      year old can understand it. Of course, you probably can't
      simplify the mathematics to the level of a six-year old, but
      you can simplify the concepts so that they are understandable
      by a six year old.I've found this to be true in my own life.
      I think I understand something, but then I try to teach it to
      someone else and then I learn that I don't really understand
      it. So I have to go back and study and think about it so more
      until I understand it better. If I really understand
      thoroughly, inside and out, then I find that I am able to
      simplify things such that I can explain them to my young
      children.
 
        b0rsuk - 1 hours ago
        This is why rubber duck debugging works. You start
        explaining to a rubber duckie what problem you have, how
        you're trying to solve it and what happens. Posting a
        question on a hostile forum or snarky IRC channel also
        works. When I think how to formulate my question best, to
        cause no misunderstanding, I often stumble upon the
        solution.It is also why teaching people programming makes
        you a better programmer. Even if you're answering newbie
        questions, it often makes you re-evaluate your knowledge or
        realize you don't understand something as clearly as you
        thought. Even newbies have different needs and interests,
        so they ask different questions than you would.
 
[deleted]
 
throwaway7645 - 8 hours ago
Norvig is a beast. For those that don't know, he is high up in
Google Research (AI director I believe) and also wrote the #1 AI
textbook. He has the #1 AI course on coursera or edx too (can't
remember which one). He's a big lisp advocate (look at his review
of SICP on amazon), but also has the programs for his books in
Java, and Python.
 
  nabla9 - 7 hours ago
  Everybody knows about AIMA (Artificial Intelligence, Modern
  Apporach) but Norvigs PAIP (Paradigms of Artificial Intelligence
  Programming: Case Studies in Common Lisp) is also a gem.It's
  elegant learn programming, history of AI, and simple old school
  Common Lisp in the same package.AI methods include GPS, Eliza
  style chatbots,  symbolic math, constraint satisfaction, logic
  programming, natural language programming.
 
  strong_silent_t - 6 hours ago
  Regarding lisp, he made a post about language choice here:
  https://news.ycombinator.com/item?id=1803815I think Lisp still
  has an edge for larger projects and for applications where the
  speed of the compiled code is important. But Python has the edge
  (with a large number of students) when the main goal is
  communication, not programming per se. In terms of programming-
  in-the-large, at Google and elsewhere, I think that language
  choice is not as important as all the other choices: if you have
  the right overall architecture, the right team of programmers,
  the right development process that allows for rapid development
  with continuous improvement, then many languages will work for
  you; if you don't have those things you're in trouble regardless
  of your language choice.
 
    agumonkey - 5 hours ago
    I'd like to ask him about a more ml-y python. Same syntax, same
    tinyness, but less mutable OO at its core.
 
      stormking - 2 hours ago
      Try http://coconut-lang.orgNot pure, not perfect, but still
      great!
 
        agumonkey - 36 minutes ago
        very nice, thanks
 
    throwaway7645 - 6 hours ago
    I think that's an excellent view of the tradeoffs between the
    two.
 
  stablemap - 8 hours ago
  His website contains a lot of gems:http://norvig.com/I think the
  course to which you refer is on Udacity, with Thrun; I found it
  easier to read the book.
 
    throwaway7645 - 7 hours ago
    Thanks for correcting my mistake! It's def better than most I
    signed up for!
 
  vram22 - 5 hours ago
  Last I read (a while ago), he was Director of Research at Google
  (not just AI). This was after being Director of Search (Quality),
  IIRC.
 
  dgritsko - 8 hours ago
  I was curious, so I looked up the SICP review you mentioned:
  https://www.amazon.com/review/R403HR4VL71K8
 
    cybertronic - 7 hours ago
    Also liked this one (referring to sicp too):https://www.amazon.
    com/gp/review/R2C7L5KHUVHOR2?ref_=glimp_1...
 
carreau - 8 hours ago
You can run these notebooks for free in the cloud (on MyBinder.org
provided by the Jupyter team). Just head there:
https://mybinder.org/v2/gh/norvig/pytudes/master You may need to
`pip install numpy`. Watch out images are ephemeral.
 
  smortaz - 51 minutes ago
  You can also run them on Azure Notebooks which is basically a
  free hosted jupyter notebook service for anyone to
  use:https://notebooks.azure.com/smortaz/libraries/norvig-
  pytudesbasically 1) click the link  2) click clone 3) sign in
  (any gmail, msft id), then go to the notebooks directly and run
  them.  You can also click Terminal for shell prompt.The sign-in
  is required since you can edit the notebooks, store/modify data
  etc.
 
  kovek - 7 hours ago
  It is unclear how you would `pip install numpy` on mybinder.org
 
    carreau - 6 hours ago
    `!pip install numpy` in a notebook, or "new" > "terminal" and
    you have a shell...
 
  cup-of-tea - 8 hours ago
  They are also run directly on github, but you can't edit them.
  Still useful if you just want to read, though.
 
    carreau - 7 hours ago
    Technically No, they are just rendered on GitHub (using
    nbconvert internally, so more like nbviewer.org). What you see
    on GH is the result of last run by Peter (which may be forged,
    or out of date). But thanks for pointing it out.
 
      cup-of-tea - 7 hours ago
      Oh, I thought that they were run because they had the output,
      which I didn't think would be commited to the repository.
      Good to know.
 
Myrmornis - 4 hours ago
Literate programming / ipython notebooks make me very
uncomfortable.Primarily the problem is that it's a living body of
mutable state -- like an Excel spreadsheet, except it doesn't auto-
update -- if I poke at some bit of it, and then re-evaluate a cell,
some state will change, probably. And then maybe other cells'
outputs will be invalid. Hmm, maybe I should re-evaluate the whole
notebook? Oh, but some of the cells contain shell commands, for
example to download a dictionary file from norvig.com. Do I want to
do that? Maybe I should just undo the change I made. The ipynb is
in git of course. But instead of a nice diff showing lines of code,
the python code is held inside some JSON document.Ipython notebook
is beautiful technology, the front-end is really-well done. But
accumulating all that mutable state goes against all my instincts
as a programmer. I prefer editing .py files in my text editor, with
Make when necessary. And then creating output from input with a
single, transient, execution.
 
  abecedarius - 3 hours ago
  Is there a mode to rerun everything on every update? That's how
  my https://github.com/darius/halp works, and it's fine for
  working out code with cheap test cases. You wouldn't want to do
  that for data analyses that take even a second, but I've found
  myself using it a lot to develop code.
 
rb808 - 7 hours ago
Is the adventofcode.com fun/educational/worthwhile? I see it starts
again Dec 1. I like doing things like this but end up regretting it
as it sucks too much time solving unnecessary problems.
 
  wellpast - 7 hours ago
  Well I would consider any puzzle type problems technically
  "unnecessary" but I thought the adventofcode puzzles in 2016 were
  fun, well designed and tapped into some good CS algorithm and
  theory stuff.
 
  maxerickson - 7 hours ago
  I imagine the best way to make it educational would be to skip
  the problems you know how to solve and then try to solve the
  others without a whole lot of "cheating".Obviously looking at
  resources to learn approaches to solving the problem isn't
  cheating, but there is some value in spending time just trying to
  figure out an approach before doing that.
 
deepGem - 8 hours ago
His Design of Computer programs course on Udacity is
amazing.https://in.udacity.com/course/design-of-computer-programs--
c...
 
  dpflan - 7 hours ago
  I second this. It's interesting and informative to watch him
  break down programs and to see his code. Plus, you get treated to
  selections from his Hawaiian shirt collection.
 
  zerr - 7 hours ago
  The problem with this course is that it is quite boring if you're
  not interested in given subjects - e.g. Poker lectures make me
  sleepy.
 
    pvg - 5 hours ago
    He's not really trying to teach you poker or even how to write
    a poker program but rather how to solve problems by
    programming.
 
    Err_Eek - 6 hours ago
    Tried to go through the course a few years ago. In my case it
    was the regex bit. Trying to write the code is a massive chore
    with with very little payoff for going through it, and needing
    to go through the instructions several times in a row. Gave up
    on the course there.
 
      solaxun - 3 hours ago
      Great course, learned a ton from it, but yeah lesson 3 where
      you had to build / follow him building a regex interpreter
      was definitely a beatdown for me.  Everything else was pretty
      manageable, but still challenging.
 
      abecedarius - 4 hours ago
      Some people gave up on that section (week 5 of 10) and went
      on with the rest of the course. That seems to work out OK.(I
      felt a little bad about these reactions because I'd helped
      with that code. In its defense, I've also been told by a
      couple of people that they gained a lot by working through
      it.)
 
kwillets - 50 minutes ago
His regex golf seems kind of strange; he never mentions suffix
trees.  It seems like a fairly straightforward process to go
through and mark the shortest distinguishing infix for each string
in a generalized suffix tree.
 
cdancette - 7 hours ago
I really like his (How to Write a (Lisp) Interpreter (in Python)) :
http://norvig.com/lispy.htmlYou learn to build a lisp interpreter
in about 100 lines of python (you miss a few features like macros,
but it's still quite complete). Very nice to learn how language
interpretation works
 
  Recursing - 7 hours ago
  He shows a more complete version in another essay
  http://norvig.com/lispy2.html
 
ticotico - 3 hours ago
What would be a similar resource but for Ruby?
 
brian_spiering - 2 hours ago
Here is code for "Artificial Intelligence: A Modern Approach"
https://github.com/aimacodeNorvig wrote some of the Python version
https://github.com/aimacode/aima-python
 
pvg - 8 hours ago
'Etudes for Programmers' itself remains an interesting read and
entertaining problem set. And not a single one is about
implementing a Red-Black tree from memory.
 
  qntty - 1 hours ago
  In fact, you won't find any mention of red-black trees anywhere
  in the book, because the term wasn't invented until a few months
  after it was published :P
 
  pmoriarty - 5 hours ago
  This book looks interesting, but it's ridiculously overpriced for
  a book from 1978.
 
    pvg - 5 hours ago
    Yes, I'm not sure why it's never been reprinted or why used
    copies appreciate like they're made of pure bitcoin. There is a
    copy kicking around on libgen.