Ward Cunningham - What would you teach a kid about the world of programming?
- Posted: May 20, 2004 at 11:15 AM
- 16,972 Views
- 19 Comments
Loading User Information from Channel 9
Something went wrong getting user information from Channel 9
Loading User Information from MSDN
Something went wrong getting user information from MSDN
Loading Visual Studio Achievements
Something went wrong getting the Visual Studio Achievements
Right click “Save as…”
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?
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation,
please create a new thread in our Forums,
or
Contact Us and let us know.
Follow the Discussion
Oops, something didn't work.
What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in. You need to be signed in to Channel 9 to use this feature.What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in and view them all on your notifications page.sign up for email notifications?
Just what i needed
Thanks guys.
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.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.
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..
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.
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.
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.
I think it also contributes to the growing population of programmers who have a "good enough" knowledge of things. Not everyone can or should be an expert on everything, but I think this trend commoditizes programming. It could be argued that the time has come for most programming to be commoditized.
I'm rambling.. main point is: getting a quick explanation from another individual doesn't give you a deep understanding. If a deep understanding is needed for the work you do, then you'll have to make up your own answers.
I do think that this ease of getting the answer without a forced understanding of why that answer works or is even the accepted correct answer has lead to the perception by the folks 'In the know' that there are those programmers that are compitent and those that are 'HACKS'.
In the very beginning its difficult to be able to descern a better way of achieving X result. As time progresses, a person who is self taught in a vacuum can gain the understanding of the small set of 'Right Ways' vs the huge set of 'Wrong Ways' but a mentor can shorten that cycle. I am not talking about a person who simply says 'No do it this way...'. I am talking about a person who becomes a sounding board for ideas and takes the time to explain why approach X is better than the others. True communications between the mentor(s) and the student(s) provide not just answers but understandings.
Don't get me wrong - I'm not trying to argue that we all need complete understandings, or that solo learning is the path to enlightenment, etc. We can't all be ground-breakers - most of those among us don't even want to be. I think at a minimum, we all need to be aware which of our 'known facts' about programming are really assumptions in disguise. If the mentor communicates that information, or the (mentee?) takes everything as an assumption, then I don't have a big issue with it.
This could be a clue that you are starting on things that are too big.
I have always felt that unless you are tackling something just outside of your comfort zone one learns nothing.
The only thing John Q Coder learns from working on his/her 5'th mailing address entry screen is that coding can be a mind numbing endeavor.
IMO the only way to advance ones understanding is to tackle items that ARE to big and to fing your way through them. Even if it means tossing the results when its finished and starting again with the lens of experiance assisting your vision.
Words of wisdom that!
/Lars.
Unless you are born omniscient (I wasn't one of the lucky few), then this is a part of everyday life. I'll elaborate on my point: if you find yourself completely stumped, then you may need to back off some.
jsrfc58
I agree completely
Sparky
I see that I perhaps read your sentiment to literally...
All I do these days is VBA in Excel, so I'm not one of them.
I think a language for beginners should be easy to pick up at first, until you learn the finer points of the syntax and the inherent limitations of the language. Then, if the beginner stays interested they will naturally move on to more difficult languages such as C/C++/c# or maybe even assembly (still my favorite!). The point is, don't make it insanely difficult for a kid to make a basic game like a Breakout clone or make them feel like they have to memorize a pile of library functions to get anything useful done. I always found it funny how so many books comment how C has so few 'keywords'--sure, until you realize that the functionality was shifted over to libraries. I'm not saying that the libraries should be dumbed down in any way because that would be a mistake, too. Perhaps this is why web page building became so popular...because it tapped into that "instant response" euphoria some people get from seeing a complicated machine print their name or put a picture on the screen. That feedback fires an imagination.
Remove this comment
Remove this thread
close