The Future of Programming Languages: Economics

Someone on Hacker News asks about the future of programming languages, and I realized that it's a pretty interesting topic. Here's my take on it:

Programming languages are about people, and the compromises they may or may not make in order to communicate their intentions to computers.  The technology in question may change, but there will likely always be people involved, and as long as that's true, looking at the problem through the lense of economics provides useful results.

Therefore, looking at programming languages pretty much requires that you look at the economics of them:

  • Network effects are important, but obviously don't squeeze out smaller languages entirely.  I.e. it's good to be able to get libraries, find people to hire, books to read, friends to chat with about problems, etc…  This means that future languages will have to seek out a critical mass of users.
  • Since the times of Fortran, languages have been getting more efficient in terms of programmer time, because programmer time stays the same or gets more expensive, while computer time keeps getting cheaper, and language implementors keep getting better at making things fast under the hood.  This means that languages of the future are likely to let you do more with less, all else being the same.
  • Learning a programming language will continue to be a fairly involved process for most people, meaning that for many, it's more efficient to learn a few languages well and use them for as much as possible, rather than to try and find the 'perfect' language for each problem.  This rewards general-purpose languages, compared to niche languages.  This also rewards flexible languages that can be used in many different environments.
  • Computers are only going to become more and more important, meaning that more people are going to want to develop the skills to work with them.  Not all of them will be experts, and many may not know much, but have a vision for how a program could solve a particular problem in a field they are knowledgeable about.  This means a low barrier to entry is important, because those novices will pick easier languages, become progressively more competent in them, and thus (network effects) contribute to their diffusion.  Case in point: PHP.  Future languages should be capable of solving hard problems, but should also make it easy to get started solving simple problems too.
  • Working on languages is lots of fun, so even though there aren't necessarily monetary rewards, people will continue to play with and explore new ideas.  I don't see there being a limited supply of new languages in the future.
  • The costs of switching from established languages will continue to be high, so future languages will still need to interact with "legacy" languages like Cobol, Fortran, C, Java, and so on, that are so widely established in industry that systems written in them will be with us for a long time yet.


I wrote this in a hurry.  Have I missed anything?  How do these factors apply to languages you see emerging?

Kindle?

I'm thinking about getting a Kindle, and I thought I'd write down some thoughts, even if they're a bit jumbled, and invite commentary.

Good:

One thing I really like, living here in Italy, is that I would be able to get English language books instantaniously, and not pay shipping or import duties on them.  Whatever disadvantages there may be, that is a huge advantage.

Closely tied to that: if we ever move back to the US, shipping all our books will be very expensive.  Having some of them in an electronic format would lighten that load considerably.

It's fairly cheap.  At $180, it's not something I'd want to treat carelessly, but it's significantly less expensive than various existing tables.

Long battery life means it's not something you have to worry much about.

E-ink looks like it's easier on the eyes than LCD screens.  I'm not sure, but also its slow update speed might be a "feature not a bug" in the sense that you're not so easily distracted by the internet being just one click away.

Bad:

I love having real, physical books in my house.  I grew up in a house full of books, and I want the same thing for my daughter.  I like being able ot look through them, pick one up, and read about something. 

Real books are very convenient, as long as you're not lugging around hundreds of them.  I like not having to worry too much about dropping them, about getting a bit of water on one or that sort of thing.  You can cart them around in a backpack with little worry, take them to the beach, and so on.

As far as I can tell, Knuth's books are not available for, nor would appear like they do on paper.  That's the golden standard for me: once "The Art of Computer Programming" looks good on an e-reader, it will be really and truly ready.  We're not there yet.

It's not general purpose.  Like I said above, maybe this is good for reading, but there are also times when it'd be nice to have a general purpose device, with email, maps, applications, and so on.

A while back, Amazon announced some sort of beta program for a kindle SDK.  I haven't heard much of anything since.  So it looks like it's not really possible to code for it, which is a bit disappointing. I like to have that option available, even if I don't always exercise it.

Unknown:

The pricing: sometimes Kindle versions are cheaper (especially, in my case, considering shipping, and, potentially, import duties), but sometimes they aren't, which seems a bit unfair, given that you cannot sell the book if you don't like it.  I'm not sure how it would work out for me in the aggregate.

Digital Rights Management, or DRM, means you can't, say, sell someone a "used" ebook.  This is, in some ways, understandeable, because it's not like an e-book degrades with time as a physical one might.  Were it possible to sell on your old books, that might radically change the market.  I could see that having both good consequences (cheaper books), but also negative ones for authors (less money).  I suppose this topic merits a post or two, or even an entire book of its own, because it's a complicated subject without, in my opinion, "easy" answers.  Suffice it to say, though, that there are some drawbacks, but I suppose it's also nice that Amazon "knows" which books I have, so even if I switch to a different reader, I still have my books.  And it's good that authors can get paid to work on a book.

