Live data from Hacker News

The Flub Paradox

steved-imaginaryreal.blogspot.com

31–40 of 77 posts

Re: The Flub Paradox

#31
post #7

Is there even a meaningful definition of 'powerful'? I guess C# 4 is strictly more powerful than C# 2 since it only adds features, but how to compare the power of Haskell versus Rust? They are designed for different domains.

Of course, I wanted to emphasize that there is no single power continuum, so PG's argument rests on sand.

There is for each problem domain, spreadsheets for example are a great tool for a tiny set of problems. Lisp was incredibly well suited to solving ViaWeb's problems. The landscape changed and continues to evolve, but I can't use 2050's programming languages. So, picking the best language for each project based on when your starting it really is an important choice.

Also of note, Lisp was an old language in the mid 90's so the compiler was a non issue.

Re: The Flub Paradox

#32

Those are very keen observations and not commonly voiced in that combination. I can't remember the last time I read an article about the development of PLs that I agreed so much with. If I had to venture a guess about future development in PLs, there would only be one pattern that I find reliable enough: In a rough birds eye perspective, PLs have moved from hardware-specific things handling mutable state to more form…

Haskell isn't "overdone". It's extremely principled and requires that, for example, you put the existence of stateful effects (e.g. I/O) in the type system. It requires you to specify state (to a degree, and with escape hatches); it doesn't eliminate it.

Haskell isn't that much of an investment when you consider what is gained. See, learning any new code base takes 3-6 months, and if the code is great, you learn a lot. If the code is garbage, well... perhaps you learn what not to do. Compared to the slog of learning a new corporate codebase, the effort involved in learning Haskell isn't that much... and the hope with Haskell is that the next software project you write won't be unmanageable... and I think that even average-case Haskell realizes it. (I focus on the average case because, of course, you can write shitty code in any language and you can write good code in any language, but languages differ in what tends to happen on average.)

Re: The Flub Paradox

#33

Earlier quoted context omitted.

I don't think naming names was a mistake; rather, I think the names demonstrate that your thesis doesn't have anything to do with "Beating the Averages". I mean, by your definition, Flub is literally every new language, modulo a few that are too domain-specific. Hell, Flub need not even be a powerful language, just a language with crackpot users. So, rather than about being any averages, it appears to me that your po…

Every day I work with C++, and I've learned not to shoot myself in the foot. If it were the pinnacle of PL development, I would be depressed; there has to be a successor at some point (Data point: who remembers Algol 68 or PL/1?). It would please me if something like Nim gained traction, because it's C++ _done cleanly_. I was just pointing out that adoption of new languages is very much "Crossing the Chasm" - after t…

C++ is obviously not the pinnacle of PL development, but real-world impact is something else entirely.

Unfortunately, the data point doesn't mean much; we tend to, collectively, reach a platform that's "good enough" and then just stop looking. So just because Algol 68 is no longer used does not mean C++ will eventually go the same way; indications are that it's a "good enough" language that will continue to see massive use.

More to the point, everything, or at least most things, written in C++ would have to be rewritten. This is enormous inertia compared to Algol 68.

>I was just pointing out that adoption of new languages is very much "Crossing the Chasm" - after the enthusiastic early adopters, the gap until the mainstream starts listening.

I don't get your point (not trying to be rude; I literally don't get how it ties in to your article).

Re: The Flub Paradox

#34
post #26

You could also summarize this article in one sentence: the choice of programming language is driven by the market and not the opinion of a single person. That means that not always the best one wins, but the one which has most appealing properties. And those are not necessarily the "beatifulness" or some academic aspects, but rather: popularity (and easyness of finding programmers), understandability, availability of…

>summarize this article in one sentence: the choice of programming language is driven by the market and not the opinion of a single person.

I wouldn't summarize it that way. More accurate would be: "the effectiveness of a programming language is driven by multi-dimensional factors instead of a single factor such as expressiveness of syntax. One's expert usage of a language can lead him to overestimate its overall effectiveness."

When people debate programming languages using words like "simple", "powerful", "better", it's not very precise. It's actually misleading. All those labels have multidimensional factors but people discuss them as if they are a single dimension scalar.

E.g. "Golang is simple" -- it's simple in keyword count but not simple in terms of implementing a family of algorithms that differ only by type. The paradox of "simple" has contradictory conclusions because that word has multiple dimensions. Therefore, if one's typical use case of Go does not involve templated algorithms, it is perceived as "simple" and one would proceed to evangelize the language as "simple."

Same type of analysis can be done for words like "power", "better", "easier", etc.

Yes, languages like Haskell/Lisp/Ocaml/F# etc have more expressive syntax but there are other dimensions in creating software that can overwhelm that advantage. This is why PG can have reasonable opinion on the "power" of Lisp but Aaron Schwartz came to a different reasonable opinion[1] and determined Python in his case to be more appropriate for Reddit. Aaron was not stupid and he knew how to write Lisp. To understand Aaron's viewpoint, you have to notice that he's using different dimensions of the word "better".

[1] http://www.aaronsw.com/weblog/rewritingreddit

Re: The Flub Paradox

