Computer programmer looking for advice.

This month has been amazing for me as I learned a few memorization strategies that have enabled me to memorize lists that I had a difficult time memorizing all my life ( e.g., Bill Of Rights, layers of the atmosphere, Biological taxonomy ) and all in few minutes. So I realize now that I’m only scratching the surface.

My real problem now is to find out of there if there is a strategy out there to help you ‘solve’ logic problems. I’m a programmer and although these strategies can easily help me memorize syntax, I’m still having a difficult time applying it–same goes for mathematics. It’s great to memorize decks of cards and wow friends and family but I want to use this stuff at work!

Perhaps there is a group of folks that specialize in this and can offer tips?

So, any ideas?

Thanks.

Hi Alexcordero9,

There are already threads on this forum on how to memorize syntax for IT related stuff.
A good example imho is this one:

Do you have examples of things you find difficult?

It’s great to learn terminology but that’s the easy part about computers. The hard part about programming is to know how to solve conditional logic probalems, that’s what I find difficult about programming. I’ve memorized syntax without using mnemonics. The same can be said for mathematics. It doesn’t matter if you’ve memorized the quadratic formula, how will you know where to apply it using mnemonics? Os ir posible?

What programming language(s)? If you post specific examples of things that you want to memorize we could try to brainstorm some ideas…

I’m currently learning Javascript but the language is irrelevant to my question because most computer languages work the same way. After you learn two or three languages you realize that they are all designed to do ‘similar’ things in different environments (i.e., DOS, Windows, UNIX) so there really is no point to remembering syntax.

** My question is:
How can mnemonic techniques be used to help solve conditional “logic” problems? ( IF this, DO that, OTHERWISE something else ). I’ve worked with many software engineers who claim to have eidetic memory and can pass any exam with ease. But give them a real-world problem and they’re stumped! Memorization is one thing, problem solving is another. So what if you have memorized the quadratic formula or Pythagorean Theorem, do you know “where” to use those formulas?

I might be approaching this wrong and maybe it can’t but I’m stubborn and now that I’m learning that there are ways to ‘hack’ your brain so-to-speak, I’m trying to solve what has always been difficult for me–PROBLEM SOLVING.

I was asking about the language out of curiosity, since I’m working on JS and Python at the moment. :slight_smile:

I think that problem-solving is different than memorization. Memorization helps though, because each bit of knowledge just adds to one’s “vocabulary” that can be used to solve the problem. Example: I didn’t really understand jQuery until I started memorizing the API.

For getting some JS problem-solving exercise there are the JavaScript Koans. See this list for more programming exercises:

Maybe it would be useful to memorize design patterns:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
http://shichuan.github.io/javascript-patterns/


I’ve been reading this one lately, though it’s for Ruby:
http://designpatternsinruby.com/

