# Programming

- Page: https://shared.btbytes.com/p/programming
- Date: 2020-04-28
- Tags: programming

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](https://cacm.acm.org/opinion/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](https://pragprog.com/the-pragmatic-programmer/extracts/tips) -- Extracted From The Pragmatic Programmer

[norvig/pytudes: Python programs to practice or demonstrate skills.](https://github.com/norvig/pytudes)

[My list of challenging software projects some programmers should try | andreinc](https://www.andreinc.net/2024/03/28/programming-projects-ideas); 2024.

## Papers

- ([Wadler 1987](https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf))  [PDF](https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf)

## Books

- [Nature of Code](https://natureofcode.com/)  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](https://shared.btbytes.com/p/processing)."

> **2024 version** with a new and rebooted version of this book built around [javascript](https://shared.btbytes.com/p/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.

- [Elements of Clojure](https://elementsofclojure.com/)

> 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](https://news.ycombinator.com/item?id=21091044)

- (Van Roy and Haridi 2004)
- (Abelson and Sussman 1996)
- [Programming Languages: Application and Interpretation](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/) -- (Krishnamurthi 2007)
- [How to Design Programs][htdp] --  (Felleisen 2001)
- [free-programming-books/free-programming-books.md at master · EbookFoundation/free-programming-books](http://web.archive.org/web/20170720131925/https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md)

## Courses

[**All CS-CMU courses**](http://web.archive.org/web/20131022010453/http://www.cs.cmu.edu/course-listings-department)

* [15-112 Fundamentals of programming and computer
    science](http://www.kosbie.net/cmu/fall-13/15-112/) (F2013)
* [15-122 Principles of Imperative
    Computation](http://www.cs.cmu.edu/~fp/courses/15122-f10/) (F2010)
    - [prereq:15-112]
* [15-210 Parallel and Sequential Data Structures and
    Algorithms](http://www.cs.cmu.edu/~15210/)
* [15-212 Principles of Programming](http://www.cs.cmu.edu/~me/212/)
* [15-213 Introduction to computer
    systems](http://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/)
    (2010)
* [15-312 Foundations of Programming Langauges](http://www.cs.cmu.edu/~fp/courses/15312-f03/) taught by [Frank Pfenning](http://www.cs.cmu.edu/~fp/) -- [prereq: 15-212]

----

- [CS312 - Data structures and functional programming](http://www.cs.cornell.edu/Courses/cs312/2008sp/)

   -   Spring 2008, Cornell CS
   -   Uses SML/NJ.
   -   PS5 implements a mini-ML compiler. source included.

- [CS 242: Programming Languages, Fall 2018](http://cs242.stanford.edu/) and [Fall 2017](http://cs242.stanford.edu/f17/)

* [Programming Language Concepts for Software Developers](https://web.archive.org/web/20120523194304/https://www.itu.dk/courses/BPRD/E2010/plcsd-0_50.pdf) by Peter Sestoft, 2010; uses F#.
* [CAS 761: Generative Programming](http://www.cas.mcmaster.ca/~carette/CAS761/W2024/index.html)

### Other lists

* [620 Free Online Programming & Computer Science Courses You Can Choose from to Kick Off 2020](https://www.freecodecamp.org/news/free-online-programming-cs-courses/); Jan 2020

## Journals

* [The Programming Journal](http://programming-journal.org/). Example - [Lisp, Jazz, Aikido – Three Expressions of a Single Essence](http://programming-journal.org/2018/2/10/)

## Papers

Rosetta Code Analysis ([Nanz and Furia 2014](http://arxiv.org/abs/1409.0252))

> 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.

- [Planning the Software Industrial Revolution](http://web.archive.org/web/20160210201523/http://bat8.inria.fr/~lang/hotlist/free/licence/papers/cox/CoxPSIR.html) by Brad J Cox.

## Blogs

- [Modest list of programming blogs](http://danluu.com/programming-blogs/)
- [Exotic Programming Ideas](http://web.archive.org/web/20201205122253/https://www.stephendiehl.com/posts/exotic04.html) series from [Stephen Diehl](https://www.stephendiehl.com/)

## Tools

- [Python Tutor - Visualize Python, Java, JavaScript, TypeScript, Ruby, C, and C++ code execution](http://pythontutor.com/)
- [The Language Server protocol](http://langserver.org/)
> ...  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](https://trinket.io/) -- "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

- [PCITRW](http://seppo0010.github.io/pcitrw/) (Programming Concepts in the Real World) -- tutorial on github.
- [Developer Roadmaps - roadmap.sh](https://roadmap.sh/) -- visual maps of learning plans. eg: [DBA Roadmap: Learn to become a database administrator with PostgreSQL](https://roadmap.sh/postgresql-dba)

## Projects

[practical-tutorials/project-based-learning: Curated list of project-based tutorials](https://github.com/practical-tutorials/project-based-learning)


## Videos

- [Stop Treading Water: Learning to Learn by Edward Kmett - Vidme](https://vid.me/vJvm/stop-treading-water-learning-to-learn-by-edward)



## Articles

- [A Bunch of Programming Advice I’d Give To Myself 15 Years Ago](https://mbuffett.com/posts/programming-advice-younger-self/) by Marcus Buffett.
- [12 resolutions for programmers](http://matt.might.net/articles/programmers-resolutions/)
- [Perhaps Not The Answer You Were Expecting But You Asked For It (An Accidental Blook)](https://personal.cis.strath.ac.uk/conor.mcbride/so-pigworker.pdf) by Connor McBride.
- [Mastering Programming](https://www.facebook.com/notes/kent-beck/mastering-programming/1184427814923414) by Kent Beck.
- [Rubber Ducking: The Various Kinds of IO - Blocking, Non-blocking, Multiplexed and Async.](https://www.rubberducking.com/2018/05/the-various-kinds-of-io-blocking-non.html)
- [Imaginary problems, the root of bad software – George – Medium](https://medium.com/@george3d6/imaginary-problems-d4f2921bd1b8)
- [Learn your standard library – Letters To A New Developer](https://letterstoanewdeveloper.com/2019/03/11/learn-your-standard-library/)
* [Dependency injection is dynamic scoping in disguise](http://gustavlundin.com/di-frameworks-are-dynamic-binding/). [HN](https://news.ycombinator.com/item?id=21405962)

* [The 80/24 rule](https://blog.ploeh.dk/2019/11/04/the-80-24-rule/)
* [80×25 « blarg?](http://exple.tive.org/blarg/2019/10/23/80x25/)
* [5 Things I've Learned in 20 Years of Programming - DaedTech](https://daedtech.com/5-things-ive-learned-in-20-years-of-programming/); [HN](https://news.ycombinator.com/item?id=21603920); Nov 2019.
* [The Hard Part of Learning a Language • Hillel Wayne](https://www.hillelwayne.com/post/learning-a-language/)
- [The Grug Brained Developer](https://grugbrain.dev/) -- grug brain developer not so smart, but grug brain developer program many long year and learn some things although mostly still confused

[htdp]: http://hdtp.org/


## Concepts

### Delimited continuation

* [deech: "&#64;mattgreenrocks and &#64;andywingo One of my favorite abstractions! https://t.co/Oo42zSIxX8"](https://x.com/deech/status/880057112835084288)
* [guile and delimited continuations -- wingolog](https://wingolog.org/archives/2010/02/26/guile-and-delimited-continuations)
* [growing fibers -- wingolog](https://wingolog.org/archives/2017/06/27/growing-fibers)
* [Continuations and delimited control](http://okmij.org/ftp/continuations/)


## Misc

[Aphorisms on programming language design](http://www.rntz.net/post/2017-01-27-aphorisms-on-pl-design.html)

![](https://files.btbytes.com/images/i.imgur.com/Ttxh23w.jpg) -- [via](https://x.com/pasiphae_goals/status/965988225083944960)

* [More Good Programming Quotes | Henrik Warne's blog](https://henrikwarne.com/2016/04/17/more-good-programming-quotes/)
* [More Good Programming Quotes, Part 2 | Henrik Warne's blog](https://henrikwarne.com/2017/09/16/more-good-programming-quotes-part-2/)
* [More Good Programming Quotes, Part 3 | Henrik Warne's blog](https://henrikwarne.com/2019/04/03/more-good-programming-quotes-part-3/)


## Links

* [Avanier.now.sh](http://web.archive.org/web/20230206073243/https://avanier.vercel.app/wiki/links.html)
* [PLT metalist by Steven Shaw](http://steshaw.org/plt/)
* [sdmg15/Best-websites-a-programmer-should-visit: Some useful websites for programmers.](https://github.com/sdmg15/Best-websites-a-programmer-should-visit)
*[charlax/professional-programming: A collection of full-stack resources for programmers.](https://github.com/charlax/professional-programming)
* [romenrg/evergreen-skills-developers](https://github.com/romenrg/evergreen-skills-developers) -  "List of evergreen skills that should serve as a fair assessment of software developers / engineers; as opposed to framework trends"


See also:   [literate](https://shared.btbytes.com/p/literate), [pl](https://shared.btbytes.com/p/pl), [programming-aphorisms](https://shared.btbytes.com/p/programming-aphorisms)

# References

- Wadler (1987). [A Critique of Abelson and Sussman or Why Calculating Is Better than Scheming](https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf).
- Van Roy, Haridi (2004). Concepts, Techniques, and Models of Computer Programming.
- Abelson, Sussman (1996). Structure and Interpretation of Computer Programs.
- Krishnamurthi (2007). Programming Languages: Application and Interpretation.
- Felleisen (2001). How to Design Programs: An Introduction to Programming and Computing.
- Nanz, Furia (2014). [A Comparative Study of Programming Languages in Rosetta Code](http://arxiv.org/abs/1409.0252).
