This is a living document. The ideas in it are subject to change as I explore while learning and implementing them.
I want to learn in a few areas that are important for me:
- computer science fundamentals
- functional programming with Haskell
- music theory to be better at playing ukulele (and composing music in the future)
- drawing while I learn
- creating animations from my drawings
Since all those areas are interdependent for me, and that’s apparently how my brain works in general, I want to devise a learning campaign with multiple adventures, that will help me grow.
My long-term capstone goal is building an application for learning music theory with ukulele, with hand-drawn graphics and Haskell on the backend.
Current stats
- computer science fundamentals: 4/10
- functional programming with Haskell: 3/10
- music theory: 2/10
- drawing while I learn: 7/10
- animating: 4/10
Equipment
- blog to write about my progress https://alicja.dev/blog
- planning process: https://basecamp.com/shapeup
- computer science:
- “How to Design Programs” https://htdp.org/
- BaseCS series: https://github.com/vaidehijoshi/basecs-series
- “Philosophy of Computer Science”: https://cse.buffalo.edu/~rapaport/Papers/phics.pdf
- Destroy All Software: https://www.destroyallsoftware.com
- CS for All: https://www.cs.hmc.edu/twiki/bin/view/CSforAll/WebHome
- functional programming with Haskell:
- “Haskell programming from first principles” http://haskellbook.com/
- “Haskell School of Music - from Signals to Symphonies”: http://euterpea.com/haskell-school-of-music/
- Type Classes https://typeclasses.com
- Haskell for Mac http://haskellformac.com/
- music theory:
- “Music Theory for Computer Musicians”: https://archive.org/details/MusicTheoryForComputerMusicians
- “Help Your Kids with Music”: https://www.dk.com/ca/book/9781465436047-help-your-kids-with-music/
- LightNote: https://www.lightnote.co/
- ukulele classes
- drawing:
- “How to Draw Almost Every Day” https://www.amazon.com/How-Draw-Almost-Every-Day/dp/1631593773
- “The Back of the Napkin” https://www.amazon.ca/Back-Napkin-Expanded-Problems-Pictures/dp/1591842697
- “Uzmo, Thinking with Your Pen” https://eu.neuland.com/literature/specialist-books/uzmo-thinking-with-your-pen-english.html
- iPad 2018 + Apple Pencil, Notability
- animating:
- Procreate (for creating GIFs)
First adventure - Computer Science fundamentals
Goals:
- to improve my understanding of the fundamentals of Computer Science:
- how computers work
- data structures
- algorithms
- design patterns
- programming languages
- to get back to Haskell
- to share blog posts and cute animations
Initial plan (6 weeks)
Week 0 - Planning and prep
Goals
-
learn to make GIFs
I made a few GIFs with Procreate using different ideas and I think I’m ready to use them with my drawings for CS
-
set up my Haskell learning environment
I have “Haskell for Mac” set up and I think it’s good enough for now
-
create a setup for zines
I transferred a few of my old notes to a pure HTML/CSS format, using my custom handwritten font, and I have ideas on what other topics I can write on - to be improved on an ongoing basis, while creating new zines
-
sketch the plan for week 1
Haskell
I found a bunch of books:
- Thinking Functionally with Haskell - intro course, mathematical reasoning and functional programming
- Programming in Haskell - intro book, there is an edX course that uses it
- Practical Haskell - hands-on intro
- The Haskell Road to Logic, Math and Programming - learning math with Haskell
- Get Programming with Haskell - introduction to Haskell and functional programming
- Beautiful Code, Compelling Evidence - data visualization with functional programming
I think out of those some are less relevant at the moment, so I’m going to stick with “Haskell Programming from First Principles” for now and probably do “Thinking Functionally with Haskell” or “Get Programming with Haskell” next. It’s more important to have momentum than breadth at this moment.
Week 1 - How computers work?
Goals
- get to drawing some CS related ideas
- get a better grasp on understanding of the hardware
- get back to exercism
Scope
- bits, bytes and other creatures
- numbers: binary, hexadecimal etc.
- hardware (chips, cpu, memory, disk)
Haskell
- go through chapters 2-6 of “Haskell Programming from First Principles”
- finish up transferring existing zines to HTML/CSS format
- create at least one new mini zine
- start planning the full “Intro to Haskell” zine - create a list of concepts I want it to cover
Blogging
- write a draft of a blog post on GIF format
Week 2 - Basic data structures
Scope
- linked lists
- stacks and queues
- trees
- how types work in Haskell
Week 3 - Intro algorithms
Scope
- why are graphs? what are they useful for?
- to get recursion you need to get recursion
- DFS
- BFS
Weeks 4-5 - Sorting problems
Scope
- what’s hard about sorting?
- selection sort
- bubble sort
- insertion sort
- merge sort
- quick sort