Not just the recruiter but the company where the vacancy exists is also looking for an exact match. But the recruiter is usually more selective than the company itself, perhaps because he/ she cannot judge the "ability" to do more than what's written on the CV. So, for example, if the advertised position lists 7 skills and one of them is programming in a Unix environment, and you don't have that skill, there are good chances that you'll never be called.
To my surprise, I have seen advertisements with the words "Java mulit-threading Programmer needed". Didn't mention multi-threading on your CV? Bad luck. Multi-threading is yet another important keyword.
This kind of specialization is partly due to the large pool of candidates available to recruiters here (unless you are from a very niche market such as programming embedded linux in wifi routers).
Since it doesn't make sense to write every tool that you have ever installed (even those which you never actually used) on your CV, you have to be very selective in defining your own profile, and target only those jobs. You can't, under normal circumstances, have experience of CruiseControl.NET and Maven at the same time, for example.
Job Categories for ProgrammersApart from mobile and web development, following are some of the programming job types which are abundant at the least in London:
1. Investment Banking/ Trading: This is the most highly paid job type. The ads usually require C++ and Unix with strong multi-threading and SQL experience along with STL and Boost. So one good profile could be: C++, Unix, Multi-threading, SQL, STL and Boost. In the same category, there are requirements of Java programmers with C++ background; there the "keywords" could be Java, Spring, Hibernate, C++, Multi-threading and SQL.
2. Set Top Boxes: Related to digital TV, this is not-to-be-ignored area, specially if you are a C++/ Java programmer. Usually comes with similar requirements as those of investment banking except, of course, the domain knowledge is difference, and Hibernate/ SQL knowledge is not important.
Technology StackKnowing C# is also beneficial for Java/ C++ programmers but only at the Winforms level. Here is a quick review of the technology stack used at most companies outside the embedded systems and web development markets:
1. C++ is used for algorithmic and performance intensive work. It's also used where hardware interfacing/ network level programming is used. It's important to have work experience on Unix, STL and Boost for most of the jobs.
2. Java is used for server side programming. Comes with the requirements of Spring, Hibernate, TDD and SQL most of the time. Did I mention that "multi-threading" is important?
3. C# is used for the client side GUI. Winforms and WPF (and sometimes WCF) are also important. Further, if you are a C# programmer, you ought to know CruiseControl.NET or other CI stuff.