Entries:
Comments:
Posts:

Loading User Information from Channel 9

Something went wrong getting user information from Channel 9

Latest Achievement:

Loading User Information from MSDN

Something went wrong getting user information from MSDN

Visual Studio Achievements

Latest Achievement:

Loading Visual Studio Achievements

Something went wrong getting the Visual Studio Achievements

Ward Cunningham - What would you teach a kid about the world of programming?

Download

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?

Tag:

Follow the Discussion

  • Stevan VeselinovicSteve411 Me, all suited up!
    EXCELENT!!!
      Just what i needed Wink
        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.
  • 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_hillclint_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. 
  • 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.
  • LwatsonLwatson 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.
  • jsrfc58 wrote:
    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.
    In general, I agree that having access to the information is a good thing.  However, I wonder if it may cause a person to not fully realize his/her potential.  If you can easily look up the "correct" answer to a problem, then you aren't forced to think of new/better answers.

    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.
  • LwatsonLwatson One ugly mug...
    sparky wrote:

       In general, I agree that having access to the information is a good thing.  However, I wonder if it may cause a person to not fully realize his/her potential.  If you can easily look up the "correct" answer to a problem, then you aren't forced to think of new/better 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. 
  • Lwatson wrote:
    ... 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. 
    Right, so as you start out, you have to make certain assumptions.  Your mentor tells you how a thing works, and you assume that his answer/reasoning is correct.  No problem, you can go back later, once you have your feet firmly on the ground, and make sure you have a deep understanding.  The problem with that, is you may from intermediate assumptions based on your incomplete understanding of some concept, forget to add those to your "list of things to understand better", or maybe forget to add the original assumptions to that list.  Your mentor may have also had an incomplete understanding.

    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.

    Lwatson wrote:
    In the very beginning its difficult to be able to descern a better way of achieving X result.
    This could be a clue that you are starting on things that are too big.
  • LwatsonLwatson One ugly mug...
    sparky wrote:
    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.
  • Lwatson wrote:

    I have always felt that unless you are tackling something just outside of your comfort zone one learns nothing.


    Words of wisdom that!

    /Lars.
  • LWatson...I agree...and although there is a lot of information available on the internet, it does not always mean it is valuable and/or good information.  Maybe a lot of it comes down to a sense of curiousity more than anything else...whether that trait can be taught is debatable.  Also, just because someone hands you a convenient answer does not imply it is always the best answer.  It is difficult at times (for me) to just accept an answer and not understand why that method was chosen, or how it works internally.  And "tackling something outside your comfort zone" does teach you quite a bit, even if there are false starts along the way.  The key is to take that newly won knowledge and build off of it. 
  • Lwatson wrote:
    I have always felt that unless you are tackling something just outside of your comfort zone one learns nothing.
    This is a universally accepted truth, and it is completely congruent with my statements.  It is a concept laid out in Mihaly Csikszentmihalyi's writings on Flow, and is embodied in XP's spike solution.  I am an advocate of both of those schools of thought.
    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.  Smiley
  • LwatsonLwatson One ugly mug...

    jsrfc58

    I agree completely

    Sparky

    I see that I perhaps read your sentiment to literally...

  • Ward assumes that everyone is using APIs. I'm sure there must be people who are programming a bit more standalone - aren't there?

    All I do these days is VBA in Excel, so I'm not one of them.
  • ...and the funny thing is that most Software development environments have become some of the most complicated tools available to the general public (as compared, say, to basic woodworking).  I also hate the phrase "toy programs" because it is belittling to a person just starting out in the field.  EVerybody starts somewhere.  Hopefully the "Visual Express" programs this site is pushing will help somebody ease into programming, although I have not evaluated them yet myself.

    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

Comments Closed

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.