フューチャー技術ブログ

新人の時に出会いたかった本の紹介

はじめに

齊藤です。よろしくお願いします。春の入門連載2023の12日目です。

まず、私が新人の時に出会いたかった本というのは、CAREER SKILLS ソフトウェア開発者の完全キャリアガイドです。

本書は著者がソフトウェア開発者としての第1歩の踏み出し方、成長やキャリアの伸ばし方についての本がなく、著者のYouTubeチャンネルでの質問が絶えないことから、必要と感じ執筆した本とのことです。

本の見出しとは別に、さらに メタ(高次)的 な分類があり、読者を3つのキャリアステージに割り当て読むべき部分をまとめています。

  • 初心者、またはソフトウェア開発について学ぶことに興味を感じ始めたばかりの人

    ソフトウェア開発/プログラミングをこれから学びたいと思っていたり、少し勉強したことがあったりするものの、まだプロとしてソフトウェア開発をしたことがない人なら、ソフトウェア開発者として第一歩を踏み出す方法と最初の就職先を手に入れる方法を説明した第1部「ソフトウェア開発者になる方法」と第2部「就職する方法」がもっとも役に立つだろう。

  • キャリア形成中の開発者

    あなたにとってもっとも役に立つのは、第3部「ソフトウェア開発の必須知識」だろう。この第3部には、あなたの知識のなかにあるかもしれない穴を埋め、自分の手でキャリアを管理して職場で成功を収めるために役に立つことが書かれている。

  • 経験を積んだプロフェッショナル

    さらに、あなたはほかの開発者のメンターになっていたりはしないだろうか?スタートの切り方について彼らにアドバイスすべきことが書いてあれば便利ではないだろうか?

「春の入門祭り」の通り、今年から晴れてソフトウェア開発者としてのキャリアをスタートした 初心者、またはソフトウェア開発について学ぶことに興味を感じ始めたばかりの人 に向け、 第1部「ソフトウェア開発者になる方法」 を現在の様々な動向に合わせて紹介し、少しでもスタートダッシュを決められるように、また、偶然目にとまった キャリア形成中の開発者経験を積んだプロフェッショナル の方々には スタートの切り方について彼らにアドバイスすべきこと のショートカットとして引用しスタートダッシュをアシストしていただければと思います。

目次

初心者、またはソフトウェア開発について学ぶことに興味を感じ始めたばかりの人 を対象とした章は以下の通りです。

  • 第2章 スタートの切り方
  • 第3章 身につけないといけない技術スキル
  • 第4章 技術スキルの身につけ方
  • 第5章 どのプログラミング言語を学ぶべきか
  • 第6章 最初のプログラミング言語の学び方
  • 第7章 大学の活用
  • 第8章 コーディングブートキャンプ
  • 第9章 独学

※第0章、第1章は、導入になります。

第2章 スタートの切り方

ここでは、ソフトウェア開発とはどんな仕事かが記載されています。

コーディングは行うが、他にどんなことを仕事として行うか? 大きくは、問題の理解を行い、設計、コーディング、テストとデプロイなどの作業があり、どの部分を仕事にしていくか、どのようなソフトウェア(ゲーム? BtoC? 基幹システム?)を仕事にしていくか……

まずは、自分がどんなソフトウェア開発者になりたいかプランを立てることが必要となるということです。ここは、職場の先輩や上司との1on1などでプランニングしていけるかと思います。

第3章 身につけないといけない技術スキル

プログラミング言語は1つを深く学ぶ方が良く、種類よりも明瞭でわかりやすいコードの書き方を身につけることが大事であるとのことです。理由は、後半で出てきますが業務ではコードを書くよりも読む時間のほうが多く、デバッグに多くの時間を使います。読みやすいコードは自分自身が読む際の助けになり、また、同僚や上司から評価されることにも繋がります。

テックブログ内では、以下の記事を見て勉強してもらえるとより良いと思います。

他に書籍内では、オブジェクト指向、アルゴリズム、OSや開発プラットフォーム、フレームワーク、データベース、バージョン管理ツール、ビルド/デプロイ/テスト/デバッグ、と続きます。

個人的にはフレームワークの学習は大事です! 情報系の大学に通っていたのですが、Microsoftに全振りでした。スタックとしては、Windows Server + C# + ASP.NET(まだ息してるかな……) + Visual Studio。会社に入ってからは、Linux(RHEL) + Java + Struts1&Springの合体オレオレFW + Eclipse。フレームワークの知識もライブラリーの知識もカスリもせず、概念レベルで学び直しが必要でした。(C#とJavaが似ていたのが救い……)。流行りを追うのは大事です。

アルゴリズムについては、TopCoderがおすすめされていましたが、日本ではAtCoderがおすすめです。自分は簡単な問題しかできないため、知り合いに「ログインボーナスやってるの?」と揶揄されました(笑) デイリーミッション感覚で続けてます。

バージョン管理ツールについては、タイムリーな記事がありますね! 初心者による初心者のための Git 入門

第4章 技術スキルの身につけ方

