プログラミングの勉強を続けるコツ!モチベーション維持できるオススメ題材6選

プログラミングの勉強を始めたきっかけは人それぞれだと思いますが,目標がないとなかなか勉強を続けられないものです.

ということで,プログラミングの勉強を続けるための題材を紹介したいと思います.

競技プログラミング(競プロ)

f:id:weekend_warrior:20190824164753j:plain

与えられた問題に対して,答えとなるコードを提出します.提出したコードにテストケースが入力され,すべてのケースで正しい出力を出すことができれば,その問題をパスできます(メモリや実行時間に制限が設けられることが多いです).

メリット

アルゴリズムに強くなる

競技プログラミングでは,与えられたお題を解くアルゴリズムを考えてそれを正しく実装するスキルが求められます.さすがにソートを自力実装することはないでしょうが,鍛えたスキルは通常のソフトウェア開発でも役に立ちます.

自分の実力が目に見える

「競技」ですから勝敗つまりランキングが存在します.他人と競争すると燃えるぜっていう人にはうってつけです,

就職や転職で有利になるかも

入社希望者のスキルを測る手段にも利用されています.「競技」ではないですが,掲載された問題にコードを提出すると,それをスキル証明として利用できる転職サイトもあります.

デメリット

何かモノが完成するわけではない

当たり前ですねw   純粋にプログラミングが好きって気持ちが少しでもないときついかも.

ソフトウェア設計,開発スキルは身につけにくい

与えられた条件を満たすコードを書きさえすればいいので,保守性や可読性がボロボロであってもいいし,別にすべての処理をmain関数の中で一括して書いてもいいわけです.むしろ,実行速度やメモリ量が命の場合は,そんなこと気にしてたら勝てない場合も.ライブラリも使えないし,入力もすべて標準入力で通常企業で開発されるソフトウェアとは環境が大きく異なります.設計や開発スキルは別の方法で身につけましょう.

こんな人にオススメ

電子工作・ロボット

f:id:weekend_warrior:20190824163558j:plain 最近はIoTや安価なマイコンRaspberryPiが普及したことで興味を持っている人も増えているのではないでしょうか?

メリット

動くモノが作れる

ソフトウェアの世界に閉じず,LEDを点灯させたり(俗にいうLチカ),モータを動かしたり,スピーカから音楽流したり,カメラで写真撮影したり,Amazonエコーのようなスマートスピーカと連動したり...

どんなデバイスを作って,どんな制御をしてみたいですか?

電子工作の知識を身につけられる

プログラミングの世界に閉じていては得られない知識です.

デメリット

プログラミング以外に電子工作の知識や作業が必要

上に書いたメリットの裏返しになってしまいますが,プログラミングとは直接関係のない電子工作の知識や作業がかかせません.わからないことは勉強しながら進める覚悟がいります.

ただし,「デバイスや家電を制御してみたい」という場合,必ずしも電子工作等に詳しくなくても大丈夫です. 最近はIoTに対応したデバイスも多く出回っており,APIが公開されていれば自由度は低くなってしまいますが,デバイスを制御するプログラムを作ることは可能です.

部品調達にお金がかかる

電子工作には工作部品が必要です. LEDや抵抗,ジャンパーピンなどの部品は数十~数百円とかで買えますが,電子工作書籍の通りに作ろうとして部品を全部揃えると万単位の出費になることも... また,実験や試作品開発レベルではブレッドボードに部品をプスプスさせばいいですが,しっかり作品として仕上げるにはハンダづけも避けては通れません,というかやりたくなります! テスターなんかもそのうち欲しくなるはず.

RaspberryPi Zeroも本体だけみると安く感じますが,SDカードやディスプレイに接続するためのケーブルなどをいろいろ揃えているとそれなりのお値段になります.

こんな人にオススメ

  • 電子工作の経験や興味がある
  • 多少の出費は惜しまない
  • 解決したい問題や作りたいモノ,やりたいことがある

自分のためのWebサービス,アプリ,システム開発

f:id:weekend_warrior:20190824213620j:plain

自分の手でサービスやアプリを作るってワクワクしませんか...?

メリット

フレームワークやライブラリ,データベースをマスターする練習になる

企業でのソフトウェア開発がプログラミング言語の標準APIだけで完結することはないと言っていいでしょう.フレームワークなりOSSのライブラリを活用していますし,データを保存するデータベースがないと成り立たないシステムがほとんどです.これらを使って開発する練習になります.

作った作品は就職や転職時にポートフォリオとしてアピールできます.特定のフレームワークの使用経験が求められている場合にはよいアピール材料になるはず...

他の人にも使ってもらえる

便利なサービスや面白いアプリができたら家族や友達など他の人にも使ってもらいたいですよね. HerokuやPythonAnywhereなど,サーバを持っていなくても作ったWebアプリを無料で公開できるサービスもあります.

デメリット

フレームワークがありすぎて迷う

特にまだ学習したいフレームワークが決まっていない場合には,どれを使えばいいか迷ってしまうかもしれません, 例えばJavaシステム開発するためのフレームワークだと... - Spring - Struts - JavaServer Faces(JSF) - PlayFramework - Apache Wicket などなど,非常に多く存在します.

