JavaRush /Java Blog /Random-JA /昔のヒューマニストはいかにして IT の道へ進んだのか
PieIsLie
レベル 35
Санкт-Петербург

昔のヒューマニストはいかにして IT の道へ進んだのか

Random-JA グループに公開済み
花火!実は、私は長い間、この投稿に正確に何を書こうか、そもそも書くべきかどうかについて考えていました。偶然ですが、過去 2 年間のさまざまな時期に、私は Java 開発者の職に就く可能性をさまざまな方法で評価しました。「遅かれ早かれ間違いなく」から「IT 分野ではチャンスがありません」まで。 古いヒューマニストがどのようにして IT に進んだのか - 1しかし、JavaRush に登録してからほぼちょうど 2 年が経過しました。数か月前に最初のオファーを受け取り、少し後に 2 つ目のオファーを受け取り、それから新しい仕事を始めました。成功事例はコース中に非常に役に立ったので、自分自身の成功事例を投稿することにしました。このコースは 2018 年に開催されたため、一部の情報が最新ではない可能性があります。すぐに言いますが、テキストが多くなるからです。トレーニングと就職活動(要件、対応、技術仕様、面接など)についてお話します。また、私個人に役立ち、他の人にも役立つかもしれない一般的なヒントをいくつか書きます。 私自身について簡単に説明します。32歳、管理と営業で 10 年の経験、教養教育を受けていますが、技術的な背景はまったくありません。数年前、私は C++ を始め、次に Python を始めようとしましたが、頭が痛むだけでした。したがって、私を才能のある開発者と呼ぶのは難しく、むしろその逆です。

ステージ 1. トレーニング

私は、適切な月額料金表、教材の明確な構造、多くの練習、そして私自身のコミュニティの存在を意識して JavaRush に来ました。最初の点はすべて明らかですが、構造のない言語を学習するのは非常に困難であり、そのようなトレーニングを行うと、確実に Java コアに重大なギャップが残ることになります。 インタビューや技術仕様の経験から、「コア」に関する質問は、ジェネリックのビット単位のシフトやキャストから IO やシリアル化に至るまで、あらゆることに使用できることがわかります。練習は必須です。自分で書いたとしてもまだ半分しか理解できず、覚えていません。さて、コミュニティ: あなたは問題を解決しました - コメントでそれを自慢してください。まだ決めていない場合は、質問することはできますが、既成の解決策を提供してくれる人はおそらくいないでしょう。そして、コースを終了した後でも、無料トピックのカスタム記事に戻りました。そこには、始めるのに役立つものがたくさんあります(特に、ステップバイステップの例と面接用の質問を使用したフレームワークの最初の経験)。一般に、私はこのプロジェクトに基礎を提供してもらったことに感謝していますが、JavaRush だけに依存するつもりはありません。同じ Shildt の何よりも素晴らしい点は、研究対象のトピックに「重なって」おり、いくつかの点を明らかにしていることです。時には理論を先取りして Google に頼らざるを得ないタスクについては、レビューですでに多くのことが述べられています。私にとって、これはマイナスというよりプラスです。そして、今の状況が私が勉強していたときと同じであるという事実はありません。 私と同じように Java を「ゼロから」始める人への即時のアドバイス: ある段階で退屈したり難しくなったりするかもしれません。
  1. ゼロから始めるのは誰にとっても大変です。コースの最後まで到達できるのはわずか 5% の人だけです。あなたの使命は、その一員になることです。

  2. 1 ~ 2 か月後、タスクがより難しくて面白くなってきたので、興味を持ち始めました。我慢して。

  3. 主なものは毎週の進捗状況です。2 週間休んだ後は、復帰するのがすでに困難です。また、誰もが数か月間続けて毎日書くことができるわけではありません。週の時間制限を自分に与えます (たとえば、15 時間)。平日は毎日 1.5 時間コードを書き、両週末にさらに 3 ~ 4 時間コードを書くことも、数晩休暇を取ることもできますが、「週末の制限」により、増加。こうすることで、スケジュールは柔軟ですが規則的になります。もちろん、タスクやプロジェクトごとに作業を測定することは可能ですが、構文レベルとカーネル レベルでは時間で十分です。