I went through this book and extracted notes though didn’t use memory techniques:
http://javascript.crockford.com/
(Related JavaScript joke: http://qr.ae/NasYp )

I don’t have an exact answer for the question… just brainstorming out loud.

Edit: one more link that I came across buried in my tabs:

2 Likes

You’re presenting some really good stuff. I wondered if memorizing design patterns would help. I’m going to go through your links–thank you so much for taking the time to post them. I’ll post if I come up with any epiphanies.

Let me know if you find anything that works well. I’ll probably be diving into JS design patterns next week, so maybe we could trade tips.

In this interview Dominic said something similar - that memorization improves problem solving - http://www.youtube.com/watch?v=pka0XlV2xhk

I can’t remember the name, but the guy responsible for the Palm Pilot is now busy working on a theory of memory and the way he described it made me want to fill up my brain and start studying again. Basically he said that the brain is all memory and no CPU, and association works because when one neuron fires, the other neurons that are close by and had worked with this specific memory get themselves ready to fire too. The result is that one cannot connect the dots without first having the dots in the brain whether just having them read from a sheet of paper or memory. The reason that we learn better by doing is that it builds context - more association. I still think that simply memorizing wont make me a programmer, but i think it would help not having to trawl through the library each time I have a feeling I know what function to use but not remembering which one.

I’m new to memorizing anything and am purely interested in the practical side to speed up my progress as a programmer, so any pointers are very welcome :slight_smile:

Did you manage to memorize the jQuery library Josh?

2 Likes

I think there is a difference between the type of memory which mnemonics addresses and the type used in programming. Loosely speaking, mnemonics (at least method of loci) uses episodic memory (spatial, temporal) while programming works with semantic memory (factual). I would even go so far as to propose that if you take an eeg scan of your brain, you will see the alpha wave changes radically when you do mnemonics training versus when you code. This is the current topic of my research at a university and I may have something fun to show you guys in January.

With that being said though, the memory techniques used in competition and popularized on this forum, I believe, have very little value on programming skills, at least if we apply them as-is. To borrow what Joshua Foer said, here is where forgetting becomes valuable. When we forget, we learn how to abstract, and to add to LifeRider’s suggestion about building context to strengthen your programming memories, the ability to work with abstraction is another very important quality of a competent programmer.

Let’s take jQuery as an example since we have 3 JavaScripters here if I’m not mistaken :slight_smile: I remember I used to do ((’#element’).find(’.child-element’)[0]) all the time to wrap the first child of an element into a jQuery object. I did it so often in fact that I turned it into autopilot, which means I had memorized how to program in a particular context. However, if I had ever stopped for one minute and thought about what jQuery really was, I would have realized that I was reinventing the wheel. jQuery exists to give us an abstraction over the DOM and an easy way to navigate as well as manipulate a collection of DOM elements (among other things). If I had remembered that, I would have suspected the existence of .first(). It's essentially the same thing with what I did, but (’#element’).find(’.child-element’).first() feels much more jQuery-ish due to its use of function chaining and the abstraction of collection iteration.

I know my example doesn’t have any conceptual significance, but I like to talk about it because it was the first time I realized memorizing something in programming and understanding it on a deep level are two different things.

Anyway I once tried to create a collection of important JavaScript concepts on memrise http://www.memrise.com/course/130732/intermediate-advanced-javascript/ but gave up pretty fast. If you guys want, we can try building it together but this time with more context and abstraction rather than my old rote memory approach.

Or, Josh, we could do JavaScript design patterns as well :smiley: I love them. I think design patterns are classic examples of how programmers try to abstract solution so that they can be reused many times in different contexts.

A PHP guru friend of mine tells me just to learn to program and get on with it by the way :wink:

This makes me think of two of my personal subjective observations:

*human language learning - I have been learning English as my second language since I was ten and now, living in the UK, I find that I use entire sentences sometimes just as I first heard them. I think that most programmers learn the same way over a very long time.

*how learning to program is different than natural language learning - one has to approach programming as a child a human language - there is no direct reference to english. One has to build context from experience and examples.

Having said that, the language I’m learning - python is a “batteries included” language. This means that there is very many libraries already written for a number of tasks. For example, csv file handling. I have used it, and will use it again, but will have to look into the documentation again to remind myself of the syntax. With enough repetition, I will remember the commands just like I remember English words.

I think that understanding of the command must come first - hence building context is crucial. However once that context has been built, it would be helpful to have an efficient storing system available to aid remembering. I believe that this has a chance to compliment (not replace) traditional learning.

And this leaves me with presenting what I have slowly been working on. Two things:

  • a memory palace with roman rooms from scratch
  • PAO substitutes for syntax

I’m very slow so it’s only in its infancy. Here’s a few examples of the PAO:
*abs - Antonio Banderas carrying a guitar box
*all - Al Yankovich spitting marbles from his mouth
*any - Annie Lennox singing into a microphone
*basestring - Flea changing a base string
*bin - bin laden shooting an AK47
*bool - bull (minotaur actually as I wanted a humanoid form) - prodding a torreador in his bum

The palace is blue as I wanted to experiment with reusing the same structure with different colours. It starts with blue and will expand into red and yellow (basic colours). Each room has 10 loci:
C - ceiling
LN corner
LW - left wall
LF corner
FW - far wall
RF corner
RW - right wall
RN corner
E - entry where I’m standing
F - floor in the middle

The persons bodies will be used to hang arguments if present. Need to read up on the popular numbering used.

I will try to remember examples of use for the complex commands just like you remember sequences of numbers or cards.

Any comments very welcome as I am a total beginner.

My aim is to prove that a complex system can help with learning to program. Once the filing system is built I will make goals for memorising, use Anki to repeat the PAOs etc. I still will be making scripts to practise but will attempt to memorise some of them as examples.

1 Like

Sorry for the delay in replying – the past three weeks have been really busy.

I’ve just started a wiki page for design patterns in JavaScript. I’ve also created a page for Python design patterns, since the examples will be different.

If you don’t already have a wiki account, you can get one here.

For jQuery I was using a combination of alphabet pegs and the method of loci. For Python I was memorizing basic methods in memory journeys. An idea for memorizing Python is that it’s possible to get documentation about whatever you’re working on like this:

>>> import csv >>> help(csv)

Then Python offers a list of stuff you can do (see image below). Lists can be memorized with the method of loci…

Hi!
I just read through all of your ideas and felt like adding my own to the mix!

Over the last month I have been using the Method of Loci to memorize my subjects at University. At first it was hard because I did not know where to start memorizing but after a while I got the hang off it. I came to the conclusion that the best way to use mnemonics to augment my learning was to not memorize every little thing such as “all the different syntax errors you can make” but rather to remember the idea of the subject at hand.

At the moment I have been studying Digital Design and Linear Algebra and what I do then is that I read the formulas and the explanations and then form my own understanding of it. Then I add this to my memory palace. This might not seem like a very straightforward explanation to how you can get better at solving logic problems alexcordero9
so let me sum things up.

This is how I would do to improve my problem solving skills:

I would find the error I made and make sure I understand why it is an error.
Then I would have a memory palace (or a sheet of paper, to save the problem for later) ready and waiting for it to be placed there.
Finally I would place it there, then I would review the memory just like any other loci I had.

I think it is important to understand that mnemonics is only a tool to augment your learning and not to be mistaken as a godlike tool that can replace every other tool at your disposal such as hands-on interactivity with the problem.

I’ve probably made things harder for you so sorry. I lurk on this site more than I write on it >.<

Hi Josh,
I am new to this place. First of all congratulation for your attempt in memory techniques and its invaluable usage in learning computer programming languages. I am very much eager to find how you are applying these techniques to remind all the syntax and its associations. Could you please brief me on this. Thank you so much.

Hello everyone,

I’m just wondering how you guys progressed (if at all) in trying to apply memory techniques to programming. I picked up mnemonics a long time ago using Harry Lorayne’s books, Memory Power for Exams and even enrolled to Pmemory. They worked to varying degrees but I never really “stuck” with anything because I found flaws in each system.

I actually still have no clue how to apply mnemonics in a cohesive way across multiple subjects that I need to learn. In this case, I need to learn programming quickly and effectively. I’ve read through a few books on Javascript and my learning strategy has been primarily doing code “katas” with spaced repetition. So for example, this morning I had to repeat something I learned a while ago (That infamous fizzbuzz interview question). Today I also did an exercise I learned a couple weeks ago (Create a login view with react/redux using a higher order component). In addition to this I’ve also created several small projects and event a medium sized web app (At least for me) for a University --took about a month to do.

I still have a long ways to go. I’d like to memorize/master programmatic problem solving (“Think Like a Programmer” + “How to Solve it by G.Polya”) and be able to recall the precise steps of breaking a feature/problem/sprint down in a systematic manner. I’d also like to memorize the most important algorithms and data patterns (Starting with “Data Structures and Algorithms in Javascript” and “Design Patterns in Javascript”). That and a few other books/courses on Javascript/Node/ES6 and Redux.

I need to breeze through all this in a month or so for work. So you see the predicament I’m in. I think if I combine mnemonics with my code katas I’ll have the procedural and declarative knowledge I need to be an okay programmer. I was thinking of using the link method or something to memorize and scaffold design patterns and algorithms. I also wanted to add a lot of mini code katas to help contextualize all these things. So let’s say the kata is "Create a list of users you can access through an endpoint using Node and Express). I could try to think of a different design pattern or algorithm to do it that particular day and see what works and what doesn’t. I’d also like to add about 100 or more brain-teaser type algorithms just to keep me sharp.

What do you guys think?

I should also note that as you know, when learning a new paradigm or library things can pass you by really quick. So I was thinking what you guys thought of memorizing the code examples and API library of something? i.e. immutable.js

Also, if you’d like to create a slack channel or something to exchange programming/learning tips I’d like that!

For something like memorizing everything about immutable.js, you might try making a 14-room memory journey – one for each category in the sidebar.

  1. fromJS()
  2. is()
  3. List
  4. Map
  5. OrderedMap
  6. Set
  7. OrderedSet
  8. Stack
  9. Range()
  10. Repeat()
  11. Record
  12. Seq
  13. Iterable
  14. Collection

Then each section has its own docs or list of methods. Example: Map.

I don’t know if it’s worth memorizing every single method, but the categories might be useful, along with a couple of examples from each category. For Map, those would be things like:

  • Construction
  • Static Methods
  • Members
  • Persistent Changes
  • Deep Persistent Changes
  • Transient Changes
  • Etc.

I did something similar with jQuery a few years ago – memorizing all the categories of methods along with some examples of each.

I think that computer languages are like human languages – just memorizing syntax and vocabulary won’t make someone fluent, so mixing in the coding puzzles should help.

P.S., We’ll have a chat system on this site with a coming update.

Sorry I only read the question not all the other answers, I just memorise some of the syntax with a mnemonic and add in a picture of a few use casea. so a for loop. It might be used to iterate through something for example lines in a file or items in an array. so I just imagine a file. I can come up with more use cases by understanding more about the nature of things.
For example each character in a variable can be selected. As I will have learned in class that the 3rd character in say name= “Martin” is r I can get this value by doing name[2]. So now I know that I can iterate through the character in a variable also, as the index is similar or the same an the index of an array. Does this help?

I also might imagine a giant 0 bouncing around the room to remind me that in programming you start from 0 not 1. so the first value in an array will be 0 like array[0].
I just throw in a few imagines here and there and try to memorise with association. like a keyword method.

Or I think about telling some else. I imagine I am a teacher and I go around to a couple of students and point out that their mistake is related to the number in the array or that you can iterate through a file or list using a for loop. I try to come up with analogies to explain to the imaginary students.
(I hope I don’t look too crazy staring into space while imagining this, or whispering a little to myself lol)

I think there could be some differences like some languages or a specific problem. I had an interview what I had to check if a character in a group of letters matched the character to the right of it. It took me ages and they guy was giving me hints and I still had trouble with it. I didn’t realise I had to use range() in the for look like python have for I in range(0, lengthofarray).
I unfortunately didn’t get the job as they ended up not being able to hire anyone. but it really made me think I suck at python. I’m trying to learn some web development stuff now so some of these links will be interesting.

I do this too. If you can explain something, it means you understand it.

Hey Josh,

I just finished reading possibly the best book I’ve ever picked up on learning how to learn. The author was terrible at math and science growing up. She really only encountered math via a Trigonometry refresher when she was 26. But she slowly learned to learn and her results were truly inspiring. She ended up getting an engineering and math degree, and eventually a PHD and now she’s a professor. She went over pretty much every learning strategy I’ve heard of that has been proven to work (Chunking, retrieval strategies, spaced repetition, concept maps and yes mnemonics like the memory palace).

It doesn’t quite hit on the precise step by step processes but her general thesis and what research seems to suggest is that experts have a library of very strong chunks of knowledge. Not only are these chunks instantaneous (i.e. let’s say it’s a recursion chunk for computing a Fibonacci series) it contains a ton of knowledge about WHEN to use. It has been contextualized. So a complete novice might know what a for loop is from heart, but he may not know how to apply it to create a ul list in a React Component.

Generally speaking here are her recommended steps for building strong chunks. The key take away is to build a small library of these chunks and as you progress you want to build a library of chunks that deal with the most fundamental problems.

  1. Blank paper recall. Work a key problem all the way through. Don't look at the solution.
  2. Do another rep of the problem paying attention to key processes. Ask when this will be useful. What if questions. When will I encounter this out of context and how will I know to solve the problem in this way?
  3. Go into "diffuse" mode -- exercise, play music, interleave your practice with other types of problems
  4. Sleep
  5. Do another repetition the next day, and add 5 more problems. Repeat the previous steps. Do an active repetition too (Mentally review while you're walking, jogging, etc.)

So I think for me, the mnemonics should come after step 4. I’m till not sure how to go about this. I’m thinking of either creating a virtual memory palace for say Node, or Python, or Flask. Something like that.

And rather than problems I think it will be replaced with mini projects such as building a node/express server from scratch, adding authentication/salting etc etc.

Once I advance I can add algoirthms and design pattern chunks.

1 Like