In the 80’s, it became common for personal computers to be sitting out on store shelves with some kind of green scrawling of characters sitting naked in an ocean-like black display. These new personal computers would be turned on and available for you to type on. The Commodore 64, VIC-20, TRS-80, and Atari PC models would be beckoning you at local department stores.
I am kicking myself right now trying to remember what the Atari PC screens would display after booting. My faint memory was that it said “READY” when they were booted. Almost every time I walked by, someone would have typed their name in only to be greeted by a response of “SYNTAX ERROR”. What were you supposed to do with these things?
One day, I saw someone actually using the thing. They typed in the following:
10 PRINT “MARK RULES!!”
20 GOTO 10
Then he typed RUN and hit Enter.
I observed the screen fill with “MARK RULES” and the person walked away. I stood there, perhaps looking dumbfounded, or just looking like a curious kid, watching the endless scroll.
I remember that was the day I started my software development journey.
Before I ever took a software development course in high school or university or had a job, I learned BASIC. I learned a lot of flavors of BASIC. In those days, you learned the slight differences in BASIC among the Commodore 64, Apple IIs, IBM PC, TRS-80, and so on. BASIC was my language of choice for a long time, especially on the IBM PC 5150 my dad brought home.
My first computer, an IBM PC 5150 with 256KB RAM. I had a CGA monitor though.
Photo © Ruben de Rijcke / CC-BY-SA-3.0 – (via Wikimedia Commons)
Not until high school and the good fortune of a real honest-to-goodness computer science elective (thank you Ms. Gigi Walker) did I learn Turbo Pascal. In subsequent years at high school we transitioned to C and learned data structures (stacks, queues, trees) and implemented sorts. I was extremely fortunate to have this available in high school.
In college, I aced an ADA class (the intro to computer science class’s language of choice) so thoroughly that I destroyed the curve and sent dozens of students away with D’s or worse. I played around with Java in the computer lab, but it wasn’t part of the curriculum so it was purely experimenting. It was about this time, in 1993, that I remember making my first web page.
From there I got my first programming job (which was during college), and on the job I learned C++ and took my first step into Windows development when Windows 95 shipped. This means I struggled through the Win32 API, MFC, and later COM/ATL. We managed our own memory and resources in those days… and we LIKED IT (no… we didn’t).
In 2000, I was fortunate enough to be at the Microsoft Professional Developers Conference when .NET was announced to the world. Since then I have been working almost exclusively on the .NET platform, so I’ve learned C#.
And on the way I learned a little about SQL Server and T-SQL. Many developers in the late 90’s and 2000s became fairly proficient in database technologies and SQL scripting, because you had to deal with it all the time (I know many a DNA who would argue with my use of the word “proficient”).
Since then, I’ve stuck pretty close to the Microsoft stack, going so far as to be that “full stack developer” that is a common hiring buzzword today. This means I’ve learned a lot of development technologies that aren’t exactly LANGUAGES but pieces of the .NET framework or add-ons. This includes, WPF, XNA, Entity Framework, ASP.NET MVC, and so on. At some point language syntax stopped mattering as much as technologies within a larger platform. In short, there’s just so much to know, and you can’t know it all.
How should you start?
Curmudgeon developers (sometimes that includes me) often say that these youngsters today don’t know how good they have it. Sometimes it is also said that today’s developers are naive for not having to deal with some concept that we all struggled with in the past, like pointers or resource management. Joel Spolsky alluded to this almost ten years ago. But Joel doesn’t allow his post to be “you kids don’t know how good you had it” without making a larger point about learning to write good software.
How should someone totally new to development get started? The answer is not that you need to go learn C or C++. It’s okay if you don’t start the way I did, partially because some of the platforms and languages are nearly extinct. You don’t have to start with languages like C# or Java and it doesn’t make you inferior if you don’t. The concepts that you can use to get a job or finish real projects you can actually ship aren’t the same today as they were in 1984 or even 1994.
The answer is…
In my opinion…