always be learning

常に学びたい

ソフトウェア開発者としての大事な基礎知識まとめ[前半]

初投稿です。

僕は中小IT企業で4年間、ソフトウェア開発(デスクトップアプリ)に携わっていますが、ソフトウェア開発者として大事なことを備忘録も兼ねて、ざっくりとまとめます。

 

主に以下の書籍を参考にしています。

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

 

 

全体の目次

  1. ひとつのプログラミング言語

  2. コードの組み立て方

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

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

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

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

  7. データベースの基本的な知識

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

  9. ビルドとデプロイ

10. テスト

11. デバッグ

 

前半は、1~3まで

 

1. ひとつのプログラミング言語

僕たちは常々、この世のありとあらゆるプログラミング言語を身に付けたいと思っています。

最終的には、そうあるべきだと思います。

置かれた環境で最適な言語を使用して華麗にコーディングできればめちゃくちゃかっこいいでしょう。

 

しかし大切なのは、最初はひとつのプログラミング言語に集中すべきだということです。

初心者プログラマの方の多くは、エンジニアとしての最初の就職先を手に入れる前に、複数のプログラミング言語を身につけてリスクヘッジしようとします。

ですが、そんなことをしても混乱するだけですし、他に学ぶべき技術スキルに注ぐエネルギーが削がれてしまいます。

それよりも、ひとつのプログラミング言語の裏表や特性を重点的に深く学ぶ方がずっといいです。そうすれば、その言語でコードを書く能力に本物の自信が得られるはずです。

自分がどんなタイプのソフトウェア開発者になりたいかできる限り具体的なイメージを持って、それを実現できる言語を深く学びましょう。

 

ちなみに僕は、初学ではあまり評判の良くないC/C++から始めました。

最初は本当に訳がわかりませんでした。

ですが業務でひたすらC++を触ってきましたので、C++に置いてはある程度のコーディングはできるし、知らないことは調べられるという自信(?)を付けることができました。

また、C++のような、初学者には難しめな言語に慣れたおかげか、他の言語を初めて触る時、とても快適に感じることがあります。その快適という感覚を味わえたのはよかったなと思います。

ですが、最初に学ぶのは、C/C++のような低レベルの言語ではなく、

もっと分かり易くとっつきやすい言語がいいと私は思います。そこから慣れていッタ方が絶対いいです。pythonとか。と言いつつC++大好きですがね

 

2. コードの組み立て方

プログラミング言語をひとつ学んだら、というよりも学んでいるうちに、コードの正しい組み立て方を知ることが必要だと思っています。

コードの組み立て方とはいったいどういうことでしょうか?

それは、コード自体が多くのことを伝えてくれるので、コメントをたくさん書かなくても理解できるような、明快で優れたコードを書くということです。

多くのソフトウェア開発者は、キャリア全体を通じてこのスキルを身につけずに終わってしまいますが、残念なことです。残された遺産は確実に後の世代の精神を蝕みます。

 

主としてこれを通じてソフトウェア開発者の能力を判断する人が、たくさんいます。コードの組み立て方がよければ、ただ仕事を終わらせたというだけではなく、職人の技を感じさせるようなものになります。コードの組み立て方は、ソフトウェア開発のアート的な部分だと言えるでしょう。

みなさんやみなさんの同僚は新しいコードを書くよりも既存のコードをメンテナンスする方にかなりの時間を費やし、みなさんが書いたコードを相手に仕事をしなければならないので、そういう意味でもコードの組み立て方はきわめて重要です。

ですので、明快でわかりやすいコードの書き方は、あと付けではなく、コードを書き始めた最初の時期から一所懸命学ぶべきです。

以下にコードの組み立て方の参考書を貼っておきます。

この二つは絶対読みましょう!

 

  

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

 

 

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

ソフトウェア開発の世界の大部分は、オブジェクト志向設計に基づいてものを考えているので、みなさんもこの考え方を理解する必要があります。

オブジェクト指向設計とはざっくり言うと、複雑なプログラムを、クラスやオブジェクトに分解、抽象化して設計する方法です。

クラスとは、特定の役割や仕事を表す機能とデータを納めたカプセルの定義であり、オブジェクトとは、そのクラスの定義に基づいて作られた実際のカプセルのことです。

ソフトウェア開発者は、いつも複雑さを手なずけようとして苦労しています。オブジェクトによってものを考えると、複雑な全体を相手にするのではなく、相互作用し合う部品(コンポーネント)から複雑なシステムを定義、設計できるので、その課題の実現に近づけます。

最近では、関数型プログラミング言語が無数に作られていますが、ソフトウェア開発の世界でもっとも人気のある言語やパターンは、今でもオブジェクト指向設計や分析の影響を強く受けています。

クラスとは何か、さまざまなタイプの継承とは何か(そしてそれをいつ使うか)を理解し、ポリモーフィズム(5)とかカプセル化といった用語の意味を知ることが必要になります。

 

次回中盤へ