
翻訳者から:経験豊富なプログラマーであるValery Aleksievは、キャリア開発の最初の段階でソフトウェア開発者が何をするのが最も良いかについて話しました。 特に、どのツールを使用する価値があり、インタビューで何を探すべきか。
私のキャリアの最初の数年は、集中トレーニングの年でした。 私は厳しい現実に直面し、以前は考えもしなかったさまざまなスキルを身に付ける必要があることに気付きました。 そのため、他の開発者向けに小さなガイドを作成することにしました。 この記事では、インタビュー、プログラマーとしての仕事、改善に役立つリソースなどのトピックを明らかにしています。
就職面接
プログラマーとしてのキャリアを始めたあなたは、すぐにインタビューが下手なことに気付くでしょう。 それらは関係するすべての関係者にとってひどいものになる可能性があります。 彼らは単に時間をつぶすものであり、ストレスを発生させる要因であり、キャリアを成功させるための最初の障害です。 しかし、あなたはそれらに対処しなければならないので、何を準備するかを知る方が良いです。
戦闘準備
質問とタスクは非常に異なる可能性があります。例として、人気のあるFizzBuzzタスクを引用します。
1から100までの数字を表示するプログラムを作成します。ただし、3の倍数の場合は、数字自体の代わりにFizzを出力し、5の倍数の場合はBuzzを出力する必要があります。 3と5の倍数である数値の場合、単語FizzBuzzを表示します。
すべてが一日のようにシンプルで明快なようですよね? 実際、ほとんどの初心者インタビュープログラマはこのタスクに失敗します。 上級職の応募者がタスクを完了できず、さらに、ネットワークにアクセスできる場合もありました。 私のアドバイスは、最も頻繁に使用するプログラミング言語でのインタビューの前にこのタスクを完了することです。 そうしないと、インタビューはすべての参加者にとって時間の無駄になります。
もちろん、もっと多くの知識が必要です。 特に:
- 基本的なデータ構造とアルゴリズム:リンクリスト、配列、ツリー、および並べ替え。
- 文字列の不変性、メモリ管理など、「自分の」言語に関する一般情報。
- クラスとオブジェクト、継承などのオブジェクト指向プログラミングの概念。
あなたが最高の側から自分を見せたいなら、これはすべて文字通り輝きに磨かれなければなりません。 面接の準備に役立つこのようなリソースをアドバイスできます。
- 「Cracking the Coding Interview 」は、プログラミングに関する多くの問題とその解決策に関する情報が記載された素晴らしい本です。
- CodeWarsは、ブラウザでさまざまな言語を使用して直接解決できる、通常とは異なるプログラミングタスクを備えたサイトです。
Skillboxの推奨事項:実践コース「Profession Web Developer」 。
「Habr」の読者には、「Habr」プロモーションコードを使用してSkillboxコースに登録すると10,000ルーブルの割引があります。
そしてもう少し

追加の知識と経験を得るのに役立ついくつかのポイントがあります。
まず、自分の考えを明確に述べ、知識と能力を説明することを学びます。 優れた折り畳み可能な履歴書の作成方法を学びます。 これはばかげて聞こえるかもしれませんが、多くの求職者はこれを行う方法を知らず、彼らが個人的な会議で何であるかを説明することも、有能な履歴書を書くこともできません。
次に、GitHubまたは他のオープンリポジトリにコードの例を投稿します。 コードサンプルは複雑すぎてはなりませんが、コードはクリーンで合理的なものにする必要があります。 これは、面接の前にスキルの一部を示すチャンスです。
オープンソースプロジェクトに参加してみてください。 これはあなたの経験を示し、チームで働くことを教えます。
インタビュアーにインタビューする
はい、インタビューはあなたに尋ねるだけではありません。 あなたはあなたの将来の仕事や会社のさまざまなニュアンスに興味を持つことができますし、そうすべきです。 答えを注意深く聞いてください。 それらは非常に重要であり、新しい会社が何であるか、そのチームおよび仕事についての明確な情報ではなく、明確な情報を含んでいます。
質問する例を次に示します。
私の標準的な勤務日は何ですか?
異なる企業のソフトウェア開発者のタスクは著しく異なる可能性があるため、これは重要な問題です。 答えの自信や曖昧さがなければ、これは警告であり、ここで何かが間違っていることを示していると考えることができます。 あなたを雇う人はあなたが会社である理由を明確に理解する必要があります。
ソフトウェアをどのようにテストしますか?
理想的には、テストは非常に多様でなければなりません。 答えが「バグなしですべてを一度に書くだけ」のようなものである場合、エラーがあるが、誰もそれを望んでいない、または修正できないという方法でこれを理解する必要があります。
どのバージョン管理システムを使用していますか?
チームワークに必要な重要な質問。 答えが「何、バージョン管理システム?」である場合、そのようなインタビューからすぐに遠くに逃げます。

対話者がカスタムシステムについて話し始めた場合、ここのインフラストラクチャは長い間明らかに更新されていないため、この会社でも良いことは何も待っていません。
コードレビューを行っていますか?
実際、コードレビューは多くのエラーを特定できるため、チームワークの重要なステップです。 あなたが否定的に答えられた場合、それはチームの仕事があまりうまく配信されていないことを意味します。 もちろん、例外もありますが、ほとんどの場合は例外です。 「私たちはお互いを信頼している」というようなことを言われたら、検討する価値があります。 ほとんどの場合、この会社の誰も検証していません。
どのような教育プログラムを提供できますか? プログラマーは絶えず進化しなければならないので、ほとんどの企業は学ぶ機会を提供します。 そうでない場合は、お金が問題になるか、開発者が頻繁に変更されます。

