I started programming seriously on an Apple IIe (and a bit on Commodore 64's) - at the time I was a broker with Merrill Lynch in Orlando, and I was fascinated by the Technical Analysis Department up in New York. These guys, like Bob Farrell and Phil Rettew, who've become legendary, would post their daily market calculations on the Quotron screens (for those who aren't old enough to know, the Quotron system was a hard-wired network with small monitors and keyboards for the brokers. The monitor had a screen with one glorious color - "puke green").
I started out copying down the TRIN, put/call and other indicators onto graph paper with colored pencils. It was fascinating (so fascinating that I eventually left the business when I realized I was more interested in technical analysis than sales!). While other brokers in the office would get excited about having some Muni bonds they could get a full point commission on, I was ranting about the put/call ratio making a new high.
There was an older broker in the office who had a Trash 80 with a printer. He wasn't much of a programmer, but he would let me write BASIC code that would actually print out these indicators as rudimentary graphs on perforated dot-matrix printer paper, and man - was I ever hooked! D00d, you wouldn't want to short GOOG at $500 without these graphs!
So I saved up and got my Apple IIe with the two floppies and the big cables and a dot-matrix printer. 64K of RAM! Anyway, I was fortunate because one of my customers was an engineer at what was then Martin Marietta in Orlando (now Lockheed) and he would help me with learning BASIC. I almost got divorced 'cause the Significant Other could not understand what I was doing up at 3 AM writing code...
So my first real entry into the programming world was driven by a need - to be able to analyze, manipulate via mathematical computations, and graph stock market data (this eventually led to a Ph.D. in economics).
My first programs were what I now refer to as Linear Buitoni. Everything was "inline"- from front to back. Then I learned you could isolate code blocks into what were called Subroutines - that could be called from anywhere in your code. This was nice because if you had 10,000 points of daily data and you need to compute a slow stochastic index on it, you could pass in each day's data to your subroutine and have it do the computation, and return you the result of that day's worth of data.
Oh, and let's not forget the glorious "GOTO" statement. That REALLY made things fun! My Grandmother always said "The way to understand recursion is to understand recursion." Bless her heart - she managed to recurse her way up to 100 years old before she finally threw a stack overflow.
It wasn't until much later, working with FoxPro 2.6 and writing much more organized code for real business applications that I began to think in terms of "Structured Programming" concepts. Try writing an Australian Binary MLM commission program in Foxpro and you will learn what "structured" means, really fast.
And, although I dabbled in JAVA and C++ in the 90's, I never really got the concept of OOP (Object Oriented Programming) until .NET came out in 2000. That's when things changed. One of the biggest problems with programmers who started out or are coming from the Visual Basic "space" is to UNLEARN all the "bad habits" and crutches you have come to rely on. For many, this takes a continued, concerted effort, and for some, they never get out of the bad programming habits and thinking. This is particularly unfortunate for VB.NET programmers because Microsoft decided to bring forward a huge amount of "backwards compatibility" and "crutches" in the VB.NET programming language. If Option Strict and Option Explicit are left off by default, how many VB programmers do you think are going to "explicitly" learn why they should both be turned "on"?
Being largely self-taught as a programmer is not for everyone. You have to be really, really motivated to begin with. There are a couple of other skills I've acquired and carefully honed along the way that have helped me:
1) Learn to search on the web (google, Live.com, whatever). The web is your personal "RTFM". The better a searcher you are, the less frustrated you will be.
2) Learn how to ask questions - whether it's a post on a newsgroup, or a verbal question to a peer, you must be able to express yourself clearly and concisely, stating the exact problem and what information you need. When I look at some of these newsgroup posts (e.g., "Urgent-Please Help me") - posts that ask for nebulous things and have no sample code - I often wonder how anybody could even bother to respond.
So anyway, I thought I would share this tidbit of history. Happy Thanksgiving (or whatever your favorite hoiliday is). And, thanks for reading!