Most people start programming when they realize and are inspired by the tremendous possibilities they see in computers. Then their curiosity takes them forward. They start by trying a few things and then their career takes off. It is a rabbit hole and only a few people reach to the bottom of it, rest stop at different levels in the hole.
I was inspired when computers were introduced to me in my 9th grade. They used to teach us using the BASIC programming language. I made many programs that inspired my classmates and made my teachers happy. They were from smart calculators to flashing graphics. I believe the flashing graphics thing is what inspired my classmates! I also wrote a program for an animated robot! it was pretty long! Then I did some research and realized that C programming language is something that is popular and goes beyond any other popular language. I learned C and C++ at an institute that taught programming languages. However, there were many things to learn in C/C++ that an institute or a book does not teach and I learned all that through experience. For a few months I taught programming at a school and I inspired many students and most of them are programmers today! I was writing advance C/C++ programs before I went to college. I learned Assembly language in college. I am working on embedded systems and sometime in the past I also wrote some OS level code, that's how deep the rabbit hole goes baby! the base of the hole is quite wide and you can branch of in corner of your liking and luck.
So basically if you are curious to learn and you find someone who's work inspires you then you will start programming. Seems like something is missing in the last 6 years!
Can I start to learn to program now? And if I can, where?
Yes, you can start anytime but the first question that you will have is which language to learn? There are many out there and it is very confusing to choose from. If you want to go far in this field then I would suggest learning C and then C++ because these are high level languages (human readable, abstract etc.) which also allows one to write low level code (hardware control, interlaced assembly code (machine language) etc.). Later also learn Python to complement your knowledge. Python is an interpreted language and is mainly used to write scripts to automate your tasks and also for testing. Once you get started you will figure out that you need to know many other things and you will be good enough to learn those things on your own. BTW, the order of learning C -> C++ -> Assembly -> Python is probably important because you will have developed some basis for things that your learn later and would have an idea of what could be going on under the hood and would prevent unnecessary waste of time in searching for the right answer and then few years down learning that the right answer was only partially right and the actual right answer is quite deep.
You can either purchase books or download PDFs online for learning C/C++. Python comes with its own tutorial and documentation so you do not need to purchase/download any books. For C/C++ there are two books, Thinking In C and Thinking in C++. The author has made their PDFs freely downloadable. Simply Google for the titles and you will find the author's website.
You will need a good editor, use Eclipse For C++ and use Notepad++ for Python and other files. You will need a version control system, use SVN and Tortoise SVN, You will need diff software, use WinMerge for diffs and KDiff3 for 3-way merge. You will need C/C++ compilers, use GNU compilers.
If you want to work on Linux/Unix an alternative is to use Cygwin on Windows. Cygwin will simulate a similar environment in a shell. Its installer is superb.
Everything that I have mentioned is freely available and is used by most professionals in the industry and I believe all this will give you a good start.