#35
I just got back from a very positive strategy meeting with my partner (I do the code and he does the ops and the sales) and this essay struck a chord with me. Why are we making so much progress when I'm a decidedly average programmer? I think it's because I'm a decidedly average programmer in enough languages to know what their strengths and weaknesses are and thus to be able to pick the right tool for the job:

- hardware-accelerated video decoding on the ARM - C obviously, with a small amount of ASM.

- web server - Python using web2py

- web interface prettiness - jquery and javascript

- server processes and admin automation - Python

- core apps - Luajit because it's so fast on the very limited ARM boxes we're using

- customer data munging and reports - emacs lisp because it's right there

- desktop apps for Windows, OSX and Linux - Python again

- some bash and Perl for sysadmin stuff

What Steve doesn't say - although it is implied - is that he knows enough languages at a practical level to make these kinds of judgement calls. And I know for a fact he's a far better coder than I am because I use his Penlight library for Lua every day.

Perhaps Flub can never be a force for change the way Lisp was because modern languages are incorporating enough features from Lisp to bring them close enough to the top of the hierarchy not to matter as much as before.

Re: The Flub Paradox

#36

The description of Rust in this blog post is not accurate in my opinion. 1. Compile times aren't great right now, but 20s for 2400loc is a real anomaly, and improving compile time is a focus of the team now that the language is stable. This is the only specific painpoint the blog post mentions with Rust, and its just a single anecdote. 2. The idea that Rust is a premature optimization is a weird meme. Faster, safer,…

It was perhaps unfair to single Rust out given that it is so young, but there are costs to any innovation, and the first cost that leaped out at me was stories of long compile times. Besides, extraordinary claims require extraordinary evidence. Personal anecdotes of increased productivity remain anecdotal - it may be more a property of the programmer than the language. I don't personally have a horse in the race, but…

I really don't expect Rust to exhibit what most people mean by "increased productivity", ever. Most people mean something fairly local by that, or at most medium sized, that it allows them to take some task and write code faster than other languages that accomplishes the task. Rust is always going to labor under the disadvantage that it holds you to a higher degree of correctness than other languages, and at best it can tie with another language that doesn't hold you to those guarantees of correctness.

Where it'll increase productivity or not is at larger scales. If Servo comes out at production quality in some reasonable time (call it 2 years or less from now, given where they are), able to function on the general web most of the time, and it's also faster than current renderers by a significant margin, and with some small fraction of the development effort (probably even if you include the entire Rust development effort; do not underestimate the effort poured into the existing engines!), I will consider Rust's story proved. We've now had many people take cracks at writing renderers, in the fastest language of the time for the task (C++), and I daresay they've converged at fairly similar levels of performance with little reason to believe the renderers are going to get much faster. Said renderers have had massive optimizations applied to them, and this Servo that I'm expecting to be much faster will actually be version 1.0, basically.

If Rust is to work at all, there will very, very rapidly be a class of development that it will be actually insane to write in anything but Rust... but that will only be the very high-and-large end. (It will take many more years for this fact to penetrate through to the development community at large.)

Re: The Flub Paradox

#37

Earlier quoted context omitted.

I knew C; C was a friend of mine. Javascript, you're no C! When it appeared, C was a revolution in programming languages. It offered a combination of performance and expressiveness that simply outclassed anything else available (still true today, 43 years later, if more narrowly). It instantly became the most popular and held that position to this day, becoming a major influence on virtually every other popular progr…

> much superior, existing scripting languages (Python, Ruby, even Perl or some Lisp dialects) were passed over Python existed in 1995, but I doubt it was very known at the time. Ruby was created in 1995 Lisp is older, sure, but maybe there were concerns about the syntax and interpreter requirements? "But, all things considered, it was as close to perfection" Pascal didn't have a braindead way of dealing with strings.…

Yes, C's string handling is pretty crappy (especially given how important a data type strings are in Unix). And its operator precedence rules aren't always the best. But just like 10 million Elvis fans can't be wrong, neither can a language that is to programming what Elvis, the Beatles, and Michael Jackson put together were to music be anything other than a triumph of engineering.

Better string handling or not, just as surely as video killed the radio star at about the same time, C killed the Pascal programmer. And the FORTRAN programmer, and COBOL, and BASIC, and assembler, and pre-1972 Lisp, and all the other old programming languages that are nowadays too obscure for me even to list. And operator precedence or not, every non-Lisp programming language of any popularity today apes C's syntax, not Ada or BASIC or somesuch.

I'm not saying C is perfect. I don't even particularly like coding in C; I'm just saying that it just was a huge breakthrough in programming language design at the time it came out, and was overall the best designed language ever to that point (which, Lisp fanatics and Donald Knuth aside, I think most would agree with). Certainly not something you could ever say about JavaScript with a straight face.

My point re scripting languages was that if Netscape had wanted to be on the bleeding edge, they still had much better choices. JavaScript is a programming language created in one week, where one of the major design considerations was to be an advertisement for a different programming language, and it shows. It certainly showed in 1995, before we had 20 years, billions of dollars and millions of man-hours invested by all the major companies in optimizing VMs, improving the standard, creating libraries and all the other miscellaneous forms of putting lipstick on a pig.

