コード例を常に探しているのは、悪い開発者の兆候ですか?[閉まっている]


161

私はCとC ++で数年の経験を持つCS学生であり、過去数年間はJava / Objective Cでアプリ開発を常に行ってきましたが、現在はWeb開発に切り替え、主にルビーに焦点を当てていますレールと私は(アプリの開発と同様に、実際に)私は他のコードを参照しすぎることに気付きました。私は常にゼロからできるはずだと思う多くのことのためにGoogleの機能を使用しています。

基本的な基本事項は問題ではありません。これを例として使用するのは嫌ですが、スプリントでjava / pythonの両方でjavabatを実行できます。おもう?

通常使用する必要があるものは知っていますが、構文を常に参照します。私は学位を取得しているにもかかわらず、この分野での仕事を探すという点で私を非常にしっかりと抑制しているので、これに関するいくつかのアドバイスと意見を歓迎します。私が尋ねる主な理由は実際に雇用についてではありませんが、ハッカソンでノンストップコードを叩き出して、20個のGoogle / githubタブを開いてそこに座っている唯一の人になりたくないということはもっとありませんわずかな自信不足のため...

人は中程度から複雑なタスクのコード例を常に探しているので、悪い開発者ですか?


14
それは私が取り組んでいるものに依存しており、私が取り組んでいるものはほとんどルックアップを必要としません。もっとなじみのないもの、私はいつも例を調べます。
ジェイディー

11
実際にコードを書いて自分でコードを書くかどうかに依存します。

18
妻はテレビでこれらの料理コンテストやカップケーキチャンピオンシップを見て、ランダムな食材を使っておいしい食事を作るのに途方もなく短い時間しかありません。たいていの場合、食べ物はひどい、または調理が不十分で、確かに最高の品質ではありません。彼らはショーに適していますが、私は私のシェフが彼の時間を取り、正しいことをしたいです。同じことがハッカソンとも言えます。Zuckerbergと彼の仲間は、数人以上のユーザーを獲得し始めたら書き直さなければならないくだらないWebサイトをすぐに書いたハッカソンの人たちでした。たいていの人は、最初から正しく理解することを望んでいます。
maple_shaft

88
私の上司はいつも「プログラマーのスキルを測る最良の尺度は、Google検索をうまく行う能力だ」と言います。私が知っているすべてのプログラマーはインターネットで例を探しますが、悪いプログラマーだけが盲目的に貼り付けます。誰かがあなたがやりたいことをすでにしているなら、なぜ車輪を再発明するのですか?
SSumner

9
研究は重要です。BSDD(ブログスパム駆動型開発)と呼ばれるものに関与しないでください
トーマスディグナ

回答:


238

盲目的にコピー&ペースト:悪い。

ドキュメントを検索し、コード例を読んで理解を深めてください:良い。

常に物事を調べて、すべてを意図したとおりに動作するようにする人と一緒に仕事をしたいと思います。しかし、最悪の事態は、物事の仕組みを理解せずに、Webからコードを無批判にコピーするだけの人です(そして、バグレポートが降り始めたら、何も適切に修正できません)。


21
@NewlyInsecureいいですね...私のようなソフトウェア開発者の中には、ハッカソンに行く人はばかげていると思います。それらのほとんどは優秀なプログラマーですが、あまりにも多くのレッドブルを飲み込んだひどいソフトウェア開発者です。
maple_shaft

23
開発者は、誰かが手の前に何かを行っていると例を探し、それらを適応することを知っている脳を持っています。開発者は、壁の上に頭蓋を叩いて時間を無駄にしません。
デビッド

19
@NewlyInsecure比較キル。真剣に、他人と自分を比較すればするほど、士気を失い、やる気がなく、恐れを感じるようになります。他の人がやっていることではなく、真実に基づいてあなた自身の信念を形成してください。ハッカソンの人々がより多くのコードをより速く打ち出すことができるなら、誰が気にしますか?たとえそれがスキルの指標であったとしても、あなたがどれだけ巧みになっても、常にあなたより賢い人がいるでしょう。
フィル

5
個人的に、私がやりたいことを多かれ少なかれ既に実行しているコード例を見つけたら、それを理解するために勉強します。それがより大きなコードの場合は、メモを作成し、特定のケースのソリューションを擬似コード化してから、実際のコードで擬似コードを実装してみます。ここで重要なのは、tdhammersとDavidが言及したことは、私が盲目的にコードをコピーしていないということです。私はそれを見て、それが何をしているのかを理解し、そのアイデアを特定のソリューションに組み込みます。
-shufler

3
@NewlyInsecure:反対のことも2つあります。1つ目は、APIが以前よりも大きく複雑になり、記憶するのが非常に難しくなっていることです。2つ目は年齢です。年齢は今ではありませんが、気付かないうちにそうなります。年をとるにつれて、すべてを思い出すことができなくなり、本当に知る必要があるもののために脳細胞を保護し始めることに気付くでしょう。研究を行い、忘れていた詳細を見つけるのに必要なスキルを磨くことは重要です。
Blrfl

110

保守可能な方法でソリューションをコーディングし、実際にコピー/貼り付け/変更を理解すれば、問題はありません。

