ジュニアプログラマーが短所を克服するのに役立ちますか?[閉まっている]


15

チームに参加するジュニア開発者や、一緒に仕事をしなければならない人について、一般的な不満は何ですか?明らかに彼らは経験が浅いので、すべてを知ることは期待できませんが、どのようなスキルが不可解に不足していることがよくありますか?そして、具体的にどのようにこれらの不足しているスキルを強化するのに役立ちますか?

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

  • 「SQLを実行したことはありませんか?」

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

  • 「Unixコマンドラインの使用方法がわかりませんか?」

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


13
最も刺激的なのは、何が刺激的かを常に尋ねることです。:-)
ジェリーコフィン

12
あなたが彼らに知ってほしいと思うことを人々が知らないとき、私はあなたがイライラするべきではないと思います。重要なことは、彼らが学ぶことをいとわないということです=)
koenmetsu

耳を傾けることを学ぶ意欲があるなら、@ KoMetに同意します。それは重要だと思います:)
MalsR

8
私はこの質問が好きではありません。それは開発者にとって間違った考え方です。たちはその初心者であり、毎日私たちは何かの初心者です。私は何かを知らない人にイライラすることはありません。この関係が多すぎる傲慢があると感じている....
Darknight

3
ああ、閉じた、ブラボー。私は、6つのガイドラインを構成する主観的な質問を読み、これがすべてを満たします。率直に言って、非建設的な部分は、彼らが質問を誤解したという理由だけで、13人がすでに答えているスレッドを閉じる忙しい人たちです。シニア開発者がジュニア開発者の能力に失望することがあるのは現実です。この質問は、この失望のパターンを見つけることのみを目的としているため、困難を避けることができます。正当な苦情や批判を無視してもだれにも利益はありません。慢とは何の関係もありません。
アンドリューM

回答:


25

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

私の会社で数ヶ月間働いていたジュニア開発者の一人が、Subversionの非常に基本的なことを教えられました。それは本当にうんざりさせられました...彼女はずっとプロジェクトを生きるためにコードをチェックインしていました...そして彼女が何をしていたのか分かりませんでした...?


4
うんざり?彼女はまだ仕事ができて幸運です。
ラインヘンリヒス

2
これは、「あなたが知らないことを知らない」または「あなたが知らないことを認めない」という問題のようです。彼女が最初から助けを求めていたら、それはまったく大したことだったでしょうか?
マイケルマッゴーワン

1
痛い、それは私のように聞こえたハハ、私たちは最近までバージョン管理を実装していませんでした、そして私は新卒として会社に参加しました、私は大学でバージョン管理とサブバージョンのようなことを少し学びましたが、それを以前に実装したことはありませんでした。
サフェンディ

1
「これはバックアップ用のツールではありませんか?毎晩コードを保存するために使用しますか?」
デビッド

2
彼らが学校でほとんど教えてくれないことは大きなことです
イライジャSaounkine

23

十分な質問をしていない

私は彼らが後輩であることを知っています。彼らは間違いを犯し、物事を知らないことを期待しています。多くのロイヤルf ** kアップは、何かを仮定するのではなく、質問するだけで回避できたはずです。正直なところ、私は十分に悩まされることはできません。

私が始めたとき、私はたくさんの質問がありました-それらを尋ねることは多くの機会で私のロバを救いました。地獄、私はまだ多くの質問があります...私は彼らが今より良い質問だと思うのが好きです。


うん...私が投稿したほぼ同じ答え、あなたは約5秒前に行きます。
すぐに

2
「あなたは迷惑です!!私はここで忙しいです、あなたは自分で考えることができませんか?」不運なら!! (笑)
Sufendy

4
+1-これのサブケースは、説明の後に尋ねることではありません。ジュニアにタスクを説明したとき、彼はうんざりしました、彼はうなずき、彼がそれを手に入れて仕事に就くと思ったのですが、2週間後に彼は戻ってきて、同じ質問をもう一度尋ねて、もう一度うなずきます数週間後...結構、それは些細な仕事ではありませんでしたが、神のために、もしあなたが理解しないふりをしないでください。そして、あなたが何かを理解したと思うならば、2週間後にそれを覚えているようにメモを取ります。
ペテルトレック

1
一方、一部の人々は(Stack Overflowで)あまりにも多くの質問をします。
BoltClock

