ばぁど・うぉっちんぐ

セキュリティに強いWeb屋。自由と春を求めて羽ばたく渡り鳥。

このブログはGoogle Analyticsを利用しています

エンジニアとしての基礎をどう築くか -7年目エンジニアの振り返り -

社会人1年目、プログラマなりたての時に上司に言われていた言葉がある。

急がば回れ。基礎を築きなさい。」

基礎がなければ、その上の応用的な技術など身につきません。

PHPを理解できていない方がPHPの FW を用いて Webアプリケーションを作ろうとしても、FWのルールに忙殺されてまともなものはできないでしょう。 基礎力が身についていなければ、公式文書を読んでも理解度が低くなることを想像することは用意です。

「基礎が大事」という言葉があったからこそ、エンジニアになって7年目になろうとしている今でも基礎を愚直に大事にしている自分がいます。

そんな若輩者の私にも後輩ができ、部下と言えるような方々ができるようになりました。技術的な指導を任されてもいて、基礎を気づく事の大切さを伝えています。

しかし、最近の悩みは技術者としての基礎をどのように築くかの、 How が思いっきり抜けてしまっていることです。

そこで今回は自分自身が基礎力をどう身につけたかを、次メンバーに話すタイミングがあったときのメモとして置いておこうと思います。

プログラマとしての基礎

繰り返し構文と条件分岐

プログラマとしての基礎は、まずは繰り返し構文と条件分岐だと考えています。

forifですね。

どんなに簡単なプログラミング言語の入門書を手にとっても、このfor文if文は最初の方のページに掲載されているものです。

個人的な感覚ですが、大抵のプログラムはforifを書けないとまともに動くプログラムはできません。

これらを覚えるためには有名なfizzbuzzや、数年前にバズったズンドコなどを課題として与えてあげればいいかなと思っています。

クラスを意識させること

次段階として、クラスを認識することです。 クラスを理解できていない人には業務ロジック触らせません。

いわゆる、タイヤキクラスでも動物クラスでもいいです。 クラスを理解できればいい。 ※タイヤキも動物も例として微妙なので私はあまり使わないですが

個人的に教えていて一番反応が良かったのはポケモンですね。

from random import choice

class Pokemon():
    def __init__(self, name, attribute, moves, is_mega=False):
        self.name = name
        self.attribute = attribute
        self.moves = moves

    def attack(self):
        print(choice(self.moves))


class Pikachu(Pokemon):
    def __init__(self):
        name = 'Pikachu'
        attribute = 'thunder'
        moves = ['thunder shock', 'iron tail', 'Volt Tackle', 'Grass Knot']
        super().__init__(name, attribute, moves)

p1 = Pikachu()
p1.attack()

ポケモンクラスという親クラスがあって、ピカチュウリザードンポケモンクラスを継承して定義される。 is-a関係を表しやすいのもポイントです。

教えるときは、ポケモンクラスを例にして身の回りのものや自分の趣味のものをコードで表すように指示しています。 (ただ、あまりいい例が思い浮かばない・・・)

ちなみに、オブジェクト指向とクラスは別物という認識です。 オブジェクト指向を理解せずとも、一旦クラスは理解できるは。 クラスとオブジェクト指向を一度に理解しようとすると、難しすぎるので初学者にはクラスとオブジェクト指向は分離して教えるようにしています。 オブジェクト指向を理解している人が綺麗なコードを書けることを大前提として、後からジョインする人がクラスさえ理解できていれば、それらの綺麗なコードを参考にコードを書くことが可能です。

一つの言語に深く潜ること

一つの言語に深く潜って勉強することを教わりました。

それに従って、言語がどのようにメソッドを探索しているのかや、言語ごとの特徴を把握しやすいというメリットがありました。

例えば、私は Ruby が一番得意な言語だと自負しております。 というものの、Ruby でプログラム言語のノウハウを学んだと考えているからです。

Ruby は資格勉強(Silver, Gold)も行ったので愚直にメソッド名や動きを記憶しました。

また、メタプログラミングRubyも読んだので Ruby でメソッドチェーンなどを学びました。オブジェクト指向も同様です。

社会人3年目〜4年目で Ruby を愚直に勉強し、一つの言語に深く潜ったからこそ、その後PHPを勉強し直したときや、Pythonを学んだときは Ruby と同じような感覚で勉強を行うことができました。

IT関連の基礎を養うために読むべき本

本をたくさん読みました。

これも一年目の時に言われたのですが、本やクラウドに勉強として払うお金は自己投資と教え込まれたからです。

リーダブルコード

www.oreilly.co.jp

プログラム書く人なら言わずもがなの名著。 ソースコードをいかに読みやすく書くかのノウハウが詰まっている。 プログラムは書くことより読む事の方が多い。だからこそ、万人が読みやすいコードを書くことを心がけるって大事。 本の中身も冗談が入り混じっていて、とても分かりやすく、面白い。

プログラムはなぜ動くのか

www.amazon.co.jp

プログラムがなぜ動くのかを解説してくれている。 ぶっちゃけ、大学の講義とかで教わることができるレベルのことが、一冊に詰まっている。

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

www.amazon.co.jp

プログラムはなぜ動くのかと同じ。 大学時代にこんな講義を受講したなーという思い出(講義内容は覚えていない←)

マスタリングTCP/IP

www.ohmsha.co.jp

プログラマではなく、ネットワークの知識が必要な時の鉄板本だと思っています。 ネットワークの歴史から書いてくれているのが、とても良い。

Webを支える技術

gihyo.jp

プロになるためのWeb技術入門

www.amazon.co.jp

まとめ

結局、自分がエンジニアとしてどう勉強してきたかの振り返りになった気がする。

これで基礎をどう築くかの問いに対しての答えを用意できたと思っています。