みなさんこんにちは!
今日、就職前にコースを実施することは多くの企業で非常に一般的であり、私自身もトレーニングでキャリアを始めましたが、教師として自分自身を試すことに常に興味がありました。 そして、この春、私たちの会社では、Android、Java、Javascript、QAなどの多くの分野で戦闘機を補充するチームに続いて、春夏のコースが開催されることを学びました。 部門長の提案で、私と同僚はJavaの方向でコースを実施する機会がありました。 この魅力的なイベントの詳細について、Habrに伝えたいと思います。
候補者の選択

私たちの部署の潜在的な従業員には何が必要ですか? 要するに、かなり典型的なテクノロジースタック、Java 8、Spring Framework、Hibernate / MyBatis、PostgreSQLを使用します。 したがって、上記のすべての重要な要素に触れる必要がありますが、 志願者のレベルは低くなり、誰かが初めて多くの名前に直面しなければならないかもしれないので、コースはかなり内容が想定されていた(そして判明した)。 触れたくない唯一のことは、データ型、クラスの説明、インターフェイスキーワード、ループ、分岐演算子などの幼稚なトピックでした。そのため、最初の段階で、スタッフは2つの簡単なタスクでリモートテストを手配しました。少なくとも何らかの方法でプログラミングの方法を知っています。 約150のアプリケーションがJavaブランチに届きました。主に上級生または最近の卒業生です。 40歳のビジネスマネージャーやアフリカ出身の学生など、非常にエキゾチックな代表者もいました。 入門的な課題を確認するとき、私は人がどのように彼の作品のデザインに関係するかよりも注意を払いました。 Hello Worldレベルのタスクでは、これに対する準備はそれほど大きくなく、外に出ようとすると、「なぜそんなに難しいの?」という困惑した質問をチェックしている人に出くわすことができます。 一般的に、誰かが開発環境からスクリーンショットを送り、誰かがWord文書にコードを挿入し、喜んでいる人がgithubにリンクを送りました。 そのために、登録に関するニュースを含む幸福の手紙が宛先に散らばる第2段階に進みます。
コースプログラム
Javaコアとして指定した基本トピック:
レッスン1。はじめに 言語の歴史についての短い話、JVMとクロスプラットフォームの動作、OOPの原則(3つの柱、SOLID、KISS、YAGNI)、および現代のJava開発者(IDE、CI、VCS、バグトラッカー)のツールについての少しの話。
コメント:トピックは非常に多様ですが、私たちの意見では、それらは良い「トピックへのエントリー」を提供します。 OOPに関する部分は最初のレッスンではかなり難しいが、宿題や今後の講義をチェックするときに後で参照できるようになることを自分から付け加えます。
レッスン2。例外、入力/出力ストリーム、シリアル化。
コメント:ここでは、すべてのトピックが非常によく相互に補完し合っています。finallyブロックで「クラシックスタイル」のスレッドのクローズを示し、try-with-resourcesの類似物を示します。 DataInputStreamやDataOutputStreamのようなラッパーストリームは、Decoratorパターンのシンプルでわかりやすい例であるため、最初のレッスンを参照する機会があります。
レッスン3。コレクション。
コメント:技術面接を受けたことがある人なら誰でも、コレクションは避けられないことを知っています。 ここには、ジュニア-ミドル-シニアレベルの専門知識のレベルを判断できるニュアンスの倉庫があります。 データ構造の内部構造とは別に、ArrayListとLinkedListの古典的な比較、「キー」HashMapの問題(値を失う方法、衝突解決のタイプ)、イテレーターのタイプ(高速フェイルと高速セーフ)、EnumSetなどの特別なコレクションについて説明します。 講義中、私はしばしば
tarzan82の投稿を参照し
ます 。私はプレゼンテーションの可視性と一貫性が本当に好きです。
レッスン4。マルチスレッド。
コメント:このレッスンでは、マルチスレッドコードの記述の基本、最も一般的な問題(ライブロック、デッドロック、飢v)、および条件付きの「低レベル」(スレッド、実行可能)および「上位レベル」並列API(java.util.concurrent)を紹介します。同期されたスレッドセーフコレクション。
レッスン5。Java 8の革新。
コメント: Stream API、ラムダ式、および機能インターフェースはプロジェクトで積極的に使用されているため、同じコレクション内のデータ処理に対する革新と最新のアプローチについて話す必要があります。
レッスン6。Java Coreブロックの要約。
コメント: Generics、Reflection API、Enum、および言及されていたが以前のクラスでは詳細に説明されていなかったすべてのものは、このブロックに分類されます。 形式は、「質問と回答」の形式です。
セッション7および8。Spring FrameworkおよびHibernate。
解説:便利なリンクと学習の推奨事項を含む入門スタイルの概要。希望する場合は、1レッスンの特別な深さに到達することはできません。 各フレームワークは個別のコースに値します。
クラス9-10。SQL Basic
コメント:最後のレッスンでは、SQLクエリの作成の基本について説明し、接続アルゴリズム(ハッシュ結合、マージソート結合、ネストされたループ)、クエリをより効率的に記述する方法について説明します。
まとめ
コースを実施したいという願望は、さらに2人の同僚によって表明されました。そのため、特定のトピックを実施する権利を得るために、ストローを引きました。 講義クラスと並行して、すべての学生にタスク(デスクトップアプリケーションとSpringベースのWebアプリケーション)が与えられました。 一部の男性のコースの結果に続いて、インタビューをお勧めしました。そのため、3つの新しいジュニアJava開発者がプロジェクトに成功しました。
トピックを完全に明らかにするために、私たちが遭遇した多くの問題を説明します。
1.当初、グループは18人で構成され、トレーニングの主な時間は6月に学生がセッションを行ったときに減少しました。 一方で、時間は最善ではありません-学習に問題がある人は、コースに適切な時間を割くことができません。一方で、追加の負荷は怠け者からの自然なフィルターとして機能します。 結局のところ、就職後の研究での問題が、従業員に仕事を強要することを強制しないという保証はどこにあるのでしょうか? 会議の時間の問題は非常に議論の余地があり、私や他の教師に依存していませんでした。 コース全体は週2レッスンのモードで開催されました。
2.宿題のテストは、いくつかの基準に従って行われました。
- 文章は課題の内容に対応していますか? さらに、実装の自由は学生自身に残っていました。 必要な機能と、適用が推奨されるテクノロジーのセットについて説明しています。 どのように、何を使用するか、学生は自分でそれを把握しなければなりません。 当然、独創性にはボーナスがありました。
- 学生がオブジェクト指向のアプローチをどれだけ理解しているか。 多くの場合、Java初心者はPascal / C ++から、オブジェクトを作成するためだけではなく、豊富な静的メソッドで表現された手続き型スタイルを使用します。
- Javaコード規約の遵守。 残念ながら、最初はこれに多くの時間を費やす必要があります。そうしないと、まぶたがコードを読み取れなくなります。
- 締め切り。 ここで私たちは非常に忠実でした、なぜなら 彼ら自身は最近学生でしたが、先に合格した人には好みがありました。
学生は宿題を郵便局に送り、それから私または同僚が小さなカバーレターを書き、そこに評決(仕事の可否)を報告し、欠点について多くのコメントをしました。 タスクごとのこのような反復は最大3に達し、制限を設定しませんでした。 いくつかの一般的な間違いの講義に
特別な注意を払ったり、ベストプラクティスを示したりしても、それを見逃す人々のグループが存在することが実験的に判明しました。 したがって、講義のプレゼンテーションは、教育のために犯罪者
を送るために
鼻を突くことができる便利な参考書になりました。
3.質問の数から判断すると、最大の困難は、並列プログラミング(最大数)とOOP(最小-質問なし)によって引き起こされました。 最初は、すべてが明確であり、トピックは非常に深く、個別に対処する必要があります。 大量の情報がすぐに私の頭に入ります。そこには多くのニュアンスがあり、すぐに消化することはできません。 2番目のより興味深いのは、 ほとんどの場合、オブジェクト指向プログラミングの原則は、特定のことを何も参照せずに、単純な人間の言語で推奨される性質の文で表現されます、彼らの意見では、目に見える実用的な価値があります。 確かに、練習が始まるとすぐに、ここで最も多くの問題が発生します。