I still like using Twitter. Though I have often complained about their shitty API, I still have respect for the product and the company.
How (And Why) I’m Circumventing Twitter’s API Instead of Using It
I still like using Twitter. Though I have often complained about their shitty API, I still have respect for the product and the company.
How (And Why) I’m Circumventing Twitter’s API Instead of Using It
Windows Azure’s compute platform, which includes Web Roles, Worker Roles, and Virtual Machines, is based on machine virtualization. It’s the deep access to the underlying operating system that makes Windows Azure’s Platform-as-a-Service (PaaS) uniquely…(read more)
With IE10 in Windows 8, we reimagined the browser. we designed and built IE10 to be the best way to experience the full Web on Windows. Consumers can now enjoy more touch-friendly, fast and fluid Web applications with the updated IE10 engine included in the Windows Release Preview. this sixth Platform Preview of IE10 delivers improved performance and support for touch-first HTML5, as well as a new power-optimized, touch-friendly Adobe Flash Player that enables content on compatible Web sites to play in the Metro style Web browser. IE10 also sends the “Do Not Track” signal to Web sites by default to help consumers protect their privacy.
this video shows some of the performance and touch improvements in the sixth IE10 Platform Preview, part of the Windows Release Preview.
(This video is also available on Channel 9)
You can read more about the improvements to the Metro style browsing experience on the Building Windows 8 blog. the remainder of this post discusses the underlying HTML5 engine.
Windows 8 includes one HTML5 browsing engine that powers both browsing experiences (the Metro style one and desktop one) as well as Metro style applications that use HTML5 and JavaScript. the common HTML5 engine provides consistently fast, safe, and powerful support for Web standards and the Web programming model, for both browser experiences as well as for Metro style applications.
Consumers experience this power with responsive, touch-friendly pages that safely take full advantage of the underlying hardware. some examples that you can try at the IE Test Drive site with the Consumer Preview include the Chalkboard Benchmark for common touch actions like panning and zooming and a multi-touch capable Web page for manipulating photos and images. You can read the full list in the IE10 developer guide.
Touch-friendly Adobe Flash in Metro style Internet Explorer 10
The Windows 8 Release Preview includes a new power-optimized, touch-friendly Adobe Flash Player. Adobe Flash content on compatible Web sites will now play in Metro style IE10. Metro style IE10 with Flash on Windows 8 enables people to see more of the Web working with high quality, especially compared with the experience in other touch-first or tablet experiences.
We believe that having more sites “just work” in the Metro style browser improves the experience for consumers and businesses alike. as a practical matter, the primary device you walk around with should play the Web content on sites you rely on. Otherwise, the device is just a companion to a PC. Because some popular Web sites require Adobe Flash and do not offer HTML5 alternatives, Adobe and Microsoft worked together closely to deliver a Flash Player suitable for the Metro style experience.
Both IE10 on the Windows desktop and Metro style IE use the same integrated Flash Player, with no need to download or install an additional player. IE10 on the desktop provides the same full Flash support as previous versions of IE that relied on the Flash Player plug-in, and continues to support other plug-ins. the Metro style browser continues to provide no support for other separate ActiveX controls or plug-ins.
While any site can play Flash content in IE10 on the Windows desktop, only sites that are on the Compatibility View (CV) list can play Flash content within Metro style IE. we place sites with Flash content on the CV list if doing so delivers the best user experience in Metro style IE with those sites. for example, how responsive is the content to touch? does it work well with the onscreen keyboard, or affect battery life? Do visual prompts comply with the Metro style user experience guidelines? Sites that rely on capabilities (e.g. rollovers and P2P functionality) that are not supported within the Metro style experience, and don’t degrade gracefully in their absence, are better off running in IE with Flash on the desktop. Site developers continue to control the content they serve to browsers. Developers can send HTML5 content to Metro style IE, or express their preference that Metro style IE prompt users to run their site on the desktop (see details here).
A good Flash Player experience is part of a no compromise experience across all form factors of PCs, including touch-centric PCs running Windows 8. We’ve heard feedback from customers about their experience with sites that do not offer an HTML5 experience. for example, try pbskids.org on an iPad. some workforce solutions, like Beeline, require Flash. some financial management sites, like this one, require Flash. And some sites still deliver their best experience with Flash, such as youtube.com.
Adobe and Microsoft added support for touch gestures – like double tap and pinch to zoom – that work consistently across HTML5 and Flash. Adobe and Microsoft worked together to disable the desktop Flash functionality that is incompatible with touch, such as rollovers, within the Metro style experience. much of Flash’s other functionality works well with touch.
Together we have also improved battery life with better support for PLM in the Metro style experience. Flash on Windows has already supported offloading potentially battery-draining video work to specialized video hardware for some time (link). this work improves responsiveness and performance as well.
Adobe and Microsoft have worked closely together for some time to address security and reliability issues (for example here, and here), sharing best practices like the SDL/SPLC and ASLR as well as information on hangs and crashes. by updating Flash through Windows Update, like IE, we make security more convenient for customers. Microsoft and Adobe remain committed to meeting the expectations of Windows customers with regard to the delivery of security updates. we are also working together on accessibility, manageability, and privacy.
The Flash Player included with Windows 8 is based on the full PC implementation and not a limited mobile subset, and there’s a clear path to make it available on the new chip architectures that Windows 8 supports. Adobe is committed to delivering this same Flash Player support for Metro style IE on both x86/64 and the initial delivery of Windows RT PCs (Windows running on ARM processors).
For the development community, platform continuity and technology choice are important. Flash in Metro style IE10 provides a bridge for existing sites to transition to HTML5 technologies where it makes sense and at a pace that is right for the experiences they want to deliver to their customers. HTML5 does not currently support, for example, some premium video content and game scenarios.
We will provide additional technical information in the coming weeks through the regular documentation channels, like MSDN and Adobe Developer Connection. These details will include how developers can test Flash content on their own sites in Metro style IE, and how to submit their sites for consideration for the CV list. this documentation will also include a best practices guide to help developers, designers, and content publishers create experiences with Flash that plays well on Metro style IE. These best practices will complement existing recommendations on authoring touch-friendly HTML5 sites.
“Do Not Track” on by Default in IE in Windows 8
In Windows 8, IE10 sends a “Do Not Track” signal to Web sites by default. Consumers can change this default setting if they choose. this decision reflects our commitment to providing Windows customers an experience that is “private by default” in an era when so much user data is collected online. IE10 is the first browser to send a “Do Not Track” (DNT) signal by default.
You can read more about other actions underway with DNT here.
Vendor prefixes, and moving the Web forward from experimental to stable
With the Release Preview of Windows 8, IE10 adds support for non-vendor prefixed versions of standards that have reached Candidate Recommendation (CR) status since the Windows 8 Consumer Preview or should reach CR in 2012.
With this change, IE10 makes it easier for Web developers to write markup that works consistently across different browsers. Specifically, IE10 now supports the following W3C draft standards in their unprefixed form starting with the Release Preview: CSS transitions, transforms, animations, gradients, and CSS Fonts’ font-feature-settings property, as well as platform APIs such as the Indexed Database API (IndexedDB) and requestAnimationFrame().
We selected these standards after examining all the W3C draft standards IE10 supports and looking for standards that are stable (having no significant renaming or removal of properties/values expected), supported and interoperable across at least two browsers other than IE10 for the features’ core use cases, and already in use on the Web, including in their unprefixed form.
Browser vendors generally drop the vendor prefix once a specification reaches CR. for compatibility with sites and apps developed using the Windows 8 Consumer Preview and that rely on the Microsoft vendor prefix, IE10 continues to support the -ms- vendor-prefixed forms as well. Note that IE10 continues to support only the vendor-prefixed form of several other standards because these specifications are not yet sufficiently stable and interoperable, for example CSS Flexible Box Layout.
As a best practice, developers typically add an unprefixed version of a property to “future-proof” their pages. the following set of declarations is now ready for future browsers that support unprefixed CSS Transforms:
-webkit-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-ms-transform: rotate(30deg);
-o-transform: rotate(30deg);
transform: rotate(30deg);
Other Key Platform Changes
In the Release Preview, we continue to improve performance. Web pages should just “stick to your finger” and remain fast and fluid while panning, zooming, and scaling content. the Chalkboard Benchmark shows the results of some of our performance work. it measures how efficiently a browser can perform these common touch actions by zooming in and out of a “chalkboard” while panning left, right, up, and then down. IE10’s performance here is a great example of Internet Explorer’s hardware acceleration in action.
Performance improvements contribute to great touch support, for example with full independent composition of Web page contents (fixed elements, subscrollers, animations, and video). We’ve also improved performance on low-end hardware; intensive sites now show much less flashing and flickering on low-end hardware. These improvements make IE10’s support for full screen video playback (in both HTML5 video and Adobe Flash Player) even better.
We’ve continued to improve the performance of the Chakra JavaScript engine. JavaScript intensive Web applications, like HTML5 games, will benefit from dynamic profile-based JIT, type-specialized code generation for floating point numbers, expansion of function inlining, and further tuning to reduce the idle memory footprint while reducing the observable pauses due to garbage collection.
We’ve also improved standards support in a number of ways. IE10 now has support for IVS/Emoji characters and the classList API and new reverse and alternate-reverse values of the animation-direction CSS property. DOM exceptions match the W3C WebIDL spec, and developers can use a constructor to create Blob objects, matching the W3C spec. We’ve also removed legacy DX filters from all modes.
HTML5 applications and sites can do more with touch via the MSGesture APIs that provide instantiable gesture event handling.
A better Web Today, and Ahead
The opportunities continue for HTML5 to make both Web sites and applications better. Those opportunities are exciting for everyone on the Web.
To get to that Web sooner, we continue to recommend that developers update old and out of date patterns on their sites. Looking at the CV list you can find examples of sites that need shimming because they use out of date libraries (e.g. here) or rely on browser detection rather than feature detection. the compatibility problem reports we receive have more to do with sites detecting IE and sending it different content than they send other browsers than any particular issue in IE. Developers can find sample feature detection code patterns in several IE blog posts, including this one.
The quality and correctness of different browsers’ HTML5 engines continue to vary widely. we will submit updates to test cases to the W3C for all the features that IE10 now supports without a prefix. as members and co-editors of the CSS Working Group, we will work with our colleagues to move these specifications forward to Candidate Recommendation. we continue to contribute to the test suites under development at the HTML5 standards bodies to further the goal of interoperability and same markup. We’ve submitted and updated over 240 tests to them that you can view at the IE Test Center as well. as different browsers improve their support of the same markup to produce the same results, we can all realize the promise of HTML5.
You can find a full list of new functionality available to developers in the IE10 developer guide here. Download the Windows 8 Release Preview to try this update to IE10. we look forward to continued engagement with the developer community and your feedback on Connect.
—Dean Hachamovitch, Corporate Vice President, Internet Explorer
IE10 in Windows 8 Release Preview adds support for a Blob constructor. We earlier wrote about and demonstrated IE10’s support for a BlobBuilder interface, an in-progress interface in the File API: Writer W3C Working Draft. this interface enables developers to work with files on the client PC. Recently, the W3C working group deprecated the BlobBuilder interface in favor of a new Blob constructor. this post explains the differences between the two.
Comparing Blob Constructor and BlobBuilder Interface
Both the Blob constructor and the BlobBuilder interface enable Web developers to create files on the client. The difference is in the syntax. Whereas BlobBuilder requires each portion of the blob to be appended during a separate call to the append method, the Blob constructor can take an array of arguments. Here’s how to create a simple text file using both BlobBuilder and the Blob constructor:
// using the Blob constructor
var textBlob1 = new Blob(["Hello", " world!"], { type: “text/plain”, endings: “transparent” });
// using the MSBlobBuilder interface
var bb = new MSBlobBuilder();
bb.append(” world!”);
var textBlob2 = bb.getBlob(“text/plain”);
The Blob constructor takes two arguments, the array of content to put into the blob and an optional dictionary object which can include two members, type and endings. The array of content for the blob may contain blob objects, text strings or array buffers.
Recent versions of Firefox and Chrome also support the Blob constructor. IE10 still supports the prefixed MSBlobBuilder interface in addition to the new Blob constructor. at this time, Firefox and Chrome also support their vendor-prefixed BlobBuilder interface.
Feature Detecting the Blob Constructor
As with all new features, we recommend using feature detection to determine if the Blob constructor is available in the browser your code is running on. you can use something like this:
if (typeof Blob !== “undefined”) {
// use the Blob constructor
} else if (window.MSBlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder) {
// use the supported vendor-prefixed BlobBuilder
// neither Blob constructor nor BlobBuilder is supported
If you run the BlobBuilder Test Drive demo with the F12 developer tools console window open, it will log whether the blobs are being built via the Blob constructor or via BlobBuilder.
The addition of the Blob constructor to IE10 enables you to write standards-compliant code that works across browsers.
—Sharon Newman, Program Manager, Internet Explorer
Hello; I’m James McNellis, and I’ve recently joined the Visual C++ team as a libraries developer. My first encounter with the C++/CX language extensions was early last year, while implementing some code generation features for the Visual Studio 2012 XAML designer. I started off by hunting for some example code, and it suffices to say that I was a bit surprised with what I first saw. My initial reaction was along the lines of:
“What the heck are these hats doing in this C++ code?”
Actually, I was quite worried; because I thought it was C++/CLI—managed code. not that managed code is bad, per se, but I’m a C++ programmer, and I had been promised native code.
Thankfully, my initial impression was uninformed and wrong: while C++/CX is syntactically similar to C++/CLI and thus looks almost the same in many ways, it is semantically quite different. C++/CX code is native code, no CLR required. Programming in C++/CLI can be very challenging, as one must deftly juggle two very different object models at the same time: the C++ object model with its deterministic object lifetimes, and the garbage-collected CLI object model. C++/CX is much simpler to work with, because the Windows Runtime, which is based on COM, maps very well to the C++ programming language.
Windows Runtime defines a relatively simple, low-level Application Binary Interface (ABI), and mandates that components define their types using a common metadata format. C++/CX is not strictly required to write a native Windows Runtime component: it is quite possible to write Windows Runtime components using C++ without using the C++/CX language extensions, and Visual C++ 2012 includes a library, the Windows Runtime C++ Template Library (WRL), to help make this easier. many of the Windows Runtime components that ship as part of Windows (in the Windows namespace) are written using WRL. There’s no magic in C++/CX: it just makes writing Windows Runtime components in C++ much, much simpler and helps to cut the amount of repetitive and verbose code that you would have to write when using a library-based solution like WRL.
The intent of this series of articles is to discuss the Windows Runtime ABI and to explain what really happens under the hood when you use the C++/CX language constructs, by demonstrating equivalent Windows Runtime components written in C++ both with and without C++/CX, and by showing how the C++ compiler actually transforms C++/CX code for compilation.
Recommended Resources
There are already quite a few great sources of information about C++/CX, and I certainly don’t intend for a simple series of blog articles to replace them, so before we begin digging into C++/CX, I wanted to start with a roundup of those resources.
First, if you’re interested in the rationale behind why the C++/CX language extension were developed and how the C++/CLI syntax ended up being selected for reuse, I’d recommend Jim Springfield’s post on this blog from last year, “Inside the C++/CX Design”. also of note is episode 3 of GoingNative, in which Marian Luparu discusses C++/CX.
If you’re new to C++/CX (or Windows Store app and Windows Runtime component development in general), and are looking for an introduction to building software with C++/CX, or if you’re building something using C++/CX and are trying to figure out how to accomplish a particular task, I’d recommend the following resources as starting points:
Visual C++ Language Reference (C++/CX): the language reference includes a lot of useful information, including a C++/CX syntax reference with many short examples demonstrating its use. There’s also a useful walkthrough of how to build a Windows Store app using C++/CX and XAML. if you’re just starting out, this would be a great place to start.
C++ Metro style app samples: Most of the C++ sample applications and components make use of C++/CX and many demonstrate interoperation with XAML.
Component Extensions for Runtime Platforms: This used to be the documentation for C++/CLI, but it has since been updated to include documentation for C++/CX, with comparisons of what each syntactic feature does in each set of language extensions.
Hilo is an example application, written using C++, C++/CX, and XAML, and is a great resource from which to observe good coding practices—both for modern C++ and for mixing ordinary C++ code with C++/CX.
Building Metro style apps with C++ on MSDN Forums is a great place to ask questions if you are stuck.
Tools for Exploration
Often, the best way to learn about how the compiler handles code is to take a look at what the compiler outputs. For C++/CX, there are two outputs that are useful to look at: the metadata for the component, and the generated C++ transformation of the C++/CX code.
Metadata: As noted above, Windows Runtime requires each component to include metadata containing information about any public types defined by the component and any public or protected members of those types. This metadata is stored in a Windows Metadata (WinMD) file with a .winmd extension. when you build a Windows Runtime component using C++/CX, the WinMD file is generated by the C++ compiler; when you build a component using C++ (without C++/CX), the WinMD file is generated from IDL. WinMD files use the same metadata format as .NET assemblies.
If you want to know what types have been fabricated by the C++ compiler to support your C++/CX code, or how different C++/CX language constructs appear in metadata, it is useful to start by inspecting the generated WinMD file. because WinMD files use the .NET metadata format, you can use the ildasm tool from the .NET Framework SDK to view the contents of a WinMD file. This tool doesn’t do much interpretation of the data, so it can take some getting used to how it presents data, but it’s very helpful nonetheless.
Generated Code: when compiling C++/CX code, the Visual C++ compiler transforms most C++/CX constructs into equivalent C++ code. if you’re curious about what a particular snippet of C++/CX code really does, it’s useful to take a look at this transformation.
There is a top-secret compiler option, /d1ZWtokens, which causes the compiler to print the generated C++ code that it generated from your C++/CX source. (Ok, this compiler option isn’t really top secret: Deon Brewis mentioned it in his excellent //BUILD/ 2011 presentation, “Under the covers with C++ for Metro style apps.” However, do note that this option is undocumented, and thus it is unsupported and its behavior may change at any time.)
The output is intended for diagnostic purposes only, so you won’t be able to just copy and paste the output and expect it to be compilable as-is, but it’s good enough to demonstrate how the compiler treats C++/CX code during compilation, and that makes this option invaluable. the output is quite verbose, so it is best to use this option with as small a source file as possible. the output includes any generated headers, including the implicitly included <vccorlib.h>. I find it’s often best to use types and members with distinctive names so you can easily search for the parts that correspond to your code.
There are two other useful compiler options, also mentioned in Deon’s presentation, which can be useful if you want to figure out how class hierarchies and virtual function tables (vtables) are laid out. the first is /d1ReportAllClassLayout, which will cause the compiler to print out the class and vtable layouts for all classes and functions in the translation unit. the other is /d1ReportSingleClassLayoutClyde which will cause the compiler to print out the class and vtable layouts for any class whose name contains “Clyde” (substitute “Clyde” for your own type name). these options are also undocumented and unsupported, and they too should only be used for diagnostic purposes.
Next Up…
In our next article (which will be the first “real” article), we’ll introduce a simple C++/CX class and discuss how it maps to the Windows Runtime ABI.
Sketch is a drawing tool with a twist; it allows you to draw in pseudo 3D. Sketches can be saved by users and viewed in a gallery.the front end is built using the HTML5 canvas element and plenty of JavaScript. Sketches are saved in a MySQL database and PHP is used as a mediator between front end and database.
Sketch : Draw squiggly sketches in 3D with Hmtl5 and JavaScript
Literacy
Imagine a world in which very few people knew how to read or write. You kept to certain parts of town because you couldn’t read a map or a street sign. When you needed to sign a contract, you just asked what it said and had to take it on faith. A lot of your experience was based on legend and rumor. Books, and the information in them, were mystical. Sometimes you suspected they were being used against you, but you never really knew.
There was definitely plenty of work around, but some high end jobs weren’t remotely possible – not just clerical work, but professions that required a lot of information management, like the medical and legal professions.
Please don’t tell me not to learn to code
Over this past year, there have been commentary back and forth on whether everyone should learn to code. A few free, interactive sites like Codecademy popped up which made it easy to start learning some basic coding. I was a big fan – I helped my eleven year old daughter go through it, and we both agreed it was great. More on that later.
Then Codecademy launched Code Year – a grand plan to teach hundreds of thousands of people to code. It was a big hit – even NYC’s mayor signed up.
But no good deed goes unpunished, and there’s been some snarky criticism from – you guessed it – professional coders. The latest if Jeff Atwood’s post, Please Don’t Learn To Code.
Hogwash. Learning some basic coding is an excellent investment of anyone’s time.
Easy on the Straw Men
It’s "please don’t hear what I’m not saying" time.
I don’t think that the general populace needs to be proficient at writing code. It would be silly to argue Mayor Bloomberg shouldn’t be slinging Javascript on the job (as Jeff does). That’s not at all the goal. Nobody’s saying that everyone should become a programmer.
What I – and others – are saying is that learning some basic coding skills is an excellent investment of anyone’s time. I’ll make two arguments:
Computer Literacy as a Basic Life Skill – Right Now
Right now, pretty much every part of life is in some way affected by computers – most pretty heavily. Shopping, socializing, medicine, education, law, entertainment and more are all at the very least affected by computers and the internet. My three daughters had a use for basic computer skills long before math would do them any good.
This only gets more intense with increasing age. Teenagers can greatly profit from computer expertise and tech savvy. It’s hard to imagine a college program (at least one with any practical application) that didn’t involve a hefty amount of computer usage – from basic internet research and word processing on up to simulation and research.
Most careers (in the industrial world) involve some amount of information management, and workers in these professions who have some computer skill can often be a lot more effective. That includes areas where even a decade ago people might not have expected to see computers – agriculture, construction, family-run restaurants.
I’ve talked with countless "civilians" who have profited from computer skills over the years – a real estate appraiser who figured out how to automate using Excel and worked circles around his colleagues, film makers and musicians who figured out how to record, market and distribute on the internet, non-techies who sell things online, a school facilities manager who figured out how to cut costs significantly using computer security and automation.
And many of those people had new doors and careers open to them due to their new-found computer skills. When the real estate market slowed down, the appraiser jumped right into a technology job. Heck, learning to code on my own – starting with my grade school’s Apple II – gave me the option to jump into a computer career after I got out of the Navy (in a technical but not computer related field).
Computer Literacy as an Absolute Essential in the very near Future
"The future is already here — it’s just not very evenly distributed."
It should be obvious to anyone paying attention that computers have become a huge part of our daily lives, and that trend is rapidly accelerating.
I’m reading Physics of the Future (Michio Kaku). It’s a fascinating book in which Michio points to obvious trends and extrapolates where things are going in the near future. In many cases, even a very conservative estimate – or even a look around – shows that every part of life will soon involve interacting with computers and the internet. he points out that global powers during World War II would have killed for the computational power in a simple musical birthday card. Now, we just throw them away. Average mobile phones rival supercomputers from the not-too-distant past, and they’re connected to a growing internet and GPS satellites. In the next few decades, computers will continue to shrink and become integrated into everything we interact with.
The quality of our everyday lives will be greatly affected by how we interact with computers. How should that interaction take place?
Magical! or, should We see Computers as Products or Tools?
Technology companies work hard to package technology so that it can be used naturally, so consumers won’t have to think or fiddle with details. This is a good thing. Anyone working in technology should be focused, consumed with the challenge of exposing the possible as the natural. We should be doing this not just because it’s a worthy goal, but because it makes good business sense – friendly products sell.
But it is not in the average consumer’s interest for them to blindly buy into this magical experience.
Think about the historical progress in how informed consumers approach medicine. In ancient times, mystics sold magic and consumers had no real insight into what they were buying. Over the centuries, the public has gained a much more informed view of science and medicine, and this is of huge benefit to them as consumers. We expect to see evidence, we read about product recalls, and the market for doctors who sell amulets and snake oils is pretty small. This applies to other areas of life, as well. While I could get around in a car I thought was powered by tiny horses, I’d be unlikely to make wise decisions regarding the purchase and repairs to said car. An informed approach to modern life helps.
Now think about the consumer approach to computer products.
Think about how computers and technology are shown in movies and TV.
Think about how helpless your relatives and neighbors feel when they’re buying techy products, or when something doesn’t work.
Think about a friend or relative who paid too much for a website that never worked right.
Ah, but you may be thinking about a favorite company who sells you magical products right now, or runs some of your favorite websites, or sells you apps or movies. Well marketed brands that have built reputations for quality and ease of use have helped uninformed consumers navigate the technology landscape, but keep in mind that these companies have divided interests. It’s their job. they want to sell you things, and their stockholders demand that they bring in as much profit as they can from those sales. Mindless and uninformed brand loyalty is not only expensive, it’s by nature counter to your interests. It’s no way to live – and thrive – in a digital world.
Computer Literacy as a Leadership Requirement
The basic level of technical understanding that we expect of our leaders must grow with time in order for them to govern. We expect them to understand our legal system, but we also expect they should know that medicines are chemicals which influence the biological processes in our bodies, that electricity powers lightbulbs and is transmitted over an electrical power grid, that mobile phones have radios in them, etc. I’d be scared to hear that our leadership didn’t have a very basic understanding of our modern world. they write and enforce laws and policies that greatly impact our lives, so they need to have a clue about the world we live in.
In the same way, leaders who see computers as magic boxes, coders as wizards, and computer code as incantations can’t effectively govern. they can’t set policy, they can’t have informed legal opinions, they have no framework for evaluating whether information being fed to them makes any sense (or even knowing if they should ask).
Leadership requires understanding, and more, it requires – well, a sense of direction. The future is going to include more and more technology, and leaders who don’t understand the present or even have a rough idea of the road ahead are a menace.
Computer Literacy as an Educational Oversight
I’ve been describing why non-techies can benefit from some computer literacy. Unfortunately, they won’t get it in from our schools.
Computer literacy is undoubtedly of more use to most people than the foreign languages most high schools require (I want those 4 years I spent on high school French back). I have rich conversations with people worldwide thanks to the internet and automated translations, not any time I’ve spent studying languages.
Though it may offend, computer skills are of more use to the huge majority than mathematics including and beyond first year algebra. most people will rarely if ever use algebra; everyone uses computers.
Consider this: in the off chance that the average farmer / dentist / lawyer / car mechanic / stay at home parent / author / teacher / etc. needs to solve an algebra problem, they can punch it into the search engine and get the answer: 3x + 7y = 4y – 35. or, more likely, just ask their phone.
The same goes for so many things we devote educational time to. does the average high school graduate remember anything important about titration or Augustus or sentence diagram? Titian or Taft? or even remember how WWI started? does it matter when they can just look it up on Wikipedia?
I’m all in favor a balanced education. I got a B.S. Physics (with honors) from Annapolis and went through the US Navy Nuclear Power program (a very rigorous engineering program) following that. My parents were both school teachers. My wife and I homeschool our daughters and put a very high priority on their education. I see education is important, and I think STEM is an important priority.
But in the broader perspective, our educational priorities are often focused on a historical ideal, completely out of touch with a world in which nearly everyone interacts regularly with computers that most people barely understand.
This is a much bigger discussion, but here’s the main takeaway: after thousands of hours in the classroom, our students emerge unempowered into an increasingly digital world. We’re on our own here.
Excess Capacity: oh, the Hours We Throw Away
Fine, most people could benefit from some computer literacy. But who has the time?
I don’t buy it. We as a society throw away countless hours on games, entertainment, and apparently even tracking the adventures of someone called Snooki. We make video mashups and silly tumblogs and meme pictures of cats. We catalog Pokémon. We read books about vampires romancing high school girls. We write long blog posts.
We have the time.
We have a ridiculous amount of leisure time, hours we just throw away because we can’t think of anything better to do.
Basic Coding as a Gateway To Basic Computer Literacy
While it might make sense, I’m not proposing citizens spend a mandatory two years in the "Get Smart About Computers" corps. I’m just proposing that:
Thankfully, getting a basic idea of how computers work has gotten incredibly easy. Sites like Codecademy make it easy to learn – hands on – how computers work. these lessons are hands-on, and they’re practical. You learn web fundamentals and how to build a simple website. This is empowering stuff. It’s a great way to start the journey from a powerless consumer to a contributor, or at least informed consumer. It’s not time consuming, and it’s free.
Maybe some of the negative reactions from coders to the Code Year phenomenon have come from not bothering to actually read what’s in the classes and assuming that the goal was to turn a bunch of people into programmers. maybe.
Case Study: Rosemary, Champion of the World (and my daughter)
This past year, my daughter asked me if I could teach her computers. I talked to my wife and rolled it into her school plan. We had ten lessons. during this time, we worked did the following:
This was fun. We both had a good time. she asked questions that wouldn’t have come up otherwise, and she wouldn’t have been interested in otherwise.
More importantly, after only 8 or so hours, I noticed she saw the world differently. she had ideas about what computers should do. she laughed when computers did silly things on TV. she read error messages and solved problems in an intelligent way. she keeps asking about building a computer game.
She understands that there’s no reason that girls can’t have fun with computers, too.
From a time investment of about 8 hours.
This started with writing some Javascript and HTML. That was critical because it helped her understand how computers work. she learned that they were unthinking and unforgiving in the way they followed her instructions. More importantly, she learned that they would do what she told her if she learned their language (in this case, some basic Javascript).
Case Study: The Judge
In a funny bit of timing, just last night I read about the judge on the Oracle / Google trial was able to make an informed decision about a Java function because he’d been -shocker – learning some Java. It was something that would have seemed obvious to most programmers, but was delightfully refreshing to hear in a court.
Now here is a later followup where the Judge slams Oracle:
Judge: We heard the testimony of Mr. Bloch. I couldn’t have told you the first thing about Java before this problem. I have done, and still do, a significant amount of programming in other languages. I’ve written blocks of code like rangeCheck a hundred times before. I could do it, you could do it. The idea that someone would copy that when they could do it themselves just as fast, it was an accident. There’s no way you could say that was speeding them along to the marketplace. You’re one of the best lawyers in America, how could you even make that kind of argument?
Oracle: I want to come back to rangeCheck.
Judge: rangeCheck! all it does is make sure the numbers you’re inputting are within a range, and gives them some sort of exceptional treatment. That witness, when he said a high school student could do it…
So here’s a judge who’s able to make an informed decision about a technology case. What’s more shocking is that this is news.
Some Objections Shouldn’t everyone learn plumbing, too?
Jeff’s been having fun equating the "learn to code" movement with "learn plumbing!"
This is one of those fun arguments that sounds good but falls apart after a moment of thought. What would the return on investment be – both in cost and time – for your average person to learn more about plumbing than working a plunger? How often do they work with plumbing in a way that would benefit from a deeper understanding?
How often do most people work with computers, smartphones, and internet sites in a way that would benefit from knowing a bit more?
Not more code! The world needs less code!
This is a bad argument for three reasons:
Fine, learn computer literacy, not coding!
This is at least something. The problem here is twofold:
Without knowing the fundamental differences between how computers and people think, people resort to just yelling louder in their own language.
Where Next?
If you don’t know how to code, get started. It’s free, fun and easy.
If you know how to code, encourage others around you when they want to learn. Odds are, someone did that for you a while back.
As many of you might know, I’ve spent much of my time the past 12 months working on Windows Azure – which is Microsoft’s Cloud Computing Platform (I also continue to run the teams that build ASP.NET, the server framework libraries of .NET, and a few other products too).
I will be doing a keynote in San Francisco this Thursday, June 7th at 1pm PDT. The event will be streamed live, and I hope you’ll be able to join us as we walkthrough some of the exciting work we’ve been doing – and how you’ll be able to take advantage of it as developers.
You can learn more and register to watch the event here.
Hope to see you there,
The IE10 user agent string was originally introduced in the first platform preview of IE10. in Windows 8 Release Preview we made two additions to aid server-side feature detection.
The first addition enables detecting whether a machine has touch-capable hardware via a new Touch token. using this token you can present a touch-friendly version of your site to users with touch-capable hardware (typically, in the case where your normal site is not touch-friendly). Keep in mind that users with touch-capable hardware may also use a mouse and keyboard. you can see where this token fits into the user agent string in the examples below.
If you’re detecting touch support client-side, do not sniff the user agent string; use navigator.msMaxTouchPoints instead. if the property exists and returns a value greater than zero, the user’s PC has touch capability. For example:
var hasTouch = navigator.msMaxTouchPoints > 0;
The second addition to the IE10 user agent string is a new architecture token for ARM devices running Windows RT. this complements the existing values for other architectures. the examples below show how this compares to a few other configurations.
These additions apply to both desktop and Metro style IE10 since they expose the same platform capabilities. we recommend optimizing your site’s experience around the capabilities of the system (like Touch) through feature detection, rather than browser or environment detection. where content depends on plug-ins, use the requiresActiveX prompt to help users switch to desktop IE10 until the content can be made plug-in free.
—Tony Ross, Program Manager, Internet Explorer