Gerald Sussman: Programming is (should be) fun (2022) [video]
youtube.com
youtube.com
"Programming for the Expression of Ideas"
https://www.infoq.com/presentations/Expression-of-Ideas/
Very adjacent to the quote above. He talks about how programming helps to understand things (mathematics, physics...) in a deeper way.
This bit on mathematical notation and the clarity provided by programming is awesome to see:
"Newtons equation is really a macro, with untyped and undeclared parameters"
> Software development is all about knowledge and decision-making based on that knowledge, which in turn creates additional knowledge. The given problem, the decision that was made, the reason it was made that way, the facts that led to that decision, and the considered alternatives are all knowledge... each instruction typed in a programming language is a decision... Software design can last a long time. It can last long enough to forget about previous decisions made, as well as their contexts. It can last long enough for people to leave, taking with them their knowledge, and for new people to join, lacking knowledge. Knowledge is central to a design activity like software development. Most of the time this design activity is, for many good reasons, a team effort involving more than one person. Working together means making decisions together or making decisions based on someone else's knowledge. Something unique with software development is that the design involves not only people but also machines... Using a formal language like a programming language, we pass knowledge and decisions to a computer in a form it can understand. Having a computer understand source code is not the hard part... The hardest part is for other people to understand what has been done so that they can then do better and faster work. The greater the ambition, the more documentation becomes necessary to enable a cumulative process of knowledge management that scales beyond what fits in our heads. When our brains and memories are not enough, we need assistance from technologies such as writing, printing, and software to help remember and organize larger sets of knowledge.
- the way pain-killers work tells you a lot about how keyloggers or man-in-the-middle attacks work
- look at how DNA "syntax checking" happens during mitosis to learn about compiling in general
- a puppy swallows whatever it sees; this gives the immune system enough test data about the surroundings etc. (similar to ML)
- a huge amount of cyber-security concepts can be understood by learning biology
Anyways I asked one question and he immediately sensed there was an EE in the room and went to the side blackboard and showed how we can figure out how an opamp works through first principles.
So much energy and intelligence in that man. Left an impression for sure.
> I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don’t think we are. I think we’re responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don’t become missionaries. Don’t feel as if you’re Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.
"Hey Mr Customer... don't worry that all your data is corrupt or you lost access to your disks ... you have been set in a new direction and we're just making your day job 'fun'"
They're not Bugs ... what you have here are little balls of 'fun' /s
;)
I think the goal should still be fun. It’s not fun to lose the beans.
I think when the coding becomes overly fearful is when bugs and problems happen. Maybe you don’t have much leeway around the bean part, but you have a lot of room to test and validate that system. How do you make that system as fearless to work with as possible?
It’s a difficult goal, but achieving it is a worthwhile accomplishment. A difficult puzzle that some might find fun.
The goal of a software project, however, is not optimal individual learning about programming, it is usually something else.
Sure. It’s my goal. Not my project’s. My project doesn’t care about anything really.
The name of the game for me (the programmer) is maximizing my output without getting burned out. To that end, my intermediate goal is to find fun where I can. That’s the game.
If I'm not having fun, then I'm in the wrong position and need to move on. Life is too short to have my day job be a grind, and I won't produce great work in that condition.
The majority of "programming" should probably be thought of like "welding" - essentially a vocational school subject. If you want to develop a new welding technology, sure that's a graduate school-level academic/research undertaking, but the vast majority of welders - like programmers - will work with well-characterized tools and fairly simple systems. A vocational student doesn't want to waste any time learning MIT/GNU Scheme and then never use it again in their professional career - but an academic student might find it rewarding, rather like learning to read and write in Linear B as a linguistics major.
Certainly any work can be 'fun' - I worked in biotech labs for years, some were fun and some were terrible, but that had little to do with the nature of the work - it came down to quality and emotional stability of co-workers and managers, whether the workspace was well-designed and adequately supplied and safe to work in (sloppy labs are dangerous and unhealthy), if the pay was high enough to live a decent life outside of work, whether there was a corporate culture of cutting corners and letting shoddy work slip by (assuming you want to take some pride in doing a job right) - and it's the same in any other professional situation like programming industrial control systems and so on.
So I do think that programming is like welding, but not in the way you meant it.
Maybe your view of welding is that it's comparable to digging ditches? And one doesn't have to go into hundreds of thousands of dollars in debt to attend some exclusive college to be smart, motivated and curious.
Analogously, computerers who are best at computering aren't the ones who just want to learn enough jquery to get that computer gig.
So what's the point of education? Is it to illuminate the path to excellence for those who choose to follow it, or is it to try to land someone a job and no other thing?
> "To attend Massachusetts Institute of Technology for four years, the cost, based on 2022-23 numbers, would be $319,400, including tuition and fees, books, and room and board."
So I am forever thankful for having been exposed to SICP early on.
The anecdotes in the first few mins are nice as well.
I'll blog about it one day (I know it's been five years I've been saying that but hey) but... Sussman invited me for tea in his office so I ran to the MIT co-op but couldn't find SICP there so I told the person there I really needed that book for I'd see Sussman the next day: he called the Harvard co-op and they told me they had one copy in stock. So I uber'ed to the Harvard bookstore and bought SICP.
Next day I went to Sussman's office at the MIT and when I arrived Abelson was there, by chance (he was leaving) so they both dedicated me my copy of SICP. And Sussman added "had you been there 15 minutes earlier my wife would have signed it too!".
I had no idea his wife was the proofreader for SICP.
Fun story. Probably rambling by now but all this really happened. I've got a cool picture of these two wizards and me holding the purple book they just signed!
A novice travelled to the East to learn at the feet of Sussman. As Sussman lectured on writing device drivers with low-level Lisp code, the novice interrupted: "But Master, is Lisp not a high-level language?" To which Sussman replied: "There was once a fisherman who spotted an eagle on the shore. 'Brother Eagle,' said the fisherman, 'how impossibly distant is the sky!' The eagle said nothing, and flew off." With that, the novice was enlightened.
It's fictional, but it's based on a real-life Sussman encounter I had. A hacker (it may have been Dimitris Vyzovitis) was telling me about things he'd done in "low-level languages like C and Lisp". Then I said "But Lisp is high-level!" at which point the hacker paused and said "Let me get Jerry." "Jerry" turned out to be Gerald Sussman, who explained to me, in the most nerdy-enthusiastic Sussman-like way, that Lisp was the low-level language of a virtual machine which he had actually implemented in hardware[0]. And it was profoundly enlightening.
[0] See Steele, G.L. and Sussman, G.J., AI Memo 514, "Design of LISP-based Processors, or SCHEME: A Dielectric LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode", https://dspace.mit.edu/handle/1721.1/5731
My current favourite is https://www2.cs.sfu.ca/CourseCentral/383/havens/pubs/lambda-...
Debunking the "Expensive Procedure Call Myth or, Procedure Call Implementations Considered Harmful or, LAMBDA: The Ultimate GOTO
But I see some recent authors have gotten into the game, so it could be one of them updates that slot.
Lambda the Ultimate Imperative ... the Ultimate Declarative ... The Ultimate GOTO ... The Ultimate Op Code
IMHO SICP feels "timeless" somewhat because of that.
Utilitarian programming is like utilitarian food. Programming should be seen as an act of worship to the god of simplicity. If the artificial world intrudes and makes the program complicated, this is what leads to suffering. Ultimately it is the world which should be changed.
The Sussman quote from the SICP classes about understanding complicated things makes it in to a lot of my presentations (in architecture of all things) and it's the slide that ALWAYS gets people frantically taking a note.
> "The key to understanding complicated things is knowing what not to look at, not to compute, not to think" —Sussman.
But since I have become a freelancer and I started working in smaller contexts where the focus is to ship decent code at a higher rate this passion has vaned. I think this is overall good for me as an engineer, but has removed lots of fun and often learning from my daily job.
freelancing and consulting, is usually about problem solving, and even problem shooting (get rid of the problem as soon as possible, elegance not required)
you want to be a builder a tool maker, with freelancing, i dont see this happening, if you move to a consultant role maybe
for me consultant are a bit more into longer term relationship , so maybe this should be your next step
Still, I tend to choose high pressure small environments (I honestly get bored in low productive corporate environments).
You have a ditch to dig and you just get into it.
Stack of simple web pages to knock out. Bunch of business rules to code up. Couple of routine CRUD screens.
Architecting is fun. Whiteboard, pens, couple folks in the same groove around the table. Sussing it out. Waving off the 0.01% edge case “what ifs”.
Fighting frameworks? Fighting tools? Wiring together badly behaving black boxes?
That’s not fun.
Neck deep in bad documentation. Heated discussions talking past each other on a forum. Negotiating with the dumber than rocks AI that had a flash of competence.
I like to say if I wanted to wire together badly documented black boxes, I’d have become an EE.
I’ve always said: “I love programming, but I hate computers.” All the fiddling. Software going stupid. Updates frustrating new UX. “Honey, the printer isn’t working.”
Coding is fun.
The rest of it, not so much.
Now I need pipelines, helm charts, and other 5 tools +20 mins of busy nothing work to see if a small change fixed something.
We don't pick a framework so that we can spend hours trying to figure out why our model of what it does is different from what it actually does. We run ./configure so we can run make, not so we can spend time determining why running autoconf results in the functionality we're expecting to use getting stubbed out.
And so on. The amount of time we have to spend on things which aren't the problem can grow arbitrarily large. Manifesting a solution to the actual problem, with all of its intrinsic complexity, that is fun.
> That’s not fun.
<popular cloud platform> makes me want to shoot myself in the face. How did we get to this point? What the fuck? Did people just need a lot of busy work to make themselves feel productive???
I like to say that Electrical Engineers don't believe in magic; Computer Scientists don't believe in physics!
I worked for Gerry making software for 6.002x an experimental intro EE class. I remember when Gerry came back from a weekend with a whole constraint propagator coded up!
But apart from that, his enthusiasm can even make the mseemingly most boring topic interesting.
I'd personally start either at "the story of Haskell" Escape from the Ivory Tower https://youtu.be/cOqxiS-WN1w?si=1iXpGE7cJZa4tbbJ Or something more recent, about Epic's Verse https://youtu.be/OJv8rFap0Nw?si=OE2mUllQfLmV29Bk
Totally, his ever-fresh, ever-genuine excitement with all this stuff is so contagious (for the duration, and then some =)
I knew a guy, his construction company built half of Lake Tahoe back in the day. When he retired he built himself a work shop in the basement and made furniture until the day he died. It's incredible furniture. I'm sitting at one of his desks, on one of his chairs. 40 years old and still in excellent condition, and beautiful! Helical legs. You cannot buy furniture like this in the store. Handmade by a master craftsman at the height of his skill and knowledge. Made solely for the love of the craft and the joy of giving gifts.
That kind of person has fun working.
Computer programming IS fun to the kind of person who enjoys computer programming. Those people can do what they like.
The rest of us want "boring" software: machines that get the job done, that don't break, that don't spew private data into the cloud willy-nilly, etc.
If making that kind of software isn't intrinsically fun for you then maybe don't be a computer programmer? (We made a huge mistake making the normals think that learning a bit of JS was a viable career path.)
Industrial software shouldn't be fun (except of course to the people who already find it fun to deliver solid working software!)
- - - -
In re: bugs being fun little learning opportunities...
Margaret Hamilton worked out how to write bug-free software during the Apollo 11 project. The IT industry collectively went, "meh."
We need a serious attitude adjustment.
That's what we lack in software. If you do electrical work that isn't up to code, you as the electrician are liable. That means literally that if you touch a system, and you were the last one to touch it, you're liable. So it better be up to code when you're done.
It should be the same for computerers.
Since search engines suck so bad lately: anyone know a good complete summary of that method of hers?
And here is a critique: https://apps.dtic.mil/sti/pdfs/ADA198753.pdf
I have tried to look into this before, and I never can find much information about it. Last I checked, her homepage was basically trying to sell some proprietary system to customers who have bought into her marketing about "bug-free software". But actually trying to figure out how it works, or how to do it oneself, has remained elusive. Saying "The IT industry collectively went, 'meh.'" is kind of misleading. It's not exactly clear _what_ she worked out, but I'm skeptical of the claim that she "worked out how to write bug-free software". And if she did, she isn't exactly shouting from the rooftops about how to do it.
That's an often repeated myth but it collapses the moment one digs a bit further (rather than swallowing preposterous statements). She was a glorified manager at best, others did the programming that actually mattered.
Hal Laning [2] was primarily responsible for what Hamilton gets credit for.
[1] https://old.reddit.com/r/badhistory/comments/18yum8s/no_marg...
After 36 years i can say "i only wanna get the sht done" :)
For the problems I like, programming is fun, for those I don't like, I prefer only get shit done too (like part of my job).
"No physical limitations"
Is this how you get Electron apps? Mike Acton would have a thing or two to say here.
Sussman created a follow-up course to SICP [2] which is still based on Lisp and still being offered today.
so the move away from lisp is not bad
and while i dont like python purely as programming language (its not theoretically engaging or fun) python is top 3 or 5 in practice, people like it
Learning this or that programming language isn't at all what it's about--you can (and will over and over again throughout your career) do that on your own time. It's about developing the abstract thought pathways that enable you to quickly learn and think about computing.
I don't know why MIT chose to stop teaching the course, but it sure would lower my opinion of that institution if it was something to do with the direct commercial appeal of "knowing Python".
Just saw this a few days ago:
Raku -Ofun for Everyone - Daniel Sockwell
After watching the full video, I agree that the title could be more descriptive of the content.
You can check out these videos, they may be something like what you are looking for:
Raku: The Programming Language You Didn't Know You Needed
(It is by Curtis Poe, a Perl veteran.)
https://youtu.be/LEFVQaSgJ60?si=WqQvJw4ly-1voKgJ
Raku syntax I miss in other languages - Leon Timmermans
https://www.youtube.com/live/elalwvf mYgk?si=65QAF_CP07lVUT5O
I got both of these from a search for "raku language talks" in YouTube, IIRC.
HTH.
But when I want to feel a spiritual connection to the fundamental principles of my work effort, academia is one of several places I turn to.
I learned a lot from Sussman too and I'm very glad I've gotten the chance to buttonhole him in the hallway several times and ask him a question and let him talk. I always learn something much more interesting than the answer to my original question.
I highly recommend stopping by and saying hi to Sussman if you find yourself at CSAIL.
These days, I wouldn't take (or get)a job in most software companies. I suspect that in quite a few non software companies there are software craftspeople working away quietly.
Its widespread adoption (and usually counter to the spirit of the original Manifest itself) took years however — years where most places, the craftfulness was still prevalent. Myself I haven't encountered that in teams until the mid-2010s, less than a decade ago. Might have been earlier in SV, of course, though. And the bigger Java/.NET/Enterprise shops.
There was plenty of that before 2000, but it was more in the mainframe world. "Data processing". Government contracts. Business applications. "Software analysts" who broke the problem down into small chunks, and gave those to programmers.
I have been in the industry for 39 years, and I avoided almost all of that, but it was there...
Anecdotally, programmer colleagues that view themselves as artists are generally harder to work with than those that identifies as craftsmen. It's generally much easier to have a sound argument about someone's work if they don't view it as their art.
Ultimately programming is half technical (what does the computer do) and half human expression (reading and writing code).
The latter [0] is really more of an art than a science or an engineering discipline. Look at all the attempts to prove that one particular way of writing programs is more productive, comprehensible or maintainable than others. They all failed in unique ways, perhaps because human communication is highly complex and contextual. The only thing we all might agree on is "consistency is good".
[0] The former is in my opinion generally overlooked in many fields, even though it's the most measurable. But it is apparently often in conflict with with the latter unfortunately.