When is someone a programmer? I wrote my first programs on a calculator. They were more like macros actually. Was I a programmer? Of course not. Then I wrote my first BASIC program on an Apple ][ of a friend at highschool. Was I a programmer? Not really. Then I saved up all my money and got myself a C64 and wrote programs in BASIC, then 6510 assembly. Was I a programmer? Well, perhaps, but only 15, so what did I know? A couple of years later I bought myself an Amiga 500. Wrote some stuff in 68000 assembly. When studying computer science, I learned a lot of useless program languages, but also C. Wrote lots of programs in C. Then I started a small company, hired an office space where 10Mb ethernet sockets from the wall connected directly to the net for a low fee, built and hosted web sites on a Intel 80486 running Linux. This was 1995. When I got my first job at an internationally operating start-up, I was busy configuring servers running NT, load balancers, firewalls but also did some SQL and coded some Cold Fusion for the company web site. My old trusty 486 served as DNS server. Was I a programmer? Nah, I did not really consider myself one.
The start-up went nowhere and I moved on. I did, and still do, enjoy programming tremendously. I sometimes still do it in my free time as a hobby. So I got a new job and with this job I could program all day. I made long hours that did not feel like long days at all as I was doing some very nice things, or at least that's what I thought. I was making enhancements to core parts of the software, and even got multithreading working for them, something that they were not able to because of compiler bugs, which I also helped finding. I was refactoring their code at high speed, because there was a lot of room for improvement, to say it politely. I often stared with disbelief and some amusement at the nonsensical functional designs handed to me. But worse, I started to clash with their main programmer, who had been there for a long time, and did not like what he saw. Our manager did not extend my contract after a year. He did not like it either. I was using object oriented techniques which they were not used to, it was a "different paradigm" for them, as the manager put it.
This was a disillusion. Programmers at the time were hard to find, and I could not believe that this was happening to me. Was this manager clueless? Probably. Was their main programmer pulling my leg? Perhaps. But I was sure I had done some very valuable things for them and as a reward, I was thrown out. Apparantly, I had been unable to demonstrate my abilities sufficiently. That might have been either my or their shortcoming, but for me that did not matter. I decided to abandon programming, or rather, developing. I felt developing did not receive the respect it deserved. It was often looked down upon by management and being outsourced to India. I decided to become a business analyst.
Life as a business analyst was a walk in the park compared to programming. I could now make designs on a higher level, but with my technical background, also talk to the guys that were going to implement it. I would never hand over a design that the developers would be unable to build. Also, the deadlines where less pressing. In the cycle design-develop-test-release, the time pressure existed mainly in develop and test. The testers would be the ones making extra hours when a release deadline was to be met.
I had been a business analyst for a couple of years at several banks. They have large systems and a high rate of IT staff turnover. Generally at banks, knowledge it sparse, documentation often non-existent, and management not competent on a technical level. They do have enough money though so they just bring in loads of consultants. So being a consultant I benefitted handsomely financially as well. My days as a programmer that got no love were soon forgotten by just looking at my bank account every now and then. I worked happily with the Indian vendor (Infosys) who created just horrible code, but ultimately made sure it worked somehow. And if they didn't, it was not my problem. Bliss!
Currently I am moving back to a more technical role, but one that is very specialist and not so easily outsourced, and always in demand. This means I can keep on contracting, earn a lot of money, have some independence, and for the first time in years I get to do some technical stuff again that I liked. The best of both worlds.
Back on-topic. Can anyone become a programmer? Yes, or at least, anyone can call himself a programmer. I have seen people calling themselves "HTML-programmers" which is embarrassing enough. I was programming non-trivial programs in assembly at the age of 15 but did not consider myself a programmer, or rather a developer, because it entails so much more. Developing efficiently requires a very good understanding of the bigger picture. To be able to see the bigger picture, you have to know about data structures, design patterns, designing databases. You have to know what is efficient and what is not. You always have to think ahead - you don't want to paint yourself into a corner with your code. You have to know about the libraries that are at your disposal so you don't reinvent the wheel. You must know and understand what has already been coded, which can be very difficult. You must know which techniques to know when. Know about middleware and how and when to use it. Then you have to keep up with new developments - new programming environments, new languages (Java, C#, an updated version of C++), new libraries (LINQ for C#), new domains (smartphone apps). Above all, you have to be able to think at a very high level of abstraction if you want to be really succesful. That takes brains, a lot of brains, more brains than most people have.
Therefore I am of the opinion that although everyone can call himself a programmer, not everyone can really be a programmer. But that the ones who are, should ask themselves the question what the point is of being one. The job is lowly regarded, often pay is decent but nothing spectacular, and your job is always at risk of being outsourced to the lowest bidder by clueless management who see cheaper ways. You will have to keep up with new developments to not loose your market value and that takes time and energy. If you do a good job, do not expect to get any compliments as it will often go completely unrecognized.
It is a sad state of affairs in developing. Good luck to you if you are a programmer. You will so need it.