まっつーのブログ

本の感想や振り返りなど雑多に書いてます

【感想】達人プログラマー(第2版)を読んだ

ITエンジニア本大賞2022の技術書部門大賞を受賞していたので、興味が出て読んでみました。 感想としては、評判通りの名著だなと。 生産性を向上させ、効率的に仕事を進めていく上での大切な心構えがまとまっていました。 100個ものTipsがありますが、一つ一つが簡潔にまとめられているため、好きなタイミングに読めるのもよかったです。 今回は特に印象的だったTipsを3つほど、感想とともにまとめてみました。

Tip 15 DRY Don’t Repeat Yourself(繰り返しを避けること)

普段Railsで開発しているので、DRYという言葉はよく聞きます。自分の認識では「プログラム中にソースコードのコピペをしてはいけない。二重化は避けろ。」という程度のものでした。 しかし、このTipsから自分は、DRY原則の本質を理解していなかったということに気がつきました。それは、 避けるべきはコードの二重化ではなく、知識の二重化である ということです。

例えば以下のような、処理内容が重複しているコードでも、知識の二重化ではありません。

bool validate_age(int value) {
    return validate_min_integer(value, 0);
}

bool validate_quantity(int value) {
    return validate_min_integer(value, 0);
}

これは、あくまで2つのものごとが同じ規則を有しているだけであり、それは偶然にすぎないからです。

これまで同じような処理は1つのメソッドにまとめればいいんだなくらいに考えていたことを反省するとともに、普段何気無く使っている言葉も、本質的に理解しているのかをしっかり確認すべきだなと思いました。 今後はデザインパターンや設計思想など、なんとなくで使ってしまいそうな言葉もしっかり理解した上で使うようにしていきたいです。

Tip 27 エディターに熟達すること

このTipsでは、エディターを使いこなすことで、生産性を高められる ということを学びました。 当たり前のように感じるかもしれませんが、日々のコーディングで、何度もマウスやトラックパッドを使うことはないでしょうか。 もしあるのであれば、それが、エディターの機能によって、コマンドラインで行えないか調べてみるといいかもしれません。

ちょっとでも、面倒だと感じることは、エディターの機能を最大限に活用することで、無駄な時間を削減していくことができます。 日常的に、繰り返す動作については、なるべく効率的に、かつスムーズに行える習慣を取り入れるべきだと思いました。

ショートカットや拡張機能などは、使わなくても支障をきたすことはありません。 そのため後回しにしがちでしたが、今後は積極的に活用し、それを無意識に使えるようにしていきたい思います。

Tip 66 テストとはバグを見つけることではない

テストを書くことで、そのコードが要件を満たしているのか確認することができる。 実はテストにはそれ以上のメリットがあるということをこのTipsから学びました。

それは、テストを実行しているときよりも、テストについて考えて、記述しているときの方が大切 だということです。 その考えは、コードを書く段階から重要になってきます。

テストがしやすいコードを書くためには、結合度を下げる必要があります。 境界条件やエラー条件を考えておけば、関数の構造もすっきりさせることができるはずです。

新しく実装するときは、必ずその機能とセットでテストについても考えながらコーディングしてみようと思いました。 それによってコードの質を向上させていきたいです。

さいごに

今年読んだ本の中ではダントツでよかったです。 今後も達人プログラマーの考えを取り入れていくように、読み返してみようと思います。 コーディングや設計、開発手法、ユーザーに良いサービスを提供するための考えなど数多くのTipsがあるので、興味ある方はぜひ読んでみてください。

2022年8月振り返り

2022年8月の振り返り記事です。
42 Tokyoで取り組んでいる課題や、その他の活動について振り返ります。

42 Tokyoでやったこと

HTTPサーバーの実装

github.com

なんとか提出することができました。 現在は、他の学生から指摘していただいた点を修正しているところです。

8月中に以下の実装を担当しました。

  • configとHTTPサーバーの連携
  • リクエストのルーティング処理
  • LRUキャッシュの仕組みを用いた、サーバー側でのファイルキャッシュ
  • 細かいバグの修正

