5 ms·
I've recently been thinking about this a lot. The single highest-leverage action I've found for myself has been to shift my goal from: A. (destination) I need
by wnmurphy 5y ago
I've recently been thinking about this a lot. The single highest-leverage action I've found for myself has been to shift my goal from:
A. (destination) I need to get a top-tier job at a FAANG company.
to
B. (process) I want to develop my ability to think structurally, so that I can enjoy spending time with code by honing an intuitive sense of the pattern language of code.
The former is future-oriented, stressful, feels overwhelming, triggers Imposter Syndrome and a sense of dread like crazy, etc. The latter is fun, joyful, centered in the present moment.
It's much more motivating and rewarding to get excited about developing a meta-skill than it is to try to hit your target total problem/contest numbers and then run a completely separate gauntlet of interviews after that.
If you want to be an Olympic athlete, you don't start from "I have to make these times, so that I can put myself in the highest pressure contest in the world." You start from "Man, I just really love (running|swimming|etc.)"
- nefitty 5y agoI like the mental shift that focusing on process entails. For your process goal, do you have a list of activities or tasks you do for that? Here are some of mine, although I’m unsure of relative ROI’s (maybe “return on investment” is antithetical to the process goal lol): - Read well-established repos and type the code, for example, I’m currently going through all of the React source and typing everything up as I read it - Add research comments and questions as I retype code, eg ‘// What is React Fiber?’ - Use typing.io to increase my typing speed - Use anki to memorize the most important API’s (this helped me learn Sequelize and GQL really fast) I might want to incorporate more “do it myself” projects, but I think my main focus is really grasping best practices and being able to scaffold my solutions with ideas from code I’ve already seen. I think that helps me focus on the logic of my solutions, and helps minimize bad “cowboy code” habits.
- Google234 5y ago- Read well-established repos and type the code, for example, I’m currently going through all of the React source and typing everything up as I read it How is this useful at all? If you want to learn you should actually start contributing to a project and get feedback that way. You don’t learn how to do math problems by copying solutions.
- nefitty 5y agoThe point for me is that it makes my reading more active. I also get a physical feel for code style. If I was just reading source code, it would be a lot easier to skim over things without letting them cook in my brain from a bit.
- wnmurphy 5y agoI do this as well, I think the idea that code is physical is underrated. We've evolved to intuitively understand physical things; physicalizing something so abstract seems like a natural way to understand it.
- wnmurphy 5y agoI think there are two learning styles, one is to learn by doing, filling in the gaps as you go. The other is to front load information first and then apply it by doing. For me, I learn the most by getting a broad overview of the material first, understanding how other people have used it, etc. then applying it myself. For copying code, I actually do this to get a feel for a new language. An analogy might be to carefully watch Tiger Woods swing a golf club, then replicate the motion yourself to build muscle memory for the swing, then go out to the driving range and hit balls yourself.
- wnmurphy 5y agoHonestly, just spending time reading through any good code, well-maintained repos, official CTCI solutions, other people's LeetCode/CodeWars solutions, etc. (The absolute best way I've found to learn a language's conventions and best practices is to study all of the community solutions on CodeWars) Then I have a list to which I add any "code tropes" (i.e. using a loop to search a collection and conditionally flip a flag outside of the loop, etc.) or useful patterns (favoring early returns, etc.). This turns into a dictionary of the vocabulary of code that I just keep adding to. Mainly it's the act of careful, patient reading that unconsciously develops your sense of conventions and ability to visualize abstraction.