興味深いストーリーを共有したい場合は、回答を投稿してくださいですが、言語をバッシングするためにこの質問を悪用しないでください。
私たちはプログラマーであり、私たちの主なツールは私たちが使用するプログラミング言語です。
最良のものについては多くの議論がありますが、今まで働いた最悪のプログラミング言語についての話を聞きたいですそして私はあなたを悩ませたものを正確に知りたいです。
言語(特にDSL)を設計する際の一般的な落とし穴を避けるために、また将来一般に風変わりな言語を避けるために、このストーリーを収集したいと思います。
この質問は主観的ではなくです。言語が1文字の識別子のみをサポートしている場合( 自分の回答 を参照)、これは議論の余地のない方法で悪い。
[〜#〜]編集[〜#〜]
一部の人々は、この質問がトロルを引き付けるという懸念を提起しています。すべての答えを調べて、1つのことが明らかになりました。回答の大部分は適切で、有用で、よく書かれています。
更新2009-07-01 19:15 GMT
言語の概要が完成し、103の異なる言語から102の回答がカバーされました。私はプログラミング言語として数えられるものについては緩いことに決め、合理的なものを含めました。これについてのコメントをありがとう David 。
これまでに取り上げたすべてのプログラミング言語を以下に示します(アルファベット順、回答とリンク、新規エントリは太字):
[〜#〜] abap [〜#〜] 、 20世紀のすべての言語 、 すべてのドラッグアンドドロップ言語 、 すべての専用言語 、 [〜#〜] apf [〜#〜] 、 [〜#〜] apl [〜#〜](1) 、 AS400 、 Authorware 、 Autohotkey 、 BancaStar 、 [〜#〜] basic [〜#〜] 、 Bourne Shell 、 Brainfuck 、 C++ 、 Centura Team Developer 、 Cobol(1) 、 Cold Fusion 、 Coldfusion 、 CRM114 、 Crystal構文 、 [〜#〜] css [〜#〜] 、 Dataflex 2.3 、 DB/c DX 、 dbase II 、 [〜#〜] dcl [〜#〜] 、 Delphi IDE 、 Doors DXL 、 DOS batch(1) 、 Excelマクロ言語 、 FileMaker 、 [〜#〜] focus [〜#〜] 、 Forth 、 [〜#〜] fortran [〜#〜] 、 FORTRAN 77 、 [〜#〜] html [〜#〜] 、 Illustra web blade 、 Informix 4th Generation Language 、 Informix Universal Server Webブレード 、 [〜#〜] intercal [〜#〜] 、 Java 、 JavaScript(1) 、 [〜#〜] jcl [〜#〜](1) 、 karol 、 LabTalk 、 Labview 、 Lingo 、 [〜#〜] lisp [〜#〜] 、 Logo 、 [〜#〜] lolcode [ 〜#〜] 、 LotusScript 、 m4 、 Magic II 、 Makefiles 、 MapBasic 、 MaxScript 、 Meditech Magic 、 [〜#〜] mel [〜#〜] 、 mIRC Script 、 MS Access 、 [ 〜#〜] mumps [〜#〜] 、 Oberon 、 C のオブジェクト拡張、 C 、 OPS5 、 Oz 、 Perl(1) 、 [〜#〜] php [〜#〜] 、 PL/SQL 、 PowerDynamo 、 PROGRESS 4GL 、 prova 、 PS-FOCUS 、 Python 、 正規表現 、 [〜#〜] rpg [〜#〜] 、 RPG II 、 Scheme 、 ScriptMaker 、 sendmail.conf 、 Smalltalk 、 Smalltalk 、 [〜#〜] snobol [〜#〜] 、 SpeedScript 、 Sybase PowerBuilder 、 Symbian C++ 、 System RPL 、 [〜#〜] tcl [〜#〜] 、 [〜#〜] teco [〜#〜] 、 Visual Software Environment 、 Tiny praat 、 TransCAD 、 troff 、 uBasic 、 VB6(1) 、 VBScript(1) 、 VDF4 、 Vimscript 、 Visual Basic(1) 、 Visual C++ 、 Visual Foxpro 、 [〜#〜] vse [〜#〜] 、 Webspeed 、 [〜#〜] xslt [〜#〜]
80386アセンブラ、VB6、およびVBScriptを含む回答は削除されました。
PHP(順不同)
j
を例にします%j
は、先頭にゼロを付けて年間通算日を返します。j
では、先頭にゼロを付けずに月の日を返します。私は言語で他の牛肉を持っています。これらはほんの一部です。 Jeff Atwoodには 古い投稿 についてPHP sucks。彼はそれは重要ではないと言っています。私は同意しませんが、私たちはそこにいます。
XSLT。
XSLTは非常に奇妙なので、ほとんどの人はXSLTを無視します。使用する必要がある場合は、XSLTシャーマンが必要です。
DOSバッチファイル。これがプログラミング言語として適格かどうかはわかりません。問題を解決できないわけではありませんが、bash
...に慣れている場合は...
ちょうど私の2セント。
本当の言語かどうかはわかりませんが、Makefileは嫌いです。
MakefileにはスペースとTABの間に有意な違いがあるため、2行が同一に見えても、同じようには実行されません。
Makeは、多くの言語の複雑な一連の暗黙のルールにも依存しています。これらのルールは、学習するのは困難ですが、makeファイルによって頻繁にオーバーライドされます。
通常、Makefileシステムは、多くのファイルにまたがって、多くのディレクトリに分散しています。実質的にスコーピングや抽象化が行われていないため、複数のディレクトリにあるメイクファイルを変更すると、ソースをビルドできなくなります。ただし、エラーメッセージは常にコンパイルエラーであり、makeやmakefileに関する意味のあるエラーではありません。
Makefileを使用する環境で私が働いた環境には、専任のMakeエキスパートがいます。そして、これはすべてコンパイルから数分を削るのですか?
私が今まで見た中で最悪の言語は、優れたオーディオ分析ツールであるツールpraatから来ています。スクリプト言語を使用するまで、かなり良い仕事をします。 ため息悪い記憶。
string = selected("Strings")
ここでは特別なことは何もせず、選択した関数の結果を変数文字列に割り当てます。本当に怖くない...まだ。
Create Strings as file list... liste 'path$'/'type$'
_ご覧のとおり、関数名は「作成」で始まり、「...」で終わります。コマンド「Create Strings as file list」は、ボタンまたはメニューに表示されるテキストです(チェックするには怖いです)。このコマンドは、2つのパラメーターlisteと1つの式を取ります。式_'path$'/'type$'
_をさらに詳しく見ていきます。
うーん。うん。場所がない。スペースが導入された場合、個別の引数になります。ご想像のとおり、括弧は機能しません。説明のこの時点で、変数名の接尾辞を指摘したいと思います。この段落では開発しません。ただからかっています。
noliftt = Get number of strings
_windowname$ = left$(line$,length(line$)-4)
それで、そこで何が起こっているのでしょうか?今度は、表現の表記規則とタイプを確認するときが来たので、次のようにしました。
_
for i from 1 to 4
Select... time time
bandwidth'i'$ = Get bandwidth... i
forhertz'i'$ = Get formant... i
endfor
_
数値であるiを取得しました...(いいえ、関数ではありません)
_bandwidth'i'$
_
それが行うことは、文字列変数を作成することです:_bandwidth1$
_、_bandwidth2$
_、_bandwidth3$
_、_bandwidth4$
_、それらに値を与えます。ご想像のとおり、この方法で2次元配列を作成することはできません。そのようなことを行う必要があります:_band2D__'i'__'j'$
_
outline$ = "'time'@F'i':'forhertznum'Hz,'bandnum'Hz, 'spec''newline$'" outline$ >> 'outfile$'
_ 文字列は(少なくとも)言語で奇妙に処理されます。 ''は、グローバル ""文字列内の変数の値を呼び出すために使用されます。これはweirdです。これは、bashからPHP powershellを渡すことまで)の多くの言語に組み込まれているすべての規則に反します。また、リダイレクトを取得します。だまされてはいけません。最愛のシェル。いいえで変数値を取得する必要があります
実行モデルについてお話しすることで、この素晴らしいプレゼンテーションに最後の仕上げをします。したがって、すべての手続き型言語で上から下に命令を実行するように、変数とpraat GUIがあります。つまり、praat guiですべてをコーディングし、メニュー/ボタンに記述されたコマンドを呼び出します。
Praatのメインウィンドウには、次の項目のリストが含まれています。
To Spectrogram... 0.005 5000 0.002 20 Gaussian
_」はこのレイアウトに従うため、そのようになります:言うまでもなく、私の悪夢は私の周りで踊り、「DEBUG MEEEE !!」と叫ぶ称賛のスクリプトでいっぱいです。
詳細情報 praat サイトの「Easy Programmable Scripting Language」という名前のセクション
真剣に:Perl。 Perlを日常的に使用する初心者やセミプロ向けのコードを作成するのは面倒です。私は同僚が言語に苦労し、2000行のような最悪のスクリプトを構築していることを、よく受け入れられているコーディング標準に関係なく常に見ています。プログラミングで見た中で最悪の混乱です。今、あなたはいつでも、それらの人々はコーディングが下手だと言うことができます(一部の人々は今では長年にわたってPerlを使用していますが)他の人のスクリプトを読むために。
MS Access Visual Basic for Applications(VBA)もかなり悪かった。アクセスは弱いパラダイムに追い込まれ、開始するのは一見簡単ですが、終了するのは悪夢であるという点で、まったく悪いものでした。
行番号のある昔ながらのBASICが私の選択です。新しい行を追加するために行番号の間にスペースがなかった場合、番号変更ユーティリティを実行する必要がありました。
その結果、1行(コロンで区切られた)に多くのステートメントを絞り込んだり、詰め込むことができなかった作業を行うためにgotoまたはgosubをどこか他の場所で実行した。
Cobolについてまだ回答がありませんか? :O
私はここで数年間働いていましたが、それ以来完全な頭脳ダンプをしました。私が本当に覚えているのは、ドキュメント(私の場所にある)と不可解なコマンドだけでした。
それは恐ろしいことでした。恐ろしい!恐ろしい!!!
言語は2種類あります。誰もが文句を言う言語と、誰も使用しない言語です。
Bjarne Stroustrup
私はまだ多くの言語を扱っておらず、主にスクリプト言語を扱っています。これらのうちVBScriptは私が最も好きではないものです。いくつかの便利な機能がありますが、いくつかのことは本当に私を怒らせます:
オブジェクトの割り当ては、Set
キーワードを使用して行われます。
Set foo = Nothing
Set
を省略することは、実行時エラーの最も一般的な原因の1つです。
構造化例外処理などはありません。エラーチェックは次のようになります。
On Error Resume Next
' Do something
If Err.Number <> 0
' Handle error
Err.Clear
End If
' And so on
プロシージャコールパラメータを括弧で囲むには、Call
キーワードを使用する必要があります。
Call Foo (a, b)
その英語のような構文は非常に冗長です。 (私は中括弧のファンです。)
論理演算子はロングサーキットです。後続の条件が前の条件の成功に依存する複合条件をテストする必要がある場合、条件を個別のIf
ステートメントに入れる必要があります。
パラメーター化されたクラスコンストラクターの欠如。
ステートメントを複数の行にラップするには、アンダースコアを使用する必要があります。
str = "Hello, " & _
"world!"
複数行コメントの欠如。
Edit:はこの記事を見つけました: VBScriptを嫌うフランジャーガイド 。著者は「VBSはPythonではない」と苦情を要約しています:)
Objective-C。
アノテーションは混乱を招き、ブラケットを使用してメソッドを呼び出すことはまだ私の脳では計算されません。さらに悪いことに、Cのすべてのライブラリ関数がC、-> 、.の標準演算子を使用して呼び出されるため、この言語を推進しているのはAppleだけです。
IPhone向けのプログラミング(およびOS X向けのプログラミングを検討中)時にのみ言語を使用したことは認めますが、C++がフォークされただけで、注釈を追加し、実装とヘッダーファイルを強制的に分離することで、より感覚。
PROGRESS 4GL(明らかに「 OpenEdge Advanced Business Language 」と呼ばれるようになりました)。
PROGRESSは、言語とデータベースシステムの両方です。言語全体は、くだらないグリーンスクリーンのデータ入力画面を簡単に記述できるように設計されています。 (だから、これがWindowsにどれだけうまく変換されるかを想像することから始めてください。)それ以上に魅力的なものは、きれいな画面、プログラムロジック、バッチ処理など、それほどではありません。
私が最後にバージョン7を使用したのは90年代後半のことであるため、この一部が古くなっている可能性はほとんどありませんが、それには賭けません。
Counter
テーブルの現在のレコードのState
フィールドをインクリメントしたい場合は、State.Counter = State.Counter + 1
。それほど悪いことではありませんが、...Index
という名前の変数がある場合は、Index
またはInd
として、またはI
としても参照できます。 (入力ミスは非常に興味深い結果になる可能性があります。)また、データベースフィールドにアクセスする場合は、フィールド名を短縮できるだけでなく、テーブル名で修飾する必要もありません。 彼らはテーブルも推測します。本当に恐ろしい結果を得るには、これを以下と組み合わせてください:推測は最悪です。省略形とデフォルトのフィールドの間では、注意しないと厄介なものが得られる可能性があります。 (I
をループ変数として使用する前にローカル変数として宣言するのを忘れましたか?問題ありません。テーブルをランダムに選択し、現在のレコードを取得して、名前が始まる任意のフィールドを完全に破棄します。 I
!で)
次に、誤ってデフォルトでフィールドにアクセスすると、テーブルの推測範囲が変更される可能性があるため、まったく関係のないコードが破損する可能性があります。楽しいですね
彼らはまた、言語に組み込まれた報告システムを持っていますが、私は明らかにそれのすべての記憶を抑圧しました。
Netscape LiveWire(サーバーサイドJavaScriptの不運な試み)と古典的なASP(VBScript)で働く別の仕事を得たとき、私は天国にいました。
最悪の言語? BancStar、伝承。
3,000個の定義済み変数、すべて番号付き、すべてグローバル。変数宣言も初期化もありません。半分は範囲内に散らばっており、システムで使用するために予約されていますが、自分の責任で使用できます。さまざまな操作の結果として、100個程度が自動的に入力されますが、それらのリストはありません。これらはすべて38kバイトに収まり、バッファオーバーフローに対する保護は一切ありません。入力フィールドの長さを誤って宣言した場合、システムはユーザーが10バイトのフィールドに20バイトを入れることを快く許可します。控えめに言っても、効果は予測できません。
これは、計算されたgosubまたはgotoを宣言できる言語です。その制限のため、これは頻繁に必要です。条件は、順方向または逆方向に宣言できます。開始する前に20行を終了する「If」ステートメントを想像してください。
リターンスタックは非常に浅く(20 Gosubs程度)、ユーザーがファンクションキーを押すと別のサブルーチンが開始されるため、スタックを簡単にオーバーランできます。設計者は、「Clear Gosubs」コマンドを思慮深く組み込んで、スタックを完全に無効にして、その問題を修正し、プログラムが次に何をするのか正確にわからないようにしました。
まだまだあります。このラブクラフトの恐怖の何万もの行。
DOS/Windowsでは 。batファイルスクリプト言語 。特に、これをUnixシェル言語と比較した場合(これはそれほど強力ではありませんが、それでもなお優れている)、神はこの1つがどれだけ非強力であるかを知っています。
2つの文字列を連結するか、forループを作成してください。いや.
これは私の教授( Dr。Henry Ledgard )が学部/大学院で私たちを売り戻そうとした言語です。 (私が知る限り、彼はまだ大きな支持者であり、パンをスライスして以来最高のものだと一部の人々を説得する機会を歓迎するので、彼の名前を与えるのは気分が悪いです)。それを人々に説明するとき、私の最も良い例えは、FORTRANとCOBOLのややこしい子であり、いくつかの余分な悪いものが投げ込まれているということです。 本当にアクセス可能なフォルダーのみ からこの資料で見つけました(ここには特にリンクするつもりはありませんが、もっとたくさんあります):
VSEは、「分離原則」と呼ばれるものを中心に構築されています。考え方は、データと動作を完全に分離する必要があるということです。すべての変数/データを関数の先頭で宣言する必要があるというCの要件を想像してください。ただし、その宣言を他の関数でも使用できる別のファイルに移動するようになりました。他の関数がそれを使用する場合、同じレイアウトのデータのローカルコピーではなく、同じデータを使用しています。
なぜこのように物事をするのですか? The Software Survivorsから、Variable Scope Rules are Hard。引用符を付けますが、ほとんどの愚か者のように、これらの人が何かを言うのは永遠にかかります。 PDF「範囲の泥沼」を検索すると、真の悟りが見つかるでしょう。
彼らは、これが基盤となるハードウェア実装をより厳密にモデル化するため、これが何らかの理由でマルチプロセス環境により適していると主張し続けています。右。
頻繁に表示される別の選択テーマ:
INCREMENT DAY COUNT BY 7 (or DAY COUNT = DAY COUNT + 7) DECREMENT TOTAL LOSS BY GROUND_LOSS ADD 100.3 TO TOTAL LOSS(LINK_POINTER) SET AIRCRAFT STATE TO ON_THE_GROUND PERCENT BUSY = (TOTAL BUSY CALLS * 100)/TOTAL CALLS
驚異的ではありませんが、算術スタイルは通常の使用法を反映しています。つまり、プログラミング言語を知らなくても、誰でもそれを読んで理解することができます。実際、VisiSoftの算術演算は、組み込みの複雑な算術演算を含め、FORTRANとほぼ同じです。 これにより、プログラマーは自分の職業的地位とそれに対応する仕事のセキュリティに不安を感じるようになります。
うーん、まったく関係ない、本当に。 Bill CaveがVSEを販売するために使用する重要なセールスポイントの1つは、ビジネスの人々が仕事のセキュリティのためだけにクレイジーで不可解なツールを使用するプログラマーに身を委ねる必要がないように、プログラミングの民主化です。彼はこの不合理な恐怖を利用して、ツールを販売しています。 (そして、それはうまくいきます-連邦政府は彼の最大の顧客です)。このドキュメントでは、「ジョブセキュリティ」という語句を17回使用しています。例:
- ...そして、人為的ジョブセキュリティを望む人にのみ適合します。
- さらにfalsejob security?
- job securityは、他の人が何をしたのかわからないようにすることに依存していますか?
- job securityは複雑なコードに依存していますか...?
- 新しいテクノロジーの受け入れに影響を与える最も強い力の1つは、自分のジョブセキュリティの認識です。
彼はこのパラノイアを使用して、財布の紐を持っているマネージャーと、VSEを認識している知識を持つ技術者との間のくさびを駆り立てます。これは彼が会社にそれを絞る方法です-「あなたの技術者は、彼らが彼らを時代遅れにすることを恐れているので、それが最悪だと言っているだけです!」
このアプローチの別の結果は、データが「見えるものは得るもの」に基づいてメモリにマップされ、全体にわたって維持されることです。これにより、ユーザーは、個々のフィールドを記述するテンプレートに文字列として完全な構造を移動できます。特定のストレージ領域に対して複数のテンプレートを再定義できます。 Cや他の言語とは異なり、下部構造は、Word境界整列基準による不整列の問題なしに移動できます。
さて、あなたについては知りませんが、言語の選択に関しては、メモリレイアウトに対するWYSIWYGアプローチが優先リストのtopにあることは知っています!基本的に、60年代と70年代に設計された古い言語のみがWordの整列を重視するため、整列の問題は無視されます。またはそのようなもの。推論は偽です。私にはあまり意味がなかったので、すぐにそれを忘れ始めました。
VSEにはユーザー定義型はありません。これは、言語を大幅に簡素化する広範な決定です。実用的な観点からの利益も素晴らしいです。 VSEを使用すると、設計者とプログラマは、モデル化されている物理システムと同じラインに沿ってプログラムを編成できます。 VSEを使用すると、読みやすい論理属性階層で構造を構築できます。
驚くばかり!ユーザー定義型は不完全です。私が持つことができるのに、なぜInputMessage
オブジェクトのようなものが欲しいのでしょうか:
LINKS_IN_USE INTEGER
INPUT_MESSAGE
1 Origin INTEGER
1 DESTINATION INTEGER
1 MESSAGE
2 MESSAGE_HEADER CHAR 10
2 MESSAGE_BODY CHAR 24
2 MESSAGE_TRAILER CHAR 10
1 ARRIVAL_TIME INTEGER
1 DURATION INTEGER
1 TYPE CHAR 5
OUTPUT_MESSAGE CHARACTER 50
あなたはそれを見て、「ああ、それは少し古い学校なら、かなりきれいにフォーマットされている」と思うかもしれません。古い学校は正しい。空白は重要です-非常に重要です。そして冗長! 1
は3列目になければなりません。1
は、階層の最初のレベルにあることを示します。シンボル名は列5にある必要があります。階層は深さ9に制限されています。
まあ、大丈夫ですが、それはとてもひどいですか?ちょっと待って:
テキストを読む場合、従来の大文字/小文字を使用する方が読みやすいことがよく知られています。 VSEはすべて大文字を使用します(コメントを除く)。なぜですか?心理学の文献は散文に基づいています。プログラムは、単純に散文ではありません。プログラムは、数学、会計、テーブルのようなものです。プログラムフォント(通常はCourier)は、ほぼ普遍的に固定ピッチであり、正当な理由から、関連するコード行間の垂直方向の配置です。 大文字のプログラムは読みやすく、しばらくして、私たちの意見でははるかに優れています
言語レベルであなたの意見を強要することは何もありません!そうです、VSEでコメントを使用しない限り、小文字を使用できません。 CAPSLOCKをオンにしておくと、しばらくそこにとどまります。
VSEサブプロシージャはプロセスと呼ばれます。このコードサンプルには3つのプロセスが含まれています。
PROCESS_MUSIC
EXECUTE INITIALIZE_THE_SCENE
EXECUTE PROCESS_PANEL_WIDGET
INITIALIZE_THE_SCENE
SET TEST_BUTTON PANEL_BUTTON_STATUS TO ON
MOVE ' ' TO TEST_INPUT PANEL_INPUT_TEXT
DISPLAY PANEL PANEL_MUSIC
PROCESS_PANEL_WIDGET
ACCEPT PANEL PANEL_MUSIC
*** CHECK FOR BUTTON CLICK
IF RTG_PANEL_WIDGET_NAME IS EQUAL TO 'TEST_BUTTON'
MOVE 'I LIKE THE BEATLES!' TO TEST_INPUT PANEL_INPUT_TEXT.
DISPLAY PANEL PANEL_MUSIC
予想通りのすべての上限。結局のところ、それは読みやすいです。空白に注意してください。再び重要です。すべてのプロセス名は列0で始まる必要があります。命令の初期レベルは列4で始まる必要があります。より深いレベルは、正確に3スペース分インデントする必要があります。ただし、これは大した問題ではありません。ネスト条件などの操作を許可されていないためです。ネストされた条件が必要ですか?別のプロセスを作成して呼び出してください。そして、deliciousCOBOL風の構文に注意してください!
ループが必要ですか?簡単:
EXECUTE NEXT_CALL
EXECUTE NEXT_CALL 5 TIMES
EXECUTE NEXT_CALL TOTAL CALL TIMES
EXECUTE NEXT_CALL UNTIL NO LINES ARE AVAILABLE
EXECUTE NEXT_CALL UNTIL CALLS_ANSWERED ARE EQUAL TO CALLS_WAITING
EXECUTE READ_MESSAGE UNTIL LEAD_CHARACTER IS A DELIMITER
あー.
私自身の質問への貢献は次のとおりです。
Origin LabTalk
この点で私の一番のお気に入りは Origin LabTalk です。 LabTalkでは、文字列変数識別子の最大長はone文字です。つまり、26個の文字列変数しかありません。さらに悪いことに、それらのいくつかはOrigin自体によって使用されており、どれが明確ではありません。
マニュアルから:
LabTalkは、%表記を使用して文字列変数を定義します。有効な文字列変数名は、%文字の後に単一のアルファベット文字(AからZの文字)が続く必要があります。文字列変数名は大文字と小文字を区別しません。存在する26個の文字列変数すべてのうち、Origin自体は14個を使用します。
ドアDXL
私にとって、2番目に悪いのは Doors DXL です。プログラミング言語は、2つのグループに分けることができます:手動メモリ管理(削除、空きなど)を使用する言語とガベージコレクターを使用する言語。一部の言語は両方を提供しますが、DXLはおそらくどちらもサポートしない世界で唯一の言語です。正直なところ、これは文字列にのみ当てはまりますが、要件エンジニアリングソフトウェアで文字列が使用されるデータタイプは、必ずしもほとんどありません。
その結果、文字列で使用されているメモリを再利用できず、DOORS DXLがSieveのようにリークします。
DXLには他にも数え切れないほどの癖があります。
常温核融合
デザイナーにとっては良いことだと思いますが、プログラマーとして私はいつも片手が背中の後ろに縛られているように感じました。
私が働いた最悪の2つの言語は、その時代の言語で比較的よく知られているAPLと、元のEmacsが書かれた言語であるTECOでした。どちらも、簡潔でわかりにくい構文で有名です。
APLは配列処理言語です。すべての文字が演算子であり、多くは標準キーボードに表示されないため、非常に強力ですが、読むことはほとんど不可能です。
TECOの外観は似ており、理由も同様です。ほとんどの文字は演算子であり、この特別な目的の言語はテキストファイルの編集専用でした。標準の文字セットを使用しているため、少し改善されました。そして、関数を定義する機能がありました。これはemacsに命を与えました。人々はマクロを書き、しばらくしてからマクロを呼び出しました。しかし、プログラムが何をしたかを理解したり、新しいプログラムを書いたりすることは非常に困難でした。
HAI STDIOを使用できますか?
真剣に、最悪のプログラミング言語はMakefilesです。完全に理解できないタブには構文上の意味があり、何が起こっているのかを調べるデバッガーでさえありません。
スクリプト言語を含めるつもりかどうかはわかりませんが、TCL(これも迷惑です)を目にしましたが、... mIRCスクリプト言語が私をいらいらさせます。
解析におけるいくつかの見落としのために、本来あるべきではないときに重要な空白です。このため、条件文はスキップされることになっているときに実行される場合があります。ブロックステートメントを開くことは、別の行などで行うことはできません。
それ以外は、非常に基本的なものを簡単にするためにおそらくそのように設計された乱雑で一貫性のない構文でいっぱいですが、同時に少し複雑なものはほとんど読めません。
ほとんどのmIRCスクリプトを紛失したか、恐ろしい混乱が作成を余儀なくさせるものの良い例を見つけることができたでしょう:(
正規表現
これは書き込み専用言語であり、正しい入力に対して正しく機能するかどうかを検証するのは困難です。
VBScript/Visual Basic 6をほとんど使用する必要はありません。
私は主にC++、javascript、Javaを使用し、必要に応じてRuby、scala、erlang、python、アセンブラー、Perlのほとんどのタスクと手間を省きます。
私は、他のほとんどの合理的な多言語/プログラマと同様に、仕事に適切なツールを使用する必要があると強く感じています。これには、ドメインを理解し、ツールを理解する必要があります。
VBscriptとVB6の私の問題は、それらを使用してWindowsまたはオフィスアプリケーション(それらに適切なドメイン)をスクリプト化することです-私は自分が言語に苦労していることに気付きます(適切なツールではありません)。
VBScriptの使いやすいネイティブデータ構造(連想コンテナ/マップなど)やその他の癖(オブジェクトへの割り当てのセットなど)の欠如は、特にスクリプト言語にとっては不必要でイライラする迷惑です。それをはるかに表現力のあるJavascript(私は現在wscript/cscriptウィンドウのプログラミングとactivex自動化スクリプトの実行に使用しています)と比較してください。 vbscriptでうまく機能する特定のものがありますが(COMオブジェクトから配列をやり取りする方が若干簡単ですが、jscriptを使用してイベントハンドラーをCOMコンポーネントに渡す方が簡単です)、私はまだ多くのコーダーに驚いていますまだvbscriptを使用してスクリプトウィンドウを作成しています-両方の言語で同じプログラムを書いた場合、jscriptのネイティブハッシュデータ型とクロージャーのために、jscriptがvbscriptよりもはるかにうまく機能することがわかります。
Vb6/VBAは、一般的なvbscriptよりも少し優れていますが、(ドメインに関して)単純なタスクを実行するためにボイラープレートを必要とする多くの同様の問題がまだあります。
ビジュアルフォックスプロ
2回、モジュールをページにドラッグアンドドロップし、データフローを表示するために行でリンクする「言語」で作業する必要がありました。 (1つはRDBMであると主張し、もう1つは汎用データ取得および数値演算言語であると主張しました。)
それを考えるだけで、誰かを絞ることができます。または吐く。または両方。
さらに悪いことに、直接ハッキングできるテキスト言語も公開していません。
誰もこれを言ったことがありません。
LotusScript
少なくともphpよりもはるかに悪いと思います。
Visual Basicに似た構文に従う言語自体についてではなく、決して使用しない(または100万回に1回)ことは非常に有用ではないものの多くの機能を持っているようですが、物事のサポートが不足しているという事実です毎日使用します。
具体的な例を覚えていませんが、次のようなものでした。
「OK、マウスポインターがフォームの上部隅にあるかどうかを確認するイベントがあり、フォームのダブルクリックイベントはありません!! ?? WTF ??」
TCL。実行直前にコードをコンパイルするだけなので、テスト中にコードがブランチAにダウンすることがなく、ある日、フィールドでブランチAにダウンする場合、SYNTAXエラーが発生する可能性があります!
25年以上のコンピュータープログラミングで、私が経験した中で最悪のことは、Meditech Magicと呼ばれるMUMPSの派生物でした。これはPHPが望んでいたよりもずっと悪です。
割り当てにも「=」を使用しません! 100 ^ bは100の値をbに割り当て、「100 goes to b」として読み取られます。基本的に、この言語は独自の構文を上から下に発明しました。プログラミング言語をいくつ知っていても、Magicは完全に謎に包まれます。
この言語の憎悪で書かれた壁にビールのボトル100本があります:
BEERv1.1,
100^b,T("")^#,DO{b'<1 NN(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall")^#,
N(b,"bottle"_IF{b=1 " ";"s "}_"of beer!")^#,
N("You take one down, pass it around,")^#,b-1^b,
N(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall!")^#},
END;
ロゴ...いまいましいカメは、私が望んでいたところには決して行きません。
troff
私が何歳か教えてくれます。あなたはそれでかなり甘いことをすることができましたが、それはラフでした。 Perlが読めないと思う人は、チェックしてください。
というのは:
.nr *pop-count 0
.while !'\\n(.z'' \{\
. \"@warning automatically terminating diversion \\n(.z
. ie d @div-end!\\n(.z .@div-end!\\n(.z
. el .*div-end-default
. nr *pop-count +1
. \" ensure that we don't loop forever
. if \\n[*pop-count]>20 .@fatal recovery failed
.\}
.while !'\\n[.ev]'0' .ev
.par@reset-env
.par@reset
信じられないかもしれませんが、何年もこれをしなければならなかった後、私はプログラミングを続けました。
.NETバージョンであっても、Visual Basicは本当に好きではありません。率直に言って、私は言語の詳細な方法の核心を見つけます。
例えば:
If condition1 = condition2 Then
...
Else If condition1 > condition2 Then
...
End If
Public Function SomeFunction(ByVal arg1 As String, ByVal arg2 As Integer) As String
...
End Function
しかし、C#の場合:
if (condition1 == condition2) {
...
}
else if (condition1 == condition2) {
...
}
public string SomeFunction(string arg1, int arg2) {
...
}
そして、明らかに、F#、Pythonなどのような他の多くの言語は、それほど冗長ではありません。このため、他の言語よりもVBを使用するのに2倍の時間がかかるように感じます。
私はこれが非常に浅い答えであることを知っています、それは一部には言語の懸念のいくつかに対処していないためです(グローバル関数の過剰使用のような)。しかし、ヒューマニスティックな「体験志向」の観点からは、VBは単に不機嫌になります。
私はかつて通信会社の請求書発行システムを運用していました。これは、請求書を収集、準備、計算、フォーマットし、最終的に印刷するためのコマンドの束を手動で実行することを意味しました。通常、これはバッチ形式で行われるため、請求書を作成する顧客番号が通知され、それらすべてをバッチで行います。
これは退屈でした。それで自動化を始めました。残念ながら、サーバーで許可されている唯一の言語は....まあ何もありませんでした。まったく。そのため、すべてをシェルスクリプトで記述する必要がありました。そしてそれは本当に馬鹿げた奇妙な言語です。あまり意味がありません。一貫性がなく、過度にまばらなので、2つの類似したことはまったく異なることをする可能性があります。わずかに異なる場所にあります。そして、逆引用符を言語の一部として使用することは、純粋な悪です。一部のフォントでは、一重引用符と同じように見えます。
プログラミングの経験がずっと悪い。どうも悪い。しかし、それらは常に他の人々の奇妙なコードを維持することを含んでいます。しかし、これは私が今まで使用した中で最悪の言語でなければなりません。 DOSバッチファイルよりも悪いですか?そうそう。 DOSバッチファイルの主な問題は、それらがプリミティブであることです。実際に何か便利なことをさせる賢い方法を見つけなければなりません。しかし、構文自体はそれほど悪くはありません。機能が十分に組み込まれていないだけです。 Visual Basicより悪いですか?確かに、確かに、MS AccessでこのBourne ShellシステムにUIを作成しましたが、それはほぼ同じくらい恐ろしいことでしたが、ほとんどそうでした。また、Sybaseを介して通信したため、Sybase SQLを学ぶ必要がありましたが、これも非常に恐ろしいことです。しかし、それでもshスクリプトのように恐ろしくはありません。
そのため、Bourne Shellがジャンボ価格を獲得しました。ただ、VB close on heelsだけで、それでも勝ちます。
Unixでは、m4
スクリプトとsendmail.conf
。
[〜#〜] css [〜#〜]
基本的なスタイリングについてはOKで、セレクターはかなりクールですが、ボックスモデル、フロート、クリアについては少しサディスティックなことがあります。
あるボックスを別のボックスの下に移動するなど、基本的なことを実行させるために言語をハックすることは、すべて1日で完了します。
ここで私たちは未来に生きており、丸みを帯びた角やドロップシャドウなどの基本的なデザイン要素を機能させるだけで無益になります。
「再利用性」の概念は、ほとんどCtrl-C Ctrl-Vで終わります。熟練したCSSライターでさえ、他人のスタイルシートに触れることはめったにありません。つまり、基本的なレイアウトは世界中で定期的に何度も書き直されます。
もちろん、すべての欠点をとるべきではありません-世界にとって本当に役立つものを提供するという希望は、言語の事実上の「プラットフォーム」によって岩の上に残酷に打ち砕かれました-Internet Explorer。
FORTRAN 77
公平を期すために、おそらく1977年にはかなり良い言語でしたが、1999年のころには、アドバイザーが元々1970年代に大学院生だったときに開始したFORTRAN 77プログラムを維持する必要がありました(パンチカード、元々)。このプログラムは、さまざまな能力を持つ人々によって20年以上にわたって「強化」され、ハッキングされました。最も古いコードはALLCAPSで、GOTOステートメント、グローバル変数、および指よりも多くのパラメーターを持つ関数でいっぱいです。 Fortranの元々の変数名は6文字に制限されていましたが、バイトを節約するために、ほとんどの変数には「A」、「B」、「AA」、「II」などの説明的な名前が付けられました。
確かに、私の経験の多くはプログラムの作成方法に関連していましたが、この言語は良いプログラミングスタイルを実際に奨励していませんでした。
ありがたいことに、FORTRANを調べてから10年が経ちましたが、覚えている厄介なことを忘れてしまいました。
私にとって、言語に対する私の見解を汚した最悪の経験はPerlでした。私は、サポートを求められて数か月後に会社をすぐに辞めた他の人々によって「サポート」されたたくさんのPerlスクリプトをサポートするように頼まれました。言語は問題ないかもしれませんが、コードが非常に迅速に読めなくなり、ほとんどサポートできなくなることがあります(1人しか触れない場合を除く)。それは、正規表現、疑似オブジェクト、1文字の変数、関数名の混乱でした。すぐにすべてをpythonで書き直し、Perlを完全に廃棄しました(それは私または終了しました)。pythonバージョンは非常に使いやすく、 10年後もまだ使用中であり、私が聞いたところによると、その会社でPerlを再び使用することは誰にも許可されていません。
私にとっては、 FileMaker でなければなりません。
ScriptMaker
このスクリーンショットは、最近まで名前が付けられた「ScriptMaker」を示しています。FileMaker9では、Ctrl + C Ctrl + Vのコピーと貼り付けのショートカット、非モーダルダイアログなど、複数のスクリプトを一度に編集できます。
http://images.macnn.com/macnn/reviews/filemaker/9proadvanced-ice_feature1_main.png
このダイアログボックスを使用して、個々のスクリプトを編集します。スクリプト「ステップ」(左側に表示)は左側のリストに追加され(ダブルクリック)、上下に移動します(「Webビューアの設定」の左側にある小さなブロブを使用)。一度に移動できるのは1行のみです。スクリプトステップを一時的に無効にするためのコメントは、FileMaker Proの高度なバージョンでのみ使用できます。
スクリプトを作成すると、キーボードとマウスを1時間に何千回も小さな設定ボックスに入力してコード行を再配置するので、手首が無駄になります。
スクリプトは技術的にはプロシージャであり、[〜#〜] one [〜#〜]パラメーターを渡すことができます。うん、たった一つ。複数必要な場合は、いくつかの区切り記号を使用してパラメーターを効果的に組み合わせ、スクリプトに渡し、パラメーターを分割する必要があります。スクリプトがパラメーターをまったく持つことができなくなる前(FM7 IIRCより前)、データを渡すためにグローバルを使用するのが普通でした。
この guy は、彼の嫌悪感のほとんどをHoax FileMaker 11のスニークプレビューにまとめました。
JCL-IBMメインフレームのジョブ制御言語...プログラミング言語ではなく、バッチファイルのことです。
これは通常、ジョブの開始時に配置されるパンチカードに基づいていました。つまり、同じ構文、異なる媒体です。 71列の制限と、カードにお金がかかるという事実は、冗長性がCOBOLソースに残された罪であるということを意味します。この態度は、非紙のカウンターパートであるJCLに引き継がれました。
作業中にリードカードのジョブキューとパラメーターを変更する方法を見つけました。ウィキペディアには、次の素晴らしい例があります。
//IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X
//COPY01 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=OLDFILE,DISP=SHR
//SYSUT2 DD DSN=NEWFILE,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(40,5),RLSE),
// DCB=(LRECL=115,BLKSIZE=1150)
//SYSIN DD DUMMY
正確に。
称賛に値する言及は、Cincom Mantis、「アプリケーションジェネレーター」(読み:テキストベースのフォームデザイナー)、COBOLのような4GLによって「強化された」ものでなければなりません。マンティスは、学位を取得することに決めた言語です。
編集他の場所でのDCLなどの言及... Datatrieve私も覚えています。これらは確かにひどいものでしたが、それでもメインフレームよりもVMSのものを好んでいました。
ColdFusionに投票します。それはクールなスクリプト言語になろうとしていますが、htmlのようなタグで仕上げられたことは私を夢中にさせました-それに対処しなければならなかったので少し経ちましたが、変数の宣言は熊になる可能性があり、コードが両方で異なる動作をする2つの異なる環境で、サーバーのわずかに異なるバージョンを使用するのは簡単です。
本当に印象的なことをしたい場合は、基本的にJavaでオブジェクトを作成し、タグとして呼び出すことができるようにcoldfusionのサーバーにリンクする方法を考えます。 mはPHPで動作し、PHPに問題がありますが、ColdFusionは間違いなく悪化しました。
ITは、選択したスクリプト言語とインターフェイスできる強力なAPIを構築するのではなく、ソフトウェア会社がソフトウェアとインターフェイスする独自のスクリプト言語を開発する理由に困惑することがあります。私の投票はTransCADのスクリプト言語に行きます。
私は、C#やAppleScriptのような所有言語を軽deしています。その唯一の理由は、開発者を商用プラットフォームまたは製品に結びつけることです。これは厳密には技術的な問題ではありませんが、学校でこれらの言語が教えられると、社会的な問題になります。 Linuxのみがインストールされている友人がいて、彼は1年目のCompSciでC#を教えられています。はい、Monoがありますが、当然、常に機能と安定性に追いついています。
私が「働いた」最悪の言語は「ロボット、カロル」でした。これはドイツ語のプログラミング言語でした。そして、画面上でロボットを動かす以上のことはできませんでしたxD
私は他の場所で同じ答えをしましたが、ここでの位置に値すると思います:
90年代後半には、Informix Universal Server Webブレード(別名Illustra Webブレード)でいくつかのWebサイトを作成する必要がありました。
この実行可能な環境について何も知らない人にとっては、私が今まで出会った中で最も奇妙な言語を使用せざるを得ませんでした。ジョエル・スポルスキーが説明したように
それが実行されたとき、あなたが想像できるなら、それは私が今まで見た中で、チューリングと同等ではなかった唯一のプログラミング言語を持っていることを証明しました。
詳細はこちら http://philip.greenspun.com/wtr/illustra-tips.html
「単純」なif条件の例:
cond=$(OR,$(NXST,$email),$(NXST,$name),$(NXST,$subject))
後から振り返ってみると、陽気な/信じられない/悲劇的なものになるので、完全なAPIドキュメントを見つけることができればと思います。
ひどい性質の1つの例は、それがループを持たなかったという事実でした。いかなる種類の。クエリを作成し、その行を反復処理することでループ機能をハックすることはできましたが、それは非常に間違っているため、気分が悪くなります。
編集:完全なコードサンプルを見つけることができました。見よ:
<HTML>
<HEAD><TITLE>WINSTART bug</TITLE></HEAD>
<BODY>
<!--- Initialization --->
<?MIVAR NAME=WINSIZE DEFAULT=4>$WINSIZE<?/MIVAR>
<?MIVAR NAME=BEGIN DEFAULT=1>$START<?/MIVAR>
<!--- Definition of Ranges ---->
<?MIVAR NAME=BEGIN>$(IF,$(<,$BEGIN,1),1,$BEGIN)<?/MIVAR>
<?MIVAR NAME=END>$(+,$BEGIN,$WINSIZE)<?/MIVAR>
<!--- Execution --->
<TABLE BORDER>
<?MISQL WINSTART=$BEGIN WINSIZE=$WINSIZE
SQL="select tabname from systables where tabname like 'web%'
order by tabname;">
<TR><TD>$1</TD></TR>
<?/MISQL>
</TABLE>
<BR>
<?MIBLOCK COND="$(>,$BEGIN,1)">
<?MIVAR>
<A HREF=$WEB_HOME?MIval=WINWALK&START=$(-,$BEGIN,$WINSIZE)&WINSIZE=$WINSIZE>
Previous $WINSIZE Rows </A> $(IF,$(<,$MI_ROWCOUNT,$WINSIZE), No More Rows, )
<?/MIVAR>
<?/MIBLOCK>
<?MIBLOCK COND="$(AND,$(>,$END,$WINSIZE),$(>=,$MI_ROWCOUNT,$WINSIZE))">
<?MIVAR>
<A HREF=$WEB_HOME?MIval=WINWALK&START=$END&WINSIZE=$WINSIZE>
Next $WINSIZE Rows </A>
<?/MIVAR>
<?/MIBLOCK>
</BODY>
Prettifyは色を付ける方法を知らない
METLIFE ENGLISH LANGUAGE(MEL) !
CobolとPL/IでY2Kの問題を自動的に検出して修正するツールを作成した会社で働いていました。 MetLifeは、50年代後半または60年代前半に開発したMELで記述された200万行のコードで私たちにアプローチしました。 MELはCobolを刺激するのに役立つ言語であり、その手順コードは、現代のCobolプログラマーにとってはなじみのあるものに見えます。
強力な開発者に翻訳者を書いてMELプログラムをリッピングし、特定された日付を修正してもらいました。彼は実際に数週間でデモを行っており、生産のためにそれを形にするために必要な作業はさらに3〜4週間であると考えました。素晴らしい、私たちは考えて、仕事を引き受けることにしました。
残念ながら、彼は、MELのCobol DATA DIVISION(宣言が行われる)に相当する非常に原始的なものを実際に研究していませんでした。各MELプログラムは、各入力ファイルまたは出力ファイルのownビューを提供し、関心のあるフィールドのみを宣言したことが判明しました。または、バリアントレコードを持つ入力ファイルがどのように見えるかについて40の異なるテイク。盲人と象について話しましょう!
その後、非常に優秀で意欲的な男が引き継いで、どのファイル定義がどのファイルを記述しているかを特定するセマンティクスを解決しました。多くのファイルにバリアントレコードが存在するため、プロセスはさらに難しくなりました。次に、アルゴリズムを作成して、代替レコード定義の各セットを共通レコード定義に統合し、古いエミュレートされたHoneywellデータ型から新しいIBMメインフレーム型にすべてをマッピングしました。すべてが機能するのに2人年かかりました。
Symbian C++まあ、それはC++ではありません。まったく新しい言語を完全に学習しているため、うまく機能しません。
誰もSybase PowerBuilderについて言及していないことに驚いています
RPG II ??誰でも?
これは最悪のチェックの1つでした このWikiの説明 期限までに有効期限が切れた言語の簡単な紹介です。
明るい面では、酔っぱらいや落ち着いたプログラムを書くことができ、それはあまり違いはありませんでした
CRM114。非常に強力なベイジアンフィルターとのインターフェイス用に特別に設計された言語で、スパムフィルターや同様のタスクに役立ちます。
私は昨年クライアントからそれを使用するように頼まれ、それを調べた後、代わりにCodeproject.comからいくつかの単純なベイジアンコードを使用しました。後で、CRM114の元の著者からのフォーラムに投稿されたメッセージを謝罪しました。
主な問題はラテン語由来の文法でした。著者は当時ラテン語を学んでいたことを認め、それを彼のプロジェクトに統合しました。したがって、奇妙な演算子の順序と引数の規則を取得します。これはまた、他の言語で「else」を使用する場合に、単語「alius」(「otherwise」または「else」のラテン語)を使用することにつながりました。
なにもしないようにするのは非常に難しい。
MaxScript、3d studio MAXに付属しているスクリプト言語、私はその構文に対するロジックを見ることができなかったと思う
誰でも Autohotkey で使用されているスクリプト言語に言及していますか?
これまでに使用した最悪の言語。
90年代中頃、私は MapInfo というGIS製品を使用する小規模の経営コンサルティング会社で働いていました。この製品にはMapBasic。
詳細は覚えていませんが、基本的には、オブジェクト*があり、ハードコーディングされた場合にのみインスタンス化できました(変数でインスタンス化するのではなく) )。これは、実際に実装しようとするまで、必要なすべてのことを行うように見えたという点で完全な痛みでした。実装は不可能か、非常に面倒でした。
私はその時点で初心者であり、a)何ができて何ができなかったかを予測し、b)プログラミング以外のマネージャーにその理由を説明するのに多くの困難がありました。それでもなおイライラしていました。
特定の分野では弱い言語とツールがたくさんありますが、Map Basicを扱った後、Visual Basic 3.0でも解放感がありました!
*-すべてのオブジェクトであったか、特定のオブジェクトのみであったかは覚えていません。
まず、いくつかの注意事項:意図した目的を十分に果たしている言語にはパスを与える傾向がありますが、企業の世界に夢中になって、デザイナーが意図した以上のことをするようになります。そのため、VBとそのVB-officeバリアントにパスを渡します。迅速なプロトタイピングのために、VBは打つのが困難でした。エンタープライズレベルの作業に使用しようとしました。Perlでも同じで、CGI言語du jourに昇格したすばらしいスクリプトユーティリティです。当日。
しかし、たとえそれ自身の用語でさえ、期待に応えることができない言語ですか?私にとって、それはコンテストではありません:JavaScript、3つの大きな理由:
フレームワークを選択することが許可された場合、同様に簡単な選択ですJSFおよびIceFaces。
[〜#〜] abap [〜#〜]
SAP用のアプリケーションのプログラミングに使用されます。そして、それは悪いです。
まだ誰もVimscriptについて言及していませんか?
私のVimの旅は、ドアの向こう側へのCoralineの旅のようでした。最初はとてもクールで、指は幸せでしたが、目をVIMScriptに置き換えたくありませんでした。
古いExcelマクロ言語変数をExcelシートに保存するのは本当にイライラしていました。 VBAもかなり悪かった。
X年後(X = 10または20または?)にこの質問を自問すると、コーラスで「20世紀のすべての言語が吸い込まれた」と言うでしょう。そのようなことは、私たちがはるかに異なる方法で物事を行うというパラダイムシフトになるでしょう...私はどのように視覚化することはできませんが!
PCフォーカス
私は、PC-FOCUSにバックオフィスサブシステムが実装されている倉庫在庫+管理システムに取り組んでいました。
この言語について言う必要があるのは、「回避策」というタイトルのプログラミングマニュアルに100ページ以上の章があることです。
Cに対する中途半端なオブジェクト指向の拡張機能。組み込みシステムには、まだCのみのプロジェクトがたくさんあります。だから、このプロジェクトを形にするために必要なのは自分のオブジェクト指向のソリューションだけだと誰かが考えることもあります...大規模なメンテナンスの混乱をどこかに残します。
通常、人は控えめで高貴な目的で始まりますが、毎回彼から離れます。彼はこれを素晴らしいと思う別のプログラマーに引き渡します。 OOP、彼が理解していない既に悲劇的なコードをどのようにすっきりさせて屠殺するか。すぐにそれは修復不可能です。私が見た最悪のドライバは、それを使用するオブジェクトと、そのコンポーネントユーザーの最上位レベルまでのヘッダーファイル。
プログラミング言語が意図したとおりに使用されない場合、どのプログラミング言語もモンスターになります。
LabVIEW (それも言語と見なされますか?)
それは恐ろしいことでした。用語を広めたい場合、HTMLもXMLと同じです。
Lingo、Shockwave Flash(またはそれが何であれ)。型システムが少々動的すぎる、非常に恐ろしい、基本的なもの。エディターは吸い込み、デバッガーは吸い込みました。ああ!
肩に乗らなければならなかったアプリがスクリプトキディによって書かれていたのはおそらく助けにならなかったでしょう。スクリプトキディは変数のタイプを使用して制御フローを操作しました。 (文字列の場合、モードAになりますので、Xを意味します。intの場合、モードBになりますので、Yを意味します)。 $£€£@£$# "¤#" !!
私はPythonが好きで、同じように恐ろしいものをそこに作ることができたと思いますが、コミュニティとツールははるかに素晴らしく、厳密です。
FOCUS。「4GL」(第4世代言語)として宣伝されています。一部のシステムはSQLのようなFOCUSを使用してdbクエリを実行できますが、その結果はBASICまたはその他の手続き型言語でラップされましたが、80年代のボーイングで取り組んできたシステムにはそれがありませんでした。企業を運営するのに非常に貧しいExcelのようなものです。それが私が嫌った唯一のプログラミングの仕事でした。
そのVB6 NOOOOOOOOOOOOOOOOOOOO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!あなたは1984年の終わりにウィンストン・スミスのようになります。
システムRPL。HP 48、49、および50グラフ関数電卓で使用されます。コンパイラが実際にプロセッサが実行するための高レベル言語を生成しているように思えたことがありました。
私のシニアデザインでは、 [〜#〜] chdk [〜#〜] を使用して深度マップを生成するようにCanonカメラをプログラムしました。ほとんどのコードはCで記述されていますが、uBasicと呼ばれるこのとんでもない言語でインターフェイスする必要があります。基本的に、適切なパーサーでは実装されていなかったため、変数は1文字にしかならず、非常に遅いため、間違えた場合はカメラが停止します。
WebspeedとSpeedScript ..ひどい、説明なし:)
良い神、あなたは誰も使用していないことを意味します PL/SQL ? Oracleである地獄からのスポーンは解釈され、Oracleサーバーのコンテキスト内に存在します。プログラムが完了するまで、すべての出力がスプールされます。表示できる出力の量には絶対的な制限があります。デバッグすることはほぼ不可能です。 Ga ...考えているだけだと思う。
私はJavaについて愚痴とうめき声を上げようとしていましたが、明らかにそれは悪いことではなく、それはトローリングに相当するでしょう。また、さらに悪いことを思い出しました。
マジックII。
それは言語としてかろうじて修飾されました。実際、データ駆動型プログラミングモデルを備えたpre-SQLデータベースシステムとしてより正確に説明できます。これは、データベーステーブルで行うほとんどすべての操作が、データの反復処理を開始する前に何かを実行し、次にデータの反復処理を行い、完了後に何かを実行するという鋭い観察に基づいています。
「プログラミング」マジックでは、プログラムのこれらの3つのフェーズを説明するテーブルのフィールドに入力します。また、この混乱全体と結びついたテキストモードのスクリーンデザイナーもいました。訓練されたMagicユーザーは、かなり速いペースでレポートとデータ入力画面をノックアウトすることができ、管理者を満足させました。
私にとっての問題は、この言語には非常に最小限の抽象化機能しかなかったことです。他のルーチンから呼び出すことができるルーチンを定義できます。それでおしまい。データベーステーブル以外のデータ構造、メモリ内配列はありません(ただし、新しいテーブルを定義できます!)
ハッシュテーブルも、変数(言語がサポートしていた)を意味のある方法で整理する方法もありません。リストなし。なし。もちろん、クラスやオブジェクトモデルに似たものはありませんが、正直なところ、私はそれなしで生きることができました。そして、私はやった。
さらに悪いことに、「プログラム」には、特定の表現などを表示するためにズームインする必要があるフィールドに隠された断片がありました。そのため、コードの画面を読んでそれが何をしたかを知ることはできませんでした。
このことが、データ駆動型プログラミングを究極の悲しい頂点に押し上げました。それは強迫観念であり、プログラミングツールに現れています。その悲惨なジャンクを私の後ろに置いて良かった。
最近、私はマジックを使っているときに一緒に働いていた元同僚に会いました。私がそれをしてからほぼ20年が経ちましたが、彼女は私のプロジェクトの1つを維持することを任されているか、どこかで再帰的な手順を見つけたときに敗北を宣言したことを教えてくれてとても嬉しかったです。彼女はマジックで再帰を実装している人を見たことがありませんでした。誰も持っていない。それは未知の領域でした。このツールが再帰可能であることに気付いた人はいないと思います。
このプロジェクトは、誰かの脳が爆発する前に、急いで書き直さなければなりませんでした。
Dataflex 2.3およびVDF4。
VDF 4は、Dataflexから私を遠ざけたものです。
彼らがした最もばかげたことの1つは、3番目のマウスボタンにWindowsメッセージを使用して、IDEとコンパイラーの間で通信することでした。3ボタンマウスがなければうまくいきました。
SNOBOLにはいくつかのきちんとした機能があり、Perlよりも文字列処理機能が豊富でした。また、1つのタイプのステートメント:<base string> <match string> = <replacement string> :S(<label>) :F(<label>)
があり、ほとんどのコンポーネントを省略できます。制御構造は、一致文字列がベース文字列で見つかるかどうかに応じて、あるラベルまたは別のラベル(存在する場合)にジャンプすることによって行われました。文字列にはさまざまな関数とサブ文字列を含めることができるため、妥当なSNOBOL文字列には、お気に入りのプログラミング言語標準の裏に記載されているすべての構文ツリーを含めることができます。
パーサーを記述するのは簡単でした(必ずしも効率的であるとは限りませんが)が、算術演算やループのようなものは苦痛でした。
間違いなく、私が今まで使った中で最悪の言語は Oz でした。マルチパラダイムプログラミング言語を作成しようとして失敗した試みです。ご想像のとおり、最終的には非常にわかりにくく、非常に複雑な構文になります。機能的な方法または命令的な方法で作業していることを示すために、さまざまな区切り記号があります。機能的で副作用のないメソッド部分を持つクラスを定義する奇妙なものをいつも見つけます。
オベロン。
大学での最初の1年では、全員がOberonでプログラムしなければなりませんでした。このアイデアは、誰も有利なスタートを切ることができないようにすることだったと思います。この言語は、恐ろしいOberon OS/GUIに結び付けられていました!何が変わったかはわかりませんが、それは間違いなく史上最悪のプログラミング経験でした。
FireBugが存在する前のJavascriptと、メモ帳を使用してコーディングします。
これは私の人生で最も恐ろしいコードでした。JSは大文字と小文字を区別し、頭痛の種がたくさんありました。 IE奇妙な方法でエラーを検出...
ここでロールプレイングゲームについて話していない、fellas。私は大学でCOBOLとRPG IVを取得しました。フォークで眼球を掘り出したい言語があれば、それはRPGです。コードを左から右に記述するだけでなく、正しい列にいることを確認する必要があるという点で、ほとんど「列ベース」のコードです。この背後にある理由は、言語が元々パンチカード開発用に作成されたためです。
ファイルに書き込めません!なんてこった!
まあ、ダミー、列68の大文字Fを忘れました。
私が出会った言語に関しては、COBOLとSchemeに投票します。
COBOLは、ビジネス専攻がプログラミング言語を記述してはならないという決定的な証拠でした(これは、ビジネス専攻の卒業生であるCISから来ています)。半一貫性のある小説を書いて、それを何かにまとめることはできません。 40年前に使用されたことは知っていますが、大声で叫ぶために誰かがCOBOL.NETに移植しました。
2番目の場所はSchemeで、変数タイプは1つだけです:リンクリスト。あなたがアメリカ生まれの火星人であるならば、それで考える方法を学ぶことは、ホッキョクグマのように考える方法を学ぶことを試みることに似ています。それは他のすべてに完全に異質です。
私が専門的に使用した言語に関して、VBScriptは伝承しています。 VB最悪です。VBScriptでMD5アルゴリズムを実装しようとしました。最初にやらなければならなかったのは、おかしなビットシフト操作を実装することでした。ホイールを再発明するのではなく、そして、実装を探しました。私が見つけたものは、子供ではなく、次のアルゴリズムに従いました。
それは完全な混乱でした。 そして、それは私が見つけた最高のものでした。
(注意:それは私が覚えている限りでは最高のアルゴリズムです。6年前です:))
どんな言語でも、右手で最悪になることがあります。そして、不適切なチームワークはそれをさらに悪化させます。自分の足で撮影するのが面白くない場合は、同僚の足をいつでも撮影できます。これまでのところ、私が見た中で最高の言語はC++です。それで同僚の脳を本当に傷つけることができます。
APF。あなたはおそらくこの悪夢を聞いたことがないほど十分に幸運です。これは、IBMのメインフレーム階層型データベース/トランザクションモニターへの高価なアドオンでしたIMSシステム。どこから始めるか。
配列のサポートはありませんでした。 10個のアイテムの配列がある場合、ITEM1、ITEM2などをコーディングし、各アイテムを処理するために10行のコードを記述しました。
あなたのコードはデータベースに保存され、実行時に挿入されました。コードが分割され、いくつかのレコードに保存されたものの内部構造に行います。他の人のコードを上書きするのはとてつもなく簡単でした。
一部のコードはトランザクションに関連付けられていましたが(IMSはサービスを代弁します)、一部のコードはデータベースレコードに関連付けられていました-誰かがレコードにアクセスするたびにプログラムの誤った部分が実行された場合。
デバッガはありません。「コンパイラ」は実行時に表示されるほとんどのエラーの基本的な構文チェックのみを行い、そのうちの1つは4つのエラーメッセージでした。
これらのエラーメッセージの1つは「INVALID DATA TYPE」でした。つまり、すべて、変数名、行番号、手掛かりがありません。
ただ恐ろしい。
間違いなく、それはSmalltalkでした。しかし、技術的にのみ:実際の言語は問題ありませんでしたが、クラスに使用したIDEはVisualWorksでした。これは単独で最悪のIDEこれまでに経験したことがありますが、ここにいくつかの恐怖の例を示します。
-コード(すべてのプロジェクトが単一のファイルにラップされている)を保存することはできません。ただし、すべてのコードが完全に構文的および意味的に正しい場合を除きます。ボタンはウィンドウなどから描画されます。 -残念ながら、保存せずに2〜3時間の新鮮な作業を行った後、VisualWorksがフリーズしました。幸いなことに(私は思った)、保存ボタンはまだ機能していました。そこで、安reliefのため息をついて、プロジェクトを保存しました。しかし、プロジェクトを画像として保存するVisualWorksの方法のため、ファイルを再度開いたときに、 保存しました 凍結状態のプロジェクト。私はコードの以前のバージョンに戻らなければならず、数時間の仕事を失いました。
そして恐ろしい単一の最悪の症状IDE design:-元に戻すステップは1つだけです。それだけではありません。これを聞いてください。 、「元に戻す」を押すと、元の行ではなく、現在のカーソルがある場所にコード行が貼り付けられます。WTFはそれですか??
追伸私は言語について話しているのではないことは知っていますが、これは言語での私の経験を表していたので、このスレッドでまだ合理的に答えを出すことができると感じました。 :)
PowerDynamo
これは、データとともにwebappコードをデータベースに直接保存したSybaseの製品でした。変数スコープはなく、strlen()関数は本質的に乱数ジェネレーターでした。
Smalltalk。
大学で学ばなければなりませんでした。言語のあらゆる側面が嫌われた。私たちの教授は言語の実装を間単に選択しただけかもしれませんが、基本的には次のように機能しました
参照できるソースコードはありませんでした。メソッド実装を作成および編集できるクラスツリーがありました。コードをメモ帳に切り取って貼り付ける以外にコードを保存する方法はありません。セッションを保存できますが、これらはバイナリダンプです。
環境全体はSmalltalkで書かれており、少年-それは遅かった。キーを押すたびに画面全体が再描画されます。エディタ(ソースコードの読み込み/保存が不足しているため使用する必要がありました)には、挿入/オーバーライドモードなどの基本的な編集機能がありませんでした。
この言語は、ループを早期に終了することができないという点で純粋でした。プログラミングを簡単かつ効率的にするものはすべて、この言語では禁止されています。
すべてがオブジェクトでした。ブール値の比較演算子をオーバーライドすると、システム全体がクラッシュしました。
CodeGear Delphi
本当に嫌いな言語ではなく、IDE:CodeGear RAD Studio for Delphi。これは、私が今まで使った中で最悪で、バグが多く、クラッシュに満足しやすいIDEです。私と他のDelphiプログラマは、IDEがクラッシュまたはフリーズするため、毎日開発時間のhoursを日常的に失います。
CodeRushをインストールした後、アプリケーションは事実上使用できなくなりました。ユーザーの入力がなくても、定期的に5〜15分間隔でクラッシュしました。さらに悪いことに、謎のエラーはbasicデバッグ、たとえばブレークポイントにヒットすることによってトリガーされました(通常、デバッガーはブレークポイントにヒットし、そのトラックで単にフリーズします)変数の割り当てのような些細な行。あなたができることはそれ以上先に進めないだろう)。プログラムをそのままにしておくと、何らかのメモリ例外をスローする前に最大30時間安定したままになります。
したがって、CodeGear RAD Studioのライセンスに数千ドルを費やした後、誰もそれを使いたくありませんでした。会社を辞めるまでに、DelphiプロジェクトはすべてVIMでコード化されていました。
「Visual C++」....非常に多くのレガシーコードが織り交ぜられていました...どこでも。
Obj-Cが大好きになりました。
prova について言及することも忘れました。はい、それは混合言語です。これは、Javaの上に構築されたプロローグ実装です。つまり、非常に遅いことを意味します。彼らは、Java関数、悲しい部分結局のところ、両方の言語の長所を失うことになります。著者がなぜJava内のプロローグの実装だけを選択しなかったのかはまだわかりません。独自のインタプリタを構築する代わりに、Javaからのコード.
OPS5。今でもそれについて考えると、私は公然と泣きます。
ああ、おいで。 3ページでは Forth ?マジ?
確かに、APLのように強力であり、その場所があります。ただし、APLと同様に、書き込み専用言語カテゴリで1位を獲得します。 80年代後半にこれを強制した物理学教授は、ソフトウェアの世界を引き継ぐと確信していたので、今でも呪いをかけています。
私は、逆ポーランド記法で現実を処理する宇宙の5人に心から後悔しています。または、「謝罪+」のようなことを言う必要がありますか?
私の投票は、DATABUSに基づくDB/C DXです。私はあなたのほとんどの人がそれを聞いたことがないと確信しています。
最悪のプログラミング言語? - ブレインファック
私は自分でそれを扱ったことはありませんが、最悪と呼んでいます。しかし、一般的には本番用ではなく、チャレンジとして使用されます(もっと週末:今週末は退屈しています。三目並べを書き直せるかどうか見てみましょう)。 WikiのHello Worldプログラムをご覧ください。
JCL(Job Control Language)は、私がこれまで触れた中で最悪のものでなければなりません
dBase II(3ではなく2):幸いなことに、私はあまり使用しませんでした。20年以上も経っていますので、痛み以外はあまり覚えていません! IIRCは、変数名(およびその他の場所)に特殊文字を自由に使用することで、読み取りをほぼ不可能にし、フロー制御に欠けていました。 3のほうがずっと多く使用されているように見えました(2を使用していたときはすでに行っていましたが、雇用主は安価でアップグレードできませんでした)が、もっと良いかどうかはわかりません。
たぶんFORTRAN ....私はまだそれを持っています。
私にとっての答えは、Crystal Reportsで使用されるBASICのような言語であるCrystal Syntaxです。単なる比較以外の何かを達成しようとすることは、せいぜい困難であり、最悪の場合不可能です。確かに、彼らは配列をかなりうまくやっています:
{some_database_field} IN ["firstValue", "secondValue", "thirdValue"]
しかし、次はまったく機能しません。
{some_database_field} NOT IN ["firstValue", "secondValue", "thirdValue"]
言語にはNOT演算子がありますが。
誰もAS400とは言いませんか????
私は大学でそれを持っていました、そしてそれは間違いなく最悪でした...
誰も言及していないことに驚いています[〜#〜] intercal [〜#〜]:頭字語が発音できないコンパイラ言語。 gotoステートメントはありません。それは声明から来ています!
でも、まじめな話ですが、私の2つの候補はVBと、HTMLの組み合わせ、PHPと作業する必要のあるJavascriptです。
VBには5つの異なるループ構造があるためです。私が理解している間に、している間、している間に。しかし、あなたは本当にする必要がありますか?本当に?
HTML/PHP/Javascriptは、いずれかの言語の特定の機能のためではなく、非常に複雑な方法でそれらを散在させることができるためです。 HTMLタグを開き、その中にいくつかのJavascriptを挿入し、途中でPHP ifを開始し、javascriptとHTMLタグを閉じてから、後でPHPを閉じて、 HTMLとJS ....(([)] [)])
それは単なる悪いコードのように思えるかもしれませんが、私たちがその方法で行っていることを行う別の方法をまだ見つけていません。
I4GL(Informix第4世代言語)。
ありがたいことに、それはほとんど死んでいます。この言語は見たり書いたりするのは難しくありませんでしたが、実装上の欠陥によりほとんど役に立たなくなりました。
まず第一に、インタープリター(より柔軟で遅い)とコンパイルされた(ほとんど役に立たない、あなたの生涯で実際に実行を終了した)2つの言語でした。もちろん、専有。
初期のバージョンにはいくつかの算術演算子がなかったため、一時データをデータベースにプッシュし、数学にSQLを使用する必要がありました。
マルチユーザー機能が想定されていましたが、バックエンド(Informix Turbo、覚えてますか?)にはロックされた行で90秒待機してから有用なエラーが返されるのではなく、適切なロックがなかったため、使用不可でエラー以外の戻り値。 I4GLはバックエンドなしでは役に立たなかったので、言語ランタイムの欠陥だと思います。
私はかつて、以前のプログラマーのすべてのユニオンをI4GLループの一連の小さな選択にハッキングする仕事をしていました。その理由は、あなたの生涯で組合が完成しないからです。もちろん、挿入を非常にクラッシュさせるため、プロジェクトマネージャーはインデックスのUnique制約を削除しました。
誰もDCLについて言及していませんか???
私の答えはかなり境界線ですが、記録する価値があると思います:
HTML
決して強力な言語というわけではありませんが、十分な知識を持ち、プログラマとして自分自身を分類する人の数を考えると、資格があると思います。
PHPなどの言語に向けられた多くの不安(このスレッドでも)は、HTMLの制限にその根源があります。いくつかの低点を考慮してください。コンテンツの混合を促進します。そして、それは冗長で反復的であり、仕様には依然として曖昧な領域があり、そして言うまでもなく、実装は伝統的に仕様への適合の欠如に苦しんでいます。ストレートHTMLは苦痛です。
はい、悪い風変わりな言語がありますが、共通言語をその限界を超えてプッシュすることは私の本のより大きな悪です。
確かに、私はthatさまざまな言語の経験はあまりありませんが、Pythonと言わざるを得ません。言語自体は大丈夫ですが、 ""!= "\ t"などのインデントは嫌いです。 「自動」スコープ終了のアイデアは素晴らしいものですが、これは他の人のコードを使用するためにスペースを200回押すのに非常に多くのエラー/時間がかかります:(