シニア開発者に彼が何をしたのかについて質問するたびに私は死にます。答えは「わからない、コードをコピーして貼り付け、その時点で機能しました」です。


8
ときどき、私は自分が開発者としてはあまり役に立たないかもしれないと思うようになります。それから私はそのような引用を読み、自分自身についてずっと良く感じます。
水差し

18
@TheJug、あなたは自分が想像するよりも優れた開発者であり、悪い開発者でもあることを忘れないでください。
ジョー

71

ちょうどするスキルを持つように/アウトAPIドキュメントとプログラムコード例を探していない悪いプログラマの、欠く1の兆候である流暢を ...

...ここで、私は流さについて話している。何かができるだけなく流fluent あることについて。

流fluentであることを知っていますか?それはあなたを見ている人にとっては、あなたがタイプするときにコードを書くかのように見えるときです...

  • ...適切なコードが指から画面に単純に流れるように。APIドキュメント、チュートリアル、マニュアルをチェックしていないかのように。実際には、すべてをチェックしますが、それはすべてあなたの頭の中にあるので目に見えません。必要なすべての知識が脳のすぐそこにあります-充電さ​​れ、ロードされ、すぐに使用できます。

...それは流な知識です。それは、初心者に1時間かかることを行うのに1分かかるときです。本当に努力する価値があります。勝利の匂いがする。

...そして、私にとっては流reliableさを得る唯一の信頼できる方法です。


14
流さについての優れたポイント。COBOLに堪能です。私は20年間ITから休憩を取り、Javaの学習に戻ってきました。私はCOBOLで何かをする方法を直感的に知っていますが、Javaの流Lさを学習するプロセスの一部は、コードサンプルを検索し、それらが機能する理由を分析し、特定のニーズに合わせて調整することです。新しいVERBAL言語を学ぶと、最初はイタリア語-英語辞書を頻繁に参照し、文法や時制が間違ってしまい、最終的にはネイティブのように話します。時間と練習が重要です。心配しないでください... :)
dwwilson66

10
@ dwwilson66問題は、サーバーレベルのプログラミング言語、クライアント側のスクリプト言語、クライアント側のマークアップ構文、クライアント側のスタイル構文という4つの「言語」を毎日覚えておく必要があるということです。頭の中にすべてを収めることはできません。イタリア語、中国語、英語、クリンゴン語を同時に会話しようとするようなものです。
タクロイ

@Tacroy-まさに!流さがないと、リソースが必要です。たまに一語だけではなく、完全なフレーズを調べる必要がある場合、クリンゴン語話者を「少なく」することはありません。他の人ほど流ではありません。
-dwwilson66

4
最後の文は、下付き文字で隠されるのではなく、強調表示するに値します。液浸以外に流になる方法はありません。
jmlane

@ dwwilson66は、JavaとCOBOLでは大きく異なることを行う必要があることに注意してください。オブジェクトはコピーブックと同じではありません。

54

コルブサイクルと呼ばれる学習理論があります(それを説明した人の後)。このサイクルのエントリは次のとおりです。

Concrete experience -> Reflective observation
    ^                        |
    |                        v
Active experimentation <- Abstract conceptualisation

サイクルのさまざまな場所から始めたい人はいます。したがって、サンプルを探して(反射観察フェーズ)、学習て、それらのサンプルから抽象化によって全体像を把握することで、学習することは完全に可能です。

他の人はさまざまな方法で学習します。一部の人は、試行(つまり、実験)から始めて、何が正しかったのか、または何が間違っていたのかを振り返ります。ポイントは、これらは物事を学習する問題を攻撃するための異なる方法であるということです:それらはどれも間違っていません。


2
+1興味深い。直観的には、学習するためには、少なくともこれらの段階のいくつかを進める必要があると思いますか?つまり、実際の学習を行うにはおそらく観察するだけでは十分ではないでしょう。あなたが見たものを考えて試してみる必要があります。
カレブ

私は本当にこれが好きです。ほとんどの言語で反射型観察から始めますが、PowerShellでは通常、Active Experimentalation
Caleb Jares

@caleb正しい。それは、ステージからステージへと移動するサイクルであり、おそらく、4つすべてを完了するまで、何かを完全に内部化しないでください。最も変化するのはあなたが始めるところです。

39

完全な開示-私は仕事の時代に利用できる別のプレインターネットで訓練を受けた老人です。若い開発者のスキルが着実に低下するのを見てきました。その主な理由は、若い開発者が情報を保持していないか、インターネットから取得したソリューションを理解していないためです。私は、20年前の1〜2年の経験後の能力レベルが、5〜7年の経験後の能力レベルであることを観察しました。(はい、それは個人的な観察ですが、私は多くの雇用をしました、私は問題に関する統計データを持っていません、そして、はい、私は時々年老いて不機嫌です、一言でこの声明を受け取ってください。 )

すべてを調べることは、時間の面で非効率的です。また、あまり深い知識を持っていない人の症状でもあります。深い知識を持つ人々は、物事を調べることなく問題を解決する方法を知らない人々よりも速くコードを書くことができます。したがって、物事を継続的に調べることなく、より多くのものを処理することを学ぶことは価値があります。

