know your tools

ai-

people say that ai is a tool just like any other tool and you should use it but i don't think it's a tool. tools are like neovim i.e. reliable and make the interaction easier, they don't off-load the responsibility of reasoning to something else but rather give you some amazing tools like the macro system and the scripting functionalities and then you decide how to use them to make your workflows faster and better.

ai--

not only the llms are black box but also ones controled by a few big companies each of which is pouring in money in this fire pit to reach there "first" and when they do, they would do everything to make the most profit out of them. and like politicians these companies want the average developer to be poor and dependent on their llms (i.e. food grains), or else how would they survive.

the dragons

learn from the dragons who are the original sources of all knowledge, i am talking about manpages and the specification (info pages). and it's best to start a discussion around that in an irc channel related to that topic. that way you have expert opinion about the thing and you diversify your viewpoint. videos and random articles are really bad and ai is the worst. it should be built into your instincts that if you need to search anything related to some command or language, it's either manpages or some book.

easy to hard

professional tools can be quite complex and it's easy to get overwhelmed by all the options that they provide. so it's advised to start with a small/familear codebase and with a limited subset of the tool's functionality and then slowly expand to more niche use cases and to more complex codebases.

raw tools

prefer command-line tools (e.g., gdb, objdump, git) and manpages over ide pretty printers or forums for authentic, up-to-date information. even though these tools seem daunting at first, once you get used to them, you understand the convenience of a "never changing interface" compared to the now-a-days ides which change the interface and functionality with every update, and most of the functionality is through extensions which might break at any time due to api mismatch or something.

rr and profiling

rr is used to record the state of a program's whole execution and then play it like a video (back and forth). conditional breakpoints and watchpoints are a cherry on the top. callgrind and cachegrind help identify performance bottleneck and memory issues.

when tools break

sometimes tools fall apart, tools like git clients or language servers. in such cases it's better to go the old route and just compile the thing to see what the compiler has to say about the code. i think disabling lsp is not a bad idea as you are going to know what to write to do what already during the investigation, think about it.

automation with raw tools

i had to create an array of strings in typescript which were wrapped around with _('') and i had to type each one manually. one way was to type everything individually, or type these before hand and fill in the words. another better way was to just type the words continuously and then using vim regex put these around the words. that was much faster. so learn these small mechanisms and you will find ways to use them together if you ask yourself "is there a better way of doing this".

fast and right typing

one of the most important detail that one has to take care of while typing is that you have to tap the keys with the front of your fingers not the tips. tapping with the tips seems more convenient but it blocks gliding of fingers over other keys, whereas when you type with the front parts, your fingers are automatically lower than the tipped position and thus there is less delay in moving it from one key to the other.