※この記事はJonathan Bluks氏の「10 Signs You Will Suck at Programming」を翻訳したものです。Mediumのコメント欄より翻訳の許可を頂きました。ありがとうございます。
あなたがプログラミングに向いていない10のサイン
最近、RedditやQuoraで「自分がプログラマとして成功できるか、どうすれば分かりますか?」という質問をよく見かけます。キャリアチェンジを検討したり、あるいはソフトウェア開発に興味があったりするのであれば、それはごく自然な疑問です。
コンピュータに関する正式なトレーニングを受けていない場合、人々はプログラマになることに大きな心理的障壁があると思います。プログラミングが苦手であれば、あなたは自分がプログラマとして才能が無い人だと思うのは自然な考えです。もしあなたが俳優になりたいと思っていて、自分は演技が得意かどうかを疑問に思うことと同じです。
私はフルスタックWeb開発を教える教育者として、多くの初心者プログラマに教えてきました。そして良いニュースは、プログラムを学ぶことができなかった学生はめったに見なかったということです。読み、書き、算術のように、私はプログラミングを基本的な人間のスキルだと見なしています。それは私たちの一般的な能力の一部ですが、それらは学ぶ必要があります。
過去2年間の教育の中で、私はさまざまな学生がその過程で奮闘してきたこと、そして彼らの奮闘に現れる共通の課題を目の当たりにしました。あなたがこれから紹介するリストを見て、まさに自分自身のことだと思うのならば、おそらくプログラミングには向いていないでしょう。あなたは他にやるべきことを見つけるべきです。それでも、もしあなたが開発者になるために目標にコミットし続けるのであれば、これらの問題は簡単に変えることができるでしょう。
プログラミングは、読む、書く、そして算術のように、人間の基本的なスキルです。誰でも時間と努力でプログラムを学ぶことができます。
以下のリストは、あなたがプログラミングに向いていないか、そしてあなたがそれらを変えたい時に何ができるかを知るのに役立ちます。
1 | 好奇心の欠如
コンピュータやテクノロジーがどう動いているかに興味がなければ、プログラマとして成功することは決してないでしょう。
学習のための基本的な要件は、あなたが学んでいることへの積極的な関心です。テクノロジーに興味を持っていなければ、成功したプログラマーになるために必要とされる広くて深い知識を学び続けるエネルギーは持ってないでしょう。
テクノロジーの世界は、興味深い分野、相互に関連したアイデア、そして想像力を刺激する可能性のある巨大な海のようなものです。それに飛び込み、あなたができることすべてを発見したいのであれば、内発的な動機が必要です。
あなたの好奇心を見つけてください:プログラミングが本当に興味があるものなのか、自分自身に問いかけてください。もしそうでないのであれば、あなたが興味をもっているものを見つけに行ってください。あなたの時間とエネルギーを節約しましょう。しかしその答えが”Yes”ならば、今まで気づいたことのない新しいことを見つけるよう自分自身を後押しして、その海が巨大であることを認識しながら少し深く潜ってください。
2 | 自律性と機知の欠如
もし自分自身の問題解決能力を伸ばさなければ、プログラマとして成功することは決してないでしょう。
間違いなく、成功した開発者になるためには、自分の自己学習能力に自信を持っている必要があります。これは実際には基本的なライフスキルです。あなたが18歳以上であるならば、だれもあなたに何かを教える義務はありません。それが現実です。情報を見つけ、自分自身に必要なことを学び続けることはあなた次第です。
プログラミングの世界では、あなたが必要とするすべての情報は、以前までは情報スーパーハイウェイとして知られていた魔法のような場所にありました。この大規模なライブラリには、Googleという大きな入り口があります。必要な情報をGoogleを通して入手できる、ということを学ぶことが、テクノロジーを習得する上で必要なスキルとして最初に乗り越えるべきハードルです。
優れたGooglerであることに加えて、すべてのプログラミング言語には、その言語がどのように動くかを書いた明確なドキュメントがあります。それを辞書のように使い、あなたが知らない単語を見たときは、それを調べてください。プログラマとしてのスキルを身につけるための最も早く、最も信頼性の高い方法は、単にドキュメントを読むことです。これは文字通りの意味です。
リソースを使う:あなたが必要とするすべての答えは本当にそこにあることを認識してください。質問がある場合は、他の誰かに尋ねる前にGoogleで検索し、ドキュメントを確認してください。あなたが本当に答えを見つけられなかった時のために、他人の時間を節約しましょう。
3 | 問題に直面しても粘り強さが無い
もし問題に直面したときに簡単に諦めるようであれば、プログラマとして成功することは決してないでしょう。
プログラミングの本質は問題を解決することです。それはコンピュータが発明されたすべての理由です。あなたがプログラムに取り組み始めるときは、いつでも多くの問題に遭遇するでしょう。あなたが問題を解決しても、ほとんどの場合、その背後にまた別の問題があります。あなたは進歩していますが、新しい問題は常に直面します。
このような多くの問題に直面することは、気が遠くなり、やる気を失わせることもあります。あなたは物事がただ「きっとうまくいく」ように思っているのであれば、問題が続く中でエネルギーを持ち続けることができず、少しずつ問題解決のための感情は失われていくでしょう。文字通り、あなたの仕事は、なぜ物事がうまくいかないのかを把握することです。
私の経験では、通常、クラスごとに1人か2人の生徒が他の生徒よりも多くの問題に遭遇することにコツがあるようです。それは全くランダムであいまいな問題です。私はその学生たちに、直面する問題が多いほど、より深くそして徹底的に学べることを教えてあげます。彼らは他の学生よりも多くの問題を解き、それらの問題を通したことで、より自信がついたことにすぐに気付くでしょう。
我慢強くあれ:問題はプログラミングにはつきものであり、実際には問題というよりもチャレンジです。これから直面し克服するあらゆるチャレンジは、あなたにより深い理解と、新しい課題に立ち向かうための能力と、それまでの課題をすばやく解決する能力を与えます。
4 | 問題解決に成功した気持ちはない
問題を解決した後に興奮や達成感を感じなければ、プログラマとして成功することは決してないでしょう。
これは3と関連していますが、問題に直面しても簡単に諦めてしまうのは、問題を解決しても「良い感情」を感じられないからです。バグや問題を修正することが終わりのないルームランナーのようなものになると、あなたは問題解決に興奮を覚えなくなります。
あなたは問題を解決するときにドーパミンを感じることが必要です。これは、ビデオゲームのレベルをクリアしたり、クロスワードや数独のような課題を解決したりする経験に似ています。私たちは、挑戦を通して持続し、そして最後に勝つことから来る良い気持ちがあることを知っています。しかし、あなたにその感情がなかったり本当に何も感じなかったりするなら、あなたはプログラミングによる喜びを経験することはできないでしょう。もしプログラミングが単調な仕事で、簡単に結果を得られると考えるのであれば、あなたが成功したプログラマになることは決してありません。
あなたの勝利を祝いましょう:あなたが苦しんでいた問題を解決できたときは、たとえどんなに小さくても、常に達成したことを誇りに思い、休憩を取り、そして自分の仕事を祝福しましょう。次に直面する問題に備え、自分を元気づけましょう。
5 | 学習と理解に焦る
あなたがせっかちに学び、すべてを楽して素早くマスターすることを期待するなら、あなたは本当にプログラミングで成功することは決してないでしょう。
人間である私たちは限りのある生き物です。私たちの世界がどんどん速く動いていて、コンピューターがその大きな原因であるとしても、私たちはできる限り速く動けるだけです。私たちの頭脳は一定のスピードで働き、そして私たちの過去、信念、感情、健康に応じて…私たちはみな異なるスピードで情報を学びます。
技術の世界は、広大な海のようです。あなたは海の全てを知ることはできず、何も学ばないでいれば海の一端にも到達することはできません。もしそれに圧倒されてしまうなら、あなたは常にキャッチアップするというプレッシャーを感じ、そして全てを知ることはできないと感じるでしょう。自分の知識を受け入れ、そして少しずつ学ばなければ、あなたは自分の位置を見失い、諦めます。
代わりに、あなたは学びの旅を楽しむ必要があります。あなたが得る少しの知識、あるいはあなたが得る新しいスキルは、あなたを興奮するものでなければなりません。問題を解決するのと同じように、たとえそれが小さなものであっても、あなたが一歩前進したことを誇りに思いましょう。
あなたの進歩を認めなさい:学ぶべきことはたくさんあり、プログラミングの旅は決して終わりません。しかし知識は積み重なっていくため、自分の知っていることを誇りにし、自身が学んだことや努力は自分のキャリアのための強い基盤となることを信じてください。
6 | 思考に飽きたり疲れたりする
あなたが思考や集中に対して、怠惰で面倒だと思うのであれば、あなたはプログラミングで成功することは決してないでしょう。
プログラミングは思考活動です。人間である私たちは考えることが得意ですが、現実には一日中怠惰に過ごしています。あなたが集中に慣れていない場合、問題に対して集中し続けることは難しいでしょう。
この症状として、画面をぼんやりと見つめる、問題を先延ばしにする、ブラウザのタブをめくっている、回答を求めてStackOverflowを必死にスキャンしている、などがあります。これはあなたが精神的な限界に達したため、切り抜ける必要があるというサインです。
プログラミングをしているとあなたは疲れ、考えることは文字通り体を動かすのと同じように物理的エネルギーを燃やすでしょう。あなたがそれに必要とされる精神的なエネルギーの扱いに慣れていないとき、集中し続けることは難しいと感じるかもしれません。しかしそれはジムに行くのと同様で、繰り返すほどあなたは強くなるでしょう。
あなたの心は筋肉です:あなたの脳が筋肉のようなものであることを信じてください。あなたが考えれば考えるほど、脳はより良くそしてより効率的になります。あなたが断片をまとめて、そして精神的な概念を開発するにつれて、解決策を発見することははるかに容易になります。
7 | 自分のことを考えられない
自分の状況を見ず、他人が自分のことを考えてくれると期待しているのであれば、成功したプログラマーになることは決してないでしょう。
あなたが何か新しいことを学ぶとき、あなたは自分の知識と経験は未熟だと考えて、自分の意見を持てないかも知れません。その分野で率先したり、行動、発言して失敗したりすることは危険なことだと思っているでしょう。
私たちは、間違うことに対して本質的な恐れを覚えます。その間違うことへの恐れが、あなたの探求と好奇心を阻害し、真の知識、経験や"失敗"から得られる知識を得られずに苦しむでしょう。"第一人者"の意見や、人気ブロガー、ベストプラクティス、または"教科書"の回答に頼る場合、実際にプログラミングに必要な知識は真の意味では身につけられません。
何がうまくいくのか、何がうまくいかないのかについて、あなた自身の意見を持つ必要があります。あなたはなぜ自分のソリューションがうまくいくと思うのか、そしてその利点は何かを理解する必要があります。明白なものではなく、細かい見通しが必要な開発をしましょう。あなたは自分の意見で議論できる必要があり、そしてできるようになれば、自分自身の新しい視点を持つことができます。
自分のことを考えなさい:経験と批判的思考(クリティカル・シンキング)を通じ、あなた自身の考え方を養いましょう。合理的な推測をし、ポジションを取り、新しい情報を得たときは意見を変えることもいとわないでください。
8 | 堅く、狭く、そして無秩序な考え
あなたの考えが固くて、あなたのコードをキレイにし続けることが困難であるならば - そしてさらに拡張によってキレイにすることにフォーカスを当てるなら、あなたはプログラミングで決して成功しないでしょう。
私が学生に時々見られる2つの極端なことがあります。一つ目は、固くそして狭い考え方です。この態度は誰かからの助けを拒否し、フィードバックをもらっても、何も変えようとしません。物事を1つの観点からのみ見て、何かを提案されても無視します。
二つ目は、体系化されていない思考です。学生は必要以上に物事を複雑にしようとし、そして彼らのコードは汚くて扱いづらいです。彼らは問題を考え過ぎ、10行あれば十分なものも100行のコードを書きます。
これら2つの考え方を組み合わせると、結果としてプログラミングへのひどいアプローチが生まれます。これは何層もの修正やハックをもたらす、強引なアプローチのようなものです。必要とされているのは、ソリューションを見直し、それを再評価し、最初のアプローチをあきらめ、そして再編成する能力です。
他の可能性を考えたり、フィードバックを受け取ったりすることができないと、能力を成長させ改善することはできません。状況を整理しないことは、他の明白なパターンを思いつくことからあなたを遠ざけます。そしてあなたの仕事の全体的な質は低下します。
自己分析:あなたは一歩下がって俯瞰して自分がどのように物事にアプローチしているかを考える必要があります。どうすればこれをより良くできますか?。あなたの人生を楽にするためにできることはありませんか?。あなたを助けるものを見失っていませんか?
9 | 複数の答えの間の「良い」と「悪い」の連続性に気付かず、「正しい」答えを望んでいる
プログラミングの最終目標が正しい解決策を見つけることだと考えるのであれば、プログラマとして本当に成功することは決してないでしょう。
スキルやプログラミングを学び始めるとき、学生はしばしば彼らがしたことが「正しい」かどうかを知りたがっています。その答えは「場合による」です。
コンピュータサイエンスはトレードオフを評価する科学です。
さまざまな状況の中で、その選択が正しいかどうかは、すべて状況と目的によって異なります。あなたがプログラミングを、正しい答えか間違った答えかのどちらかを見極めるテストと思っているなら、全体像を見失い、そしてあなたの創造性を放棄するでしょう。状況に対して正当化できるのであれば、どんな答えでも「正しい」のです。
プログラミングは詩や短編小説(あるいはプログラムが大きい場合は潜在的に小説)を書くことに似ています。あなたのコードは美学と美しさを備えており、時にはそれはあなたと他のプログラマによってしか認識されないです。あなたがその解決策をどのように考えて選択したかは、「正しい方法」あるいは「間違った方法」よりも重要です。芸術家の心を持つことは、ただ一つの方法があると考えるのではなく、いくつもの選択肢や可能性があることを可能にします。それがプログラミングの美しさであり、問題を解決するための多くの方法があります。そしてさまざまな選択肢を考慮することは、どの選択が状況に最適であるかという感覚へ導いてくれます。
クリエイティブになる:問題を解決するには多くの方法があることを認識し、経験とアウトプットを通して、どの解決策が他の解決策よりも良いと感じるかの微妙な感覚を、時間をかけて深めます。全体像を見ながら、様々な可能性を考慮して直感を信じることは、より満足のいく解決策につながります。
10 | 細部に注意を払っていない
細部をごまかし、ささいなことを見落とすなら、あなたは成功したプログラマーになることはないでしょう。
コンピュータは正確な機械です。プログラミングでは、コンピュータが期待するとおりに必要なコマンドを正確に渡す必要があります。そうでなければ、何も動かないでしょう。コンピューターにはだいたい動いているという中間地点はありません―うまくいくかいかないかのどちらかしかありません。
それはあなたがプログラミングしているときに、細部に目を向けなければならないことを意味します。すべてのスペース、大括弧、またはセミコロンの数などです。場所を打ち間違えると、何も機能しなくなります。コンピュータがエラーメッセージを吐き出すときは、そのメッセージを見て、それが何を伝えているのかを正確に理解できる必要があります。そして現実には、そのような細部を見逃した場合、文字通りタイプミスの結果である問題を突き止めるのに何時間も費やすことになるでしょう。
コンピュータが言うように、悪魔は細部にあります。そしてそれはプログラミングにも当てはまります。
細部に注意を払う:細部は重要であり、あなたはそれを受け入れる必要があります。一度コードを書いたら、コードのおかしい部分をスキャンし始めましょう。あなたは自分のコードを体系化し、問題を素早く特定するのに役立つツールを使うことができます。
ボーナス:ビジネス志向であること
これは、私が気づいたことの副産物です - 特にビジネス志向の学生は、プロセスよりも結果に焦点を当てていることが多いです。彼らは自分のビジネスアイデアを実現させる「実用的なアプリ」を手に入れ、「最初に市場に参入する」ことを望み、そして彼らは学習曲線をビジネスを成功させる目標に対する障壁として見ています。
プログラマとして成長するのを助けることが困難であった学生を振り返ってみると、彼らはテクノロジーを真に理解するためのプロセスに焦りを感じていました。彼らは技術を探求し楽しむためのものではなく、目標を達成するための手段と見なす傾向があります。
この話の延長として、ビジネスに興味があり、学習に苦労していた学生もいました。彼らは自分の持っていないスキルをフリーランスのクライアントに頼むことをしていました。すぐに使えるリソースやテンプレート探しに奮闘したり、仕事をアウトソーシングしたりするでしょう。彼らは本当にプログラミングが苦手でしたが、人々にお金を払ってもらえるような素晴らしいプログラムを作り出しました。
そのため私が付け加えたいのは、ビジネスやセールス、ネットワーキング、そしてビジネス開発に優れている学生は、プログラミングのスキルを習得するために他よりも苦労するかもしれないということです。経済的機会を創出し、人々を解決策に結びつけたいという彼らの自然な願望は、プログラミングの退屈な細部に焦りを感じさせます。
結論
プログラミングは習得が難しいスキルですが、ほとんどの人が習得できるのは確かです。上記のリストには壁となる考え方や態度が含まれていますが、ほとんどの人はそれらを克服し、プログラミングの分野で能力を伸ばすことができます。
あなたがプログラムを学ぶことに興味があるならば、私はあなたが旅を始めることを勧めます。上記のリストを念頭に置き、そしてあなたをすぐに前へと進めてくれるオンラインで利用可能なリソースを探してください。きっと後悔しないでしょう。