Edsger Wiebe Dijkstraは、特に、プログラマのプロの変形の深theを概説し、1つまたは別の不快なプログラミング言語を好む、いくつかの大胆で表現力豊かなステートメントの著者として知られていました。 以下のダイクストラの推定は、特に悪名が高い(
Wikiquote から引用する)。
- 「COBOLでのプログラミングは脳を不自由にするので、学習することは犯罪として扱われるべきです。」 (「COBOLの使用は心を傷つけます。したがって、その教えは犯罪と見なされるべきです。」)
- 「以前にBasicを学んだ学生は、優れたプログラミングを教えることはほとんど不可能です。 潜在的なプログラマとして、彼らは不可逆的な精神的劣化を経験しています。」 (「BASICを以前に経験したことのある学生に良いプログラミングを教えることは事実上不可能です。潜在的なプログラマとして、彼らは再生の希望を超えて精神的に切断されています。」)
ダイクストラは2002年8月6日に亡くなりました。 今日、彼の死から10年以上経った今、私たちは周りを見回して自分自身に問いかける権利を持っています。 言い換えると、現在(現在)広く使用されているプログラミング言語の中に、使用する傾向のあるプログラマーにとって、プロによる顕著な変形のほとんど避けられないリスクを伴う言語がありますか?
彼らはそうだと思う。 そして、これらは主に
書き込み専用言語の定義に該当する言語です。つまり、通常はそうですが、そのようなソースコードの書き込みを奨励します。その読み取りと理解は非常に難しく、不合理に困難です(原則として、コードの著者による書き込みよりもさらに難しい)言語は逆でなければなりません。
これらの言語の中で最も一般的なの
は Perlです。
落ち着いてください:Perlを指差して悪いことを宣言するつもりはありません。 証拠も詳細もなければ説得力のない結果になっていたでしょう。 そして、それが今、人生から取られた例を使用して、Perlがプログラマーの意識に作用し、見苦しい
書き込み専用であることが判明するコードを
書くことを奨励する4つのメカニズムを示す理由
です。この例はfidosです。
3日前、50番目の地域のsysopsのFidonetエコー会議は、タイムフラグ
( Txy 形式 )がノード記述行のメイン(ユーザーではなく)部分にあるような新しいFidonetノードリスト形式
( 英語の nodelist)に切り替える意図を議論しました。 sysopsの1つは、システムの動作を誰でもチェックできるように、事前に新しい形式でノードリストを作成することを提案しました。
╔═════════════════════════════════════════════════════──────────────────────── ║ : R50.SysOp ( ) ║ URL : area://R50.SysOp?msgid=2:5000/111+503b7f4b ║ : Oleg Redut, 2:5000/111 (27 Aug 12 21:06) ║ : Vladimir Donskoy ║ : Txy ╚════════════════════════════════════════════════════════════════════───────── @REPLY: 2:5020/5480 503a828c @MSGID: 2:5000/111 503b7f4b @CHRS: CP866 2 @TZUTC: 0700 @TID: hpt/w32-mvcdll 1.9.0-cur 12-03-11 (current) , Vladimir! VD>> , - VD>> . AB> - . . :) , . - , . . :) ?.. Oleg ... AKA oleg(&)redut.info AKA ICQ 28852595 ■■■ GoldED+/W32-MINGW 1.1.5-b20120515 ( ) √ Origin: --- ... ... --- (2:5000/111) @PATH: 5000/111 5020/1042 830 ────────────────────────════════╪══╬═╣()╠═╬══╪════════────────────────────────
私は意図的にすべての技術情報とともにこの手紙を引用しました。 手紙の冒頭に
「hpt / w32」 の記述があり
、最後に
「GoldED + / W32」の記述があります。このfidoshnikはWin32用に設計されたソフトウェアを使用している、つまりWindowsで動作することがわかります。
そして、この手紙に対するPerlプログラマーの応答は次のとおりです。
╔═════════════════════════════════════════════════════──────────────────────── ║ : R50.SysOp ( ) ║ URL : area://R50.SysOp?msgid=2:463/68+503b854d ║ : Pavel Gulchouck, 2:463/68 (27 Aug 12 17:32) ║ : Oleg Redut ║ : Re: Txy ╚════════════════════════════════════════════════════════════════════───────── 27 Aug 12, Oleg Redut ==> Vladimir Donskoy: VD>>> , - VD>>> . AB>> - . . :) OR> , . - OR> , . OR> . :) U,Txy : perl -pe 'next unless /(([^,]*,){6,})U(.*)/; ($l,$u)=($1,$3); while ($u =~ /^(.*,)?(T[A-Xa-x]{2}),?(.*)/) { $l.="$2,"; $u="$1$3" }; $_="${l}U$u\n"; s/,U?,?\s*$/\n/' ────────────────────────════════╪══╬═╣()╠═╬══╪════════────────────────────────
Perlの2行と数行のコード。 このコードは、簡単にわかるように、
書き込み専用の定義の大部分に該当します
。しかし、Perlはこのコードを正確に何にするのでしょうか?
まず、正規表現の控えめな豊富さ。 Perl言語は、関数を呼び出すよりも正規表現を使用する方が多少便利になるように設計されています。 これにより、Perlプログラマーは、単純な関数(たとえば、文字列からコンマまたは他の文字で区切られたフラグメントを抽出する
split関数)に類似した独自の(おそらく特定のタスクにより適合した)正規表現をスローするようになりますこの関数を呼び出します。 ソースコードは
書き込み専用です。なぜなら、読者はここで何をしているのかを関数の名前ですぐに知るからです。しかし、正規表現の出現により、理解するのがほぼ一桁難しくなり、注意する必要があります。
第二に、セマンティック
(何かを意味
する )ではなく、短い(この場合は1文字でも)変数名の使用。 パール自身が作成した変数は1文字の名前(
$ 1 、 $ 3 、 $ 6 、 $ _ )を持っているため、変数を操作する習慣は、変数の意味値を放棄してその名前の簡潔さを優先するという感覚をプログラマに徐々に与えます完全に自然
で正当化されます-つまり、FortranまたはBASICの最初のバージョンの暗くて太古の時代にあったように、彼と彼自身の変数は最終的に1文字(
$ l 、 $ f 、 $ uのような)と呼ばれ始めます。 ソースコードは
書き込み専用です。これは、コードリーダーが
$ u変数にユーザーフラグが含まれていることを理解するために
かなりの労力を費やしているためです(名前が
$ userflagsであれば、すぐにクリアされます
)。 $ fには次のフラグ
( $ flag )が含まれ、
変数$ lには行の先頭
( $ line )またはリスト項目
( $ list_item )が含まれます。第三に、Perlでは、制御構造を不自然な順序「コード演算子条件」で記述することができます(たとえば、「条件の
ないコード」または「条件のコード」)。 ソースコードは
書き込み専用です。これは、コードリーダーが最初にすべての前の行と同じように無条件に実行可能なコードを読み取った後、同じ行の状態に気づくためです。つまり、読み取ったコードを再認識せざるを得ないことを意味しますこの条件下でのみ実行可能。 この手法でも、コードの読み取り速度が低下します。ただし、桁違いではなく、2回ごとです。 彼が
「 次の場合を除いて ...」のような簡単な構造だけに制限されていれば、和解することができました。
第4に、
書き込み専用コードの毎日の読み取りで行われた継続的な非人道的な努力(最初は痛みを伴い、その後は喜びに満ちた成功を収めました)は、プログラマーを取り巻く非プログラマーにとってはかなり不快な軽emptを徐々に発達させます。これは、正統派キリスト教に関しては誇りと呼ばれていますが、ルークモアの清算主義の観点からは、ChSV(自称)と呼ぶことができます。 この変形を受けたプログラマーは、周りの全員がLinux版Perlでプログラミングしているわけではないことを心から忘れているか、Linux版Perlでプログラミングしていない人々の運命を本当に気にしていないか、Perlでプログラミングしていない人々を
何らかの形で罰したいという積極的な欲求
を示していますLinuxで。
考えて考えてみてください:レシピは、コマンドライン用の数行のPerlのこれら2つ
だけで構成されますか?
perl -pe 'next unless /(([^,]*,){6,})U(.*)/; ($l,$u)=($1,$3); while ($u =~ /^(.*,)?(T[A-Xa-x]{2}),?(.*)/) { $l.="$2,"; $u="$1$3" }; $_="${l}U$u\n"; s/,U?,?\s*$/\n/'
レシピは、Perlがすでにインストールされ、PATHに登録されているという事実に依存していることがわかります。 これはLinuxで正確に発生しますが、通常はWindowsの場合とはほど遠いです(受信者がWindowsを使用しているよりも少し高いことをすべての皆さんに意図的に指摘しました)。 しかし、Perlプログラマーは、
perl.exeの入手先については何も言いませんでした
。スクリプトがソースデータ(ノードリスト)を標準入力に送信し、標準出力(変更されたノードリスト)から作業の結果を受け入れる必要があることは容易に推測できます。 しかし、Perlプログラマーは、このかなり単純な知識には触れませんでしたが、エンドユーザーによって簡単に不明になったり忘れられたりすることがあります。
さらに、上記のアポストロフィを使用したソースコードのフレーミングは、Windowsでは機能しません。 つまり、レシピの受信者が
perl.exeを取得し
、 「 <input 」 および「 > output 」ファイルを正しく
選択したとしても
、「C:」ドライブで cd 'Documentsコマンドを発行した場合とほぼ同じように、非常にがっかりします。
cd "Documents and Settings" の代わりに
その結果、コードは読み取り専用の場合
だけでなく、実行のために実行しようとする場合にも
書き込み専用の性質を示します。 この効果は少しマゾヒズムを与えます。最初に、プログラマーは性交して苦しみ、最終的にユーザーは性交して苦しみます-文字通り、幸運なことに、しかし技術的に。
(ところで、考えてみてください。なぜザッハー・マゾフの教えは、シェリスムではなく
マゾヒズムと呼ばれることを受け入れられますか?ロシア語で「ペニスのために」、この性的行為と直接、直接的な関係を持っていますか?)
90年代の終わりに、Fidonetで悲観的な予言が広まりました。「
Fidonetは同性愛者によって作成され、ファゴットはそれ
を破壊します。」 一方で、ジェニングス(フィドネットの作者)の有名な型破りな性的指向と、他方で虐待的に振る舞う組織化されたスカムの増加が理解されました。 しかし、過去数年にわたって、私はこのフレーズの私自身のバージョンを使用してきました:「
フィドネットは盗聴者によって作成され、マゾヒストはそれを破壊します。」 同性愛者に対する政治的に誤った態度を示していますが、主なことは、現代のフィドネットの主な問題は、非常に不便なソフトウェアを使用することの根深い習慣であり、時にはセックスをして苦しむ必要があるという深い確信です。
念のため、強調するのが適切です。上記の例では、Pavel Gulchukのせい(優秀なプログラマー、binkp.netドメインをサポートする有力な開発者など)ではなく、Perl言語のせいでプログラマーが徐々に書き込み
専用のソースコードの作成と配布
。 プログラマーが悪くないときでも。
これは、ジョージオーウェルの小説
「1984」の幻想的な言語(コンピューターではなく人間)の「ニュース」を連想させます。これは、ネイティブスピーカーの考え方を徐々に歪め、党の考え方に導く人工言語です。
そして
、サミュエル・ディレニー
による同名の
小説の幻想的な言語(コンピューターではなく人間)
「バビロン-17」をさらに連想させる-コンパクトで思慮深いためにネイティブスピーカーの思考のペースと結論を出す能力を急激に増加させたが、ネイティブスピーカーの考え方を徐々に歪めた人工言語言語、彼をテロリストおよび裏切り者にし、記憶の消去を伴う自己催眠の影響下で行動する。
(
ディラニーも同性愛者であり、さらに黒人で
あったことに注意することは適切です。)