SE歴が1年経ったのでおすすめの教本を勧める。

SE歴が1年経ったのでおすすめの教本を勧める。

わいはSEじゃなくてWEB系やーーーーーー!!!!世間の人たちに僕の勤めている会社はSIかWebかどちらでしょうと聞くとたぶん後者と答えるひとが多いと思う。でもシステムの規模はなかなか大きい上、使っている技術もどちらかといえばSE寄りなので一応SEということにしておく。

ぶっちゃけ1年めということもあって有名ドコロばかりだけど許しておくれ。簡単な感想付き。 あと働き始めはビジネス研修等も多かったから、世間のIT系よりもITに対するコミット率はあまり高くないです。 じゃあそんなところで。

所々Amazonアフィ貼ってます。

HTML、CSS

神。この本はhtml,cssをどう書くかというプログラミングの話とデザインの話に大別できる(とりまhtml,cssもプログラミングと呼ばせていただきます)。
まずは前者の話。まず、一冊ですべて身につくというのは語弊があると思う。むしろhtml,cssを何も知らない読者が自走できるところまで最低限連れて行ってくれる本であると僕は感じた。例えばfloatの話をバッサリカットし、レイアウトはグリットレイアウト一本に絞るなど。しかしながら、本質的に必要な部分は抜けがなく、この本で習う知識があればきちんと自走できるようになるはず。ここでいう自走とは、壁にぶち当たったときに何がわかっていて何がわからないかを把握でき、適切に問題を対処することとする。それこそ古いシステムを触る上でfloat等は避けて通れないが、この本をマスターしたならば、floatくらいググりながら柔軟に対応できるようになるでしょう。
後者の話。こちらも配色の理論の話から、フリー素材の探し方、デザインツールの使い方まで細かな気遣いにあふれており、まだフロントをやるかバックをやるか決めていないレベルのプログラマーなら十分すぎるほどの知識がつくはず。
駆け出しエンジニアに必要なスキルが必要十分に詰まった本書は必携だと思う。

JavaScript

欠番です。いい本あったら教えて下さい。有名どころでいえば『改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで 』とかになるのだろうが、当時ECMAScript2015を体系的に初心者向けに書いてある書籍がこれしかなかったからよく名前が挙がるのかなと勝手に思っている。特にわかりやすいと思わなかったけど、悪いとも思わないので星3くらい。JavaScriptでいうと『JavaScript Primer 迷わないための入門書 』が特に気になっている。

Java

初心者向けのJavaの本はカオスの様相を呈しており、クラスの概念でわけのわからん喩え話によってワナビーを納得させようとメタパニを連発してくるような本が多い中で、結城先生の本は正面から向き合って教えてくれる。惜しむらくはJavaのバージョンが古いので、ラムダ式などJava8以降の補完を自らやらなければならないところ。改訂版をだしてくれー!!!!まあその代わりメルカリで3桁円で購入できるポテンシャルがあるので、手元に持っておいて損はないと思う。

洋書。僕のバイブル。圧倒的記述量でかゆいところに手が届く感じがGood. 僕は大学院生活明けの春休みにまとまった時間がとれたこともあり大部読んだが、真剣に向き合うと時間を食うので、わからないところや理解を補完したいところをリファーする感じで使うといいかもしれない。なんかネットの海にpdfが落ちてた。

Javaの登竜門的な本。目次眺めるだけで学びがある。僕自身何度か読み、わからないところは手元環境で再現したが、具体例のコードはなんでそれを例として選んだし...というなんか無駄にマニアックで難易度が高いので初心者が読むのに苦労するし、実際のコードや体験談がないと腹落ちして理解することができないので、きっと何回も読んで理解していくんだろうなーと思っています。こういう性質の本なので輪読会を開催するのがおすすめ。余談だけどシリアライズの章の第一項目が「Javaのシリアライズよりも代替手段を選ぶ」なのめっちゃジワる。

