plans.txt the balancing act Original Author: Sahil Gautam <printfdebugging@gmail.com> Homepage: <https://printfdebugging.in/> License: GNU GPL v2 ============================================================================== CONTENTS 0. Diving Deep diving-deep 1. Actively Avoiding Shortcuts actively-avoiding-shortcuts 2. Raw Tools raw-tools 2. The Balancing Act the-balancing-act 3. Getting the Basics Right getting-basics-right 4. Mastering the Basics mastering-the-basics 5. Stepping UP the Game stepping-up 6. Programming Literature programming-literature 7. Projects projects ============================================================================== Diving Deep diving-deep i was sitting in a class without anything to do, so i started reading the man page for ctags, i read a few paragraphs, tried a few of those commands or options, and i realized something really important... there are many many options that one doesn't even get to know about if one doesn't dive deep into the specification/manpage/docs. tutorials and stack overflow posts are good, but they help you till a certain point beyond which you "have" to dive deep into the source code or the docs in order to make any further progress. i found a bug in my work-logging script, it represents time as integer, so 1.5 represents 1.5 x 60 minutes, but i wanted it as HH:MM. i had two options, ask copilot to fix it for me, quickly, or put in some hours and do it the hard way myself. i choose the hard way, i am glad i did. after reading through python docs, testing that in small programs, i ended up with a great understanding of date time objects, datetime.strptime() and datetime.strftime() functions. i felt great joy in searching for things, not getting them in the first go, searching again, and again, testing that... and waiting patiently for the moment when 'it clicks'. i went back deeply understanding the problem, the process and the solution. having deep diving instincts go a long way in the journey of becoming a good programmer. ============================================================================== Actively Avoiding Shortcuts actively-avoiding-shortcuts shortcuts seem convenient at first, but if you take an average, they don't help much. if the 'shortcut plan' doesn't work as planned, it usually takes more time than the 'usual hard way' approach, not to mention the frustration. shortcuts work because they are tricky, and therefore complicated. the 'boring, hard way' takes time, but is really really simple. there are hardly any 'got you' moments in the 'boring, hard way', so it hardly falls apart. on the other hand, if even a single thing is out of place, the 'shortcut plan' fails. for example, i used LSPs in the past and there were moments when they would just fall apart, like on windows and i was left helpless in those moments. so i replaced LSP with ctags, a really simple tool, one which i can read, modify and rewrite to suit my workflow. i also removed autocompletion popup from my editor because since i was able to just tab complete the function and variable names, i wasn't remembering them, my memory was getting sloppier. when i write code without autocompletion, i feel a sense of ownership, i feel "i wrote this code", and the process has become much more fulfilling. because of this, i now read the code properly and don't just move my eyes over it. i remember things now. ============================================================================== Raw Tools raw-tools i was using neogit, a git client for neovim. it broke in the middle of a git rebase -i, started throwing errors. i realized that if i knew raw git well, this roadblock would never have appeared in the first place. raw tools (tools on cli, without any prettify non-sense) are rock solid, they might be a little hard to grasp at first, but once you know your commands, it will never dissappoint you. switch the workflow by learning the commonly used/needed commands and then figure out the rest by diving into the manpages and docs as you find time. take notes on the way to not forget things. ============================================================================== The Balancing Act the-balancing-act it's often the case that one finds oneself interested in many things and isn't able to decide which one to start with. the balancing act says... - organize all the choices into labeled baskets - then create time some slots on the positive side of the timeline - pick up a few from each basket and place them into the slots - the complexity of items in the slots should increase gradually - then allocate time for items from each slot in your day/week this way one doesn't feel like missing out on something, and if one consistently works on the things, things start coming together. this is really easy in theory but requires seriousness, discipline and commitment. ============================================================================== Getting the Basics Right getting-basics-right - [ ] the c programming language - [ ] a tour of cpp - [ ] learn opengl - [ ] beej's network programming guide - [ ] gnu make macros - [ ] sfml blueprints - [ ] 10km/day x 100 days (1000km) - [ ] 20 pushups/day (2000 pushups) ============================================================================== Mastering the Basics mastering-the-basics - [ ] writing an interpreter in go - [ ] writing a compiler in go - [ ] crafting interpretrs - [ ] the book of shaders - [ ] raytracing weekend series - [ ] vulkan tutorial - [ ] 10km/day x 100 days (1000km) - [ ] 30 pushups/day (3000 pushups) ============================================================================== Stepping UP the Game stepping-up - [ ] structure and interpretation of computer programms - [ ] clojure programming language - [ ] regexp engine from scratch - [ ] arena allocation and garbage collection - [ ] the art of x86 assembly - [ ] kohi game engine - [ ] computer graphics by armin - [ ] real time rendering - [ ] 10km/day x 1000 days (10000km) - [ ] 30 pushups/day (30000 pushups) ============================================================================== Programming Literature programming-literature - [ ] vulkan specification - [ ] opengl specification - [ ] x86 specification - [ ] c specification - [ ] c++ specification - [ ] gcc specification - [ ] opengl superbible - [ ] opengl programming guide - [ ] x11 programming manual - [ ] beautiful code - [ ] coders at work - [ ] the philosophy of software design - [ ] the architecture of open source applications - [ ] operating system in three easy pieces - [ ] windows system programming p2 - [ ] windows system programming - [ ] programming windows 5e - [ ] write great code 1 - 6 - [ ] 66 effective debugging tactics - [ ] the art of debugging - [ ] systems performance - [ ] introduction to algorithms (clrs) (in c) - [ ] game engine arcitecture - [ ] game programming patterns - [ ] unicode text rendering - [ ] variable width font rendering - [ ] collabora TTT talks - [ ] 10km/day x 1000 days (10000km) - [ ] 20 pushups/day (20000 pushups) ============================================================================== Projects projects - [ ] suckless - [ ] dwm - [ ] dwl - [ ] foot - [ ] dmenu - [ ] st - [ ] surf - [ ] tabbed - [ ] feh - [ ] sxiv - [ ] mu - [ ] zathura - [ ] mpv - [ ] bash - [ ] thunderbird (chat and mail internals) - [ ] rawtools - [ ] gdb - [ ] rr - [ ] perf - [ ] make - [ ] ctags - [ ] git - [ ] clang-format - [ ] callgrind - [ ] text editors - [ ] kilo - [ ] kilua - [ ] ded - [ ] vim (read the code) - emacs & exwm & xembed - [ ] libraries - [ ] glfw - [ ] lua - [ ] luajit - [ ] tools/automation - [ ] docker - [ ] jenkins - [ ] github and gitlab actions - [ ] personal projects - [ ] project earth - [ ] project env ============================================================================== vim:tw=78:ts=8:ft=help:norl:fdm=marker:fmr=<<<,>>>:ma:noro