August 2007

Monthly Archive

ToroI’ve taken some Spanish courses over the last few years. They’ve been very good—excellent teachers, facilities, and materials. So when term ended a few months ago and I passed the exam, my natural inclination was to sign up for the next term.

However, I decided that rather than continuing with the course, I’d take a break and try to consolidate what I’d learned. I figured that the best way to do this was to meet up with some Spanish people and try to have real conversations with them. Talk. Practice.

And it’s worked out well. I started meeting and talking to Spanish people on a regular basis. And now, while I’m by no means fluent, my Spanish has improved greatly since I started this new, more active and practice-based approach.

What’s this got to do with InnerWorkings, you may ask? A lot, in fact!

Learning a language like Spanish or German has a lot in common with learning how to program. Both are complex activities. Both require a lot of dedication and hard work to achieve a reasonable degree of proficiency.

There are many aspects to learning a new language. You start off with simple phrases, like how to introduce yourself and how to describe other people and situations. Then you learn basic grammar, which involves a lot of verbs (including those tricky irregular ones). Next, it’s important to build up your vocabulary. The more words you know, the more you’ll be able to understand and express yourself.

Even with all this done, it’s still a big step to actually talk with someone in a foreign language. It’s always easier to read and write the language than it is to hold a meaningful conversation in it. And for most people, being able to hold a real conversation is the main motivation to learn a new language.

There are many resources for language learning. Grammar books teach the rules of the language, dictionaries provide vocabulary, books and movies also help. But take it from me, you will not be able to speak a language properly unless you practice regularly with a fluent speaker. It’s the difference between simply knowing about something and actually doing it.

The same situation applies to programming. You can have all the resources to hand—the latest version of Visual Studio, access to MSDN, online tutorials, great textbooks. But unless you’re getting relevant and regular on-the-job experience, it’s very difficult to ‘practice’ with a programming language or technology in a meaningful way.

This is where InnerWorkings’ unique challenge-based approach helps. The key to our approach is structured practice. We assume that you know the basics, can program competently, and can look up relevant reference sources. Where the InnerWorkings challenge makes the crucial difference is that it provides the opportunity to really practice – to put theory into practice in a realistic and supportive environment. To apply the techniques used in real-world problem solving. To write code. And to learn .NET.

If you want to learn Spanish, get talking to a fluent Spanish speaker.

And if you want to learn .NET, get coding with an InnerWorkings challenge!

Add this post to: del.icio.us:Buenos Dias, .NET! digg:Buenos Dias, .NET! spurl:Buenos Dias, .NET! simpy:Buenos Dias, .NET! newsvine:Buenos Dias, .NET! blinklist:Buenos Dias, .NET! furl:Buenos Dias, .NET! reddit:Buenos Dias, .NET! Y!:Buenos Dias, .NET! google:Buenos Dias, .NET! technorati:Buenos Dias, .NET! stumbleupon:Buenos Dias, .NET! windowslive:Buenos Dias, .NET!

CodeProject’s daily newsletter (which I’m 100% addicted to reading each morning) tipped me off to the following article on Predicting the Next Software Decade by M.R. Rangaswami, co-founder of the Sand Hill Group. Despite the title, this excellent survey shows you what happened in enterprise software over the past decade and dips into some predictions for the future.

The article opens with a very nice timeline for enterprise software milestones over the past decade - I really like to see simple, well conceived visuals that strengthen the underlying arguments in any published article (Jeff Atwood would likely approve and I share his distaste for pretty but meaningless graphics). Check it out below:

enterprise-software-industry-timeline-sand-hill-group.gif

As far as I can tell, the results for this article were gathered from a bunch of CEOs and software “leaders” that attended the Enterprise 2007 conference. Rather than rehash the article itself, I’ll stick to summarizing the points that I found interesting and/or a bit surprising:

  • Mark Benioff from Salesforce.com had the most impact on enterprise software in the past decade, according to 26% of those polled. Benioff spilt the honor with Linus Torvalds, which I can really understand - Linus has his own profile on Wikipedia; need I say more?
  • 49% of attendees felt that the software industry’s contribution to the global economy had not exceeded their expectations. My first thought was “tough crowd”, but I can see what they mean when only 17.8% of the world’s population has internet access.
  • Software as a Service (SaaS) is most likely to be viewed as a success by 2010 according to 73% of those polled. Web 2.0 was given a meager 7% chance of success. Yikes!
  • Innovation will continue to dominate the software industry according to 32% of those polled, although consolidation (26%) and maturation (23%) were not far behind. Will we ever grow up? Personally, I would take those odds.
  • 29% of respondents would not recommend a career in software for their college-aged children. Yikes again! There could be a lot of lawyers and accountants in the next decade’s batch of college graduates, if children actually listened to their parents.

