Hacker News new | ask | show | jobs
Programming for Cats (programmingforcats.com)
466 points by tigerlilythecat 1965 days ago
28 comments

Author here. Looking to get feedback from programmers before publishing. You can download a sample chapter at: https://programmingforcats.com/download/
Firstly, this is frikking hilarious. I giggled so loudly while reading it that my girlfriend asked what I was laughing at and she was so captivated by it that I had to sit on the couch with her reading it, flicking to the next page of the downloadable whenever she'd finished.

Secondly, I applaud the style/premise of the book. Cats especially are aiming at an underserved demographic that would absolutely be interested in programming but do not have the same number of and level of quality of 'ins' (ways of getting into programming) as other demographics. Along the same lines I would love to see 'scripting for Sims 4 builders' or 'Love Calculator and other scriots for your next sleepover'.

Thirdly, I really like the way that this is pitched. I feel like so few tutorials give a high level overview of programming rather than diving into specifics of languages. I can only think of "Hello Ruby" as being analogous, although I'm sure others exist.

Finally, I love the art style. Not much more to be said than that.

I can't really think of anything critical to add.

Thank you! I agree that cats are an underserved demographic! P.S. Tell your girlfriend to buy you the book for your birthday :)
As you liked this, you'll adore the original (?) entry in this genre, the delightful and pictorial

Why Cats Paint - A theory of feline aesthetics

http://www.monpa.com/wcp/

Are there any good resources for felines in tech?
So, there is already "The Naming of Cats", the book needs "The caching of Cats" and you have the two most difficult chapters covered.
If you like The Naming of Cats... check out RFC 2100
We need a little discussion as to the best programming paradigms for cats - I'd call it "Cool for Cats"
It is interesting how cats will implement tail recursion.
My cat still seems to run out of space when tail recursing when certain values get adjusted, I figure he needs to go into functional programming and no longer use shared and mutable positional values with what he uses to thread.
Awesome!
Don't forget "The Herding of Cats"!
Well, the two most difficult things with cats is how to name them, how to cache them, and the offset by one when counting the herd.
Would you like to have my username instead? If yes then I can message you my details via your site and we can mail hn together to request a change.
Aww I'm touched! But no need, this is not my main account and I only use it for this book, while I see you have a lot of history already. But thank you!
No worries. I like your book sample and thoroughly enjoyed your illustrations :)
Excellent work! Did your dog delete the sections on cat & mouse games, and em-cat-bedded programming? Oh, and making sure the code was appropriately tabbified?
I don't particularly like cats, but the intro is so well written I'd been tempted to read a little further.

A few folks have already vented that they don't like it. Don't care too much about it. A good bunch of people might love a book like this.

Herding cats is always my go-to metaphor for software projects.
this is purrfect, I love it can't wait to have the full book: good luck finishing it!
It will look good on the bookshelf next to https://www.goodreads.com/en/book/show/3113099-mr-bunny-s-bi...
Ethics? I'm pretty sure cats are above such pedestrian concerns.
Yeah violating ethics is something that happens when you get caught doing something others don't like and like any non-critical error a cat can just walk away from that or spend their time reprogramming the short-circuited device.
Will there actually be basics of programming in there or is it just for cuteness?

Buying it either way but it might be a means to finally kindling an interest into it in my spouse. :P

Meow. Mwahaha. Why Java? What made you think that cats would like OOP and lots of boilerplate?
To answer seriously: it might not be most people's favorite language, but it's probably one that the most practicing programmers today and people who ever took a programming language in school any time in the last 30 years, can read; and therefore it's probably the best choice as the basis for a humor book.

Java has so little syntax—and yet what little syntax it has is C-ish—that it's mutually intelligible to everybody from programmers who only know C, to programmers who only know Haskell. (Maybe not to programmers who only ever learned 6502 assembler, but they have their own humor books published 40 years ago.)

(Is there a term for this in linguistics? A measure of the eigenvector of mutual intelligibility a language has to all other spoken/written languages?)