休暇と短期休暇の両方を余裕があったにも関わらず、一般的に、コースを完了するまでに約 5 か月かかりました (インターンシップに参加する前に) 。繰り返しになりますが、週 5 日勤務の場合、自由に使えるのは週末と平日の夜 22 時から 00 時だけになります。そのため、スケジュールを緩めたり、より厳密なトレーニング体制をとったりすれば、はるかに早く対処できます。その後、インターンシップに参加する計画を立てましたが、結局うまくいきませんでした。

ステージ 2. 独学

それで、私はインターンシップには参加できませんでした。グループへの採用が終了するまで、技術要件については数日しか残しておらず、要件を理解する時間がありませんでした。なじみのない単語が多すぎました。なぜなら あと 3 か月も待ちたくなかったので、自分で先に進むことにしました。幸いなことに、すべての人気のあるフレームワークのガイドとビデオ チュートリアルがあります。次の数か月間、私は Spring MVC、Spring Boot + Data、Spring Security、Hibernate、jUnit、Maven、Git、RDBMS を扱い、SQL をマスターし、それらすべてを 1 つの全体にまとめようとしました。6 か月後、今見ると恐ろしいプロジェクトがありましたが、潜在的な雇用主の要求に応じて公開できる「アダルト」フレームワークと GitHub を使用する実践的な経験を積みました。 アドバイス:
  1. .gitignore について学ぶのは早ければ早いほど良いでしょう。;)

  2. 多くのガイドには、複数のフレームワークが一度に含まれています。これを使用して独自のものを追加してください。Maven + Spring Boot + Data を使用してオンライン ストアを作成し、認可、単体テスト、ロギングを追加しました。

  3. Web プロジェクトの場合は、インターネットから無料のフロントエンド テンプレートを取得できます。これらのテンプレートを使用すると、作業がより快適になり、Git の README のスクリーンショットとして見栄えが良くなります。同時に、HTML と CSS を覚えることができ、スタイルやレイアウトを修正したくなるでしょう。

このような開発計画を自分で作成する最も簡単な方法は、HH for Junior/Middle Java Developer の求人を調べて、どのテクノロジとフレームワークが最も頻繁に示されているかを確認することです。それらを書き留め、技術仕様を考え出し、実装の期限を設定します。ただし、おそらく地元のインターンシップから始めれば、自宅プロジェクトに数か月を費やす必要はなくなるでしょう。

私に足りなかったもの(その後面接中に火傷を負ってしまいました)

  1. アルゴリズム。私の間違いを避けるために、私はすぐにロシア語の短い本「Grocking Algorithms」を勧めます。アルゴリズムの複雑さ、アルゴリズムの構成、クイックソートでは不十分な理由、グラフ理論の入門など、すべてが最もわかりやすい言語で説明されています。

  2. 「ボンネットの下」のコレクション。これが JavaRush にあったかどうかは覚えていませんが、HashMap.get() がどのように機能するか、または HashSet が要素の順序を保持することが保証されていない理由を知ることは役に立ちます。繰り返しますが、どのコレクションがスレッドセーフであるか、そしてその理由を説明します。

  3. SQL。少なくとも JOIN までは必要です。JOIN とは何なのか、どのように機能するのか、2 つのテーブルに SELECT をその場で紙に書く能力が必要です。www.sql-ex.ru をお勧めします。1 ~ 2 日で目的のレベルに到達できます。

  4. Spring Core: どのような種類のアノテーションがあるか、コンテキストとは何か、Bean がどのように作成されるか、どの Bean スコープがスレッドセーフであるか、および相互注入を解決する方法 - すべてのインタビューの質問。ページの返し方、JSONの返し方など。私は現在、ロシア語で『Spring 5 for Professionals』を読んでいますが、一般的には『Spring in Action』が推奨されています。

ステージ 3. 就職活動