学習コストが少ない(=少しの勉強で使えるようになる)フレームワークや今後も使われる可能性が高いフレームワークを選んで学習しましょう. どのフレームワークが人気があるのかわからない場合には,あくまでも目安としてですが,Googleトレンドで検索具合を調べてみるのも一案です.

自分が「使いたい!欲しい!」と思えないと続かない

他の人からの「作って」でもいいですが,とにかく使ってくれる人がいないとモチベーションが下がります. それにだいたいのものは,この世の中ネットで探せば見つかります(しかも無料でクオリティもGOOD). 「どうしても自分でこれを作るんだ!」という熱い想いを持ってやりましょう,

こんな人にオススメ

  • Web技術やアプリ開発に興味がある
  • 業務の都合で習得したいライブラリやフレームワーク,データベースなどがある
  • 実用性のある作品やサービスを作りたい
  • インターネット経由で作品を公開したい,アプリやソフトとして配布したい

データ分析・機械学習

f:id:weekend_warrior:20190824213644j:plain 何かと話題のデータ分析・機械学習.プログラミングと一緒にこれらのスキルも習得しておくのはどうでしょう?

メリット

情報が多く始めやすい

近年の機械学習ブームのため,書籍やインターネットでの情報がたくさんあります.また,Googleアカウントを持っていればGoogle Drive上でGPU環境が利用できるGoogle Colabratoryを使うこともできるようになりました.非常に取り組みやすいご時世になっています.

デメリット

言語が限られる

2019年現在,データ分析や機械学習といえばPythonです(次点でR). 残念ながらそれ以外の言語を勉強したい人にとってはあまりよい題材ではありません.

データ分析に必要なスキルに特化しがち

データ分析をやる上で必ずしも必要とはいえないスキルはどうしても身につけにくいです,例えば,Pythonオブジェクト指向でプログラムを書くことができますが,「理解していないとデータ分析できない」なんてことはありません,その他,マルチスレッドやデザインパターンなどの知識もデータ分析だけでは身につけにくいと言えます.

こんな人にオススメ

  • データ分析,データサイエンス,機械学習,AIに興味がある
  • PythonやRを習得したい
  • グラフをプログラミングで作成したい
  • ちょっとした表計算をプログラミングでやりたい

イベントやコミュニティに参加する

f:id:weekend_warrior:20190824163938j:plain 一人ではモチベーションが続かない...なんて人には 例えば

  • ハッカソン(「アイディアはあるけど開発者だけ募集」なんてイベントもあります)
  • 勉強会の講師/メンターを務める

などはどうでしょう?

メリット

なじみのないツールや開発手法を勉強できる(かも)

普段は会うことがない人たちと開発するわけですから,新しいツールや開発手法に触れるチャンスがあります.

同じ言語や分野に興味がある仲間が見つかる(かも)

イベントやコミュニティにはなにかしらテーマや目的があることがほとんどです. 興味のあるものに参加することで自分の興味と共通項のある人と出会えるきっかけになるはずです,

デメリット

機会が限られる

都市部では比較的コミュニティを探しやすいですが,地方だと難しいかもしれません.

こんな人にオススメ

  • 共同開発してスケールの大きなソフトウェアを作ってみたい
  • GitやGitHubなど共同開発のためのツールを実践で学びたい
  • とーもだちひゃっくにん,でっきるかな?

資格取得を目指す

f:id:weekend_warrior:20190824164554j:plain

メリット

ゴールが明確

自分で作品やアプリを作る場合と違い,「合格」というはっきりとした目標を設定できるのはメリットでしょう,

知識を体系的に整理できる

日常的にその言語を使っているとはいえ,どうしても業務での開発内容に引っ張られて使わないAPIがあったり,そもそも自分が理解してなくて使えていない書き方とかがあるはずなんです,「試験範囲だから」という理由で自分が知らないことを身につけられるのは,資格取得に向けた勉強だからこそ得られるメリットです.

デメリット

漠然と勉強してもお金と時間がムダに

受験料がかなり高額だったり,普段バリバリ買いている人でも対策しないと合格できない試験もあります.目的があいまいなまま漫然と勉強するのはお金と時間をどぶに捨てるようなものですのでやめましょう.

手前味噌ですが,Java Sliverについての受験体験はこちら:

weekendwarrior.hatenablog.com

やっぱり資格だけじゃダメ

プログラムが書けてなんぼです.特に知名度が低い資格や試験の場合は,履歴書でアピってもスキルの証明になりません. 資格持ってるだけじゃだめ,ゼッタイ.

こんな人にオススメ

  • 自分の知識範囲を広げたい
  • 自分で作りたいモノがないけど勉強しないといけない
  • お金を払って自分にプレッシャーをかけたい

まとめ

長くなってしまいましたが,それぞれの題材でプログラミングを勉強する際のメリット,デメリットをまとめました. 自分の勉強目的や興味にあった題材を見つけて楽しくスキルを磨いてください! それぞれの特徴を考えていくつかの題材を組み合わせるのもオススメ.