i don't know, but, why not, say, BASIC? (most programmers being able to understand) or, Smalltalk, (little syntax, that ''fits inside a postcard'') or a lisp?
BASIC was commonly understood in the 80s despite lots of very different dialects and also in the 90s mostly because of Visual Basic. Is it still true that developers are familiar with BASIC? I would expect that JavaScript and maybe Python replaced BASIC as lingua franca. JavaScript looks simpler because it basically (pun intended) doesn't have a standard library to learn, with all the problems deriving from that.

Java doesn't seem a bad choice because if one sticks to the basics probably everybody can figure out what a simple program does. Smalltalk, I wonder how many people here ever read a Smalltalk source file [1]. Lisp, maybe more, at least to look once at all those funny parentheses (disclaimer, I wrote my fair share of Lisp but I know the effect it does on most people.)

[1] One random Smalltalk project from the list of trending Smalltalk repositories on GitHub https://github.com/svenvc/zinc

What you see in the Zinc repository is (obsolete) serialization format, not the code the programmer works with.
BASIC was commonly understood because it had no structure or boilerplate to learn, just a few commands.
I think you misinterpreted. It's not that more programmers know Java; it's that more programmers know a language with a syntax similar to Java.

I don't really know Java. But I know C, and Java looks enough like C that I can get what Java code is trying to do.

Personally, I've never learned any language with similar-enough syntax to BASIC, to understand what a (real, non-trivial) BASIC program is trying to do. Would I recognize a BASIC subroutine if I saw one? Probably not.

And it's not about a language having "less" syntax, either, but rather about it having very few syntactic features that're unfamiliar. Smalltalk is a rather large novelty the first time you see it. (`ifTrue`? You mean I've got to use closures to branch?)

"Java has so little syntax... ". I pronounce this the understatement of the (admittedly young) decade.
I took Object Pascal, C, C++, and Visual Basic. Never Java
Java is like an older brother. He gets all the work done, takes responsibility, accepts blame and still takes a lot of flak. Undetered.
I was thinking cats would prefer scala.
Looking at my cats, I presume they ignore anything neat and impressive, prepared for them. And instead go for the first thing that satisfies their current whim.

So, a hodgepodge of bash, basic, Python, JavaScript and some C. Or Java if it happens to be just on top in some menu. And NIH: obviously theyr own ZiggyLang or ZazaScript.

You are absolutely correct, because there is a great Scala library called "Cats"! https://typelevel.org/cats/
Think about a chapter about electronics! Soldering with cats is... Weird!
There's a POSIX utility named "cat" and cats already know what it does, but if a man wants to know, he just types the following words into the terminal and then presses <Enter>:

man cat

As a cat I've been waiting for someone to write a new UNIX shell for us named fish.
Do I have good news for you :) http://fishshell.com/
Why is it called fishshell and not shellfish?
I've always been surprised that nobody has built a small, secure shell named "nutshell"...
Because it went Shell, then like C Shell, then like Korn Shell, then like Bourne Again Shell, and then there's like TCL shell.

The 'sh' goes at the end. Shhhhhhhhh.

But there is "sh" at the end of "shellfish"!
Because it is Friendly Interactive SHell
Because...

Bash Shell -> Fish Shell

And if it was shellfish it would be a PITA to Google it.

You ever think you might be sounding a little shellfish?

  # eix sys-apps/dog
  * sys-apps/dog
       Available versions:  1.7-r6
       Homepage:            https://packages.gentoo.org/package/sys-apps/dog
       Description:         Dog is better than cat
:)
`man dog` for me gives:

SHEEPDOG(8) System Manager's Manual SHEEPDOG(8)

NAME dog - Command line utility for the sheep daemon

SYNOPSIS dog <command> <subcommand> [options]

DESCRIPTION dog - Sheepdog is a distributed storage system for QEMU. It provides highly available block level storage volumes to virtual machines. Sheepdog supports advanced volume management features such as snapshot, cloning, and thin provisioning. The architecture of Sheepdog is fully symmetric; there is no central node such as a meta-data server.

       The server daemon is called sheep(8).  A command line utility is avail‐
       able via dog(8).  QEMU virtual machines use  the  sheep  daemon  via  a
       block driver available in qemu(1).

       For more information, run 'dog <command> <subcommand> --help'.