実際、在宅プロジェクトを完了してから最初の数か月で、さまざまなジュニア/研修生の求人に (HH、LinkedIn、人材紹介会社を通じて) 約 30 件の返信を送りましたが、結果はほぼゼロでした。私は未経験の求人のみに焦点を当て、自分に馴染みのあるスタックを正直に示し、カバーレターに自分の学習能力の高さを書きました。その結果、電話は 2 件あり (そのうち 1 件は私の初中級レベルの英語ですぐに終わりました)、さらに 2 社が技術仕様書を送ってきました。「会議」は 1 回だけで、その後私は一人で紙に書かれたアルゴリズムの問​​題を解いていました。その後、人事部は書類を取り上げて「電話します」とだけ言いました。私はいくつかのインターンシップ(無給および条件付有給)を受けようとしました。技術仕様書は作成しましたが、最終的な社会保障を超えることはありませんでした。しかし今では、研修生は間違いなく T-Systems、CFT、Andersen、EPAM によって採用されていると言えます(評価はまちまちなので、自分で判断してください)。私にとって、数か月間収入がなくても死なずに座る機会があるのであれば、この分野に参入するのは良い方法です =) 一般に、この経験の後、私はやや落ち込んで、調査全体を一時停止しましたほぼ 6 か月間、以前のプロファイルで作業を続け、趣味でいくつかのアプリケーションを作成しましたが、Git に投稿することさえしませんでした。ある知人に会うまで、私は欠員に関する失敗について何気なく話しました。当時、彼はすでに中間開発者として働いていましたが、同じように独学で始めました。 知人が私にいくつかのアドバイスをくれました。彼自身もそれを活用し、将来の就職活動に大いに役立ちました。彼らをフォローするかどうかはあなた次第です、なぜなら... 彼らはある意味、完全に正直ではありません。したがって、さらに引用します。
  • インターンシップ、卒業プロジェクト、フリーランス、リモートワークなど、いずれにしても、6 か月以上の商業経験を履歴書に記入してください。これは、人事部による履歴書の最初の審査の段階で非常に役立ちます。

  • 履歴書から「ジュニア」と「期待給与」という言葉を削除します。Java 開発者としてそのままにし、金額については各企業と個別に話し合ってください。

  • あなたの期待値を言う前に、人事部に提案された給与の「フォーク」の名前を言ってもらうようにしてください。企業が 80,000 ~ 120,000 を提示し、あなたが 40,000 以上を求めている場合、一部の選考者はあなたを軽蔑するでしょう。

  • 1 ~ 3 年の商業経験が必要な場合でも、あなたのスタックに合ったすべての求人に応募してください。

これらの推奨事項をすべて実行した後、検索状況は大幅に改善されました。まず、約 12 件の新規回答のうち、半数はほぼすぐに会議、Skype、または TK のいずれかで終了しました (これはすでに、前月に無視されたこととは大きく異なります)。第二に、人事担当者がインスタント メッセンジャー、メール、LinkedIn などで私に手紙を書き始めましたが、私は返信しませんでした。第三に、商業経験の要件は実際にはそれほど厳格ではないことが判明しました。多くの企業は、企業実務経験が 1 ~ 3 年の指定範囲内にない候補者とコミュニケーションをとる準備ができていました。 その結果、ジュニアに1件のオファーがあり、試用期間のあるミドルに1件がオファーされました。捜索には合計2か月かかった。 アドバイス:
  1. 履歴書には、これまでに取り組んできた言語、テクノロジー、フレームワーク全体を含めてください。

  2. LinkedIn に登録してください - さまざまな企業の人事担当者が本当にたくさんいます。プロフィールを慎重に記入してください。実際、これはあなたの履歴書でもあります。連絡先のネットワークを構築するには、プロフィールに関連する LION を追加します。LION はすべてのユーザーからのリクエストを受け入れます。

  3. 無料の Java テストに挑戦してください。多くの場合、ジュニアの面接の前に紙でテストが行​​われます。事前に準備しておくと良いでしょう。