6月に始めたので、かなり長丁場となりましたが、その分学びは多かったです。 これまで開発してきた中でも、一番手間と時間をかけたプロジェクトでもあります。

HTTPサーバーの仕組みについてはもちろんのこと、設計やコーディング規約、円滑にチーム開発をすすめるための工夫なども学べたのがよかったです。

インターン

8月中は週3日ほどインターンに参加していました。

サーバーサイドでは、今まで経験したことがない規模のデータを扱うことで、これまで深く意識していなかったSQLのパフォーマンスに気をつけるようになりました。
指摘いただくことも多いですが、少しずつSQLの気持ちがわかってた気がします。

フロントエンドでは、Nuxt.jsやNext.jsなど、まだまだ分からないことが多いですが、キャッチアップしつつ軽めのタスクをこなしていました。
Vueは何となくわかってきたので、今後はReactの勉強をがんばりたいです。

読書記録

7月は、あまり本を読む時間が取れなかったので、毎朝30分本を読むことを目標にしました。

無事1ヶ月間、朝読書を継続することができてよかったです。

あっさりとした感想記事も書いてます。

note.com


8月は3冊読むことができました。(1冊は読み途中)

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする

知識や経験をいかにして獲得し、アウトプットしていくかの流れをフェーズごとに効率的な手法が解説されていました。
部分的にでも読み返すことで、今後の学習をサポートしてくれると思いました。

Vue.js&Nuxt.js超入門

Vue.jsの基礎から始まり、Nuxt.jsを用いた開発が学べました。
最終的には、Firebaseと連携してGoogle認証機能を実装するなど、入門書としてはちょうどよい分量だったと思います。

達人プログラマー(第2版): 熟達に向けたあなたの旅

まだ2章までしか読めてないですが、プログラマに大切な心構えが学べるような感じがします。 雰囲気的には、プログラマが知るべき97のこと の形式に近いです。

9月前半には読み終わりたいです。

終わりに

今月中にFirst Circle最終課題に着手できるよう、がんばるます。

2022年7月振り返り

2022年7月の振り返り記事です。
42 Tokyoで取り組んでいる課題や、その他の活動について振り返ります。

42 Tokyoでやったこと

HTTPサーバーの実装

ひとまず設定ファイル関連の実装が一段落つきました。

下記のような入れ子のパースがややこしかったです。

location /hoge/ {
    location /hoge/fuga/ {
        location /hoge/fuga/piyo/ {
        }
    }
}

現在のコンテキストを stack で管理し、
{ がきたらpush} がきたら pop するという実装にすることで、アクセスしたいコンテキストを正確に扱うことができました。

他にはGoogle Testも書き始めたりしました。
サクッとテストが追加できるので、いい感じです。

現在は、リクエストのルーティング処理の実装に取り組んでいます。

42 Tokyo開校2周年記念イベント

42 Tokyoが開校2周年ということでお祝いイベントに参加してきました。

ありがたいことに、自分含め3人の学生がスポンサー企業の方々の前でスピーチをする機会をいただきました。 緊張しましたがとてもいい経験ができたと思います。

他にもさまざまな学生と交流ができてよかったです。

インターン

インターン先が変わりました。

それに伴い、初めてのインターンを終えた感想記事も書いてます。
とてもいい職場でした。 ryo-manba.hatenablog.com

新しいインターンでは初めてのリモートワークを経験しました。
移動に使っていた時間を、有効に活用できるのでいいですね。

少しずつ新しい環境に慣れて、成果を挙げられるようがんばりたいです。

読書記録

2冊読みました。

UNIXという考え方―その設計思想と哲学

読みものとして面白かったです。
今後の設計やプログラミングに役立ちそうな考え方が学べました。一読の価値アリです。

やわらかな思考を育てる数学問題集1

気分転換に読んでました。
専門的な知識は特に必要ないので、考えることが好きな人にはオススメです。


どちらも先月から読んでいたもので、今月はあまり本を読む時間が取れませんでした。
積読が増えてきたので、来月はなるべく本を読めるようにしたいです。

