15

It seems that it's necessary to remember all sorts of syntax to be able to program. If a person doesn't have a good memory for remembering names, will it be more difficult to learn to program?

9
  • 3
    If syntax is a problem, then pick a language that has the minimal syntax. Lisp/Clojure?
    – Chiron
    Jul 22, 2011 at 18:16
  • 2
    These days I don't spend all day programming, but I do spend some time every day programming. And I program in a bunch of languages that aren't like each other. I program in C, Java, Javascript, Lisp, VBA, PL/SQL, Ruby, Python, Perl, Smalltalk, and even a little Prolog from time to time. I just look up syntax. Jul 22, 2011 at 19:50
  • IMO Historian needs better memory than Programmer, I often don't remember many /human|programming/ languages I use but they just chime in when I need to use them. I found learning+practicing multiple /human|programming/ languages help me in this case. Note: I got memory problem since I got Vertigo, I even need to speak way slower than average people in my native human language, but I can still code happily.
    – Arie
    Jul 23, 2011 at 5:30
  • 1
    Universities certainly teach it like you need good memory, which is utterly stupid. Mine is particularly notorious for requiring CS final exams to be worth at least 50% (always closed-book) and midterms usually being at least 30-40%. Jul 23, 2011 at 5:34
  • @Chiron: Premature optimization. Lisp's infamous "lack of syntax" causes more problems than it solves. Oct 9, 2012 at 0:05

19 Answers 19

34

The syntax of a language is not as hard as you think to remember, if you use it daily. Eventually it becomes very easy. Remembering all the various library functions is much more difficult and I think that most people can only remember the most common ones they use. But that's OK if they have access to the Internet, or books, or something else that "remembers" all the other details for them.

1
  • 1
    O'Reilly's pocket guides help me keep track of things. Highly useful.
    – user28988
    Jul 22, 2011 at 22:32
18

It seems that it's necessary to remember all sorts of syntax to be able to program speak a natural language.

If a person doesn't have a good memory for remembering names words, will it be more difficult to learn to program speak?

It can't be true that people have a "natural" ability for languages, can it?

It can't possibly be true that we have low-level neural hardware just to acquire languages, can it?

Programming uses artificial languages that follow many of the rules of natural languages.

Natural languages have a little more flexibility than programming languages.

If you can speak, then you can learn to program without memorizing anything more than what you memorized when you learned to speak.

13

Yes:

If you are talking about short term memory then yes. a programmer must be able to juggle multiple bits of information simultaneously when programming/solving problems.

No:

If you are talking about long term memory then not really. There are many manuals and references + tools that can aid significantly in recalling information. Certainly memorising these long term information will make you a faster developer (overall), but its not a prerequisite.

0
9

A good memory is absolutely essential, but not for the obvious reasons.

Remembering details on specific algorithms, libraries, variable names, and such comes in very handy, but is not super important. You have Google, DuckDuckGo, man pages, language-specific documentation, and smart editors to help with all of the above. It helps if you don't need to rely on these crutches, but you'll get by just fine if you do need them from time to time.

Where memory is essential is in keeping the details of what you're working on in active, short-term memory. Being able to visualize the design, data flow, algorithms, data structures, and how they all interact to do whatever it is your product does separates the OK programmer from the great programmer. When you're actively doing it, it feels like you're successfully juggling a gargantuan number of balls while riding a unicycle.

This is often referred to as being in the zone. Interruptions, stupid questions, bosses needing TPS reports all jolt you from this zone.

The better your memory is, the easier it is to get into the zone, the easier it is to stay there, and the easier it is to get back into it after an interruption.

If you have issues with this kind of memory, I'd suggest learning meditation techniques and memory tricks as the more facile your memory becomes, the greater success you will have as a programmer.

3
  • 2
    I would actually say that the memory requirements are cut down if you better modularize the program and name things right. If you have a two page method with 20 variables, then you have to remember a lot more than if you have a 5 line method with calls to other well named methods to do sub tasks. Also each time you want to modify something that complex, you have to get into "the zone" to do it. Whereas if it is simpler then you can just make your change. I would say "the zone" is a liability.
    – Cervo
    Jul 22, 2011 at 17:45
  • 2
    @Cervo - Yes, when you're coding individual modules and small units of code, what I describe above isn't really necessary. But when you're debugging a whole system and trying to find which nice, neat and clean module the problem resides within, it helps to be able to keep as much state in mind as possible.
    – unpythonic
    Jul 23, 2011 at 4:56
  • Why in the world did this have only one vote? You can't design your code properly without remembering how it fits into the stuff around it. A lot of modern programming is about cutting down the amount of detail this entails but that simply reduces the amount you must remember, not the fact that you must remember it to do your job. Oct 9, 2012 at 0:15
5

