ソフトウェアエンジニアリングとは何ですか。 Yandexでの講義

MIEMの技術科学の候補者、経済学部のコンピューターサイエンス学部のソフトウェアエンジニアリング学部の副学長、ISP RASのシステムプログラミング学科の副学長Efim Grinkrugは、ソフトウェアエンジニアリングとは何かという質問に答えています。



この用語はほぼ50年前のもので、1968年に初めて使用されました。 事実、当時は、古典的なエンジニアリングの方法(たとえば、個々のコンポーネントへの分割)がソフトウェアの作成に本格的に使用され始めていたということです。 しかし、なぜ以前は使用されていなかったのでしょうか。また、ここ数十年で「ソフトウェアエンジニアリング」という表現がどのような新しい意味を獲得したのでしょうか。







カットの下-詳細なデコードとスライド。



自己紹介をさせてください。 私の名前はYefim Grinkrugです。私は高等経済学部のソフトウェア工学科の教授です。Yandexの参加により組織された新しい学部があります。 おそらくご存知でしょう-コンピュータサイエンス学部。 3つの部門があり、そのうちの1つはソフトウェア工学部門です。 今年以来、私はシステムプログラミング部門の副部長です。 これは9月以降に開設した基本部門であり、その内容については、今日も少しお話しします。







このスライドを見ると、1968年に物理学と数学の学校444を卒業したことがわかります。あなたの中に誰かいますか? これは、13番目のパルコバヤ、イズマイロヴォのLyceum No. 444です。 私は2週間前にそこにいましたが、彼はまだ残っていました。 これはモスクワで最初の物理的および数学的な専門学校でしたが、1959年に大工と鍵屋の代わりに、そこで勉強するずっと前にプログラミングレッスンを導入しました。 それ以前は、誰もがスツールを計画していました。 そして、学校の入学許可証と一緒に証明書を受け取ったとき、私はそのような紙を受け取りました-私は「第3レベルのコンピュータープログラマー」の資格を授与されたと言う資格証明書です。 当時、職業は第1から第6までで、第6が最もクールでした。 3番目のカテゴリはプログラミングで5人、2番目のカテゴリは4人であり、一流のtroechnikはありませんでした。 そして、1968年に初めて「プログラミング」という言葉に出くわしました。 なぜ1968年に? 私がこの学校に来たのは、最初からではなく、9年生の中頃からでした。 そして、モスクワの古い地区が破壊され始め、学校が閉鎖され始め、数学のクラスで勉強するために大学に行ったので、私がそこに来たとき、私は9年生の中頃にこの学校に行くように勧められました。そこかどうか。 このサークルには3人がいました。 私はそこに来て、1週間後にどこかで6か月のプログラミングテストが行​​われたことがわかりました。 もちろん、私には眠りも精神もありません。 彼らは私に教科書をくれました、私は正直にこの教科書の半分を数晩で読んで、それから私はプログラムを書かなければなりませんでした。 そして、プログラムは一種の二重ネストループでした。 45分で、そして今、彼らが言うように、言語で、アセンブラーのような二重サイクルを描く時間が必要でした。 私はこのマシンにあるコマンドの半分しか読めませんでした。ループ演算子は私に届かず、もう半分にあり、条件付きジャンプを使用してダブルループを実行する必要がありました。 あなたはおそらくそれが今どのように構築できるか想像するでしょう。 パラドックスは、コントロールの「5」グレードが2人でクラスで受け取られたということです。1人の少年が最初からそこで勉強し、考えられるすべてのオリンピアードの勝者であり、あなたの謙虚な使用人でした。約35人の学生は全員、サイクルに非常に優れていましたが、うまくいきませんでした。 それ以来、私はプログラミングに深刻なものは何もないという考えに非常にしっかりとインスピレーションを受けています。 人が緊張し、2日で2年前に何もせずに何もせずに5を得ることができれば、この問題には深刻な関係はなく、これは完全にナンセンスです。 ここに数学、物理学があります-これは重大であり、これは完全なナンセンスです。 そして、ビジネス、プログラミングに対するこの態度は、その後約6年間、つまり卒業までほとんど残っていました(当時は研究所と呼ばれていましたが、それについては後で詳しく説明します)。







