色々ググったり周り見る感じ、ITエンジニアの安泰なキャリア論なんてものは無いと思った

 食いっぱぐれたくない。ITエンジニアであれば誰もが気にするところだろう。多少忙しいことや、仕事がつまらないことや、人間関係が良くないことよりも、これが一番ヤバい。淘汰されたり、クビにされたり、会社がつぶれたりして食えなくなるのはマジでヤバい。

だから俺も色々考えた。PLとかPMみたいな管理系に行った方がいいのか、得意スキル伸ばしてスペシャリスト目指した方がいいのか、フルスタックみたいなやつ目指した方がいいのか。色々ググり倒した結果、何とでもなるんじゃねって思った。

食いつなげない理由がない

 githubがお星様の浮かぶ大草原になってるとか、小学生の時からゴリゴリコード書いてるとか、そういうバケモノみたいな人は余裕で生き残るだろうが、60過ぎてもプログラマーとかインフラエンジニアとして働いている普通のおっさんは結構見る。35才限界説とか言われる割には色んな人がいる。みんなちゃんと飯を食えている。

そして今はIT人材がめちゃくちゃ足りない。日本は少子高齢化労働人口が減っている上に、あんまり待遇の良くないIT業界は人気もない。俺は少し前までデカいSIerにいたが、下請けが足りなくて困っていた。いや、任せられるような人が足りなかったとも言える。ちゃんとコード書けたり、システム・DB設計が出来る人って実は少ない。保守ばっかでつまらないことは増えるかもしれないけど、あの調子なら並に技術が分かって喋れる人であれば、仕事がなくなることは無いと思う。

AIがプログラミングするとか言っている人も居るが、その頃にはほとんどの仕事がAIとやらに奪われているだろう。そうしたらもう、営業とかやれば良いと思う。ぜんぜん売上伸びなくてドヤされるかもしれないが、何とか食いつなげるだろう。

何をやったら得か

 勉強って好きですか。俺はあんまり好きじゃない。やらなきゃしゃーないけど、それなりに効率良くやりたい。あとぶっちゃけ最新技術とか、そこまで興味ない。もちろんIT関連サイトポチポチ回って、気になったやつちょっと弄ったりとかはするけど、そんな色々覚えても使わないことが分かった。

結論、最近だとプログラミング & 低レイヤの勉強が9割、残り1割で新技術パラパラっていう状況にある。結局、TCP / IP の仕組みはずっと使われてるし、汎用OSの概念が大きく変わることもない。だったらまずここを勉強しておけばいいんじゃねと。まず基礎抑えて、あと自分が使うやつ覚えればよくね?という考えに至った。

あとプログラミングを大切にしてるのは、作れなくなったら終わりだな、という感覚があるため。とりあえず作れるうちは安心できる。作れなくなったら何のためにITエンジニア名乗ってるのかわからなくなりそう。だから何か理由付けて書くようにしてる。

将来予測とかギャンブルみたいなもん

 夜と霧って本、ナチスアウシュビッツ刑務所に収容された精神科医が体験の事実を淡々と書いてる本だけど、これを読んで「将来は予測できない」&「出来るのは決断だけ」ってことがよくわかった。その時々で現実を見ながら決断して、何とか食つなぐしかないと思わせる、めっちゃいい本。

だったら出来る限り面白そうな仕事やった方が得だよなーって思って、転職とかは思い付きで普通にしてもいいことにしてる。今の会社は面白いから止める気ないけど。

頑張って食いつなごう

パクパク

おわり

さくらVPSにCentOS7を入れてDockerを導入する

さくらVPSにCentOS7を入れてDockerを動かしてみたら、普通に動いたので書きます。

プラン

二番目のプランです。
Core数:2
メモリ:1GB
SSD:30GB

CentOS7の導入

コンソール画面の右上にある【各種設定】=>【OSインストール】=>【カスタムOS】からインストールできる。
参考URL:
vdeep.net vps-news.sakura.ad.jp

Dockerのインストール

公式からスクリプトをダウンロードして実行するのが速い。Curlで取得できる。

#SELinuxをPassiveモードにする 
# ※ここでは警告回避のため。セキュリティ性は自分で担保すること
setenforce 0
 
#Dockerのインストーラ取得から実行まで
mkdir ~/work
curl https://get.docker.com > ~/work/dockerInstaller.sh
chmod +x ~work/dockerInstaller.sh
~/dockerInstaller.sh

Dockerコンテナでdebianを動かしてみる

 Docker runコマンドを実行すると、初回にDockerのリポジトリからイメージをダウンロードしてきてくれて、起動してくれます。以降はダウンロード無しで起動してくれます。

#Dockerが起動してなかったら起動する
sudo systemctl status docker
sudo systemctl start docker

#DockerコンテナでDebianを起動する
docker run debian echo "Hello World"

#Dockerコンテナの上のDebianでBash起動
docker run -i -t debian /bin/bash

  まだ勉強中なのでぶっちゃけ全然分かってないけど、とりあえず動きました報告

VPSを借りて最初にやった設定① ユーザー作成~SELinuxのモード変更

 Linuxエンジニアを本気で目指すため、金を払った方が良いだろうということで、さくらのVPSを借りた(自宅にもサーバーを買ったのだが)。お金を払って30分くらいで使えるようになるのだが、起動するとすぐに公開した状態になるため、セキュリティを考えて色々設定を行った。今回やった設定をまとめておく。なお、サーバーを起動した時点でSSHは使えるようなっていた。

CentOS7を入れなおす

初期ではCentOS6.9がインストールされる。せっかくなので最新版を入れようということで、CentOS7.4を入れなおすことにした。コンソール画面の右上にある【各種設定】=>【OSインストール】=>【カスタムOS】からインストールできる。また、Dockerなどを使いたい場合、出来るだけ最新版を入れた方が設定が楽だったりする。

ユーザーを作成してSUDOユーザーへ

 WindowsServerだとそういう慣習は無いような気もするのだが(少なくとも僕が関わってきた業務では)、Linuxのサーバーでは普通、root(管理者)とは別にユーザーを作成するようだ。確かに、SSHなどで接続する際に、分けておいた方がセキュリティ面でも操作面でも安心感があると思う。

# 一般ユーザーの作成
$ useradd <userName> 
$ passwd  <password>

# ユーザーをsudoユーザーへ 
$ usermod -aG wheel <userName>

Wheelはsudoユーザーのグループで、入るだけでsudoできるようになる。なお、usermodでグループへユーザーを加えるときは-Gオプションだけでなく-aも指定すること。CentOSなどのディストリビューションでは、ユーザーを作成した直後に同じ名前のグループが作成され、プライマリグループとして設定される。ユーザーはプライマリ以外の複数のグループに参加できるのだが、これらのグループをサブグループという。-Gだけだと所属するサブグループが置き換わってしまい、それまで所属していたサブグループを抜けてしまう。aを付けると、参加するサブグループが新たに増え、それまでのグループには所属し続ける。

SELinuxをPassiveモードへ

 SELinuxは強力なセキュリティソフトのようだが、何かとエラーを出して大変なので、Passiveモードにすることにした。Passiveモードは警告を感知するが、ログ出力するだけで、ほかの操作を中断することは無い。代わりにFireWallのほうはガッチガチにする。

# 状態を確認する => enforcingになってるはず
$ getenforce

# passiveモードにする
$ setenforce 0

# 再度状態を確認する => passiveになってるはず
$ getenforce

# 再起動時もPassiveになるように設定ファイルを書き換える
$ vi /etc/sysconfig/selinux
       :  
SELINUX=enforcing  <= これを SELINUX=passive に書き換える 
       :

次回に続く... ※セキュリティ面の設定が終わるまで、VPSは都度落としておいた方がいいと思われる

Pythonのシステムコール回数はC言語の20倍だった

 Linuxを学ぶに当たって、自分で適当に遊びつつ、Linuxの入門書を買って色々読んでいるのだが、武内覚さんというカーネルハッカーの方が書いた「Linuxのしくみ」というストレートなタイトルの本が面白い。まだ序盤だが、結構面白かったのが今回の記事の題名の話だ。Hello WorldC言語Pythonで実行してみると、後者のシステムコールはなんと20倍だったのだ。当たり前だがPythonがクソとか言いたいわけでは全くない。単純に面白いと思ったので、これについて書く。

システムコールとは

 プログラムを実行するときには、CPUを介してメモリやI/Oや画面などにアクセスする。これらは全てハードウェアである。各々のプログラムはいくつかのプロセスとして動作するが、これらのプロセスから直接ハードウェアにアクセスすることはできない。OSに対して、「ハードウェアへアクセスしてくれ!」と頼むことでそれを実現している。この依頼がシステムコールである。
すべてのプログラムが個別にハードウェアへアクセスするという仕組みだと、それの処理をすべてのプログラム毎で書かなくてはならないし、そうでなくとも言語毎にモジュールを用意しなければならない。ハードウェアの種類は膨大なので、それぞれのドライバに合わせたものを作らなくてはならない。
 それに現代ではセキュリティの問題もある。たとえばブラウザが、javascriptが直接ハードウェアにアクセス出来たら、別の用途で開いているExcelシートや、場合によってはデータベースの中身を盗み見たり、好き勝手に書き換えたりできてしまう。これでは大問題だ。
ちなみに一時期IntelのCPUで問題になったのはこの部分で、CPUの投機実行という処理をうまく使うことで、あるプロセスから別プロセスへアクセス出来てしまうというセキュリティ上の問題だった。これはOSの問題ではなくCPU側の問題である。

システムコールを捕捉する

C言語PythonでそれぞれHello Worldを表示するプログラムを書く(この本はC言語の勉強にもなるので助かる)。

hello.c

#include <stdio.h>

int main(void){
    puts("hello world");
    return 0;
}

C言語コンパイルは、cc -o hello hello.c

hello.py

print("hello world")

Pythonは3系統を前提に書いている

システムコールを比較する

 ってなわけで用意ができたら、以下のコマンドを実行する。

C言語: strace -o helloC.log ./hello
Python: strace -o helloPy.log python3 ./hello.py

Pythonの実行コマンドは環境によって違うだろう。Ubuntuだとpython3だったはず。僕はCentOS7にyumでPython3.6を入れて実行しているので上記のようになった。
straceはSystem Traceの略だろうか。要はシステムコールの内容を出力してくれるコマンドだ。oオプションをつけると、ファイルに出力することができる。あとはcatなんかでログを見てみる。
 重要なのはログの下から10行目以内くらいにある、write(1, "hello world\n"), 12)だ。これで画面に「hello world」を出力している。それを実行するまでに、僕の環境だとC言語では約25行、Pythonだと500行程度のシステムコールを実施していた。C言語が速いというのは本当だったということがわかる。

参考書籍

キノコ採り歴20年だけど市販のキノコ図鑑を比較してみた

 僕は物心ついた時からキノコが好きで、気が付いたら図鑑を何冊も持っていた。世に出回っている図鑑をそれぞれ比較してみようと思う。ちなみに、実際にフィールドに出て取る(食べる)こともあるレベルなので、結構参考になると思う。

よくわかるきのこ大図鑑 - 永岡書店

 この本はキノコ図鑑の中でもかなり大きい方。厚さも結構あるが何より横の幅が広い。掲載している種類は300弱で、平均的である。写真が大きくて撮り方もすごく奇麗だし、実際の探し方も説明されている(調理法も)。専門的な書籍ではないが、2000円未満でこのクオリティはかなり安い方。初めての人が眺めるのにすごく良い本だと思う。キノコの良さが伝わってくる一冊。

オススメ度:★★★★
利用頻度: ★★★

カラー版 きのこ図鑑 - 幼菌の会

 やや大きめの図鑑。700種類もの種類が乗っているし1種毎の説明がそこそこ丁寧で、本格的にきのこを判別したい人にはいいかもしれない。価格は5000円以上するので、ちょっと高い。写真も味気ないので初心者にはお勧めできないが、値段とか関係なくキノコ好きな人ならば買ってもいいだろう。

オススメ度:★★★
利用頻度 :★★★★

きのこ (フィールド・ガイド) - 小学館

 すごくよくできた図鑑。種類は180種類程度と少ないが、有名どころを抑えていて、それぞれの説明が非常に丁寧で読みやすい。写真もすごく綺麗だから眺めていて楽しいし、サイズもコンパクトなので実用性もある。僕は実際フィールドへ行くとき、これをサブで携帯することが多い。値段は2000円とまずまずのところ。初心者から玄人までオススメできる一冊。

オススメ度:★★★★★
利用頻度 :★★★★

きのこ (山渓フィールドブックス) -- 山と渓谷社

 とにかく掲載種類の多い図鑑。その数なんと1200弱。たぶん市販のもので一番多い。僕が一番最初に手に入れた図鑑で、未だに一番お気に入りだ。写真が暗いが一つ一つの説明はそこそこ丁寧で、何より掲載数が多くてコンパクトなので重宝する。個人的に最強の図鑑。残念なのは今は新品で出版されていないこと。もし新品で見かけたら絶対買い。2500円程度だったと思う。Amazonでも中古販売ならあるようだ。

オススメ度:★★★★★
利用頻度 :★★★★★

日本の毒きのこ - 学研

 日本の代表的な毒キノコを集めた本。おそらく150種類載っている。キノコ採り(食べる人)の鉄則として、まずは毒キノコから覚えろという考え方がある。毒キノコを覚えて、それに合致するもの、似ているものは絶対に食べないということだ。初心者のうちからキノコを採って食べるのは絶対にやめた方がいいが、ある程度修練を積んで本格的にキノコ採りをやり始めたときは重宝するだろう。そういう言う意味では必読の一冊かもしれない。ちなみに僕は読む前からこの本に載っている毒キノコはすべて把握していた(ドヤ

オススメ度:★★★★
利用頻度 :★★★★

最後に

 キノコという生き物を観察するのは非常に面白い。実際にフィールドに出て探しみたり、写真を撮ってみるのがおすすめだ。その可愛さや美しさに気づくことが出来るだろう。ただし、素人のうちはキノコを見つけても、絶対に食べてはならない。というのも、キノコは生育地によって全然色や形が違ったりする。図鑑と照らし合わせると、どう考えても食用キノコだ!と思えるものが猛毒だったりする。もっと言うと、食用と言われるものでも生育地によって毒キノコに変容したりするので、絶対安心ということは無い。また、一度でも中毒症例が出たものは、それ以降毒キノコとされる。だから古い図鑑では食べれるとされているものが、最近の図鑑では毒だったりする。本当にキノコ採りをするのなら、専門家の人に師事した方がいいだろう。

プログラミング初心者にJavascriptがオススメな理由と学習する方法

 プログラミングを始めようと思ったときに、かなりの割合でお勧めされるのがJavascriptだ。その理由と、実際の学び方について解説していく  

非常にシェアの高い言語である

 GoogleChrome, FireFox, MicrosoftEgeなどのWebを見るためのソフトをブラウザと呼ぶが、これらの上で動くプログラミング言語としては、ほぼJavascript一強である。 普通の人のインターネットの窓口はブラウザなわけで、非常にシェアの高い言語だと言える。JavascriptはWebを構成するメインの言語なのだ。 初めてプログラミングをしようと思ったときに取っつきやすいのもWebの開発だと思う。

学習しやすい

 PCで使っているブラウザでF12を押すと、右や下の方に何か難しそうな画面が出てくるはずだ。これは開発者ウィンドウとか言われるもので、パっと見は難しそうだが、非常に便利なツールである。 この画面に【コンソール】という機能があるのだが、ここで入力することで、書いたプログラムをすぐに実行することが出来る。普通のプログラミング言語であれば、 テキストエディタにズラズラとコードを書いていき、実行ボタンを押したりして実行する。Javascriptであれば、そうやってテキストエディタにずらずらと書く前に、 コンソール上で色々な動きを試せるので、かなりストレスが少ない。また、シェアが高いゆえにその他の開発ツールや情報も充実しており、勉強しやすいと言える。

環境をそろえる

 最低限必要な環境はブラウザとテキストエディタだろう。ブラウザはGoogleChromeがおすすめだ。一番シェアのあるブラウザなので信頼性があるし、 開発者ウィンドウが使いやすく、動作も速い。
次にテキストエディタだが、オススメなのはVisualStudioCode。エディタは世の中に沢山出回っているのだが、特に人気・高機能であり、 今後幅を広げていく意味でもオススメだ。初心者から玄人まで使えるオールラウンドなエディタである。

学び始める

 手始めにドットインストールでJavascriptの入門講座(無料)をやってみるのがいいだろう。初めて学ぶときは音声で聞くのが一番分かりやすく飽きにくい。 半面、自分のペースで進めることが出来ないためイライラもしやすい。入門だけで24編あるので、、ある程度聞いて何となく分かったら、あとはググり勉強でいいかもしれない。 書籍を買うのもいいのだが、ことJavascriptに関しては、あまりにもWeb上に情報が出回っているため、学び始めであれば書籍を買う必要はないように思う。 もし一冊辞書的なものが欲しいのあれば、徹底マスターJavascriptをおすすめする。

作ってみる

 既に作りたいものが思いついているなら、作り始めればいいし、特にないのであればドットインストールで色々作って遊ぶことができる。 電卓やゲームの作り方を解説しているので、作ってみるのもいいだろう。色々書いているうちに、プログラミングに慣れてくるので、とにかく色々やってみることが重要。 Webを作りたいとなったら、HTMLやCSSについても勉強する必要があるので、毎度おなじみドットインストールでサラッと学習すればいい。

言語仕様を勉強してみる

 これは先になるかもしれないが、色々作っていると言語仕様理解の壁にぶち当たったりする。そういう時は開眼Javascriptを読もう。 Javascirptは、ほかの言語も勉強していると気づくのだが、難しいことをやろうとすると面倒な言語だし、仕様も少し変わっている。 150ページの本で、少し内容が古いが、Javascriptという言語がどういうものか理解できるはずだ。この本ではES3の仕様解説がメインなので、 これと合わせてES6の仕様を確認した方がいい。

本は投資コストが低いから買った方がいい

 学生時代、参考書って高いなあと思った経験は皆さんあるだろう。一冊2000円とか3000円とかして、普通の学生からすればかなり高価だ。だからすごく吟味して、これだっていう一冊を選んで買う。そんな感じだったんじゃなかろうか。しかし最近思うのは、本なんて全然安いものだから、必要だと思ったらさっさと買うべきだということである。

給料の上り幅と本の価格

 すごく単純な話だが、例えば5000円の専門書を買って勉強し、転職して給料が5000円アップしたとする。そのまま一年経てば60000円である。勿論、勉強にはお金以上に時間を使う。だから、一概に本の値段だけでコストは測れないのだが、3000円やそこらで自分の給与アップに繋がる情報を得られるのなら、本なんて安いものだ。だから僕は、その場でパラパラめくって、必要だなと思う本があったら速攻買う。それでも年間で本に使う金は10万くらい。給与が300万だとして、そのうちの10万、たったの3%だ。滅茶苦茶安い。そもそも勉強のために書籍を購入するような人であれば、一生年収300万で生きて行こうなんて考えてるような人はいないだろう。

時間と本の価格を比較する

 今まで金額の話をしてきたが、時間という観点からも、書籍は欲しいと思ったら買った方がいい。たとえばプログラミングの勉強をしていたとしよう。javascriptという言語を勉強していたとする。javascriptをマスターするのに、ネットだけの情報だと2カ月、書籍を使えば1カ月半だった。その差は半月(15日)。時間コストを単純に月給で測るとすると、月20万では半月で10万。書籍をは3冊買って1万だったとすれば、すごく単純に考えても、10万という時間を1万で買ったことになるのである。そういうコスト感である。

精神的な敷居を下げるための書籍購入

 また、定量的な評価は難しいが、精神的を敷居を下げる意味でも書籍は買った方がいい。何かを勉強しようと思ってから行動するまでの障害を出来る限り減らす必要があるのだ。やる気が出た時に手元にわかりやすい書籍があるのと、一からネットで検索し始めるのでは、ストレスの度合いが違う。何かやろうと思ったときに、すぐさま行動を起こせる状況を作っておくのことが重要なのである。活用できるか分からないがとりあえず買うという意味では、一番投資に近い感覚かもしれない。

ネットよりも体系的に学べる

 人によっては、今の時代は何でもネットで調べれば出てくる時代だから、本なんて買うのは勿体ないと思うかもしれない。確かにネットで調べるというのは簡単だし、特定のことを調べる上では本を読むよりも断然早いことだってある。しかしネットでばかり調べていると、情報が偏りやすい。体系的に何かを学ぶ際には、いい本を手に入れて、サラッとでもいいから全体像を把握することが重要である。 さらに言うと、ネットの情報というのは、正しいこともあるのだが間違っていることや、場当たり的な対処をしている内容も多い。本が間違っている時もあるし、最新の情報なら本よりもネットの情報(特に論文とかそのレベルを読めるのであれば)の方が良質な場合もある。特にITの世界では、公式の情報が一番正しいので、最新情報はネットということになる。しかしある程度枯れた情報に関しては、一定の評価を得ている本を読んだ方が、それなりに体系だった知識を素早く手に入れられる可能性が高い。

書店で2000円とか3000円とかみると、一瞬ひるんでしまうかもしれないが、冷静に考えてみると、本は投資コストが低く、どんどん買った方がいいことがわかる。読まずに貯めてしまうのはもったいないが、必要だと思ったらあまり考えずに買ってしまった方が良いかもしれない。