There's been a push in recent years to expose more people to programming. Organizations like Code.org are trying to expand access to computer science curriculumns in schools, online schools have popped up all over the web purporting to be able to teach anyone to code, and even companies like Apple are initiating education efforts to encourage more people to code.
Don't get me wrong, this is all great. The work being done by Code.org, especially so, because it's targeted at exposing children to a potential skill they may have a talent for but previously never had an opportunity to discover. However, in that lies the caveat: potential. Everyone should be exposed to programming. In that, I agree wholeheartedly. Yet, not everyone should be a programmer, and unfortunately, I'm not seeing a whole lot of expectation management in any of these efforts to teach everyone to code. Being a programmer requires more than just learning to code. Here's a few things to look for:
1. A DIY Attitude
Programmers need to be self-sufficient. It's wonderful that communities like Stack Overflow exist to provide help and assistance when needed, but you can't rely solely on someone else always having the answer for you. A programmer is inherently a problem solver. Some need or desire exists, and the programmer creates something that satisfies that need or desire. Sometimes, that same need or desire has been satisfied before, and in those cases, you can rely on the work or guidance of others to create a similar solution. However, many times, you're in uncharted territory and you must draw your own map. If you cannot do that, programming is not for you.
2. A Thirst for Knowledge
Programming requires being able to absorb a huge swath of ever-changing information. It's not enough to learn a single language, as languages themselves or the popularity thereof die off all the time. Additionally, not every language is particular well-suited to every problem. Sometimes the application you need to build will dictate using a language you were previously not familiar with. Even if you're lucky enough to be able to stick with a single language perpetually, the features of that language will change over time, as will various libraries and frameworks that work with that language. For example, ASP.NET Web Forms dominated in enterprise environments running Windows for years, but has now been deprecated in favor of ASP.NET MVC and ASP.NET Core. If you're a Web Forms developer, you must now either learn these new platforms or await your own obsolescence. A programmer will program as a hobby. They do it because they love to learn new things. If that's not you, programming is not for you.
3. Mental Diversity
This is similar to possessing a thirst for knowledge, as generally one will lead to the other, but it's important to call mental diversity out specifically. It's simply not enough for a programmer to know how to code. They should have knowledge in many related technologies and disciplines. If you have a SQL developer on staff, you may not need to write SQL, but knowing SQL will make you a better programmer. You may not need to deploy servers, but knowing how to deploy servers will make you a better programmer. You may not need to know a lot of things simply to accomplish whatever tasks you need to as a programmer, but if you don't, the code you write will be inefficient and often incorrect. A programmer will know not just a programming language, but an entire stack: the platform and related technologies that the code they write will run on. If you know Java, you can technically create an Android app, but unless you know about Android as a platform, the various mobile devices that run Android, etc., your Android app will frankly be crap. And, just as with programming languages, stacks change all the time, as well, and probably faster. Just look at something like the Apple ecosystem. At first, you had one platform (iOS) and one device (iPhone). In the decade since, you now have multiple mobile platforms (iOS, watchOS and tvOS) and a multitude of devices (iPhone, iPad, iPad Mini, iPad Pro, Apple TV, Apple Watch, etc.). You learned how to make an iPhone app. That's great. Can it work on an iPad? Does it have a companion app for the Apple Watch? It's never enough to just learn one thing. A programmer will explore many different related technologies and disciplines. If you can't do that, programming is not for you.
4. A Desire to Help Others
This is baked in. Programmers exist to solve problems. People have problems. Therefore, programmers exists to help people. However, a programmer will take it much farther. They share the code they write. They write books, blogs, articles, etc. They camp out on forums or sites like Stack Overflow to respond to questions from other developers. Programming is both a solitary act and a community effort. We all stand on the shoulders of others. We use libraries created by other developers so we do not have to write the same code ourselves, re-inventing the wheel as it were. Programmers help others. It's our DNA. If you have no desire to contribute to a community, programming is not for you.
If all of the above applies to you, then, great! You might just have what it takes to be a programmer. Success is still not guaranteed, but if you can take initiative, keep learning new things, learn all sorts of things, and share your knowledge and experience, then you'll be well on your way there. Learning to code may be easy, but being a programmer is hard, and there very much is a difference. We need more diversity in our communities, so teaching more people, and importantly more diverse people how to code, is an enviable first goal. Let's not stop there, though. I see people all the time who have made programming a career, yet don't have the chops to make it. Painting programming as something anyone can do, both discredits those who do it successfully and disservices those who can't.