# Friday, 09 February 2007

Bruno van Dooren, C++ MVP and general nice guy, blogged recently on "Is C++ still a viable language?" He makes lots of good points about interop, templates, and control. He points out that some UIs are a lot easier to build with C#. Then, out of the blue, he says mean things about VB. I know he's only joking, but I just felt I had to defend VB's honour.

Here's the thing. C#, it's mostly just VB with semicolons, you know? And that's not an insult, you shouldn't gasp when you read it. VB's a good and useful language. [Of course I mean VB.NET, come on, we're coming up to our fourth release, the default VB is VB.NET now.] It's no secret I do far more work in VB than in C#. Once in a blue moon I want to do something in VB that would be easier in C# (last week I wanted to delay hooking up button handlers until some initialization was in place, something the Handles keyword isn't going to do for me) and if I did more C# I would probably find the occasional thing that would be easier in VB. Big deal! I can always find a way to do those things anyway. What matters is the framework, and that's the same in VB, C#, or C++/CLI. I like the synactic sugar of Dispose=destructor more than the synactic sugar of "using" or "Using" but the underlying mechanism is the same in all three cases.

Kate

Friday, 09 February 2007 11:00:29 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 08 February 2007

Herb updates us on the next C++ standard:

I'm happy to report that work on "C++0x", the much-anticipated Version 2.0 of the ISO C++ standard, has dramatically picked up steam over the past few months. The ISO C++ committee has now published the first partial draft of C++0x and plans to publish a complete public draft before the end of 2007.

As part of the push to get this done, the committee is having extra meetings, including one in Toronto in July. Hmmmm.....

You need to read Herb's blog post yourself for the details on what's in C++ 0x (Concepts, Garbage Collection, Memory Model for Concurrency, Concurrency Libraries) and what's not (Modules, Dynamic Libraries) with helpful links to even more details. This is our future -- and you can be sure, C++ has a future.  

Kate

Thursday, 08 February 2007 10:46:46 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 07 February 2007

Eileen Rumwell is sponsoring a contest to send someone to Globewomen's annual conference, Global Summit of Women, in Berlin in June. Globewomen invite you to:

  • Join the premier gathering of women leaders focused on advancing women's economic opportunities globally
  • Be inspired by the energy, enthusiasm and expertise of the women decision-makers in business and government from around the world
  • Learn practical strategies to grow your career or your business
  • Share winning solutions and strategies with your peers
  • Be part of a global network of economic dynamos who will make changes in the 21st century global economy.

