The first thing to consider is the sequence of algorithm, program, application and system.
Most people enter programming at the level of "program" (surprize, surprize!), but it's too high and too low at the same time. On the one hand, to really do something brand new and unusual, you often need an algorithm - a sequence of logical steps that accomplishes a particular task. Algorithms are closer to theory, they are mostly expressed in natural language and mthematical formulas, and usually not executed by computer directly.
A program is an algorithm that's writtem in a way so that a computer can understand it. Program takes care of such mundane aspect of the problem as getting data to the algorithm and making its output available to users. That's what you have been doing. I suspect that most of your algorithms are very simple (judging by the size of your programs).
An application is a huge program, or, more often, a number of programs designed to work together. This is where most of real, professional programmers work. It adds things like UI, performance, moduarity, deployment and so on. An example of an application would be, say, GCC or Mozilla.
The last level I have to mention is a system. It's a set of multiple applications deployed to solve a particular problem or provide a service. An example would be this web site or a Linix distribution.
You have to have understanding of all levels to be a programmer. You have to master certain things at each level. For example, at the level of algorithm you need to understand the performance considerations: memory and execution time as function of data set size, data structures, random numbers and so on.
At the level of programs you need to understand assembly, compilers, modern CPU architecture, IO, interprocess communications, network, OSes.
At the level of application, you need to consider things like usability, maintanability, modules, interfaces, libraries.
And, if you ever get to the level of systems, you'll vbe concerning yourself with uptime, survivability, scalability and so on.
You say:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I'm also not going to study computer science since I right-out _hate_ mathmatics (the exception: I'll delve into maths if it'll help me solve a problem) and also have other plans for my future work life.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Well, guess what, with an attitude like that you will never be a good programmer. You don't study things to solve your problem, you study them because it's fun and because you just can't sleep at night if you don't understand how this dumb machine gotten so smart. Programmers (good ones) don't write with "the goal of developing a real, working, useful application (nothing trivial)" - they write because it's fun, or to learn something.
Now, if you want to get into the guts of computers, the computer language books aren't going to help. Computer languages are tools. You don't learn to understand cars by reading about screwdrivers. Find something about compilers, for starters. Learn about things like lists and dictionaries. For stimulating intellectual challenge, learn SQL. Perl regexps are fun too. I would join those who recommend Python as the first language. C is way too low-level to be a good learning experience - you may as well start with Assembly. Oh, BTW, you do need to try a bit of CISC assembly language - Intel or Power PC will do. RISC is less useful - the compiler will make a mash out of your program anyway, trying to account for all the peculiarities of a RISC CPU.
As to your request, the hardest part of programming, like in any other human activity, is to come up with a brand-new idea for something to do. Most things one can come up with are already done. If you are creative, try inventing a new computer game. Even in that case, you will probably be able to start with an existion open source game and morph it into something you want.