stefafafan の fa は3つです

"すてにゃん" こと id:stefafafan のブログです

エンジニアと英語

この記事ははてなデベロッパーアドベントカレンダーの12月23日の記事です。昨日は id:sharatani さんの「セールスエンジニアという役割で半年仕事をしてみて」でした。
developer.hatenastaff.com
sharatani.hatenablog.com


新入社員の僕がデベロッパアドベントカレンダーで書けることはなんだろうと考えてみたところ、英語ならそこそこできるということで英語について書きます。

自己紹介

はてなスタッフアドベントカレンダーの記事でも書きましたが、僕は今年の5月までアメリカの大学に通っていて、7月に新卒としてはてなに入社しました。僕の平均的な1日については以下の記事を参照ください。
stefafafan.hatenablog.com

英語スキル

僕のブログTwitterだけ見てると完全に日本人かな?と思う方もいると思いますが実は父がアメリカ人なので英語もネイティヴレベルにできます。アメリカも日本も10年ずつほど住んだことがあるので大学でも英語で困ったことはなかったです。

あなたは英語を学ぶべきか

さていきなり本題に入りますが、実際この文章を読んでるあなたは英語を学ぶべきなんでしょうか。個人的には全ての人に「「英語覚えろ!!」」と理由もなしに勧めたくはないです。僕自身もいきなりそういうこと言われるとなんだか嫌な気持ちになります。まず逆に英語を学ぶ必要がないであろう人の特徴をあげてみます:

  • 一人でコード書いてる
  • 海外をターゲットにしていない
  • 他人のフィードバックもいらない
  • 向上心もそれほどない・書いたものが動けばよい

こういう人には僕は英語を習得しろ!とは言いません。普通に動くものがつくりたいだけなら英語は必須ではないと思います。上記の特徴に当てはまらない人で英語が全くできないひとには少しでいいのでちょっと英語を勉強してみるのはどうでしょうっと提案したいです。果たしてエンジニアとして英語を学ぶメリットとはなんでしょうか。

英語を学ぶメリット

エンジニアになるならプログラミング言語とかよりもまず英語を勉強するべき!という話はたまに聞きますがこれは何故でしょうか。僕は恐らく以下の2点が大きいと思います。

英語の文献が読める

エンジニアとしてステップアップしていくには最新の流行についていくのが大切です。日本語の文献もそこそこありますが、最新の技術などについては英語の文献しかない状況もあると思います。そういうとき物凄く英語ができる必要はないですが、少なくとも読んで理解できるくらいはあると良さそうです。

海外のエンジニアと交流できる

日本語ができるエンジニアは恐らくほとんど日本人しかいません。一歩日本の外にいくと全然話が通じなくなるかもしれないので、そういうときのためにも英語でちょっとした会話ができると繋がりが増えそうですね。海外出張とかしない人でも、エンジニアはネットでつながっているのでSNSメーリングリストなどで海外の凄腕エンジニアと英語でチャットができると良いです。別に英語じゃなくてもいいですが、やはり英語をしゃべる人口が多いので勉強しておいて損はないです。
これに関連することだと例えばGitHubなどに自分のプロジェクトを公開する際、世界中の人に見られたいときとかもなるべくコメントなどを全部英語にし、変数名もわかりやすく英単語とかにすると海外のエンジニアもすんなりと理解してくれてコメントしてくれるはずです。

ソースコードと英語

変数名をちゃんとした英語にするメリットは個人的に2つあります。

  • 海外の人が読んでも変数の意図がわかる
  • 可読性があがる

この2点です。1点目は特に説明する必要はないと思いますが、変数名に日本語とかローマ字が使われてても海外の人がわかる可能性はとても低いですよね。そういう変数が使われているコードをGitHubにあげられても読む気にはなりません。
2点目は使っているプログラミング言語が英語だという前提です。どういうことかというと例えば以下の2つのコードを比べてみてください。

int someValue;
while (true)
{
    // ...
    if (someValue > otherValue) break;
}
int aruAtai;
while (true)
{
    // ...
    if (aruAtai > hokaNoAtai) break;
}

変数名のみしか変えていませんが僕からすれば上のコードのほうが可読性が高いです。何故かというと例えばif文の行、僕は脳内でこの様に読んでいるからです:

if someValue is greater than otherValue, break

対して下のコードのif文はこういう具合に読んでいます:

if ある値が他の値より高ければ break

これは僕がハーフだからというのもあるかもしれませんが、恐らく誰だって言語が混ざってると読みづらいと感じると思います。プログラミング言語でいうと、HTMLにJSやらCSSやらPHPが同じファイルに混ざってると読みづらくないでしょうか。そういうのと同じ気分です。みなさんが良くお使いになっているプログラミング言語の多くは英単語がふんだんに使われていると思うので、変数名とかもそれに合わせていきましょう。英語↔︎ローマ字の切り替えが不要になります。

コメントに対してはまだマシだと思っていて、ソースコードが全部英語、コメントが日本語とかはそこまでつらいとは思いません(コメントを無視してもコードだけ読めば理解できるときも多い)。でもやはり英語↔︎日本語の切り替えも大変になってくると思うのでコメントも英語だとなお良さそうですね。

文法の正しさ

なるほど、そういうことなら一旦日本語の変数で書いてあとから翻訳サイト使って英単語に置換していけばいいのだな! と思ってしまう方もいると思いますがそう単純なことでもなさそうです。文法の間違いがあると、時には勘違いを生んでしまう場合もあります。
例えば、終了したかどうかを表すfinishという変数を作ったとします。finishは動詞なので、ぱっと見終了させるための関数に見えます。この場合過去形にすると良くて、具体的にいえばfinishedとかhasFinishedにすれば変数名だなというのがわかり、勘違いの可能性を減らせます。

効率化の大切さ

エンジニアは何らかのタスクを効率良くするためにプログラムを書くことが多いかと思います。そのプログラムを書く過程自体も効率的だとみんなハッピーではないでしょうか。コードを書くとき、インデントがバラバラだと修正のときとても大変です。それと同じように、英語の変数を使うと決めたら全部統一して英語にしましょう。英語を使うと良いと聞いて一部だけを英語にして一部はローマ字とかにするくらいならいっそのこと全部ローマ字にしたほうがまだマシです。

普段から英語でコードを書き、英語でコメントも書き、英語でレビューをし合える状態だと効率良くコードが書けるようになると思いますし、なんかのきっかけで海外のエンジニアさんと交流するときになっても安心だと思います。無理に英語使ってくれとは言いませんが、この機会にちょっとずつ英語でコードを書き、例えば英語版StackOverflowHacker Newsでも追ってみてはいかがでしょう。


ここまで読んでいただきありがとうございます。明日の担当は id:ichirin2501 さんです。お楽しみに!