Posted By: The Channel 9 Team | May 20th, 2004 @ 11:15 AM | 16,364 Views | 19 Comments

Ward, the inventor of the Wiki and now an architect at Microsoft, is one of the more accomplished programmers we've interviewed, so we wondered how he would approach programming if he were to start his career today.

His answer is interesting: he introduces why programming in teams and being able to communicate with other people about what the computer is teaching you is important.

Understanding a language, he says, is a far smaller part of programming today than it was when he was learning to program computers.

What would you teach a young person who is just starting out today? How is that different from how you learned to program?

Media Downloads:
Rating:
0
0
EXCELENT!!!
  Just what i needed Wink
    Thanks guys.
Kharsim
Kharsim
In pursuit of a dream..

I recall doing extreme programming (at Uni) when it was the buzz! but I never really adopted it much, although somewhat useful it was limiting in many ways..

 

I definitely agree though, that knowing the right person/community or in my case making use of the vast developer communities on the internet, seem to provide excellent resources for knowledge sharing, making the learning experiences so much better.
Obviously this guy has never heard of Reflector before Smiley. Too bad for him.

I have to agree with Ward's assessment of the relative importance of language and API.

Suppose you are a taxi driver.  (stay with me here).
Knowing a language is like knowing how to drive.
Knowing an API is like knowing the roads.
Taxi drivers are worthless if they don't know their way around. 
To make the problem worse, in programming, you have millions of people laying new roads daily.
Quick adaptation is a good skill.

clint_hill
clint_hill
C-x,C-f
I like Wards description of those that are most productive are the ones that "throw" themselves at an API. Now, I certainly do that. I didn't used to. I used to beleive that it wasn't very important to know all of the tools around me. I thought, once I finished a task I was done and move on to the next. Ward also hit on another topic that I beleive seperates the men/women from the boys/girls and that is the amount of environment a programmer allows into his/her work. This couldn't be more true with my work. 7 years ago when I started, I worked best in my room all by myself. I thought this was the "only way to do it". Now it couldn't be further from the truth. I often have sat myself in front of end users and watched them shuffle folders in front of themselves just to see what they do with the "objects". Great interview conversation. 
Kharsim
Kharsim
In pursuit of a dream..

Reflector is a nifty product and the IDE’s today are getting much better at assisting in the development of code and removing errors..

 

Although I see your point of view in regards to Reflector, as im rather stubborn/confident myself and regularly go class browsing for answers.. though I have to admit that’s sometimes (based on the problem) its not normally the fastest, most effective way of getting things done. I think what Ward was trying to get across, is that the experiences of others really helps and changes the way we program and go about learning new things..

Here is my recommendation.  It's how I learned, so it must be right.

1.  Learn assembly. 
2.  Know the machine and how it makes things happen.
3.  Become frustrated and learn procedural programming.
4.  Learn about algorithms and data structures.
5.  Become frustrated and learn object oriented programming.
6.  Learn about design patterns.

Most of all, be curious and completely fearless.
Lwatson
Lwatson
One ugly mug...

What I think Ward is saying appears to be a kind of Mentoring, the way most skills have been learned through the ages. (At the knee of the master). Only now the master may actually be a body of masters and they may be scattered to the winds across the globe. They may be living and talking via email/Blogs/IM/White Papers/Books or dead and talking through their writings.

I do not agree with the notion that simply browsing the class with tools like reflector will answer every question or provide that glimmer of understanding that sets the avalanche in motion. SOmetimes you just don't have enough information/Metadata in those things. Where as a real persons works and conversation can be so much more expressive. Eventually that new programmer gains the kind of understandings where they may be able to interpret these cryptic help messages, but initially they are far from useful.

Of course one would argue that is a person is unable to decipher a typical block of reflected metadata then that person should not be there in the first place. All things have to start someplace, todays software development paradigms often have you starting with an environment where the Reflected metadata is your first line of help.

Take a person who is generally internet savvy. They want to learn JAVA for example. They Google a bit and stumble onto the Eclipse development env. They download the thing and extract it and install it. (Not sure but I think the extract and install are simultaneous). So now they have this thing on their machine. They run the IDE and get a screen very simillar to VS.NET. They google around a bit more for some simple code examples to examine and play with. Immeadately they develop questions about things in Java that a more classicly trained person whould have developed and understanding of before they reached this point. (Whats a LONG?, What are all these boxed popping up as I type?, Why wont this thing run?, Whats a Compile). Remember all this is very new to the person. (Be they young or older). Having someone available in person or via proxy for some of this can make a diffrence in that beginning time for a person just starting out.

In a way the wide availability of tools and techniques today exasperates the new person by inundating them with choices that they are ill equipped to make. Having someone to guide during these tenuitive first steps can be invaluable.

...and to build on what LWatson said, not only are the programming environments overwhelming at times to a newcomer, but it doesn't help that there so many propietary battles involved (Java vs. C#, Linux vs. Windows).  Don't get me wrong, healthy competition can be good, but it can be very disorientating without mentoring/guidance at first.  The trick is to start somewhere, learn the limitations of that system/language, and then build skills off of that.  The real payoff comes in when you learn a second language, or a third, or fourth, because then you start to see how the pieces all fit together and what not to reinvent. 

For self-taught programmers, I think the internet/WWW is wonderful, because there is so much information available about programming/operating systems/etc.  It certainly beats the days of walking into the library (or bookstores, even), not finding many (or any books) on what you really want, and walking away somewhat frustrated.  Libraries, too, though, are getting much better about this...for instance my local county library has a fabulous set of resources available.  Not only do they have a computer lab with scanners and plenty of productivity software, but you can also go online from home, reserve books, and then pick them up when they come in.  It is very easy to zip over to Amazon, check into a few books, then go back to the library home page and reserve them.  And of course they can pull books from anywhere in the county library system (so many of them are not on the shelves when you walk through the aisles).

Again, though, having someone there in person during "the early days" can make a world of difference as to whether that newcomer sticks with it or not.  It's too easy now to get lost in a sea of code libraries and give up.
Microsoft Communities