私に最初に読んでもらい、読む時間がなかった教科書は、「意味のある表記でのプログラミング」と呼ばれていました。 すぐに疑問が生じました。空の表記法でプログラミングとは何ですか? この意味でのロシア語は、プログラマーの用語の翻訳を非常に示しています。 長年後、私は言う:はい、時々それが起こります。 時々意識的に、しばしば無意識に。 意味のない表記と比較して意味のある表記を使用すると、プログラムの作成プロセスが容易になり、それに応じて意味のない表記がこのプロセスを複雑にします。 難読化と呼ばれる特別なプログラムがありますが、これはコードの盗難を減らすためだけに、表記を意味のないものにします。



プログラムを作成するプロセスは何ですか? これが講義のトピックであり、これがソフトウェアエンジニアリングの本質です。







他のプロダクションと同様に、プログラムのプロダクションは長い道のりを歩んできました:職人から産業まで。 プログラミングだけでなく、職人技と現代生産の一般的な違いは何ですか? いくつかの際立った機能があります。 これらの兆候は何ですか? まず第一に、分業。 彼らが言うのは偶然ではありません。「一人の職人」。 おそらく、いくつかの科学的結果が関係しており、職人はそれを行うことはめったにできません。 より近代的な技術。 分業があるためには、いくつかの基準を維持する必要があります。 固着しないコネクタを固着しようとしたことがありますか? そのため、いくつかの専門的な基準を維持する必要があります。 他に何?



-結果。



-そうです。 結果の品質。 そして、それはどこから来たのですか? そして一般的に、それは何に影響しますか? そして、なぜコンピューターサイエンスの新しい学部がある高等経済学部からここに来たと思いますか? 先日、新聞Vedomostiは、世界のすべてをコンピューター化するロシアの大手持ち株会社であるIBSのアナトリーカラチンスキー社長を書いたためです(ルクソフトもこの持ち株会社の一部であり、品質証明書を持っている国で唯一の会社です)たとえば、インド経済は、ソフトウェア生産で世界最高レベルです)、ロシアからの石油およびガスの輸出(これらは数に含まれています)の2倍近くをソフトウェア輸出から受け取ります。 したがって、プログラムの深刻な開発とプログラムの将来の深刻な開発者としてのあなた-これはおそらく国宝です。







ソフトウェアエンジニアリングとは何ですか? そして、一般的なエンジニアリングとは何ですか? ウィキペディアに登ると、誰もが最初にやることが好きなので、これはソフトウェアの開発、機能、メンテナンス、およびこれをより良くするための上記すべての研究に対する体系的で規律あるアプローチの適用であると読むでしょう。 「エンジニアリング」は、一般的にフランス語の「contrive」という言葉に由来し、知識の実用化を目的とした技術活動の領域です。 コンピュータサイエンスがどのように異なるか、またはそれらがソフトウェアエンジニアリングにどのように関係するかについて、少しお話しします。 他の科学が工学に関連するのとほぼ同じ方法で。 工学は科学ですか?



造船は科学ですか? はい、アカデミシャンのクリロフは造船でいくつかの成果を上げました。 これは科学ですか? アルキメデスの法則のほかに何がありますか? つまり、科学は異なる可能性があります。理論科学、実用科学、工学科学などがあります。



ソフトウェアエンジニアリングは、ソフトウェアの生産と保守に関連する活動です。







この用語はどこから来たのか、なぜ1968年に物語を始めることにしたのですか? 1968年に歴史上初めて、この用語が使用され始めたためです。 ドイツのガルミッシュパルテンキルヒェン市でNATOが後援する会議があり、後に冬季オリンピックが開催され、西側世界各地から50人の有力な専門家がいました。つまり、「時間通りに信頼できるようにプログラムを作成する方法」ということです。1968年までに、私はこの非常に444番目の学校を卒業し、MIEMの1年目に入りました。かつてのように 私はMEPhIのコンピューティング学部の出身で、現在は高等経済学部の支部(または一般的に言うとキャンパス)になっています。 このように、1968年以来、この活動に特に魅力はなかったため、私は、専門的な意味で、ソフトウェアエンジニアリングと同じ年齢であることがわかりました。







