"And I have made the that mistake. Friends and family member I have tried to show/teach programming."
I'm just curious, knowing what you know now, how would you go about trying to show someone how to program?
I may have that opportunity soon and I was going to suggest thinking about a simple yet everyday problem that arises, and try to make it better with an app (could be phone, web app, client app, etc).
I learned programming with HTML/PHP. It's great in that HTML is really easy to understand and lets you draw colorful text and pictures to the screen almost immediately. Then, you can jump to Turing-completeness with a new kind of tag, "<?PHP" that can handle form inputs and generate new HTML!
And then get them over to Python or something ASAP. PHP doesn't have enough structure for a beginner to learn good software design principles, it's best kept to just teaching a thing or two about loops and control structures.
Teaching HTML + JS is tempting, but then you kinda have to explain the whole DOM too, which just makes things complicated.
1. I try to find out something that the person already understands, so I can frame my metaphors around that.
2. Maybe I'm projecting, but I was tinkering with computers for a long time before I started learning to program. To that end, there's a lot of just intuitive understanding of software that you absorb, basic relationships like configuration files, rebooting, memory, what a browser does, what a URL variable is etc etc.
There's a lot to be said for helping a person round out this knowledge, before you start teaching them how to program.
I don't know that a person needs to know a lot about America before learning American English, but I wouldn't be surprised to find out that it helps. "You see, they're kind of a casual low key people, so their language has a lot of slang and elisions..."
Learn to question everything.
Use CodeAcademy, KhanAcademy, and w3schools.com.
Don't listen to people who tell you something is a horrible idea. You're far to ignorant on programming to have your own opinion and accepting someone else's will just stunt your progress.
It's like learning to speak another language; you're talking to a child. You have to tell/teach it everything about it's life. Eventually it'll be able to live by it's self.
When you're ready for application programming, look for topics on c/c++ and other languages that people seem to love. Find out what your favorite game/website is built in and see if you can replicate it.
I'm teaching a relatively mathematically-minded friend programming and I've found http://repl.it/languages/Scheme to be an excellent resource. The simple syntax and semantics of Scheme and its easy accessibility allows them to quickly develop an understanding of the fundamentals, and from there it's not much work for them to download DrRacket and start on more practical applications.
I think games are a great place to start; simple, humorous text-based adventures, for instance, are both really fun to write and teach a lot of the basics.
I would be more patient. I would start with something they want to do, like a practical project. "make a garage door opener". Or make a "robot controller", beer brewing temperature probe with a web server, an app to teach morse code.
The more abstract aspects often become internalized through experience and through concrete examples. Say I didn't care about all the network or socket programming until I had to implement a chat-like server. Looking back thinking "oh yeah algorithms are important" but I only internalized that until I picked the wrong one and got horrible performance. Or until I started interviewing and everyone and their cousin wanted algorithms -- so yes they are important in getting a good job ;-).
Anyway this "example before abstract" is just my personal idea. Googling for example is something I do very often. Say when I get to an API section, I quickly look for example first. Man pages that have examples.
I've found the hardest thing for beginner programmers is being in a state where they can actually run their code. That's why I think NodeJS and Javascript are so awesome. The code just runs, better yet, Javascript (perhaps not NodeJS) can run in the browser (there's the developer console, even JSFiddle)!
I'm just curious, knowing what you know now, how would you go about trying to show someone how to program?
I may have that opportunity soon and I was going to suggest thinking about a simple yet everyday problem that arises, and try to make it better with an app (could be phone, web app, client app, etc).