I'm going to go against the flow, and say yes. A good memory is be an awesome asset as a programmer. My memory I've always seen as a programming liability, so I've picked up some tricks to compensate for my handicap:

  • You should be able to remember how that variable (which you used 3 lines before) was spelled. If you can't learn to use Intellisense (or whatever your form of auto-complete is in your editor or IDE).

  • You should be able to quickly remember what you were doing last time you worked on this project. This might have been days ago, it might have been just before lunch. If you can't, learn to write stuff down. Keep a notebook by your side and write what you were (or are) doing, TODO items, and stuff you need to remember about how the current code you're working on fits together.

  • Debugging and QA is hard. Ideally you should keep a very detailed notebook about the steps you took when trying to reproduce a bug or debug something. This is something I know I should do, but still struggle with.

Hope this helps!

4

The Guerrilla Guide to Interviewing (version 3.0) is a common reference that notes being smart and getting things done are the important points of programming. Smart does include some memory skills but not necessarily as much as you may think.

Intellisense can help a lot when it comes to syntax if you want some help on that side of things. Knowing how you learn so that you can quickly apply what you learn in a meaningful way is more important than being able to answer trivia questions.

0
2

I believe remembering names is a rather different cognitive function from remembering processes which is different from remembering vocabularies. There have been cases of people who have received brain injuries that completely removed the ability to remember names while being able to function perfectly well otherwise.

So I'd say that the ability to remember names in unrelated to learning programming languages.

It'd be helpful to be able to remember logical patterns, rules, and vocabulary, however.

1
  • 2
    I'm pretty sure you're right. The Myers-Briggs Type Indicator says that INTPs (who are peculiarly suited to becoming programmers) have trouble remembering people's names. I know that true in my case. I can remember your pets' names, your car's license plate, and where I put the printout of a stacktrace you gave me last year that had the weird newlines as 0x0D0A0D. Your own name, though, I'll forget it 10 minutes. (When I was younger, it took me three years to get the names of all the people on my soccer team.) Jul 22, 2011 at 19:48
2

No. The memory depth of tools (Intellisense, Google, compilers, code generators) is infinite comparing to human memory. So programmer with good memory is no much better than one with a hole in the head.

What programmers actually need is "peak speed of focus gaining" when they switch between levels of abstraction. The faster you can, the better you are as a programmer. Some have a heartbeat speed like 500 ms, with arrival of first blood wave to brain you are focused. Some have focusing clock rounded to smoking cycle, about 2 hours. Some need morning shower, so about 24 hours. etc. The difference between good and bad programmer was once declared 1:80 fold years ago, and the gap is only growing.

1

Nope, you just need to understand how Google works to get what you want

I have a horrible memory, but my Googling skills are awesome ^_^

In all seriousness, as long as you know where to find the syntax, you don't need to remember it. That's what intellisense, help files, reference guides, the internet, etc are for.

1

First of all, learning to program is difficult for everyone. Having a good memory helps I'm sure. But, dedication and a love of lifelong learning are more valuable. Learning syntax is just like anything else, repetition.

There's nothing magical or superhuman about the skill of programming. Just spend about 10,000 hours on it...and you will be a master like any other skill. Of course, that's 10,000 hours of training, not blindly and mind-numbingly repeating past mistakes.

1

You wrote this post in English, with proper syntax. Clearly you are able to remember how to use a language. You just need to learn a new language and use it often enough that you get it right all the time. Unlike human-oriented languages, computer programming languages will always let you know when you've used incorrect syntax, so it's actually easier. :-)

1

I agree that there is a huge variety of things that an average programmer may know to accomplish its tasks, just think on all the words, syntaxes, techniques you should basically control to built a simple web site (on front end: html, css, javascript (you may count also some Js frameworks as jquery), ajax, on the back end: Php or ASP or ASP.Net, and do not forget about data bases, mySql or SqlServer or Oracle or MongoDB, etc). There is a huge list of languages, paradigms, sintaxies, patterns, etc., it is impossible to remember everything of them.

It think that what makes a good programmer is practice, practices with algorithms more than with languages, and with that you eventually will remember the things you most often uses, for the rest, there is always google =P

1

A great memory can cut both ways.

If you can juggle dozens of bits of information in your head at once, you'll have a much easier time making sense of (and hopefully rewriting) that horrible piece of legacy code that's critical to the project but so complicated that everybody else is afraid to touch it.

On the other hand, that horrible piece of code that's critical to the project but so complicated that everybody else is afraid to touch it was probably written by someone with an awesome ability to juggle dozens of bits of information. If you've got a great memory, work extra hard to cultivate an appreciation for the elegance of simplicity.

Learning the syntax of a programming language doesn't require a great memory. As others have said, syntax is reinforced in your memory so much that it quickly becomes second nature. Do you ever forget which side of the road you're supposed to be driving on? Which arithmetic symbols represent addition and subtraction? If not, you'll master the most common parts of the syntax of your chosen language without too much trouble, and you can look up the less common bits when they come up.

Some libraries have hundreds or thousands of functions, classes, and/or methods. It would seem to an outsider like an impossible task to learn to use all that functionality. But there's almost always some underlying structure to the library. Instead of trying to remember all those functions, a smart programmer tries to understand how the library is organized and what it can do. With that done, it's usually pretty easy to find the function you need when you need it.