今、私はあなたが物事を調べるべきではないと言っているのではなく、知識を保持することを学び、めったに使用しないもの、または本当に新しい問題や言語やパラダイムに遭遇したときにだけ調べる必要があると言っています。そして、新しいソリューションやツール、言語に対応するために本を読むべきではないと言っているのではありません。

あまりにも頻繁に物事を調べる開発者に対する私の本当の懸念は、あまりにも多くの人(必ずしもあなたではない)が、彼らが抱えている問題と必要な解決策を理解するための分析スキルを決して開発しないということです。その人が明確に理解していないエラーメッセージをどこに入れるのか質問がいくつあるかを読んでください。しかし、それは専門職レベルで活動している人なら誰でもはっきりしているはずです。または、その人が「機能していない、なぜですか」と言うもの。エラーメッセージへの参照がない、またはどのように機能していないか、コードは構文的に正しい。または、動作するはずのコードを与えられた人、

あなたが探しているものが言語のコア機能の一部である場合(データベースにアクセスしている場合はこれにはSQLが含まれているはずです)6ヶ月以上使用している場合、あなたも探していると思われますずっと。探しているのが高度な機能、特にめったに使用しない可能性のある機能である場合は、問題ありません。

しかし、どのようにしてより多くの情報を保持することを学ぶのでしょうか?最初にコードが壊れた理由を理解してください。誰かがあなたに有効な解決策を与えたとしても、それがなぜ機能し、あなたの機能が機能しなかったのかわからない場合は、尋ねてください。エラーメッセージが理解できない場合は、その意味を尋ねてから、自分で解決してください。

そして、あなたが理解していない解決策を切り取ったり貼り付けたりしないでください。実際、カットアンドペーストは一切しないでください。情報を保持したい場合は、入力する必要があります。実際に自分でコードを物理的に書くことは、あなたがそれを学ぶのを助けます。それはよく知られた学習テクニックです。

コードの理解を一般化する練習をします。1か月前に問題ABCに対して得た解決策が新しい問題DEFに対する同じ解決策であることを理解していないため、人々は時間をかけて何度も同じような質問をするのを見てきました。

そのため、何かを調査したら、時間をかけて、どのような種類の問題を解決するのが良いかを考え、そのことについてメモを書きます。次に、解決すべき問題がある場合は、まず考えられるテクニックをすでに書き留めているかどうかを確認するために、独自のメモを確認してください。問題を解決するための複数の方法を評価する場合、問題のタイプ、考えた解決策、およびそれぞれの長所と短所についてメモを取ります。繰り返しになりますが、メモを取ることはあなたの脳内の知識を固めるのに役立ちます。長所と短所についてはすでに独自の思考プロセスがあり、それを再度行う必要はありません次の同様の問題については、さらに可能なテクニックを探してください。

そして、次に何を学ぶかを決定するとき、最初の30日間に相当するさらに別の技術を学ぶ前に、主要な技術の1つをある程度掘り下げます(これは、必要に応じて、実際に仕事を行うのに十分な知識があることを前提としています) 6つのテクノロジーを使用する-最初に6つすべての基本を習得してから、詳細に進んでください。次に、基本的なレベルで新しいことを学び、何かをより深く学び、基本的なレベルで新しいテクノロジーを学びます。時間の経過とともにこれを行うと、それについて尋ねるより高度な質問を理解するため、新しいテクノロジーに求められるものの基本レベルがはるかに深くなることがわかります。

知識を保持することを学ぶ別の方法は、他の人にそれを教えることです。このような場所で質問に答えたり、トレーニングトピックをチームに提示したり、ローカルユーザーグループでプレゼンテーションを行ったり、ブログエントリを書いたり、社内の情報ウィキを維持して他の開発者を支援します。


11
ここには非常に良い点がいくつかありますが、「古き良き時代」のために苦しんでいると思います。何千年もの間、人々は若い世代の縮退を非難してきました。これをサポートする強力な証拠はまだありません。

4
+1 @JonofAllTrades ..man、.. FoxProを知っていたので、20年前に戻って100万ドルを稼げたらいいのにと思います。のみ。しかし、いや、今日では、通常の仕事に出場するためだけに、小さな銀河技術に精通する必要があります。ApacheとIISの両方をセットアップして構成できますか?1つまたは2つのSQL方言に慣れていて、SPROCを作成でき、少なくとも簡単に管理できますか?いくつかのサーバー側言語と、データ操作用の少なくとも1つの機能的なスクリプト言語の能力がありますか?..また、Web用にプログラムする場合、主要なブラウザモバイルデバイスで機能しますか?
elrobis

この議論は、20年前にすでに存在する技術に対してのみ意味があります。そして、はい、あなたは今日の標準では不十分なSQL(あなたの「ヤード」)のほとんどの知識だけで仕事に就くことができてとても幸運です。
prusswan