インタビューについて一言
  1. 彼らはいつもコレクションについて尋ねます。どのコレクションがあるのか​​、どのように違うのか、いつ使用するのが最適なのかなどです。

  2. 常に抽象クラスとインターフェイスを使用します - メソッド、フィールドを持つことができるか、どれを継承できるか、など。

  3. ほとんど常にマルチスレッドを使用します。仕事で使用したもの、キーワード、メソッドなど、util.concurrent についてよく知っていますか。

  4. メモリを扱うとき、ヒープ、スタック、これらの文字列は等しいか、これらのオブジェクトはなぜ等しいか、などを扱う場合によくあります。

  5. 時にはアルゴリズムについて、どれを知っていますか、どのような複雑さ、なぜ今からアルゴリズムを書けるでしょうか。

  6. 場合によっては、パターンに基づいて、どのパターンを知っているか、どのパターンを使用するかに基づいて、シングルトンまたはファクトリーを作成します。

  7. SQL では、JOIN の種類、トランザクションとは何か、JDBC でのトランザクションの実行方法、短いクエリを作成することがあります。

実際、すべては会社に大きく依存します。Java Core については 1 つの質問もせず、フレームワークと SQL について 40 分を費やして話す人もいます。人気のあるフレームワークをまったく使用せず、アルゴリズム、型、コレクション、メモリについてのみ質問する人もいます。会議の約半分はテストから始まり、時にはロシア語、時には英語で行われました(20~30分間に20~30の質問)。通常、「これがコードです。実行されるかどうか、実行されない場合は何行目ですか」または「ここにいくつかのオブジェクトがありますが、N 回の操作後にそれらは等しくなりますか」というレベルの質問です。 技術仕様について一言: コミュニケーションを開始した企業の 70% が、会議の前後に技術仕様を私に送ってきました。通常、完成には数日から 1 週間かかりますが、ほとんどの場合、締め切りは多少前後することがあります。技術仕様としては何でも使用できます。私が行った例は次のとおりです。
  • 新しいレコードを編集および追加できる Salesforce プロフィールのビジネス連絡先ページ。

  • コンソール制御を備えた Spring State Machine を使用した、高層ビルのエレベーターのシミュレーション。

  • LibGDX ライブラリに基づいた Android アプリケーションで、ボタンが押されたときに 1 文字ずつテキストが出力されます。

  • HTTP リクエスト経由でクライアントを追加し、JSON を返すカーシェアリングの REST 模倣。

  • フリーセルを通じて無向グラフをソートする問題。

  • ファイルの座標を使用して二等辺三角形を検索します。

  • Stream APIを使用した完成したコードのリファクタリング。

  • 三項式をサポートする UI 計算機。

  • 結果をファイルに書き込むスレッドの競合。

場合によっては、計算メソッドは単体テストでカバーすることが求められ、クエリ メソッドは結合テストでカバーすることが求められます。 アドバイス:
  1. タスクを完了するだけでなく、コードが OOP 原則に準拠していることを確認するようにしてください。

  2. コードの効率を確認してください。私は、BufferedWriter の代わりに PrintStream を使用したことが原因で一度拒否されました。

  3. 実行時間は 50% の余裕をもって計画してください。締め切りの朝 8 時に git Push を実行するよりも、早めに開始して終了する方が良いでしょう。

まあ、私が望んでいたものはすべて書いたと思います。最も重要なことは、水が石をすり減らすということです。Java でたくさん書いて、長い間仕事を探して、結局何も見つからないということはありません。30 歳の人文科学の専門家がそれをやり遂げたなら、あなたはさらにうまくやれるでしょう。重要なことは、最初の電話、技術的な任務、面接を恐れないことです。失敗するたびに、自分で何かを学び、それを改善することが保証されていました。長くなればなるほど、より自信が持てるようになります。どこかで混乱していることが判明した場合、またはエラーがある場合は、事前に謝罪し、書き込み、修正します。私の経験が少なくとも誰かの役に立てば幸いです =)
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION