fREWdiculous!
13 Dec
I keep running into people at parties or whatnot who mock me for using Perl and claim that “only .NET is a real programming language” (sic.) Most of the time they are trolling, but I figure I might as well make measurements for what I think of as a reasonably useful programming language. I’ll break this up into two groups of things. The first group is stuff that I want when programming at home for fun. The second is stuff that must be there if I am to use the language seriously at work; the second group contains the first group.
Note that if you have some neat thing to play with for a weekend, that’s fine. I had a good time playing with Factor but I don’t know of it meets all of these requirements. I wouldn’t do a big project with it or use it at work though.
Functions and objects are not the only abstractions that I need to get stuff done. If your langauge doesn’t have anonymous subroutines (anonymous classes do not count) I don’t want to hear about your language.
Dynamic Scope is a powerful tool. You shouldn’t use it unless you really need it, but there are such times.
Are there open source, community maintained Web Frameworks, ORM’s, and other commonly needed tools in your language? If such tools must be bought or only come from a single source (that is, a very small community) then it isn’t good enough.
If I cannot run a command (or maybe some GUI tool) and install new libraries (or packages or whatever they are called in your language) and their dependencies you are asking too much of me as a developer. If you don’t respect my time I don’t respect your langauge. Get out.
Does your language try hard to maintain backwards compatibility? If your langauge breaks my code (no matter how bad the code is) every two or three years you (again) don’t respect my time as a developer.
Your ORM should support the big databases out there: MySQL, PostgreSQL, Oracle, SQL Server, and SQLite (for development.) I should be able to deploy the database from the ORM and also generate ORM files from the database. I should be able to automatically deploy serious stuff like foreign key constraints and unique constraints. As much as possible should be able to be overridden. I should be able to add some extension to a given table to automatically populate certain columns or whatever. I should also be able to make predefined searches that I can extend without going crazy.
This isn’t hard. I use a pretty powerful web framework, but you don’t even need all of that. I need reasonably flexible dispatching, a well-defined “flow” (so I can hook in at different levels and do validation or whatever else,) sensible MVC helpers, and a development server so I don’t need to install a server on my laptop get work done.
There’s more depending on what you do. For example if you do a lot of event driven programming you need a solid framework (or at least language level programming.)
I can’t think of a lot of languages that violate this, but I might as well put it down.
My time is worth more than the computer’s. I don’t want to waste time with memory allocation.
What languages (aside from Perl and Javascript) support these features that you use?
7 Responses for "Why I Won’t Use Your Programming Langauge"
There’s a Javascript ORM? *shudders* my time is worth more than my computers to an extent… if the application is so slow it wastes my time on a regular basis… then there’s a problem, which is why reasonable performance and startup time is a must. I don’t want to wait a minute everytime I start up an application, for it to load.
“My time is worth more than the computer’s.”
Sorry but that philosophy is why we have so many bad programmers and slow, bloated software. This ever growing “set it and forget it” generation who sees the solution to slow code as “throw more hardware at it” is starting to drive me crazy.
Your time may be worth more than YOUR computers, but it worth more than the time of 100k of your clients computers? Is your time worth more than the $25k your company just dropped on new hardware because the old servers “couldn’t handle the load”?
I know you’re a good programmer, so I’m not harping on you, but please don’t promote that.
@Colin and Caleb: you guys are both right. Optimally you will be using a language such that you have the option of doing your own garbage collection if speed is a problem. All the major languages out there except JavaScript have something for that.
Also, I would *never* say that bad programming is ok when it comes to performance. On a regular basis I help my coworkers tweak their SQL Queries (our typical bottleneck) as making something go from 5-10s to 100-500ms is *totally* worth it.
Okay, so I totally agree, Perl does what you describe better then just about any other language out there that I have tried. That said .NET is not all that bad and only just barely misses your requirements.
C# does have anon subs, they are called delegates, and in the newer versions they actually have a proper anon-sub/lambda construct. And if you can get away with it, F# is pretty damn nice language and most certainly has anon-subs (and a badass module system and auto-currying and deconstructing binds and all sorts of cool stuff).
As for dynamic scope, F# most certainly has it and C# kinda sorta has it IIRC.
The .NET OSS community is actually pretty good, it is not as big or as social as the Perl community, but there are a number of good solid OSS projects out there many of which are offshoots of ASP.NET MVC (which itself is released under Microsoft Public License, which is not true OSS, but at least you can see the code).
Backwards compat, yeah nevermind, M$ sucks at that (how else will they force you to pay for the same thing again). And extension distribution network, not really the same as perl, but that said it is kind of nice to just drop a DLL in the bin directory and have things pretty much Just Work (most of the time, at least as often as it works for Perl).
Good ORM, .NET has plenty, as well as LINQ, which is pretty darn cool. Personally I am not much of database guy, but given the enterpriseiness of most of the .NET world, I suspect that their ORMs are at least as robust as what we have for Perl.
Good web framework, have you taken a close look at ASP.NET MVC? It is pretty decent and a lot more flexible then the old crappy classic ASP stuff. There are also a couple of OSS ones out there, I haven’t personally tried them, but I have looked them over.
Of course the cross platform thing is limited by how much the Mono project has managed to catch up to M$, which sometimes is good, sometimes is bad. But garbage collection on .NET is better then Perl since it is proper mark-and-sweep and not simple ref counting.
Oh, and because .NET is really a platform more then a language you can actually have your choice of language and get a really high degree of language interoperabilit (which is actually I think one of .NETs strongest points and where is really kicks Java’s ass).
As for other languages that meet your requirements, I would suspect that Python and Ruby easily meet them (Python’s lambda’s suck though, but it does have funcallable objects, which is as good and sometimes even better). And as much as it pains me to say so, I suspect PHP (shiver) would meet them too. I am not convinced that Javascript actually does meet your requirements yet, but give Node.js another couple years and I am sure it will.
Anyway, I think you just need to go too cooler parties, I mean seriously how fun a time can you have with a bunch of .NET programmers??
So what I’m reading is a strong need for good tools more than a decent language. Catalyst is not perl, but written in perl. CPAN is not perl but a distribution tool for perl code.
Out of your complaints about C#, it looks like it’s only missing dynamic scope and anon subs (in the new version IIRC). Everything else you listed is about the tools or community built around the language and not the language itself.
As a professional PHP developer, I’m pretty sure my camp has all of that except for dynamic scope. Please don’t use PHP. If they’d only just take care of the standard library, it would automatically be a better language. But of course, that won’t happen due to strong backwards compatibility.
I’ve started learning Ruby recently, partially because Python’s lambda support is pants, partially because the Ruby community is both prolific and insane, and partially because even post graduation I am haunted by Bass’ constant recommendations of the language. Horrifyingly, Ruby has awful cross platform support. It’s swimming upriver against waves of compiler errors should you want to install anything on Windows that depends on more than a few gems. The proliferation of broken libraries and frameworks also puzzles me. Shame; it looks like a really nice language.
[...] I’m just a tool for thinking this guy just has confirmation bias. I’ve done the same thing of course in arguing against C#, so maybe I’m just as bad, but I can hardly take these [...]
Leave a reply