web-dev-qa-db-ja.com

ジュニアプログラマーが短所を乗り越えるのを支援していますか?

チームに参加したり、一緒に仕事をしなければならないジュニア開発者に共通する不満は何ですか?明らかに、彼らは経験が浅いので、すべてを知っているとは期待できませんが、どのようなスキルが不可解に欠けていることがよくあります。具体的には、これらの欠けているスキルの構築をどのように支援できますか?

「助言を聞く」のような対人関係のスキルを意味するのではなく、(該当する場合)次のような技術的な問題を意味します。

  • 「あなたはSQLをしたことがないのですか?」

  • 「あなたはユニットテストを書いたことがありませんか?」

  • 「あなたはUnixコマンドラインの使い方を知りませんか?」

あなたがdo期待すること-新しいプログラマーにこれらの特定の欠点を乗り越えるように教えるための観察とテクニックを聞きたいです。

15
Andrew M

バージョン管理とは何か、またはそれを適切に使用する方法がわからない

私の会社に数か月間在籍しているジュニア開発者の1人は、Subversionの非常に基本的な知識を習得する必要がありました。それは本当に私をうんざりさせました...彼女はずっとコードをライブプロジェクトにチェックインしていて...彼女が何をしているのか全く分かりませんでした...?

25
sevenseacat

十分な質問をしていない

私は彼らが後輩であることを知っています、彼らは間違いを犯し、物事を知らないだろうと期待しています。したがって、何かを仮定する代わりに質問をするだけで、多くの王室のf ** kアップを回避できたでしょう。正直なところ、私は十分に困惑することはできません。

