It seems one has to remember all sorts of syntax to be able to program. If one don't have a good memory for remembering names, will it be more difficult to learn to program?
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. If this question can be reworded to fit the rules in the help center, please edit the question.
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 could be much more difficult and I don't think most people can remember more than the most common ones they use, but that's OK if you have access to the Web, or a book, or something else that "remembers" all the other details for you.
It seems one has to remember all sorts of syntax to be able to
programspeak a natural language.
If one don't have a good memory for remembering
nameswords, will it be more difficult to learn to programspeak?
It can't be true that people have a "natural" facility with 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.
grammar of still strict. rules there are very are which But
If you can speak, you can learn to program without memorizing anything more than what you memorized when you learned to speak.
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.
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.
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.
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!
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.
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.
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.
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.
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.
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. :-)
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
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.
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.
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.
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.
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:
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.
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.
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.
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.