書店員向け情報 HELP
出版者情報
書店注文情報
ストリートコーダー
~現場で生き残るためのプロのテクニック
- 発売予定日
- 2025年2月26日
- 登録日
- 2024年10月11日
- 最終更新日
- 2025年2月19日
紹介
「ストリートコーダー」とは、プロフェッショナルな現場(ストリート)で経験を積み、実務で求められるさまざまなスキルを身に付け、柔軟に問題解決できるプログラマーのことです。授業では教えてくれない実用的な手法を携え、独学では習得できなかった実践的な技術を有しています。
本書には、ストリートで闘うことでしか身に付かない「現場の知恵」が詰まっています。現場ですぐに役立つ考え方、現実に即した手法、本当は役に立つアンチパターン、テストの本質、積極的にリファクタリングすべき理由とリファクタリングすべきではない場合、必要なときに行う必要な最適化など、筆者が現場を切り抜けていく中で重要だと感じた事柄であり、今日から使える知識ばかりです。
本書は、これから現場(ストリート)に出ようというエンジニア初心者、現場投入されて数年が経つものの伸び悩んでいるプログラマーといった層にお勧めです。著者が直面し、苦労して解決して得た知識を吸収できます。「やってはいけないと習った」「そんなことは、どこにも書いていない」ということも、現場(ストリート)では必要なのです。ただし、使い方には注意が必要です。本書には、その理由から方法までが記されています。
また、ある程度の経験を積んだエンジニアにも本書はお勧めです。現場(ストリート)で直面し、試行錯誤して切り抜けた方法が、鮮やかに、そして論理的に言語化されています。「たまたまうまくいったと思ってたけど、正しい方法だったんだ!」「みんなには、こうやって説明すればいいのか」と、さらなる学びがあるはずです。
現場(ストリート)は予期せぬ出来事の連続です。そんな世界で生き残るためのガイドマップとして、本書を活用してください。
目次
Chapter 1 現場へ
1.1 現場で大事なこと
1.2 ストリートコーダーとは?
1.3 優れたストリートコーダー
1.3.1 探究心がある
1.3.2 結果主義であること
1.3.3 高いスループットを実現する
1.3.4 複雑さと曖昧さを受け入れる
1.4 現代のソフトウェア開発における問題
1.4.1 技術が多すぎる問題
1.4.2 パラダイムの上を滑空する
1.4.3 テクノロジーのブラックボックス
1.4.4 オーバーヘッドの過小評価問題
1.4.5 自分の仕事ではないという考え方
1.4.6 つまらないことは素晴らしいこと
1.5 本書で取り扱わないこと
1.6 本書のテーマ
まとめ
Chapter 2 実践理論
2.1 アルゴリズムの短期集中講座
2.1.1 Big-Oは、よいに越したことはない
2.2 データ構造の中身
2.2.1 文字列
2.2.2 配列
2.2.3 リスト
2.2.4 リンクリスト
2.2.5 キュー
2.2.6 辞書
2.2.7 ハッシュセット
2.2.8 スタック
2.2.9 コールスタック
2.3 なぜ型が重要なのか?
2.3.1 型を重視する
2.3.2 妥当性の証明
2.3.3 むやみにフレームワークを使わず、賢く使う
2.3.4 タイプを活用してタイポを防ぐ
2.3.5 null許容型と非許容型
2.3.6 コストなしのパフォーマンス改善
2.3.7 参照型 vs 値型
まとめ
Chapter 3 役に立つアンチパターン
3.1 壊れてないなら、壊してみろ
3.1.1 コードの硬直性に対処する
3.1.2 素早く行動し破壊せよ
3.1.3 境界を守ることの重要性
3.1.4 共通機能の分離
3.1.5 Webページの例
3.1.6 負債を残さない
3.2 一からコードを書き直せ
3.2.1 消して書き直す
3.3 壊れていなくても修正する
3.3.1 未来に向かって突き進む
3.3.2 清潔さは読みやすさの次
3.4 重複せよ
3.4.1 再利用かコピーか?
3.5 自前主義
3.6 継承を使わない
3.7 クラスを使用しない
3.7.1 列挙型は最強!
3.7.2 構造体最高!
3.8 バッドコードを書いてみよう!
3.8.1 if/elseを避ける
3.8.2 gotoを使う
3.9 コードコメントを書かない
3.9.1 適切な名前を選ぶ
3.9.2 関数を活用する
まとめ
Chapter 4 おいしいテスト
4.1 テストの種類
4.1.1 手動テスト
4.1.2 自動テスト
4.1.3 危険な行為:本番環境でのテスト
4.1.4 適切なテスト方法の選択
4.2 不安をなくし、テストを愛する方法
4.3 TDDなどの頭字語を使わない
4.4 自身のためにもテストを書こう
4.5 テスト対象の決定
4.5.1 境界を大事にする
4.5.2 コードカバレッジ
4.6 テストを書かない
4.6.1 コードを書かない
4.6.2 全てのテストを書かない
4.7 コンパイラにコードをテストさせる
4.7.1 nullチェックの排除
4.7.2 範囲チェックの排除
4.7.3 有効な値チェックの排除
4.8 テストの命名
まとめ
Chapter 5 やりがいのあるリファクタリング
5.1 なぜリファクタリングをするのか?
5.2 アーキテクチャの変更
5.2.1 コンポーネントの特定
5.2.2 作業とリスクの見積もり
5.2.3 偉業
5.2.4 リファクタリングを簡単にするためのリファクタリング
5.2.5 最終段階
5.3 信頼のおけるリファクタリング
5.4 リファクタリングすべきでない場合
まとめ
Chapter 6 セキュリティを精査する
6.1 ハッカーの上を行く
6.2 脅威モデリング
6.2.1 ポケットサイズの脅威モデル
6.3 安全なWebアプリを書く
6.3.1 セキュリティを考慮した設計
6.3.2 隠蔽によるセキュリティの有効性
6.3.3 セキュリティメカニズムを自作しない
6.3.4 SQLインジェクション攻撃
6.3.5 クロスサイトスクリプティング
6.3.6 クロスサイトリクエストフォージェリ(CSRF)
6.4 先に洪水を招いた者
6.4.1 CAPTCHAを使用しない
6.4.2 CAPTCHAの代替手段
6.4.3 キャッシュを実装しない
6.5 シークレットの保管
6.5.1 ソースコードでのシークレットの保管
まとめ
Chapter 7 能動的な最適化
7.1 正しい問題を解決する
7.1.1 シンプルなベンチマーク
7.1.2 パフォーマンス vs 応答性
7.2 遅さの解剖学
7.3 トップから始める
7.3.1 ネストされたループ
7.3.2 文字列指向プログラミング
7.3.3 「2b || !2b」を評価する
7.4 ボトルネックの解消
7.4.1 データを詰め込まない
7.4.2 近場で買い物を済ませる
7.4.3 依存関係のある処理を分離する
7.4.4 予測可能にする
7.4.5 SIMD
7.5 I/Oにおける1と0
7.5.1 I/Oをより速くする
7.5.2 I/Oをブロックしない
7.5.3 古の方法
7.5.4 モダンなasync/await
7.5.5 非同期I/Oの落とし穴
7.6 奥の手としてキャッシュを使う
まとめ
Chapter 8 好まれるスケーラビリティ
8.1 ロックを使わない
8.1.1 ダブルチェックロッキング
8.2 不整合を受け入れる
8.2.1 恐るべきNOLOCK
8.3 データベースコネクションのキャッシュを避ける
8.3.1 ORMを使うと?
8.4 スレッドを使わない
8.4.1 非同期コードの落とし穴
8.4.2 非同期によるマルチスレッド化
8.5 モノリスを尊重せよ
まとめ
Chapter 9 バグとともに生きる
9.1 バグを修正しない
9.2 エラー恐怖症
9.2.1 例外の嘘偽りのない真実
9.2.2 例外をcatchしない
9.2.3 例外からの回復力
9.2.4 トランザクション抜きでの回復力
9.2.5 例外 vs エラー
9.3 デバッグをしない
9.3.1 printf()デバッグ
9.3.2 ダンプの海へ
9.3.3 ラバーダックデバッグ上級編
まとめ
上記内容は本書刊行時のものです。