私が学校にいたとき、最初のコンピューターの1つがそこにありました。それはUral-1と呼ばれていました。 残念ながら、ポリテク美術館は非常に長い間修理のため閉鎖され、その全体の展示はいくつかのコーナーに散らばっていました。 実際、かなり興味深い一連の家庭用コンピューターがそこで発表されました。 優秀な学生にはBESM-4でプログラムする機会が与えられ、BESM-3とこのウラルでは名誉を与えられませんでした。 これはチューブマシンです。 そして、これは学校の写真です。



誰が開発しましたか? ここには183個しか作られていないと書かれており、開発者の1人はユディツキー・ダブレット・イスラモビッチで、後にゼレノグラード市の創設者の一人になりました。 ゼレノグラード-モスクワの近くに「シリコンバレー」を作る試みでした。 彼は、残差クラスで考慮された型破りな算術デバイスの開発者の一人として知られています。 これはキャリーユニットを持たないこのような算術演算なので、非常に高速に動作します。 この線は何とか色あせてしまいました。そのような高速な算術に適したこの数字の表現から、通常の数字に前後に変換することは非常に難しいからです。







これは、ポリテクニック博物館に残っていたウラル1マシンです。







しかし、これはBESM-4マシンです。このマシンでは、自分で知らなくても、ダブルサイクルを正しく記述しました。 この機械は、ソビエト連邦でコンピューター漫画を製作したことも初めて知られています。 同じ美術館で展示されることもあります。







ガルミッシュ・パルテンキルヒェン会議は、すでに西洋の時代に、プログラムを書くことは、後で作業するハードウェアを行うよりも高価で長く、面倒であることが明らかになったという事実に捧げられました。 そして、疑問が生じました:なぜこれが起こっているのか、そして信頼できるプログラムを迅速に開発できるようにする方法は?



会議でのメインレポートのトピックは、「ソフトウェアエンジニアリング」という言葉で最初に表明されましたが、ソフトウェアを工業的方法で間に合わせではなく、工業的方法で効率的、費用対効果、信頼性、効率的に開発する方法の問題でしたか? そして、当時のすべての著名人は、鉄とプログラムの主で根本的な違いは、コンポーネントが鉄で開発され、プログラムが毎回ゼロから書かれていることだと認識していました(原則として、これはその年に起こりました)。 彼らは次の質問をした:「コンポーネント化が機器の工業生産で広く使われているのに、なぜソフトウェアで十分に使われていないのか?」







そして、ソフトウェアコンポーネントとは何ですか? その会議から登場した長期的な用語があります-コンポーネント指向プログラミング。 それは何ですか? そして、これはたくさんあります。 これは、プログラミング方法、大規模なソフトウェアシステムの作成方法、多くの開発者が参加する方法、そのような開発で得られた結果を他のソフトウェアシステムに使用する方法、および一般にそのような開発の結果と考えられるものについてですか? そのような大規模なシステムをどうやってデバッグするのですか? 他のチームの労働の結果を使用するには? 開発プロセスをどのように整理するか、どの順序でこれらすべてが見えるようになりますか? さらに、これはそうする人だけでなく、お金を払う人にも見えるはずです。 そして、このシステムが既に完了している場合、どのように開発するのですか? システムがあるので、私はすぐにそれらを見て、それは常に機能します。 そして、彼らがそれをやめれば大惨事が起こるでしょう。 そして、それらを開発する必要があります。







だから、私は何が欲しい? レゴコンストラクターで幼少期に行ったのと同じ方法でソフトウェア製品を組み立てたいと思います。







つまり、ある種の既製のキットを取り......