@prusswan、私は専門家であり、私のアリーナを埋めることができる以上の仕事があります。しかし、それが私が答えで言っていることとどのように関連するかは私を超えています。私が話していることは、すべてのテクノロジーで可能です。問題は、人々が情報を保持できないために、自分たちがしていることを学んだり理解したりしていないことです。新しいテクノロジーの知識を保持することは、古いテクノロジーの知識と同様に簡単です。保持された知識は、次の知識を習得するのに役立ち、より速く開発できます。
HLGEM

24

コード例を探すことは、悪い開発者のサインではありません。必要なすべてのインターフェイスを正確に覚えるために必要なものはほとんどないため、物事を調べるのは自然なことであり、通常、コード例が最も使いやすいリファレンスです。

あなたがすべきでないのは、そこで動作するので例をコピー&ペーストすることです。したがって、動作方法を理解せずに、ここでも動作する必要があります。それは通常、偶然にコピーされた多くの無駄なビットにつながり、結果を維持するのが難しくなります。修理する。

しかし、例からコピーしているコードを理解している限り、作業を高速化するための有効な方法であり、通常それは良いことです。


2
コピーするものは何でも調べて、読んだすべてを理解しています。構文と機能の一部が非常に長いため、一からポップすることはできないと思います。jsonやデータベースクエリなどの単純で2番目の性質であるべきもの(おそらく悪い例)。お返事ありがとうございます。本当に感謝しています。
新しく安全ではない

2
また、独自のプロジェクトでコード例をコピーして貼り付ける前に、よく考えてください。クラス内でそれらを分離して再利用する方が理にかなっているかもしれません。
-stralsi

@SilviuStraliciuc:これは、1行または2行の例に関するものだと思います。関数でラップする意味がありません。しかし、通常はctrl-c + ctrl-vを使用する代わりにそれらを再入力するため、正しいフォーマットを適用し、識別子などをその場で置き換えます。
ジャン・ヒューデック

1
1行または2行の例、特に1行または2行を実行したいことについて後で気が変わる可能性がある場合(特に、今では200行を見つける必要がある場合)その1行または2行のパターンを使用したコード全体に散在する場所)。適切に名前が付けられた関数を使用すると、たとえ200か所で修正する必要がある何かおかしくなった場合でも、少なくともそれらの場所を特定するのは簡単です。
デビッドK 14年

14

これらの答えはかなり良いです。しかし、コピー/貼り付けや「スキル」の欠如よりもはるかに深刻な問題に悩まされます。

比較は致命的です。自分を他の人と比較し、彼らの才​​能があなたの見方に影響を与えるほど、あなたはしなびて内部で死にます。あなたがハッカソンに行くのは、あなたがどれほど才能がないかを人々が見るのではないかと恐れているからです。そして、あなたが才能がないと思う唯一の理由は、より多くのコードを最初からより速く叩くことができるハッカーと自分を比較するからです。

「1分あたりのコード行数」がスキルを測定するための優れた指標であったとしても、あなたよりも優れた開発者が常にいるという事実を受け入れる必要があります。そして、それはだ、OK、あなたがスキルに欠けて他人を表示します。

あなたは他の誰よりも優れている必要はありません。常に何らかの形で不足しているという事実と、常に学習しているという事実に満足する必要があります。あなたが劣った開発者であることに満足できない場合、あなたは決して幸せになることはありません。

もう1つは、「優れている」と思う人からの拒否に対する恐れが、まさに、優れた開発者と肩をすり合わせて、彼らから学ぶことを妨げていることです。したがって、あなたの恐怖はあなたが成長するのを防ぎ、それはあなたの恐怖を維持します。成長を妨げます。サイクルをご覧ください?あなたはどこかでサイクルを壊さなければなりません。


8
良い答えですが、平凡を受け入れることは問題ないという意味ではありません。自分の仕事に目を光らせ、他の人があなたよりも優れていることを心配しないでください。しかし、改善のために仕事をしてください。
カレブ

12

その多くは、あなたの心がどのように機能するかにかかっていると思います。私の記憶は悪臭を放つので、私はむしろ私が望むものにできるだけ近いコードをつかみ、それが新しい仕事をするようにやり直します。これは例であり、私がしなければならないすべてのことを思い出させるものです。たとえば、私は20年間単純なSQLを使用しましたが、SELECTステートメントまたはUPDATEステートメントのレイアウトを思い出すことはできません。(括弧が必要だと思いますが、どちらを覚えているのか思い出せません。)一方で、覚えられるいくつかのこともあります。私は目を閉じてJava Iterator実装を一緒に投げることができます。

私がコピーするコードのほとんどは自分のものですが、何か新しいことを学んでいるときは、他のコードもコピーします。

ハッカソンについては知りません。彼らは写真の記憶を持つプログラマーのサブセットを利用するかもしれません。試してみてください。バカのように見える場合は、プログラミングする必要はありません。

コピーして変更するすべてのコードを完全に理解することをお勧めしますが、他の答えを読むまで、誰かが理解せずにコピーする可能性はありません。(私はこのサイトで常に新しい悪徳を学んでいるようです...)


残念ながら、SELECTでサブクエリを実行している場合、またはWHEREで複雑なブールロジックを実行している場合を除き、どちらも括弧を必要としません。;)
イズカタ

