Just like any other job. Your inner voice should be in sync with your physical actions. For everything that you start at first, there is some initial resistance, but once you get through you start enjoying. Writing software, so others can use it will demand a different stratum of understanding about the software. You need to be able to think out of the box. You need to be the smart, passionate person who cares to write a solution to an issue or a problem that exists before all. This is what makes you different. You cannot go about the regular way and write a software. Coding does require some special understanding of how a computer and its Operating System work.
Now, let us not take this as a negative post. No one is barring you from picking up a manual or a e-book online to learn the very basics and barely start to code. Not like there is a global code enforcement police to prevent it. Nor does any codified law require you to be a licensed coder registered with the federal or central government in order to write code. You are at liberty to code in whatever programming language you desire for a platform of your choice.
Role of theory and programming concepts
So, how difficult it can get when one fine day you start with a programming language manual? Can core programming concepts be ignored or skipped? From what I heard, without theory, you might develop a simple program but with multiple modules, things get sophisticated and complex over time. In the very beginning you need to be good at logical reasoning but as time passes, studying computer programming concepts is a must.
Some experienced coders think that there is not a limit in this respect. From what I am told is that usually you look back at your past work see how you could have done it better (especially if it is one of your very first projects). So to reach a mature product from your first project that probably involves at least three major redesigns and rewrites from scratch. This will get better over time. But it all needs a lot of training and if it is not part of your daily routine it will not be very successful.
Also, back in the old days you would have been lost when you had no background in computer (CPU/RAM) hardware theory but nowadays with a high level language that complexity can stay a black box to a developer unless it is a specific use case that requires involvement with the hardware like driver development or peripherals control etc.
A pro tip before you jump directly into public code
A common myth is that you will learn by contributing and accepting submissions in Free/libre software code hosted online, thanks to the Free Software movement. It is not a closed world any more. You do not have to be an expert on every aspect but have to know your part well in order to integrate your code into a project with universal sharing. Isn’t it? Not really.
The most common and well thought advise is to pick a book and learn basic programming then move on to data structures and algorithms then be a language master. A good book teaches well-known best practices and design patterns of coding and not just Syntax etc.
My personal opinion is that it is more the latter. You’d better gain experience and make your own mistakes and have a good understanding of different ways to achieve the same think before you start digging into complex code of others. But once you are experienced you can learn a lot from contributing to public code.
Stay motivated and dive deep into it
I somewhat agree that one cannot code for the sake of doing it. Some kind of product idea or goal is helpful to stay focused and motivated. For instance if you love Free/libre software, it is something that can inspire you to rewrite a Free/libre replacement of a popular proprietary software.
Although, there is no hard and fast criteria, if you have begin to code, just write single program initially for 6 to 12 months or more and then you move on to the next level which includes build systems, dependencies, modules etc.
Do not go after immediate results. You can start with a simple HTML page and keep on modifying that page for almost 6 months until you are satisfied and confident with the code or syntax. Pick a high level programming language like Java or anything that you are comfortable with initially and do for years even after getting familiar with data structures at least the basic ones not graphs and trees etc. You then learn time and space complexity or at least should have basic understanding of it. Once you are well-verse with the basics and are ready to take challenges, it is time to master a programming language of your choice. What it essentially means is learning and knowing most of the concepts of the language. For example if you pick Java, you must known how it complies, how byte code is generated and what are the different features in different version of Java etc. It helps you gain overall experience in computer programming. Once you know one programming language well, you would not find it difficult to learn next or another, if you have to. Learning a single programming language is never enough.
When you are confident about a particular programming language and are comfortable in making softwares and not just writing single purpose small programs, you can start taking freelance projects or work professionally as a coder. Lastly, yes, it’s long journey and you have to force yourself initially.