終わりに

腹筋ローラーを再開しました。運動不足にならないよう気をつけたいです。

業務未経験のワイが5ヶ月間のエンジニアインターンから学んだこと

はじめに

先日5ヶ月間参加していた長期インターンシップを終えたので、そこから学んだことを自分なりにまとめてみようと思います。

自己紹介

  • 元ソムリエ(3年半ほど飲食業界にいた)
  • 現在は 42 Tokyoというエンジニア養成機関の学生(1年と3ヶ月)

インターン

  • 従業員数500名程度のミドルベンチャー
  • 出勤頻度は週3日、業務時間は1日7~8時間

インターンに応募したきっかけ

本格的にプログラミングを学び始めて1年弱のタイミングで応募しました。
実務経験を積んでみたかったのが理由です。

インターンで採用されるまでにしたこと

Web開発系の学習はほとんど行っていませんでした。 そのため面接では、短期間でキャッチアップできるぞという点をアピールした記憶があります。 コーディング試験は、AtCoderで茶色になっておけばそれなりに突破できる気がしました。(企業によると思いますが)

実際にインターンに参加してみてどうだったか

就業形のインターンだったので、実際の開発の流れを知ることができました。 これまで何度かチーム課題を経験していたので、割とスムーズに開発することができたと思います。
issueの起票の仕方や、プルリクの出しかたなどは、細かくルールが決まっていたので、それに則っていく形で取り組みました。


開発手法がスクラムだったので、デイリー・スクラムやスプリントレビューなども参加していました。 スクラムについては、書籍で読んだことはある程度だったので、実際に体験できてよかったです。


開発言語のキャッチアップは、日々の改修業務の中で学んでいくことができたので、特別大変に感じることはありませんでした。(issueの難易度も軽めのものから取り組んだので)

フロントエンドもサーバーサイドもどちらも触れる機会があり、アプリ開発を全体的に学びながら改修業務に携わることができたのはラッキーだったと思います。

技術面以外で重要だと思ったこと

3つほどあります。

1. 文章力(テキストでのコミュニケーション)

Slackでの受け答えやレビューコメントなど、自分はどう書いていいのか悩むことが何度かありました。 丁寧に書きすぎると冗長になってしまうし、シンプルに書こうとすると情報が不足してしまいかねない。そんなときに伝えたいことを短時間で文章にできる力は重要だなと思いました。

職場の方々の文章は、読み手に伝わりやすい構成になっているものが多かったです。

自分が文章を書くときは、重要な情報を先に書くことで、まず何が伝えたいのかを相手に示すことや、補足的な情報については () で囲んで記載することなどを意識的に取り入れていました。


2. 質問力

初めのうちは、どのタイミングで質問していいのか、自分がトンチンカンなこと言ってないだろうかと不安になるので、質問力も重要だと思います。

王道ですが、「現状の問題点とその解決策をいくつか提示した上で、自分がベストだと思う解決策を伝えて意見をもらう」という聞き方がいいのかなと思いました。 (実際にリアクションも良かった気がする)

自分は大まかな実装方針が立ったら、一度質問(相談)することが多かったです。
そのおかげで大きな方向転換をすることなく進めることができていました。


3. コミュニケーション能力

当然かも知れないですが、最低限のコミュニケーション能力は必要だと思いました。
論理的に話すことだけを意識すると、知らぬ間に相手を傷つけるような発言をしてしまうこともあると思います。
そのため相手の立場に立って、考え、議論できる力も大事だと思いました。

最後に

5ヶ月間とても楽しかったです。
プログラミングは学ぶこと自体も楽しいですが、その学びを生かして良いサービスを作っていけると、なおさら楽しいですね。

今後も42 Tokyoでの学習や新天地でのインターンなど精力的に活動していこうと思います。

おわり

2022年6月振り返り

42 Tokyoで取り組んだこと

HTTPサーバーの実装

