ぬるま湯やっほー

アプリ作って生活しようと思ってます。

プログラミングにおける単純作業と思考作業と成長

単純作業の反対の意味を考えた時に、「単純」の反対だから「複雑」かなと思ったんですけど、「複雑作業」だとなんか語呂が悪い気がするので、20秒ほど考えた結果「思考作業」にしました。どうでしょう。要は単純作業は頭を使わなくて良いってことです。

文字の印象から一般的なイメージだと、Webとかアプリのプログラミングにおいて、与えられたデザイン通りにView側を実装する、コーダー的な作業が単純作業であり、仕様設計や、どのように実装するかを考えるのが思考作業だと思いがちですよね。

しかし、実際は「単純作業とは反射的にキーボードを打つこと(無思考作業)」であり、「それ以外はすべて思考作業」だと僕は思っています。
与えられたデザインが同じでも、どう実装するかは人によって違います。どう動作するか、どう見えるかは、似たような形になるかもしれませんが、当然画像を読み込むより、CSSで描写したり方が早い場合が多し、アプリだったら、WebViewでコンテンツを表示するより、ネイティブで実装した方が表示速度が早いはずです。そしてさらにそのネイティブの実装方法も、(内容が複雑になれば)100人いれば100通りの実装方法が生まれ、表示速度やメモリーの使用量、通信量、コストなどに差が生じてきます。

これを「質」と呼ぶことにしましょう。
そしてこの「質」の表裏一体のものとして「速度」があります。「質」を出そうとすると「速度」が落ちます。「速度」を出そうとすると「質」が落ちます。よくある話ですね。

さて、ここからが重要です。「なんだお前偉そうに」と思った方もいるかもしれませんが、騙されたと思って聞いて欲しいです。実は、この「質」を高める方法も「速度」を高める方法も、どちらも「思考作業」が必要になります。そして、「質」を出すには「思考作業」が必要で、「速度」を出すには「単純作業」をする必要があります。わかりやすく表にしますね。

f:id:app_2:20190425192557p:plain

うお。分かりやすっ。
さて、この表を見ると恐ろしいことに気づくはずです。もし、あなたが毎日「単純作業」の繰り返しのプログラマーだとすると、どうなるでしょうか。「質が高まらない」「速度が高まらない」「(思考なしで実装できるレベルの)同品質が出続ける」「自分が出せる最高速度が出る」ということになります。つまり成長が止まります。

反対に「思考作業」を毎日繰り返していると、「質が高まる」「速度が高まる」「過去最高の品質を超える」「最高速は出ないけど最高速は高まっている」となります。

どちらが良いか一目瞭然ですね。
成長するためには「思考作業」が必要となります。これを意識しないで日々の業務でぼーっとしてると、停滞、停滞、停滞、停滞、停滞となってしまいます。当然、単純作業より、思考作業の方がどっと疲れますし、速度も落ちますので、締め切りとか仕事量によってはそんな余裕がなくなって来てしまい、ただただ目の前の仕事に没頭しなければならなくなってしまう場合が多くあります。これは健全な環境ではありません。

より早く成長するには、どうすればいいでしょうか。
まず、学生など、時間が多く取れる場合は、ゆーっくり時間をかけて、丁寧に0ベースでサービスを開発しきりまくることです。これが成長するのに最高の方法です。そして、社会人などで時間がない場合は、難しいですが、締め切りに間に合いつつ、なおかつ、思考作業するようにして下さい。難しければ、休日に自分のサービスを作ってください。それも難しければ、転職して下さい。見分け方ですが、「3ヶ月前の自分」と比べてみて「成長したなぁ」と思えなかったらアウトです。(ゆっくり成長するラウンドもあるので、3ヶ月くらいが目安です。年4回振り返れますね。)

まぁ実際は状況を変えるのは難しいという方が大半でしょうね。でも、安心して下さい。だから出来る人と出来ない人の差が開くんですよ。実装に思いを巡らせましょう。