十分でない場合は、別のものを購入してください。







チームを編成します。











そして、レゴのようなこのビジネスを標準の既製のコンポーネントから構築します。































鉄自体があらゆる種類のコンピューティングデバイスを開発するために使用した、適切なパーツから住宅、都市、車を構築する方法、ただし、標準のラジオコンポーネントからラジオを開発する方法







ちなみに、これは私が比較的最近まで働いていた会社の製品です。







そして、それをすべて行う方法は? この会議の主な内容は、1968年です。 あなたがその時議論されたトピックである前に。 そして、誰がそこにいたのですか? ハードウェアとプログラムの両方のメーカーである教師がいましたが、特にエドガー・ウィーベ・ダイクストラがいました。 これ知ってる?



-はい。



-彼は何で有名ですか?



-アルゴリズムでした。



-そして、1つ、多くではありません。 ダイクストラのセマフォ、ダイクストラのアルゴリズム。 On-the-Fly Garbage Collectionは、現在のプラットフォーム(Java、.NETなど)で並列ガベージコレクションを数学的に正当化する方法に関する古典的な記事です。 著者はダイクストラでもあります。



ここに主要なトピックがありますが、それらのいくつかはもはや関係ありません。 たとえば、後者は「ソフトウェアをハードウェアとは別に評価する必要がありますか?」です。 この問題は真剣に議論されました。 そのようなハードウェアは、それが開始されたソフトウェアと比較して、まったく費用がかからないことを誰もがすでに理解しています。







そして、主なレポートは、このビジネスを産業の流れに乗せるために、そのようなコンポーネントプログラミングを整理する方法についてでした。 何年も経ちましたが、この質問は依然として関連しています。 これはそのようなプログラミングパラダイムです。 パラダイムとは何ですか? プログラミングアプローチは多くの1つです。 いくつかのプログラム構成を1回書くことで繰り返し使用できる場合(現代のオブジェクト指向言語では、通常、これらはクラスまたはクラスのセットです)、最初に適切に記述し、再利用して、エラーのない品質を達成するようにしてください。そして、高品質のコンポーネントから高品質の製品を組み立てます。 これには何が必要ですか? いくつかの規則を守らなければならないため、プログラミングの自由を制限する必要があります。 ルールはプログラミング標準です。 そして、これが私たちが手工芸から産業会話に移行するのは初めてです。 生産基準を導入する必要があります。 標準化は工業生産、結果の信頼性、分業の必要条件であり、明確にしたいほとんどすべての質問に答えるため、これは非常に言われていますが、ある種の標準的な関係です。



ソフトウェアコンポーネントは、一般にコンポーネントモデルと呼ばれる特定の標準に従って作成および使用する必要があります。 つまり、コンポーネントとは何ですか? コンポーネントモデル(多くの異なるモデルが存在する可能性があります)は、主要な質問に答えます。コンポーネントとは何であり、非コンポーネントとどのように違いますか?







ここで、コンポーネントプログラミングが存在しないことに気付くはずです(そしておそらく自分で既に感じているでしょう)。



プログラミングとは これは、多かれ少なかれ大量の鉄を何らかの有用な活動に強制するプロセスです。 これは、マシンが望んでいることを実行するための闘争です。 しかし、この闘争は機械との戦いではなく、あなた自身との戦いであり、無限の不名誉を生む傾向があり、あなたが何かをするとき、あなたは自分と戦います。 鉄との戦いはまったく無意味です。 あなたは自分の誤解や能力不足などに苦しんでいます。 そして、あなたがそれについて考えるならば、すべてのこの闘争は何らかの形でコンポーネントの性質と関連しています。







たとえば、コンピューターテクノロジーの歴史を見ると、大学で2種類のコンピューターでプログラムするように教えられました。アナログコンピューターはおそらく表示されないでしょう。 なぜ見ないの? 電話から始まるすべてのアナログ機器はすでにデジタルに切り替えられているためです。 ただし、最初はアナログコンピューターは既製のコンポーネントのセットであり、これらのコンポーネントを相互に接続し、出力または電圧でのみそのような機能を得るために、その前にワイヤが付いた大きな箱で、これで解決される問題の定式化をシミュレートしますアナログ車。 さらに、デジタルマシン自体は、何らかの形でアナログの電気要素で構成されています。 つまり、特定の弁証法です。