3人1チームで取り組んでいます。 6月前半は、基礎的な仕組みを学ぶためにそれぞれ思い思いに実装を試したりしていました。 自分はselect、pollを使ってリクエストを受け取り、スタートライン、ヘッダー、ボディの3つに分割するみたいなところまで試しました。 基本的な仕組みが理解できてよかったです。

いまはそれぞれ役割分担して課題を進めていて、自分は設定ファイルの読み込むを担当しています。 進捗としては、トークンごとに分割して、バリデーションを行うところまで進めました。 今後は、適切なクラスに解析が終わった情報を入れ込む作業を進めていく予定です。

チームメンバーが設計の勉強をしているので、その辺りの議論から得られることが多いです。 プロジェクトとしてもそれなりの規模なので、HTTPサーバーの仕組み以外にも、この課題を通して学べることはたくさんありそうです。

読書記録

先月はまだ途中のものも含めて4冊読みました。

ブロックチェーンプログラミングのためのコンピュータサイエンスがわかる本

スマートコントラクト、トランザクション、マイニングなど、聞いたことはあるけど、あまり分かっていなかった用語の意味が学べました。 全体の表面的な理解ができる感じで、個人的には丁度いい内容でした。

Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術

今取り組んでいるHTTPサーバーの実装に関連がありそうなHTTP/1.1の章を読みました。 内容盛りだくさんなので、また落ち着いたら残りの章も読んでみたいです。

ちなみにミニ版は無料で読めるので興味がある方はどうぞ。 https://www.oreilly.co.jp/books/9784873118789/

UNIXという考え方―その設計思想と哲学

7割位読みました。 効率より移植性を優先させることや、できるだけ早く試作することなど、今後役立ちそうな考え方がいくつも出てきて読みがいがあります。 文章量自体はあまり多くないので、続きもサクッと読み進められそうです。

やわらかな思考を育てる数学問題集1

Twitterで競プロ関連の方がオススメしているのを見かけて読み始めました。 「おととい10歳だった少年が来年13歳になることは可能でしょうか?」みたいな頭の体操のような問題から、 偶奇性や組み合わせ、鳩の巣原理など競プロっぽい?問題もあるので面白いです。 移動中や気分転換に読んだりしています。

最後に

2022年も後半戦突入ですね。6月後半はかなり暑かった。。
熱中症対策としてキンキンに冷えたビールを飲む機会が増えそうです。

2022年5月振り返り

42 Tokyoで取り組んだこと

Goの課題

期間限定の課題でした。チームで取り組むこともあって楽しかったです。 あまり関わりがなかった方とも協力して取り組めたのがよかったかなと思います。 いずれはGoroutineを使った平行処理なんかも試してみたいです。

HTTPサーバーの実装

3人チームで始めました。まだ始まったばかりですが、チーム課題は学びが多いです。
自分は要件で求められている挙動やnginxのconfigのルールなど調べてました。 upload_moduleの使い方がややこしかったのでお試し用のリポジトリを作りました。

github.com

読書記録

先月は4冊読みました。 図書館で何冊か借りてきたので今月も色々読みたいです。

オブジェクト指向でなぜつくるのか

オブジェクト指向の生い立ちからその使い道、そこから発展した設計の仕方などが学べました。 新しい技術と出会ったときに、使い方だけでなく、なぜその技術が存在するのかを考えると良さそうです。

ネットワークはなぜつながるのか

Webページを表示する仕組みについて段階ごとに解説されていました。 TCP/IPイーサネットなどプロトコルレベルでの通信の手順を学べたのが良かったです。

Web技術がしっかりわかる教科書

昨年出版されているので、HTTP/3、FaaS、サーバーレスアーキテクチャなど、新しめの技術についても多少触れられていました。 これからWebの勉強をしようと考えている人は、 「Web技術がしっかりわかる教科書」→「Webを支える技術」→「ネットワークはなぜつながるのか」 の順に読むと基本的なしくみが理解できそうです。

アジャイルイントロダクション

今月からチーム課題に入るので事前に読んでみました。 入門編らしく知っている内容が多かったです。チームでの役割分担やペアプロなどの話がありました。

おわりに

