This week I’ve started Bradfield live instruction phase. The class is titled “Introduction to Computer Systems”. We’re doing two lectures weekly, and the two for this past week were the Intro lecture and “Binary Encodings of Data”.
Here are my unstructured notes, links and other various resources I’ve collected over the period of this week, mostly for my own reference, as I am Learning in Public.
Working on Go
Introduction - Fetch, Decode, Execute model of execution
- MOV is Turing complete
- Reading Files the Hard Way
- Pointers and Dynamic Memory
- Magic Numbers are first bits of a file which identify the type of the file.
man asciiis a manpage!
- if you
cata binary file, it will interpret all bytes as instructions to the terminal, which can cause the bell to ring.
stringsis a command that extracts strings from binary files
objdump -d ./<binary>
- But How Do It Know?
- Write your Own Virtual Machine
- A Python Interpreter Written in Python
- Performance of Single Cycle Machines
- Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD, and VIA CPUs. CPUs take varied time to perform instructions. From the instruction latencies list attached you can see that some take many cycles, and it varies (Skylake 64bit division takes 35-88 cycles), whereas addition has 1 cycle of latency and “reciprocal throughput of 0.25 - i.e. 4 different additions, if independent, can be performed within a single CPU cycle.
- Godbolt - compiler explorer
still to do:
- A lecture on Computer Heuristics by Feynman
- How computer works: CPU and Memory
- CS 61C Machine Structures
Binary Encodings of Data
- Cook Multiplication
- Schönhage–Strassen Algorithm
- Anatoly Karatsuba
- What Every Computer Scientist Should Know About Floating-Point Arithmetic
- The Absolute Minimum Every Software Developer Must Know About Unicode and Character Sets
statfor getting file stats
- Binary Addition and Overflow
- Binary Pluses and Minuses
- Bit Twiddling Hacks
- UTF-8 Miracle
hn reheated Various things I’ve enjoyed reading this week
- use wach, wach is cool
- Patterns in Confusing Explanations
- Engineering blogs collection
- How to learn quickly
- Start Using Tools Again
- The Framework Laptop
- Framework homepage
- micro chess
- Sid Meier and The Meaning of Civilisation
- Guide to Memory Palaces
- Build your own X
- Why we killed our e2e suite
- Nginx playground
- I Am not Satoshi
Cramming Thoughtful organisation of work
I’ve initially had the idea of covering a wide variety of topics throughout the week. That is proving to be challenging and disorienting, even after the first week. The cost of context switching and the fact that some problems take way more than one evening to go through makes for a very jagged procedure.
I’m adjusting and correcting. To reduce context switching I’m going to attempt a different cadence. Since I have lectures on Mondays and Wednesdays, I can attend them + take notes and edit them on those days. Since every lecture requires preparation work and it will take at least one evening to prepare for each, that takes out Sunday and Wednesday evenings. That leaves me with 3 days - one I 100% devote to doing nothing, one of them to Skiena’s Lectures, and I’m left with one spare evening to work on whatever needs a bit more attention.
What I desire to work on concurrently is still math, data structures, and algorithms. Those three topic will require more diligent practice and time than other things I’m studying, therefore I want to make sure, mimicking natural patterns in ie. muscle growth, to exercise them over a long period of time with breaks in between.
The one super useful vim thing for the week I’ve learned is the use of
# in normal mode to put the given word into the search buffer. neat. Didn’t hurt to review the Vim Cheatsheet a couple times either.
Generally, a lot of the ‘planning’ and scheduling of learning is not effective in my case, and I am unsure yet what will work. I’m constantly experimenting and reviewing methodologies and schedules. It’s been just a week, and I’m sure I will be pondering that constantly.