プログラマーへの道、備忘録
略歴
90年代のAppleとAdobeのDTP革命の熱に浮かされて、薬科大学を中退後、グラフィックとウェブデザインを独学し、フリーランスとしてウェブ系の仕事を5年ほどしつつ、その後はモノ作り中心のデザイナーに転身。
ITエンジニアとしてビリオネアとなったドイツ人投資家との縁で、彼の所有する外資系リゾートにて支配人として10年ほど働く。
が、コロナの厄災にて観光業が壊滅。失業状態。
非常事態宣言下のフィリピンにて、Amazon初期にバイスプレジデントを努めた投資家より、巣ごもり中にITプロジェクトへのオファーと、数ヶ月の自習期間を与えられる。
20年ぶりに見るWEB開発のノウハウは、HTML、CSS、PERLでコツコツ書いていた20年前とは別世界であり、戦後からタイムスリップした様な気分で、ゼロから勉強し直さないと全くついて行けないと絶望する。
自習とは自分との戦いである。
モチベーションを保つ為と、学んだことを整理する目的で、自分の為に記事を書いていこうと思います。
プロジェクトに必要なスキルは
- Linux
- node.js
- express
- mongoDB
- bootstrap
- OAuth
- React
この辺を復習がてら備忘録として書いていこうかな。
英語にてプログラミングを学び直した結果
90年代に主にフロントエンドのサイトデザインをしていて、動的なものを作る際に、PERLやJAVASCRIPT等をオライリー本(もちろん日本語訳)で勉強していた時は、挫折、再開を繰り返し、結局はほとんど身につかず、人のコードをコピーして少し書き直す程度で茶を濁していた訳だけど、海外の会社にて10年あまり働き、英語のソースをベースに勉強を始めた結果、わかり易すぎて目から鱗であった。
気づいたのは、プログラミングが分かりにくい大きな原因が、訳された日本語がムズすぎる問題である。
正規表現、連想配列、関数、引数、実行形式、コンパイル とかめちゃ分かりにくいし、本を開いてこういう単語がいっぱい出てきた時点で読む気失せるよね。
単語からそれがなんなのかが全くイメージできへんやん。
英語だと、その言葉のままやねん!当たり前だけど。なので、非英語圏の人は、まずその言葉がなんなのかを理解しないとしけないっていうので、大きなディスアドバンテージ。
その言葉を調べると、その言葉を説明するさらに知らない言葉が出てきて、さらにそれを調べるとさらに。。。という無限ループに陥り、挫折。
プログラミングが難しい というより、プログラミング用語を日本語訳した言葉が難しい。っていうのはあるんじゃないかと思う。プログラミングそのものじゃなくて、単に言葉の問題。
それに、これは学習コストが2倍かかることを意味する。
日本語脳での学習時:RegExpとは → 正規表現とは、前に説明しましたように、「いくつかの文字列を一つの形式で表現するための表現方法」です。その「一つの形式で表現するため」に、いくつかのある文字に対して特別な意味を与えています。うんぬんかんぬん。意味わかめ増えるタイプ。
実際のコード時:こういう場合は正規表現を使えば良さそうだ → 正規表現 → let pattern = new RegExp("Hello World")。
つまり、RegExp → 正規表現 → 正規表現 → RegExp であり、余分な脳内翻訳、概念理解プロセスを経ているのである。ほぼほとんどのプログラムで頭の中でこういう往復翻訳作業があり、この部分だけで結果的に膨大なエネルギーを消費していることになる。これはものすごいコストである。
英語脳の場合 What's RegExp -> A regular expression is an object that describes a pattern of characters that are used to perform pattern-matching.
RegEx -> regular expression -> let pattern = new RegExp("Hello World")
単純に、学習、理解と実際のコーディングが脳内変換なしにフラットにそのまま繋がるよね。めちゃくちゃ楽
その次は、英語でのリファレンスやソース、チュートリアルの厚さ。
とにかく情報量が日本語と比べて圧倒的に多い。
公式のドキュメントやチュートリアルは勿論ほぼ英語、インド人やロシア人プログラマーとかでも、情報発信は勿論英語。Youtubeでも怪しげなインド人が超わかりやすいデータベースのチュートリアルをしていたりする。
例えばnode.jsでよく使われる、エラーと返ってきたデータとを引数とするコールバックがあって、それについて調べたとき、日本語ではほとんど出てこないんだけど、英語では色々な人が解説していて、圧倒的に情報量が違う。stack overflowみたいなエンジニア系の掲示板とかも賑わってる。
つまり、英語圏のプログラマーと、非英語圏のプログラマーでは、もう圧倒的に後者不利であって、英語圏のプログラマーはチートレベル。
で、プログラマーに英語は必要か?
プログラマーと英語については色々と議論があるし、海外の掲示板等でも、必要なのは英語じゃないんだYo!みたいな議論あるけれど、彼らの言ってる最低限の英語レベルって、日本人から見たら100中60〜70くらいはあるんだよ。
最低でも聞き取ってるし、書けてるし、アクセントが強くても話せてる。特にインド系はそういう人多い。
そもそも英語で議論してるのに、英語は関係ないとか言ってる時点でもはや論外であって、それを持ち出して、プログラミングに英語は関係ないのだっていうのは的が外れてると思う。
日本でも、プログラマーに必要なのは英語よりもコミュ力!という論調をよく見かけるけど、何人かの海外のフリーランサーと働いた時に思ったのは、コードを書く人は、最低限のマナーと礼儀があれば良いんじゃね?っていう結論。サービス業じゃないんだしさ。
頼んだ仕様がちゃんと実装されて返ってくれば、別にええやん。プログラマーの性格が悪いから、コンピューターが動作を拒否るとか無いし。
今自分はフィリピンにいるのだけど、正直教育レベルはかなり低いし、論理的思考からは正反対に位置する人たちである。
しかし、海外のIT企業が沢山オフショア拠点を作り、フィリピンプログラマーのレベルも全然使えるレベルっていうのは、もはや英語が公用語というメリットが大きいという事の証明なんじゃないかと思うんだよね。
日本語圏の人からすると、プログラミングの能力以前に難解な日本語訳された用語との戦いがあり、ある意味その戦いってあんまり本質的ではないよねと。
コーディングで挫折しそうな人は、自分はコーディングの才能がないのではなく、よくわからない用語がわからないだけではないかと考えて、少し英語を習ってみると良いのではないかと思います。
言語はプログラミング以上に人生に役立つしね。
<追記>
独学向けのコスパ最強海外学習サイトについて書いてみたよ。
https://qiita.com/monsoonTropicalBird/items/a5a89cc689a81e6ba71e