1
@SnOrfus:資格のない人は、私が言及している人です:P
BoltClock

14

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

多くのジュニア開発者は、よく見えるコードをコピーし、動作するものにヒットするまで、ほぼランダムに変更の異なる順列を総当たりで試みます。なぜ機能するのわからない場合、境界ケースにバグを導入している可能性があります。バグを理解している人は、後でクリーンアップする必要があります。

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

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

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


1
「理解しようとする代わりにコピーアンドペーストする」ための+1。もちろん、これは新しいプログラマーに固有の問題ではなく、単に悪いプログラマーにだけのものです。新しいプログラマーは、少なくともそれから成長する可能性があります-私が一緒に働いている何十年もプログラマーであり、今でもそうしている人はそうではありません。
トムアンダーソン

これの一部は、管理スタイルの結果かもしれません。タスクは既に予想よりも長く話しているため、マネージャーは明日あなたの機能を望んでいます。急いで機能させ、すぐに次のタスクに進みます。すべては、マイクロサイズのタスクカードに分かれていないリファクタリングするので、そこには時間や全体として大きな問題でステップバックと見てみている
ジェイミー・マクギガン

14

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

あなたが直面するすべてのプログラミングの問題は、他の人が何らかの一般的な形で直面しています。経験豊富なプログラマーから学ぶことはたくさんあります。私はグーグルの前にプログラミングを覚えるのに十分な年齢で、それはひどいものでした 検索エンジンを使用した場合はさらに悪化しましたが、Webにはまだそれほど良い情報がありませんでした。グローバルな知識に数秒でアクセスできるため、プログラミングの生産性が大幅に向上しました。それを使用しない人々は彼らの危険でそれを無視している。

編集

明確にするために、私はコピー/貼り付けプログラミングを支持していません。ただし、自分で適切な判断を下すには、既存の知識を確認する必要があることは確かです。


1
また、開発者がWebからの疑わしいリソースからすべてのコードをコピーアンドペーストすることも望まないでしょう。検索は、いくつかのアイデアを得るのに役立ち、基本的な理解の問題を解決するかもしれませんが、すぐに解決策を見つけることはできません。また、開発者をだめにします。多分それは彼を優れたコレクターにするが、発明者ではない。
イライジャSaounkine

私はある時点でエリヤに同意します。それが何をするのかを学ぶ時間を作らずにコードをコピー&ペーストしても、あなたのプログラミングスキルは加速しません。最悪の場合、それは引き継がれ、悪い習慣になります。
-setzamora

1
確かに、@ Scottはコードのコピーと貼り付けについては何も言っていませんでした。例:2つの文字列が似ているかどうかを知りたい。この問題を解決する既知のアルゴリズムは既にありますか?開発者が、答えがすでに存在することを意識せずに、独自のロールを開始することを決めた場合を想像してください。
デビッドコンラッド

@David Conradそのとおりです、要点を説明します、私たちはここの同じページにいます。
イライジャSaounkine

10

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

私はjrを持っていました JavaScriptですべてを解決しようとしたインターン。いくつかの概念を説明しようとしましたが、彼はいつももっとうまくやれると思っていました。現在、彼は辞めて、PDFのような印刷可能な技術の代わりにHTMLを使用して印刷出力用に構築した主要なプログラムを作り直しています。他の大きな問題の山は言うまでもありません。

教訓は、プロジェクトの早い段階で主要な包括的なガイダンスを高齢者に求めることです。助けなしに建築をやめないでください。コードと詳細を単独で記述できますが、少なくとも適切なテクノロジーを使用するようにしてください。


5

ジュニアが基本を知らず、大学のSCCなどの業界スキルを教えられていない場合、私はめったにイライラしません。彼らを教えるのは上級開発者の仕事です。私は性格の衝突に悩まされるだけです。しかし、私は基本を知らない上級開発者に最もイライラします。


1
@Graigは、ジュニアに関して経験豊富な開発者を困らせる多くのことです。大学ではなく、商業環境で学ぶ必要がありました。
ニックス

5

彼らの知識を進歩させたくない-代わりに最小の抵抗の道を取る。

先日、グラフィックデザイナー(プログラミングに驚くほど熟練している)と一緒にインターンがjQueryで何かを実装するのに問題が発生したため、助けを求めました。

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

