“What do you mean you’re ‘teaching him to read by having him read’?!?”
At the time, Jeremy was just learning to read and was having a little trouble. He was working hard, but they were not teaching him any sub-lexical (phonemes or letter sounds) reading skills. So the whole family worked together on letter and letter group sounds. In the process, we all became better readers. Our school system (Bellevue, WA) was a big believer in the “Whole Language” learning methodology. That process, my reading on holism and my observations on the kids education lead me to a great interest in learning and cognition that has literally survived decades.
As someone that also LOVEs technology, I find myself (like many folks that MSDN serves), in a constant pattern of learning something new. Learning is intrinsically exciting, but so is using that learning and applying it to some immediate work. Unlike learning in school, learning on the job rarely has a beginning, a middle and an end. Frequently we’ve tasked ourselves, or our teams have tasked us with learning a technique or a technology to solve a product problem. We search the web, find the middle of the topic and spend a great deal of time trying to infer context – or at least a place to start. Other times we learn how to do a single task – which may be expedient in completing a work assignment, but it does not teach one to fish.
For the sake of brevity, I’ll avoid a discussion of the psychological motivations so that we can focus on the developer learning process itself. However, I would like to look who the developer audience is, at how developers learn and talk a bit about how to help them maximize their productivity on a new platform.
Who are developers?
Depending on who you listen to, there are somewhere between 9 and 13 million developers worldwide (According to publicly available information – IDC’s official numbers are confidential). Some sources estimate that there are as many as 130-150 million non professional developers.
Some significant portion of these developers of these developers, software engineers, testers, operations engineers, have a highly technical four year college degree (IDC’s official numbers cost you money to look at). Certainly there is a portion of this population that comes to software from other disciplines – be these folks are also (for the most part) traditionally trained in a college or university. Yes, there are some individuals with software in their blood that trained themselves after they learned to walk – but there are in the minority.
Most developers are traditionally trained in at least community college (US 39-40% US graduation rate and 56% Canadian graduation rate).
Increased access and the increasing integration of software development into primary and secondary curriculum create improved access to software development technology as a tool for use in the primary role (e.g. finance – scripts in excel, macros in word and statistical analysis software). Note that folks in these categories do not see software development as their primary career – but rather as a tool to complete their primary job role.
Depending on your sources, the compound annual growth rate can be significant in the sheer number of people that it touches because the base of at least 100 million is so much larger (at least a factor of 10) than the professional developer space.
Most non pro developer have no computer science training.
Ignoring Maslow’s hierarchy of needs for a moment, there are many surface level stimuli for learning to code. For some, software and technology is a calling. For others, it is a necessary evil that is part of accomplishing their finance job in excel. For still others it is money. For many years early in the software business, people hoped to strike it medium. Making a few thousand or tens of thousands of dollars off of an application or even larger off a set of applications inspired many people to build applications in the early Windows days. In the early VB days developers were writing controls to support their hobbies and to strike it rich. In each of those markets, the easy part was writing the application – getting your application to market and collecting money for each unit was the hard part.
In the late 2000s getting your phone application to market and collecting money for it are easy. According to one source, 1 billion dollars was made in the iPhone market 2010 with 300,000 applications (@ $300 income per app). So now the big impediment for software writers is learning the technology and writing an application that is compelling to a broad set of consumers. Now we see a collection of corporations, garage companies and individual writing applications – and there is a mixture of pros and non pros behind all of it. The allure of striking it reach looms large in people’s minds – especially in this economy. Despite the poverty of Apple’s development tools, they have been able to attract all manor of developer because of money.
How do developers they learn?
From my interaction and research, it appears as though there are a couple of different learning styles among this diverse community.
- Structured – the participant learns from a curriculum, much as one would from a school or university.
- In-situ or experimental – the participant learns by experimenting with samples and learns one task at a time. Over time, they infer concepts and gain context.
learning style preferences
Currently I do not have definitive statistics for the preferred learning style in each group. However, it seems the the non-pro developers do prefer to learn experimentally. Even professionally trained developers do seem to enjoy experimental learning, they do prefer to start off with a clear understanding of the context and concepts for anything that they are learning. Pro developers feel like they can transfer much of their existing experience once they understand the core concepts.
Experiment learning is great for folks that like to back into (infer) concepts. Just looking at the code to see how it does something simple is an example of experimental learning. This is a great way to learn how to use a simple API use patterns. Running sample code in your favorite debugger, while reading the tutorial, walkthrough or video is great for more complex algorithms or API calls. The ability to inspect variables accelerates comprehension.
Pros and NonPros completely unfamiliar with an area seem to like to start with at least one book and a blog. The book is usually their source for context and vocabulary development. The blog is serves as a good friend that tells them about the latest in the topic area. Together, the blog and the book provide newbs enough confidence and information to start learning experimentally.
Pros and contextualized NonPros lean on references and samples to complete common tasks. I’ll have another post about how developers search and refine the information that they are looking for.
ideal end state
For business success sake, it is important to remember the ultimate goals in developer learning.
- Joy of learning – yes, for some folks, there is the ultimate joy of learning. However most people (even developers) do need to earn a living. Therefor one goal is to quickly learn the new APIs, platform or language so that you can use it in your job or to build a product to make money. Whether making money or not, there is an attention arc that one needs to be cognizant of. So whether you are learning for fun or money – speed and retention are important.
- For Work – my boss told me to, the team picked this API or some external force has directed you to learn something new. If you’re in a reluctant learning mode, you just want it to be over as quickly as possible. Anything that introduces friction, or is unclear is just going to piss the learner off even more.One subtle thing that can change people’s perspective in this reluctant learner mode is fun. Pete Brown made learning some of the technologies fun on the MSDN Home and Hubs by making the project a twitter client. Even though learning the technology (in this case Silverlight) may have not intrinsically been fun – learning to build a twitter client was. Many people who used the sample and watched the video said something to the effect of “I may not use Silverlight for work, but I had some much fun building the sample that I will play with it on my own”. So learning something that you don’t want to learn makes speed, friction free and potentially fun important metrics
- For my own business – entrepreneurial developers realize that changes in platforms create opportunity. While the excitement of creating something on your own that can make you “big money” may be the primary motivator, one cannot underestimate the important of the technical enjoyment in this process. Joy and Speed are important metrics in this scenario.
Business or Platform Owner
- Rapid Onboarding – Onboarding refers to the beginning of the learning process. At the end of which, the learner feels comfortable enough with the technology and confident enough with their skills to engage further with the technology. Suitability, Speed and Confidence are important metrics for business owners in this scenario.
- Clear Continuation Path – At the end of onboarding, the developer has to have a clear path to learning the rest of the technology – or at least clear resources to continue learning. To the level that you clearly identify the learning path or curriculum you will instill confidence in the developer in the technology and in your support of them. Clear path to completion and reliability are important metrics.
Curating the Web
Part of the challenge in learning from the web (irrespective of your learning style) is that you start your learning process with a list of links. Unless you start your search with “begin learning” and then append the technology you are looking for, you start off with a random web page that most likely is not the best starting point for learning. The problem with the web is that there is great information out there, however it is not ordered or verified.
Imagine if someone could organize or curate the best of the web into a sequential list of materials on the topics that you cared about. What if they and the community kept that list up to date, made it easy to search and included the best material from all across the web? What if they curated the web for the topics you were interested in?
curation (plural curations)
Feedback clearly favors MSDN (or any org responsible for developer education) curating a set of content that includes their own and the communities in a single sequentially organized, yet randomly accessible corpus. However web site platforms (i.e. CMSes) do not come off the shelf with the notion of organization resources not stored within the CMS – in fact that is counter to the architecture of most of the systems out there. Most systems today allow you to take sub sections of the page and replace them with values retrieved from the CMS’s store or an associated database. What we needed was something that allowed us to organize what Scott Hanselman called “Playlists” of developer training from across the web. That was the idea that spawned the notion of creating an improved platform upon which we could build development centers.
In support of my Microsoft brethren, it seemed only proper that we would use a CMS that ran on Windows and used .NET. There were many choices out there. However, the Umbraco team was open source, had a strong community and provided wonderful declarative facilities for transforming data coming out of their store. We spoke with Alex Norcliffe and other folks that had done implementations on Umbraco, we experimented with the scalability of Umbraco, we measured server transaction throughput at load, we measured page weight of pages created in Umbraco, we even created a completely low fidelity copy of the ASP.NET site in Umbraco. We moved pieces of ASP.NET to Umbraco, but our pace of release and resources never permitted us to re-architect the site in way that really leveraged the features of Umbraco or even let non devs author on the site.
Then we pitched doing the re-architecture work to an MS executive and a re-design to show off many of the new features. The goals were to
- Getting started – make the onboarding experience as fast and friction free as possible
- Support key learning styles – make it easy to integrate materials into curriculum from a variety of format to support a diverse set of learning styles and media (e.g. articles, books, samples or videos)
- Integrate the community – Microsoft cannot make everything and the community makes great materials in support of our products, so better integrate the community across the site
- Discoverability – make the right content more easily discoverable
- Curriculum Consumption – create a system that allowed us to create curriculum consumable sequentially or randomly depending
- Curriculum Creation – creating curriculum entries from across the web should be easy and not require knowledge of the CMS or HTML.
- Simplified content creation – to keep the articles on the site as fresh as possible make it easy for folks to publish using their favorite tool (e.g. Livewriter).
Within 9 weeks we had a system that accomplished all of these goals, integrated our existing forums solution and migrated some portion of the the Silverlight.net client to create beta.silverlight.net
The next post will be a tour of the inside and outside of Silverlight site.