見出し画像

【プログラミングを独学したい方へ】文系サラリーマンが完全独学でプログラミング言語pythonを学習し、webアプリを作れるようになるまで

ご覧いただきありがとうございます。文系サラリーマンで、プログラミングなど学校でもスクールでも学んだことのない私が、独学でプログラミングを学んで、ものづくりした記録を残していきます。

これからプログラミングを学んでいくかたが、少しでも気楽に、とっかかりやすくなればと願っています。

3ヶ月くらい夜な夜な作ったDjangoのWEBサービスが、もうすぐテストリリース出来そうなので、作ったものも追々こちらに掲載したいと思います。

学習の経緯

2017年の年末から、エンジニアさんの話を聞く機会が増え、魔法使いみたいでかっこいい! と憧れたのがきっかけです。

仕事のかたわら、主にpythonを学習し、業務で使える程度までになったので、学習の記録とできるようになったことを書きたいと思います。
仕事もそれなりに忙しく、子育てもしているので、長期間に思えるかもしれませんが、さほどまとまった時間は取れていなかったので、実際には趣味で学んでいた程度だと思っていただいた方があっているかと思います。
今後学習される方の参考になれば。

できるようになったこと

1, WEBページをスクレイピングして、twitter botやGmailを利用して自動配信
2, Djangoを利用してWEBサービスを作成
3, 機械学習を活用したデータ分析

定期的に確認するランキング情報などのWEBページや、その情報を自動的に貯めていって分析するような業務を行なっているならば、pythonは簡単に自動化を実現してくれるので、おすすめです。
後述しますが、学習コストも低く、データ分析やWEB開発など様々な用途に使えるので、業務で使える幅が広く、社会人が最初に学ぶ言語としては最適なのではないかと思います。

学習の為の準備(PC環境の用意)

学習のためにPCが必要です。
アプリでもある程度は出来ますが、あくまでサブ用途程度だと思っておいた方が良いでしょう。実際にコードを書こうとすると、キーボード無しは不可能に近いです。

まず「学習だけ」ならば、ブラウザ環境があれば十分だと思います。手元にすでにPCをお持ちの方は、新たに購入する必要はありません。
プログラミングを独学したい! という方は、私と同じ様に学習コスト(お金)を出来るだけ下げたい、という方が多いでしょうし、プログラミング自体の向き不向き(楽しいと思えるか)の要素も大きいと思うので、しばらく学習してみてからどの程度PCに投資するか検討してみるのが良いのではないでしょうか。

では、どのようなPCが良いか【PC未所持の方】
中規模程度のWEBサービスを開発するようなことをするのであれば、WinやMacのような開発環境を構築できるPCが良いが、前述の通り、学習環境の獲得であればchromebookが安価かつ快適なのでオススメです。

実際に私が購入したchromebookがこちらののASUS Flip C101PA

画像3

薄くて、軽くて、充電のもちも良く、立ち上がりが早い為、ストレスなく学習を続けることができます。
プログラミングを学習する際には、多くの情報をググる場面が出てくるが、多数のタブを開いていても快適に動作する上、Google ドキュメントやスプレッドシートで、学習メモや取得したデータの保存も出来るので、ブラウザだけでも十分に学習をすることができました。

【余談】chromebookとは
日本では(なぜか)あまり普及しておらず、家電量販などでの取り扱いも少ないが、性能と価格のバランスが非常に優れており、海外では学習用のPCとしても使われているそうです。chromeOSという、専用のOSが搭載されており、chromeブラウザでの利用に最適化されています。

PC本体での保存容量も少ないですが、Googleドライブなどのクラウドストレージを使うことを前提にしているので、さほど不便を感じることはなかったです。
例えば、マイクロソフトのアプリケーションの代替も、
Word:Google ドキュメント
Excel:Googleスプレッドシート
PowerPoint:Googleスライド
と、ブラウザ上で十分な機能が存在しているし、使い勝手もほとんど変わりません。
また、後述しますが、colaboratoryというGoogleの提供する開発環境を利用するのも、chromebookがあれば十分。4万円以内でpythonの学習環境が簡単に手に入るので、chromebook×プログラミング学習 は最高にコスパのいい学習投資です。


