delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

「プログラミング言語の習得」をブレークダウンして考えてみる(WEBアプリ開発の場合)①

概要

エンジニアをやっていると「新しいプログラミング言語の習得」に取り組むことがある。

仕事で必要に迫られて習得しようと思うこともあるし、自分で興味をもった言語があって触ってみよう・習得してみようと思うこともあると思う。

達人プログラマ』にもエンジニアがやった方がいい学習の一つとして「毎年少なくとも言語を一つ学習する。(p.20)」と書かれている。

また、エンジニア同士で「今、プライベートで○○言語勉強してるんだよね」みたいな会話をしたりすることもある。

ただ、そこでふと思ったのが、そもそも「言語を習得する・学習する」という表現がかなり漠然としているということである。
そこで、「言語を習得する」ということについて、WEBアプリ開発の場合を例にブレークダウンして考えてみたい。

背景

  • 自分自身、1年半くらい前にPythonを習得したので、記憶がある内に、どうやって勉強したか・どうすればもっと効率的に習得できたと思うかを書き残しておきたい。
  • 次に新しい言語を習得しようと思ったときの参考にして、次はもっと効率的にやれるようにしたい。

自分にとっての「言語の習得」のゴールのイメージを持つ

初めにも書いたが、「言語の習得」という表現がかなり漠然としている。

例えば、「言語の習得 = 言語の全仕様を把握して空でコーディングできるようになること」だとすると、ほとんどの人は半永久に言語を習得できないことになってしまう。

なので、まずは、自分にとっては何を以って言語を習得したことになるのか(=ゴールのイメージ)を考えると、「言語の習得」の解像度が上がると思う。

加えて、プログラミング言語には膨大な機能が備わっているので、ゴールのイメージを持たずに勉強し始めると、色々な面白そうな機能に目移りしてしまったり、実務では使わないような細かい言語仕様に入り込みすぎたりして、学習効率が悪くなるということもある。

ゴールのイメージを持つことで全体のロードマップがわかるようになるし、

  • これは学んだ方がいい
  • これは必要になったら覚えればいい
  • これはやらなくていい

という判断ができるのだと思う。

自分の場合

自分の場合は、次の仕事はPythonでWEBアプリ開発をやりたいと思っていたので、DjangoでWEBアプリを開発する練習ができる状態になりたかった。

従って、「Pythonを習得する」のゴールのイメージは、DjangoでWEBアプリを開発する上で足を引っ張らないレベルでPythonが使えるようになることだった。

ゴールのイメージを持つことで、「Pythonの学習」は「Pythonの知識がほとんどない状態」と「Djangoの学習ができる状態」の橋渡し的な存在なんだと位置付けることができる。

ゴールのイメージを持つのが難しい場合

ゴールのイメージを持つのが難しい場合もあると思う。

やりたいことがWEBアプリ開発の場合であれば

あたりは各言語の代表的なフルスタックFWとして調べればすぐに出てくるはずである。

従って、習得したいのがこういった比較的古くからある言語の場合は、「フルスタックFWで開発ができるレベル」を目指せばよいということでそんなにゴールのイメージを持つのに困らないと思う。

対して、例えばGo言語とかだと、調べてみてもFWのシェアは拮抗していて、「このFWがデファクトスタンダードだ」みたいなのはなさそうに見えるし、そもそもGoではFWを使わないという意見も割と目にしたりする。(※ 私はGoはど素人なのでただの外から見た印象です。)

JS界隈も少し前まではFWが乱立している状態だったと思う。

このように、習得したい言語のエコシステムにデファクトスタンダードと呼べるようなFWが存在しない場合は、ゴールのイメージ作りのために、時間をとってエコシステムをリサーチしたり、該当言語で開発している知人から話を聞いたりする必要があるのかな?と思う。

「ゴール」に到達するためにどうして言語の学習が必要なのかを考える

次に、「ゴール」に到達するためにどうして言語の学習が必要なのかを考えてみる。

自分のケースでいえば、どうしてDjangoで開発するのにPythonの学習が必要なのか?ということである。

Pythonの知識・スキルがない状態で、Djangoで開発しようとした場合、例えば以下のような場面で躓くことが想定される。

環境構築ができない

DjangoPythonなので、最初にPythonの開発環境を構築する必要がある。
そもそもPythonで環境を作って開発したことがないと

  • Pythonをどうやってインストールしたらいいのか分からない。
  • エディターやIDEを何を使ったらいいのか分からない。

ということになる。

パッケージのインストールができない

初めにDjangoをインストールするためには以下のコマンドを実行する。

$ pip install django

このときに

  • Pythonでパッケージをインストールするときにはpipというコマンドを使うことを知らない。
  • おまじないのようにDjangoチュートリアルに書いてあるコマンドを実行したらインストールには成功したけどコマンドの意味が分からない。

ということになる。

Pythonシンタックスが分からない

例えば以下はDjangoにおけるViewのサンプルコードである。

from django.views import View
from django.http import HttpResponse

class SampleView(View):
    """ SampleView """

    def get(self, request, *args, **kwargs):
        return HttpResponse("ok")

DjangoPythonなので、このサンプルコードを理解する上では、以下のPythonの言語知識が必要である。

  • from xxx import yyyでモジュールをimportする。
  • Pythonではインデントでコードブロックを表現する。
  • コードコメントの書き方
  • classの宣言方法
  • class ClassA(ClassB):はclassの継承を意味する。
  • メソッド(関数)の宣言方法
  • インスタンスメソッドでは第一引数にselfを渡す。

上記のサンプルコードを理解するためにはViewとは何かというDjangoの知識も必要だが、Pythonの基本的な知識がないとそれ以前にシンタックスが分からなくて躓いてしまう。

ビジネスロジックが書けない

Djangoを使えばアプリの基盤部分はDjangoがやってくれるとしても、アプリケーション固有のビジネスロジックは自分で書かなければならない。
従って、どっちみちPythonはある程度は書けないといけない。



これらを分からないことが出てくるたびに、逐一調べながら開発するのは効率が悪いし、知識が断片的になってしまう。

従って、効率よくWEBアプリ開発を進めるためには、先にある程度まで言語を習得しておく必要がある。

まとめ

このようにゴールを決めて、そこから逆算してみることで、「言語の習得」の解像度が上がって、何をするのかを具体的にイメージできるようになると思う。

次の記事で具体的に、WEBアプリ開発に進む前に習得した方がよい項目について検討してみたい。