Not having actually bought it yet, I have no idea how it actually 'feels' to read a book with one.  I love curling up with a good book, something I certainly can't do with my laptop.  The Kindle looks light and small enough that it could work, but maybe it's just too high tech and sleek to provide that same comfortable coziness.  Or maybe I'm just a luddite where books are concerned?


Do you have one? Do you use it?  For all kinds of books or just certain kinds (technical books, cheap 'fun' reads, whatever…)?  What's the experience like?

When sunny gets blue, I get traffic

This is definitely a "captain obvious" observation, but it's interesting to see just how much bad weather here in the Veneto is correlated with traffic to my real-time weather site, http://www.meteo-veneto.net

The precipitation and insolation numbers for the month of September – as well as the radar images for the site itself – come from http://www.arpa.veneto.it/

The numbers are all normalized so as to make them easy to compare.  The cloudy/dark numbers are the inverse of the insolation for the month, and could probably be fiddled with to be a bit more accurate – it's obvious that the number increases as the month goes on, with less sunlight.

Moving data around your code – different approaches

I was thinking about this the other day, and I realized I can't particularly think of a label to attach to this concept.  Anyone out there got a name for this?  This could be due to my lack of formal computer science training, so I thought I'd ask, at the risk of looking stupid (I'm having an off day, so that's a very real possibility).

If you have a series of functions, say: a(x), which in turn calls b(x), which calls c(x), and so on, and you end up with a faily long call chain, out to say m(x), and you subsequently decide that m(x) needs an additional piece of information that is contained in a local variable in the body of the a(x) function – how do you get it to m(x) ?

  • You could simply make it a global variable!  That's easy and generally a pretty bad idea.
  • You could modify every function signature between a(x) and m(x) to look like b(x, y), c(x, y).  That's a lot of work though.  And what happens if something *else* needs to get passed around?
  • In an object oriented language, you could make x an object, and attach y to it, so that you mostly pass it around just as before.
  • Along the same lines, you could make x a hash table, so that you can look arguments up by their name, to have some idea what they are.
  • You could just make x a list, and remember what position everything is in.  That's not so nice though if you have to revisit the code and you didn't document where everything is, and why it's there.
  • Other things?  You could make a(x)'s scope visible to m(x), I suppose, although that sounds like it's a fairly involved, and potentially hairy answer.

It seems the answers are basically either 1) add the parameter to all the functions and everything that calls them, or 2) use some kind of composite type to stash the one or more values in.


It seems that this is a reasonable common thing to have to do, so it must have a name.  How well does your language handle that kind of refactoring?

Geek Dad: “Skywalker Story”

I don't usually talk about personal stuff here, but I'll make an exception:

I got tired of telling our two year old daughter the same old stories about children lost in forests, bears, witches, evil stepmothers and so on, so I turned to some other material I know fairly well.  I started recounting simplified bits and pieces of the first Star Wars movie over the course of a week.  She thought it was great fun, what with wookies and robots and a princess and lots of adventures, and now, every evening, asks for "Skywalker story!".   I'm quite proud, although my wife rolls her eyes a bit.

On the block: squeezedbooks.com

In keeping with the idea that I want to focus on things where I sell something directly to people, rather than just advertising, I am putting http://www.squeezedbooks.com up for auction on flippa.com.  The auction is here:

http://flippa.com/auctions/99073/Business-Book-Summary-Site

Here's what I wrote about it:

I like to read business books, but many of them contain a nugget of valuable information, and lots of fluff, because you can't sell a 10 page book.  Some of them are pure fluff!  Occasionally, one of them has profound implications.

I created this site several years ago in order to have a place to summarize a series of books I'd read, with the aim of creating a community interested in summarizing and, most of all, discussing business books.  To be honest, that community hasn't really materialized, although there are a number of registered users (585 at last count).  Most other business book summary sites are for-pay – you pay $X dollars a month and receive Y summaries.  I wanted to create an open site, in order to foster discussion and communication between people reading summaries.

In any case, one baby later and in a different country, my heart isn't really in it any more, so I've decided to put the site up for sale.  I still think the idea is a good one, and that in the right hands, the site could take off.


It was a fun site to work on, and really do think that in the right hands, it, or something derived from it, could be successful.  I could conceivably hang on to it and keep trying different things with it, but I've decided I really need to impose this limitation of "make something to sell directly" on myself in order to avoid wandering off into "cool, but no idea how to make money" projects.

Edit:

One thing that I'd like to state explicitly and publicly is that I'm not giving up on open source, just that I think I need to draw a really clear line between "I hope to make some money with this" and "this is a cool project I want to share with the world".  In other words, I think I'd rather avoid the middle ground where stuff is sort of openish, and go either for projects that pay directly, or stuff that's pure open source under an Apache or BSD license.  Hopefully, if I ever hit on a project that takes off, I'll be able to dedicate some time/resources to open sourcing some of the infrastructure, as I think that's currently one of the better models for producing open source software.