最近fukabori.fmを聞きはじめました。音声メディアいいですね。
土曜の夜はカスミンのラジオを聞きましょう。

2022年4月振り返り

42 Tokyoで取り組んだこと

C++STLコンテナ再実装

github.com

C++リファレンスを読み漁る日々に別れを告げました。
vectorやmapなど、データ構造の内部実装が知れて面白い課題でした。

内容が濃かったので、気が向いたら別途記事を書こうかなと思います。
スタートからちょうど3ヶ月くらいかかりましたね。

Goの課題

期間限定で約3週間に渡るGoの課題です。 便利な関数が禁止されているので、基本的な文法を学ぶことに重点を置いている感じがします。 5月の中頃までつづくので地道に進めていこうと思います。

Tuning the backend Contest

github.com

42 Tokyo x 株式会社ドリーム・アーツのイベントでした。 42時間でパフォーマンス・チューニングを行うイベントで、3人1チームで合計100名以上の学生が参加しました。

私はオンライン参加だったので、常にチームでボイチャを繋いで気軽に相談し合えるような環境で進めていました。 思った以上に上手くいかず、チームでもがき続けていましたが、それもいい経験だったと思います。 久しぶりにつら楽しい感覚を味わいましたね。

学ぶことがたくさんありましたが、特に重要だなと感じたのは以下の3点です。

  • 闇雲に取り掛かかるのではなく、どこがネックなのか測定すること。
  • 何となくググって出たものを試すだけではダメ。
  • どこに原因があるのかを論理的に考えて、仮説と検証を繰り返して改善していく事が大事。

これらは普段から活かせそうなので、今後に役立てていこうと思います。 改めて素敵なイベントを開催していただいた42のスタッフ陣とドリーム・アーツの皆様には感謝です。

その他

開発合宿

42の学生、約10名で一泊二日の開発合宿に参加してきました。 それぞれ開発テーマは自由だったので、自分は興味があったWebAssemblyでHello Worldしてました。

夕飯を食べながら、普段話さないような内容で盛り上がったりして楽しかったです。 オンラインが中心になった今でもリアルでのコミュニケーションは魅力的だなぁとしみじみ感じました。

翌日にもみんなで温泉に行ったりと2日間最高な時間を過ごせました。 これまであまり話したことがない人とも交流できてよかったです。

インタビュー企画

note.42tokyo.jp

42 Tokyoの学生インタビュー企画で自分も紹介していただきました。 他にも複数人の記事が公開されているので、42に興味がある方はぜひ読んでみてください!

インターン

なんとなくワイシャツで出勤していましたが、服装自由なのでパーカーで通うようになりました。 朝のアイロン掛けの時間が短縮されることに喜びを感じました。

少しずつ慣れてきたので、実装の精度とスピードを上げていきたいですね。

読書記録

今月も朝の読書会で何冊か読みました。

SQL 第2版 ゼロからはじめるデータベース操作

SQLの機能や文法についての説明が多めで、はじめの一歩にはちょうどよい分量と読みやすさに感じました。 パフォーマンス・チューニングなどはあまり触れられていなかったので、必要に応じて中級編のSQL本も読んでみようかなと思います。

理科系の作文技術

知り合いのエンジニアの方から相手に伝わりやすい文章を書く能力が重要だという助言をいただいたので読んでみました。 自分があまり意識していなかった文章を書く上で気をつけるべきポイントがまとまってあり、読んでよかったと強く感じました。
意見と事実のかき分け方や文章の白さを意識することなど、知っているだけでも今後に活かせそうなことがいくつもあったので、これから文章を書くときに役立てていきたいです。

オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識

7割位まで読みました。前半はC++の勉強で知っていたことが多かったです。 途中あたりから、オブジェクト指向の考え方を設計や要件定義など上流工程にも役立てる方法などが解説されていて、興味深かったです。 残りの章も面白そうなのでゴールデンウィーク中に読み終える予定です。

おわりに

最近はネコの動画をたくさん見てました。
来月からHTTPサーバー実装の課題がはじまるので楽しみです。