Context
I recently finished an undergrad degree at a college I hated (horribly bureaucratic, untrained professors, donkey-work for projects/assignments).
I feel like I have a 4 year debt to make up for - skills I should have learned in my undergrad, but never had the time to. In the coming year or so, I’m hoping to fix that by experimenting much more, and hopefully picking up skills that I think are important to me. For lack of a better name for what I plan to spend my free time on in the coming year or so, I’ll call it…
The Experiment
Tentatively, I’m considering 2 weeks of low-key, research time, followed by 2 months of intensive study and practice in the given field. Since I don’t plan to uproot my life and follow a rigid schedule (I’ll continue to have a personal life, work part-time, work on open-source, etc.) I think managing 1 or 2 subjects at a time is likely the most I can handle.
Generic resources to check before every subject
- LessWrong’s list of the best textbooks on many subjects
- Hacker News’ list of textbooks
- Wikipedia templates on related topics
- Online courses (Class Central)
- Wikipedia / topic-specific wikis
- Functional CS curriculum
- Open Source Society’s CS resources and Bioinformatics resources
- StackExchange tag wikis
- IRC
- YouTube
Candidate skills
- Writing (starting with this very post :)); I’m aiming to be a good
communicator, not a thesaurus. I’d like to paint clearer imagery of the topics
I’m interested in, which are often technical in nature, making the use of
metaphors and (accurate) simplification important.
- The Minto Pyramid Principle: Logic in Writing, Thinking, & Problem Solving by Barbara Minto
- On Writing by Stephen King
- Study the books I’m reading more carefully
- Marketing
- Illustration
- Finance
- Sales
- Management / technical lead (project management, people, delegating, etc.)
- Case studies on what Google initiatives have failed
- Mentor people in local meetups, etc.
- Mentor young-adults for the Google Code-In competition for RTEMS
- Watch and learn from large organizations
- RTEMS, since I’d like to continue to be involved
- Case-studies
- Consulting work?
- Architecture of Open Source Applications
- General Management 101 by Michael Dearing
- Game theory (I took one course when I was 14 thinking it was about the theory of games, and I went halfway through it - it blew my mind)
- Physics (light, energy, astronomy, quantum mechanics) - likely split it into its own respective fields when I get around to it
- Math
- IRC Math community’s wiki of books for self-learners
- Model theory
- ImmersiveMath
- MetaMath (also PLT)
- BetterExplained
- Paul’s online math notes
- 3blue1brown
- Graphical Linear Algebra
- Basics in
- Trig
- Calculus
- Linear algebra and abstract algebra
- Information theory
- Differential equations
- Other considerations
- Topology
- Category theory (also in PLT after)
- Chaos theory
- Programming language theory
- #proglangdesign
- Discord
- Lobsters ML and formalmethods tags
- SIGPLAN research papers
- Continuations group reading materials
- Philip Wadler’s research
- Consider learning programming languages like:
- Rust (The Rust Programming Language)
- OCaml (Real World OCaml, Try OCaml Pro online)
- Haskell (Learn You a Haskell, Haskell Wiki)
- Common Lisp (Practical Common Lisp)
- Erlang (Learn You Some Erlang)
- Programming Language Foundations in Agda by Philip Wadler (theory-heavy)
- Software Foundations by Benjamin Pierce, et al. (theory-heavy and difficult)
- Category Theory for Programmers by Bartoz Milewski
- Concrete Semantics with Isabelle (a proof-assistant)
- Category Theory by Steve Awodey
- Semantics with Applications by Nielson and Nielson
- Compiler theory (optimizations, transformations, safety)
- Dragon book?
- Polytope model optimizations (studying this was lots of fun, I’d like more)
- Machine Learning
- Specifically, how hardware can be improved to allow for more efficient processing, the way GPUs and even Google’s TPUs (for TensorFlow) exist.
- Embedded systems and electronics
- Hackaday.io
- TU Graz’s embedded security course
- MQTT
- “Throwie” tech (self-sustained through renewable energy)
- Cryptography (Dan Boneh’s textbook, https://cryptoeconomics.study/, https://cryptopals.com/)
- Distributed systems and parallel processing
- Programming Models for Distributed Computing
- Languages and Abstractions for Distributed Programming (immense focus on consistency models)
- General-purpose computing on GPUs
- CUDA
- Quantum computing
- Neuroscience, neurobiology, neuroengineering
(braaiiiiinsssss!)
- Rosalind - Bioinformatics test problems like Project Euler
- Karl Deisseroth’s optogenetics work
- tDCS technology
- Mental representation
- Cognitive Science: An Introduction to the Science of the Mind by José Luis Bermúdez
- Human Brain Project
- https://www.openwater.cc/faq-1
- Master’s of Science in Neuroengineering at TUM - Facebook group
- Art (generative art, painting, sculpting)
- History (what’s humanity accomplished so far?)
- Humans: A Course of Study
- Extra Credits’ “Extra History” playlist
- Age of Enlightenment (and other periods of human history)
- History of technology, math, science, art
- Philosophy
- Music
This is an entirely non-committal list, of course. My broad aim in studying these fields is to maximize my skillset in areas that I think will have the largest impact on our future. The overarching goals / fields I have as my motivation for these skills are:
- Programming language theory - imagine how much faster our rate of innovation could be if we had languages that made formal verification easier? (NASA spends months reviewing code, statically analyzing it - languages like Rust may eliminate a whole class of errors that need to be checked for, right?)
- Quantum computing - because it’s quantum freaking computing! I imagine this will be the radical shift that makes the impractical science fiction possible.
- Neuroengineering - if we could help more people “be better” (mood disorders, memory problems, paralysis), through whatever means (programming the brain, cyborg prosthetics, technology-aids), we could help unleash the potential of so many more people.
- Communication - our ideas are worthless if we can’t actually communicate them and have others help make them reality. Some skills like sales, marketing, illustration, I don’t really care for myself, but I do believe a basic knowledge in these areas is necessary if I’m to succeed in my larger goals. I’m okay to pick up enough to understand when I’ve found a brilliant salesperson or illustrator. Besides, I believe anything can be interesting if you dive deep enough and actually scratch the surface. There’s always complexity that can be fascinating.
- Space? I don’t know how, but being involved in just about any kind of space-research would be absolutely brilliant. I just don’t know if I’d be able to contribute sufficiently (i.e. as an opportunity cost against my other options, for eg.).
- Computer Science / Math? In my free time, I think I’d like to play with challenges, and these areas are full of interesting little mysteries to tug against.
How I go about acquiring these skills will likely vary from field to field - it would be nice if I could find people to exchange skills with (i.e. I teach you something I know, such as programming, systems programming, introductory German, basic Math, Physics, etc. and you teach me one of the skills above (or really anything, honestly, I love learning)).
Life is going to get in the way, inevitably, so I’m being noncommittal about both which topics I pick and when their “deadlines” will be - but I need to keep in mind that there will be deadlines. I’ve focused on my little bubble of tech for some 8 years - I ought to broaden my horizons, so to speak.
Let the games begin
Writing
For starters, this blog will be my test-bed to improve my writing. I don’t intend to study writing intensively, except perhaps reading more blogs, “finding my voice”, and perhaps reading Stephen King’s On Writing.
I’ll try to blog more about knickknacks I find fascinating and end up researching here and there too.
Rust
As a build-up towards programming language theory, I’m likely going to have to study more languages that aim for lofty goals such as memory-safety, data-race protection, and increased usability without sacrificing performance.
Also, I need to learn me some Rust for my day-job, a convenient coincidence.
I think the activities that’ll help me learn it are:
- Writing code (work, Project Euler, open-source (see next), personal projects)
- Reading a lot of varied Rust code (Github (Deno looks interesting), CodeReview on StackExchange, answering questions on StackOverflow)
- Reading The Rust Programming Language
- /r/rust for misc. discovery
- Conference talks on YouTube
Please contact me on Twitter (@AmaanC) if you have any suggestions for other fields to consider, or if you want to participate in an “experiment” of your own and would like to be experiment-buddies, or if you want to send me poop-on-fire and need my mailing address.