2
@Iskata:いいえ?古いコードを見てみましょう。ああ、括弧が必要なINSERTステートメントです。
ラルフシャピン

8

...私は...他のコードをあまりにも多く参照していることに気付きました。私は常にゼロからできるはずだと思う多くのことのために機能をグーグルで調べました、そしてそれは本当に私の自信を少し破りました。

その後、停止します。しばらくの間、反対方向に向かいます。必要なものをはるかに短時間で見つけることができるとわかっていても、すべてを自分で実装してください。

起こったのは、あなたの問題解決筋肉(ラテン語名gluteus mojo)が廃用から萎縮したことです。そして、あなたはそれがどれほど弱いか知っているので、今それを使うことを避けます。ジムで上腕二頭筋に取り組むのと同じように、筋肉を構築して調子を整える必要があります。繰り返し回数を増やして抵抗を少なくしてください。多くの簡単な問題です。自信をつけて、より長くて難しい問題に進みましょう。

モジョが戻ってくるのを徐々に感じるようになり、Googleに依存する必要性が減ります。ただし、その筋肉を鍛え続け、古いやり方に戻らないようにしてください。問題を解決するために自分自身に挑戦最初にして唯一の後、他のソリューションを検索します。時には、他の人が同じことをするより良い方法を見つけたことがわかるでしょう。また、あなた自身の解決策がより良いと決めるかもしれません。

人は中程度から複雑なタスクのコード例を常に探しているので、悪い開発者ですか?

例を見つけることなく何もできない人は、悪い開発者です。問題は、試してみるまで、自分ができるかどうかわからないということです。


7

あなたは若く、多くのプログラミング言語で働いています。おそらく、古い言語よりも新しい言語の方が速いでしょう。あなたはまだ流largeさを開発するのに十分な大きさのアプリケーションで単一の言語に十分な時間を入れていません。

Webグリッドをデータベーステーブルに接続するプロセス全体、または接続文字列の書式設定のような小さな部分など、幅広いソリューションを毎回探していますか? )?

さまざまなコード行または関数の構文への参照を常に探しています。プログラムを作成すればするほど、より多くの課題が発生し、さまざまな環境や言語の変更に遭遇します。何かをするたびにチュートリアル全体が必要な場合は、問題があります。


私は同意します-一般的な十分なアクティビティ(ファイルからの読み取り、DBへの接続、HTTPリクエストの作成など)では、構文とアプローチが言語ごとに非常に異なるため、一般にチェックする必要があることは常にあります。それはあなたが、その後賢いビットで新規かつ有用な何かを作成するために一緒にこれらの基本的なビルディング・ブロックをつなぎ方法です
クリスC

5

私は、前夜に詰め込んだ大量の情報を保持しようとすることに基づいてテストを行うのが嫌いだと言っていた教授がいました。あなたのリソースを知り、あなたが知らない情報を見つけるためにそれらを適切に使用できることはより良いです。私は仕事を含め、私が行うすべてに同様の原則を適用するのが好きです。

適切に使用する限り、あなたが持っている最も重要なツールはリソースだと思います。そのため、コードを書いているときは、既存の知識を最大限に活用し、適切なソリューションをよりよく理解するために、他のプログラマーに尋ねたり、インターネットを検索したりして調査を行います。知識は時間の経過とともに蓄積され、しばらくすると自然にスキルをよりよく理解できるようになります。私は実際に情報が必要かどうかを常に調べており、正直に言って、毎日新しいことを学んでいると言えます。


6
「私は本で簡単に調べることができるものは何もメモリにコミットしません。」-アルバートアインシュタイン、1922年。
gbjbaanb12年

3
@gbjbaanbアルバートアインシュタインは、1922年にバージョン管理を使用しましたか?うわー、彼は本当にすごかった。
svick

4

解決しようとしている問題を理解し、その解決方法を理解している場合、正しい構文を調べることは私の意見では大したことではありません。

私は約2年前に卒業し、仕事を得たときにオオカミに投げられました。今まで触れたことのない言語で書かれた大きなアプリケーションを学び、維持し、アップグレードしなければなりませんでした。バグレポートを取得し、コードを調べて、どのように修正したいかを見つけ、その言語で必要なことを行う方法の例をGoogleで検索する必要があります。

物事を成し遂げ、不要な解約を生じさせない程度に十分に理解しているなら、おそらく大丈夫です。


3

これらの回答で何度も述べたように、純粋で重要ではないコピーアンドペーストは悪いです。しかし、すべてをゼロから書くことも同様です。ビジネスの中心となる重要なコンポーネントでない場合は、最初にライブラリまたはコードスニペットを探してください。スニペットを見つけることの例外は、問題が非常に単純であり、それを行う方法とライブラリを使用していない場合の非常に明確な図があることです。

私が個人的に知っているのは、一般的なものを書いた場合、微妙なバグがあり、たぶん1つか2つの微妙なバグがあり、多くのテストを行わないことです。だから私は同様のソリューションを探し、それを修正してテストし、テストと開発全体の時間を節約します。最終的には、機能し、拡張可能で、予算内または予算内であり、期限を守っている製品を提供する責任があるためです。コードとライブラリを再利用することは、その目的に向けた良いステップです。