どのソフトウェア開発プロセスを使用していますか?
2人以上が働く会社では、チーム全体の仕事のための何らかのアルゴリズム、合理化されたプロセスが必要です。 このようなものがなければ、この会社での仕事は、燃える自転車に乗るようなものになります。
技術的債務問題をどのように解決しますか?
技術的な負債、またはコーディングの負債は、コードまたはアプリケーションアーキテクチャの長命のバグを識別する用語です。 問題が蓄積し、最終的にプロジェクトのさらなる作業にとって非常に深刻な障害になります。
解決策がないと言われ、会社が「新しい機能に焦点を合わせている」場合、問題は解決できないほどの規模に成長しているか、近い将来カオスが始まる可能性があります。
企業文化について教えてください。
企業によって雰囲気や文化は大きく異なります。 ただし、数年間は週に40時間以上チーム内にいる必要があるため、発言内容に耳を傾けてください。
プログラマーとして働く
さて、あなたはインタビューのすべての段階を経て仕事に就きました。 おめでとうございます!

今何 あなたは多くの興味深いことを理解する必要があります。 私たちはプログラマであるため、コードの説明に専念しましょう。
良いコード
次の基準を満たしている必要があります。
- コードが記述されているよりもはるかに頻繁に分析されるため、読みやすくするため。 そのため、コードは自分自身と同僚の両方にとって読みやすく、理解しやすいものでなければなりません。
- 信頼できる。 すべてのクラスとメソッドが正しく使用され、プログラムがクラッシュしないことを確認する必要があります。
- 最適化。 完全主義者であってはなりませんが、コードを定期的に確認する必要があります。 少しのコード最適化を行う準備を常にする必要があります。
学ぶべきことがいくつかあります。
あなたはあまりプログラミングしません。
はい、これは奇妙に思えるかもしれませんが、実際には次のことに多くの時間を費やします。
- デバッグ
- コードを読む;
- 会議および電子メール/応答の作成。
- 計画中。
そして、プログラマーのキャリアにとって重要なスキルについて話しましょう。
コードのデバッグと読み取り

- デバッグのプロになるには、適切なツールを決定する必要があります。 最も一般的なプログラミング言語には、デバッグに必要なツールがあります。 それらを知り、それらを使用する方法を学びましょう-これにより、数え切れないほどの時間を節約できます。
- 基盤、コードベースの構造を理解してください。 ReSharper、grep、Sourcegraphなどのツールを使用してコードを学習できます。
- マニュアルをご覧ください。 技術文書を学んでいる開発者がほとんどいないことを知ると驚くでしょう。 その結果、多くの人はソフトウェアがどのように機能するかを知らないだけです。つまり、デバッグにより多くの時間が費やされます。 ドキュメントを読むだけで、時間を節約できます。
組織と計画
同僚とやり取りし、タスクを計画し、実行する(そして同時にいくつかを行う)必要があるため、時間を整理する必要があります。 これはあなたを助けます:
- TODO /タスク。 おそらくあなたの会社はタスクを維持し、その実装を監視するためのシステムを持っていますが、あなた自身のシステムを起動することは害になりません。 Trello、Todoistなどを使用してください。
- 注。 その過程で、多くの場合、さまざまな必要なささいなことを記憶する必要があります。 Evernote、OneNote、その他のツールを使用して記録するのが最善です。
- グラフと視覚化。 Lucidchart、Visioなどのツールを使用してパフォーマンスを評価することをお勧めします。
ライブラリを使用する場合
ほとんど常に。 車輪を何度も再発明する必要はありません。 ほとんどの場合、ライブラリなしで作業すると時間の損失につながります。 もちろん、これは、アルゴリズムの使用方法やデータベースの構造について無知のままにしておく必要があるという意味ではありません。これをすべて使用する方法と場所を理解する必要があるからです。
最も一般的な言語の標準ライブラリは非常に効率的です。 ドキュメントを参照して、それらの使用方法をよりよく理解してください。
時間の節約に役立つ場合は、追加のライブラリを使用することを恐れないでください。 次のいずれかです。
- コードの品質を評価できるオープンソースのライブラリ。
- MITおよびBSDでライセンスされているライブラリーは、問題なく使用できます。 GPLに注意してください。
- すでに長い間使用されており、幅広い機能を備えたもの。
- サポート-定期的に更新を受信するもの。
- 他の企業/プロジェクトで使用されており、信頼性を示している可能性があります。
改善し続ける
それは陳腐なように聞こえるかもしれませんが、仕事中や空き時間に-毎日でも学ぶ必要があります。 これは、オンラインコース、書籍、ブログ、および2番目(3番目)の教育によって支援されます。 会議やさまざまな種類のワークショップにも注意を払う価値があります。 最も有名な会議の中で、GOTO(一般的な方向)、Strange Loop(一般的な)、PyCon(Python)、CPPCon(C ++)、DEF CON(セキュリティ)、Fluent(webdev)を選びます。
- オンラインコース「Profession frontend-developer」
- 実践コース「Mobile Developer PRO」 。
- 実用的な年次コース「PHP開発者0からPRO」 。