Do good programmers need to have syntax at the tip of their tongue when writing code? What do you make of them if they google for simple stuff online? Are they good or bad(maybe they know where to look for)? Should programmers have a good memory? Is this a trait for a good programmer?
My philosophy on programming is that it's a "state of mind" and the rest is "just syntax." (i.e. not (as) important)
That said, one shouldn't have to look-up the simple stuff. At least, not for the language(s) you work with regularly. There's nothing wrong with needing refreshers and knowing how to find information is certainly a good skill to have. However, the core syntax should definitely be well known. Otherwise, you spend too much time searching and too little time programming.
It depends on what you mean, but the short answer is yes.
Are programmers going to forget a semi-colon or a brace here and there? Sure. Are they going to look up the syntax of a switch statement because they probably rarely use it? Well, I do. Will I be working with ActionScript but write it like Java instead? Definitely. It can take some time getting used to typing in a new language, especially if you've worked with a different one for years.
The real concern should be if a programmer cannot make heads or tails of the syntax even with an IDE helping them out. If the person doesn't know what a semi-colon is for, or what those fancy curly braces are, then they have more studying to do.
I would definitely be surprised if an otherwise good programmer had to routinely look up syntax for a language that they were fluent in. Of course there may be corner cases that don't actually get used a lot in practice such that it would be perfectly acceptable for a good programmer to not know them but, as a general rule, a fluent programmer doesn't have to look up syntax. S/he has to lookup functions and classes from libraries :)
If you're in a position where you're changing languages regularly or working in 3 or 4 languages at the same time there's not a lot you can do about it. For a while I ended up working on projects that required constant switching and began to refer to myself as a "reference programmer," having to look stuff up much more than I would have preferred.
I have been writing C++ for >15 years, but I still don't know some of its arcane syntactical corners by heart.
How do you explicitly instantiate a function template again? And what's the syntax to partially specialize a template that has a template-template argument? And don't get me started about declaring a function that returns a pointer to an array of pointers to functions which take arrays of pointers to...
I suspect there's at most one or two dozen people in this world (if there are any at all) who really know all of C++' syntax by heart. And these are probably all earning their money by writing C++ compiler frontends.
I'm curious about Googling "syntax" here.
My suspicion (and fear) is that we're not talking about what parameters a call takes (because most IDEs will prompt you there so you wouldn't Google them) but actual "how to do X" type things.
IDEs have made it unnecessary to memorise precise names and parameter lists in the way that used to be required and that's made many people a bit lazy about it but that's fine.
But something you need to Google? To me that's usually not syntax, that's just something you either don't really know or are only passingly familiar with.
Of course that's not to say it's wrong to have to Google stuff - languages can be pretty broad these days and few people know everything but I would say that if you claim to be competent with a language then Google should be the exception rather than the rule.
For me unless you're doing something relatively unusual, or perhaps you're rusty with the language after a period of doing something different, if you claim to "know" a language, you shouldn't be Googling more than 10% of stuff at most, and that should be really quite specific stuff.
In reference to the idea that this is about having a good memory, it's not really. It's about the sort of instinctive feel you get for something you really (rather than superficially) know. I don't consider the fact I know how to cook a Melanzane Parmigiana without a recipe a sign that I have a good memory, it's a sign that I understand how to cook that dish - they're subtly different things.
Besides, ask yourself this, would you expect to go into a restaurant kitchen and find the chef constantly looking at a cookbook? Or to see the mechanic working on your car flicking through the Hayes manual for that model? If I saw either of those things I'd be pretty uneasy about how good that person was.
Syntax is just the view on top of the language's underlying semantics because programming is all about using the underlying semantic bricks to build something. If you don't understand the fundamental concepts the language uses then it doesn't matter how good you are at memorizing syntax, your code will be a horrible mess. As someone once said, "Good programmers have an interpreter and a compiler in their head." Notice how there is no mention of syntax because that's not where the real work happens.