近年、ITの目覚ましい成長によってプログラミング学習を始めた人、すでに個人開発している人など増えてきました。
しかし、特に独学によるプログラミングを実施している人は、周りの学習の比較ができず自身の取り組みがどの程度かわからないこともあります。
本記事では、プログラミングを上達させるために、プログラミングセンスの磨き方を解説します。
プログラミングセンスがある人の共通点
そもそもプログラミングセンスがある人はどのような人なのか把握しておく必要があります。
特に、継続的なプログラミング学習あるいは活用を考える人にとって、自身のプログラミングにおける研鑽は大切です。
- 全てを理解するわけではない
- コードの丸暗記に頼らない
- 検索(情報収集力)を重要視する
- 理解した上でコピペを活用する
- 基本構文から応用を考える
- 過去から学んだ経験を活用する
- 可読性の高いコードを意識する
全てを理解するわけではない
プログラミングセンスがある人は、当然ですがポイントごとのプログラミング知識しか理解しません。
つまり、自身の目的に対して「なぜプログラミングを利用するのか?」といったポイントに関わる必要な知識だけを学習するよう心がけています。
単純に考えても、プログラミング言語の種類は膨大であり、利用するソフトウェアやサービス自体も数ヶ月でアップデートされ、常に新しい情報を取り入れなければなりません。
結論、プログラミングに関わる全てを理解すること自体が不可能です。
そのため、自身の目的を達成するための情報整理だけ実施することが重要になります。
コードの丸暗記に頼らない
プログラミングにおいて、コードの丸暗記をしないことも大切です。
やはり共通して目的に対して最短距離になる学習計画を立てるために、基本構文や文法を全て暗記することはありません。
実際に、プログラミング業務の現場でも基本的にわからないこと・忘れてしまったことは調べる前提です。
若手・ベテラン問わず現役エンジニアは何も見ずにコーディングすることはなく、間違いなく調査・検索を駆使します。
また、何度も同じ経験を積み重ねることで自然と覚えています。
プログラミングセンスがある人は、「頭で記憶する」のではなく「体験から学ぶ」ことを意識しています。
検索(情報収集力)を重要視する
プログラミングセンスがある人は、プログラミング課題に当たった時に「検索」から始めます。
「全てを理解していない」「暗記をしていない」ことからわかる通り、忘れた・不明だと思ったらすぐに検索します。
プログラミング初心者はまだピンと来ないかもしれませんが、現役エンジニアは検索速度や正確性が異常に速いです。
これは、繰り返し情報収集力を高めたことにより、検索の仕方・情報までの当たり方といった”勘”が養われます。
つまり、プログラミングセンスのある人は、迅速な検索行為から素早く疑問・不明点を解決しながらプログラミングを進めています。
理解した上でコピペを活用する
プログラミングセンスのある人は、コピペの使い方も特徴があります。
近年、膨大なソースコードがネット上に記載されているため、使いやすい構文・コードをコピペによって再利用しています。
つまり、コードの理解さえできていればゼロからコードを書く必要はありません。
また、創意工夫としてプログラミングノートなどを作成し、再利用コードをまとめていたりします。
基本構文から応用を考える
一般的に、プログラミングの基本構文以上のことは基礎学習で学ぶのは難しいです。
しかし、プログラミングセンスがある人は、基本構文で理解したプログラミング概念がどれほどの範囲で利用できるか仮説を立てながら応用します。
基本構文を応用できるようになると、シンプルなコードの記述も可能になり、結果的に可読性の高いコードを実現できるようになります。
過去から学んだ経験を活用する
プログラミングセンスがある人は、自身の過去経験を活用します。
特に、トライアンドエラーによるプログラミング課題の解決を実施している際に、「過去にこんな実例があったな。」といった経験から解決速度が速くなります。
まさに、トライアンドエラーによって得た現象と知識がつながり、別の課題に応用して取り組めるようになります。
可読性の高いコードを意識する
プログラミングセンスがある人は、無駄のないコーディングを意識することも特徴です。
プログラミング業務は、ソースコードが長い・関数処理が最適化されていない・わかりづらいコメントが多いなど、様々なコード負債が発生します。
実際に、プロジェクトのチーム開発時に他者を考えたコーディングができると重宝される人材になります。
また、シンプルなコードを書けると、短時間による作業・生産性向上など様々なメリットにもつながります。
プログラミングセンスがない人の共通点
逆に、プログラミングセンスがない人はどのような人なのか確認しましょう。
実際に、プログラミング学習中に「文字の羅列をしているだけで何が面白いのか」「苦痛すぎてつまらない」など思考を深められない人にとってプログラミングは意味をなさないからです。
- 単純作業の繰り返しが苦痛じゃない
- 作業に対して疑問や課題感を持てない
- 地道な作業・調査が苦手
- 自ら試す好奇心・自発性がない
- 長時間座っていられない
- 長時間の思考に苦痛を感じる
それぞれの共通点をプログラミング業務などに置き換えて解説していきます。
プログラミングセンス以前に、「プログラミングに向いていない人」の特徴でもあります。
単純作業の繰り返しが苦痛じゃない
物理的な単純作業もありますが、PC業務においても単純作業は存在します。
メール対応やバグのトラフィック監視、タスク管理など様々な業務をPCで取り扱う中で一部プログラミング業務もあるわけです。
エンジニアの至上命題としてプログラミング業務がメインであるはずが、別業務で時間が忙殺されるケースも多々あります。
その中で、「メールだと対応に時間がかかるからSlack導入で効率化する」や「わざわざ監視ツールを見たタイミングでバグが分かるなら、バグが発生したタイミングでSlackに通知が来るようにしよう」など、日頃の業務を常に効率化する頭が働きます。
単純作業だから効率化するほどじゃないと小さな時間が奪われていることを何も思わず、放置するような人はそもそもプログラミングが向いているとは言えないでしょう。
作業に対して疑問や課題感を持てない
単純作業に続いて関連するのが、特定の業務や事象に対して疑問や課題間を持てない人です。
自身が取り組む業務を見つめ直し、効率化・自動化できればチーム全体で時間短縮でき生産性が上がるケースが数多くあります。
実際に多くの企業が社内DX化に取り組むための部署やチームを作る時代です。
個人に落とし込んだ場合でも、自身の取り組みに疑問や課題感を常に持つ意識がない人はやはりプログラミングに向いていないでしょう。
地道な作業・調査が苦手
PC業務はそもそも既存のツールやソフトウェアを利用して進めることが多いです。
Office 365や他ツールを扱う中で、データ収集やマーケット調査をすることもあるでしょう。
その中でマクロな業務になるほど地道なデータ分析やABテスト・調査が余儀なくされ、めんどくさいデータファイル作成もあるかと思います。
ただ、そういっためんどくさい業務によって得たデータから効率化や自動化にこぎつける背景があります。
特に、プログラミングにおいてはエラー対処やツール連携などで地道な作業と調査がセットでついてきます。
何かを成し遂げるあるいは実現するために地道な作業がセットであることを苦痛と感じる人も、プログラミングが向いていないと感じます。
自ら試す好奇心・自発性がない
自ら実験する好奇心や自発性がない人もプログラミングの素質がない可能性があります。
実際、プログラミングは試行錯誤の連続です。
さらに、一度完成し正常に動作したからといって終わりではなく、アプリの機能拡張や古くなったシステムのリプレイスなど運用保守も重要な役割を果たします。
「自分が知ってる範囲で解決したい」「今から新しい取り組みに抵抗がある」といった人はプログラミングに向いていないです。
長時間座っていられない
基本的にプログラミングは長時間座って実施することになります。
プログラミング業務は物理的な業務と違い、思考業務であるため常に頭を使います。
そのため、身体を動かすことはなく画面とにらめっこする時間が膨大です。
身体を動かす業務を好む人にとってはプログラミングは向いていません。
長時間の思考に苦痛を感じる
長時間の思考に苦痛を感じる人もプログラミングの素質がないと言えます。
プログラミング業務であっても未経験からの学習であっても、常に頭を使う作業になります。
特に、プログラムの挙動が思い通りにいかない、あるいは予期せぬエラーが発生した場合にどのプログラムが悪さをしているか切り分け原因を探る必要があります。
うまくいかない場面で長時間の思考を余儀なくされるプログラミング業務は数多くあります。
そのため、常に仮説検証を繰り返しAがだめならBを試すといった思考ができない人はプログラミングに向いていません。
プログラミングセンスがない人が理解しておくこと
プログラミングを学習し始めると、自身に「プログラミングセンスがない」と悩む人もいるかもしれません。
ただ、「プログラミングの捉え方」を変化させることで学ぶ姿勢や無駄を省くことができます。
- プログラミングセンスの有無は学習への姿勢を見直すこと
- そもそもプログラミング習得は時間を要する
- 学習目的さえ定まっていれば他者と比較することではない
- 文系理系のような区別はプログラミングに関係ない
- コーディング量だけがコード品質を高める
プログラミングセンスの有無は学習への姿勢を見直すこと
プログラミングセンスがある人は、最初から「センスがある」あるいは「向いている」と判断できたわけではありません。
プログラミングに限らず、様々な物事は最初からセンスや向き不向きで決まりません。
結局は、自身がスキルアップする上で無駄をそぎ落とす作業を繰り返すことでコーディングの質を高めています。
そもそもプログラミング習得は時間を要する
そもそもプログラミングの習得は、一朝一夕で獲得できるスキルではありません。
数ヶ月から1年と長期間取り組んだとしても、実際に継続的にまとまった時間を注げていなければ学習時間が足りてないと言わざるを得ません。
つまり、取り組んだフリをどれだけ演じても、実際の業務スキルまで昇華できているかはコードに現れます。
学んだ時間だけでなく、学んだ上で課題解決できた成果を重視することも大切になります。
学習目的さえ定まっていれば他者と比較することではない
SNSやコミュニティで駆け出しエンジニアのような人と比較するのはやめましょう。
あなたの目的と他者の目的は異なるわけで、あなたの目的さえ達成できれば他者がかけてきた時間とスキルレベルは関係ありません。
究極的に言えば、昨日の自分より1つでも新しい知識あるいはスキルを身についていれば問題ありません。
文系理系のような区別はプログラミングに関係ない
あなたを何かの区別で苦手・不得手と”できない側”に認定するのはやめましょう。
プログラミングをイメージだけで遠ざけるのは非常にもったいないため、決めつけは厳禁です。
自身の可能性を自ら閉ざすのではなく、常に学びの中に可能性があると考えて取り組み続けましょう。
コーディング量だけがコード品質を高める
結局のところ、現役エンジニアとして活躍している人は、継続的なプログラミング学習によって経験を積み上げセンスを磨き続けた結果です。
つまり、プログラミング学習を諦めなかっただけです。
また、プログラミングへの理解を深めるだけでなく、「どうすればより効率的に学べるのか」「学習時間をどのように割くべきか」など、自身の学習方法を根本的に見直し洗練させることも並行しています。
最終的に、これまで実施してきたコーディングの量によって、最適化されたコードに変化し品質に影響を与えられる状態になるわけです。
プログラミングセンスを磨く方法
プログラミングセンスのある人は、実践的に何を取り組んでセンスを磨いているのか気になると思います。
特に、プログラミング初心者の場合は以下の磨き方をおすすめします。
- コードの言語化を心がける
- コピペを避けコードを写経する
- エラーに対して常に仮説を立ててから検索する
- プログラミングセンスは習慣/継続で研鑽される
- プログラミングの向き不向きやセンスは重要ではない
- プログラミングセンスは書くといったアウトプットが最重要
コードの言語化を心がける
疑似コードと呼ばれる「コードの言語化」を意識しましょう。
現役エンジニアは、ソースコードを上から1行1行わざわざ読むことはない(膨大なソースコードのため)ですが、あえて読むのであれば1行ずつのコードの言語化が可能です。
つまり、コードが何を指示しているか理解しながらコード追加あるいは改善していることになります。
コードを可読できる状態とは、コードを言語に変換できる能力が備わっていることになるため、コードの言語化を実施しましょう。
コピペを避けコードを写経する
プログラミング初心者であれば、始めからコピペを利用するのは避けましょう。
コードを写経するのにも意味があります。
- プログラムの1行ごとの意味を理解しながら記述できる
- タイピングが速くなる
- 無駄のないコードを考えることができる
- 他者の考え方と自分の考え方を比較できる
- 時にリファクタリングを実施できる
写経することで他者のコードを改善したり、「なぜこの書き方なのか」など理解と追及が実施できます。
エラーに対して常に仮説を立ててから検索する
エラーを発生させた場合、必ず「なぜエラーを起こしてしまったのか」を考えましょう。
エラーにも様々なエラーパターンがあります。
単純なコーディングミスなのか、データの有無によるタイプエラーなのか、仮説を立てながら検索の推論を立てましょう。
コーディングミスなら基本構文の復習、データ処理エラーならプログラムによるデータの扱い方の復習など、何がわかっていないかヒントになるからです。
プログラミングセンスは習慣/継続で研鑽される
一般的に、プログラミングセンスは学習の継続/習慣によって記述したコード量に比例します。
逆に言えば、最初からプログラミングセンスを求めて身に付けることは困難です。
なぜなら、コードの記述経験や繰り返し利用してきたプログラムをカスタマイズするタイミングが訪れないからです。
現役エンジニアであっても、コーディングルール(変数等の命名規則やSOLID原則など)はまちまちであり、意識的に取り組まなければ漫然としたコードのままもよくあります。
そのため、改めてプログラミングセンスを磨くことはプログラミング学習初期に求められるものではありません。
プログラミング学習の本質として、機能を理解する→記述を考慮したプログラムの言語化→コードを記述できるようになる→洗練させるカスタマイズといった流れを意識しましょう。
プログラミングの向き不向きやセンスは重要ではない
上記で示したきた通り、プログラミングセンスは学習初期に求める必要はありません。
むしろ、現役エンジニアであっても常にコードをリファクタリングするわけではありません。
例えば、システムリプレイスなどが発生した場合に初めてセンスのないコードが散見されるケースも少なくありません。
当然の結果で、コードの記述方法に関する文化や利用言語のバージョンアップデートによって新たな記述方法が生まれることがあるからです。
そのため、今あなたが持ち合わせている特性や正確に左右されず、純粋なプログラミングとして機能を保ちつつ可読性を意識し続けることが重要になります。
プログラミングセンスは書くといったアウトプットが最重要
一般的に、プログラミングに限らず物事に対する学習方法の起点は以下です。
- 読むといったインプット
- 見るといったインプット
- 聞くといったインプット
あなたの学習方法も振り返れば、本質的に「読む」「見る」「聞く」のいずれかで知識をインプットしているはずです。
また、物事に対するアウトプット方法は以下です。
- 話すといったアウトプット
- 書くといったアプトプット
- 動くといったアウトプット
上記3つのいずれかによって人はアウトプットするわけですが、プログラミングは「書く」といったアウトプットのみ有効になります。
そのため、どれだけ知識先行としてインプットしても、プログラミングスキルが身につく方法は「プログラムをひたすら書く」に尽きます。
インプット行動よりもアウトプット行動に意識を向けましょう。
スキルの習得とセンスの磨き方は違う
プログラミング初学者に勘違いしてほしくないのは、プログラミングスキルの習得とプログラミングセンスの磨き方は異なる点です。
つまり、技術を伸ばすこととセンスを磨くことは異なる思考が必要になります。
- プログラミング言語特有の記述方法を身に付ける
- 文法やコードの「型」を理解する
プログラミングスキルは、どうすればアプリケーションを実現するか考えたときの手段になります。
- 抽象的なレベルで思考できる
- データ構造の重要性を認識できる
抽象的なレベルとは、微細なプログラムの違いはあれど同処理を実行するプログラムAとBが存在した場合に共通点や本質的な処理は何かを抽出することです。
つまり、どれだけ記述方法が違うプログラムがあっても、「結局これをしたいんだよね。」と理解できる思考があるかです。
また、扱うデータが変わらない限り表現が変わっても要件を満たせばよいとわかります。
そのため、開発するアプリケーションに対するデータ構造の重要性も理解を深める必要があります。
プログラムをどう具体的に書くのかといった「How」から、結局何をやりたいのかといった「What」へ発想を転換する力もプログラミングセンスの一つだと考えます。
プログラミングセンスの思考を磨くためには、量を質に転化するために膨大なコード量をアウトプットしていくしかありません。