4 ms·
Somewhat tangentially, I really like the cartoons Lin has made. I’ve found I’ve naturally anthropomorphized code. Often when I start working with someone new
by dogprez 9y ago
Somewhat tangentially, I really like the cartoons Lin has made. I’ve found I’ve naturally anthropomorphized code. Often when I start working with someone new they get confused when I start talking about constructs like people. I think it’s given me a different perspective on encapsulation and concurrency than most people.
I don’t know if I’ve ever worked with someone that thinks the same way. When I work on code that wasn’t designed that way I force my brain to think like the CPU instead of in terms of little elves with different job... Not sure if anyone else has experienced this 2 modes of thinking about code. It seems like FF engineer’s might be thinking in the same terms as they tackle concurrency refactors.
- mxuribe 9y agoYou are not alone in your way of thinking! Also, I had never previously seen the code cartoons produced by @linclark...but now seeing them (and digging a little deeper), count myself a fan!
- dogprez 9y agoIf I had to guess why, I'd say that I am mostly self taught and more of an extrovert. It's probably the only way my brain could trick me into sitting in front of a computer all day instead of talking with other people. I also played with action figures late, until I was 12... around the same time I started programming... I think I'm having a psychological breakthrough, haha.
- grigory 9y agoWhen I explain various aspects of concurrency and multi-threaded programming to non-programmers, using analogy of people doing some tasks really helps. I've picked this up from Feynman's lectures on computing - highly recommend them!
- whatever_dude 9y agoI feel I've always done that because I learned programming through Usborne's books, and her work reminds me of that. Usborne books helped me grok difficult things very fast when I was about 10 years old. For a while, when using variables and arrays, I would always think of robots grabbing things from shelves. Examples and PDF downloads (!): https://boingboing.net/2016/02/07/usborne-releases-free-pdfs-of.html https://boingboing.net/2016/02/07/usborne-releases-free-pdfs... I wish those were still around when I was learning about pointers. Would have made things so much easier!
- snikeris 9y agoDidn't Djikstra write about this? I wasn't able to pull anything up, but maybe this will jog someone's memory.
- snikeris 9y agoFound it: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EW... Section beginning, "My next linguistical suggestion is more rigorous"...
- dogprez 9y agoThanks for finding it. Here's my attempt at a tldr: Teaching with analogy is bad because it robs students of jumps in understanding. By scaffolding new concepts on things they already know they are losing the opportunity to learn how to make cognitive leaps, which is a skill itself. One that Dijkstra believes is is paramount to combatting dictators or zealotry. Did I read that right?
- snikeris 9y agoYeah I think so. My takeaway was that operational reasoning, e.g. "this guy receives a message from this guy, then does this" is a waste of effort. What Dijkstra wants you to do is elevate yourself above that so you're reasoning in more powerful abstractions. I thought his analogy was illuminating of the point: "The point to get across is that if we have to demonstrate something about all the elements of a large set, it is hopelessly inefficient to deal with all the elements of the set individually: the efficient argument does not refer to individual elements at all and is carried out in terms of the set's definition."
- ken 9y agoMe, too. I think about a lot of concepts in terms of real-world objects. When I'm in the shower looking at the tiles, that's an array -- how do I store my data there efficiently, and minimize the need to move blocks of tiles around? When I'm stuck in traffic, I'm the data in a network packet -- how do traffic engineers solve this problem? What's the software equivalent of a carpool lane, or a double-decker bus, or a side street? How is a stop sign different from a street light (latency versus throughput)? Layout constraints seem exactly like theatrical stage positions to me -- maybe that's why I find the Cassowary system perfectly intuitive, and CSS layout not at all. I liken this to Einstein's thought experiments: what is the experience of riding on a photon at the speed of light? I find it tremendously useful, and I'm not sure why it seems to be more popular in physics than in computer science. Perhaps it's as simple (and arbitrary) as "Einstein was a fan, and Dijkstra was not."