「プログラミングを勉強して、エンジニアとして就職・活動したいけれど、独学は可能だろうか」と考えているなら、安心してください。
プログラミングは独学可能です。
この記事では、プログラミングを独学したいという人のために独学でプログラミングを習得するためのやり方とロードマップ、注意点をまとめました。
これからプログラミング学習を始めるという人は参考にしてください。
プログラミングは個人開発レベルなら独学可能
プログラミングは、個人開発レベルなら独学が可能です。
企業に所属し、チームでプロダクトを作るようなプログラミングは独学で習得するのが難しく、そういったカリキュラムのあるスクールやメンタリングサービスを利用する必要があります。
実際、会社に勤めながらプログラミングを独学し、サービスをリリースしている個人もいます。公にリリースしていなくとも、Excel VBAを使い業務の効率化を測ったり、会社の業務を短縮するためのスクレイピングプログラムをPythonで書いたという人は、数多くいます。
フリーランスエンジニアとしての独立するなら、チーム開発の経験は必須です。個人開発レベルのサービスやアプリを開発し、それを売却することで生計を立てていくならともかく、助っ人エンジニアとして開発に携わるつもりでフリーランスを目指すなら、ある程度独学が終わった時点でチーム開発の経験をつめる環境に身を置く必要があるでしょう。
関連記事:フリーランスにスキル不足でなると失敗します!自分がつけるべきスキルを知るための手段とは
フリーランスエンジニアを目指すなら独立前に勤める必要がある
フリーランスエンジニアを目指すなら、独立前に最低でも3年から5年、企業に勤めてプロジェクト開発に携わった方がいいでしょう。
実際、今の時点でフリーランスエンジニアとして活躍している人も「これからフリーランスになるなら、独立前に下積みを」と勧めているくらいです。
フリーランスエンジニアとして活動する上で、企業に勤めないと得られない知識の代表的なものにこの4つがあります。
- 業界内の常識・非常識
- チーム作業の手順や進行ノウハウ
- 専門性が高く、大規模な案件の見識
- フリーランスに外注する側の常識・非常識
どんなにスキルレベルが高くても、プロジェクト開発のチームの一員として難があるようではフリーランスとしての仕事は多くありません。
一時期、新卒フリーランスともてはやされていた人たちが「メールの一本もまともにかけず、仕事がやりにくい」と噂になっていましたが、どの業界でも一緒です。
エンジニアとしてフリーランスになりたいなら、その業界の常識・非常識を知り、人脈を作るためにも勤めておくべきです。
フリーライドと言われないためにも、きちんと企業に貢献できる形で勤めるとなおいいですね。
独学でプログラミングレベルがある程度のレベルになった人は、業界未経験でも受け入れ先を見つけてくれるエージェントを利用するといいでしょう。個人開発ができるレベルのスキルがあるなら、比較的すぐに受け入れ先が見つかるはずです。
関連記事:未経験でもIT業界に転職できる!転職活動を始める前に知っておきたいこと・やるべきこと
プログラミングを独学するときの言語の選び方
プログラミングを独学してフリーランスになりたい人が、一番最初に悩むのが「どの言語を選択すればいいのか」です。「プログラミングでこんなことをやりたい」「あの人みたいなエンジニアになりたい」といった希望があるなら、その道を選ぶのが最短ルートです。
しかし、「稼げるフリーランスエンジニアになりたい」といった漠然とした理由でプログラミングを独学する場合は、どうやって選べばいいか悩みますよね。
言語選択の際に参考になるものにはこんなものがあります。
- やりたいこと・なりたい姿で選ぶ
- 言語別の年収
- 現時点での求人数
- 業界内のトレンド
- 業界動向や海外の流行
関連記事:【初心者向け】おすすめのプログラミング言語8選!メリット&デメリットも解説
やりたいこと・なりたい姿で選ぶ
プログラミング学んでやりたいこと・なりたい姿で選ぶのが、最も学習モチベーションを保ちやすく、成功に近づく道です。
ただし、「こんなエンジニアになりたい」というモデルがいる場合は、その人がやっているジャンルがどれくらい稼げるのかについての下調べはしておいた方がいいでしょう。
その人が上位10%の稼げる層なだけで他の90%はほとんど稼げないジャンルである可能性もあるからです。
言語別の年収
言語別の年収で学ぶ言語を選ぶのも手です。
例えば、ハイクラス転職サイトのビズリーチではプログラミング言語別の年収平均を出しています。
1位 | 2位 | 3位 | |
2016年 | Python(651万円) | Perl(633万円) |
Ruby(606万円)
|
2017年 | Scala(626万円) | Python(601万円) |
Kotlin(577万円)
|
2018年 | Go(600万円) | Scala(600万円) |
Python(575万円)
|
※参考:ビズリーチ「プログラミング言語別 平均年収」を発表! 1位と最下位では約200万円の差他
統計を取った時点での年収の平均値なので、今後もその言語の年収が高い確証にはなりませんが、参考にはなるでしょう。
現時点での求人数
現時点で求人が多い職種の中から、よく使われている言語を選ぶこともできます。
エンジニア向けの求人サイトの中には、職種別・言語別に求人数を表示しているところがあるので参考にしましょう。
このサイトでは、業務系アプリケーションエンジニアの求人数が最も多いですね。ここから絞り込み検索をしていくことで、言語別の求人数の差がわかりますし、未経験求人が多い言語にどんなものがあるのかも判明します。
求人情報の詳細をみれば応募に必要な経験年数もわかるので、エンジニアとして転職したい時期から逆算して学習期間を決めることも可能です。
業界内のトレンド
数年前まではAIや機械学習エンジニアがトレンド、その前はRubyによるWebアプリケーション開発がトレンドでした。
こういった業界内のトレンドを把握して、素早く乗るという手段もあります。
短い学習期間でスキルをつける必要があるので、独学だけでエンジニア転職するには効率が求められます。しかし、流行っている言語は求人数が多い傾向があり、現場で働きながら実力をつけることで素早いキャリアアップも可能です。エンジニアデビュー間もない頃は辛い思いをするかもしれませんが、覚えておくといいでしょう。
業界動向や海外の流行
業界動向や海外の流行について把握してから「今度はこの言語が来る」とあたりをつける方法もあります。
業界動向や海外の流行は、転職エージェントの面談の利用やその業界のセミナーへの参加、有識者のSNSをフォローすることで得ることができます。
プログラミング言語の種類の見当もつかないうちは、未経験でも利用可能な転職エージェントに登録して、業界内の動向を探るのがいいでしょう。
プログラミングを独学するなら関連言語とフレームワークも一緒に学ぶのが効率的
プログラミングの学習というと「1つの言語のチュートリアルが完璧にできて、オリジナルサービスを作れれば終わり」と考えている人もいますが、そうではありません。
オリジナルサービスを作るにせよ、アプリを作るにせよ関連言語を学ぶ必要があるのです。
メインになる言語をマスターするのも大切ですが、自分が行きたい職種でどんな関連言語・フレームワークが使われているかをチェックし、効率的に学ぶ必要があります。
例えば、ゲーム開発の求人では、データベースのMySQLの知識が問われますし…。
サーバー系の求人では、LinuxやOracleの知識も必要になってきます。
「独学=全てを自力で学ぶ必要がある」と意気込む人もいますが、効率よく学びたいなら、プログラミングスクールのカウンセリングや転職エージェントのカウンセリングを上手に利用して、メイン言語で稼ぐために必要な知識を得ておくべきでしょう。
どの言語を選んでもWeb系言語は学習して損はない
言語選択に悩んだときは、Web系言語を学習しておくと損しません。
Web系言語は、大きく分けて3つのブロックにわかれています。
- マークアップ:HTML/CSSなど
- フロント:JavaScript/jQueryなど
- サーバー:Java/C/Python/Perlなど
これらの言語は、Web系の職種に就く限り切っても切れない縁があります。Web系エンジニアになりたい人は、履修しておくにこしたことはありません。
Web系言語を履修するときは、マークアップからフロント、サーバー言語にステップアップしていくと挫折が少ないです。
マークアップ言語は、自分がプログラミングした内容がすぐに結果として表示されます。成果が確認しやすいため、モチベーションが下がりにくく、ミスも見つけやすいのです。
プログラミングの独学の進め方(ロードマップ)
プログラミングを独学する場合の進め方をご紹介します。このロードマップ通りにする必要はありませんが、この進め方で学習を進めていくのが一般的です。
最終的にオリジナルのWebサービスやアプリを作るものとして作成したので、参考にしてください。
- 学びたい言語を選ぶ
- はじめての〜と書かれているできるだけ薄い・短い教材を購入
- 書籍に合わせて開発環境を整える
- 書籍に沿って一通りやってみる
- 巻末に出ている参考・もっと学習したい人のためにを購入し学習
- 作ったサービスやアプリを公開しフィードバックをもらう
学びたい言語を選ぶ
最初に学びたい言語を選びます。先ほどご紹介した手段を使って選ぶといいでしょう。
学びたい言語や作りたいサービス、勤めたい職種が決まらないと学習教材の買いようがありません。
本も動画教材もプログラミングスクールに通うことを考えれば高額ではありません(2,000円から5,000円程度)。
気になる言語があるならひとまずそれを学習する言語にしてもいいでしょう。
はじめての〜と書かれているできるだけ薄い書籍を購入
最初に購入する教材は、できるだけ薄い・短いものを選びましょう。
書籍なら厚さが1cmに満たないもの。動画教材なら5時間から8時間程度で1日で見切れるものがいいでしょう。
というのも、厚い・長い教材を購入しても最後までやり切れる人はなかなかいないからです。一度で覚えられるわけではなく、何度も繰り返す必要がありますが、厚い・長い教材を購入してしまうと1回やり終えただけで満足する可能性が高いのです。
「はじめての〜」「漫画でわかる」「超初心者」とタイトルにあるような教材で、試し読みや講義内容の目次を見たときに「わかりそう」と感じたものが、買うべき教材です。
ちなみに、「入門」と書かれている本でも分厚いものは避けましょう。出版社名を明らかにするのはひかえますが、「入門」と書かれていても全然入門書ではない書籍があるのは、エンジニア界隈では有名な話です。
プログラミングの入門書はAmazonや大きな書店で購入できますし、動画教材なら、Udemyを利用すると質の保証された教材を手に入れることができます。
教材に合わせて開発環境を整える
教材を購入したら、教材の指示にしたがって開発環境を整えます。インターネット環境がないと環境構築は難しい場合がほとんどです。ネット環境には注意したいですね。
多くの教材が、WindowsでもMacでも開発できるように解説されています。iOSアプリの開発はMacでしかできないので、Macを持っている必要がありますよ。
教材に沿って一通りやってみる
開発環境が整ったら教材に沿って一通りやってみましょう。このときのポイントはこれらです。
- その教材が最終的に目標としていることを把握しておく
- 目次やインデックスで今後の流れの全体像を把握しておく
- 100%の理解を目標にしない
- 例題はわからなくて当たり前と考える
- コードは丸写しでOK
プログラミングの学習は、外国語の習得に似ています。
英語を学習するときに、一度参考書をやっただけでは文章を書けるようにならないように、プログラミングの学習も一度教材をやっただけではコードを書けるようになりません。
同じ教材を何度も繰り返すつもりで、一度で完璧を目指さないようにしましょう。
巻末に出ている参考教材を購入し学習
最初に購入した教材が終わったら、参考教材を学習します。
参考になる教材は書籍の場合は巻末に、動画教材の場合は最終章に紹介されています。
動画教材の場合は、同じ講師が中級者向け教材を作成している場合も多いので、講師のプロフィールを見てもいいでしょう。
最初に買った教材を修了したとする目安はこのあたりです。
- 課題になっているコードを自力で書ける
- エラーが出たときに自分で解決できる
- 書籍に出てきた専門用語を理解している
最初の教材をやり切った段階で、基本知識はついたはずです。
作りたいサービスやアプリがある人は、どういう方向に進めば作れるのかを調べながら、関連教材を購入していきましょう。
作ったサービスやアプリを公開しフィードバックをもらう
サービスを作ったら、公開してフィードバックをもらいましょう。
自分で作ったサービスを公開するのは気が引けるという人もいますが、公開してフィードバックをもらうことがよりよいサービスにつながります。
ポートフォリオとして利用するなら、どのみち公開しなければいけません。
中には、辛辣な意見もあるかもしれませんが、耐えましょう。エンジニアとして活動するなら避けては通れない道です。
プログラミング独学の最大の敵はモチベーションの低下
プログラミングを独学する上で最大の敵は、モチベーションの低下です。「プログラミング自体が楽しくて仕方ない」という状態になればいいのですが、現役のエンジニアの中でも「プログラミングが好きでたまらない」という人は稀です。
特に学習の初期段階では、つまづくことも多く「簡単そうに見えるのにできない」というジレンマに襲われます。モチベーションが下がった結果、学習を放り投げるとこれまで費やしてきたお金と時間が無駄になってしまいもったいないです。
モチベーションを下げないための工夫を紹介しますので、参考にしてください。
- まずは全体像を見る
- わからないのが当たり前で手を動かす
- 少しやさしいと感じる教材から手をつける
- 5分でもいいので毎日やる
- 似た立場の知人を作る
まずは全体像を見る
プログラミング学習を続けていると「自分が今、何を目的にしてコードを書いているのか」わからなくなる瞬間があります。
「この教材は何ができるようになるために購入したのか」
「自分が取り組んでいるのは、全体のどの部分なのか」
「ここをクリアすることでどんな理解が得られるはずなのか」
そういったことを把握して学習しましょう。
全体像を把握してから学習することで学習の目的を見失わずにすみますし、「ただ教材のコードを写すだけの作業」から解放されます。
わからないのが当たり前で手を動かす
最初はわからないのが当たり前です。また、1度や2度の反復で全てできるようになるのは、一部の天才だけです。
エンジニア界隈には、「グダグダ言ってないでコードを書けよ、ハゲ(Shut the fuck up and write some code)」という言葉があります。手を動かすことでしかサービスは作れませんし、理解も深まりません。
わからないなら調べる、コードのエラーはデバッグする、素直に動くコードはないと思って取り組みましょう。
少しやさしいと感じる教材から手をつける
難しい教材から入ると、あまりにも思うように進まず、挫折につながります。
「ちょっと簡単かな?」と思える教材から入って、その教材の全てを説明できるくらいになりましょう。
特に、基礎本は大切です。「悪質なプログラミングスクールは基礎を疎かにし、受講生になんとなくでも形になるものを作らせ、エンジニア業界に放出する」という悪い噂があります。基礎をやっていない受講生の多くが現場で使い物にならないというのです。
独学での学習も同じで、基礎こそしっかり理解しましょう。やさしい教材から入ることで基礎の習得での挫折率を下げることができます。
5分でもいいので毎日やる
5分でもいいので毎日学習しましょう。
受験生時代に、「今日くらいはいいか」と勉強をさぼって、学習習慣が途切れてしまったことはありませんか?
疲れているときはパソコンを開くのも億劫になりますが、パソコンを使わなくてもプログラミングの学習はできます。
本を読むだけ、昨日学習した内容を振り返るだけ、そんな程度でもいいので毎日プログラミングのことを考えるのが、学習継続のコツです。
似た立場の知人を作る
仲間もいない状態の完全な独学で成功できる人もいますが、似た状況の仲間がいた方が学習がはかどる人もいます。
そういう人は、駆け出しエンジニア向けのコミュニティに入ったり、もくもく会に参加して仲間を増やしましょう。
プログラミングスクールを利用しなくても独学仲間は作れます。
ライバルやメンター、先輩の存在で学習がはかどるなら、利用しない手はありません。
今から実践できるごく簡単な3つのコーディング習慣
2. ツイッターにつぶやくようにコメントを書こう
3. 一度に考えることを減らしながら処理を書こう
これから詳しくこの3つの習慣を紹介していきますが、最初の二つはよく聞く話だと思います。
業界的に、いつもは「こうしなきゃダメ」「こうしなきゃクソ」みたいな過激な表現がされることが多いものですが、今回はぜひ「自分の実装と成長を助けてくれる」ものとして改めて受け取ってみてください。
インデントを揃えよう
一番基礎的な項目ですが、もしまだあなたがこれを実践していないなら、あなたの伸び代がぐっと増える習慣なので、全ての下地になると思ってすぐに実践しましょう。
というのも、少し大げさに言えば「インデントを揃える」というのは、おそらく今後の長いプログラミング人生における一番多くの時間を節約するための行動だからです。
誰にでもわかりやすいようにあえてプログラミング言語ではなくマークアップを取り上げますが、まずこれを見てください。
[ruby]
<section>
<div><a href=”https://www.hogehoge.com”>詳しくはコチラ
</a>をクリックしてください。
</div><div><p>こんにちは
</p></div>
</section>
[/ruby]
あまりに極端ですが、この量でも既にとても見辛いですね。
このコードを修正しようと思ったとき、まずどこまでが一つの括りなのかを確認するところから始めなければいけません。
でもこれが
[code lang=”html”]
<section>
<div>
<a href=”https://www.hogehoge.com”>詳しくはコチラ</a>をクリックしてください。
</div>
<div>
<p>こんにちは</p>
</div>
</section>
[/code]
となっていると、一つの括りがどこからどこまでなのかがすぐにわかるので、目的の場所をすぐに修正することができます。
「コードが綺麗にそろっている」というのは、後で見たときの「コードブロック(括り)を確認する」という無駄な行動を減らしてくれます。
例ではマークアップを利用しましたが、実はこの「インデントが揃っていない」という状態はマークアップに限らずプログラミングにおいても「あなたのコーディングの仕方が複雑である」というサインである可能性が高いのです。
あくまで筆者の主観になりますが、インデントが揃っていない初心者の多くは「一度に多くのことを考えながらコードを書いている」ことが多く、これはコードを書いていくフローが複雑になっていることが反映されているんだろうなと感じています。
ここについて、詳しくは3番目の習慣で触れようと思いますが、
まずは「インデントを揃える」ということを意識して書いていってみてください。
ちなみに色々なエディタでインデントの設定が若干違ったりもしますが、基本的にはtabキーを1回押した「半角スペース二つ分」が1インデントになります。
もしそうなっていないエディタの場合は、設定からtabキーを押した時のインデントのかけかたを設定できるので、半角スペース2つ分を設定してみてください。
インデントは作業時間を大きく短縮してくれるもの。
「揃えるのが面倒だな」と感じたら、それはコーディングの仕方が複雑になっているサイン。
ツイッターにつぶやくようにコメントを書こう
「コメントを書く」というのは案外難しく、慣れるまではコストも高く、「何をやっているのかではなく、なぜやっているかを書こう」と言われても中々実行できない方が多いかと思います。
そこで最初のうちは「ツイッターにつぶやくようにコメントを書く」ということをやってみてください。
例えばrailsなら、
[code lang=”ruby”]
# せっかくpublished_atで公開状態を管理してるから後々予約投稿の機能とかつけたいなー
Page.find(params[:page_id]).update(published_at: Time.current)
# 車,雑談とかの指定された複数のTagを全部持ってるページを取得する実装したいけど難しすぎ..どれかなら簡単なのに…みんなどうやってんの?とりま諦めてどれかを含む検索にした。
pages = Page.eager_load(:page_tags).where(page_tags: {tag_id: params[:tag_ids]})
[/code]
のような感じです。職場では中々使いづらいと思うので、自分のプロジェクト等の許される環境で試してみてください。
難しく考えず、いつも通り呟くような感じで書いていきましょう。
というのも実はコードの書き手の心情はとても有用なんです。
なぜなら、他の人や未来の自分がそのコードを読んだ時「わからなくてそう書いている」のか「仕様通りでそう書いている」のかが一目でわかるからです。
もしコメントに悩んだ様子が書かれている時は、「あぁ、単純に習熟度の問題でこう書いてるんだな」と把握して手直しすることが容易になりますし、
「面倒だけど〇〇の関係でこうするしかないっぽい」などと書かれていた場合は、そのファイルや前後には現れていない、何かとの依存関係によってそう書かれているんだなとわかり、安易な修正を行ってエラーを引き起さずにすみます。
コメントつけることに慣れてきたら本来のように
[code lang=”ruby”]
# TODO : Time.currentを変数にして予約投稿機能つける
Page.find(params[:page_id]).update(published_at: Time.current)
# FIXME : 本当は指定された複数のTagを全部持ってるページを取得したい
pages = Page.eager_load(:page_tags).where(page_tags: {tag_id: params[:tag_ids]})
[/code]
みたいに型にはめていくといいと思います。
このようなステップを踏むのは「適切なコメントがつけられる」というのは一つの能力であって、これもプログラミングと同じように或る日突然できるようになるものではないからです。
実は適切なコメントをつけるためには、適切な単位で関数を実装したり、自分の思考が整理されたりしている必要があるので、「コメントを書く」という行動そのものがあなたのプログラミング能力を押し上げてくれます。
なのでまずはいつも自分がやっているような、ハードルの低い方法で「コメントを書く」という習慣を身につけるところから始めてみてください。
慣れるまでは難しく正しく書こうとせず、Twitterに呟くようにコメントを書いていく。
コメントを書くことそのものがプログラミング能力を向上させてくれる。
一度に考えることを減らしながら処理を書こう
例えば、「有料会員で姓がある場合は姓と名のデータを結合して返し、有料会員で姓がない場合は名だけを返し、無料会員の場合は[無料のユーザー]という文字列を返す」という実装をすることになったとして、あなたはどんな風に処理を書いていくでしょうか?
初心者の方が実装でつまづいている時に、僕がいつも提案しているのは「一度に考えることを減らしていきましょう」ということです。
今回もRailsを使ってどういうことかを説明していきます。
自分がよく書いている言語でイメージしてみてください。
状態1
[code lang=”ruby”]
def display_name(user:) # 後で閉じend書かなきゃ
# 有料会員かどうか判別しなきゃ
[/code]
状態2
[code lang=”ruby”]
def display_name(user:) # 後で閉じend書かなきゃ
if user.is_subscribed # 後で閉じend書かなきゃ
# 姓があるかどうか判別しなきゃ
[/code]
状態3
[code lang=”ruby”]
def display_name(user:) # 後で閉じend書かなきゃ
if user.is_subscribed # 後で閉じend書かなきゃ
if user.last_name.present? # 後で閉じend書かなきゃ
# 文字列を結合して…
[/code]
のように書いていくと、どんどん頭の中に「やらないといけないこと」が溜まっていきます。
そして考えないといけないことが沢山になって混乱したり、うっかりその一つを忘れてしまっていたり、考慮漏れをしたりと、辛いコーディングになる上に、混乱した頭で書いているので読みにくいコードになってしまいます。
そして1つめの習慣でも触れたように、インデントが揃っていないコードはこの状態で書いています。
1つ1つ小さい作業を終わらせていくとインデントを揃えることは簡単なのですが、
一度に何個も作業を同時並行で行なっていると、自分でも括りがよくわからなくなったり、面倒に感じてしまい「インデントを揃える」ことができなくなってきます。
これを一度に考える量を減らすように書いていくことで、余計な混乱を防ぐことができ、
実装の速度を上げながらシンプルで読みやすいコードが書けるようになります。
ルールは簡単で、
1. やりたいことを日本語で書く
2. タスクを一つずつ終わらせる(簡単な処理を書く/ifは先に閉じる/かっこは先に閉じる)
3. 複雑になりそうな処理の実装は後回しにして、全体の処理の流れだけを先に完成させる
の3つだけです。
実際に見てみましょう。
状態1
[code lang=”ruby”]
# 表示名を返す関数を作る
def display_name(user:)
“返す文字列”
end
[/code]
状態2
[code lang=”ruby”]
def display_name(user:)
# 無料なら「無料のユーザー」を返す
# 有料で姓がない場合は名だけを返す
# 有料で姓がある場合は姓と名を返す
“返す文字列”
end
[/code]
状態3
[code lang=”ruby”]
def display_name(user:)
# 無料なら「無料のユーザー」を返す
return “無料のユーザー” unless user.is_subscribed
# 有料で姓がない場合は名だけを返す
# 有料で姓がある場合は姓と名を返す
“返す文字列”
end
[/code]
状態4
[code lang=”ruby”]
def display_name(user:)
return “無料のユーザー” unless user.is_subscribed
# 無料のユーザーがここから下のコードに到達することはないので、
# 「有料なら」のようなイディオムが省ける。
# 有料で姓がない場合は名だけを返す
return user.first_name unless user.last_name.present?
# 有料で姓がある場合は姓と名を返す
“返す文字列”
end
[/code]
状態5
[code lang=”ruby”]
def display_name(user:)
return “無料のユーザー” unless user.is_subscribed
return user.first_name unless user.last_name.present?
# 姓がないユーザーがここから下のコードに到達することはないので、
# 「姓がなかったら」のようなイディオムが省ける。
# 有料で姓がある場合は姓と名を返す
user.last_name + ” ” + user.first_name
end
[/code]
という風に書くことになります。
この書き方以外にももちろん色々な書き方はありますが、下に進むにつれて「無料なら」や「姓がなければ」のような条件のことを考えなくて良くなっていくので、どんどん考えることが少なくなっていくのがわかると思います。
これはhtmlや他のプログラミング言語を書く時でもアプローチの仕方は同じです。
そして、例えば先ほどの要件の最後に「有料で姓がある場合はuserがこの1週間にお気に入りした商品の数をつけて返す」のような処理が加わった場合は、
[code lang=”ruby”]
def display_name(user:)
return “無料のユーザー” unless user.is_subscribed
# 有料で姓がない場合は名だけを返す
return user.first_name unless user.last_name.present?
# 有料で姓がある場合は姓と名を返す
name = “#{user.last_name} #{user.first_name}”
# お気に入りした商品の数をつけて返す
favorite_count = 3
“#{name} : お気に入り商品は#{favorite_count}品です。”
end
[/code]
のように、「お気に入りした商品の数をもらってくるものとして」固定の数字を書いておき、先に全体の処理だけを完成させてしまいましょう。
最後にfavorite_countのところをどうやってもらってくるか考えて実装して、3の数字と入れ替えれば実装は終わりです。
そうすれば、「この後どうしないといけないんだっけ?」と思い出す時間を省けますし、うっかり実装漏れをしてしまうことも少なくなりますね。
このように書いていくことによって、頭の中にある「今考えること」が常に少数に保たれるので、とても楽にコードが書けるようになっていきます。
そしてこの「一つの関数内で作業を細かく細分化する」という行動は、混乱が減って無駄なミスが減るだけでなく、
あなたが成長した先で重要になる「関数を適切に分割する」というプログラミング能力に直結してきます。
この例でいくと、複雑になりそうだからと後回しにしたfavorite_countを取ってくる処理が複雑になっていくような場合は、そのロジックをこの関数内で書かずに別の関数に切り出すことになるかもしれませんね。
今そこまで関数の粒度や再利用性を気にしながら書いていかなくても大丈夫ですが、もしいつかあなたがそのフェーズに差し掛かったときに、きっと今回の習慣がさらにあなたの成長速度を加速させてくれるはずです。
1. やりたいことを日本語で書く
2. タスクを一つずつ終わらせる(簡単な処理を書く/ifは先に閉じる/かっこは先に閉じる)
3. 複雑になりそうな処理の実装は後回しにして、全体の処理の流れだけを先に完成させる
のルールを基準にしながら、「一度に考えることを減らす」ようにコードを書いていく。
まとめ:プログラミングは独学で習得可能!やり方は間違わないで
プログラミングは独学で習得が可能です。ただし、挫折しやすいのも事実なので、自分のモチベーションを下げない工夫をしながら学習を継続する必要があります。
社会人からの学習は背伸びをしがちです。「これくらいならできるだろう」と難しい教材に手を出すのではなく、「少し優しすぎるかな」程度のものから徐々にレベルアップしていきましょう。
やり方さえ間違わなければ、3ヶ月から半年程度で初心者を脱出することができますよ。
もし、「独学は無理そう」と思ったなら、プログラミングスクールを利用するのもありです。スクール選びの参考になる記事がありますので、そちらも参考にしてくださいね。