9 ms·
Leveraging A Poor Memory In Engineering
- maxme2 8y agoI use Anki for improving my memory on different topics; philosophy, geography, etc. I'm currently using it to prepare for the french motorcycle exam and that's the first time I had to write my own cards. I'm a software engineer and I feel like I'm forgetting a lot of things that I learned during university and during my carreer (algorithms, architecture models, design patterns, etc.). This feeling is very frustrating. I never thought about using Anki professionally and I'm gonna start to add some algo-related cards to Anki right now. Note: I also recommend "learning how to learn", https://www.coursera.org/learn/learning-how-to-learn/ https://www.coursera.org/learn/learning-how-to-learn/ - give some simple techniques and tips to be better at learning (spaced repetitions is one of them, learn by chunks, force yourself to recall, etc.).
- vitaminCPP 8y agoWhile I can see why you would use flash cards for learning geography (more factual), I'm not sure how you could design a card to explain a data structure. Any idea ?
- maxme2 8y agoOne example I had in mind when I said I was forgetting algorithms and data structures was about Skip List - https://en.wikipedia.org/wiki/Skip_list https://en.wikipedia.org/wiki/Skip_list I did an implementation of a skip list a long time ago (and I found the algorithms to insert, search, etc. quite simple and elegant). Recently I had a chat with someone and I was struggling to explain them. I could design a few cards for skip lists: - Question "ELI5 skip list" Answer "the actual ELI5" - Question "What sort of problems are solved by skip lists?" - Question "How to make a skip list indexable" - Question "How to insert the element 123 in a 3 levels skip lists [1, 4 - 4 - 4, 43, 120, 210 - 210, 302]" <- make a better ASCII scheme. etc... Answers can be quite long. For the french motorcycle license, some answers can be very long (2 or 3 pages) and it works pretty well for me (see https://ankiweb.net/shared/info/1156061502 https://ankiweb.net/shared/info/1156061502). When you train: after reading the question try to recall the answer in your head and then read the answer. Then you evaluate how good you were recalling and you pick the Anki "score" (bad, hard, good, too easy).
- emerongi 8y agoThe key with documentation is knowing where to look. If you are Googling for documentation every time you need something, I think you're doing it wrong. I always go straight to the source documentation and often I go to the source code itself if the documentation is ambigous. JS is probably the only language where I don't know a "true source", so I just go to MDN.
- furgooswft13 8y agoI mean, if you know what to type, you're very likely to get exactly what you need in the first few results, helpfully highlighted in purple to let you know you've been there before.
- jplayer01 8y agoI'm not sure this is helpful. I know exactly where to look. I still end up having to break my train of thought and the mental model that I'm in by opening the browser and navigating to the precise location where I know the information I need is. Then I need to refocus on the task I was doing before. Multiply this by hundreds of times throughout the day and it seems to me like a huge productivity loss. I used to be against rote learning of any kind, but nowadays I'm not sure. There's too much meaningless minutia that we need to learn or use while programming.
- grigjd3 8y agoI find Google to be a useful index of documentation. I'll often search something like `java documentation <name of class>`.
- egil 8y agoI also use MDN as my primary source for js documentation. However, the answer is often easy available by just prodding a bit in the devtools console. Live coding keeps the flow :)
- jplayer01 8y agoI've actually recently tried Anki when I was forced to learn Javascript and knew I would be using it so rarely that I knew I'd end up regoogling, re-researching, relearn Ing the same facts/solutions over and over and over again. It was a revelation. Suddenly I could, in a systematic way, codify whatever new thing(s) I learned in a way that I knew I wouldn't forget it again. It was incredibly freeing and I noticed the difference it made day-to-day when I did have to use JS. The important thing is that these cards aren't static. As your knowledge improves, as you gain practice, you'll notice the cards that aren't written in a way that are conducive to flash card learning and (ideally) you end up pruning and refining the process until it works. This requires a non-insignificant amount of dedication though.
- canaus 8y agoI don't understand. Did you have to create the card deck in Anki or was there someone else who created one, which you used? I just can't imagine using flash cards, or a similar product, to learn anything in-depth about a language. Maybe API specific problems, but nothing more.
- jplayer01 8y agoI made my own. Every time I googled something or learned something new, I added a flash card. It could be anything. I added a lot while reading a book about learning Javascript. It's just something I had to figure out once I decided I wanted to use Anki. I have cards like asking what a closure is or how to use one, or what an IIFE is or how to use one. Or what IIFE stands for. How to deconstruct an array or an object. What's the scope of a variable defined with "var"? How does it differ from "let"? How do I list all the properties of an object? How do you access the properties of an object? When should you use bracket notation to access a property of an object? I have a bunch of syntax ones or basic ones ones like what's the equivalent of a Python forEach. Somebody else might decide to have completely different questions. I tried to codify every little thing I learned while using Javascript, where others would consider it overkill. I've already deleted plenty of cards where I I felt I'd internalized the knowledge in a way that I don't need a flash card for it.
- knight17 8y agoSimilar to this post, Jack Kinsella has written how he used Spaced Repetition Software to learn and keep programming knowledge in the following articles: http://www.jackkinsella.ie/articles/janki-method http://www.jackkinsella.ie/articles/janki-method https://www.jackkinsella.ie/articles/janki-method-refined https://www.jackkinsella.ie/articles/janki-method-refined https://drive.google.com/file/d/1JCHkqVoX598Ob_111khrGoJ5cpeh_ahU/view?usp=sharing https://drive.google.com/file/d/1JCHkqVoX598Ob_111khrGoJ5cpe... Derek Sivers also has written on memorising a programming language using SRS software: https://sivers.org/srs https://sivers.org/srs One important thing in the original article is about flow, or the feeling of being in the state of flow if you don't need to remove yourself from the task for looking up documentation. I think that is a worthy goal to aim for but I am amazed at the amount of cards he has created, nearly 10,000 over a period of three years. He has put in lot of effort and reaped the reward.
- EndXA 8y agoAnki really is a great tool. Tip for people looking to use it: you can find premade decks (collections of flashcards) on various topics on the Anki website. For example, here are decks that are available under the 'Programming' topic: https://ankiweb.net/shared/decks/Programming https://ankiweb.net/shared/decks/Programming Not all of these decks are great, but there's a rating system, and this can sometimes be a helpful starting point for your own decks.
- hobofan 8y ago> Yes, I tried Dash I'd be interested to hear what your problems with Dash were. I also have the problem of an extremely bad memory (and I feel the more time I've spent thinking about abstract concepts the last years, the worse it got), but I've never really felt that this held me back. Looking up API documentation makes up a negligible portion of my time working, and especially with Dash, that has been reduced to a non-issue.
- andrew_wc_brown 8y agoYes! Space Repetition Learning is amazing. For me its wasn't about becoming a 10X developer but proving that I was already 10X because I was facing a salary cap of 120K CAD where I saw friends working as long as me 180K+ CAD and some 250K+ CAD. The last job I attempted we had a 55 year old developer being paid the same as me doing the same rot work and I said thats not going to happen to me. I've always been a person that gets things done but when you asked me how I did it I could never regurgitate the factoids. Interviewers or other developers thought I was stupid/faking because their probing of my knowledge came down to superficial factoids and not evaluating the past work as a whole where I literally have 30+ projects. Hiring is broken and instead of getting upset about it you just have to meet the checklist. I have Cracking the Coding Interview and I've been through that book 3x and I can not remember the contents of it because that book has been more more useful to me to prompt up my monitor than in my in the day to day work. I feel when you're a developer 10 years in you'll be forgetting things as quick as you learn them but proving you have in-memory knowledge is super important. I use Anki and Mnemosyne but found their UIs clunky and so I built my own Space Repetition Learning flash card system. I was studying for AWS Certifications and I wanted a way to tied practice exam questions I wrote to flashcards so when I got questions wrong it would reload my deck, and one I memorized all the factoids via space repetition learning I could go back and attempt a practice exam. Now when people ask me whats the different between RAID 0 vs RAID 1 I know which is stripping or mirroring. I got so carried away building my study system it because my own startup called ExamPro: https://exampro.co https://exampro.co Its really nice to have something you can build where you actually have domain knowledge and its the first time independently where I was successful building a startup that has generated revenue. I could build anything but without domain knowledge I could never sell what I could build and now I can and its wonderful. Space Repetition Learning changed my life. Who knew?
- gridlockd 8y agoIs hiring really that broken? Not everyone hires like that and if they do, maybe they're no good to begin with. I keep hearing how the interviews at Google are really tough, but then a lot of the people who actually get through quit in the first weeks. It can't be that great of a job.
- ebiester 8y agoBefore heading to management, I chased this as well. I found that people who keep a personal wiki and documentation get the same benefit. It’s a great way to organize your knowledge, and keep Anki to things like syntax. However, the next gap is learning to reason about these things from first principles. It’s the “10x” commonality and I believe it can be learned, but it takes a different set of tools. (My book will come out one day. ;)
- jiaweihli 8y agoWhat does reasoning about things from first principles mean?
- mypalmike 8y agoI once worked with someone who didn't understand the program stack whatsoever, leading to code that was (slowly but surely) infinitely recursive. Using flashcards to remember to use .put() versus .append() in some API is not really that person's path to 10x engineer.
- inertiatic 8y agoIf what was holding you back from being a 10x engineer was not remembering syntax, then you're already there. Myself I wish to not remember things of this nature. My IDE can autocomplete my code with API references. My terminal history is set to infinite so I can grep for whatever command I found useful in the past. I instead want to spend my time and memory on deepening my understanding of certain topics, or on brushing up on concepts and techniques I've known in the past but have come close to forgetting.
- heavenlyblue 8y agoThe truth is that if you’re familiar with a few families of languages - you’ll reinvent the syntax on the go: “if I myself wanted to implement a feature I am about to use - which syntax would I converge upon?”. If you’re working in an IDE you’ll also have a realtime hint on whether your guess was the correct one.
- lewantmontreal 8y agoBut how can you write small snippets of code into Anki flashcards, and be able to use it on mobile (no plugins)? Every time i try you need to either write in HTML or lose formatting completely.
- Felz 8y agoMemorizing APIs is... not how I'd approach productivity, but if it works for you, great. I'm doing a lot of Kotlin right now, where simple, useful extension functions are an autocomplete away. I don't need to memorize how to get a slice of an array; I know it's going to be named something like .slice(), and I can jump right to the documentation from my IDE. When I run into something not in the standard library, I write a little extension function of my own. And then I remember it the next time I run into that problem, and get to reuse it, just like it were part of the language.
- robinhoode 8y agoReading that line made me cringe. Memorizing APIs come in handy for interviews or perhaps fixing bugs in production but not so much for day-to-day work. Now, math equations or the minute details of data structures and algorithms.. Those can be hard to internalize and knowing them well is very helpful when reading papers or other diving into open source projects which make critical use of advanced, specialized knowledge.
- Filligree 8y ago> Memorizing APIs come in handy for interviews or perhaps fixing bugs in production but not so much for day-to-day work. Some interviews, maybe. As you say, it doesn't matter much for day-to-day work -- and so I put no weight on it when rating interviews either. If the candidate remembers the right method names, great. If they don't, who cares. I always make a point of explaining that I'm not testing them on API memorization.
- matz1 8y agoIf there are 2 candidate, one can remember stuff and other don't, everything else being equal, who are u going to pick?
- closeparen 8y agoBoth. Tech companies are ravenous for anyone and everyone who clears the bar; “choose the best from N applicants” is not a model for the hiring process.
- typon 8y agoI really need to do something like this for Rust. Ive been coding it for the past few months and still couldn't tell you off the top of my head what the subtle differences between Rc, Refcell, Cell, Box, RwLock and Mutex are. Now there's another one called Pin and I can't figure out where exactly it applies either.
- reddit_clone 8y agoAdd ADD related working memory issues to this, life gets really interesting :(
- 83457 8y agoIf by interesting you mean eternally frustrating... agreed
- swfisher 8y agoTo be honest, it sounds like the author’s issue was not really forgetting syntax but the stack of procrastination-related habits that were attached to looking up syntax. It sounds, at face value, like what folks describe as ADHD.
- cronin101 8y agoNot sure how much you care, but your example for .slice() is wrong. .slice(1,3) will give you elements two and three. You're looking for .slice(0,3)
- deleted 8y ago[deleted]
- hartator 8y agoWhatever works for you. Reading books in a relaxed environment works best for me.
- swfisher 8y agoTo be honest, it sounds like the author’s primary productivity issue is not a poor memory for syntax, but a stack of time wasting habits attached to the cue of looking up syntax. This has everything to do with our relationship to attention and focus. The way the author managed to reduce the impact of this habit was to remove the cue for wasting time by memorizing syntax. Congrats on that! This seems like a pretty demanding solution, though. Perhaps a very simple way forward would be to employ a site blocker on distracting sites during work hours. Beyond that the author might regulate their work hours so that they have limited time to get things done and avoid burnout from long days. They also might consider using a pomodoro technique, so that their brain can alternate between focused and relaxed attention. Setting boundaries around when it’s time to focus and introducing a purposeful schedule of relaxing breaks helps keep one from falling victim to bad habits when your brain needs a moment to relax.
- mck- 8y agoJust what I thought. Sounds like author has awareness of the problem, but decided on a rather difficult solution. You can still get into flow while looking up syntax you haven't committed to memory, but know how to find in 2 min. I have a habit not to commit anything to memory that I could Google in 2 min, saving on RAM.
- PorterDuff 8y ago"First you learn the instrument, then you learn the music, then you forget all that shit and just play." - Famous sax guy
- randallsquared 8y agoTwo minutes? If I'm in flow (a very rare occurrence these days, sadly), five seconds is on the cusp of too long. In my editor, spending time looking through the list of autocomplete suggestions is often enough to lose track of some of the things I had mentally stacked up to write. Switching to a browser to find docs risks the whole stack. One way I've found to mitigate this is to not try to write things that that would definitely work on the first draft. Instead, whenever I need something I don't remember, I just write enough of it to note what I'm trying to do and keep going. The details of whether it would be more convenient to use slice or substring here aren't important when I'm trying to write things down before I forget them.
- fma 8y agoI also have terrible memory. If I'm coding something and forget some pattern (not sybtax, because the IDE handles that...) I just do a quick search of my code within my IDE. I have a One Note for frequent queries.
- Timucin 8y agoF*ck you Kyle
- Ziinc 8y agoIf you're planning to go down this route to use Anki to sequence your SRS revisions, I recommend checking out this plugin that I created a few years back: https://github.com/Ziinc/gsheets_importer https://github.com/Ziinc/gsheets_importer It basically scrapes a published Google sheet that has a list of links. Each link needs to be a Web page with a html table. The plugin then scrapes each link, using the left side of the table as the front of the card, and the right side as the back of the card. All formatting is converted into inline css, so you can write code formatting as well. Though if you were writing actual code, I suggest writing it in markdown and then publishing it then adding it to the sheet, instead of using a published Google doc. I use it for university and it reduces the time spent formatting each card individually into Anki. So far it's the most efficient workflow to creating Anki cards that I know of.
- mannykannot 8y agoDoing one's daily work includes a certain amount of repetition, and this can be leveraged into a learning program. When you learn something surprising, or have to look something up, you have a candidate for a flash card. Also, when you fix a bug in your own work or find you have to rewrite some of it, don't just brush it off as an inevitable part of development, or call it refactoring, but ask yourself if there was something that, if you had known or considered it in advance, would have helped getting it right the first time. If there is, it might include something that could be put on a flash card, and even if not, the analysis will help you develop good judgement (10x people do not generally spend a lot of time fixing or reworking their own stuff, because their first passes are often good.) Another source of flash cards from any books or articles you are reading: any key point that is new to you, or you had forgotten, might go on a flash card. It's more effective than bookmarking or highlighting (when starting on a topic that is completely new, you might want to limit your notes to those points where you had to pause to think about what you just read.)
- gridlockd 8y agoIt's nice for "Kyle" that he has a photographic memory to remember all the API names and incantations. Spaced repetition will not give you that. If I have to google "how do i amend my git commit" five times every month, that's actually the best use of my time. If I only need it five times a month, spending ten seconds to look it up is more efficient than making it part of some sort of spaced repetition learning scheme. I would say the same is true for virtually all of programming. If you really need it all the time, you automatically learn it by looking it up all the time. No flashcards required. If not, just look it up. The guy with the photographic memory will always win, he'll remember it the first time. Again, no flash cards required.
- josinalvo 8y agothe question is never to beat those more gifted, and always how to approach their level. They serve as a pointer to the right direction, not as a realistic goal
- Noumenon72 8y agoActually you just convinced me that the first thing I should try this with is git. I do look up that stuff all the time because none of it makes any sense. Since I will never intuit it, I might as well memorize it. Never had this problem with Mercurial.
- dorkwood 8y agoI used to think memorising facts was a waste of time. I'd say things like "why would I spend time memorising facts when computers can do that for me?" I thought there was a stark difference between "memorisation" and "understanding how things work". The former was for people who wanted to pass tests, and the latter was what smart people dedicated their time to. What using spaced-repetition software has taught me, however, is that memorisation and understanding are tightly coupled. Storing facts in my brain increases the amount of connections I can make, which greatly improves my ability to think.
- doctorcroc 8y agoThis hit upon a larger issue within the programming community - the idea that the brain's abilities can be reduced into discrete parts (see the comment about how a programmer's CPU is the bottleneck, not I/O). While computers may work this way, humans are a lot messier, and an improvement in I/O may actually lead to better compute, as you allude to. Any form of mental enhancement can improve all functions of the brain - it's a beautiful organ.
- sowbug 8y agoTo those questioning the benefit of rote memorization of API signatures and other factoids that are always just a click or hover away: would you say the same about vocabulary words when learning a new human language?
- anjellow 8y agoI always thought those "factoids" were silly. There's a massive bandwidth difference between a few clicks and instant recollection.
- matt2000 8y agoI'm about 20 years into my programming career, and have been programming around 30 years total. I am very fast at lots of tasks now, but it has happened in a way that would be totally surprising to my younger self: I don't waste time doing stuff that doesn't matter. I used to assume that the "10x engineer" was 10x faster at the programming/typing part, but it turns out it's more like identifying the 1/10th of the work that actually matters and just do that efficiently. It is also true that there's a lot of experience in both the identification of that 10%, and the efficient execution of it though. Side note: I have also met a few flat out amazing, natural programmers. These people can also be 10x as productive, but it's in a pretty specific way that should probably just be considered an outlier. My feeling is that the main way for the rest of us to achieve that level of productivity is gain experience, do things simply and efficiently, and learning how to focus on the things that matter.
- lifeisstillgood 8y agoI believe you and would be interested in your list of things that matter?
- zarkov99 8y agoNot the OP, but my experience matches his and for me the following are particularly important: - Getting the requirements right. This by far has the most impact on effectiveness - Reducing friction. Simple things like proficiency with high quality tools, smooth and fast builds, clean logs, easy ways to generate and analyze core dumps, accumulate to produce an outsize effect on productivity. - Uninterrupted, substantial blocks of focused time. It is staggering how easily chat, email and meetings can destroy productivity.
- beobab 8y agoIf I could give you +4 million for the "blocks of focused time" comment, I would. This is hugely under-rated in my office. Open plan, with 2nd line support talking to customers right next to developers.
- 8y ago
- kissgyorgy 8y agoI used Anki for years when I started programming 6 years ago. Here are my tech related decks: https://walkman.cloud/s/58jBymwC6fDmFAC https://walkman.cloud/s/58jBymwC6fDmFAC It helped me a lot! Lot of my co-workers said that I learned faster than others in the same timespan, and I think it was partly because of Anki.
- mfranzs 8y agoSpaced Repetition has also transformed how I learn. It lets me be decisive with how I understand concepts and lets me focus much more on long-term learning. However, I agree that it's more useful to memorize/internalize concepts than syntax. One of the limitations with anki/supermemo's flashcard-based design is that it's hard to break down complex ideas because you're limited to the flashcard format. I've built a new tool that lets you generate flashcards right from your notes to make it easier to break down new ideas. It's called RemNote: https://www.remnote.io/ https://www.remnote.io/. My memory was pretty terrible before I started using this and that problem is now largely solved :)
- lifeisstillgood 8y agoA little equation for you P = ( U * O / F * C ) + S P Productivity U Understanding of the codebase O Ownership - degree to which you feel you can make significant changes to code with minimal approval F Fear - degree to which you are concerned about mistakes costing you your job C Complexity of codebase S Your actual skill set Yes I think Skill is not a multiplier in almost all cases I suspect ownership and fear are actually exponents as well.
- DanielBMarkham 8y agoWow. This sounds a lot more like grinding than programming. Memorizing APIs? Seriously? What happens when it changes next year? Echoing another commenter, every line of code you don't code is coded infinitely-faster, doesn't need testing, and you'll never have to review or maintain it. Programming should be the art of surgically using just the right amount of code in just the right spot to provide lasting value, not filling out forms, wiring interfaces together, or thrashing around online searching for other lost souls. Yes, we all end up doing that kind of work -- but that's a fail, not a win. The more we horse around with our tools, the less we're helping people. Video games took over the world. That is, everything became a video game, with a sexy UI, enthusiastic community, cheat videos (and classes), and outward signs that you've leveled up. This makes sense, I guess, if you're goal is to play the game. And whatever you're doing with computers should definitely be fun. But when interacting with the computer is a tool you're using to provide something to somebody else, the longer you spend with the computer providing that value the less efficient you are. The best code is no code. Somehow this author seems to think that being a great programmer is due to mechanically-interacting with the programming environment. The 10x types faster, remembers more, and has mad skills at the IDE. This would be utterly silly if we were talking about great novelists -- how many words they type per minute, for instance -- but somehow it seems to make sense for coders.
- gerryeng2 8y agoMy more productive 10x days has little to do with programming syntax. These are days when I focus on gaining clarity on the problem/objective and writing the least amount of code to solve the problem. Writing less code requires extensive knowledge of frameworks, patterns and best practices. Memorizing programming syntaxes and paradigm makes getting in the flow easier because of reduced context switching, makes work more fun and hence greater productivity (10x days). But at the heart of it, being productive requires understanding of the problem domain in depth, knowing what matters and what doesn't (YAGNI and pareto-ing mercilessly).
- jasonkester 8y agoI'm a good programmer with a bad memory, but I went a completely different route to the guy in the article: Better Tools He talks about having to google things all the time, and memorize how to do things in his language. But that's the IDE's job. Good tooling knows everything about the language you're using, and everything about your codebase and everything about every library you've ever used. If you want to do something with a File, you shouldn't ever need to remember anything more than the word "File". Type that, then ctrl+space, and the IDE will get you to the point where muscle memory can take over. For other things, I just cheat. I have "\r\n" written in felt marker in the corner of my keyboard, because (since I'm also a bit dyslexic) I can never get the slashes in the right direction first try. This isn't my dev laptop, so I just got them wrong typing them out above, and had to google to verify. Despite having used them on a daily basis for 20 years. But anyway, back to the point: Tools can and should replace nearly all the memorization that most people in this gig seem so proud to have done. So long as you're good at the problem solving bit, a bad memory won't hold you back.
- FearNotDaniel 8y agoLeveraging doesn't mean what you think it means. You apply some force (e.g. poor memory) to one end of a lever, with the effect that the force is multiplied and turned to an even greater advantage than it was without the leverage effect. This is an article about overcoming poor memory, which is the exact opposite.