左側には、比較的遅いアナログコンピューターがあり、そのコンポーネントはワイヤーで接続されているだけで、目的の機能をシミュレートできます。



そして、ここで最初のデジタルカー(または最初のデジタルカー)が表示されます。 ハーバード大学の図書館で自分で撮影したことがあり、MARK-1と呼ばれていました。 右上隅の単語MARK-1からの文字「K」が落ちました。 たぶん、すでに接着されています。 このマシンのパラメーターが表示されます。



なぜこれがすべて重要であり、なぜNATOが初めてそれを採用したのですか? 戦争の終わり頃に発達し始めたことがわかり、そのように発達し始めたのは、爆弾を作る必要があり、爆弾をモデル化し、計算しなければならなかったからです。疑問が生じ、これにコンピューター技術を使用しなかった場合、地球はすでに半分前にすでに分裂していた可能性があります。 アメリカで爆弾を作ったロスアラモス国立研究所が、たとえば評価など、あらゆる種類のスーパーコンピューターを指示し、指示する主要な研究所の1つと見なされることは偶然ではありません。 , 24 ( ) .







? , , , , (, ), . , : , , .



, . , , . , , , , , . , . , , : , , , , .







. , « ». — . これは何ですか , . , . , , «» «». ? , , .



, . « » « B». ? , B — .







, , . , — , — , . , , . - , — , — .







— . . , , , , . . , , — , , . , ? いや? , ?



— .



— , . . . , . - . — .







« » , ( «») ( , ). , . , , . . . , , , . , , . . , . , . — , .



, - 15-20 , . . , , . , , , .







. , - , . , . , - . - , . , . cut and paste. . - , - .



C. C? - 1973-1974 C, , , PDP-11 , .



. . — . , . C , . , , - Assembler. C Unix.







1974 , , - . , , . . , C , , , Unix, . PDP-11 -3, -4, -5, -6, PDP-11. PDP-11 , .







( ), , . , , . , , ( « »). — . , . , , ( ), . - . .







? , 1967 , -9 1 ( ). , -10, 10 , 1970- , . , . , , 70- ( ) . . , , , , — .



, . , , - , . , , -6. -6 — 48- , , -6, . -10 , 16- , 32-, 64-. 64-, . -10 .







, 8 . , , , , .







( , , ), .







-10 1974 . - , . , , , , . , : « ?», : « , ». : « , , . , - , ». . .



, , Cray — . , Cray, -10 .



? , , , . になる方法 .



Empire State Building, , 100 . - .



, , . Empire State Building , , , . , . -, .







-10 . . . , , , , , . . . . , . , .







, , , ( 10-15 )… , , ?



— 2-3 .







? . , , . — . , , .







— — . . . . , . , 2 . ( , 1, ). — 17 , 5 , — — . — , . , . , , , -, , -, . -. . . , , - . , — . , , — , — , , , , . .







. , , . , . , ? 25 , 30, ? おそらくない。 , . , , , . , - .



. , ? , , . , . , , , . , , , , . - , . - , - , . , , , .



, , . , , . , , , - .



, . , . , — , . , , , , . .







. , . . : . , , , . これは別のトピックです。 , — . — . . , , , , , . . , . , , . , , , , , . , , , , , . , Windows , , , , .



? , — , - , , — , , . — , , . , -, , , , . , , , . , . , .



, . , . .

, , , Windows , , , . , . , , , . — .



, , , . , — . , .



? -, , , , . . , . , , , , , , , , , , , , , , , , , , . 50 ? , — — . , , - , , . .







, , , , , - , , Cray, - . , () -10, , , - . , . , Computer Museum , .







. , 1980- . 1983 . . , . .







