On the subject of toolable languages, the Microsoft Languages teams do a faaaantastic job of making languages that are designed to be used with a proper IDE.
For example...
Generator expression in Python:
(p.Name for p in people)
And in C#:
from p in people select p.Name
Or:
people.Select(p => p.Name)
Notice how in the C# version, the source comes before the projection. This enables code completion when you type "p."
The VB, C#, and F# teams work their asses off to make all those little things work so nice. These are things that even the most experienced developers might not notice, but they attribute to that confusing "this sucks" shock when VS users need to use VIM or Emacs.
Let's look at a more complex example. Assume "page" is a list of strings. We want to get every word on the page (exact whitespace treatment and tokenizing behavior isn't important; just the gist)
Python:
(word for line in page for word in line.split())
C#:
from line in page, word in line.Split() select word
I think that translates to:
page.SelectMany(line => line.Split())
The Python is a bit confusing; the first C# example is much easier to read. Verbosity is traded for understanding. It is a careful balancing act, but I prefer the balance in C# in this instance. (Don't get me wrong, C# and Python are by far my two favorite languages, I love them both)
For example...
Generator expression in Python:
And in C#: Or: Notice how in the C# version, the source comes before the projection. This enables code completion when you type "p."The VB, C#, and F# teams work their asses off to make all those little things work so nice. These are things that even the most experienced developers might not notice, but they attribute to that confusing "this sucks" shock when VS users need to use VIM or Emacs.