In short, memory is far less important than understanding.

0

It depends. Within Java and .NET the standard libraries are in a sort of hierarchy and are well documented. Therefore, if you know you are dealing with networking, then you go to system.net in C# and from there you can drill down to the specific objects/calls you need. So from that respect you don't need to memorize the details and there.

In your own program, it is all about how you organize/name things. If you are using names like a$, b$, c$ ... or g$ from Basic of old, then good luck. if you name things the way you will think about them like FirstName, LastName it is much easier. A lot of languages have naming standards which help as well. In Java for example there is a convention of setX, getX for getting/setting specific attributes of a class as well as capitalization conventions. So if you know a person has first name, then it is probably called firstName and the getter/setter are probably getFirstName and setFirstName..... So those conventions help a lot...

Also shorter methods/functions help you to keep less in your head at one time. And using proper names helps you to not need to go looking. For example if you name things for what they do, then when reading one procedure that calls getMaximumValue you will probably not need to read getMaximumValue to figure out what it does... But as functions/methods get longer and more nested then a better memory definitely helps.

2
  • I left out intellisense that JB King mentioned, but for C# it really helps as well. I tend to use editors for Java that don't have it :( Nevertheless the rest still applies, if you keep shorter methods, stick to naming conventions then intellisense works even better. If you have 50 variables in a method then intellisense might still leave you a bit overwhelmed.
    – Cervo
    Jul 22, 2011 at 17:18
  • Cervo I am primarily a C# developer but have doing more and more in java lately. Try out IntelliJ Idea. Their latest version has pretty good intellisense. Not Visual Studio good but close.
    – Adrian
    Jul 22, 2011 at 22:09
0

Memory is not all that important. If you are at all worried about it, I regularly forget my wallet or keys in my house in the morning. I call everyone by the wrong name at least once (including my family and girlfriend). I just plain forget to do things around the house all the time.

At the end of the day the tenets of programming will still be in your head just like "you never forget how to ride a bike". Specific details and implementation details are not all that important. You can always Google those.

0

From Joel On Software about productivity of a programmer-

Productivity depends on being able to juggle a lot of little details in short term memory all at once.

So, the short term memory is very important for a programmer given a critical task.
But I don't think the long term memory matters that much.

0

From a quick read through, I didn't see anyone talking about memory in the general sense of programming rather than a singular task of writing a program.

Memory is useful for two things:

  1. Remembering the basic semantics / libraries:

    This is easily supplanted by repetition and Google. IOW, the amount of memory you are born with has to be ridiculously low to be not able to surmount this problem.

  2. Remembering context in big programs:

    Here is where the trick is. As programs get bigger (and you get senior), the decisions you make totally relate to the amount of your knowledge of the system and ability to retrieve it in a matter of milliseconds if it is to be of any use in project discussions, debugging, reacting to operational emergencies etc. When the push comes to shove, no amount of documentation / wiki entries are going to help you - your team "wizard" is going to be your only option. This is one of the reasons why principal engineers are valued/paid so much. Most of them might not spend all their time actually coding at this point, they spend more time keeping current with the full picture and applying it for any problems / improvements. The good ones just keep in touch by doing a ton of CRs and a coding change here and there / prototyping newer revisions.

IOW, You can be a reasonable programmer with #1 alone, but if you are ever going to be the next Linus, You better have a lot of memory, at least enough to encompass the problem you are solving.

From my observations, I could even say that working memory is almost directly proportional to the worth of the person.

A little disclaimer to wrap up: If you have Eidetic memory but zero/low intellectual power in applying that logic, you will be no good to a project than a camera.

0

If you have difficulty remembering the names of people you meet, you could still become a great programmer.

I forget people's names all the time. I am a senior programmer with almost a decade of experience. In my case, my terrible auditory memory is compensated for by a great visual memory.

Even so, the essential requirement for a good programmer is the ability to abstract. No matter how much or how little you can remember, if you cannot understand the concept of a variable, and how to use it in a program, you won't become a good programmer.

My suggestion is that you try one short course in programming, or complete the Python tutorial to see how you like it.

That should give you a good idea about whether programming is a career you might be interested in pursuing.

-1

I say an emphatic YES!

At present I am learning JAVA & C#. All the tests are closed book, so for JAVA its all 100% from memory coding all applications in exams.

What's more, it is getting harder & harder. I'm at the point now where I need to start using memory tricks like mnemonics, etc.

I would say High IQ, good general knowledge, good vocabulary, polymathism, higher mathematics knowledge, touch typing & good memory are all assets for a programmer.

I know very clever programmers that can't touch type or do higher math, etc. It they did, they could be much better.

1
  • The real world isn't closed book. In almost all cases closed book tests are an indication of a teacher who doesn't know how to make good tests. Oct 9, 2012 at 0:17

Not the answer you're looking for? Browse other questions tagged or ask your own question.