ITエンジニアとしての経歴、5割以上読んだ技術書（自己紹介用）

自己紹介用の記事です。
私の技術レベルを把握してもらうために、書きました。

2割増しで見栄が入っていると思いますが、嘘は言っていないはず。

半年ごとにメンテします。

# ITエンジニアとしての経歴

## 学生時代

### 2006年（大学1年生）
* 親の薦めで大学生協のカタログに載っていたノートPCを買う。 [FMV-BIBLO　MG55R/T](https://www.fmworld.net/product/hard/pcpm0512/biblo_loox/mg/method/index.html) （WindowsXP, メモリ512MB、PentiumM）この頃、パソコンに興味なし。
* みんなやってたmixi（SNS）を始める（当時は招待制）
* 大学の授業でVisual Basicを2日間触る。プログラミングに少し興味を持つ。

### 2007年（大学2年生）
* モノづくりサークル（学生フォーミュラ）で3D CAD(Solid Works)を使う。3Dに感動する。パソコンの操作に慣れてくる。
* サークルでプログラミングしている人（ECU）やサイトを作っている人に対して、「すごいな」と憧れるようになる。
* 画像共有サイト(Picasa）を使う。

### 2008年（大学3年生）
コンピュータに興味を持ち始める。

* サークルのホームページをイチから作成する。相談できる人がいなくて、ほぼ手探り。
    - HTML(XHTML), CSS（JavaScriptは使っていない）
    - 「『Web標準の教科書』秀和システム」を読んで、標準を気にする
        + `<br />`とか
    - CSSの`float`に苦しむ。カラムレイアウト難しい
    - FileZillaでHTML,CSSファイルをサーバに配置
* 成人サイトを見るようになる（実家）
    - 家族が来たときにそなえて、`Win+D`, `Alt+Tab`などのショートカットを重宝する
    - ショートカットキーを覚えるため、ショートカットキーのカンペをトイレに貼る
    - 家族がPCを使っても問題ないようにするため、ブラウザの履歴やWindowsの共有設定などを意識する

### 2009年（大学4年生）
量子化学の研究室に所属し、FortranとLinuxを学ぶ

* 教授からLinuxを教わる
   - 教授曰く「Microsoft信者になるな」と。（うろおぼえ）
   - ノートPCにUbuntuをインストールする。いろいろハマる
        + アップグレードしたら起動しなくなった
        + Ubuntu削除したらWindowsが起動できなくなった（MBRを修正してしまったため）
    - いろんなディストリビューションを、とりあえずインストールしてみる
        + CentOS, Fedra, Vine, Puppy Linuxなど
        + なんだかんだでUbuntuが一番ラクという判断を下し、Ubuntuに決める

    - 「『Linuxコマンド ビギナーズブック』翔泳社」で、コマンドを1個ずつ試す。
    - CUI操作に憧れる
        + 当時連載していた「Bloody Monday」というハッカーが主役の漫画に、影響を受ける
        + 意味もなく仮想コンソール（`Ctrl+Alt+F1~F6`）で、操作する
    
* 教授からEmacsを教わる
   - 教授曰く「Emacsは何でもできる」
   - 教授曰く「Emacsのキーバインドは、shellと同じ」

* Fortran77を学ぶ
    - 学んだだけ。コードは書いていない。
    - 教授よ、なぜFortran90でなくFortran77を勧めた
        + F77は桁位置に依存
        + https://ja.wikipedia.org/wiki/FORTRAN_77%E3%81%AE%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98

* 動画に興味を持つ
    + DVDを`dd`コマンドでコピー(iso形式)
    + DVDリッピングソフトを使う（DVD Decrypt, DVD Shrink）
    + ネットからダウンロードした動画をDVDに焼く
    + 動画形式、難しい

* フリーソフトに興味を持つ
    + 「フリーソフト500選」という本を購入して、おもしろそうなソフトをインストールする
    + VLC Media Player, Gimp, Sakura Editor, Em Editorなど

* PCの高速化に興味を持つ
    - メモリ増加
    - デフラグ
    - スタートアップの設定変更
    - Windowx XPクラシックモード

### 2010年（大学院1年）
他大学の大学院に進学。量子化学の研究室に所属し、FortranとLinuxを学ぶ

* 自作PCにトライ
    - 最低スペック（OS除いて3～4万円）
    - パーツは店員さんに選んでもらった
    - ディスプレイは、大学で拾ってきた15インチディスプレイ
    - OSはUbuntu

* Fortran90(Intel Fortran)でプログラミング
   - エディタはEmacs
   - Makefile使用
   - デバッグはprint
   
* MathematicaやMaximaを少し触る
    - Mathematicaのグラフ表示便利！
* C言語を学ぶ
   - ポインタぜんぜん分からん
* 応用情報処理試験を受けるが、午前で落ちる
    - データベースやネットワークが全然分からなかった

### 2011年（大学院2年）

* Emacsをカスタマイズするようになる
    - 「『Emacsテクニックバイブル』技術評論社」で、カスタマイズする
        + インストールするだけ。Lispは書いていない
    - いろいろ設定して思ったこと「デフォルトのキーバインドがまともなソフトを使った方がいいのでは？」

* LaTeXを使う
   - 数式が書けるのすごい！
   - Emacs用のYaTeXを使う

* アメーバピグにハマる
    - アイコンは当時に作成したもの

* 応用情報処理試験を受けるが、午後で落ちる

* CPUファンの埃を取るため、ノートPCの分解を行う
    - ノートPCが熱すぎるため、CPUファンの埃を取る必要があると判断した
    - 埃は除去できたが、ノートPCは熱いまま
    - この「分解経験」が、のちにThinkPadを買うことにつながる


## 社会人時代（会社I）
* 独立系SIerに入社
    - 従業員数300～400人
    

### 2012年4～6月（新人研修）
* Excelでフローチャートを作成（1日）
    - 閏年計算のフローチャートなど
    - Excelで図を描くことが、面倒であることを知る。これ意味ある？
* C言語を学ぶ（1カ月）
   - Visual Studio 2010を使用。
       + IDEの存在を知る。デバッガ便利
       + 学生時代、コンソールで開発していたのは何だったのか？！
    - ポインタを理解する
    - 文字列処理、めんどい
    - 演習は、「設計、プログラミング、テスト」のウォータウォール開発
    - Wordで詳細設計書を書くことが、面倒であることを知る
        + ループやif文を文章で書くの、難しい。これ意味ある？
    - プログラミングが終わるまで、実行してはいけない
        - http://blog.jnito.com/entry/2015/02/25/141900
    - 関数の途中でreturnしてはいけない
        + http://d.hatena.ne.jp/eel3/20121225/1356443485
* Javaを学ぶ（0.5カ月）
    - Eclipse使用。
    - メモリ気しなくていいの、便利
    - getter, setterの必要性が分からない
    - 「車」の例えで、オブジェクト指向を知る
* 4～5人のチームで、Androidアプリを作る（1カ月）
    - Android全然分からん。XML, Activityなどなど。
    - Eclipseプラグインのエミュレータ、遅い
    - とりあずアプリはできた。なんだかんだで楽しかったし、意味はあったと思う
    - 退職するまでの6年間、Androidアプリのお仕事は一度もありませんでした。
       
### 2012年（入社1年目）
* Excel VBAで、グラフ描画アプリを作る
    - Visual Basic Editor、使いづらい。
       + マウスホイールのスクロールが効かないし。http://blueskynet.seesaa.net/article/34501807.html
    - バージョン管理は、ファイル名に日付と連番
        + ソースの差分も分からん
    - Excel VBAの便利さを知れた

* 応用情報処理試験に合格！

### 2013年（入社2年目）
* Software Designを年間購読してみる
   - 全然わからん
   - 興味ある特集のときだけ、購入しよう

* CAD/CAM開発のプロジェクトに所属する
    - 20年以上開発が続く、C/C++で書かれたアプリ(Visual C++)
    - C++という名のC言語
    - 構造体のアライメントを意識する
    - 1ファイル2000～3000行
        + ソースコードの約1/3が、修正履歴として残っているコメント文
    - nullで落ちたときに責任を追及されないよう、とりあえずnullチェックする
    - コードを書くより、影響範囲を調べている時間の方が長かった

* ThinkPad X220を購入
   - 武骨なところが好き。「丸み」という媚がない。
   - キーが打ちやすい
   - 分解しやすい（マニュアルあり）
   

### 2014年（入社3年目）
* 社内Webシステム開発のプロジェクトに所属する
* Webの用語、ぜんぜんわからん
   - request, response
   - Spring用語（AOP, DI, Autowired）
   - Struts用語（Actionとか）
   - ビジネスロジック

#### 社内Webシステム(Terasoluna)の環境
* データを登録して一覧形式で表示するシステム
* Java7/8, PostgreSQL9.4, HTML5, CSS3, JavaScript(ES5)
* TERASOLUNA Server Framework for Java(struts, springベース. NTTデータ製)
    - Spring3系
    - commonsLog, log4j
    - lombok
    - iBatis2
* Bootstrap3/4
* jQuery UI
* Pure JavaScript
    - jQuery, tablesorter, lodash
* サーバ環境
* Windows Server 2012
     - Tomcat 8
     - Apache 2.2
     - pgAdmin3
* 開発環境
    - Git (TortoiseGit)
    - Eclipse4.6
    - IE11, Firefoxサポート

### 2015年（入社4年目）
* Webがだんだん分かってくる

* 2000年頃に作られたWebシステムの、老朽更新プロジェクトに少し関わる
    - 独自フレームワーク
    - Java5? ジェネリックが使われていなかった
    - クソコード/クソ設計に出会う

* Markdownを知る
    - ドキュメントをmdで書くようになる

* [ITProに掲載さているSEの小説](http://el.jibun.atmarkit.co.jp/pressenter/)を読み、今の職場に疑問を感じるようになる

### 2016年（入社5年目）
* 仕事でSeleniumを検討する
    - IE11、期待通り動かない。つらい
    - 自動登録には使えそう
    - IDが重複している画面だとSelenium使いにくい

* 勉強会に初めて参加する
    - まどべんよっかいち
    - WCAN
    - 高校生の発表や、サンデープログラマの発表を聴き、衝撃を受ける（今まで私は何やってきたたんだろうか？）


### 2017年（入社6年目）
* ThinkPad T460sを購入

* Spring BootでWebシステムを開発

* ハッカソンに初めて参加する
    - SPAJAM予選
    - MashupAwards ハッカソン

* 勉強会で発表する
    - [新卒でもわかるソフトウェア開発技術書の良書の見分け方 ](https://qiita.com/yuji38kwmt/items/7609cba9d104b383d80f)
   - [チーム内勉強会はじめました (WCAN 2017 Summer LT)](https://qiita.com/yuji38kwmt/items/da80f4822d6297cc5553)

* チーム内で勉強会を開催する

* [豊田市でもくもく会](https://toyota-it-benkyokai.connpass.com/)を開催

* O社主催の勉強会に参加し、O社の中の人の技術力の高さに衝撃を受ける
    - 今までも技術力の高い人に出会ってきたが、年齢や業界が違う(Web業界)ということで、あまり意識してこなかった（ヨソはヨソ、ウチはウチ）
    - 自分と同じ年齢、同じ業界で働く「技術力の高い人たち」を見て、「こういう人たちがたくさんいる会社で働きたい」と思うようになった  
     ⇒ 転職を志した
   


## 2018年 転職
AIベンチャー企業に転職.

* ドキュメント共有としてConflucenを使用。
    - Excelでドキュメントを書く必要がない！
    - 論理構造を持った文章が書きやすい！
* メッセンジャーで会話
* リモートワークOK
* 皆、技術レベルが高い！

### 2018年
* Scalaで書かれたシステムを少し修正
* AWSのEC2を使用
* Dockerを使う
* Pythonでデータ可視化
    - bokeh, Jupyter Notebook, pandasなど
* レポート作成業務？
* puppeteerでブラウザの操作を自動化

### 2019年
* openapi-generatorを使って、Pythonのクライアントライブラリを作成。PyPIに登録。
* 「検索技術の基礎」本を少し読む





# 5割以上読んだ技術書

技術書を買うのが趣味です。
技術書を読んだだけでは、何かができる訳ではありません。
それでも、技術レベルを測るための１つのパラメータにはなるかと思います。

「Javaができます」と言うよりは、「Effective Javaを7割読みました」と言った方が、レベル感が伝わる気がします。



| 技術書                                                                      | 何割読んだか | 読んだ年 |
|-----------------------------------------------------------------------------|--------------|----------|
| 『Web標準の教科書』秀和システム                                             | 7            | 2008     |
| 『Linuxコマンド ビギナーズブック』翔泳社                                    | 6            | 2009     |
| 『Emacsテクニックバイブル』技術評論社                                       | 5            | 2011     |
| 『UNIXシェルスクリプトコマンドブック』                                      | 5            | 2011     |
| 『正規表現辞典 』翔泳社                                                     | 5            | 2011     |
| 『明解C言語 入門編』SBクリエイティブ                                        | 10           | 2012     |
| 『C/C++プログラミングの「迷信」と「誤解」』技術評論社                       | 5            | 2013     |
| 『Lepton先生のCの強化書』翔泳社                                             | 5            | 2013     |
| 『Effetive Java第2版』丸善                                                  | 6            | 2015     |
| 『Gitによるバージョン管理』オーム社                                         | 5            | 2015     |
| 『JavaScript 第6版』 O'Reilly                                               | 10           | 2015     |
| 『JUnit実践入門』技術評論社                                                 | 7            | 2015     |
| 『SQLアンチパターン』O'Reilly                                               | 5            | 2015     |
| 『理論から学ぶデータベース実践入門』技術評論社                              | 5            | 2015     |
| 『良いコードを書く技術』技術評論社                                          | 5            | 2015     |
| 『Selenium 実践入門』技術評論社                                             | 8            | 2016     |
| 『Seleniumデザインパターン & ベストプラクティス』O'Reilly                   | 8            | 2016     |
| 『SQL実践入門』技術評論社                                                   | 7            | 2016     |
| 『プログラマのための文字コード技術入門』技術評論社                          | 10           | 2016     |
| 『演習で力がつく HTML/CSS コーディングの教科書』SB Creative                 | 9            | 2016     |
| 『Webを支える技術』技術評論社                                               | 7            | 2016     |
| 『Gitが、おもしろいほどわかる基本の使い方33』MdN                            | 8            | 2017     |
| 『Java本格入門』技術評論社                                                  | 8            | 2017     |
| 『システムテスト自動化 標準ガイド』翔泳社                                   | 8            | 2017     |
| 『正規表現 技術入門』技術評論社                                             | 5            | 2017     |
| 『ゼロから作るDeep Learning』O'Reilly                                       | 8            | 2017     |
| 『はじめてのAndroidプログラミング』SBクリエイティブ                         | 9            | 2017     |
| 『達人に学ぶDB設計 徹底指南書 』翔泳社                                      | 8            | 2017     |
| 『改訂新版JavaScript本格入門』技術評論社                                    | 6            | 2017     |
| 『知識ゼロから学ぶソフトウェアテスト』翔泳社                                | 10           | 2017     |
|『Real World HTTP』O'Reilly | 7 | 2017 |
| 『リーダブルコード』O'Reilly                                                | 10           | 2017     |
| 『Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門』翔泳社 | 8       | 2018     |
| 『Scalaスケーラブルプログラミング第2版』インプレス                          | 3       | 2018     |
| 『Unityの教科書』SB Creative                                                | 10       | 2018     |
| [『プログラマのためのDocker教科書』翔泳社](https://www.shoeisha.co.jp/book/detail/9784798153223)                                    | 5       | 2018     |
| 『Spring徹底入門 』翔泳社                                                   | 8            | 2018     |
| Pythonデータサイエンティストハンドブック                    | 4       | 2018     |
| 情報検索の基礎                    | 4       | 2019     |
| 『オブジェクト指向UIデザイン』技術評論社                    | 10       | 2020     |
| 『はじめてのUIデザイン』技術評論社                    | 10       | 2020     |
| 『UIデザインの教科書』翔泳社                    | 10       | 2020     |
| 『パケットキャプチャの教科書』SBクリエイティブ                    | 10       | 2022     |
| 『TCP技術入門』技術評論社                   | 10       | 2022     |
| 『UXライティングの教科書』翔泳社                   | 10       | 2022     |

# 勉強会で発表したときの資料


| 発表日  |タイトル |勉強会|
|----------|--------------|---|
|2016/07|[テスト自動化ツール[Selenium]を検討してみて](https://www.slideshare.net/ssuser71a8fa/selenium-64322405)|第15回まどべんよっかいち|
|2017/02|[新人さんに知ってほしい「文字コードのお話」](https://qiita.com/yuji38kwmt/items/b3a7820b4d3b544da4ff)|名古屋マークアップ勉強会 2/18|
|2017/05|[私の技術書の選び方](https://qiita.com/yuji38kwmt/items/7609cba9d104b383d80f)|新卒でもわかるソフトウェア開発技術書の良書の見分け方|
|2017/07|[チーム内勉強会はじめました](https://qiita.com/yuji38kwmt/items/da80f4822d6297cc5553)|WCAN 2017 Summer |
|2018/03|[col要素のspan属性値を変更するとIE11が強制終了する話](https://qiita.com/yuji38kwmt/items/d6d10d059677a73af651)|第3回名古屋若手Webエンジニア交流会|
|2018/04|[Java7からJava8に移行した際にClassCastException発生](https://qiita.com/yuji38kwmt/items/c6338b352dd39f8e7cf6)|名古屋Javaユーザグループ 2018年4月|
|2018/05|[ImageMagickで変換したBMP画像を、Go言語で読み込んだら「bmp: unsupported BMP image」と言われた](https://qiita.com/yuji38kwmt/items/ae04b861b1958df02212)|第4回名古屋若手Webエンジニア交流会|
|2018/07|[PythonでBokehて](https://qiita.com/yuji38kwmt/items/4edf1d87568a860fc3b8)| Python東海|



# 自分の中では得意な技術
* Pure JavaScript(ただしES5)
* Java8
* jQuery


# まとめ
* コンピュータに興味を持ち始めたきっかけが、リビドー（[リビドー駆動開発](http://blog.yusuke.be/entries/2007/10/05)）
* インストール厨
* 技術書を買うのが趣味
* 何かを1個ずつ試すのが好き
* サービスやアプリを作ったことがない。今年は何か作りたい！