This sort of writing is a wonderful departure from the traditional and is underrepresented in programming books. There are a few other examples that I know of which could be considered similar, but don't focus as heavily on the illustrative approach show here. Some works for comparison would be; Land of Lisp, Realm of Racket, Clojure for the Brave and True, Learn you a Haskell for Great Good!, Learn you some Erlang for Great Good!, and Why's (Poignant) Guide to Ruby. There may be more I am not aware of. On the topic of cats programming there is also JavaScript for Cats, which is great too.
JavaScript for Cats taught me more about JS than any other book or course combined. I don't know how it compares to the other examples you mention, but there's something about the informal style that just works for me and my attention span.
During the day, my cat will sit behind me while I am coding in Javascript. We practise mentoring system. He can focus in it, not disturbed by the cooked chicken. I think both of us may have ADD/ADHD.

:-)

"Chunky Bacon!"

I loved the characters, sidebars and various stories; I don't remember too much of the Ruby content, however.

I'd like to recognize and appreciate how exceptionally captivating these illustrations are. Karen's illustrations [0] bring whimsical beauty to this quirky book - it's a perfect match.

In the sea of "Corporate Memphis" [1][2], it's pretty refreshing to see the good stuff.

[0] https://www.karendonnelly.com/

[1] https://news.ycombinator.com/item?id=22890877

[2] https://www.are.na/claire-l-evans/corporate-memphis

PS - Feedback to the author: Dogs really love JPEGs in the PDF, so try to use SVG format instead.

Thank you! Karen's illustrations are indeed wonderful. And thanks for the tip re SVG. The originals are large raster images and the JPGs with lossy compression seem to be much smaller than a PNG embedded within a SVG. I'm open to suggestions though. The printed book will use the uncompressed images of course. :)
Excellent! I plan to buy your book and use it to teach my daughter programming. She loves cats and doesn’t leave the side of her cat. I will read this book to the cat, and maybe my daughter will pick up something too.
Indeed! And perhaps programming-style instructions to turn a page into an origami cat toy might be a great way to get our younger adults to engage.

https://www.origamispirit.com/2013/11/homemade-cat-toy/

That's an excellent plan :)
I have dreamed about using a pet feeder to gradually teach my pets how to use buttons and eventually limited keyboards, to see how abstract of concepts they are able to interact with.

I was hoping this was in that domain.. but alas, I could see this being entertaining to 8-14 year old children.

You might be interested in the YouTube channels:

* I am Bunny (a very fluent dog) ( https://www.youtube.com/channel/UCEa46rlHqEP6ClWitFd2QOQ )

* BiliSpeaks (a cat) ( https://www.youtube.com/channel/UCGMTesZlKa0Lokb7ZNqOJXQ )

>but alas, I could see this being entertaining to 8-14 year old children.

Or adults with a working sense of humor.

Sorry I was raised by the internet.. my sense of humor is much darker than this... (As I would imagine is the case for most 15 year olds)
The internet is and has always been appreciative (and chockfull) of light memes and cat videos as well...
What do you get when combine C++ and C# ?

You you get C@

Subreddit for Cat related programmer jokes:

http://www.reddit.com/r/C_AT

thanks for this. meow
Toilet water is a better name for Java indeed
Programming for cat.

    $ /bin/cat - | python -
    print("Hello, world!")
    ^D
    Hello, world!
You should have included some string manipulation.
Nah, handling mouse events would be better.
Knowing my cats, they would experience a buffet overload.
And a red spot in a loop ;-)
I recently wrote a high level book on data science with a bunch of pictures and illustrations (not nearly this nice).

I am a big proponent of the idea of fusing art and technical content in a pedagogical way.

This is really nice, even if I'm not the target audience, I can appreciate just how much care and effort went into this work. Best of luck moving forward!

> even if I’m not the target audience

Ah - so you’re not a cat?

do you have a PDF sample?
Not nearly the same level as this book. I have the table of contents and two pages.

https://andrewnc.github.io/preview/toc.png https://andrewnc.github.io/preview/page_20.png https://andrewnc.github.io/preview/page_94.png

There is a PDF version online that is "half priced" on gumroad to try and make it affordable for those who don't need a hardcopy

While reading this, I'm running the following commands on my media server in the sitting room corner:

    eject /dev/sr0 && read && eject -t /dev/sr0
The `read` is there so I only have to press the Enter key to close the disc tray before my feline fired catches it (I learned the hard way when the motor stopped working on `/dev/sr1`). He’s clever enough to have figured out that it’s me typing on the laptop that causes the DVD tray to eject and he gets equally excited when he sees me pick up the remote control for the Blu-Ray or CD player.
There was a man with a cat and he loved it so dearly. One day he thought if the cat would have been a woman, they'd have a nice time together. The God was listening – low and behold the cat turned into a beautiful woman instantly.

The man was surprised but overjoyed. A few years passed with both having a great time together, and one day ...

A mouse appeared in front of the woman and she grabbed it with her tender hand and ate it raw and alive right that very moment.

The man was disgusted to see this and the God remarked "Look I can change a being from outside but what they are inside even I can't change!"

Disclaimer: No pun intended; just sharing after reading the title for fun. No offence to cats around :)

I love it!

Coincidentally, after I managed to get my sister to name her daughter Ada after the programming language, I will eventually have to make an effort to get her acquainted with programming. This book will make a good starting point.

Ha, and Ada the programming language is named after Ada the badass.

https://en.m.wikipedia.org/wiki/Ada_Lovelace

I know, that is why I suggested the name. I would not have suggested she call her daughter COBOL or BASIC. (FORTRAN could make a cool name, though.)
Make sure she names her son Haskell.
This site is designed to destroy old eyeballs. Is it just me or is the font razor-thin? Firefox Ubuntu 19.04 HiDPI

Changing <body> CSS rule to "color: black; font-weight: normal" was required to actually read the page here

Thanks for that feedback. I will adjust the CSS.
Read the sample. I was sold as soon as I ran across terms like “The Society for the Promotion of Cat Ascendency (SPCA)” and “The Association for Cat Machinations (ACM)” and the following disturbingly accurate paragraph:

“Juvenile humans, in particular, are capable of having their internal logic be permanently reconfigured by repeated exposure to certain powerful instructions. These kinds of devices are called purrgrammable logic devices.”

Excellent work!

Another fine published resource for cat: https://www.shlomifish.org/humour/bits/Mastering-Cat/
Miauw! Does it have threads? I love threads. Especially if I can turn them into a mess. and what comes last knows what no-one first comes So that.
Yes, of course :) It reads "To deal with concurrency issues, you may be tempted to experiment with multiple threads. Do not do this. You will end up with some regrettable racing conditions and then a terrible tangle."
reminds me of "Mr. Bunny's Guide to ActiveX" https://www.goodreads.com/book/show/2433344.Mr_Bunny_s_Guide... - obsolete by now yet very funny
there's got to be a good python joke for cats but I can't think of what type it would be
Python is highly preferred by tabby cats.
who do not like C 'switch'
The cat would just eat the mouse, not so much for programming XD
This reminds me of The Unadulterated Cat by Terry Pratchett.

Good job!

I thought it was Cats for Scala (the library)
I thought it was Cats (the scala library) :D
Your silence on dogs is deafening...
We do not talk about dogs
Shut up and take my money!!!
Purrrr...
The people you’re hoping to sell this to aren’t interested in programming.

If you can’t sit down for an hour to learn something, you’re going to hate programming because that’s literally the entire job.

You’re thinking of the readers, not the buyers. This is an important distinction, since they may not overlap much.

I.e. this might be one of those books which is meant to be bought as gifts for others, regardless of whether the recipient will read them or not.