3

コード例を読んで、他の人が一般的に開発したもののソースコードを読むことが、あなたのスキルを向上させる最良の方法だと思います。そうしないと開かないはずの脳内の扉が開くと思う。

ソリューションAを考え、他の誰かがソリューションBを考えている場合、各自がソリューションを共有すると、AまたはBよりも優れたソリューションCを実現できます。


2
主にソロ開発者として、コードをチェックしたり、問題を解決したり、刺激を受けたりする仲間はいません。ネット上の例は、特定の問題を解決し、新しいスキル/ベストプラクティスを学ぶために不可欠です。
cjmUK

3

ソフトウェア開発の能力には多くのレベルがあると思います。ソフトウェア開発ドキュメントの習熟度も多くのレベルにあるためです。率直に言って、最近では、システムは1980年代半ばにコンピューターのプログラミングを始めたときよりもはるかに複雑です。

次に、コンピューターに何をしてほしいかを知っておく必要があり、コンピューターが特定のより基本的なことをどのように行ったかを説明する6インチの厚さのドキュメントを作成しました。コンピューターが取り得る形式にあなたが望むものを置くことは、それらの本の索引の内容とプログラミング言語(または2つ。実際には、4つまたは5つの言語を学んだ後は他の方言です)を知ることでした。

今日、そのタスクには、言語、システム、パラダイム、プログラミングモデル、および少なくとも1つのAPIセットが必要です。これらはすべて移動ターゲットです。

ですから、あるレベルの基本的な知識を持ち合わせている人は、良いプログラマーではありません。彼は、今日の環境と、Microsoftのような無関心な企業が実際に独自の基礎資料にあらゆる種類の厳密さを適用していることを考えると、最高のプログラマーです。それらのほとんどは自己参照の参照資料であり、いくつかの非常に悪いサンプルコードです。(私が遭遇した2つのケースは、「Windows Installer」とWMVムービーファイルを作成するためのAPIです。)

マイクロソフト、グーグル、そしてそれよりも程度は低いがアップルも、すべて「コミュニティ」に頼ってその本当の不足を補っているので、尋ねることは重要なだけでなく、重要です。そして、今日の環境で頼まれ、しっかりした答えとフィードバックを提供できる人であることも同様に重要です。そのため、stackexchange.comサイトなどのサイトが役立つのはこのためです。

サンプルを求めて(知的に尋ねて!)質問し、答えを提供する人々を尊重してください。そうすることは、「悪い開発者」のサインとはみなされません

そしてもう一つ:悪いサンプルを提供することは、本当に悪い開発者のサインです。悪い開発者を見つけやすくするだけでなく、グーグル検索をぐちゃぐちゃにします。シンプルでわかりやすい特定のコードサンプルに自信がない場合は、それらを与えないでください。

そして、お願いする人をthose笑してはいけません。


3

あなたにとっての問題は、あなたが何を参照しているのか理解するのではなく、施設や記憶の問題についてより多くのように思えます。自信を失っているなら、それは問題です。しかし、確かに対処できます!

私にとって、この種の課題は私の人生のさまざまな側面で生じます。たとえば、音楽の演奏を上手にするには、与えられた楽譜からの独立性を高める必要があります。小冊子に鼻がまだ埋まっている場合、どうやって音楽を本当に感じることができますか?時間があれば、ギグに必要ではない場合でも、音楽全体を記憶します。どうして?楽譜がなくなったので、私は自分が正しくする必要がある音楽のより挑戦的で包括的な側面に集中するのがはるかに簡単になり、純粋な音楽制作の信じられないほどのゾーンに入るのがはるかに簡単になりました。だから、多くの場合、余分なトラブルに見合うだけの価値があると思う。

私のプログラミングの経験は似ています。キーは次のとおりです。

  1. 言語を練習します–それを入力し、実行し、それが助ければそれを話します; 繰り返してください。
  2. 施設を建設する–異なる状況で同じ機能またはパターンを使用します。機能をまとめる。プログラムを作成します。
  3. 繰り返しの間に十分な時間をとって、物事があなたの長期記憶に本当に入っていることを確認してください。

これらの原則は、実際に任意の言語を学習するときに適用されるようです!たとえば、新しい単語を覚える方法を参照してくださいPimsleur方法はまた、このように動作します。

これらのキーを使用することにより、私が定期的に使用する言語と技術の原則、構文、および共通ライブラリのほぼすべてを完全に記憶できることがわかりました。それでも、私は例と知恵を求めてインターネットを常に探し続けています!しかし、その点、私は解決しようとしている問題、採用されているさまざまなアプローチ、役立つツール、およびあまり使用されていないライブラリーのコンサルティングに関する検証を探しています。これは、最初に言語を学習するときに使用するものとはまったく異なる種類の検索であり、チュートリアルやマニュアルで深く掘り下げています。