1冊の本で学ぶのではなく、複数の本からブログ、ポッドキャスト、チュートリアルなどを見てそれらを組み合わせ、学習プランを立てるのが良いとのことです。複数見ることで共通箇所から重要な部分や学ぶ順序を知ることができるので効率よく学習を進められる。そして、突き詰めるよりも、手を動かし好奇心に任せて学習を進めていくとよいでしょう。

Twitterなどで有名な方を追っかけているといろいろおすすめされていますし、My new gear している人も多いのでハイテクグッズ好きはハマるかも。

第5章 どのプログラミング言語を学ぶべきか

どの言語を選ぶかはあまり大きな問題ではない。
最初のプログラミング言語の学習は、いつもかならずもっとも難しい。

プログラミング言語は、細部では異なるが共通する部分が多くあり、2つ目のプログラミング言語を修得するのは簡単になるため、どの言語を学ぶかに悩む必要はなく就職しやすさで選べば良いとのことです。就職している方は、所属企業で主に使っている言語を選べば間違いないと思われます。

言語機能の知識よりもライブラリーやフレームワークを活用することの方が、はるかに重要だ。

そして、昨今ではOSSの利活用が進められており、複数のライブラリーを組み合わせてシステムを作ることが増えています。プログラミング言語の完全なマスタに匹敵するスキルも増えているため、最初に学ぶ言語についてあまり悩むことはないとのことです。

繰り返します! フレームワーク大事!!

第6章 最初のプログラミング言語の学び方

流れとしては、以下のような感じです。

まずは動いているアプリケーションを見てみる

とりあえず、世間で人気のOSSを見つけて、その中のコードを読み理解できるところがあるか見てみる。おそらく、実際のコードを見てみることでよく使われる機能や書き方を知ることで、言語の全体像を掴んだり、後のチュートリアルや参考書を読む際にあまり使われない機能や表記法の学習の優先度を下げることができるメリットがあると思います。

優れた教材や本を複数見つけてきて流し読みする

ここでもあくまで、学ぶ対象の全体像を調べることに重きを置きます。未知の未知を取り除くようにしたい、と著者は言っており何が分からないか分かればGoogle検索すればいいよね、とのことです。

言語機能とライブラリーの違いを学ぶ

「第5章 どのプログラミング言語を学ぶべきか」の最後のほうにも記載していますが、ライブラリーやフレームワークの使い方を知ることに重点を置くものが増えています。そのため、ここでは、言語自体の機能なのか、ライブラリーの機能なのかを意識する必要があるとのことです。

おすすめは、前述にもありましたがAtCoderです。ABCと呼ばれるAtCoder Beginner Contestの簡単な問題が多くあり、言語用法を問うような問題が多く有り、ブラウザ上の実行環境でプログラムを動作させ正否の判定できるため、初学者がプログラミング言語を勉強するのにおすすめです。さらに習熟度が上がった後もより難しいアルゴリズム問題などを解きたい場合にも有用です。

何かを作る……たくさんの何かを

小さなアプリケーションを言語の機能のみを使って作成することで、言語に対する習熟度の向上や、やりたいことを言語の機能でどのように実現するかマッピング能力を向上させます。本ではいくつか例題がありますが、先輩に教わったおすすめはToDoアプリです。追加、変更、削除とよくある機能を実装ができるのでおすすめです。

おまけ(就職も視野に入れた人向けのコンテンツ)

この記事では、就職した人をターゲットにと思い記載しています。書きたい内容から逸れそうな部分は割愛していますが、コーディングブートキャンプや独学のメリットやデメリットは参考になるため、おまけとして簡単にまとめておきます。

ソフトウェア開発者としてスタートするための3種類の戦略、経路について、以下の3つの章で述べられています。

  • 第7章 大学の活用
  • 第8章 コーディングブートキャンプ
  • 第9章 独学
戦略 知識 時間 お金
大学の活用 体系立った学び、コンピューターサイエンスの基礎知識の修得(仕事現場のリアルからは古い可能性あり) 長期間 高い
コーディングブートキャンプ(オンラインスクールなど) 分野を絞り実社会寄りの知識修得(コンピューターサイエンスの知識の一部に穴が開く) 大学に比べ非常に短い期間(数時間から数日のものが日本には多め) 低い
独学 関心のあることに集中(学ぶ対象は自分で決める必要があり、これまでの選択肢の中で一番知識に穴が空きやすい) 自分のペース(自分に合ったペースで進められるがやる気に左右されてしまう) 低コスト、または、コストなし

最後に

以上が、私が新人の時に出会いたかった本で、ご紹介したい部分の抜粋です。他にも初心者向けの中でも割愛した部分も多くあり、また、経験者向けの情報もあるため、気になった方は見てみていただければです。。

本書「第53章 ブログの作り方」では、大切なのは、人々がシェアしたりリンクしたりしたくなるいいコンテンツを作ることだ。 と書かれておりますが近道はないともあり、改めてブログを書くのは難しいと認識させられました……たくさん書いて行きます。

なお、この著書の「最後に」は第60章になります。かなり長いように感じますが、目次を見て拾い読みすることを推奨している本のため、気負わずパラパラと眺めてみてください。

次は佐藤更星さんのAWS Application Composerを使ってみた!です!