In this repository you will find a lot of stuff which I've been practicing throughout the years. I have a bunch of other stuff on my other computers, so as soon as I sort them I will be posting them here.
In addition to the practices, here are my favorite technical readings that shaped my knowledge in a way:
|Name of the book||Amazon link||Online link|
|1. The C Programming Language||https://www.amazon.com/dp/0131103628|
|2. The Little Schemer||https://www.amazon.com/dp/0262560992|
|3. Learn You a Haskell for Great Good!||https://www.amazon.com/dp/1593272839||http://learnyouahaskell.com/chapters|
|4. Proofs and Concepts||http://people.uleth.ca/~dave.morris/books/proofs+concepts.html|
|5. The Pragmatic Programmer||https://www.amazon.com/dp/020161622X||Tips summarized https://blog.codinghorror.com/a-pragmatic-quick-reference|
|8. Competetive Programmer's Handbook||https://cses.fi/book.html|
|9. Software Foundations Vol. 1: Logic||https://softwarefoundations.cis.upenn.edu/lf-current/toc.html|
- This is a classic. I believe any programmer should at least be aware of the things C offers, like manual memory management, working with stacks, etc. This is found to be useful even when programming in higher level languages. For example, whenever you create an anonymous function in JS, given its scope change we can see it as the stack frame change.
- This book really helped me grasp recursion, and Scheme.
- Even if you don't program in Haskell after reading this, it introduces you to a lot of good concepts (which some can be applied to other programming languages as well). Pattern matching, Algebraic data types, Monads/Monoids, Map/Reduce and their implementation, Currying, etc.
- Introduces the reader to set theory, and proving properties for it. Found to be useful to prove correctness of functional programming languages programs. For example, using induction to prove the correctness of
- Introduces the reader to common programming patterns, such as DRY, keeping up to date with tools, etc.
- Work in progress. Covering some general concepts about programming, such as: abstraction, recursion, DSLs, streams, etc.
- Work in progress. Algorithms and complexitiy.
- Logical foundations, covering functional programming, logic, theorem proving and Coq. Good prerequisites for this are books 3 and 4 from this list.
- Work in progress. An interesting metalanguage for working with formal systems, and formalizing mathematical proofs. Specifications of the language is only 4 pages.
In addition, here are some good technical tutorials:
|Name of the tutorial||Online link|
|1. Win32asm tutorial||http://www.madwizard.org/download/tutors/win32asmtutorial.zip|
|2. DBMS Lecture Notes||http://www.cs.sfu.ca/CourseCentral/354/zaiane/material/notes/contents.html|
|3. Lambda calculus||https://en.wikipedia.org/wiki/Lambda__calculus|
|5. Idris tutorial||http://docs.idris-lang.org/en/latest/tutorial/|
- I read this tutorial a long time ago. It helped me understand 32-bit assembly in Windows.
- The theory behind DB systems. Relational algebra, etc.
- An interesting way to declare integers (and other objects) in terms of f(x), f(f(x)), etc.
- Prolog was fun for me because it's a different non-mainstream paradigm and also introduces some interesting concepts.
- Idris is an interesting functional programming language with dependent types that is combined with IO support.
Interesting not-so-technical books/readings:
|Name of the book||Link|
|1. A Mathematician's Lament||https://www.maa.org/external_archive/devlin/LockhartsLament.pdf|
|2. The Laws of Simplicity||https://www.amazon.com/dp/0262134721|
|3. Redesigning Leadership||https://www.amazon.com/dp/0262015889|
|4. How to think like Sherlock Holmes||https://www.amazon.com/dp/014312434X|
|5. Propositions as Types||http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-types/propositions-as-types.pdf|
- Criticizes the present mathematical education.
- General interesting rules about design, technology, business, and life.
- Interesting observations on how leaders should lead.
- A mix of story telling and psychological observations.
- Historical overview of how the concept Props as Types was developed (e.g. forall n, n + 0 = 0 : Prop.)