未経験者がIT技術をあれこれ独学中っていう話
お久しぶりです、トリスフです。
ちょっとこれまでの経緯を自分用にまとめたくなりましたんで、ならついでに久々にブログに書いてみようと思いました。
(注意※すごい長くなりましたので、引き返すなら今のうちです)
実は去年ぐらいから本を読むのにはまっています。
なぜかといいますと、本には著者が「これは本に書いておく価値があるわ!」っていう知識が詰まっていることにふと気づいたわけです。
ネットに落ちている情報の場合、みんながとりあえず書いてみよー、そしたら誰か反応くれるかも!っていう感じで発信しているのが多いかなと思っていますが、
それをいざ本にしろって言われたら大抵の人はキョドるんではないでしょうか。
「えっ!俺の垂れ流しのつぶやきを本に!いやいやいや!」みたいな
でも本を書いてる奴らは違います。
これは是非とも世の中に発信すべきだし、これに興味がある人は知っておくべきだわ!みたいなのを積極的に情報発信しているわけです。
そんな宝の山に全然触れていないなと思ってしまったわたしは、ある日から本をあさり始めたわけです。
そしてある時期から、いわゆるプログラミングだとかAIの本を読むようになりました。
ちょっとそのあたりについて振り返りたくなったんで、できるだけIoTとかAIにも詳しくない人にもわかりやすく記事にしようと思います。
IoTとかAIとかプログラミングを独学で勉強した
最初のころ
入り口はIoTの本(2020年7月頃)
そもそもわたしはIoT(※後ほど説明)とかAI(※後ほど説明)とかプログラミングは専門外です。工学部や情報学部でもないです。
そりゃあ学生の時にHTMLとか簡単なのは習ってHPを作るみたいな実習はしましたが、その知識のアップデートなんてまるでしておりません。
でもいろんな本を読んでいるうち、今頃興味をもちはじめたわけです。
そんなわたしが知識熱に浮かされてちょっと読んでみようかなと思ったIoT系の本は、図書館でみっけたこちらの本
「 IoTの全てを網羅した決定版 IoTの教科書 伊本 貴士、末石 吾朗、江崎 寛康、森 崇人、中山 祐輝、林 憲明(著)/伊本 貴士(監)」
日経BP SHOP|IoTの全てを網羅した決定版 IoTの教科書
そもそもIoTってなんやねんってレベルだった私としては、この本が良い入り口になりました。
ちなみにIoTとはInternet of Thingsのことで、この本によれば日本語で「"もの"のインターネット」
ざっくりいえばあらゆるモノにインターネットを繋げることですかね。
IoTの技術としては自動運転だとか、オール電化だとか、スマート家電、スマート農業などです。
この本では実際の技術やら通信インフラの成り立ちやらを幅広く紹介していまして、
ここで知ったAIと、シングルボードコンピュータの技術が私の知識熱を加熱させたわけです。
なのでこの2つだけちょっぴり紹介。
AIってなに?
AIは人工知能(Artificial Intelligence)のことです。最近やたらAIが騒がれていますよね。
「実はうちにAIを導入しまして」なんて聞いたら、今だったら「きゃあ素敵!すごいおうち!」って感じじゃないでしょうか。穿った見方をするなら「意識高い系かよこいつ」になるかもしれませんが
なんで今こんなにAIが騒がれてんの?ってのは、10年ぐらい前にディープラーニングっていう技術が現れた結果みたいです。
人工知能がトリとかサルとかネコとか画像を分類する大会があるらしいんですが、それでかつてない成績を残した人工知能はディープラーニングという技術で作られてたってことでめちゃくちゃ注目を浴びたっていう感じ。
個人的には誰かが作ったプログラムをちょっといじるだけで、家のパソコンで私のような素人でも割と簡単に人工知能を作れる簡便さがすごいと思いました。
ディープラーニングの登場で、例えば男と女を画像で見分ける必要があるとして、見分けるだけなら人工知能にも高精度にできる時代となっているわけです。
具体的には「これは男です」、「これは女です」みたいなことをメモ(ラベリングといいます)してる画像が100枚ぐらい用意して、あとはぽちっとプログラムを動かしてやるだけです(学習といいます)。
そしたら私にも普通の人間と同じくらいに男と女を見分ける人工知能が5分ぐらいで作れるんです!手軽さが凄まじい!
人間でも間違うレベルの問題以外はほとんど正解するようになります。
そんなわけで可能性を感じて、AIの勉強をするようになりました。
もう一つがシングルボードコンピュータについてです。
シングルボードコンピュータとは?
この本での説明の引用すると、
”シングルボードコンピュータ(SBC:Single Board Computer)は、計測や制御、特定用途の端末として使われる比較的小型のコンピュータシステム。1枚の回路基板上に、CPUやメモリーストレージなど、コンピュータシステムの構成要素を一通り搭載"とあります。
要するに小さい基盤の上にのったパソコンです。
シングルボードコンピュータとしてはArduino(アルドゥイーノ)、Rasberry Pi(ラズベリーパイ)ってのが流行してるみたいです。
それの何がすごいの?ってことなんですが、お安いことです。3000-5000円とかです。
なので簡単に言えば自分の思った通りに自動で動く機械を今の時代めちゃくちゃ安く作れまっせって話です。
例えば極端なこといえばドローンやラジコンヘリにシングルボードコンピュータを付けて設定したら、毎日決まった時間に自動で荷物を決まった場所に運んだりしてくれるわけです。
(ただし今のところ、これは法律のせいで出来ないらしい。そのせいで中国に遅れを取ってるとか?)
他にもずっと田んぼの温度とか測る装置つくって、ある温度超えたらアラーム出してスマホに知らせてくれるとか。
そんな機械を知識さえあればSBCやらセンサーなどあわせて色々含め1万円ぐらいで自作出来たりするわけです。
それを知った私はAIを組み合わせたら、シングルボードコンピュータはめちゃくちゃいろんなことできるんじゃねえのと夢が広がりました。
でも、まだまだシングルボードコンピュータは学べていないですね~
ともあれ専門外だけどIoTって何よ?割と詳しく知りたいって人に、このIoTの教科書は入り口としてオススメな本です。
同じ著者のAIの本も読み終えて(2020年8月頃)
シングルボードコンピュータは工学部の人が好きそうな話ですが、私はあいにくハンダゴテを中学校の頃に握った程度です。
まずはお手軽にできそうなAIから学んでみよーと思っていたところ、隣にIoTの教科書と同じ著者のAIの本がおいてたのでそれを読みました。
「 ビジネスの構築から最新技術までを網羅 AIの教科書 伊本 貴士【著】」
日経BP SHOP|ビジネスの構築から最新技術までを網羅 AIの教科書
内容は結構IoTの教科書とかぶっているところもありますが、
「プログラミングなんて知らんけど、AIについてもっと教えて」状態の私からすればこちらもとても面白い本でした。
この本でAIではプログラミング言語の一つであるPython(パイソン)がよく使われていることを知りました。
そこでPythonについてざっくりぐぐったら
「Pythonは初心者にもオススメ!」とか
「Pythonであたしの年収100万アップ!」みたいな
胡散臭い夢のような話が大量にありました。
ちなみにこの本以外にもAIについて書いているけど、技術書じゃなく知識の本ですみたいなのを10冊ぐらいは読みました。
そんで結構周辺の知識は学んだし、ちょっと実際にやってみたいなとか思った私はプログラミングを学んでみようと思ってしまったわけです。
ネットで独学プログラミング学習をはじめてみた
とりあえずYoutubeとかググってみた(2020/8月頃)
AIとかSBCとか学んで興奮して、知識は水だ…!どんどんやってみたいぜ!状態にってなっていた私は、独学でプログラミングを学んでみることにしました。
じゃあ何を学ぶの?ってことなんですが、まず学びやすそうなHTML(エイチティーエムエル)と、さっきあったAIの関係でPython(パイソン)を学んでみようと思いました。
というわけで適当にYoutuberの動画を色々眺めました。
色々みた感想「へぇーこんなことできるんだ~。面白いなあ~。でも、なんか足りない。何が足りないのかよくわからないけど」
Youtubeでは確かにあれこれ技術を動画でわかりやすく紹介してくれるんですが、なんちゅうか全体がよくわからない。
確かにそのとおりにはできるようになる、でもなんかわからん
応用もよくわからんし、何がわからんのかわからんけどわからん
らんらんらららんらんらん
疑問すら言葉に出来ないもどかしさを覚えました。
そこでもうちょっと詳しく知りたいなーと思ってぐぐってみるわけです。
するとまず引っかかるのが日本語でOKみたいなHPばかりなわけです。
プログラムコードをいきなり載せて解説してたり、専門用語満載の辞書みたいなページだったりです。
わしにはお前らのいうことがさっぱり理解できん!
そもそも自分が何を知りたいのかすら言語化出来ないレベルの初心者には非常に辛い。
どうやって調べていいのかわかんねー!
ドットインストールなどわかりやすいサイトで学び始めた(2020/8月頃)
でもこういう状況は宅建で経験しました。
私のように知識ゼロだとググり方すらわからないわけで、まずは一通りまとまった基礎を学んでみるべきだと、故にこんなときは初心者用の勉強ツールを探せばええんやと。
というわけで、わかりやすいわかりやすい言われているドットインストールで学び始めました。
dotinstall.com実際とてもわかりやすかった。無料で見れる講義が多いのも嬉しい。
というわけで無料の講義は全部見て、動画のとおりにHP作って、
私にも今風のHPが作れたぞおおとか体験して、ちょっと楽しくなりました。
それと「ここで無料で紹介されているHTML、CSS、JavaScript、PHP、Linuxなんかのプログラミング言語はきっとみんな勉強し尽くした常識なんだ!」と思うことになりました。
(今もそう思っていますが、果たしてそうなんでしょうか?)
実は最初は「こんなに勉強せなあかんのか・・・」と絶望した私ですが、結局情報を集めてみると、「みんな必要なときにググって調べてるよ」ってことでした。
じゃあやっぱり個々の言語については覚える必要ないし、使ううちに身につくんだなと思うようになりました。
(↑ちなみに、今でこそこれらが大体初級レベル程度(比較対象がないので?)にはわかるようになりましたけど、当時はLinux、JavaScriptあたりすんごい嫌でした。ググった結果のわかりづらさやとっつきにくさがこいつらは飛び抜けていると思います)
この辺りで自分のプログラミング学習の目的も考えました。
整理してみると、そもそも現時点でプログラミングで作りたいものは決まっていない。
またプログラミング言語を何か極めてできるようになりたいとかじゃなく、プログラミングでそもそも何ができるの?どういう風に使えばいいの?ってのを学んで、いずれはAIとかラズベリーパイとかに活用してみたいって感じでした。
もちろん学ぶ過程で他にもHP作れたらいいなとか、アプリ作ってみたいとかそんな目的も育ちはじめてました。
ひとまずドットインストールの無料講座を終えたひな鳥の私は、じゃあ次はPythonを学ぼうと思ったわけです。
どうせAIやりたいんだし、AIの学習できるところないかなーと探しました。そしたらなんか詳しそうなのがありました!
tutorials.chainer.orgこれやったら私にもDeep Learningが使えるのでは!?と学び始めたんですが、これまた知識が足りねえと気づきました。
学び始めると、やっぱりわからない用語だらけなわけで、それならばとググります。
だけどググってもまさにそれを求めていたみたいな答えにはすぐには行き着きません。調べている時間で集中力が途切れてしまう。
答えが見つからないこともしばしば。
ここで、「これはもっと幅広く体系的に一度学ぶべきだと、つまり本だ」と考えたわけです。
そして、とりあえず図書館においてある本読んでみよーと10年ぐらい前の本から読み始めちゃったんです。
これで地獄をみた・・・!
本で学びはじめた(2020年9月頃)
初めてのPython 第3版 著者:Mark Lutz 訳:夏目 大 2009年 発行
JavaScript Oreilly社 著者:David Flannagan 訳:村上列 (2012年発行)
体系的に学ぶなら、まずは今よく使われている言語だよなと思って、図書館に行ってみたんです。そしたら上の2つの本を見つけました。
まずはPythonの本ですね。
2009年の本でちょっと古いかもしれんけど、入り口にはちょうどいいかなと思いました。
また、いろいろ調べてたとき、最初に学ぶならJavaScriptがオススメとかいう意見をネットで見たので、じゃあJavaScriptも学んでみようと思いました。こちらは2012年の本。
どちらもくっそ分厚い本(Pythonは808ページ、JavaScriptは840ページ)です。
でも、「こんな分厚い本マスターしたらなろう主人公状態になるんちゃう?俺なんかやっちゃいました?」とか期待とふざけた妄想をしていた私がいました。
というわけで、まずはJavaScriptの本に書かれていることを理解して、そのあとデザートのPythonの本を読もうと思ったわけですね。
ーーーしかし先にいいますが、初学者が今この本から学習をはじめてはいけない。なぜなら、これらの本に載っているプログラムのコードはもはや古いーーー
なんにも知らずに無垢で、絹のように真っ白な状態で、知恵熱に浮かされ学習を始めた私は、
まずは本の内容を一通り読んで理解したら、その後プログラムを動かしてみて学んでみよう!と、
これからの輝かしいプログラミング学習について目を輝かせていたわけです。
基本的にパソコン開いて本の中身のうち重要な知識やコードをEvernoteにタイプしながら読み進めました。
こんな感じにね↓
ほとんど写経状態でしたが、内容の理解をしながら簡単なプログラムのコードをタイピングすることには慣れようと思ってカタカタ打ち込んでいたわけなんです。
それでなんとかざっくり理解しつつ1周読み終えました。
ちなみに、JavaScriptってどういうプログラミング言語なの?ってことを少しだけ書きますと、HPとかで主に使われているプログラミング言語で、ゲームとか作ったりも出来ます。
利用人口が多いんで、色んな所に使えるプログラムが落ちています。
また、今なおHPはHTML5とCSS3とJavaScriptで書かれていることが多いですが、近年JavaScriptだけでHPを作ったりする技術も現れ始めています。
いずれそういうことも記事にするかも?
さて続いて、2周目はプログラムを実際に本の通り書いて動かしてみます。
Oreillyの本にはサンプルコードがついていまして、URLのHPからダウンロードしたら自由に使えます。
それらをとりあえず動かしてみたら感覚がつかめるかなと思って動かしてみたんですね。
そしたらね、おかしいんですよ。なんかプログラムが動かないんです。
なぜだ?と思ってググってみたら、英語のサイトで同じ本の同じ箇所を勉強して動かないってQ&Aで叫んでるやつがいました。しめたもんですよ。
その回答みたらね、この部分のvarをletに変えたら動くよって書いてたんです。
は?「let」?なにそれ?え?letなんてこの840ページもある本に1度も出てきていないんですけど?
どういう意味なの?なぜ載っていない?ってなってね・・・
繰り返しですが、この本のコードはもはや古いんですよ。ここで初めて気づいたわけです・・・
そっと、閉じましたね・・・
(ちなみに、varもletもどちらもJavaScriptで「変数」を宣言するために使われます。この分厚い本ではvarで変数を宣言するのだと教えていますが、varは現在(ES2015以降)のJavaScriptでは使われなくなり、代わりにletが使われるようになりました。)
しかしながら絶望とは死に至る病だと知る私は、やけくそ気味にPythonの本を開きました。
そしたらありがたいことに、最初に注意を書いててくれました。
「この本はPython2.5の本で、これから開発中のPython3.0になるからね」と。
なんてこったい/(^o^)\
でもまあ古いとはいえ、仕組みは基本変わっていないだろうしキーワードを学習しようとなり、コードは読み流しつつ読破しました。
私の体験の教訓は、
ネットの技術の本は10年前だともはや現在の技術に対応していない可能性が高いから注意しろということや、
プログラミング言語を本で学ぶときは最新版に対応しているかバージョンを意識しろということでもあるかもしれません。
学びとはこうして実際に体験してこそ得られるものですよね。
ともあれ、これからプログラミングを独学で本で学ぼうとしている人はくれぐれもお気をつけください。
この時点での自分の状態
Lv1:JavaScriptとPythonの10年近く前の専門書を読んで、関数とかオブジェクトとか色々学んだけどコードは一切書けない人
それからの本での学習
ちょっと書いてて息切れしてきましたんで、ここからはざっくり読んだ本をリストにして簡単に紹介いきます。
ゼロから作るDeep Learning――Pythonで学ぶディープラーニングの理論と実装
この本は1から3まで3冊ありますが、はっきりいって良書です。Pythonの基礎から説明してくれます。これを読めば誰でもプログラムレベルでDeep Learningが作れるようになります。3だけ最新だから読めばいいやって思うかもしれないですが、学びの意味で詳しいのは1と2だと思います。
ゼロからはじめるデータサイエンス 第2版――Pythonで学ぶ基本と実践
AIを作るにあたって、データ分析も必須になります。データをどうやったら分析できるの?統計ってなんだっけ?ってことを色々はじめから学習しなおせるのがこちらの本です。Pythonでどうやって統計的分析をするかも丁寧に示してくれます。これもかなりの良書。でも第1版には気をつけろ!(これも動きません。同じ轍を踏みました)もう一度読もうかなと思っています。
HTML5+CSS3の新しい教科書 改訂新版 基礎から覚える、深く理解できる。
ドットインストールの無料講義しか学んでいなかったので、今更ながらHTML5とCSS3とは何かを学びました。この本を読めば今のHPの作り方やデザインの仕方が一通り学べます。ってかこの本こそ最初に読めよって感じですね。やっぱりわかりやすい本から読むの大事ですね。
新しいLinuxの教科書
2015年の本だったのでめちゃくちゃ警戒しましたが、ちゃんとLinux(リナックス)の基礎が学べました。プログラミングを学んでるとLinuxは避けて通れません。ざっくり理解できる良書ですね。
仮想化&コンテナがこれ1冊でしっかりわかる教科書
ドットインストールでも授業で仮想化やるんですが、なんか動きませんでした。それ以来仮想化を毛嫌いしていたんですが、改めてこれから全ての技術で仮想化は必須だと思います。特にDocker。さらに言えばKubernetes。まだまだ使いこなせていないです。AWSとかのネットのクラウド技術も学ばなあかんやろなーって状態ですね。この本ではそういったことを一通り知識レベルで学べます。動かすのはあんまり学べません。
初めてのJavaScript 第3版――ES2015以降の最新ウェブ開発
あの憎き思い出を払拭するべく、JavaScriptの本は再挑戦しました。こちらは現在ちゃんと動きます。2017年の本のはず。ちゃんとletについてこちらで学べましたね。マスターはしていませんが、ちょっとJavaScriptの苦手意識が薄れました。
Webサイト高速化のための 静的サイトジェネレーター活用入門
この本ではGatsbyという静的サイトジェネレーターというツール使ってHPを作ることが体験できます。ここ数年HPを作るときにWordpressを活用することが流行していたそうですが、実は最近はJavaScriptの代替言語だけでHPを作る技術が盛んです。これに派生してVue.jsだとかNuxt.js、関連してTypeScriptにも興味を持っています。この本で他にもGitHubやNetlifyの使い方を学びました。この辺りも全然まだまだですね。
この他にも本は色々読んでいますが、面白かったなあとか役立ったなあっていう本をざっくりとまとめました。
これからの学習について
さてここまでまとめてきたのは、これからを考えるためです。
いくつか学び足りないと思っていることも改めて浮かんできましたが、さらに学ぼうとすると①公式HPのドキュメントで理解するということが必要な段階になってきたなと感じています。
大体どの分野もそうですが、マニュアルってのは読み慣れていないと非常に読みづらい。
特にマニュアルが英語しかない場合は苦労します。
今の所私はプログラミングは日本語の本で学んできたわけで、そろそろネットにあるマニュアルを読んで実践して学ぶということが必要なフェーズかもしれないと思っています。
でなければ永遠によくて数ヶ月前の技術を本で学ぶしかないわけです。
理想は論文読めることだけど、それはまだまだ先ですねえ。
それと、②先人のプログラマーたちが何を言っているのか理解できるようになる必要があると感じています。
大体プログラムが動かなくて困ったら、どこかのQ&Aで質問してみんな解決しているようです。
でも、その時のアドバイスが「ちょっとなにいってんのかわかんない」って感想じゃあかんですよ。
というわけでQiitaとかの記事を見て、ついでに流行も掴んでみようとしています。
さらに、③そろそろ何か自分のためにプログラムを作って動かしてみようかなという段階に来ています。
これまでの独学学習である程度何ができるのかがわかりました。
じゃあ「あんなこといいな♪できたらいいな♫」を作ってみるっていうのが最高の上達方法になるでしょう。
いちいちググる回数も以前よりは減りましたし、そろそろ活用しないと身につかない段階です。
やっぱり本とかで学んでる時間って、所詮インプットの時間でアウトプットじゃないんですよね。
最初にコードを動かすっていうことに抵抗を覚える思い出を体験したおかげで、まだまだ全然1からコードはかけまへん。
この辺りこれからうまいことやっていきたい。
ちなみに現在の自分の状態をまとめてみますと、
HTML5: 普通になんでもイジれる。けどなんか作りたいもの作った経験はなし Lv3
CSS3: いじり方は覚えたが、いじった経験不足 Lv2
JavaScript: 簡単なコードは読める。でもいじった経験不足 Lv2
Linux: 基本的なことは調べたらできる。Dockerやらvagrantで経験中 Lv3
Dockerなど: 導入はできるし使ったけれど、まだまだオーケストレーションの仕組みや応用がわからん Lv2
AWSやらAzureなど: 知らんうち課金されたら怖いからまだ近寄ってない Lv0
PHP: まだ学んだことない Lv0
NginxやらWebサーバー系:立ち上げたことあるけど、セキュリティとか怖い Lv1
MySQLやらデータベース系: ちょっと知ってるけど、本で学んだことはない Lv1
AltJS: GatsbyやNode.jsでHPを言われたとおりに作った経験はあり Lv2
Python: Scrapingはできるけど、PandasとかNumPyの使い方がイマイチだし使い慣れていない気がする Lv 2
AI: 教師あり学習は学んだけど、教科書どおりの画像分類程度しかやったことない。まだまだ。教師なし学習は触ったことない。強化学習は学んだことがない Lv2
IoT: ArduinoとかRasberry Piをさわりだけ知ってるような感じ。なんか背景にある波動関数みたいな本を読んで嫌になった Lv1
別にレベル上げメインよりは何かやりたいことができるようになる過程でレベルがあがりそうかなあ・・・まだ本で学ぶことはありますね。
これからレベルがあがったっぽいタイミングで記事を書くとかもありか?
まあ、暇なときしか書けませんけど。
とまあ、こんな感じで独学で趣味レベルですがネットの技術学び中ですって記事でした。
(はてなブログはプログラミング詳しい人めっちゃいるから実は書いてる内容間違ってて怒られそう)
長くなりましたが、最後まで読んでいただきありがとうございました。