ハルの読書と勉強録

読書の記録や勉強の覚書です。

【読書録】CAREER SKILLS ソフトウェア開発者の完全キャリアガイド/ジョン・ソンメズ

先日、「CAREER SKILLS ソフトウェア開発者の完全キャリアガイド」を読了しました。

書籍の紹介

ソフトウェア開発者のキャリア形成についてまとめられています。最低限必要な技術的な知識の概要と学習方法から、キャリアステージごとの進み方や対人関係まで、非常に幅広く述べられています。特にこれからソフトウェア開発者を目指す人や、他分野から転職された方にとっては、得るものが多くある書籍ではないでしょうか。

書籍を読む前と後

読む前

  • 学習していることや、学習しようとしていることが本当に正しいかわからなかった。
  • テスト駆動開発継続的インテグレーションスクラムなど、よく耳にするが必要性や重要性、勉強方法、学習タイミングが分からないものがあった。
  • 技術にフォーカスしすぎており、今の環境でも伸ばせる重要なスキルがあることに気づいていなかった。

読んだ後

  • 曖昧だった技術や手法などの概要を知れたため、今までやってきたことの位置づけと、次に学習することが明確になった。
  • 技術だけでなく、チームや組織をより良くするために協力して働けるスキルがとても重要であることを知ることができた。
  • 今の自分に少し自信を持つことができた。

学べたことの一部

ソフトウェア開発はコーディングよりもずっと大きな仕事

当然ではありますが、コーディングは作業や手段、仕事の一部にすぎません。

コーディングそのものに価値があるのではなく、顧客の問題やニーズをともに整理し、把握し、その専門的技術と知識を駆使して解決策を見出し、実現・提供することに価値があるのだと思います。

ほとんどのソフトウェア開発プロジェクトの考え方は、手作業を自動化すること、でなければ手作業ではとてもできない仕事をするために新しい自動的な方法を作り出すことである。

ジョン・ソンメズ. CAREER SKILLS ソフトウェア開発者の完全キャリアガイド.日経BP社.

今日のソフトウェア開発者は、単にコードを書けるというだけでなく、自社の経営陣や顧客とコミュニケーションがとれて彼らの要件を究極のITソリューションに翻訳できるかどうかで評価される。

ジョン・ソンメズ. CAREER SKILLS ソフトウェア開発者の完全キャリアガイド.日経BP社.

ソフトウェア開発者に必要な技術的知識とスキル

本書では、以下のようなものが簡単な歴史と概要とともに解説されています。

「まず未知の未知をなくす」ことを目的としており、この部分の情報は大変有用であると感じました。

必要となる知識が幅広いため、学習はかなり難しいとも述べられています。

特に専門的に学習してきていない場合は、膨大な時間がかかることは必然です。

焦らず、じっくり、地道に取り組むことが大切ですね。

1.プログラミング言語

一つのプログラミング言語の表裏を重点的に深く学ぶ方が良い

2.コードの構成

コメントを書かなくても理解できる明快なコードの書き方は、コードを書き始めた初期から学ぶべき。

3.オブジェクト指向設計

ソフトウェア開発のかなりの部分はOO設計に基づいている。

4.アルゴリズムとデータ構造

大学でのコンピュータ科学の学位で学ぶことの大部分。これらを深く理解すると多くの異なるプログラミング問題を簡単かつエレガントに解決できる。大多数のソフトウェア開発者はこの分野の能力が低い。マイクロソフトやグーグルなどの面接通過には必須。
アルゴリズム
コンピュータ科学やプログラミングの様々な問題解決に利用される手法。実務で直面する複雑な問題を解くためには、書き方を理解する必要がある。使い方が上手ければ解決時間の大幅な短縮が可能となる。
【データ構造】
アルゴリズムとの組み合わせで使用される。配列やベクトル、キューやスタック、リスト、ツリーなど。

5.開発プラットフォームと関連テクノロジー

言語+プラットフォームを選ぶ必要がある。
【開発プラットフォーム】
開発の対象となる具体的な環境で、独自のエコシステムと特徴を持つ。OSだけでなく、OS以外も含まれる。
【関連テクノロジー
プラットフォームを対象として開発する際に一般的に使用される開発ツールや、パターン、フレームワークなど。

6.フレームワーク、スタック

フレームワーク
特定のプラットフォームや複数のプラットフォームでコードを開発するために使用されるライブラリーセット。.NETなど。
【スタック】
完全なアプリケーションを作る際に一緒に使われる一連のテクノロジーフレームワークも含まれることが多い。MEANスタック(MongoDB,Express.js,AngularJS,Node.js)など。すべてを理解することよりも、これらを全て知ることで完全なウェブアプリケーションが開発できることが分かっていることが大切。
スタックを学ぶことは、完全なアプリケーションを開発するために必要なすべてのスキルを身につけることである。