あなたの話から、あなたが遭遇するかもしれないと思ういくつかの特定のつまずきのブロックがあります。

  1. 構文に苦労している場合、十分な練習をしていない可能性があります。これは、繰り返しを開発するのではなく、コードに直接コピーして貼り付ける場合に特に当てはまります。– 本当に良くなるのに役立つ筋肉の記憶。これに対抗するには、繰り返しと時間に焦点を当てて、必要な分野の施設を改善する演習と訓練を開発するだけです。提案:
    • 1日1回、毎日同じ言語で簡単なプログラムを作成します。
    • 例をコピーして貼り付けるのではなく、例を入力してください。
  2. 中規模の問題の解決策の構築に苦労している場合、構築に関する十分な経験を得ていない可能性があります。これらを試してください:
    • 得意な技術や言語で中規模のプロジェクトを開始します。または、興味のあるオープンソースプロジェクトのより機能の大きい機能を試してみてください。毎日少しずつハックしてください。(これらのより大きなプロジェクトを追いかけるときは覚えておいてください。それらをレンガごとに行ってください。一度に全部を構築しようとしないでください!)
    • 4つの異なるコンテキストで、4日間連続して同じ新機能を使用します。
    • Webブラウザーをオフにして、何かをコーディングしてみてください!
    • 実際にあなたが学んでいるものに注意してください。学んでいることを総合し、観察結果を書き留めます。(実際に物事を書き留めて、自分の言葉で何かを表現するように強制することは、私を大いに助けます。)
    • 吸収しているテクノロジーに関するStackOverflowの質問に対する回答を作成し、検証します。(これには、学習中に少し評判を得るという追加の利点があります。:-))
  3. あなたの練習をあまりにも薄く広げているかもしれません。あなたは多くの異なる言語で働いているようです。これには多くの利点がありますが、経験を薄めるという欠点があります。5つの異なる言語で作業するのに時間を費やしている場合、1つの言語で同じ時間を費やしている場合よりも記憶する回数が少なくなります。さらに悪いことに、さまざまな言語間でまったく似ていない認識がたくさんあります(他のif、elsif、またはelif ??)。これに対処するには、焦点をはっきりさせます。学ぶべきことを1つ選んで、それを冷静に学んでください。次に、次のことに進みます。

3

自分で中程度のコードを作成することに集中すれば、効率と生産性が向上すると思います。コードの検索、読み取り/理解、ソースのコピー、それに応じた変更などに時間がかかる可能性があります。

自分で考え出した場合は、特定の状況により適応している可能性が高く、しばらくすると、これらの解決策を調べるよりも速くなります。

私がそれを見る方法は、あなたが特定の解決策についてセカンドオピニオンを望んでいるようなものであるため、他の(インターネット上の)方法を調べます。自分がこれをやりすぎていると思っている場合は、同僚に解決策についてどう思うかを尋ねると考えてください。15分ごとに同僚に質問すると、彼/彼女はおそらくイライラするでしょう。したがって、質問を少なくして、自分で考え出そうとします。

インターネットで物事を調べたいときにこれを視覚化します。


3

あなたが知らないことを学ぶ最良の方法:グーグルイット!私はあなたがほとんどの開発者と同等であると感じています。劣等感をバックパックに入れて、心を開いて入る。

質問することを恐れず、Googleで調査を行い、失敗してみてください。それはすべてその一部です。


3

企業環境でのソフトウェア開発には、かなりの量のコードの再利用が必要です。APIがすでに存在し、広く使用されているのに、なぜ関数/メソッドを書き換えるのですか?ほとんどの場合、作成するものと同じくらい効率的で、時間がかかりません。

もちろん、ソフトウェア開発を成功させるには、キーボードの休憩も必要です。そのため、実際に何が起こっているかを読んで理解することができます。任意のWebフレームワークを使用してください。あなたが書いているコードを理解するために、下で何が起こっているかを知っておく必要がありますが、Webフレームワークを最初から書く必要はないでしょう。

フレームワークのタイプを活用するコードを記述するだけでよく(コンポーネントベースのフレームワークには特定のスタイルが必要です)、これは全体像を理解することから来ています。全体像を学べば大丈夫です。


2

盲目的にコーディングするのではなく、問題を調査することに何の問題もないことは、すでに与えられた答えから明らかです。しかし、直接質問しなかったために対処されなかった質問は、なぜあなたはそれほど不安に感じているのですか?そしてそれについてあなたは何ができますか?結局のところ、多くの人が問題を通り抜けてグーグルでグーグルに乗り出し、十分な自信を持っています(そうすべきではない人でも...)

じゃあ何をすればいいの?たぶん、背中に数百個のパットが必要だったかもしれませんが、それを手に入れて、自信を持ってコーディングできるようになりました。しかし、それでうまくいかなかった場合は、自動テストとテスト駆動開発を検討することをお勧めします。あなたがそこに着くとき、あなたは:何もあなたのテストスイートから「すべてのテストに合格」のように「よくやった」と言いません知っているあなたは右のそれをやりました。

また、少し自分自身に挑戦してみてください。あなたは、すでに知っている構文を常に探していると言います。そのため、構文を調べずにいくつかのコードを書くことを強制すると、(すぐにではないにしても、すぐに)あなたが結局うまくやっていることがわかります。


2

