| You need multiple things to come together. Some are abstract and general, some are more specific. You need to know the tools you are using, the capabilities of your platforms. At some lowest level it is about solving problems and knowing how to drill down and understand requirements, split a large problem into sub-problems. In that respect it is not unlike an architect or an engineer or carpenter. Then it comes to about learning how to translate to an intermediate mental representation. Here where you you already think about the typical language paradigms. Like someone used to object oriented design starts seeing objects, factories, inheritance hierarchies. Someone used to actor based programming (like Erlang) starts seeing actors sending messages to each other. A Haskell programmer starts thinking about type-classes (presumably, I am not one). Then it comes down writing it. Here one needs to know the tools in detail. The specific language, platform, API. Say something object oriented at the higher level could become something in C++, Java or Python here. Here is where Google-ing helps. Knowing that say oh Python has this cool built-in module that can help me. Or yeah, I'll use a smart pointer here. Well you have to know about the smart pointers. Then here is boring but important stuff. Knowing how to use version control. Knowing how to estimate time, communicate with team-mates. Not being stupid about security. Anyway a lot of things have to come together to make someone a successful programmer in the general sense. Some acquire these capacities formally by going to college. Some acquire these on their own. The interesting thing is that regardless of how it was acquired, the usual instinct is to discount it while looking back. "Oh I just write Python, here is a book on syntax, learn it and start programming". That always somehow seems easy to programmers. And I have made the that mistake. Friends and family member I have tried to show/teach programming. |
I've found that interpretive languages, Python, Perl, or even BASIC can be less difficult to start because you can start exploring them right away. Compiled languages are harder because of the intermediate step.