学習のSTEP

やりたいことに応じて、pythonの勉強方針は変わりますが、なんにせよ最初はProgateです。そもそもの文法や、構文を学ぶために非常によく出来たサービスで、Progateがなかったら独学でプログラミングを習得するなど夢で終わっていたかもしれないレベルです。

【学習のSTEP1】Progate (30h~)

画像1

まずはProgateをしましょう。1周で良いです。
pythonをいきなりやっても良いですが、個人的にはHTML&CSSの初級編くらいはやっておくと、WEBページがどの様に成り立っていて、その中でプログラミングは何が出来るのか、がイメージしやすくてよかったと思います。

そもそも初学の方は、どの言語を学ぶべきか、つまり自分がやりたい領域に適した言語なのか、もしくは、仕事を獲得、就職しやすい言語はなんなのか、を知りたいですよね。大丈夫、Progateは目的別のコースも用意されているので、とりあえずこれかな、と思うものをやってみるのが良いです。(だいたいHTMLの初級に行き着くと思いますが)

プログラミングの学習が辛い、というのは、こういった「なんのためのプログラムなのかわからない」に起因すのではないかと思っています。
何を実行しているのかわからないが、書いてある通りに写経したらとりあえず動く、という学習を続けていると、ただ黙々とキーボードを打ち続けるだけになって、学習自体が辛くなってきますよね。

身近なHTML、WEBページの構造を少し知るだけで、いわゆるプログラミングでどんなことが出来るのか、がイメージしやすくなるので、学習している”意味”がイメージできて続けやすくなると思います。

ちなみに私は、HTML&CSS、jQuery、PHP、Rubyをかじって、最終的にpythonに行き着く、と結構回り道しました。
ここでは、HTML&CSS、pythonを1周した、くらいをすれば次に進んで良いと思います。

【学習のSTEP2】PyQ (50h~)

画像2

PyQは非常にボリュームが豊富ながら、pythonで出来ることが数多く網羅されていて、しかもブラウザ上で実践しながら学習できるので、Progateが終わったらPyQに移行すると、さらに発展した内容を学習できます。
私もいまだに課金しています。開発や制作がひと段落するたびに、少しづつコースを進めています。

自分が何を学習したいか、からコース設定されているので、何を学んだらいいか分からない、という辛い状態からも脱出出来ます。

私は文法→WEBアプリ→機械学習 を一通りこなした後、周辺コースの学習へ移行しました。
PyQがあれば、WEBサービスや機械学習のコードも、実際の題材やデータを使って実験できるようになるので、「作れる様になった」「できた」はここで実感しておくとモチベーションを維持できると思います。
私もスクレイピングを学んだ段階で、twitter botを作って実装しそのプロセスで、学習だけでは分からない、実装する力、調べて解決する力を身に付けることが出来たと思っています。

【学習STEP3】Udemy / note

ダウンロード

基礎的なpythonの文法がわかってきたら、作りたいものに沿ったUdemyの講座、noteを購入して、それを元に作りたいものを作ってみると良いと思います。コードまで公開してくれている作品は非常に参考になります。

なお、できればWEBサービスの様な大掛かりになりそうなものではなく、データ分析や、収集をする様なプログラムやbotだと、開発環境が簡単に手に入るため挫折しづらいと思います。(後述するcolaboratoryなど)

Udemyは頻繁にSALEをしているので、その期間に興味あるコースをまとめて買っておくと追々捗りました。積ん読してしまう講座もあるかもしレませんが、全部を見なくても良い、困ったところや理解が足りない部分に当たったらそこだけ確認する、程度に思っています。開発中に詰まってしまった時に見返したりも出来ますし、実際にそれで助けられた経験もあります。

「アプリを作る」というとハードルが高いですが、画面がない(データを集めて整形して配信する様な)アプリはさほど作成のハードルは高くありませんでした。そういった制作物を一つ作ると、「作れる人」になれた感覚が非常に心地よいので、なるべく早い段階で「作れる様になった」実感を得ておくことと、独学のつらみにも耐え、挫折しづらくなるのではないでしょうか。

【学習STEP4】開発環境

ダウンロード (1)

前述した、Googleの提供するpythonの環境、colaboratoryが非常に優秀です。
対話式で、コードを書いて段落ごとに実行しながら作れるので、スクレイピングやデータ分析など、段階的にデータを取得したり加工したりするプログラムの構築に非常に役立ちます。
WEBシステムの構築など、複数のファイルを使う様なシステム設計には向かないですが、botなど特定の機能を持ったプログラムを開発するのであれば、非常に簡単に、無料で、ブラウザ上で、環境を手に入れられるので、是非活用していただきたいと思います。

ちなみにマシンスペックは不要なので、chromebookで使ってました。特に困ることはありませんでした。

【学習STEP5】実行環境

画像6

作ったコードを実行させる環境は、この段階ではほぼherokuで事足りると思います。スクレイピングbotもWEBサービスも、作ったコードをほぼそのままアップするだけで動いてくれる凄いやつ。

無料でもbot程度は使えますが、WEBサービスしようと思ったらある程度は課金必要。とはいえ、月$7 と安いので拝んで使っています。

【作れる様になったもの】

また詳細は別途記載していこうと思いますが、下記のものを作れる様になりました。

①特定のWEBページをスクレイピングして、抽出したデータをpandasで加工、csvでメール送信してくれるbot

②Djangoを使ったWEBサービス
 データベース、投稿、編集、閲覧、削除を備えたシステム

③機械学習で、購買履歴のようなビッグデータを分析するプログラム

①③はpythonだけでできますが、②はHTML,CSS,jQueryの理解があると良いと思います。HTMLなどはbootstrapテンプレートを使っているので、0から書くことはしませんでした。しかし、カスタマイズはどうしても必要になってくるので、やはり作りたいシステムの機能を十分に実現するにはある程度インターフェイスの知識はあった方が良いでしょう。

★重要★【身についたもの】

プログラミングのスキルとは説明しづらいものですが、下記のイメージがあるかと思います。

A:実現したい機能を要件定義して設計、コードにまで落とし込む

B:コードをそらで書くことができる

Aは写経をベースに作りながら学ぶことで身に付けることができるようになっていくと思います。本来はアカデミックに学ぶ方が良い領域で、独学の辛いことはここだと思います。
完全な「正解」がない状態で、機能毎の連携や、隙間を手探りながら作っていくことになってしまうので、どうしても最初は作ってみてエラーを直す、のような作り方になってしまいます。

個人的には、そこでググって調べて解決する力がつくので、必要なプロセスではあると思います。しかし、学習し始めのころは、該当するページをみても何を解説しているのかわからない「????」な状態だと思うので、まずProgateやPyQを回すのを推奨しました。

また、Bのイメージを持ってプログラミングを学習すると、苦行になりがちなので、ひたすら写経をして、書いたものが動く、動いたものがどう書かれているのかを後から理解する、くらいのつもりでいた方が却って早かった気がします。

【まとめ】独学でpythonを学習するには

表層的な内容になりましたが、下記がまとめです。

①学習し始めるのに大きな初期投資は必要ない。ブラウザでProgateとPyQをすれば、十分な知識を得ることができる。

②作りたいものを作るイメージがついてきたら、それに必要な環境を揃える。

③細かいコードや文法を暗記しようとするのではなく、コピペでもいいので機能毎のまとまりを組み合わせてカスタマイズして、(少しだけ)オリジナルなものを作ると理解が早まる。


今後は実際に自分が作ったものや、作り方、実際のコードについて書いていきたいと思います。色々と調べながら作っていますが、我流な部分が多いので、先輩エンジニアの皆様におかれましては、お気づきなことなどコメント頂けますと泣いて喜びます。

特にpythonは日本語のドキュメントや解説が少ないので、そういった事柄は重点的に日本語化していき、役に立てればと思います。


スタートアップ支援と、社内スタートアップをしながら、実務未経験から独学でプログラミング勉強中。主にpython。スクレイピング、機械学習から始めて、最近はDjangoを学習し、WEBサービス作成中。独学されている初心者の方向けに、技術の記事を中心に書いていきます。