わかりました、私はしばらくの間プログラムする方法を仲間に教えてきました。彼は非常に早い学習者であり、これまでのところプログラミングは非常に得意です。しかし、彼は私が修正しようとしている「問題」を1つ持っています。
彼は飛び込んで、基本の一部を学ぶことなく高レベルのプログラミングを始めます(彼は本格的なWebアプリケーションを作成しましたが、ページネーションやセッション管理をまだ知りません)。
しかし、これは問題ではありません。彼は新しいテクノロジー(Node.js、MongoDB、EC2など)に飛び乗り続けています。 MongoDBの基本を学ぶためにたくさんの時間を費やす前に、選択したRDMS(MySQL)の基本をいくつか学ぶべきだと言ってみました(そしておそらく何か新しいものに移動します)。
私はここで間違っているのですか、それとも彼は一度に1つのことに集中して、それを本当に上手にしようとするべきですか?
個人的には、プログラミングを学ぶときにさまざまなテクノロジーや言語を試してみるのは素晴らしいアイデアになると思います。 1つのテクノロジーに焦点を当てることには、それを非常に上手に使えるという明らかな利点がありますが、1つのテクノロジーしか知らないという明らかな欠点があります。
しかし、より重要な微妙な欠点は、言語とフレームワークには一般にイデオロギーが付属していることです。プログラミングするすべてのものに1つのイデオロギーのみを適用する多くのプログラマー(おそらくほとんどのプログラマー)がいます。これは多くの場合、1つの言語で1つのフレームワークを学習したためです本当によく、今ではゴーグルをオンにしないと何も表示されません。
特に、プログラミングを学んでいるだけの人にとっては、そこにあるものを試して、後で何かに集中するのを待ちたいと思うことは本当に問題だとは思いません。結局のところ、技術を熟知していなければ、実質的なものを書くことは難しいでしょう。
この問題の両側には正当な理由があります。多くの異なるテクノロジーについて「十分」を知ることは確かに価値があります。多くの異なるテクノロジーについて「少し」を知っていますか?それほどではありません。
深い知識特定のテクノロジーの価値は確かに価値があります-それらの継続的な需要がある場合。特定のテクノロジーについて "知っていることすべて"を知っていますか? ...おそらく多すぎる。
だから、それはすべてのバランスです。彼がnosqlで素晴らしいアプリを作成することになった場合、なぜ彼はInnoDBエンジンとMyISAMエンジンの違いを知らなければならないのでしょうか?
一部同意します。彼は根本的な原則を知る必要があります-しかし、彼はただ一つのことに腰を下ろしてそれを本当に上手にする必要はありません。誰もしません。
現在、C#およびMicrosoft XNAと協力してゲームを作成しています。私は行くにつれてXNAについて多くを学んでいます、そして私はすでにC#でかなり有能である間、私の知識は少しずつ拡大しています(今日私は型パラメーターの制約について学んだ 制約 )。
ただし、XNAやC#で「本当に上手」になる必要はありません。今すぐプロジェクトを完成させて先に進み、どちらも二度と使用しないとしたら、私は完全に満足し、私の学習は他の場所で継続されます。
少なくとも私は根本的な原理を理解しています。 C#とXNAで物を作成するとき、自分が何をしているのか理解しています。理解していなければ、それについて学びます。
ページネーションを書けば、ページネーションがどのように機能するか理解できます。友達がページネーションを作成し、それがどのように機能するかわからない場合は、問題です。彼がページネーションを作成しなかった場合でも、彼が知る必要がある理由はありません。
ここでの問題は次のとおりです。彼は@ $#を知っていますか?彼はやっているのか、それともプログラミングの方法がわからないプログラマーなのか?
彼が作りたいものを持っているので、彼は他の言語を試みていると思います。言語またはフレームワークにいつでも戻り、詳細を学ぶことができます。
理論の学習/基盤の構築とモチベーションを維持しようとすることの間には微妙な違いがあります。
少なくとも彼は単一の言語にこだわっていません。時々、あなたは良いものと悪いものを一緒にする。
私は彼の態度を負債ではなく資産として捉えています。彼の研究能力は平均以上です。彼の学習曲線も浅い。もし彼に何かを学ばせたいなら、この特性を利用しないのはなぜですか。
彼の探究心は常に外出中です。どうして彼に指示を与えませんか。まず、ページネーションが重要かつ不可欠である理由を彼に伝えることから始めます。彼にページネーションのあるウェブサイトとそうでないウェブサイトを見てもらいましょう。
彼がしていることに対して建設的な批判を与えるのはどうですか。 「すばらしい成果を上げましたが、最適化とベストプラクティスに重点を置いてこのようにすると、より良い結果が得られません。
良い実践と悪い実践を比較することは彼の心を本当に刺激することができると思います。
彼を制限しないでください、彼は最終的に彼が望む何かを見つけて、しばらくそれで落ち着きます。私があなただったら、彼がとても情熱を傾けていることについてのたくさんの学習資料を彼に提供します。
彼はトップダウンのアプローチをしていると思いますが、一方であなたは彼にボトムアップのアプローチをしてもらいたいのです。
なぜそれが悪いのですか?
反対に私はそれはとても良いと思います!それは好奇心と学習意欲を示しています。さらに、彼は適切な仕事に適切なツールを見つけたいと思っています!不十分な第一選択技術に固執するよりはましです。 ;)
実は、ベテランのプログラマーとしてもそうです。そして、私はそれをお勧めします。私が新しいプロジェクトを持っているときはいつでも、私の振る舞いは次のとおりです:
それは完全に理にかなっていると思います。
個人的には、誰かが1つのテクノロジーだけに集中する必要がある場合、それはSQLと共に使用されるC#/ Javaであるべきだと思います。
これからは、他のテクノロジーにも対応できると思います。
しかし、1つのテクノロジーに固執することは、企業の環境に侵入したい場合に制限となる可能性があります。
理想的には、1つのオブジェクト指向プラットフォーム、1つのモバイルプラットフォーム、1つのWebプラットフォーム、そしてSQL(またはその他のデータベース環境)についての十分な知識が必要です。
そして基本を最初に、さもなければ彼は後で立ち往生するでしょう!
彼がプログラミングの初心者であれば、それは悪くないことです。
彼はいくつかのものがどのように機能するかを見るでしょう。しかし、彼が何をしているのか理解していない場合は、まったくそれを行わない方がよいでしょう。
Java、C、C++、C#、Phyton、ASP.NETなどすべてを知りたいと思っていましたが、すべてを知ることができないことに気付いたので、いくつかのことに集中しました。より良い。
だから彼は何をすべきか(彼に助言する):
新しいプロジェクトが目の前にあるときは、常に新しいものを探求して学ぶのであれば、@ arnaudに同意しません(完全にではありませんが)。新しいものを何度も探索して学習するには時間がかかりすぎ、一部のプロジェクトには時間制限があります。しかし、その一方で、いくつかの単純な新しいものを学ぶ必要がある場合、それは問題ありません:D。
私はあなたに同意します。特定のフレームワーク、テクノロジー、または言語の表面的な知識を得ることは簡単ですが、現実世界の開発に参加して完了まで維持するための最善の理解を得るには、他の誰かになるアドバイスを求めに来てください。単なるすべての取引のジャック、なしのマスターよりもすべての取引のジャック、1つのマスターになるのが望ましいです。そうは言っても、彼には明らかに熱意があるので、彼が新しいことを学ぶのをやめさせないでしょう。