Ovi Lays an Egg

In the local dialect here in Padova, Italy, "ovi" means "eggs".  For those who aren't native English speakers, "to lay an egg" means to fail at something or do it poorly.  The connection is very appropriate.


To see what it was about, and if it was worth pursuing, I decided to submit a couple of simple applications to Nokia's OVI store.  Nothing fancy, or that I'd spent much time developing, and they were actually little things I'd done for myself before the ovi.com store came out, but I had hoped to see about making a bit of money out of the time invested nonetheless.


So I went ahead and started adding them, with a quick glance the publisher guidelines.  Too quick, as it turns out.  A month after submitting my application, their "QA" process lets me know my application is not going to be accepted because it's not signed.  Uh… yeah?  Couldn't you have simply run a script on the file I uploaded to tell me the same damn thing?  It's not exactly as if you have to have a human look at the file with a hex editor to determine whether it's signed or not.  My phone can tell, of course – presumably Nokia ought to be able to figure it out programmatically and let me know?  Sure, I should have read their big, long document prior to starting, but come on, it would have saved everyone time if their software had simply informed me that my application, being unsigned, was not ok.

Now, when it comes to signing, Java ME is pretty much the worst in the business, although Apple is giving them a run for their money.  At least Apple does it to make the applications good for their users (for their definition of good).

  • Java ME:  Ovi suggests using http://javaverified.com/ – where it costs $200 to sign up, and then something like at least 75 euros to run an application through *their* whole process.  For each version.   The hell with that!
  • Android: you have to pay $25 to get access to the marketplace, but can self-sign applications.  For free.  Put that in your pipe and smoke it, Nokia & Larry.
  • BlackBerry: I was sure this one was going to be expensive and painful given that BB is mostly aimed at big companies that could certainly spare the money.   It's not: $20 gets you a certificate that you can sign everything you want with, and it's pretty quick and painless to get it.  This is how Nokia ought to be doing things in terms of signing applications.
  • Apple: $100 gets you the dev kit and then you can submit your apps to the somewhat bureaucratic and slow apple approval process.  Plus you have to own a mac to develop on, if you don't already have one.  But still, only $100 a year, and you can do as many apps as you want.

So there you have it, Java ME involves more fees than the other ones, and is probably as slow and bureaucratic to boot. I'm not going to find out, though, this pretty much concludes my experiment with ovi.com – there's no way I'm going to spend all that money on a little fun application that I'd only sell for a few euros.  Being a fan of open source and openness in general, my next phone will certainly be Android based.

I think someone at Nokia probably realizes things are broken: they appear to be working on a way to make it not cost anything to sign Symbian apps.  But I don't have a Symbian app, so that's pretty useless for me.

Oh, and while I'm bitching about their whole process, their publisher interface was down all of last weekend in order to "add a new set of metadata which will improve the Ovi Store user experience".  It took a whole weekend of downtime to add that?

