Aaron Vance wrote me a letter and I'm printing it here:
Robert: So I guess I'm #15 of #15 of your daily readers.
I'm a developer by day, and a lurker of The Scobleizer by night, I guess.
It's really cool that you're taking on the challenge to learn to program. .NET is definitely the platform you want to pursue, although you've already reached that conclusion.
My $.02 may only be worth $.01, but I've pretty much learned my actual technical programming skill by myself when I started C in 9th and 10th grade. Back then (as if it were so long ago, of course) DOS 5 and DOS 6.22 couldn't do THAT much (hindsight's 20/20, right?) and I never really got into games. But "demos" from the demoscene fueled my quest for the knowledge. I saw the amazing things that those groups were doing and said - I want to do that.
And that's where it started for me. I had an idea of something I wanted to do - and started exploring how to make it happen.
My first point: Don't over analyze your approach to learning programming. You're a very intelligent guy, and very systematically approaching the learning process. Don't. I'm sure you have ideas of stuff you'd like software to do for you. So build it. That's the passion that has always driven me.
I'm not completely saying that a systematic approach to learning isn't bad. Because in contrast, the "algorithmic way of thinking" you've discussed IS very systematic. But don't over analyze your approach or you'll never get there. Don't get weighed down by the fact you don't know System.Xml inside and out.
I have JUST overcome this same hurdle in some respects. I develop by day in "old" ASP, and my company isn't interested in simply dropping everything to go .NET overnight. That has been a challenge for me because I've been sitting here for the past year or so thinking, the development world has taken that next step, they've made the jump to light-speed, and I'm left behind. .NET seemed so daunting, there's the HUGE .NET Framework, and then the behemoth VS.NET tool. Where do you truly start?
I return to my premise: go with your passion for building something you need, or want to have your computer do for you. Then build it.
It probably won't be efficient at first, but as you go, you'll have many ah-ha moments where you learn a new way to code something or run across a new library to do your bidding. But don't throw in the towel. You're not developing Longhorn, so your code doesn't have to be pristine.
I received a degree in MIS, which typically is a fusion of business and technology, not so much programming, so like you I don't have the Com Sci background that most to-the-metal system programmers have. I love the high level view. I need to know what my code is going to do for me in the wide-world, or it means nothing to me. Overall, I need a vision of what I want to accomplish, or a vision to solve a business problem. And getting in there and working it out is the fun stuff. It's an adventure every time.
I wish you the best of luck in your endeavors. I also look forward to your first "killer app".
I agree with your sentiments thus far: go with the .NET SDK first. It's like learning maths. If you don't know how it works, and how to go through the process of solving the problem, you won't become a very effective coder, because you end up freaking out at any variance pure VS.NET may throw at you. Or worst of all, you end up limiting yourself by thinking, if I can't do it with the tool, I can't do it all.
Perfect analogy is MS Access. You can't develop a true Access app with queries and macro's. You've GOT to get dirty in Visual Basic for Applications to make it happen.
So remember. Prioritize your ideas, and start coding. You'll find the answers as you go, and Google, along with your programming bloggies will be the best resource you have.
All the best,
So, now I want to build a little app. I keep going back to how my son learned how to speak English. His first word was "light." Why? Because he wanted to turn the light on and off.
So, how do you learn what objects are available to manipulate? And where do you start? Well, right now I'm learning that Google isn't doing it. Although I did find this interesting article on C#'s Basic Syntax. Still pretty hard to grok for someone who's a beginner.
I know, for instance, that I need an object that'll display a form. I'll also need a button to put on that form. But, if you haven't programmed before, where do you start? This stuff is frustrating (and I am ahead of many people because I know that everything in Windows is basically an object that I can manipulate, get data from, set properties on, etc).
I'm already pretty far along because I know a lot of the "lingo" of Windows programming. My friends who are end-user geeks are further behind than I am.
I'm going book shopping tomorrow. Any good books that you'd recommend? Especially for my first month? Keep in mind, I'm already limiting scope to C# running in the SDK, so no need for Visual Studio or VB.NET, etc.
Also, no need for tons of .NET Framework explanations at first. Just a book that'll hold my hands through learning the basics. We can have more Framework fun later after I can write a 15-line app that does something like display a form, put a piece of data onto it (say, a string of text), and then maybe manipulate that text (turn it bold?)
Just really simple stuff so that I can start learning the syntax and how things work.
It's amazing at the viralness of this idea. I think there are a ton of people out there who want to learn to program, just like me. Getting lots of great feedback. Here's some:
Joe Bork (he actually gives us a code sample to run, and tells us how to compile it.
A few of my friends have been raving about Pressplay. For $9.95 a month you get unlimited music downloads. I just signed up. You get three days worth for free. After all, you need some tunes to accompany your .NET programming learning, right?
Damian Maclennan passes this along: "I noticed you're blogging about learning .NET. I think staying away from VS for a while is not a bad plan. Have a look at this http://www.icsharpcode.net/OpenSource/SD/Default.aspx
SharpDevelop is an open source IDE for .NET. It is not a bad half way between a text editor and VS. It doesn't get in your way too much but it has the nice features like intellisense / autocomplete and code templates, which are a nice starting point.
David responds: "Go with console apps for starters. You really don't want to get confused with all the WinForms stuff until you really know the language and the classes in the FCL (Framework Class Library)."
David Stone gives me more advice to help me along with my quest to learn how to be a .NET programmer: "check out Reflector" cause that'll let me start to learn the .NET Framework and get an idea of what objects are there and how to use them. He writes about Reflector here.
OK, so, I think I'm building a "coder philosophy" now. Let's learn with just the SDK. Just the console and a text editor. Forget all the visual googaw you get with Visual Studio. Use C# since it doesn't hide things from you (and cause 8 out of 10 of my smart friends are C#'ers).
So, what should my first project be? How should I approach it? Should I write out a list of instructions? For instance, let's say I'm building a "hello world app" should I write out instructions like:
1) User double-clicks on the .EXE to start it up.
2) User sees a window with a button on it that says "hello world."
3) User clicks on button.
4) Application pops up a window with the words "hello world" on it and another button that says "close app".
5) User clicks on "close app" button and the app closes down and removes itself from memory.
Is that a good way to approach a programming problem?
Oh, great, I've been misspelling Larry Tesler's name. Thanks to Dave Winer for pointing that out. Turns out lots of other people mispell his name too. There's only one "S" in his last name. I should have gotten that right. At least with weblogs I can correct myself before all 15 of my readers see my post.
My main frustration is that I don't think algorithmically. I think Phil Weber said it the best. I have to look at things I want to do and write out the steps I think the computer will need to do it. For instance, to build a 'hello world' app, what needs to happen?
I also have some other advantages. I have Windows Server 2003. I have Visual Studio loaded. I have Office 11 beta loaded. I have SQL Server on CD and can load that. I have MSDN Universal. Obviously, that's a huge advantage over other people who are advanced users but who don't have the tools.
Learning to program is a lot like learning a foreign language. Right now I'm trying to learn Farci. I'm picking up words here and there, so now I can sort of understand what people are talking about.
My understanding of programming is the same. For instance, I know what P/Invoke does. It allows you to get outside of the .NET world and talk to the Windows APIs. So, that means I have at least +some+ understanding of Windows underlying architecture. I also understand a little bit about how Windows works underneath. For instance, whenever you move the mouse, did you know that underneath Windows is sending "mousemove" messages around? Have a programmer show you sometime. It's pretty darn interesting how Windows works under the covers.
But, even though I understand all this, I don't know how to talk back to it.
Anyway, it's time to learn some more.
OK, I'm motivated to moving from an advanced user to a programmer. I know it'll take two years. That's my goal. Now, I have a few advantages over advanced users. I used to edit Visual Basic Programmer's Journal. I understand at a basic level how Windows works. I've actually read most of "Code Complete."
Why will I focus only on .NET? Well, I only want to write apps for Windows and I need to start somewhere. If other things get more important over the next two years, then we can switch, but I don't think they will.
Advice is already flowing in from around the globe. One guy said "don't learn on Visual Studio, use the .NET Framework SDK. The problem with starting with VS.NET is it hides a bunch of stuff, leads you down certain development patterns, that might not make sense. I think if you learn the SDK tools first, then move onto VS.NET, you'll better understand what it's doing for you." Simon says.
Phil Weber tells me "I think what separates a "power user" from a "software developer" is some basic computer science knowledge: how to translate a problem into an algorithmic solution, knowing how to decide which algorithm is most efficient and maintainable."
I think I'm going to start a blog, just about my "learning to program" journey. Anyone wanna help? I think we are going to see a huge number of people over the next three years who will want to learn to a few things with C# or VB.NET.
We can even start a "learning to program" club. Keep the ideas coming. My IM and email address is firstname.lastname@example.org.
Congrats to Microsoft for shipping Windows Server 2003 to manufacturing. This news might not get noticed by geeks (it should, they made some impressive gains around security, scalability, and performance with it), but I know the server group at NEC is happy to have been getting killer results with it.
You know, my life is just so blessed. Last night I spent two hours with my best friend from College (Nick Paredes) that I hadn't seen for years, and Larry Tesler. Freaking A. You mean +the+ Larry Tessler who worked at Xerox PARC and was Apple's chief scientist? Yup, that one.
Mac people should kiss Tessler. He's one of the folks who brought Steve Jobs back, he told me.
Now he's Vice President of Engineering at Amazon.com. He told me all sorts of stuff about Jeff Bezos (likes working for him a lot) and the retail business (it's all about finding ways to reduce cost).
I was in the midst of two geeks. Nick sells networking equipment for Allied Telesyn. I learned a whole bunch about the Enterprise Networking business. (Allied is a disrupter to Cisco and Nick claims that Allied's equipment is often half the cost of Cisco's. Since Nick joined the company several years ago they've quadrupled their size).
You know, I don't believe in a God, but something is looking out for me. I keep meeting really interesting people that I've looked up to nearly my entire life. Tessler helped invent the Mac. He changed my life. How many other people can I say that about?
Oh, Nick has always been into fantasy baseball. But, I didn't realize how serious that sub-culture has gotten. Tomorrow he, and a few friends, will each meet in a secret Silicon Valley location, lay $1000 each onto a table and start a team. They've been doing this for years now.
I have a new way to describe people. I say "are they lit?" In other words, do you see life in them? Are their brains turned on? Do they exceed their potential? Do they think different and not follow the crowd?
The other day I met a non-geek that was certainly "lit." He was a limo driver for many famous people. I can't tell you his full name. I can't tell you what city we were in, or any details. But, Sherman was someone else I was blessed to be in the company of for a couple of hours. I wasn't the one paying for his services, but he's driven Arnold Schwartzenegger, Danny Devito, Elton John, and many many other celebrities.
Obviously he was among the best of the best. But, you know what got me? How nice he was. How interested he was in MY being happy. How customer-centric he was. "You're the client boss, anything you want, you will get."
Is there any wonder why this guy is the best of the best? I felt like a billion bucks after driving around with him. He treated me, a schmuck who doesn't have a billion bucks, isn't a rock star, isn't some corporate CEO, the same way he treated all of them.
That guy changed my life. Maybe not quite as dramatically as Tessler did, but a freaking limo driver changed my life.
Just goes to show you that anyone, doing anything, working at any level of society, CAN change the world and CAN change people's lives.
You know, someday I hope I can interview him on the record so you all can see what a special guy he is.
Well, hope you all are having a great time this weekend. I gotta go get ready for more family stuff.