【現役エンジニアが徹底解説】プログラミングに英語力はどれくらい必要?

2022年8月29日

プログラミングに英語力はどれくらい必要?

この記事での前提条件と結論

「プログラミングに必要な英語力」というだけでは前提条件が曖昧なため、この記事では以下の想定でプログラミングに必要な英語力について考えます。

  • プログラミングは業務として行う。
  • 勤務先の企業の公用語は日本語であり、社内の会話やメール、ドキュメントでは日本語が使用されている。

詳細はこの後説明しますが、この前提では英語のリスニング、リーディング、ライティング、スピーキングの4技能にうち、必要となるのは主にリーディングとスピーキングとなります。

その上でどれくらいのレベルの英語力必要かというと、TOEIC600点、英検2級程度あればよいと思います。これは、高校までに習う英文法と英単語については一通り理解しているというイメージです。英語で書かれた技術書を辞書無しで読み通すことは難しいですが、辞書や翻訳ツールを使いながらなら内容を理解できるというレベル感です。

英語力を測る資格としてはTOEICが一番知名度があります。資格としてTOEICのスコアがどれくらいあればよいかについては以下の記事を参考にしてみてください。

プログラミングにおいて英語力が必要な場面

プログラミングにおいて英語力が必要な場面は主に以下の3つです。

  • 公式ドキュメントは技術サイトを使って調査を行うとき。
  • 実際にコードを書く際にクラス、メソッド、変数などに名前をつけるとき。
  • エラーメッセージを読むとき。

技術調査や学習時

プログラミングを行う上で自分が使用しているプログラミング言語やフレームワークの公式ドキュメントやStack Overflowなどのウェブサイトを使った調査は必須です。公式ドキュメントによっては日本語版が用意されているものもありますが、最新情報は基本的に英語で出されます。また、日本語版は機械翻訳されていて分かりにくかったり、日本語版が出るまでに時間がかかることもあります。

StackOverflowは最もユーザが多いQAサイトの一つです。日本語版もありますが、ユーザ数は圧倒的に英語版が多いです。

このように日本語でも技術ブログやQiitaなど参考になる情報は多くありますが、英語ができるとより多くの情報にアクセスできます。ただ情報の多くはウェブサイトであるため、Google翻訳やDeepLなどのツールを使いながら内容を理解することができれば十分仕事は進めることができます。

コーディング時

プログラミング言語を使ってコーディングを行う際にはクラスやメソッド、変数などに適切な名前を付けることが重要です。システム開発はチームで行うことがほとんどですので、自分が書いたコードが他のメンバーが読んだときにすぐに理解できることが重要です。

下は支払額から獲得ポイントを計算するプログラムの例です。【Java】【DDD】NavigableMapを使った支払い料金に応じた獲得ポイントの計算の中のコードを引用しています。

public class PointTable {

    private NavigableMap<Integer, Integer> pointTable;

    public PointTable() {
        pointTable = new TreeMap<>();
        pointTable.put(1000, 100);
        pointTable.put(2000, 200);
    }

    // 支払額からポイントを計算する
    public int calculatePointsOnPurchase(int paymentAmount) {
        return Optional.ofNullable(table.floorEntry(paymentAmount))
                .map(Map.Entry::getValue)
                .orElse(0);
    }
}

計算処理は架空のものですが、変数名やメソッド名にはa, bのように適当に付けるのではなく、処理の意味を表す英単語を適切に使うことが大切です。

エラーメッセージの解析時

システムを実行した際に作成したプログラムのバグや入力データの間違いなどで、エラーメッセージが出力される場合があります。エラーメッセージは英語で出力されることが多いため、英語力があるとエラーの原因分析が効率的にできます。

以下のエラーメッセージはSpring Bootで作成したアプリケーションが起動時にDBに接続出来なかった場合に出力されたエラーメッセージの一部です。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: localhost:5432 への接続が拒絶されました。ホスト名とポート番号が正しいことと、postmaster がTCP/IP接続を受け付けていることを確認してください。
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.19.jar:5.3.19]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.19.jar:5.3.19]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.19.jar:5.3.19]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.7.jar:2.6.7]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.7.jar:2.6.7]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.7.jar:2.6.7]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.7.jar:2.6.7]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.7.jar:2.6.7]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.7.jar:2.6.7]
	at com.example.SampleApiApplication.main(SampleApiApplication.java:10) ~[main/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.6.7.jar:2.6.7]

英語学習に関する記事

英検やTOEICに関する記事も書いているので参考にしてみてください。