神。昨今「デザパタ(笑)使わなくてもプログラマーやっていけるよ(笑)」みたいな声も聞こえてきますが、デザインパターンを勉強しないという意見には僕は2つの理由で反対する。
1つ目は、フレームワーク等でデザインパターンの概念はきっちり使われている。例えばSpringのautowiredではシングルトンパターンが使われていたり...だからこいつに状態をもたせたらバグるとかそのあたりに考えを及ばせるためにもGoFの23パターンくらいは眺めておくべきだと思う。
2つ目は適切なクラス設計を学べることです。ぶっちゃけて言えば、理論上クラス一つでシステムを表現できます。しかしあえてなぜクラスを分割するのか、しなければならないのか、どういう思想でクラスを分割するべきなのか、どのメソッドを公開して、どれを秘匿するのか、などの考えは駆け出しのうちはなかなか理解しにくい部分だと思う。デザインパターンとは、先人のハウツーが詰まっているので当然そこには設計思想が存在する。そういう思想にたくさん触れることによってきれいなコードや思想のあるコードが書けるようになるのだと僕は考えています。
結城先生の本も断然おすすめなのだが、本家(GoFも評判が高いようだ(感想求む!!)

良きです。どういうことに意識すれば保守・エンハンスが楽になるかが学べるだけでなく、やはりどのようにコードを書くべきなのかを学べる良書。だがリファクタといえばこちらが有名か?新版になって新登場なのでこちらも感想ほしい。

  • Java余談

Javaで個人的に気になってるのは谷本他(2017)『Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで』と山田(2019) 『独習Java 新版 』あたり。両方700Pを超えている模様。独習シリーズと言えばそもそも海外のTeach Yourself(独習)シリーズの翻訳版であり、Javaも元々はジョセフ・オニールという人が書いていたはず。看板だけもらって日本のライターが新規で執筆しているあたり業界の闇を勝手に感じています( ´ー`)
あとなんだかんだJava Silverの試験を勉強するのはおすすめです。ぶっちゃけこの資格もっていても就職に有利になるとかはないけど、子クラスのコンストラクタと親クラスのコンストラクタの呼び出し順序どうなってたんだっけとか、for文のiの更新ってどのタイミングで行われるんだっけみたいな、知っておいたほうがいいがなかなか学ぶ機会のない知識をアップグレードできます。この本から8割近くの問題が一文字違わずでるから、これ完璧に理解したら落ちるということはまずないです。合格最低点が60点だけど僕は93点とかでした。僕がすごいのではなく、誇張抜きでこの本からまるまる同じ問題が出たからです。

Python

Pythonの入門書ならこれ一択。ごまかしのない硬派な一冊。実はPython固有の話題は本書の半分程度にとどまっており、あとは文字コードとかWebスクレイピングとか、プログラミング言語のみを習得しようとするとどうしても抜け落ちがちな知識も補完してくれる、射程の長い本。ただ、高階関数とかラムダ式の話題が皆無に等しいところが不満点。

Pythonを学んだら何ができるようになるかをオムニバスで教えてくれる本書。僕も日々の業務のエクセル操作はだいたいPythonにやらせています。あとは勤怠の打刻もPythonで自動化してる。コピペで動かすだけならエラー処理しながらできると思うけど、どう日々の生活に活かすかを考えるのにはセンスが必要。それを考えるのも楽しいので合わせておすすめ。

もしあなたがプログラミング未経験者で「プログラミング・Pythonでなんかかっこいいことやってみたい!!」と考えているのであれば僕はWebスクレイピングをおすすめする。一度「Python スクレイピング」でググってQiitaなんかの記事を参考にしつつ、なにか情報をとってみてもらいたい。すごく「プログラミングやってる感」でるのでモチベーションが奮起されます。ただし法律には気をつけようね。ただ、やっぱりいろいろ応用したい(認証突破したいなど)と思ったらWebの知識がどうしても必要になるので、その時は一度Webに関して学びを深めることがおすすめします。本書はそんなスクレイピングの本。体系的にまとまっているだけでなくフレームワーク「Scrapy」の解説もあり、とても情報密度の高い本です。おすすめ。

C/C++

書籍ではないのだが...みんなおなじみAPG4b。これ、とても質が高いと思っています。これこなしてABCのAB埋めあたりを適当にやればあとは勝手に書籍で自走できるようになると思う。ぶっちゃけC/C++は僕自身あまり勉強していないのでわからないっす...

データ構造・アルゴリズム

データ構造って何?アルゴリズムって何?という人に強くおすすめ。図解でとてもわかり易く書かれており、一度アルゴリズムに挫折した人にこそ手にとってもらいたい。蟻本挫折勢にもおすすめ。あと、蟻本や教プロだけだとどうしても有名どころのアルゴリズムを取りこぼしてしますので(例えばソートの種類何個いえますか?ソートはどのように計算量を落としているか知っていますか?)、それを補完する意味でもおすすめ。データ構造・アルゴリズムの他にも暗号理論にもちょろっと触れられており、暗号鍵の理論についての理解を深めるのに役立つと思う。中身はとても良い本だと思うが、図鑑という性質上どうしてもコストパフォーマンスが悪い気がする。図書館にあったらぜひ借りてみよう。

言わずと知れた蟻本。競技プログラミングというネットゲームにおける壮大なチュートリアル。持論だけどやっぱり競プロをやる上で物理かつ体系的なリファレンスがあると勉強が捗る。ただし、純粋にデータ構造・アルゴリズムを学びたいなら多分蟻本より断然螺旋本になるんだろうなーと思ってる。僕もいつかは螺旋本やりたい。

データベース

名前に偽りなし。クエリ叩くだけならこの本で必要十分なんじゃあ...かゆいとろこに手が届く親切な説明がありがたい。SQLはなんかしっくりこないものが多かったけど、この本はとてもわかり易かったです。強いて言えば物理でほしかったすね。現状はpdfでしか手に入らないので。

こちらはDBの設計に関わる本。主に冗長性の話と正規化、設計のアンチパターンの紹介がメイン。正規化ってどういうものだったっけ?と思い始めたくらいの人が面と向かって読むにはレベル感的にも説明の丁寧さ的にもいい感じです。名前的に若干いかつさを感じるが、特に難易度が高いというわけではなかったです。

データベースを集合論の立場から解読する本。僕もあまり詳しくないのだが、データベースの理論のベースは、数学の集合論を用いられているらしい。だから、データベースの各操作が数学の集合論の概念に置き換えられるのだが、その事実は僕にとって目からウロコだった。クエリの操作もそうだが、そのような立場から正規化の話が語られるので、データベースに対する視野がかなり広がったのを感じた。筆者の主張強め。だけどおすすめです。

セキュリティ

暗号技術に関して少し踏み込んだ内容。例えば公開鍵や認証の仕組みについて概念的に知っている人は多いだろうが、具体的にどんな数学(ロジック)を使って実現しているかまで知っている人は少ないのではないだろうか。そういう、ふわっと知っている暗号技術に関する解像度を一段階高めてくれる本。使われている数学も高校数学の内容がわかれば十分キャッチアップ可能だと思う。暗号技術の本なのに読んでてスリリングな本です。

正直セキュリティー全般に関する本で良い本だと思える書籍に出会えなかったので、OWASPのサイトを紹介しておきます。OWASPとはソフトウェアのセキュリティ向上のためのコミュニティのことです。Webアプリケーションを作る上で、セキュリティ面で気をつけなければならないことはたくさんあるけど、予備知識がないとなかなか腹落ちして理解することが難しい。特にcsrfはセッションとステートレス性の概念を知っていないと絶対理解できないのに、そこに関する補足をしてくれている本やサイトはほとんどみかけなかった記憶。csrfは普通に難しい概念だと個人的に思っています。だが、OWASPの解説(特に具体例)がかなりわかりやすく、やっとcsrfの攻撃方法と対処法(どうしてそれで防げるのか)がわかったので他の攻撃手法に関してもOWASPの解説を読んで理解しました。セキュリティに関して、概念はとりあえず理解してるけどフワッとしているなと感じているならば、各論的に参照することをお勧めします。

ビジネス書

本書のタイトルだけ読んだら「あーSIの下請構造の話かな?」とか「アジャイル...?」みたいな感想を抱いてしまうかも知れませんが、実は組織の運営全般に関わる話でかなり一般性の高い話です。それもそのはず、ここでいうエンジニアリングとはいわゆるエンジニアとは関係がないからです。本書でのエンジニアリングの定義について引用してみます。

それは誰かの曖昧な要求からスタートし、それが具体的で明確な何かに変わっていく過程が実現で、その過程すべてがエンジニアリングという行為です。 つまり、「曖昧さ」を減らし、「具体性・明確さ」を増やす行為が「エンジニアリングとは何か?」という答えでもあるのです。(P11より)

ここで述べられているように、この本の本質は「どう曖昧さに対処していくか」にあります。なにかのプロジェクトで発生しうる「曖昧さ」つまり「不確実性」は何が由来で発生するのか、どういった態度でこの不確実性に対処していけばよいのかが体系的に書かれています。また、章立て的にまずは個人(組織の1メンバー)として知るべき事柄から始まり、最終的には組織運営の話で帰結するので、プロジェクトマネジメントに興味ない人でも最初の方の章から色々学ぶことが多いと思う。
繰り返しになりますが、この本はエンジニアの知識の流用こそあるものの、本質的にエンジニアであることは関係のない「組織論」または『プロジェクトマネジメント(如何に計画通りに成果物を作成するか)』の本なので、非IT、非エンジニアのひとにもぜひ読んでいただきたい。

広木(2018)がプロジェクトマネジメントの本だと強引にまとめるならばこちらはいわばプロダクトマネジメントの本であると強引にまとめてみる。仕事をゲームのアナロジーとして捉えることで、おもしろくてうまくいくゲームとそうでない仕事との対比を明らかにして、仕事をおもしろくてうまくいくようにするにはどうしたらいいかを捉え直し、ゲーム(すなわち仕事)の攻略法を探っていこうという本。仕事の各シーンにおけるゲームとの類似性、ゲームからの攻略法を輸入したりして読んでいて面白い。また、ビジネス書のフレームワーク図鑑としての一面もあるので、一般的なビジネス書を読まない人こそ一気に自分をアップデートできる思う。この値段でこの射程の広さと深さは異常では...??と考えてしまうほどコスパに優れた本。それもそのはず、この本は他の出版社に持ち込んだところページ数を減らしてくれとか構成を変えてくれと言われた結果、この本のために出版社を作ってしまったというのだ(本書P295より)。それほど熱意溢れた本書、おすすめです。

僕が新たな視点から書評できることはもうないのではないかと思わずにはいられない、いい意味で手垢に付きまくった本書。書評は他サイトに譲ります。田宮・西山(2019)でも大いに引用されているよ( ´ー`)。

著者はたまにネットでプチ炎上している田所ニキ。本書もなんか「海外の〇〇の焼き回しだー」みたいな声を聞いたことあるけど、それを踏まえても本書から得るものは大きい。本書はリーンスタートアップのフレームワークをベースに、プロダクトの着想の練り方からグロースさせるまで、各フェーズでどのようなことを意識したほうがよいのかがかなり具体的に書かれてある。さすが科学を名乗るだけはある。また、事例紹介も豊富で、プロダクト図鑑としても楽しめると思う。中身の濃いい本(中身の薄い本なんてそもそも紹介しないですが...)
起業家とか関係なく、ビジネスの見聞を深めたい人全員におすすめできる本です。

その他

『この一冊で全部わかる』シリーズ

このシリーズめっちゃおすすめです。ターゲットは本当にIT初心者。このレベルは教養として非IT系の人も知っておいたほうがよいなーと思った。学生の頃の僕に一冊渡せるなら間違いなく小林他になると思う。Webやプログラミング興味あるが経験のないパソコン好きの人におすすめです。内容もいい意味で低レベルなので、雑学本みたいな感じでさくさく読めていい感じ。ネットワークのやつだけちょっとハードル高いかも。

WEB+DB PRESS plus 系

僕このシリーズ大好きなんすよ

Webの歴史の概略から始まり、REST・SOAPの闘争、URIの設計、HTTPメソッドの設計、ハイパーメディアフォーマットまで学べる、Web知識を何段も深く理解を深められる本。というフワッとした書き振りから察していただいていると思うが、正直完璧に理解したとは言い難いです🥺。あまり業務でAPIの設計とか絡んだことないからだと思う。ただ、最近FEのフレームワークを触る機会が増えてきて初めてRESTfulなAPI設計とか考えるようになって本書の価値を見出せつつあります。理解するのがなかなか難しいですが、読んでいて楽しい本だったので背伸びしてみるのも良いと思う。API周りなら『Web API: The Good Parts』がとてもよかったです。

本稿読者諸賢はコンピュータの計算が0と1の組み合わせで表現されていることはご存知だと思う。だが、浮動小数点をどのように0と1だけで表現するかご存知だろうか?あとはなぜC++のint と long long では扱える整数の大きさが異なるのか。なぜintで扱える最大値が2147483647なのか考えたことが有るだろうか。何故メモリのスタック領域は"スタック"領域と呼ぶのか?関数の成り立ちは?など、普通にプログラミングを勉強しているだけであれば「おまじない」とか「そういうもん」とかで片付けられてしまうような事柄に歴史的な経緯を説明しつつ、単純明快に解き明かす本書。これを読めば思わぬバグを減らせることができること請け合いです。

ビジネス書におこうか悩んだけどこっちに置くことにしました。『コーディングを支える技術』の著者が送る知的生産の方法に関する本。質の高いアウトプットを量産するためにインプット時に意識するべきこと、学んだことをどうまとめるのか、どうアウトプットの形にまとめるのかについてが一気通貫で学ぶことができる。そして中身が濃いい。広木(2018)や田宮・西山(2019)もそうだが、エンジニアの書籍は総じて中身が濃いく、体系的に簡潔にまとまっているので読んでいてなぜか知的欲求が満たされる。こちらもエンジニア関係ないので一般読者にもおすすめ。

アカスネが選ぶ、「先輩エンジニアが後輩エンジニアに勧めたい本No1」をみごと受賞した本書。僕はこの本はエンジニア界におけるパンフレットみたいなものだと思う。その心は、この本は「心」を学ぶ本だからです。本書は副題にある通り「シンプルで実践的な」コードを書くための本であるが、シンプルで実践的とはなんだろうか?先に僕の答えを言うと「あかの他人(または将来の自分)が読んだりリファクタをする際に極力精神的負担をかけない」コードということになる。このようなコードを書くために何を意識したら良いかが痛いほど伝わってくる。
冊子自体は割と薄いし行間も広い本ではあるが、リーダブルなコードを書く上でどのようなことを意識したらよいか、意識しなければどのような悲劇に見舞われるか、どのようなコードならそのような悲劇を回避できるかが痛いほど学べる。ただし、繰り返しになるが、割と薄い本だし、行間も広いので、方法論を網羅し切れているかと言うと微妙だと思う。ただ、その薄さ、伝えたい思想などが初心者向けにはちょうど良すぎるので「方法論」というよりは「心得」を学ぶような使い方が最適なんだろうなと考え、「心を学ぶ本である」と表現しました。また、抽象的と言うことは、そこから独自に解釈を広げられるとも言えるので、新人でなくなった身分で本書を読むとまた新たな発見があるでしょう。

 おわりに

つかれた。まだとりこぼしあるきがするけど、伝えたい本は伝えられたつもりなのでとりこぼしがあったらまた機会を見つけて記事書きます。要件定義関係とかプロジェクトマネジメント系の本とかはあまり紹介できなかったのでまたの機会に。あとgitもか。

arrow_back

Previous

Gatsby でブログ作ってみました

Next

ラムダはいいぞ
arrow_forward