Furthermore, I signed up for Ovi as soon as it came out – I was going to push Hecl to it (but didn't bother at the time) but now it appears they want 50 euros from you just to sign up.  Here's a hint: save your money.

Ok, first one on the block: leenooks.com

The problem with selling off these sites is that I am a bit attached to them emotionally.  Leenooks.com is a cool domain, I think – it's how Linus pronounces Linux, supposedly.  It's also one of the first sites I put together: the original version was done in Perl with CGI back in … '97?  The current incarnation runs on DedaWiki a wiki I put together that is built with Ruby on Rails.


The idea behind the site was that, rather than keep track of all the hardware out there that works well with Linux, let's focus on the stuff you really want to avoid as that is a smaller set of things, and hopefully one that, one day, will be empty!

It seems to have been fairly popular over the years, and has helped pay for the server it runs on.  However, "popular" doesn't necessarily translate into "oodles of money", and especially now that I have a daughter who is a lot of fun to play with, I need to cut back on my "spare time" projects.  So this one is the first one up on the auction block.

I fervently hope that whoever acquires it can dedicate a bit more time and energy to making it do what it does, only better.

Some difficult decisions?

I am, by nature, a tinkerer.  I love to build things to see how they will work or because I have an idea that I think is fun.  I am not so much of a natural business guy.  I go build something "because it's there".  Or rather, it's there in my mind, and I want to make it.

I earn money, however, via consulting work.  There are problems with this line of business though, namely that it doesn't scale very well unless, besides being good at a skill, you've also got the skills to build up a consulting business, which is very much about adding and managing people, something I'm not all that passionate about and would rather avoid.  So what happens is that you go through slumps with less than full capacity, and then things pick up again, and before you know it, you hit your upper limit and can't take on any new work, putting a ceiling over your potential earnings.  Sure, you can raise prices a bit, but that'll only get you so far.  For a while now, I've been considering this problem, and I think some sort of product would be an ideal way out.  Stories like Balsamiq's are inspirational, and along the lines of what I think might be nice.  Don't get me wrong, I like my clients and like to help people solve problems a lot, but it's a stressful job in that you're never very far from having no income.

I'm not much of an entrepreneur, though, in the sense of someone with a nose for making money.  I tend to think about building something cool first, and not really worrying about making money with it.  Predictably, some of the sites I have created are popular, but don't make any money.  Sure, they have some ads, but that doesn't really make much unless you get really huge page views or have some sort of content that attracts users who will click on very lucrative advertisements.  I've started to think that perhaps I should constrain myself in new initiatives to creating things that have a direct source of revenue: you want to use it, you pay.  In my daydream world, I'd probably just hack on open source all day long, but there's no money in that for someone like me who is not the author of some huge, famous piece of software, nor a particularly great hacker in any case (I've met some, like Andrew Tridgell, and it's a really humbling experience).

So that brings up the question of what to do with the aforementioned sites. One option would be to sell them off via a site like flippa.com, another would be simply to just let them sit there and stew, but they do take up some resources on my server, and require some maintainance now and then, and they're a bit of a distraction too (I start wondering about things to add or how to fiddle with them).  Maybe there's a way to make money from some of them, but I'm too blind to see it.

The ones I'm thinking about, are, in no particular order:

  • http://langpop.com – this one gets decent traffic, but programmers are about the best people in the world at ignoring advertisements.
  • http://leenooks.com – the Linux Incompatibility List attempts to point out hardware that people should avoid if they intend to run Linux on their computers.  Happily, there is less need for this site than when I conceived of it some 10+ years ago, but I think it's still a helpful resource.
  • http://linuxsi.com – (in Italian) this one is a place that highlights stores and consultants who are "Linux friendly".  Want to buy a computer with Linux?  There's probably a store near you.  I have had fun with this site, but, once again, no revenue.
  • http://squeezedbooks.com – "open source" business book summaries and discussion.  There are plenty of competitors in this space who make their money by churning out summaries and charging for access for them.  I had hoped to build a community interested in reviewing and discussing books out in the open.  There is a lot of fluff in business books, mostly because you can't sell a 10 page book that describes your idea, but need to pad it out with lots of examples and repitition and so on to make an actual book out of it, but that doesn't mean the idea at the heart of the book in question isn't an interesting or new one.

Better Software 2010

Florence, Italy, is an extremely popular tourist destination, and for a good reason: it's absolutely full of beautiful architecture and famous art.  It apparently gets more than a million tourists a year.  So it felt kind of odd for me, as a foreigner, to hole up in a conference talking about computers, software and business within a stone's throw of this.

It was well worth it though.  "Better Software" was a very interesting conference, and extremely professional.  One anecdote: since there were so many people signed up, they did the lunch and coffee breaks in another facility nearby, about a block away.  However, the weather wasn't very nice, so the organizers rounded up a bunch of umbrellas, and put them near the door with a sign saying "take one if you need it", so that people could stay dry while going back and forth.  Of course, having grown up in Oregon, I don't trust the weather much, and carry an umbrella, but it was a really nice gesture and attention to detail.

I expected it to be good, but it ended up being a really great event.

Some memorable bits:

  • As always, it's good to catch up with old friends, and meet new people.
  • Giacomo "Peldi" Guilizzoni's talk about Balsamiq was really good: he's an entertaining speaker, and the success of his company is a great story.
  • Andrea Santagata gave an insightful talk about startups in Italy, and managed to cover a number of points that I've seen from people like Paul Graham and other "startup gurus".
  • I had some interesting discussions with people about open source, business and economics, a topic I gave a presentation on.
  • It was quite motivating to meet so many people working on cool things.  Italy absolutely does not have a talent problem.
  • The dinner was great: Bistecca alla Fiorentina for me, accompanied by red wine.

I suppose that, given the huge success of the event this year, they may look for a larger facility for future events, but I hope it doesn't end up in some soulless place in the suburbs; even if I didn't do any sightseeing, I liked being in the city center.

While the organizers would be more than capable of putting on a more international event, I enjoyed the focus on Italy, and the cool things people are doing here, and I feel it also contributed some to the positive atmosphere.  It's one thing to have some guy come in from abroad and tell you something, another to see someone like Peldi talk about how he did what he did.  And what with all the problems Italy has right now, some "positive energy" was more than welcome.  Like I said, Italy has a lot of really talented people; the problems lie elsewhere.

A big thanks to the organizers and everyone who came, and I hope to see you there next year.