いつか、プログラマーはこの世界を台無しにするでしょう





1.最初のストーリー:記憶



私が小さいときに小学校に行ったとき、そのような話が私に起こりました。 休憩中に、私は数人の友人と一緒に教室で花が自分で棚から落ちました。 私たちの先生はすぐに私たちの不幸を入力しました。 赤ペンは日記の悪い行動についてメモを取り、両親は呼ばれた。 それは非常にin辱的で理解しがたいものだったので、私は永遠に感銘を受けました。 それ以来、私はしばしば何が花を落とすのか疑問に思っていました。



しかし、最も論理的な説明は、彼自身が倒れたということです。 彼は単に成長し、新しいシュートを投げ、発達し、質量を増やしました。 太陽に手を伸ばした。 花の重心の投影がサポートを超えて、転覆した。



なぜこれをすべて書いているのか分かりません。 おそらく憂鬱は秋と黄色の葉と一緒に来ました。 プログラミングの科学は非常に急速に発展しているように思えますが、飛躍的に進歩しているため、新しい技術を急速に開発しているため、いつの日かすべてを抑えることはできません。



2.第2のストーリー:プログラマーは、プログラムがどのように機能するかを正確に知りません。



私はお金を支払われた最初のプログラムをよく覚えています。 とても長い時間でした。 古代には、わが国のコンピューターはそのように存在していませんでした。 少なくとも彼らは非常にまれでした。 特定の営利組織、そしてそのような組織は「協同組合」と呼ばれ、独自のコンピューターの生産を開始しました。







これは、580番目のプロセッサーに基づいたスペシャリストコンピューターの改良されたクローンでした。 このコンピューター用に独自のソフトウェアを完全に作成することになっていた。 最初の段階はBIOSの作成です。 さて、BIOSの最初の手順であるRAMテストを行いました。 状況のせいで、製造中のコンピューターの信頼性が非常に低いため、RAMテスト手順のためにメモリ内の一時変数を使用することができず、テストされるまでこのRAM自体には何も保存できませんでした。 もちろん、これは一般的に論理的です。 しかし、8ビットのアキュムレータAとさらに6つの8ビットの汎用レジスタB、C、D、E、H、Lだけでメモリテストを記述する方法はありますか? 同時に、テストは右上隅のグラフィック画面に、テストされたメモリの量を書き込む必要があります。8Kb、16 Kb、24 Kb ...私はこのプログラムを長時間、おそらく2〜3日間実行しました。 私が書いたところ、数百行のアセンブラー・コードのように見え、それをチェックし、その仕事に誇りを持って、プログラムを磁気テープに保存しました。 私は作品を手渡すようになりましたが、磁気テープはテープレコーダーで読み取ることができません。 さて、何をすべきか:すぐにメモリから働く「スペシャリスト」のオフィスで(!)すべてのコードを再入力し、それを開始し、チェックしました-乾杯! 動作します! 私は仕事のために約30ルーブルを得ました。 大金。



それらの非常に遠い時代に、私のプログラムでは絶対にすべてを理解しました。



それ以来、私はアセンブラープロセッサ6502、Z80、x86でプログラムを作成しました。 それから彼はフォースで病気になりました。 FoxProで何かが判明しました。 それから、C / C ++が登場しました。 彼らは、MFCを理解している人は誰でも、一般的にトップクラスの専門家だと言いました。 習得済み、マスターMFC。 彼は、Windows 2000 / XP / w7およびLinux用のドライバーを作成しました。 会社のウェブサイトを作成する必要がありました-参加:html、css、js、php。 さらにいくつかのマイクロコントローラー:Atmel、STM32、もう1つのx86:MMX / SSE。 さらにC / C ++:ブーストが必要ですか? QTが必要ですか? よく、ブーストを取り、QTを取ります。 ええ...途中、誰かがEclipseでAndroidタブレット(Java + JNI + cpp)用のプログラムを作っているところです。また、Altera FPGAでチップ上にシステムを組み立てています。これがVerilog、テストベンチ、その他のハードウェアです。



そして、あなたは何を知っていますか? これらのすべてのシステム、プログラム、アルゴリズムがどのように機能するかを完全に理解したかどうかはもうわかりません。 過去の自信の痕跡はありません。 私の推定によると、最大2〜3個の新しいテクノロジー、プログラミング環境、ライブラリ、および言語を研究し、導入し、毎年使用し、研究する必要がありました。 この場合、もちろん、あなたがすべてを知っていて、すべてを理解しているという確実性はありません。 実際、あなたは基本原則のみを理解しています...



さらに、一度、約5年前に、c ++ 11、c ++ 14/17などの新しい標準の出現により、c ++を知って、愛し、理解したと思ったら、私は本当に苦労しています。 私の同僚は、型付き変数を自動型に置き換えてコードを修正します... この後、コードがより読みやすくなるのは本当にですか? または、それほど新鮮ではないニュースがあります。継承は望ましくありませんが、テンプレートが望ましいです。 そして、私は悲しいです。 テンプレートが好きではありません。



私はおそらく完全に落胆するだろうが、コニャックを飲みながら他のプログラマーとのプライベートな会話では、私はそのような問題を抱えているだけでなく、私は非常に後方にいるだけではないことが突然わかります(誰もがすぐにこれを認識するわけではありませんが、それはカップのサイズに依存します)。 私と同じように、多くの人が他の人のコードを完全に理解していない、システム全体の仕組みを完全に理解していない、すでに接続して使用しているサードパーティライブラリを知らない、67ストリームとなぜメモリで350メガバイトを占めるのですか?



高レベルのプログラミングに関するこの物語のすべての中で、私は「魔法のライン効果」について心配しています。 私は最近この用語を自分で作り出しました。 それはバグについてではなく、もちろんそうであり、そうであり、またそうである。 プログラムのプロパティを根本的に変更するのは約1行のコードです。







たとえば、QTライブラリを使用してプログラムを作成しています。 QGraphicsViewから継承した独自のクラスがあります。 クラスを使用し、その上にQGraphicsSceneを配置し、あらゆる種類のQGraphicsItemを追加し、その後はゆっくりとですが、楽しく生きています。 次に、1行の魔法の行をコードに挿入します。



QGLWidget* gl = new QGLWidget(); this->setViewport(gl);
      
      





, OpenGL.

— ! ! , OpenGL?

— , .

— . ! !

— ! … - DLL .


. , - - . - QGraphicsVideoItem… - … :



QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
      
      





— ! ! ?

— … , OpenGL DirectX (Angle) : CPU …

— ???????????..

— , , QA..


N1: ! ? ? time-to-market? « », , ?



:



. , . . .







, . -, , . -, , , , .



:





- , , . .



. , , , , . , , - , , , . , , . , , . , - . , , .







: , , — . — .



. , — , . , , .. , , . , — . , 100%, . . . , .



, (!) .



. , , , . .



, . , . . , …



. : , . , , continuous integration, . « ». , . QA , QA, , . , , (feature), .



, , , . — , , — GUI, : , , . , , . , — . .



N2: , .



: , , ? ? - ? , , CAD? ? ? -? . , , …



All Articles