So there’s plenty to chew over in the above statistics and you can decide on their respective merits. If you want to get a sense of this polling group’s influence, take a sweep through the Enterprise 2006 report. It says that 170 executives from software-facing industries attended the event in 2006 - granted, that’s not a huge sample but it’s probably highly representative of the software industry. Even if it is all lies and damn statistics, I thought it made for interesting reading…

Add this post to: del.icio.us:The Software Industry: Don't Look Back in Anger digg:The Software Industry: Don't Look Back in Anger spurl:The Software Industry: Don't Look Back in Anger simpy:The Software Industry: Don't Look Back in Anger newsvine:The Software Industry: Don't Look Back in Anger blinklist:The Software Industry: Don't Look Back in Anger furl:The Software Industry: Don't Look Back in Anger reddit:The Software Industry: Don't Look Back in Anger Y!:The Software Industry: Don't Look Back in Anger google:The Software Industry: Don't Look Back in Anger technorati:The Software Industry: Don't Look Back in Anger stumbleupon:The Software Industry: Don't Look Back in Anger windowslive:The Software Industry: Don't Look Back in Anger

Hurray! According to Clarissa Petzold, August is International 3D WPF Programming Month, my favourite made-up time of the year. To celebrate I thought I’d try my hand at some 3D text in WPF. As it turns out, the bearded one himself will be publishing some 3D text classes in MSDN Magazine in October, but if you can’t wait that long, the code attached here might serve as a good jumping-off point. Try the xbap link below, or just behold this splendid image. I left a subtle link in there to a magical place that everyone should visit…

Note that you’ll need to have the .Net 3.5 runtime installed to run this.

TextExtruder.xbap

The interesting bits are in the Tessellator project. It contains an implementation of an ear clipping triangulation algorithm described by David Eberly here. Its not the most optimised code in the world, but it’s approaching a fairly robust general purpose triangulator. There’s a PolygonShape class that contains a collection of polygon objects. Give this class a bunch of polygons and call PreparePolygons on it, and it will close holes and remove duplicate and redundant vertices. Then pass all your polygons to the triangulator and out pops a list of triangles in the shape of your polygons. Wonderful.

There are a lot of things you could do to improve this implementation. The resulting mesh doesn’t use vertex indices, so you end up sending a lot of duplicate data to the graphics card every frame, and normals are auto-generated, so the text looks quite segmented along the extruded edges, but hopefully it will still be useful to somebody, somewhere.

Source Code

Add this post to: del.icio.us:Sycophancy...now in 3D! digg:Sycophancy...now in 3D! spurl:Sycophancy...now in 3D! simpy:Sycophancy...now in 3D! newsvine:Sycophancy...now in 3D! blinklist:Sycophancy...now in 3D! furl:Sycophancy...now in 3D! reddit:Sycophancy...now in 3D! Y!:Sycophancy...now in 3D! google:Sycophancy...now in 3D! technorati:Sycophancy...now in 3D! stumbleupon:Sycophancy...now in 3D! windowslive:Sycophancy...now in 3D!

We are living in a knowledge-based society, and indeed many people are now classified as “knowledge workers”.

There are many definitions of knowledge. One straightforward definition is “the facts and information acquired by a person through experience or education”. Another definition is “the theoretical or practical understanding of a subject”.

So knowledge is evidently a good and necessary thing in today’s world.

Skill is also regarded as a good thing. A person who’s regarded as a “skilled” operative or a “skillful” player is obviously the kind of person you’d like to have on your team.

KeysThere are many kinds of skills – academic and technical skills, communication abilities, sports prowess. The common denominator among those who possess these skills is their ability to influence and change the world around them. The politician who is a skillful communicator can win people’s votes. The inspirational football coach can motivate a team to win time after time. The skillful software developer can analyze a problem and quickly develop a solution.

But what’s the relationship between knowledge and skill?

Knowledge is like a description of the world - it’s somewhat intangible. Skill is more directly connected to the world - it enables you to change the world in a real and meaningful way.

If knowledge is a map that shows the landscape around you, then skill enables you to read the map and your surroundings, and then navigate to where you want to go.

Another difference between knowledge and skill is that while you can simply study to acquire knowledge, the only way to acquire a skill is to practice, practice, practice.

Of course the two things are not incompatible - in fact, they’re closely related. Knowledge is what you’re aware of, your understanding of how things work. In contrast, skill is your ability to use what you know to effect a real change in the outside world. Being skillful does imply a certain amount of knowledge. But the converse is not true. You can be knowledgeable about something without being skillful in that area.

