Mort means productivity

Recently, a number of folks in the Java space have taken to openly ridiculing Microsoft's use of the "Mort" persona, latching on to the idea that Mort is somehow equivalent to "Visual Basic programmer", which is itself somehow equivalent to "stupid idiot programmer who doesn't understand what's going on and just clicks through the wizards". This would be a mischaracterization, one which I think Nikhilik's definition helps to clear up: Mort, the opportunistic developer, likes to create quick-working solutions for immediate problems and focuses on productivity and learn as needed.

Lang.NET videos are now online

If you read the three days of Lang.NET posts I did last month and wondered "Man, I wish I could've seen...", fret no more. My personal favorites: (You have to watch this one, just watch the intro even if you're not a C# guy or interested in mixins in the slightest; just get to the part where they talk about the sign--you'll know what I mean when you get there.

Apropos of nothing: Job trends

While tracking some of the links relating to the Groovy/Ruby war, I found this website, which purportedly tracks job trends based on a whole mess of different job sites. So, naturally, I had to plug in to get a graph of C#, C++, Java, Ruby, and VB: java, c#, c++, ruby, visual basic Job Trends java jobs - c# jobs - c++ jobs - ruby jobs - visual basic jobs Interesting.

Some interesting tidbits about LLVM

LLVM definitely does some interesting things as part of its toolchain. Consider the humble HelloWorld: 1: #include <stdio.h> 2:  3: int main() { 4: printf("hello world\n"); 5: return 0; 6: } Assuming you have a functioning llvm and llvm-gcc working on your system, you can compile it into LLVM bitcode. This bitcode is directly executable using the lli.exe from llvm: $ lli < hello.bc hello world Meh. Not so interesting. Let's look at the LLVM bitcode for the code, though--that's interesting as a first peek at what LLVM bitcode might look like: 1: ; ModuleID = '<stdin>' 2: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" 3: target triple = "mingw32" 4: @.str = internal constant [12 x i8] c"hello world\00" ; <[12 x i8]*> [#uses=1] 5:  6: define i32 @main() { 7: entry: 8: %tmp2 = tail call i32 @puts( i8* getelementptr ([12 x i8]* @.str, i32 0, i32 0) ) ; <i32> [#uses=0] 9: ret i32 0 10: } 11:  12: declare i32 @puts(i8*) Hmm.


Some quotes I've found to be thought-provoking over the last week or so: "Some programming languages manage to absorb change, but withstand progress." "In a 5 year period we get one superb programming language. Only we can't control when the 5 year period will begin." "Every program has (at least) two purposes: the one for which it was written and another for which it wasn't." "If a listener nods his head when you're explaining your program, wake him up."

Building LLVM on Windows using MinGW32

As I've mentioned in passing, one of the things I'm playing with in my spare time (or will play with, now that I've got everything working, I think) is the LLVM toolchain. In essence, it looks to be a parallel to Microsoft's Phoenix, except that it's out, it's been in use in production environments (Apple is a major contributor to the project and uses it pretty extensively, it seems), and it supports not only C/C++ and Objective-C, but also Ada and Fortran.

I love it when good accountanting girls go geek

Erik Mork, C++ and .NET programmer extraordinaire and bright guy in his own right, has subverted my sister-in-law to programming, and the pair of them are now opening the doors of their new company, Silver Bay Labs, with a series of podcasts on Silverlight and "sparkling clients" in general. Have a listen, if you're interested in the whole "rich client" thing....

URLs as first-class concepts in a language

While perusing the E Tutorial, I noticed something that was simple and powerful all at the same time: URLs as first-class concepts in the language. Or, if you will, URLs as a factory for creating objects. Check out this snippet of E: ? pragma.syntax("0.8") ? def poem := <> # value: <> ? <file:c:/jabbertest>.mkdirs(null); ? <file:c:/jabbertest/jabberwocky.txt>.setText(poem.getText()) Notice how the initialization of the "poem" variable is set to what looks like an HTTP URL?

More language features revisited

Since we're examining various aspects of the canonical O-O language (the three principals being C++, Java and C#/VB.NET), let's take in a review of another recent post, this time on the use of "new" in said languages. All of us have probably written code like this: Foo f = new Foo(); And what could be simpler?  As long as the logic in the constructor is simple (or better yet, the constructor is empty), it would seem that the simplest code is the best, so just use the constructor.  Certainly the MSDN documentation is rife with code that uses public constructors.  You can probably find plenty of public constructors used right here on my blog.  Why invest the effort in writing (and using) a factory class that will probably never do anything useful, other than call a public constructor?

Static considered harmful?

Gilad makes the case that static, that staple of C++, C#/VB.NET, and Java, does not belong: Most imperative languages have some notion of static variable. This is unfortunate, since static variables have many disadvantages. I have argued against static state for quite a few years (at least since the dawn of the millennium), and in Newspeak, I’m finally able to eradicate it entirely. I think Gilad conflates a few things, but he's also got some good points.