7.データベースの基礎知識

リレーショナルデータベースとドキュメントデータベースを知る。
ほとんどのソフトウェア開発者はデータベースを操作するコードをかけて当然と思われている。
【最低限必要】
・データベースの仕組み
・データ読み出しの基本クエリ
・データ挿入、更新、削除
・データセットの結合

8.ソースコントロールシステム

バージョン管理システムのこと。少なくとも一つのソースコントロールシステムの使い方をよく知る必要がある。

9.ビルドとデプロイ

ほとんどのソフトウェア開発プロジェクトは、自動ビルド・デプロイシステムを持っている。
システムの仕組みと、行われているプロセスの基礎は理解する必要がある。
【ビルドシステム】
最低限、すべてのコードをコンパイルし、コンパイルエラーを確認する。ユニットテストやユーザーテストの実行、コード品質チェック、コードベースのレポート作成機能を持つものもある。
【デプロイシステム】
何らかの環境にコードをデプロイする。

10.テスト

品質はチーム全体の仕事になった。
優秀なプログラマは自分のコードをテストしてから他人に渡す。
【最低限必要な知識】
ホワイトボックステスト
ブラックボックステスト
ユニットテスト
境界条件
・テスト自動化
・受け入れテスト

11.デバッグ

ソフトウェア開発者として仕事をしている時間の90%近くが、コードがなぜ動かないかを明らかにする為に費やされる。効果的にデバッグする方法をきちんと学んだ方がいい。

12.メソドロジー

ある目的や狙いを達成するための概念、方法、手順、ツールの一連のシステム(関連する組み合わせ)のこと。
ウォーターフォール開発とアジャイル開発を支える基本思想は理解しておいたほうが良い。

キャリア的には技術よりもソフトスキルが重要

著者は、技術とキャリア形成のスキルは全く別物と述べています。

キャリアに関しては、見た目や見せ方、振る舞い、接し方、交渉の考え方など、ソフトスキルの方が大きな影響を与えるとしています。

キャリアを長期的に見たとき、成功をもたらすのは、あなたが書くコードがどんなものかということよりも、同僚とどんな関係を結んでいるか、自分の考えをいかにうまく伝えられているか、上司にどのように対応しているか、いかにうまく昇給を要求できているか、いかにうまく人事考課をこなしているかといったソフトスキルの部分である。

ジョン・ソンメズ. CAREER SKILLS ソフトウェア開発者の完全キャリアガイド.日経BP社.

関わる人達すべての役に立つ

特に優れたソフトウェア開発者とは、まわりのすべての人々の力を上げ、チーム全体の力を向上させる人物だ。

ジョン・ソンメズ. CAREER SKILLS ソフトウェア開発者の完全キャリアガイド.日経BP社.

ソフトウェア開発は、チームとして仕事を行い、チームとしての成果が評価されるため、周囲により良い影響を与えられるような対人関係のスキルは非常に重要と言えます。

本書で繰り返し述べられている対人関係に関するソフトスキルの多くは、「関わる人達すべての役に立つ」ということに集約されるのではないでしょうか。

上司や同僚、顧客、他部署、社外コミュニティなど、関わる人々の個性や役割を理解し、それを手伝い、その人の役に立てるようにアクションを起こすことが重要であると思います。

そうすることで、その人が持つ専門的なスキルや、新たな視点を得ることができ、成長しながら評価・信頼を得て、人脈を作ることにつながるのではないでしょうか。

最後に

本書は、ソフトウェア開発者としての知識の概要部分の整理や、とっかかりには非常に良い情報が多く述べられているように感じました。

良い意味で甘い理想を壊してくれる書籍だと思います。

しかし、著者の持論が多く、そのまま鵜呑みにするのは疑問を抱く部分も多くありました。

(そこは訳者や編集者の方が注釈で大変良いお仕事をなされています。日本との文化や制度の違いなどもあるのだと思います)

私個人としては、本書を読んだことで、今まで自分がやってきたことや、立ち位置、今できることが少し明確になったように思います。

本書でも紹介されていますが、いきなり開発の現場に飛び込むだけが正解ではありません。

開発の仕事だけがすべてではなく、ソフトウェア開発者に通じる道は沢山あります。

そして、必要なスキルは一朝一夕で身につくものではありません。

メディアや情報に惑わされず、ソフトウェア開発者の仕事を見つめなおし、自分と周りを大切にしながら、自分に合った形を探して、少しづつキャリアとスキルを伸ばしていくことが大切ではないでしょうか。