I can give a personal example of this seeming paradox. I have a good knowledge of C# - I’ve read a couple of Jesse Liberty’s C# books, and sampled numerous articles and web sites devoted to C#.

But what about my C# programming skills? Well, let’s just say that I won’t be joining the InnerWorkings developer team anytime soon! My skills are those of a technical writer, and are quite different from the skills needed to program in C# or VB. I need a certain knowledge of these languages to do my job properly, but I don’t actually need the skill to program - I leave that to our very competent developers.

This confusion between knowledge and skill brings us to a basic problem in much of the technically oriented learning that’s available today - instructor-led training (ILT), e-learning, self-learning through books and videos, and so on.

In many cases, it is knowledge that’s being imparted, not skill. Much of this knowledge is good stuff – highly technical, accurate, well structured and presented. But the end result of engaging in this type of learning is simply a transfer of knowledge to the learner, without a corresponding increase in the learner’s skill level.

And it is skills that are vitally needed in today’s workplace, not simply knowledge.

Right from the beginning, InnerWorkings determined that the best way to develop real programming skills is to get people to write real code, in a realistic working environment.

Our practical coding challenges point you to relevant knowledge sources that are available on the web.

But they then provide you with an opportunity to turn that knowledge into skill by writing the code needed to solve the programming challenge.

It’s a pretty unique approach.

Add this post to: del.icio.us:Knowledge is not enough! digg:Knowledge is not enough! spurl:Knowledge is not enough! simpy:Knowledge is not enough! newsvine:Knowledge is not enough! blinklist:Knowledge is not enough! furl:Knowledge is not enough! reddit:Knowledge is not enough! Y!:Knowledge is not enough! google:Knowledge is not enough! technorati:Knowledge is not enough! stumbleupon:Knowledge is not enough! windowslive:Knowledge is not enough!

I’ve been impressed by the output from Microsoft’s Silverlight team for several months now, but I’m always a bit wary of the hype machine at work. I did “see the light” (dodgy puns will continue throughout this post) when I attended an excellent talk by Scott Guthrie, who runs Microsoft’s Silverlight and ASP.NET development teams. Scott gave a typically enthusiastic yet thought-provoking presentation on Silverlight’s origins and a compelling demo of its cross-browser, cross-platform capabilities at the ReMIX event in Microsoft’s Mountain View campus on June 22nd. 

So everyone is talking about Silverlight as a Flash-killer and the buzz factor is enormous, but what is InnerWorkings doing about it you ask? OK, so the good news is that we’ve just released our first two Silverlight Drills (drum roll) for C# developers! Both Drills are available today from our online catalog and support the very latest Silverlight 1.0 Release Candidate.

The first Drill is called Silverlight Fundamentals (level 2) and it packs the following tasks into 3 solid hours of coding time:

  • Create a simple Silverlight control
  • Create layout and format text
  • Use brushes in Silverlight
  • Draw 2-D shapes with shapes and geometries objects
  • Use animation and transformations
  • Use MediaElement and VideoBrush

Not impressed yet? Well, there’s more - our second Drill is called Javascript Programming with Silverlight (level 3) and it contains the following goodies:

  • Work with objects contained in Silverlight applications
  • Handle Javascript events in Silverlight
  • Respond to mouse movement and keyboard input
  • Access and manipulate object collections
  • Handle errors in Silverlight
  • Use the Silverlight Downloader object

Before I get too carried away, let me jump straight to the point of this post - we’re offering a 20% discount on both of these Silverlight Drills from our catalog this month only. Use the promo code IWLIGHT by August 31st to snag each Drill for $23.96 (full list price is $29.95).

You should also check out Microsoft’s main Silverlight site for some slick demos and working applications - BBC Radio and Netflix are my personal favorites. Did I mention that the Silverlight 1.0 RC is a slim 1.36MB and installs in less than 20 seconds? So you see, the light at the end of the tunnel is not always an oncoming train (sorry, I couldn’t resist that one)!

Add this post to: del.icio.us:Silverlight at the end of the tunnel digg:Silverlight at the end of the tunnel spurl:Silverlight at the end of the tunnel simpy:Silverlight at the end of the tunnel newsvine:Silverlight at the end of the tunnel blinklist:Silverlight at the end of the tunnel furl:Silverlight at the end of the tunnel reddit:Silverlight at the end of the tunnel Y!:Silverlight at the end of the tunnel google:Silverlight at the end of the tunnel technorati:Silverlight at the end of the tunnel stumbleupon:Silverlight at the end of the tunnel windowslive:Silverlight at the end of the tunnel

Categories

Archives