YandexがC ++コースを作成した方法、またはすべてを書き換えなければならなかった理由

Yandexでは、C ++は主要言語の1つであり、私たちの検索はその中で書かれています。 その開発は私たちにとって非常に重要なので、1年以上前に、Yandexのイニシアチブで、ロシアのワーキンググループが「プラス」を標準化するために設立さました。 それを通してロシア語圏のすべての開発者は、言語の開発に影響を与える機会があります。







最近、Fizteh、Yandex、ShADがCourseraプラットフォームで別のコース「 C ++開発の基礎:ホワイトベルト 」を開始しました。 C ++を理解することに専念しています。 このコースの目的、準備方法、最終的に何が起こったのか、今後の計画は何かをお伝えします。



どのようにすべてが始まり、捨てられ、再び始められたのか



5つのC ++コースのうち、昨年の夏にオンラインスペシャライゼーションを考案しました。 最初はゆっくりとプログラムを作成し、その後積極的にプログラムを作成し、10月にビデオの撮影を開始しました。



私たちは最初の年のほぼ半分をやめることができましたが、その後、典型的なC ++学習エラーに関するKate Gregoryレポートを見て、それらのほとんどを作成したことに気付きました。 11月30日、私は一般的なチャットルームで書いた:

みんな! 悪い知らせがあります。 私たちの最初のコースは*****であることに気付きました:(


ここでは、最初から現代のC ++について説明し、次に練習を目的とするコースを実施することに決めたことに注意する必要があります。 教科書や参考書を読み直すのは意味がありません。最初のレッスンの後にコードを書き始めることができるように、人々にスキルを与える必要があります。



それでも、学問的な習慣と細心の傾向は強すぎました。 プログラムの初期バージョンでは、厳密な論理に従ってトピックが互いに続きました。 それらの間のすべての依存関係が観察され、C ++機能が深く詳細に検討されました。 残念ながら、結果として、標準のコンテナとアルゴリズムはテンプレートの構成であったため、2年前に初めて言及されませんでした。2年目の半ばまで、学生はテンプレートを知らないと思っていました。



おそらく誰もが問題が何であるかを理解しています。 std :: vectorを使用するには、テンプレートがどのように構成されているか、さらにはそれが何であるかを知る必要はまったくありません。



気づきの瞬間は耳をつんざくものでした。最初から、コースは実用的で、助けではなくスキルを与えるべきであると知っていましたが、それでも間違いを犯しました。 私たちは自分の専門知識の犠牲になり、実際の問題を解決するためにどれだけ簡単に使用できるかを伝えるのではなく、C ++の内部構造を掘り下げました。



プログラムを書き換える必要があることが明らかになり、キャプチャしたビデオのほとんどは破棄して再度削除する必要があります。 これにより、教師チームに多くの作業が追加され、コースの実用性について常に考える習慣が追加されました。



どうした



これまでのところ、最初のコースが判明しました。 コースの始めに、学生はC ++言語を人生で初めて見ることができると仮定されます(しかし、同時に、一般的なプログラミングを想像し、「変数」、「サイクル」、「リスト」という言葉を恐れないでください)、しかし、最終的にはそこにレコードを追加し、既知のキーのすべての値を要求する機能を備えた小さなキー値リポジトリを書き込むことができます。



人がそのような問題を解決するのを便利にするために、基本的な言語構成、機能、いくつかの標準コンテナとアルゴリズム、構造とクラス、入力と出力のフロー、例外について話す必要があります。 深く語らないことは価値がありますが、このすべてを活用することができます。 そしてもちろん、ビデオを見た後すぐに自分の手で素材に「触れる」ことができるように、より多くのタスクを与える必要があります。



ベータテスターとリスナーからの声が励みになります。 ロシア語のほかに、多くの人々が素材を理解しやすくするための良い入門コースを取得したことを願っています。



他の利点は上記で説明されています:練習、多くのタスク、最新の言語機能の使用に焦点を合わせます。 このコースの作成者は、C ++を深いレベルで知っており、戦闘プロジェクトでこの言語を使用する豊富な経験を共有する準備ができている上級Yandex開発者です。 したがって、講義と課題の両方で、最も効率的で安全でシンプルなC ++プログラミングを学びます。



計画-黄色から黒帯まで、よりハードコアなコース。 私たちは、C ++に精通している人でさえ興味を持って耳を傾け、おそらく新しいことを学ぶことができるような方法でそれらを準備しようとします。 それまでの間、新しい友達に最初のコースを勧めてください。



何を言っているのか



コースは5週間続きます。 毎週、1番目から4番目まで、リスナーは10〜20の短いビデオを見て、いくつかの問題を解決する必要があります。 毎週のコースの断片には、証明書を取得するために必要なタスクとテストの両方、および追加のオプションタスクが含まれています。 先週は、最終的な問題の解決に完全に専念しています。



義務的な課題へのアクセスには約1,600ルーブルがかかりますが、学生はコースラに財政援助を申請し、無料でアクセスできます。 すべてのビデオとオプションのタスクはデフォルトで無料です。



コースプログラムは次のようになります。



週1



C ++機能の概要
ハローワールド

タイプの概要

単純型操作

コンテナ運用

言語構成
コンパイル、起動、デバッグ
Eclipseをインストールする

Eclipseでプロジェクトを作成する

Eclipseでのデバッグ
運営
割り当て

算術

論理的
条件付きステートメントとループ



週2



機能
構文

値でパラメーターを渡す

渡されたオブジェクトを変更する方法としてのリンク

コピーを保存する方法としてのconstリンク

constは、変数の偶発的な変更から保護します
コンテナ
std ::ベクトル

STD ::マップ

std ::セット

未来に目を向ける:構造化されたバインディングで辞書を走査する


週3



アルゴリズムとラムダ

最小、最大、ソート

count、count_if、ラムダ

stdの現代的な類似物::変換-(自動&x:コンテナ)
変数の可視性と初期化

OOP

構造とクラスの概要


週4



OOP:例

テキストファイルとストリームを操作する

オペレーターの過負荷

コンテナへのカスタムタイプの埋め込み

例外



週5-コースプロジェクト



標準化グループの作業に参加しているantoshkkaは、コースで私たちを助けてくれました。 残念ながら、多くのC ++コースとチュートリアルは実際には「C」チュートリアルであり、このような知識があると苦労します。 したがって、クラスを使用してメモリリークを発生させずに、正しいC ++のコースを準備しました。 他のプログラミング言語を知っていて、正しいC ++の世界を発見したい場合は、私たちのコースが最適です。



All Articles