こんにちは。現役Webエンジニアの三年坊主です。
今回は、プログラミングが気になっていて、勉強してみようか迷っている初心者の、このような疑問に答えます。
この記事では、現役エンジニアが実感するプログラミングのメリットと、それを最大限生かしてプログラミングを効率よく勉強するコツを紹介します。
私は、大学の研究・自分の趣味・会社の業務で合計5年以上のプログラミング経験を積んできました。
大学に入学してからは複数のプログラミング言語を学んできたので、内容の信頼性と、勉強方法の再現性にもつながると思います。
単なる羅列ではなく、体験から本当に実感したプログラミングのメリットと勉強法のコツを知りたい方は、非エンジニアの方こそ、ぜひ記事を読み進めてみてください。(3分ほどで終わります)
仕事中に効率よく技術力を向上させたいエンジニアの方は、こちらの記事もご覧ください。
この記事の内容
- プログラミングを学んで実感したメリットを3つ厳選
- プログラミングのメリットを生かして効率よく勉強するコツ
プログラミングを学んで実感したメリットを3つ厳選
プログラミングを学んで実感したメリットを3つ、厳選してお伝えします。
退屈なことを代わりにやってくれる「秘書」を作れる
プログラミングを学んで使えるようになると、退屈なことを自分でやらずに済ませることができます。
一度完成したプログラムは、何度も繰り返し行う作業や細かい確認作業がとても得意だからです。
例えば、航空会社のWebサイトにアクセスすると、メンテナンス中だったのでフライト検索ができませんでした。
なるべく早く検索をしたくて、メンテナンス終了予定時刻を知りたいのですが、あいにく記載がありません。
私は「定期的にサイトをチェックしてメンテナンスが終了したか確認する」プログラムをPythonというプログラミング言語で作りました。
このプログラムがなければ、私はいつ終わるか分からないメンテナンスに気を揉み、他のことが手につかない無駄な半日を過ごしたことでしょう。
パソコンの前にずっと待機して、何度も何度もサイトを確認するのは嫌ですよね。
航空会社のWebサイトで空席検索をしたかったのですが、あいにくメンテナンス中。
終了時刻の記載がなく、サイトを何度も確認するのも面倒なので「メンテナンスが終了したら教えてくれる」 #Python プログラムを作成。#プログラミング で、退屈なことを任せられる「私の秘書」を作れました。
— 三年坊主🐤投資エンジニア👩💻 (@SannenBouzu) October 22, 2018
似たような例として、
- 「キャンペーンが始まったらすぐに商品を購入する」
- 「仮想通貨の値動きを確認して通知する」
など、退屈なことを任せられる「秘書」にはいろいろな可能性があります。
このようなプログラムを作ることで、繰り返し行う作業や細かい確認作業といった退屈なことからから自分を解放できます。
場所を選ばず気軽に作業できる
プログラミングは、場所を選ばずに気軽に作業できます。
プログラムを書いて実行する環境が、パソコンさえあれば簡単に整うからです。
最近では、その気になれば、GoogleのColaboratoryのようなインターネット上にある開発環境をスマホから操作することも可能です。
先日、温泉旅行に行ってきました。
旅館では、朝1時間ほど趣味のプログラミングを楽しんでから温泉でリラックスという、心身ともに充実した時間を過ごせました。
これが例えばピアノのような楽器だったり、色々な装置を準備する必要がある陶芸だったりしたら、おそらく旅行中はおあずけになるでしょう。
旅行中にも、場所を選ばないプログラミングの気軽さを実感しました。
自分のアイデアを形にできる
プログラミングができると、それを使って自分のアイデアを形にできます。
プログラミングといっても幅はとても広く、自分が作りたいものを実現する手段をきちんと見つけることができれば、たいていのものは作れます。
私の場合は、目標を管理するWebサービスを作ったり、LINEに仮想通貨の価格を通知するプログラムを作ったりして、自分のアイデアを形にできる喜びを味わってきました。
最近ではパソコンの中だけにとどまらず、Google HomeのようなスマートスピーカーやArduinoのような装置とつなげることもできるようになっています。
自分のアイデアを自分の手で形にできると、単純に楽しいですし、だんだんと自信もついてきます。
プログラミングのメリットを生かして効率よく勉強するコツ
プログラミング言語の学習法に関するツイートを見つけました。
・動くものを作る
・たくさんコードを読む
・そのプログラミング言語らしい書き方を身につけるたしかに、プログラミングといっても幅が広いから、やりたいことを実現するモチベーションと具体例にたくさん触れることを通して、少しずつ身につけている気がします。
逆に言えば知らないことも多い。 https://t.co/vRkSbOpnuI
— 三年坊主🐤投資エンジニア👩💻 (@SannenBouzu) October 22, 2018
中級者向けの内容も含まれているなと思ったので、プログラミング初心者にも当てはまる「効率のいい勉強法」を紹介します。
作りたいものを見つける
まずは、自分が作りたいものを見つけましょう。
あなたにとって、プログラミングはあくまで手段であって目的ではないですよね?
プログラミングを手段として自分のために何か作れた方が楽しいし、結果的に勉強の効率も上がると思います。
上で紹介した「航空会社のサイトを確認するプログラム」を例にすると、
- メンテナンスが終了したかどうか、何度もWebサイトを確認するのは面倒くさいので、自動で確認して終わったら教えてくれるプログラムを作ってみたい
- 作っている間にメンテナンスが終わってしまっては元も子もないので、なるべく素早く作りたい
このように考えて、作りたいものを見つけていました。
「作りたいもの」と言われても・・・ピンとこない時は、「楽したい」「面倒くさい」という気持ちを大切にしてみてください。
どんな技術が必要か分解して考える
作りたいものが決まったら、それを実現するにはどんな技術が必要か分解して考えてみます。
自分の作りたいものが一見難しそうに思えても、実際には一つ一つの要素を組み合わせていけば、最終的には作れることが多いからです。
もう一度、「航空会社のサイトを確認するプログラム」を例にしてみます。
このサイトでは、会員登録・ログインページにアクセスすると「メンテナンス中」であることを示すポップアップウィンドウが出ていたので、今回はこれを使って手軽にメンテナンス終了を判定しようと思いました。
実現したいこと | 必要な技術 |
---|---|
Webサイトから情報を取得したい | 「Webスクレイピング」といって、Webサイトから情報を取得する方法があるらしい。 →例:Pythonのrequestsモジュール、BeautifulSoupモジュール |
実際に自分がブラウザからサイトにアクセスしたことをプログラム上で再現したい | requestsモジュールでは、サイト上でポップアップウィンドウが出現する挙動は再現できないらしい。でも、自分がブラウザからサイトにアクセスしたのと同じような状況を、プログラミングで再現できる方法があるらしい。 →例:PythonのSeleniumモジュール |
定期的に処理を実行したい | プログラムを定期的に(5分ごと、1時間ごとなど)実行できる方法があるらしい。 →例:PythonのAPSchedulerモジュール |
先に全体像をお見せすると、必要な技術を組み合わせて、例えばこのようなコードを数十行書くだけで、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import datetime #import requests from selenium.webdriver import Chrome, ChromeOptions from selenium.webdriver.common.keys import Keys from bs4 import BeautifulSoup from time import sleep from apscheduler.schedulers.background import BackgroundScheduler # 航空会社の会員登録・ログインページのURLを設定 URL = '' def ping(options): browser = Chrome(options=options) browser.get(URL) sleep(5) html = browser.page_source soup = BeautifulSoup(html, 'html.parser') modals = soup.find_all(class_="modal") is_maintenance = False for i,x in enumerate(modals): x_class = x['class'] x_text = x.find(class_="modal-body").div.text is_modal_active = ('modal' in x_class) and ('in' in x_class) is_modal_maintenance = 'temporarily unavailable due to scheduled maintenance' in x_text.lower() if is_modal_active and is_modal_maintenance: is_maintenance = True now = datetime.datetime.now() if not is_maintenance: print(now, 'It seems the maintenance may be over!') else: print(now, 'Still under maintenance...') browser.close() if __name__ == '__main__': # run ping function every 1 minute scheduler = BackgroundScheduler() # headless browser options = ChromeOptions() options.add_argument('--headless') job = scheduler.add_job(ping, 'cron', [options], minute="*/5") scheduler.start() try: # This is here to simulate application activity (which keeps the main thread alive). while True: sleep(2) except (KeyboardInterrupt, SystemExit): # Not strictly necessary if daemonic mode is enabled but should be done if possible print('Shutting down the scheduler and the batch ...') scheduler.shutdown() |
5分ごとにサイトのメンテナンスが終了したかどうか確認してくれる秘書ができあがります。
もう少しだけ時間をかけて、メールやLINEに通知するように設定することもできます。その時は、さっきの表に「LINEで通知を受け取りたい」という行を追加して、必要な技術を調べるだけですね。
今回はPythonを使いましたが、作りたいものを実現するためにどんな技術が必要か一つずつ分解して考えていきましょう。
「分解して考える」と言われても・・・ピンとこない時は、エンジニア経験者の人に話を聞いたり、Skill HacksやTechAcademyの無料体験など、オンラインでプロにガンガン相談できる場所をうまく活用していくのがおすすめです。
基礎学習に時間をかけすぎずに、動くものを作る
必要そうな技術がわかれば、その技術の基礎を学習します。ただしあまり時間をかけすぎずに、動くものを作り始めましょう。
基礎学習に時間をかけすぎると「作りたいものを作る」モチベーションが下がりますし、作りたいものを作る必要に迫られて覚える知識の方が身につきやすいからです。
私が先日作ったブロガーを応援するWordPressプラグインを例にとってみます。
WordPressプラグインを作るには、PHPというプログラミングの知識が必要です。
私はPHP未経験者でしたが、そこまで基礎学習に時間をかけませんでした。他にPHPを使う予定がなく、いまのところPHP自体にあまり興味を持てていないからです。
PHP経験者から見れば至らない点もあるんだと思いますが、とりあえずは動いているからいいかなという感想です。(コメント・指摘は大歓迎です!)
小さくてもいいから動くものを作って、成功体験を積み重ねていきましょう。
作ったものを公開するのもオススメです。不完全でも公開してみると、意外なフィードバックをもらえたりして刺激になります。
https://twitter.com/ryke24/status/1046901332819365888
まとめ
記事のポイントをあらためて紹介します。
- プログラミングを学んで、退屈なことを代わりにやってくれる「秘書」を作れる
- 「場所を選ばず気軽に作業できる」「自分のアイデアを形にできる」のもプログラミングのメリットとして実感
- プログラミングを効率よく勉強するには、「楽したい」「面倒くさい」気持ちを大切にして「作りたいものを見つける」のがオススメ
- 作りたいものを見つけたら、「どんな技術が必要か分解して考える」→「基礎学習に時間をかけすぎずに、動くものを作る」
記事で紹介したように、必ずしもエンジニアという職業を選ばなくても、プログラミングで生活を少しだけ彩ることができます。
プログラミングを身につけて、少しだけ楽しい生活を送ってみませんか?