Notes on Programming as a practice. Collect notes about programming language at the “language” level without getting into specific details of each language. “on”, “about”, “of” programming.

The Myth of the Coder “Considering the historical distinction between coder and programmer” – Communications of the ACM, Aug 2024.

List of Tips | The Pragmatic Bookshelf — Extracted From The Pragmatic Programmer

norvig/pytudes: Python programs to practice or demonstrate skills.

My list of challenging software projects some programmers should try | andreinc; 2024.

Papers

Books

  • Nature of Code by Daniel Shiffman. “an online resource and print book exploring the unpredictable evolutionary and emergent properties of nature in software via the creative coding framework processing.”

2024 version with a new and rebooted version of this book built around javascript and the p5.js library. The book has a few new coding tricks this time, but it’s the same old nature—birds still flap their wings, and apples still fall on our heads.

The discussions on naming and abstraction are particularly illuminating, exposing some fundamental tradeoffs like synthetic vs natural names, or principled vs adaptable systems of abstractions. Were these notions more widespread, a lot of the pointless rants and debates we hear in programming circles would disappear.

I would not recommend this book to beginners - this book is most useful when you are experienced enough that your struggle is to make choices, not to get things to work. — HN

Courses

All CS-CMU courses


Other lists

Journals

Papers

Rosetta Code Analysis (Nanz & Furia, 2014)

Our statistical analysis reveals, most notably, that: functional and scripting languages are more concise than procedural and object-oriented languages; C is hard to beat when it comes to raw speed on large inputs, but performance differences over inputs of moderate size are less pronounced and allow even interpreted languages to be competitive; compiled strongly-typed languages, where more defects can be caught at compile time, are less prone to runtime failures than interpreted or weakly-typed languages.

Blogs

Tools

… is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool

  • Trinket — “lets you run and write code in any browser, on any device. Trinkets work instantly, with no need to log in, download plugins, or install software. Easily share or embed the code with your changes when you’re done.”

Tutorials

Projects

practical-tutorials/project-based-learning: Curated list of project-based tutorials

Videos

Articles

  • The Grug Brained Developer — grug brain developer not so smart, but grug brain developer program many long year and learn some things although mostly still confused

Concepts

Delimited continuation

Misc

Aphorisms on programming language design

via

See also: literate, pl, programming-aphorisms

References

Abelson, H., & Sussman, G. J. (1996). Structure and Interpretation of Computer Programs (2nd ed.). MIT Press.
Felleisen, M. (2001). How to Design Programs: An Introduction to Programming and Computing. The MIT Press.
Krishnamurthi, S. (2007). Programming Languages: Application and Interpretation. Shriram Krishnamurthi.
Nanz, S., & Furia, C. A. (2014). A Comparative Study of Programming Languages in Rosetta Code. http://arxiv.org/abs/1409.0252
Van Roy, P., & Haridi, S. (2004). Concepts, Techniques, and Models of Computer Programming. MIT press.
Wadler, P. (1987). A Critique of Abelson and Sussman or Why Calculating Is Better than Scheming. ACM SIGPLAN Notices, 22(3), 83–94. https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf