2017年1月からWEBエンジニアになった中途組ド文系の時間の使い方
2017年1月から3ヶ月の研修期間を含め、そろそろ1年になるので、振り返りもかねてまとめました。また、参考になる部分が何かしらあればと思って共有することにしました。「1月から研修」ってことで、中途組です。
目次
・スペック
・入社前の過ごし方
・環境構築
・1月~現在まで
・これはやっておいてよかったと思う事
・この後やりたいこと
スペック
これまでは営業畑でした。
法人営業も個人営業もやりました。海外向け国内向けやりました。
産業用のどでかいものから、ちっさい半導体などの営業を担当していました。
英語はTOEIC850くらいです。
東京の私立4年制大学の法学部でした。文系です。数学は今勉強中です。
プログラミングの経験はなかったです。
物事の仕組みや人の思考の仕組みを考えるのが好きです。行動心理学とかも読み漁っていた時期があります。詐欺とペテンの大百科とかおもしろかったです。
入社前の過ごし方
2016年のこと。10月以降くらいから書きます。
転職が決まり、1月からJavaの研修に参加させていただけるということが決定したので、プログラミングってどんなものなんだろうと思って学習を始めました。
ガジェットいじりがもともと好きだったので、(Iphoneの脱獄とかPSPの改造とかをやってみる程度)機械が嫌いとか、PC怖いとかいうことはありませんでした。
それまでPCとの付き合いは、エクセルのショートカット覚えまくって、周囲から「うわっ」て言われるくらいで、全くプログラミングの経験はありませんでした。HTMLもCSSもJSもかけませんでした。しかし、プログラミングによって達成できるいろいろなことの自動化にはとっても興味がありましたし、例えばエクセルのマクロとかに興味がありました。マクロは今でも全く勉強してませんが。
1月からJava漬けになることはわかっていたので、積極的にいろいろな言語を学ぼうとしました。
勉強したのはPython、C、Lisp、シェル芸(bash)です。
各言語を勉強しようとした理由は、
Python:簡潔だから。
C:「ポインタ」っていうのがみんなが詰まるポイントだって書いてあって面白そうだったし、PC使う上では避けて通れない概念だと思ったから。
Lisp:プログラミング観が変わるっていうネットの評判を見かけて興味を持ったから。
(言語ではないけど)シェル芸:環境構築いらずで手軽に実行できて、かつ強力な操作ができてコスパいいし、面白そうだったから。
下記を使ってインプットしました。
Land of Lisp(書籍)
みんなのPython(書籍)
Head first python(書籍)
苦しんで覚えるC(WEB&書籍)
Head first C(書籍)
シェル芸勉強会問題集(シェル芸勉強会問題一覧 | 上田ブログ)
シェルスクリプト高速開発手法入門(書籍)
なぜ最初から複数の言語を触ったかというと、2つ理由がありました。
1つ目の理由は、何回も「入門」を練習したかったからです。なにか始める時って、「入門」が色々な意味で一番大変だと思うんですが、その練習をするには、ある言語の入門を一通りやって、別の言語に入門して一通りやって、また別の言語で、を繰り返すのがいい練習になると考えました。おかげで「入門」の練習は結構できたと思いますし、新しい環境で何か始めるのに抵抗が無くなりました。
2つ目の理由は、(これはPythonやったあとのCやったくらいから実感してきてその後のLispとかにも繋がるんですが、)言語を比較することで、言語の癖というか気をつけなければならないところを理解しやすくなるからです。たとえば、Pythonは代入の時に型意識しないですが、Cはめっちゃ意識しなきゃならなくてめんどいな、とか。Pythonは全部オブジェクトという固まった結果を代入で受け渡していてなんかもっさりだけど、Lispは走る処理自体を代入で受け渡すことができて良さそうだなとか。記法にもいちいち細かくなります。
そうそう、言語を勉強する上でよく「壁」として語られるCのポインタの理解ですが、メモリやCPUなど、PCの中身がどういうふうに動いているのかというあたりの勉強を意識的にしたところ、クリアできました。
逆に言うと、CPUとメモリとストレージがどういうふうに関連しているか、(ざっくりと)理解できるまでは、他の方の例にもれず、意味不明でした。
なぜ意味不明になってしまったのか、おそらくはポインタの演算子が3種類くらいの意味のバリエーションを持っているからだと考えています。ホントわかりづらい。でも機能自体はシンプル。
環境構築
家にあったLets noteのCF-SX1にubuntu入れました。たしか14.04だったと思います。当時はWindowsしか家になかったんですが、「プログラマやるならLinuxやろ」と思ってデビューしやすいdistを選びました。「usbブート ubuntu」とか検索してそのとおりやればできました。
WindowsとLinuxの比較ですが、開発用途で利用するなら、ファイル操作のコマンドや権限管理やパスを通す作業など、Linuxのほうが優れていると思います。
しかし利用当初は、操作や設定で、つまづきが非常に多かったです。インストール直後、まず動画が再生できません。次に音声が出力されません。作成したファイルを実行しようにも、実行できません。ディレクトリを消去することができません。テキストの編集がまともにできません。わからないことがあってもどのようにググればいいのかわかりません。パーミッション?なんじゃそれ?状態でした。でもググれば大体解決できます。Let'snoteの蓋を占めてサスペンド状態に入ったあと、復帰時に入力を一切受け付けなくなる、というバグも、良記事のおかげで助けていただけました。
power management - How can I tell Ubuntu to do nothing when I close my laptop lid? - Ask Ubuntu
※どのようにググれば良いのかわかって来るとLinuxで行う環境構築の方が楽です。ググったらだいたいどうすればいいかlinux向けの情報がたくさん出てくるし、何よりterminalで設定が完結するからです。Windowsは設定をするためのボタンがあっちゃこっちゃで大変すぎ、という印象です。
2017年1月〜3月
Java研修が始まりました。
最初の月はJavaの基本書で勉強して簡単なアプリを作りました。Javaではこう書くのかなるほど、という程度でした。
次の月はStrutsを勉強して簡単なアプリを作りました。アプリに機能追加する課題をこなしました。
最後の月はSpring使って簡単なアプリを集団で開発しました。作成したのは簡易なECサイトでした。
進行にばらつきがあったため、遅れをとっているメンバーの補助にも回ったり、私の端末の電源がお亡くなりになって(何故か私だけ)開発最終日の2日前に環境構築し直しなど、大変な部分もありましたが、和気藹々と楽しい研修生活でした。
この研修を通して、プログラミング観のベースを築くことができました。
「プログラミングって結局、入力受け止める変数をつくって、そこへ入力渡して、その値を利用して何らかの処理や判断を行って、結果値をまたどこかに渡して・・・以下ループなんじゃないの?」というものです。入力、処理、出力のどこに関わる話をしているのか、と分析する視点が身に付きました。
4月
正式に入社しました。
5月〜9月
初めての現場に入りました。金融系の案件でJavaアプリの保守業務案件でした。
参加当初、案件がどのように進むかが頭にインプットされておらず、「単体テスト」と「結合テスト」の違いや進め方もよくわからない状態での参加でした。
担当は主にテストエビデンスの編集とバッチ運行でした。加えて、シェル芸練習の甲斐もあって、負荷テスト用のデータ増幅作業などのバッチを書く作業も担当していました。
業務時間後は、LPIC受験のための勉強を主にしていました。
受験の理由は2つあって、
1つは、Linuxについて詳しくなりたかったから、
もう1つは、会社からの受験費補助、合格時の報奨金も出ると聞いたから。
4ヶ月でLv3まで取得しました。受験ハウツーは他記事参照。
受験を通して、アーキテクチャの理解を深めることができたと思いますし、何より、シェル芸の幅が広がった気がして楽しかったです。
受験級(合格日)
LPIC101(5月6日)
LPIC102(5月29日)
LPIC201(7月1日)
LPIC202(8月5日)
LPIC303(8月26日)
8月末の社員研修で「将来を一生懸命考えてみよう」というテーマでプレゼンをすることになりました。
私はセキュリティ分野にとても興味があったので、2つの目標をたてました。
「10年以内にDEFCONに日本代表として出場していること」
「セキュリティ人材の教育に携わっている」
DEFCON出場のためにやることは多いですが、Todoを潰していけば10年もあれば1回くらい行けるだろうと考えています。(本当か?)
このプレゼン発表のおかげで、IDApro購入をしてもらえるかもしれません。うれしい限りです。
10月〜現在
次の現場に入りました。
10月からは勉強会に積極的に参加するようになりました。(主にセキュリティ関連)
参加理由は主に2つ。
1、勉強会でセキュリティ界隈の先輩方と手を動かして一緒に学べると考えたから。
2、先輩方がどのようなインプットをしているかを知りたかったから。
勉強会に参加してわかったことは、
・勉強会で手を動かすことは少ない。(メモは別として)
・基本的に手を動かす機会では無いので、メモった知識をどのように自分で使うかまで考えないと勿体無い。
・先輩方が使っているツールや、使っている用語を知る良い機会だった。
・議論の場というより発表の場
2017年参加した勉強会(一部参加予定のものを含む)を列挙しました。
勉強会運営の方、発表者の方、本当にありがとうございます。
大熱血!アセンブラ入門 読書会
シェル芸勉強会 meets バイオインフォマティクス vol.1
脆弱性診断ええんやで(^^)
ssmjp
基礎から学べるIoT/ビックデータのための大規模分散システム基盤構築セミナー第2回ネットワーク基礎
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
Sphinx をはじめよう
Kubernetes ときどき Serverless -- cndjp第1回
IoTSecJP東京
第2回 ハニーポッター技術交流会
Vimconf2017
AVTOKYO
濱せっく
「社会人のための IoT入門」 ~150分でIoTを実感するハンズオン
「社会人のための IoT実践180分」 ~ 2つの「モノ」でIoTを実証するハンズオン
これはやっておいてよかったと思う事
シェル芸
理由:
黒い画面で暮らすのがとても楽になったし、好きになれた。
とても強力な処理が可能。
自分のコマンド結果が出るまで一瞬なので、プログラミングの練習にちょうどいい。(Hello World出すまでに環境設定で挫折してあぼーんなんてことは絶対ない。)
便利な処理はエイリアスやシェルスクリプトとしてまとめておくことができ、気軽に再利用できて捗る。
正規表現に慣れる事ができる。
セキュリティの勉強
理由:
多方面の知識が身につく。たとえば、コンパイラ、デバッガ、CPUとメモリの関係、アセンブラ、文字コード、名前解決、パケットの構成、認証、様々なプロトコルetc.を半強制的に学べる。
16進数と2進数に耐性がつく。
vimの利用
理由:
vimシェル芸の際に役立つ。
プラグインがとても豊富かつ管理が簡単(vim8以降でgit submodule addを利用。)
vim ファイル名 と打つだけでプログラミングが始められるようになる。
この後やりたいこと
CとPythonでexploitコードを記述する練習
セキュリティツールの利用の練習
ハニーポットの運用で生データを集める
集めた生データを攻撃毎に分類しGUI上に表示する(機械学習を利用)