Samuel Druker - What's the current state of WinFS on the recently released build of…
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?
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..
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.
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.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.
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.
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.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.
This could be a clue that you are starting on things that are too big.Lwatson wrote:In the very beginning its difficult to be able to descern a better way of achieving X result.
sparky wrote:This could be a clue that you are starting on things that are too big.
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.Lwatson wrote:I have always felt that unless you are tackling something just outside of your comfort zone one learns nothing.
jsrfc58
I agree completely
Sparky
I see that I perhaps read your sentiment to literally...