메뉴
HN
Hacker News • 47일 전

충분히 재미있지 않기 때문: 프로그래밍 언어가 실패하는 이유

IMP
7/10
핵심 요약

프로그래밍 언어의 성패는 순수한 기술적 우수성보다 사회적, 경제적 요인에 의해 결정됩니다. 개발자에게 프로그래밍은 직업, 예술, 소명의 세 가지 역할을 동시에 수행해야 하며, 언어가 이 세 가지 중 어느 하나라도 불필요하게 어렵게 만든다면 대체 가능한 순간 도태됩니다.

번역된 본문

앤드류 오람(Andrew Oram)은 리눅스 전문가 자격증(LPI)을 위해 프로그래밍 언어가 왜 흥하고 쇠하는지 묻는 2부작 시리즈를 작성했습니다. 이 시리즈는 대략적으로 다음과 같이 말합니다. C, C++, 자바스크립트는 (당분간) 불멸이며, 자바(Java)는 그럴 가능성이 있습니다. COBOL, FORTRAN, BASIC, Perl은 존경받는 삶을 살고 농장으로 은퇴했습니다. 파스칼(Pascal), Objective-C, PL/I, 에이다(Ada), Tcl은 실패한 출발이었고, 루비(Ruby)는 희망고문을 당하는 중간 어딘가에 있습니다. 이것은 평생 이 산업의 책을 편집해 온 사람의 훌륭한 탐구이며, 그 끝무렵에서 오람은 사이먼 페이튼 존스(Simon Peyton Jones)를 인용합니다. 그는 언어의 채택은 "기술적 장점과 매우 약하게 연결되어 있으며", 사회적, 경제적 요인이 실제 결정을 내린다고 관찰했습니다.

그 인용구가 이 기사의 핵심인데, 그것이 내용의 이토록 깊숙한 곳에 묻혀 있다는 것은 약간 놀라운 일입니다. 어쩌면 인간의 본성에 맞춘 엔지니어링은 우리가 그렇게 노골적으로 읽고 싶어 하지 않기 때문에 그 인용구를 주된 논지로 삼는 것을 어렵게 만드는지도 모릅니다. 하지만 사실입니다. 언어 채택은 전적으로 기술적인 것이 아니라 기술적이고 인간적인 것입니다. 그 인용구 앞의 두 부분에 있는 모든 것은 이 감정에 대한 증거이며, 증거로 모여 있지만 증거로 정리되지는 않았습니다.

이 시리즈는 결과에 따라 언어를 분류합니다. 불멸, 존경받음, 그리고 실패. 흥미로운 분류는 사인(死因)에 의한 것이며, 그 원인들은 페이튼 존스가 압축하고 오람이 둘러싼 간단한 관찰에서 나옵니다. 프로그래밍은 사람에 의해 이루어지며, 사람들에게 있어 프로그래밍은 동시에 세 가지입니다. 그것은 소명(vocation)이자, 예술(art)이며, 직업(job)입니다.

언어는 이 세 가지를 모두 실천하는 사람을 위해 봉사하며, 이 세 가지 중 어느 하나라도 불필요하게 어렵게 만드는 언어나 도구는 대체될 수 있는 순간을 넘기지 못할 것입니다. 소명은 세상이 우연히 돈을 지불해 주는 부름입니다. 월급을 받든 안 받든 누군가가 어쨌든 할 일입니다. 예술은 누군가가 사랑과 (바라건대) 기술로 인해 하는 일이며, 직업은 매일의 일상 업무로, 누군가가 밥을 먹고, TV를 보고, 지붕 아래서 자고, 그런 지루한 것들을 할 수 있게 해주는 일입니다. 음악가들은 매 일하는 날마다 이 삼중 정체성을 살아갑니다. 커버 곡 세트는 직업이고, 오리지널 곡은 예술이며, 소명은 예약이 있든 없든 매일 그들의 손에 악기를 쥐여주는 것입니다. 프로그래머들도 그것을 살아갑니다. 우리는 그냥 그렇게 자주 말하지 않을 뿐입니다.