翌日、インターンは彼に「ええ、理解するのが難しいので、いくつかの変更を加えて、自分のやり方で機能を書き直したかった」(ほとんどの場合、私の改善を取り消す)という質問をしました。

彼は代わりにもっと努力して(追加の質問をして、私が言及した概念を読んで)-とても短いコードは理解するの難しくなることはありませんでした-または簡単な方法を取ります。誰かが後者をしているのを見るたびに悲しくなります。


興味深いことに、もしあなたがそれを読みにくくしたのではないかと思います。最初のプロジェクトマネージャーがこれを数回行ったことを思い出します(そして、それを元に戻すことにも罪悪感を抱いています) 。
マキシムゲルシュコヴィッチ

3

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

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


これを回避したい場合、これらの質問とそれらに対する答えが啓発的であることがわかりました。


基本的なレベルのように、彼らはあなたがオブジェクト、クラス、インテリジェンスを作成することの意味を知りませんか?または、デザインパターンの使用など、より高度なもの(もちろん、他の書籍やガイドはありますが、GoFの本はかなり難解です)
アンドリューM

@Andrew答えを少し拡大しました。
ニコール

1
そして、私は逆を見ます:OOPだけを教えられているため、Cで普通の古い手続き型コードを書く方法を知らない。それから、パーサーを書くように教えられていない人々については、lexとyaccを使用してこれらの問題はすべて解決できると言われているので、私に話させないでください。
すぐに

1
けれども、良い点だ@quickly_now writing code other ways than OOPwriting bad OOP2は全く異なるものです。第一に、私には問題はありません。
ニコール

ほとんどの大学はオブジェクト指向設計を教えていません。また、多くの職場は、ジュニア開発者でもサイロのように機能します...またはオブジェクト指向プログラミングがわからない「シニア」開発者がいます。x年働いてタイトルを獲得した「シニア」開発者と、自分のことを知っているシニア開発者がいます
。...– Cervo

3

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

(そして、そのいとこ、尋ねたくない。)

部分的にこれは組織的なことです-適切な着信誘導は、これらのもののいくつかが問題になるのを防ぐのに大いに役立ちます。しかし、次の導入に対応できる時間や人がいる企業はほとんどありません。これには、数日から数週間かかることがあり、開発者の仕事を奪います。そのため、代わりに火を消さなければなりません。


2

私は、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)... uhm ... O(N logN)よりも悪い」と答えます。それは実際には(はるかに)悪いことです...


1
完全性に関するあなたの質問に答えるために、最初に再帰の代わりに使用するフィボナッチ数を再帰なしで計算する式を知っておくべきです。
P Shved

1
@Pavel:O(n)とO(1)のソリューションがあります...実際にはLike every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.

1
投稿したソリューションが完璧だと言っているのではありません。私は、あなたのフォローアップの質問がそのような解決策に関連しているかどうか、つまり複雑さについての質問に疑問を抱いています。質問することで何を達成したいですか。そして、最も重要なことですが、前の質問への答えが与えられれば、あなたが望むものが達成されると期待するのはなぜですか。(私は私のポイントを作りましたか?)
P Shved

私の主張をより明確にするために、複雑さを推定するのではなく、コードをどのように改善できるかを尋ねることをお勧めします。一部のCS卒業生は、メモ化を提案するか、式を知っているが、彼らがスマートパスだと思うので一度にそれを見せたくないと言うでしょう。
P Shved

実際には、プロファイラを使用してこのような関数を発見し、メモ化キャッシュに追加することで最適化できます。非効率性は、Nの値が大きい場合にのみ実際に問題になります。このようなコードについて後輩に教える最良の方法は、デバッガーを使用してコード実行全体をステップ実行させることです。Nの非常に大きな値の場合、それは数学的な式があり判明maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/...は
ジェイミー・マクギガン

1

後方コードインデントを行う!

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

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
すごい!!!
javanna

アラビア語、ヘブライ語、または中国語のように、左から右への西洋の慣習ではなく、右から左へと読むようです。コードをインデントする完全に有効な方法ですが、ネストの最も深いレベルに基づいてファイル全体を再度インデントする必要があり、反対の規則を共有するすべてのユーザーとコードの互換性がなくなります。
ジェイミー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.