In the past few years, there has been something of a boom in “learn to code” sites, movements, organizations, businesses, etc. Many promise that programming is simply not as hard as people tend to think, and that virtually anyone can become a programmer, within mere months, or even weeks. There is no shortage of experienced programmers that scoff at this notion, and I think they’re justified in doing so.
“Ah, but it only took me a few weeks to make a game of hangman, and it didn’t take much longer to make my own blog with Ruby on Rails.”
Decent accomplishments, for which you (as a beginner) should be commended, but is that really what you wanted to do? Most people have an idea for some piece of software that they would like to use, sell, or both, and they get into programming to reify that idea. I suspect that most of these ideas are quite a bit more complicated than a hangman game, or a blog. Take the time to translate ideas into project specifications, and you can see the project for what it is: A fairly sophisticated piece of software, which needs to leverage a set of established technologies, and navigate a plethora of “best practice” conventions (which are necessary, because complexity management is one of many unresolved issues in this field).
Can you create this sophisticated piece of software, with little more than your newfound ability to merely program a computer?
At this point, writing seems like an especially apt analogy for programming. The ability to write is fairly wide-spread, but there are very few people who can write something worth reading, and even fewer who can write something so compelling, to the point where someone would actually pay to read it. The technicalities of syntax and grammar are important here, but that alone won’t get you to that latter category. For that, one needs a certain sense of style, and, most important of all, a deep understanding of the context in question; In order to write a book on Physics, you must know Physics, and know it well.
“But what about libraries. I mean, I could just use one of the existing physics libraries, and that should be easy … Right?”
I would say that it’s easier, but definitely not easy. Every library is essentially a language in its own right; Someone used objects to model relevant concepts like “body”, “shape”, “material”, “world”, etc. The context may be smaller, and it may therefore bring your vision into the realm of possibility, but it’s still there, and it still takes time to absorb, especially if you’re trying to do something outside the common use case.
For one library, the required amount of time seems trivial, but you’re probably using many libraries, and you’ll need to spend even more time on actually fitting them together into one cohesive system.
Technically, anyone who can program, in some capacity, can be called a programmer, but it’s going to sound just as unfitting as calling everyone who can write a writer; The title implies the ability to produce something of significance.
If your goals are even remotely ambitious (and it’s likely that they are), you’ll have to accept that it’s going to take years before you can even reach for them.
There is no royal road, and there are no shortcuts.