3 ms·
Ask HN: I like studying the concept of abstractions
I've just finished reading SICP and the content within the first chapters of abstraction and how to write general programs was something I really liked thinking about.
I bought "sequel" to SICP, Software Design for flexibility, but the amount of scheme needed will take me a while to be confortable with.
What else do you guys recommend me to study? Books, courses, blog posts. Anything goes :D
- sargstuff 4y agoOriginal request bit wide open on subject domain/topic subdomains. aka CS AI; CS programming language implimentation; implimenting a database engine Subject domain bit wide, but assuming 1-2yr computer science degree, biased towards lisp related data structures / algorithms (aka recursive tree data structures & algorithms). So, no distinction between metadata vs. structual storage unless noted. Anything beyond that tends towards masters & upper level undergraduate level material. aka review the implimentation of a programming language for algorithm & data structure usage per language features. aka Lisp in Small Pieces by Christian Queinnec; ; https://github.com/aalhour/awesome-compilers https://github.com/aalhour/awesome-compilers; On Lisp by Paul Graham; Let over Lambda by Doug Hoyte; C 'macro's pushed to maximum effect : https://libcello.org/ https://libcello.org/ Left out Comparison of languages; Transform from lang a to lang b; and language implimentation as discussions tend to assume masters / upper level undergraduate knowledge ;;; Basic groupings : 1) theory; 2) learning & training problems; 3) algorithm book on-line ; 4) notational theory ;;;* 1) Theory: ** Category Theory for Programmers by Bartosz Milewski ** Regular expressions ** subject of meta-programming : https://en.wikipedia.org/wiki/Metaprogramming ** subject of meta-modeling : https://en.wikipedia.org/wiki/Metamodeling ** programing pardigms : https://en.wikipedia.org/wiki/Programming_paradigm ** programning language patterns : https://en.wikipedia.org/wiki/Software_design_pattern ;;;* 2) Learning / Training problems: Lots of non-lisp language training problems sites. Other than go and try it in lisp language of choice, perhaps also use a <language> to lisp or lisp to <language> for hints if stuck. ** language & non-language specific coding problems : https://adriann.github.io/programming_problems.html -- a few links from adriann.githupb.io: -- https://www.spoj.com/problems/classical/sort=0,start=500 -- https://www.ic.unicamp.br/~meidanis/courses/mc336/problemas-lisp/L-99_Ninety-Nine_Lisp_Problems.html -- https://rosettacode.org/wiki/Category:Programming_Tasks ** https://lispcookbook.github.io/cl-cookbook/ ** meta-algorithms site : https://the-algorithms.com ** https://www.geeksforgeeks.org/data-structures/ ** https://www.geeksforgeeks.org/advanced-data-structures/?ref=gcse ;;* 3) algorithm book (on-line): ** Programming Algorithms in Lisp by VsevolodDomkin ** Competative Programming : https://cses.fi/book/book.pdf ** Algorithms by Jeff Erickson (non-lisp bent): https://jeffe.cs.illinois.edu/teaching/algorithms/ ** Open Data Structures : https://opendatastructures.org/ods-python/ ;;* 4) Notational stuff: ** Ebnf https://www.gimtec.io/articles/ebnf/ (check out the further readings!) ** awesome syntax-tree : https://github.com/syntax-tree/awesome-syntax-tree ** church encoding : https://en.wikipedia.org/wiki/Church_encoding ** mogensen-scott encoding : https://en.wikipedia.org/wiki/Mogensen%E2%80%93Scott_encoding` ** lambda calculus : https://en.wikipedia.org/wiki/Lambda_calculus ** Combinators : https://github.com/loophp/combinator
- sargstuff 4y ago'lisp is a binary tree / heap': https://code.google.com/archive/p/graphbook/ https://code.google.com/archive/p/graphbook/ functional programming jargon: https://github.com/hemanth/functional-programming-jargon https://github.com/hemanth/functional-programming-jargon practicing data structures (programming languages): https://opendsa-server.cs.vt.edu/ https://opendsa-server.cs.vt.edu/ https://opendsa-server.cs.vt.edu/OpenDSA/Books/PL/html/index.html https://github.com/CodyReichert/awesome-cl#data-structures https://github.com/CodyReichert/awesome-cl#data-structures