Re: The Flub Paradox

#38
This is intelligently argued and articulate but the content is a bit lacking.

First, Paul Graham isn't an expert on languages. He wrote a decent Lisp book, years ago. Relative to VCs, he's a technical genius. Relative to technical geniuses, he's a VC. I respect him for taking iconoclastic positions against the Establishment, and I miss that Paul Graham, but... he has serious blind spots when it comes to, say, statically typed languages.

Now, PG probably intended "Blub" to mean a mediocre language du jour like C++ (in the early 1990s) or Java (since the late '90s) but Blub is more of an attitude than a language. Yes, there really are one-language programmers who can't think out of a specific paradigm. They exist, and they're the ones who write FactoryVisitorFactory classes because they haven't been exposed to functional programming and the right way of solving certain problems. That said, there are cases where C or Java is the absolute right language to use. Not many, for Java, but they exist. Not everyone who uses those "Blub languages" is a mediocre programmer; Java is not always Blub, and C is definitely not always Blub (in fact, it's out of fashion among the Blubanistas, who avoid low level programming because "it's too hard".)

As for "Flub"... I don't even know where to begin. Just going to snipe specific points.

'Power' and 'Expressiveness' turn out to be separate concepts. In the end, there is no simple continuum that you can use to line programming languages up, nose to tail, feeble to awesome.

I agree with this, whole-heartedly. Assembly and C, I would argue, are more powerful than Haskell because it makes it so much easier to create custom control flows and to manage memory explicitly. Haskell is more expressive. You trade some power, in exchange for a language that allows you to write very robust code, very quickly. But sometimes you need that power and C is the best option.

To use it effectively, however, requires using an IDE, and Flubbists hate IDEs, partly because their finger muscle memory has been overspecialized from spending too much time in Eighties power editors, but also because using an IDE is too closely associated with Blub practices.

No, we dislike IDEs (actually, we don't; we dislike broken languages and codebases that require us to use IDEs) because it's a lot easier to keep flow when you're using the keyboard only. Switching to the mouse to recompile breaks flow.

IDEs also have a stigma because they're most useful when you're maintaining other peoples' code, which generally is a disliked sort of work given to juniors. So, IDEs tend to be associated with the second-class programmers who spend most of their time on maintenance work. I, personally, think the "reading code is for losers" attitude that many programmers cop is stupid and counterproductive. I enjoy reading good code and I wish that I had better tools for doing it.

A disruptive startup is more likely to use Blub in creative ways, focusing on the idea, not the implementation. Facebook dominated its market - using PHP - which everyone agrees is crap. Google built up the world's biggest advertising agency using Java and C++; Android is a Java-like ecosystem that runs in most pockets these days.

Oh, this shitty argument. "Your tech should be boring, your product should be interesting." Yawn. It's a bullshit argument and I'll tackle it another time.

Google was originally written in Python, which was more of a reach than Haskell is now. Python sucked in 1998. Also, the late '90s were a time when PL was considered to be a dead field, so PL never worked its way into Google's DNA and it's stayed that way. They use C++ because it was the best choice in the late 1990s, and they tolerate Java in the context of acquisitions, and when they tried to come up with their own language... the best they could do is Go.

Facebook started on PHP but is increasingly innovative on the language front, with Erlang, Ocaml, and Haskell getting a presence.

You put a group of merely good Lisp programmers on a project, and embed them in a corporate environment, and the stellar results are likely to be not reproducible. (I don't doubt they will be more productive than Java programmers. But will the result blend?)

"Will it blend?" I'm sorry, but I prefer not to think of my work as something that will be ground to a pulp. If that's the kind of work you want, then hire a Scrum drone, not someone like me.

Big companies understand this problem well, and prefer Blub programmers, who are easier to source and come with less attitude.

False. Do Haskell programmers come with more "attitude" than mediocre Java programmers? Yeah, there's probably a slight difference. However, the problem isn't "Haskell programmers" or "Java programmers" but people. People are just a pain in the ass: all of us, to some degree. Since you need 30 Java programmers to do the work of 5 Haskell programmers, you not only have more sources of "attitude" with the 30, but you have more politics and less per-person productivity on account of the larger team.

Re: The Flub Paradox

#39
post #30

> it is unlikely that major operating systems will emerge written entirely in Rust Why?

It is unlikely that a major new operating system will emerge at all because of high investment cost, momentum and compatibility

Re: The Flub Paradox

#40
post #6

> To use it effectively, however, requires using an IDE, and Flubbists hate IDEs, partly because their finger muscle memory has been overspecialized from spending too much time in Eighties power editors, but also because using an IDE is too closely associated with Blub practices. (People who can't ride a bicycle without training wheels, basically.) This also has an attitude. Certain things an IDE is almost required,…

Ever so slightly ;) I think it admirable that people invest a lot of time in the environments they spend so much time in, but a professional has to be flexible. (It is entirely possible that my sarcasm got out of control here.)

Just out of curiosity, what makes you say IDEs are bad?
Post reply on HN