그렇게 시체들을 분류하면 그것들은 깔끔하게 분리됩니다. 일부 언어는 직업으로서 실패했습니다. 표준 파스칼은 사용 가능한 문자열(string) 유형 없이 출하되었고 Tcl은 특정 무게 이상의 프로그램을 감당할 수 없었으므로, 일상 업무가 필요 이상으로 더 힘들었습니다. 일부는 예술로서 실패했습니다. 에이다(Ada)와 PL/I은 프로그래머에 의해 선택되기보다 프로그래머에게 강요된 선택이었으며, 명령의 언어였고 아무도 명령을 사랑한 적이 없습니다. 일부는 소명으로서 실패했습니다. 펄(Perl)의 구직 시장은 파이썬(Python)으로 걸어 갔고 돌아오지 않았습니다. 그리고 하스켈(Haskell)은 유명하게도 어떤 대가를 치르더라도 성공을 피하겠다는 목표를 세웠고, 그 목표를 달성했습니다.

병은 다르지만, 병리는 하나입니다. 모든 경우에서 누군가가 세 가지 축 중 하나를 불필요하게 어렵게 만들었고, 언어가 의존하던 사람들은 더 쉽거나, 더 재미있거나, 더 실용적인 곳으로 향했습니다. 삶을 힘들게 만드는 언어는 대체될 수 있는 순간을 넘기지 못할 것입니다.

그 명제는 오람의 목록에 있는 모든 이상 현상을 설명합니다. 자바스크립트(JavaScript)는 그것을 작성하는 상당수의 사람들에게 예술로서는 실패하지만, 여전히 브라우저의 주요 범용 언어이기 때문에 어쨌든 살아남습니다. Objective-C는 예술과 직업 모두로서 어색했지만, 역사상 가장 수익성 높은 개발자 생태계로 들어가는 유일한 문이었기에 15년 동안 번성했습니다. 스위프트(Swift)가 등장한 순간 그것은 증발했고, 지금은 후손 안에 보존된 그림자로 살아남습니다. COBOL은 교체하는 것이 너무 어렵고 비용이 많이 들기 때문에 살아남습니다. 이는 일부 기업들이 인지하고 해결하려고 노력하고 있는 부분입니다. 그들이 성공한다면, COBOL은 사라질 가능성이 높습니다. 100%의 시간 동안 작동하지만 프로그래밍하기에는 약 1% 정도의 재미밖에 없는 언어이기 때문입니다. 에이다(Ada)는 인증 제도가 그것을 거의 대체 불가능하게 만든 곳에서 오늘날에도 살아남습니다. 그것의 어려움은 상시 퇴거 통지서와 같습니다.

