Orcmid's Lair
Orcmid's Lair
status 
privacy 
 
about 
contact 

Welcome to Orcmid's Lair, the playground for family connections, pastimes, and scholarly vocation -- the collected professional and recreational work of Dennis E. Hamilton

This page is powered by Blogger. Isn't yours?

Recent Items
 
California To Be Repaved
 
Instant Upgrades: A "That Changes Everything!" Moment
 
Open is Different than Stolen: The Importance of Social Trust in Honoring IP
 
What Was Y2K All About?
 
Wells Fargo Click-Through Thuggery
 
Stupid Is as Stupid Does: Me and NewsGator
 
brrreeeport
 
.Naked Monoculture Bites MSDN
 
What Computers Know
 
Launching Naked Conversations

2006-03-09

Looking for "Ahah!" -- When Did You Get Programming?

At Tuesday’s East Side Meetup, Alex Barnett asked me to give the OPML sketch of who I am and how I got here.  After a 20-minute ramble (at least), I managed to spill out some version of my 47-year career in computing and my love for software development.  That was fun to do and I must wrestle that into a narrative somewhere.  It was also a natural segue into discussion of what people remember about the moment they suddenly got something important about how computers and programming languages work.

{tags: What Programmers Know programming languages computer science education learning programming conceptual models orcmid}

I have some recommendations for beginners who want to become Microsoft Windows programmers at the end of this article.  My suggestions crystalized out of the conversation about programmer epiphanies at the webloggers meetup, and I’ll start there.

[update 2006-03-15: I added three books to my list.  I am using the opportunity to tweak some of my statements.  It is now time to move my book recommendations and further details to a permanent web location and I’ll do that later.]