A 250 word essay about why you chose the technical field you did, and how you feel about it (man! 250 words is hardly anything! that's a challenge!) could get you airfare and accomodations so you can attend this seriously high-level get together. If you don't (or can't) win, consider attending anyway ... it sounds like fun!

Kate

Wednesday, 07 February 2007 10:40:51 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 06 February 2007

I missed this article when it first appeared. Mary Jo Foley talked to Jason McConnell, me, and David Johnson about getting to all the new exciting Vista goodies, and how it's a bit easier from C++ because you can mix and match native and managed so simply. Watch for more guidance and guidelines on this from Microsoft coming soon.

Kate

Tuesday, 06 February 2007 10:33:14 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 05 February 2007

Dylan Smith writes about testing: Unit tests (automated, written by programmers, repeatable), Acceptance tests (stories or scripts that can be done by developers or users and test high level requirements) and Exploratory tests (noodling around by a clever person to see how an app is doing). I like these categories and I do all three on my projects. I think a lot of developers get excited (rightly) about Unit tests and run the risk of forgetting the other two. You still need to lead your users through a structured process that causes them to conclude you have finished their project. (And you still need to rehearse that structured process yourself so you know in advance it will pass.) You still need to play around with it a bit, outside of the confines of test cases, and assure yourself it really is a good application.

We're not TDD, so I don't write the tests and code to them. But I write the scripts for Acceptance testing as we develop stories and requirements. They're also a fine way to bring a new programmer up to speed on a project by leading them through what it does and how you know it's working.

Kate

Monday, 05 February 2007 13:13:28 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 04 February 2007

These are nice ... posters of all the Visual Studio keyboard shortcuts (language specific, according to your Visual Studio settings) are now available. Here's a snip of the C++ colour one (there's a black and white one too.)

Go get it!

Kate

Sunday, 04 February 2007 12:35:14 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 03 February 2007

This year I will be partnering with my friend Tim Huckaby to deliver a pre-conference session at Tech Ed USA 2007 in Orlando:

PRCN12 From Design to Deployment: Everything You Need to Know to Optimize Your Applications for Windows Vista 
Kate Gregory and Tim Huckaby
Windows Vista is the most compelling operating system release in nearly a decade. With major improvements in the areas of security, user experience, and performance, Windows Vista offers a robust and dependable platform for building a breadth of solutions. This full day seminar prepares you for building a new class of applications that take advantage of these improvements. Come and see how to take advantage of some of the most interesting new native APIs, inter-op techniques, and .NET Framework 3.0 technologies.

In this all-day pre-conference seminar, learn how to build the next generation of smart client applications with the Windows Presentation Foundation (WPF). Learn the fundamentals of WPF and work your way through advanced topics like 3D. Learn how to build great user experiences with technologies like task-based dialogs, sidebar gadgets and customized Windows search functionality. Learn inter-operability techniques with managed wrappers and how to leverage the Vista Bridge. Dive into the best practices for upgrading existing applications, leveraging User Access Control (UAC) and techniques for virtualization. Learn how to build more reliable and secure applications with technologies like Windows Error Reporting, Next Generation Cryptography and Application Restart/Recovery. And lastly, learn how to build more connected systems with Windows Communication Foundation (WCF) and RSS platform support.

Many Tech Ed attendees come a day early to do a pre-con and jumpstart themselves to be ready for the rest of the conference. Registration is open and the early bird discount is still in effect.

Other RDs delivering pre-cons include Scott Hanselman, Richard Hundhausen, and Kimberly Tripp along with many other people you have heard of. This is great opportunity to get up to speed on a topic very quickly. You can then go and drill further into some niche of it that interested you, by attending breakouts on that subtopic.

See you there!

Kate

ps: do I have a breakout session? There's no announcement on that yet :-)

RD | Speaking | Vista
Saturday, 03 February 2007 12:26:20 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 02 February 2007

It's easy to get intimidated by a feature like Lambda Expressions. It has a Greek word in it, so it must be difficult, right? And you can read explanations like this:

Lambda expressions, one of the most important new features to be included in the next 3.0 version of C# and one that offers support needed by the LINQ Project, are precisely a feature coming from the world of functional programming. ... Scheme ... Lisp ...

Or this summary:

In mathematical logic and computer science, lambda calculus, also λ-calculus, is a formal system designed to investigate function definition, function application, and recursion. It was introduced by Alonzo Church and Stephen Cole Kleene in the 1930s; Church used lambda calculus in 1936 to give a negative answer to the Entscheidungsproblem. Lambda calculus can be used to define what a computable function is. The question of whether two lambda calculus expressions are equivalent cannot be solved by a general algorithm. This was the first question, even before the halting problem, for which undecidability could be proved. Lambda calculus has greatly influenced functional programming languages, such as Lisp, ML and Haskell.

Lambda calculus can be called the smallest universal programming language. It consists of a single transformation rule (variable substitution) and a single function definition scheme. Lambda calculus is universal in the sense that any computable function can be expressed and evaluated using this formalism. It is thus equivalent to the Turing machine formalism. However, lambda calculus emphasizes the use of transformation rules, and does not care about the actual machine implementing them. It is an approach more related to software than to hardware.

This sounds really difficult. So let me show you something that's not difficult at all:

<input type=button value="Try it now" onClick="alert('Hello from JavaScript!')">

You know what that does, right? Well the stuff after onClick=" and before "> is [gasp!] a Lambda Expression. It's a little piece of code that you can stick somewhere without a whole lot of defining a function and defining a delegate and pointing that delegate at that function and blah blah blah. You can stick two lines of JavaScript in there if you want:

<INPUT TYPE="radio" VALUE="Switching to Blue" onClick="alert(value);document.bgColor='blue'">

This feels natural and ordinary in JavaScript, and all folks are talking about is giving you that same freedom in strongly typed languages where the compiler is your friend. We have some of this in C# 2.0 with anonymous methods, but lambda expressions are in effect more strongly typed. Here's a nice explanation of the subtle distinction.

It's not actually that intimidating at all ... it's going to make life easier.

Kate

Friday, 02 February 2007 20:51:26 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 01 February 2007

[Sorry about the blogging gap - nothing dramatic, just a little case of overworked and underslept. Good excuse to start up again though.]

Imagine a room with a table, no computers, and four really smart people who care tremendously about helping people write software, and who tackle questions like "what keywords should be in this language" every day -- and whose decisions actually will get implemented. A full hour of amazing conversation appeared recently on Channel 9.

How will imperative programming languages evolve to suit the needs of developers in the age of Concurrency and Composability? What role can programming languages play in enabling true composability? What are the implications of LINQ on the furture of managed (CLS-based) and unmanaged(C++) languages? How will our imperative languages (static) become more functional (dynamic) in nature while preserving their static "experience" for developers? 

Answers to these questions and much more are to be found in this interview with some of Microsoft's leading language designers and programming thought leaders: Anders Hejlsberg, Technical Fellow and Chief Architect of C#, Herb Sutter, Architect in the C++ language design group, Erik Meijer, Architect in both VB.Net and C# language design and programming language guru, and Brian Beckman, physicist and programming language architect working on VB.Net.

This is a great conversation with some of the industry's most influential programming language designers. Tune in. You may be surprised by what you learn...

Some quotes and paraphrases that caught my attention:

  • "No language can ignore concurrency and stay successful for mainstream programming over the next five, ten years."
  • our entire industry is based on composable software and we manage to do composable software with the languages, libraries and frameworks we have now. it's rather amazing that we can do it.
  • "all you can do as a language designer is slow down the accrual of new features that will eventually lead to cave in."

Now if you aren't sure you know what a lambda expression is, or what makes a language functional as opposed to imperative, or what LINQ would have to do with that, or what composability is, then you may think you don't want to watch this video. But you'd be wrong! Spend this hour with these gentlemen and not only will you learn all those things, you'll learn why it affects you and why you should be following, at least a little bit, the current work in this area.

Watch it!

Kate

Thursday, 01 February 2007 20:05:14 (Eastern Standard Time, UTC-05:00)  #