. , . - . Apple Macintosh . . , . , , .







, , .







«», «». . 1987 , .







? . , .



- , ? ? , Linux, , Windows, . - , . , ?



— .



— : « ? , ». , — . , , . Intel . , , , - ? . , IBM 360-370, : « — ». : « ?» — « — . ». . . , — , . ここにあります。 , , , . , .



. 1990-, ? , Software House, , Software House, 1991 . . , , 1990- , . . 600 , . , «» ( ). , , Computer-Aided . , , CASE tool (CASE — Computer-Aided Software Engineering), , , , , , , , ( , ). «» ( ). . , DB2 .



, KnowledgeWare, , UML. , , — ( UML ), , UML. , -, 600 , « 755 », « 754 », - — « 850 ». , , . 2 . , , , , , , , . , .



- .



, , . . , - (, ), . , , , . .







, , , , , . , , «». . ParallelGraphics. . , . , . . 100, 120 . . . www.parallelgraphics.com , . - , , , , , .



, , Silicon Graphics. Silicon Graphics — , , . Jurassic Park , Silicon Graphics. «» Silicon Graphics Cosmo Software. , Silicon Graphics - (Kai-Fu Lee). Microsoft, Google. , . , , . .



, . , , , , , «». Microsoft . , .



, ? «». , , , Microsoft, Microsoft Imagine Cup, .







VRML, X3D. www.web3d.org . Web3D — . . «». , . «» 1 1996 , Java-. 21 , Java , , , , , , , . , , reusable code, . , . Unix , . Linux, .



, Java- JavaBeans. , , .











Microsoft. , « ». , . , , ? , ? . 2013 . -, , Microsoft , , -. , -, -, . , , , - . , - . , , , , , Microsoft — . «» . — , . — , .







, - .



. . mission critical software ( ). . , . ? , , : « „ “. , ?»



mission critical software? « ». : — ? «».



— , - , — . . , . , - . , «». , . «Tetris», , . , .



, , . , , , . , , . ? ? , , , , . , , .



? ? , - . , , - , ? , , , , . , ? , . , , , - , - , - . , — , . , Java, , , , , . , , - .



? ? - «»? , , ? , , ?



, , . - , , , — . , . , . , . , . . , . : « …», , , . . . , — , . , .







, Computer Science, .



— , , , , , . — . . , , , , , . . , , , . , . . , , , , , . , . , . , , , , , . - , . . , , . , , , - . ? , , , , , . , Java, , Java-, 100 % , . , - , , just-in-time , , .



, , . , -13 . , , , , . , - . 30 , , . , , , - , - . . なんで? .



, , ? . . Kicked the money changers out of the Temple. « », , , , , , . , , , , , , . , , .



. Python — , , -, , , , C Java. www.tiobe.com , 25 . 15 — Java . Java . , C#, . C# — , Java. なんで? , .



C — . , , Internet of things, , …



. MeshNetics, Internet of things . C, Assembler, . , , C Java 10 . , , , . Java-, , .



Android Java , ? Google, Sun Oracle. , Oracle Java-, , , . Java, Java-, . Python — , , , . Java , , 20 (, , ?), , . , , , «» Java. Java , .



, … - , . , « ». . - , «?», . , 10 - Java , Python , Java .



— , «», ? .



-はい。



— ? ?



-あります。 , — , . ? , , ? , , . , - , , . , , , , , , , , .



. , computer science, computer science , . .



, , , , . , -, — , . , , , , , . , - . , , 1968 , . DHL , , , . . , , . .



— ()



— , , , . ́ , . , , , . . , - 1990- «», «High-speed computers of the former Soviet Union», -. - . . — . e-mail, . — , IBM 360, , — . . , , — M-10 , — , 1983 — - . , . . , , , , . «»? , , . そのようなもの。 , , , . . Intel , , . , Intel, . Intel : (), (), -. - Intel -, , , . , .



, Intel , Oscar . . Intel Technology Award. , , . . , , , , .



ご清聴ありがとうございました。 .



All Articles