[update 2006-03-10:  I looked through some beginning C# books at Barnes & Noble today and have updated my observations about what’s available.]

Ah Hah, Ah Hah, That’s How I Like It, Ah Hah

Tommy Williams recounted how when he first started working in Basic as a youngster, he just didn’t understand it.  He struggled with it and it didn’t make sense to him.  He was apparently blocked for some time, and when he suddenly saw it differently (I think it was about understanding variables in programming languages), everything immediately fell into place and he got it.

Alex said he wasn’t sure he ever had that kind of ahah moment, as if he’s uncertain whether he has gotten it yet.  He had a different experience.  He was an algebra wiz at an early age, but he didn’t see the point.  For some of it, like simultaneous linear equations, I gathered he could go through the motions but it didn’t mean anything.  When he started writing programs, out of having a computer do the manipulations he got the point of algebra!  That would have made Ken Iverson’s heart sing.  Alex gave up computing when he took up sport and becoming a professional athlete, later coming back to computing from the web side.

I was thinking that I didn’t have a moment like Tommy’s but now I recall it.  My first serious computer program (after early experiments with Fortran) was written in machine language because I couldn’t understand how the assembler worked and what it did that I would care about.  Fortunately, the IBM 650 machine language was decimal, so I can’t tell stories about writing 2000 instructions in raw bits.  But it took an ah hah to understand what the assembler did and how to take advantage of it.   After that, I only wrote directly in computer code for something that had to be small and very low level.  One of the software-tool projects I worked on next involved rewriting that assembler, in assembler, with two other computer-center hackers.  I did a new loader for the assembled output — in direct machine language. 

I can think of other places where I simply didn’t get something (not just technically, of course), sometimes for years, and then the coin dropped and the bulb lit up.  At the same time, there are technical problems that come to me as if I have always known the key.  That’s where I am often surprised to see the difficulties of others.  I think we all have subjects that we can just slide into while other areas of importance seem impenetrable until some critical insight erupts.

From Sinking to Swimming, without Drowning

It seems, then, that the best training and education, especially the self-paced sort, gives avenues for individuals to discover what they need as they explore, experiment, fail, and build on the lessons of their experience.  The process must be flexible enough to allow each of us to navigate our idiosyncratic speed bumps on the way to the level of mastery that we seek.  The materials must be gentle enough that one can succeed at finding a place from which to move from discovery to discovery. 

I want to be able to offer guidance of that quality in making my software projects, like ODMdev, accessible to others. I’m always torn between being over-detailed and too regimented while also wanting to make sure that I don’t take away any important safety net too soon.  In looking for a way to allow people to play along using only lightweight tools, I’ve been hand-wringing far too long in choosing the C/C++ compiler that I will require for all of my release builds.  I’ve made my choice and I need to get on with it. 

Although it doesn’t apply for my immediate projects, I also learned something useful for beginners who want to make Microsoft Windows software.

So You Want To Be a Windows Programmer

If you’re an absolute beginner and you want to build interactive graphical applications for Microsoft Windows, start with Visual C#.  There are excellent beginner materials, you can begin experimenting with programs quickly, and you’ll be equipped to go beyond to ASP.NET and also related languages like Java.  C# is also good preparation for digging into computer science topics later on.  Perhaps better still, you’ll find yourself in the center of the action with .NET 2.0 development, WinFX, and Microsoft Windows Vista.  (I recommend Jesse Liberty’s perspective on this too.) 

The ideal beginner kit for Microsoft Windows applications is the free Visual C# Express Edition.  A perfect way to obtain it is to purchase Patrice Pelland’s Microsoft Visual C# 2005 Express Edition: Build a Program Now!  The book lists for $16.99 and it includes the Express Edition on CD-ROM.  The book starts out gradually, providing illustrated step-by-step instructions from installation all the way through the complete hands-on projects.  I think newcomers to Visual Studio will find the leisurely, careful exploration of the Integrated Development Environment (IDE) and the construction process to be very helpful.  It provides a great foundation for building Windows .NET 2.0 applications.  The use of color printing is also extremely valuable, providing a great visual experience and ease in matching the text materials with Visual C# displays.  I recommend checking around the MSDN Forums for the Express Editions before and during your use of the software too.  There is also useful information at the Visual C# Express Edition page.

To go further, there is John Sharp’s Microsoft Visual C# 2005 Step by Step.  You should be able to use it along with VC# 2005 Express Edition after working through the Pelland book.  The book is available at discount and was featured in a recent post-Webcast follow-on message I received from MSDN.  It seems well-received so far.  Without examining the book I don’t know how far you can get before the material requires a commercial version of Visual Studio 2005.  After examining the book, I don’t think there’s any problem using it with the VC# Express Edition until maybe the last two chapters.  That means 26 of 28 are completely useful.  There is also treatment of ADO.NET and you’ll be able to use the Express Edition’s free copy of SQL Server EE in working through that.  You may notice some discrepancies in menus and dialogs between VC# Express and the VS 2005 feature in the book, but you should be confident enough to work around them just fine fter starting with the Pelland text.

I also examined the Jesse Liberty and Brian MacDonald Learning C# 2005.  Be careful to obtain the C# 2005 edition if you choose this book.  Again, it is only the last two chapters that may require a commercial version of Visual Studio 2005.  That makes 16 out of 18 that will cover the fundamental details of the language without getting too far off into exotic areas.  There will be some differences in the first chapter for those using the VC# Express Edition instead of the VS 2005 in the book.  That should also present no problem if you’ve started out with Pelland.  I personally favor the gentle approach here, along with its greater attention to what is happening with the IDE and the command-line compiler.  The playfulness is the kind that has me smile.  It is clear that the authors are committed to newcomers having a great experience in their self-directed education.

I just found F. Scott Barker’s Visual C# 2005 Express Edition Starter Kit.  This book also includes a copy of the Visual C# 2005 Express Edition CD.  It’s difficult to tell how well this book will work.  It’s ambition is to apply for beginners, like Pelland’s Build a Program Now!  It delve into more C# concepts intermingled with Visual C# and .NET topics.  I’m nervous how this will work for beginners, yet its emphasis on practical examples and hands-on experiments is appealing.  My concern is that the absence of color and the mingling of different-level concepts will make it easy for beginners to lose confidence and have to struggle finding a coherent conceptual model for themselves.  So I’m hesitant to recommend this book over Pelland, despite its greater coverage.  I will have to dig in and try out the beginning of all of these materials before offering sharper guidance.  (I am looking for some beginner buddies that I can compare experiences with, too.)

Finally, once you get your feet wet, Charles Petzold’s Programming Microsoft Windows Forms (2005 edition) will be a great resource.  His older Programming Windows with C# is a comprehensive view of the .NET Framework and lightweight ways to use it that will provide much for the Visual C# 2005 Express Edition programmer.  You don’t even need an IDE to use the older book, so the Express Edition makes it all easier and smoother to apply.   These books assume that you are mastering the basics of the C# language (possibly in parallel) but you also want comprehensive and careful coverage of what you need to make .NET and Windows Forms applications.

I often have more than one book on a programming language, because something one provides may clear up a topic that I don’t grasp in the others.  For beginners, I recommend waiting for your second book until you’ve had enough initial experience with Pelland to know what the topics are about and where you want to go farther as well as deeper. 

Unless you use it already, I don’t recommend Visual Basic, although it has as much support, simply because it is a unique language essentially found only in Visual Studio.  The peer support on MSDN does seem  more considerate of beginners. 

I have been watching the discussion forums for the Visual C++ 2005 Express Edition and I don’t recommend that route for beginners either.  The VC++ Express Edition is not backed up with much beginner material except for making .NET 2.0 applications (which the C# material outshine if you are focussed on programming for Windows).  The VC++ drawback is that the compiler is too powerful and its usage too varied.  VC++ is a multipurpose tool that can be used to develop applications using different (and incompatible) programming and deployment models.  It’s like being handed a Swiss Army knife with all of the blades opened at once.   That’s just not explained well at all and it is too easy to go astray by mixing incompatible constructs and not knowing how to extricate yourself.  Learning to sort all of that out is not something I would subject beginners to.  Get started with C# first.

Establishing solid confidence with C# and the VC# 2005 Express Edition IDE will provide a solid foundation for exploring alternative programming models and languages, including C/C++ when you can’t resist the challenge (or you want to get into open-source development on non-Windows platforms).  If you really don’t want to be developing applications that exploit the Graphical User Interfaces of the Windows .NET platform, I have different recommendations.


I’ve taken Alex’s advice and added an “About” link to my blog template.  Now I need to put something more organized on the destination page.  I thought OPML might help me write it (and more), but I need to re-calibrate on that one.  More about that in another post. 

 
Comments: Post a Comment
 
Construction Zone (Hard Hat Area) You are navigating Orcmid's Lair.

template created 2002-10-28-07:25 -0800 (pst) by orcmid
$$Author: Orcmid $
$$Date: 06-03-12 15:46 $
$$Revision: 20 $

Home