私が始めたとき、私は[〜#〜] tonnes [〜#〜]の質問をしました-彼らに私のお尻を救うことを何度も尋ねた。地獄、私はまだ多くの質問をしています...私はそれらが今より良い質問だと思いたいだけです。

23
Steven Evers

根本的な基礎を理解しようとする代わりに、貼り付けと試行錯誤

多くの後輩開発者は、見た目が近いコードをコピーしてから、動作するものにぶつかるまで、無作為にさまざまな変更の組み合わせを無作為に試します。 理由がわからない場合は、境界ケースにバグを導入している可能性があり、それを理解している人は後でクリーンアップする必要があります。

コードの「最初のドラフト」を保持する

経験豊富な開発者が特定の複雑さの新しい関数を書くとき、彼らはコンパイルのみを行うスタブから始めて、次に全体的なアルゴリズムのために高レベルの疑似コードコメントを追加するために書き直し、そしてそれらを一度に1つずつ書き直します実際のコード、テストの必要に応じてダミーコードを追加および削除してから、実装中に出現した冗長性を削除するように書き換えて、一連の連続的かつ段階的な改善を続けます。

ジュニア開発者は、1つの大きなチャンクにそれを記述し、大規模なブルートフォースデバッグを行う傾向があります。エディターに入力されたコード行を削除するのは好きではありません。最終的に機能して、機能以外の改善のために書き直すのを嫌がっていますが、実行する必要があるのは彼らです。そうほとんど。

14
Karl Bielefeldt

あなたが状況に遭遇する最初の人であると信じています。

あなたが直面するプログラミングの問題はすべて、一般的な形で他の人たちに直面しています。経験豊富なプログラマーから学ぶことはたくさんあります。私はGoogleより前のプログラミングを覚えるのに十分な年齢で、それはsuckedです。私たちが検索エンジンを持っているときはさらに悪かったが、ウェブにはまだそれほど多くの良い情報がなかった。秒単位でグローバルな知識にアクセスできるので、プログラミングは今よりはるかに生産的です。それを使用しない人々は、危険にさらされてもそれを無視しています。

編集

明確にするために、私はではないコピー/貼り付けプログラミングを提唱しています。ただし、自分で適切な意思決定を行う前に、既存の知識を確認する必要があると確信しています。

14
Scott Whitlock

彼らはすべてを知っていると思います。

私はジュニアを持っていた。 javascriptですべてを解決しようとしたインターン。いくつかの概念を説明しようとしましたが、彼は常にもっと上手くやれると思っていました。現在彼は、PDFなどの印刷可能なテクノロジーの代わりに、HTMLを使用して印刷出力用に作成した主要なプログラムを終了し、作り直しています。他の主要な問題の山は言うまでもありません。

レッスンは、プロジェクトの早い段階で主要な包括的なガイダンスをシニアに依頼することであり、支援なしで建築をやめないでください。コードと詳細は単独で記述できますが、少なくとも適切なテクノロジーを使用していることを確認してください。

10
P.Brian.Mackey

知識を進歩させたくない-代わりに最小の抵抗の経路をとる。

先日、グラフィックデザイナー(驚くほどプログラミングに熟練している人)と一緒にインターンがjQueryで何かを実装する際に問題が発生したため、助けを求めました-クロージャーが見えない場合、クロージャは苦痛になる可能性があります。

私はインターンに座り、何がうまくいかなかったのか、そしてその理由を正確に説明しました。バグを修正した後、追加可能ないくつかの改善点を指摘し(「私はここにいるため」)、最終的に20の代わりに10行で有罪関数を書き直し、バグはありませんでした。質問に答えた後、もう一度世界ですべてが大丈夫であることに満足し、私は去りました。

翌日、インターンは、「ええと、変更を加えたいと思って、理解しにくかったので、自分のやり方で関数を書き直したかった」という質問がありました(ほとんどの場合、私の改善を元に戻しました)。

彼は代わりにもっと頑張ったかもしれません(追加の質問をして、私が述べた概念を読み上げました)-コードが短いのでそれは理解するのが難しい-または簡単な方法で取り出します。誰かが後者をするのを見るたびに、それは私を悲しませます。

5
Jon

ジュニアが基本を知らないとき、私はめったにイライラしません、彼らはSCC大学でのような業界スキルを教えられていません。それらを教えるのは上級開発者の仕事です。私は人格の衝突によってのみイライラします。しかし、私は基本を知らない上級開発者に最もいらいらします。

5
Craig

OOPを理解していません。悲しいことに、これは私たちのほとんどがおそらく認識しているよりも一般的です。

クラス、抽象クラス、インターフェースの作成方法を知ること、またはポリモーフィズムを知ることさえも1つのことです。 プログラムの利益のためにそれらを適切に使用する方法を理解することは別です


あなたがこれを避けたいなら、私はこれらの質問とそれらへの答えを啓発しました:

3
Nicole

あなたが知らないことを知らない、そして無知で考えることはあなたがすべてを知っている。

(そして、その親しい従兄弟、尋ねたくない。)

これは部分的に組織的なものです。適切な着信誘導は、これらのいくつかが問題になるのを防ぐのに大いに役立ちます。しかし、非常に少数の企業は、入会誘導のために利用できる時間または人々を持っています-数日から数週間のどこかにかかり、開発者を彼らの仕事から連れ去るべき何か。代わりに火を消さなければなりません。

3
quickly_now

私は、CSプログラムに比較的慣れていないジュニアプログラマーの多くが、アルゴリズムが苦手なことに驚いています。アルゴリズムの選択の誤りは、基幹業務アプリケーションではそれほど目立たない場合がありますが、1日に何十億ものWebサービス要求を処理する場合、それは本当に重要です。

これが私が使用するインタビューの質問です。これは、ほとんどすべてのジュニアプログラマーが見逃していて、問題を強調しています。

N番目の フィボナッチ 数を計算するコードを記述します。

彼らはほとんど常に最も明白であるが非効率的な書き込みをします

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

アルゴリズムの複雑さについてコメントを求められると、通常「O(N)...ええと... O(N logN)よりも悪い」と表示されます。それは実際には(はるかに)それよりも悪いです...

2
Eric J.

コードのインデントを逆方向に行う!

もちろん、それはあまり「典型的」ではありません。それが可能だとさえ信じられませんでしたが、通常の開発者は次のように書きます

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

彼女は次のように書くでしょう(神、それは私にはまだ不可能のようです!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

イライラしませんか?

1