開発者は「偉大な」生まれではありませんが、偉大さは経験によって自動的にもたらされるわけではありません。逆に、経験の不足は開発者を「悪い」ものにしません。優れた開発者と悪い開発者の違いは、ドメインの知識ではなく、方法論にあります。優れた開発者の際立った特徴は、彼が意識的にコーディングしていることです。別の言い方をすれば、優れた開発者は常に自分が何かをしている理由を知っています。個人倫理の観点から、これには知的勇気と誠実さが必要です。

時間をかけて基本を理解することが非常に重要です。より複雑なものはその上に構築されます。言語と舞台裏で行われていることを理解する基盤がない場合、コーディングは単純にハッキングされます…


1

したがって、例のある本を読んで、それらを参照するのは悪いプログラミングです。それはあなたの質問の文脈です。APIのドキュメントを作成する人はほとんどいないので、本が残っているだけです。

多くのコード例を参照しているので、私の状況を読んだ後、おそらくあなたがこの質問をするあなたの理由が何なのか自分で答えることができます。

16歳で路上にいたため、大学に行く機会がありませんでした。24歳のとき、何らかの理由で通信専門学校で勉強し、SCJP、SCJD、SCBCD、SCWCDとしてベンダー認定を受けました。私は苦労し、例のためにオンラインにする必要があったことを認めなければなりません。知らないうちに、頭の中で脳腫瘍が成長していました(2010年までにオレンジの大きさでした)。5回の脳手術、6週間で化学療法と放射線療法、10か月の化学療法を組み合わせた後も、自分のプロファイルから見える手書きのコード化されたサイトでプログラミングを行っています。

はい、私は今、脳にダメージを与えた多くのコード例を必要としているので、それは私を悪いプログラマにしますか?


正当な理由があります。もちろん、だれかがcodezを渡さなければ対処できないのは不十分なプログラマーだけである、と(あなた自身の話を使ってでも!)簡単に議論することができます。問題は、それが公正な評価であるかどうかです。
cHao

1

あなたはハッカソンに行くと言っていたのを見る。私はこの1年(15以上)にかなり多く行ってきましたが、それらが学習に最適であることに気付きました。そして、学習にとって素晴らしいとは、そのようなコードを二度としない方法を学ぶことです。私は主に、新しいことを学ぶことができるように、行くすべてのハッカソンで何か新しいことをしようとしています。膨大な時間の制約があるため、見つけることができるすべてのコードをコピーして貼り付けるだけで、テスト中にこれがお尻に噛み付くようになります。

ただし、A:バグテスト中に多くのことを学んでください(また、ひどく泣きます)B)そのようなコードを二度としないことを知って、より良いコーディングプラクティスを学んでください。また、ハッカソンでは、知らなかった新しいことをたくさん教えてくれる人と出会い、学校では決してやらないことをします。

だから私が言っているのはコピー貼り付けは悪いことであり、あなたは何も学ぶことはありません、そしてコピー貼り付けによって節約した時間は後でバグテスト中にあなたに噛みつき、あなたが何を書いたのかわからない、それは午前8時です、そして、すべてのカフェインで満たされています。しかし、コードのバグテストを行う限り、以前にコピーしたすべてを学習する必要があります。


0

まあ、私は自分を優秀なプログラマーとは呼ばない。しかし、私がしていることは簡単です。何かをする方法がわからない場合は、実際にインターネットに関するコード/例を見てください。次に、それを読んだ後、書き直し、最適化して、必要なコードに最適なものを使用しようとします。

注:インターネットからコードを読んでも、悪い開発者になることはありません。他の人がどのようにそれを行うかを見るのは常に良いことであり、あなたは常に何かを学びます。しかし、その後、盲目的にコピーするのは良くありません。


-1

開発者/学生がプロジェクトにコードをコピー/ペーストするためにウィキペディアに行き、単純に「動作」させようとする場合、この人が開発している唯一のスキルは「Googleの使い方」です。そこには浸透のプロセスがあるかもしれませんが、全体ではありません。(大学のコースでこれを行う人の数は信じられないでしょう)

ただし、他の人のコードを分析し、コード自体で何が起こっているのかを本当に考えれば、その人が悪い開発者になることはありませ。これにより、開発者は断固とした開発者となり、おそらくより触覚的または視覚的な学習スタイルを示しています。私は例によって非常によく学びます。誰かが私に何かを言うか、私にそれを説明しようとする場合、私は通常彼らが話しているwtfを私に見せるように頼みます。

コードを見て、分析し、コードから学習することは、使用している言語で読んで学習しているため、実際には時間の経過とともに優れた開発者になります

私は母国語の英語よりもコンピューター言語の内外を知っていると冗談を言うことがよくあります。どちらが質問をします。「Java plzで説明してくれますか?」


-1

チェスをするようなものだと思います。個々のピースをチェックし、ルールに従って動く場所をトレースします。潜在意識が参加するまで、ある程度の意識的なチェックを行い、パターンとインスピレーションのシーケンスを明らかにする必要があります。

プログラミングでは、より多くのピースとルールが存在する可能性があり、構文につまずき、「ルール」を通過することで永遠に見つけるバグに固執することがありますが、最終的に潜在意識が作動します。時々戻って、それが何ができるかに驚く。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.