원문 보기
원문 보기 (영어)
history language psychology software engineering Andrew Oram wrote a two-part series for the Linux Professional Institute asking why programming languages rise and fall (parts one and two .) It says, roughly, that C, C++, and JavaScript are immortal (for now!), with Java a maybe; COBOL, FORTRAN, BASIC, and Perl lived respectable lives and got sent upstate to retire on a farm; Pascal, Objective-C, PL/I, Ada, and Tcl were false starts, with Ruby somewhere on the bubble. It's a good tour from a man who has been editing this industry's books forever, and near the end of it, Oram quotes Simon Peyton Jones, who observes that a language's adoption is "very weakly connected to its technical merits," and that the social and economic factors do the actual deciding. That quote is the article, and it's a little surprising that it's buried so far into the content; maybe engineering for human nature makes it difficult to make that quote the leading thesis because we don't want to read that quite so bluntly, but it's true. Language adoption is not solely technical - it's technical and human. Everything in the two parts before that quote is evidence for the sentiment, assembled but never organized as evidence. The series sorts languages by outcome: immortal, respectable, and failed. The interesting sort is by cause of death, and the causes come out of a simple observation that Peyton Jones compresses and Oram circles: programming is done by people, and for people it is three things at once. It is a vocation , an art , and a job . A language serves someone practicing all three, and a language or tool that makes any of the three unnecessarily difficult will not survive past the moment it can be replaced. A vocation is a calling the world happens to pay for: something someone would do anyway, paycheck or no paycheck. An art is something someone does out of love and (hopefully) skill, and a job is the daily work, the thing someone does so they can eat and watch TV and sleep under a roof and boring stuff like that. Musicians live this triple identity every working day: the covers set is the job, the originals are the art, and the vocation is what puts an instrument in their hands every day, booked or not. Programmers live it too; we just don't say it out loud as often. Sort the corpses that way and they separate cleanly. Some languages failed as a job: standard Pascal shipped without a usable string type and Tcl couldn't carry programs past a certain weight, so the daily work was harder than it had to be. 1 Some failed as an art: Ada and PL/I were chosen for programmers rather than by them, languages of mandate, and nobody has ever loved a mandate. Some failed as a vocation: Perl's job market walked to Python and didn't come back 2 , and Haskell famously set out to avoid success at all costs , a goal it achieved 3 . Different diseases, one pathology. In every case somebody made one of the three axes needlessly difficult, and the people the language depended on went where it was easier, or more fun, or more workable. A language that makes life hard will not survive past the moment it can be replaced . That statement explains every anomaly on Oram's list. JavaScript fails as an art for a large share of the people writing it, and it survives anyway, because it remains the browser's main general-purpose language 4 . Objective-C was awkward as both art and job, and it thrived for fifteen years because it was the only door into the most lucrative developer ecosystem ever built; the moment Swift existed, it evaporated and now survives as a shadow, preserved in its descendant. COBOL survives because replacing it is too difficult and expensive - something some companies are noticing and trying to address. If they succeed, COBOL is likely gone : a language that works 100% of the time and is about 1% fun to program. Ada survives today where certification regimes made it nearly irreplaceable 5 . Its difficulty is a standing eviction notice. It gets served on the day an alternative shows up, and not one day sooner. Which leaves C++ looming, difficult and immortal, apparently contradicting all of this. Rust too, difficult by design and rising. The thing is that there are two kinds of difficulty, and the series conflates them. One kind of difficulty is the violin's: precise, demanding, and chosen because it is precise and demanding. People do codegolf in C++ for sport. People write essays about the day the borrow checker finally clicked, the way string players talk about the day vibrato stopped being a fight. Difficulty itself isn't fatal; difficulty without sufficient return is . C++ and Rust have that return, just as the violin does. The other kind of difficulty is friction: Ada's compliance apparatus, standard Pascal's missing pieces 6 , COBOL's amazing and precise and demanding structural syntax that doesn't actually create program structure much at all. Nobody ever wrote an essay about the day Ada's paperwork clicked. That difficulty hits all three axes for... what? Nothing. Ada and C++ both read as "hard languages" in a survey. But Ada dies as a standard language and C++ survives today because the "hard" parts were on different axes. And where is Java in all of this? Good question! Java isn't as difficult as C++ or Rust, so it doesn't need their defense: it's sort of immortal from utility AND fun right now, with a lot of passion restored to the ecosystem thanks to the recent improvements in packaging and features. But that's an entirely personal decision on the part of the programmer; I think it's safe to say Java ain't dying quite yet, but it's hard to say why or when: I'm personally living in Java-land day by day. I'm biased. Back to music, then, where the analogy stops being an analogy. A modern sampler can reproduce every note a violin makes. It can reproduce every nuance a violin makes; it is an encyclopedia of techniques, bowings, articulations, the works. And getting it to actually do all of that is more work than just playing the violin itself 7 ! The capability was never the question. It turns out that the best way to get a sound like a violin being played is actually playing the violin . This is also, quietly, why code exists: a program is a compact specification for behavior, and describing behavior in prose costs more than the notation built for the job 8 . I can get a computer to play guitar for me, and I can make it play much as I do on guitar: I know how I play, I understand my own preferences and accents. I can replicate my playing on guitar, gesture by gesture, note by note. And it is no fun. None. The result is fine; the doing is gone, and the doing was the point. There is no life to it, even if I introduce randomization or use my own timings. This fails along the same three axes as everything else we've mentioned here. For the person who only wants the notes, the sampler wins the job outright, completely. It will never play the wrong thing or at the wrong moment. For the person playing , it fails, because driving it costs more than playing, and it never touches the art at all. Which is why, when I want guitar on a track, I still reach for the guitar. Choosing it is the point. The law that sorts programming languages sorts their successors too. No special pleading required... or allowed. So: why do programming languages rise and fall? Peyton Jones already said it, and Oram already quoted it. Languages don't lose benchmark fights. They lose people . They rise when they make the vocation, the art, and the job lighter, and they fall on the day something else can carry the same weight, because at that moment the only question left is... is it fun? 9 An aside on Pascal, because the false start is... slightly misleading. Pascal's commercial life didn't end in the classroom; it moved to Borland, where Turbo Pascal and then Delphi dominated PC development for over a decade. Turbo Pascal's author was Anders Hejlsberg , who went on to build Delphi, then C#, then TypeScr