ポエム
データ分析
転職
就職

ドイツでITの仕事をしたらいくら稼げるのか?~IT業界全般~

 ドイツの経済は堅調です。移民、テロ、右翼政党の躍進など、様々な不安要素はありながら、2017年もメルケル首相の下、2%弱の経済成長を続けています。国民一人当たりのGDPも日本より年100万円弱高く、住んでいる身としては、

-(多くの州では大学を含む)公教育が学費無料
- ワークライフバランスを重視する文化
- 子育てなどに対する、国からの手厚い社会福祉制度
- EU各地から優秀な人材が集まる故の高水準の教育・医療
- 自由貿易によって生まれる物価の安さ

 などなど、ドイツって豊かな国だなという実感を持っています。

 そんなドイツでITの仕事に就いたらいくら稼げるのか、気になりますね。最近友人に紹介してもらったサイトにそんな記事が載っていたので、まとめてみました。

参考

注意
- 1 EUR = 130円 として計算しています。
- 日本でもドイツでも就業経験のない在独の学生が書いています。

IT新卒の平均初任給は、588万円

 ドイツでは、ITは比較的稼げる業界に分類されます。業界、地域などによって差はありますが、2016年時点でのIT新卒の初年度平均年収は45,211EUR(約588万円)です。以下では、どんな要素が金額を決めるのか、要素別に見ていきたいと思います。

大きい会社、高い給与

 これは当たり前と言えば当たり前ですね。以下の図は、勤務者数によって分類された会社の大きさと、IT新卒の初年度年収(単位は万円)をプロットしたものです。図中の数字は、各会社の大きさにおけるIT新卒年収の中央値で、エラーバーは4分位点 (quartile) を示しています。明らかな線形の関係が見て取れます。

figure_companysize.png

 大きい会社に入った方が稼げる、ということですね。

いい学歴、高い給与

 ドイツの大学教育の歴史は古く、伝統的に学歴社会です。ただ、日本やアメリカと異なり、「どこの大学に行ったか」はさして重要ではありません。「何の分野で」「どこまでやったか」の方が大切です。

 以下の図では、コンピューターサイエンスを学部 (Bachelor)、修士 (Master)、博士 (Doctor)まで学んだ場合、IT新卒としてだいたいいくら稼げるかを示しています。

figure_education.png

 学部卒より院卒、そして博士号持ちとなると、どんどん新卒年収が上がっていくことが見て取れます。コンピューターサイエンスで博士号を持っていると、新卒年収の中央値は746万円にもなります。ただ、学部卒で早く会社に入って仕事を始めれば、その分出世するのも早いはずなので、(残念ながらデータはありませんが)年齢ごとで区切ってみると学歴差はそうないかもしれません。

稼げる業界は、自動車、航空・宇宙、エネルギー

 今の時代、コンピューターがないと大抵の仕事は回りません。大学でコンピューターサイエンスを学んでも、様々な業界に行ってスキルを活かすことが可能です。以下は、業界別にIT新卒が初年度いくら稼げるかをまとめたものです。

figure_field.png

 やはり、ドイツの工業の中心的存在である自動車業界は、給料も高いようですね。公務員 (Civil Service) は若干、他の業界に比べて給料は安めですが、雇用の安定さなどを考えると十分な額を提供しているように思えます。

稼げる職種は、コンサルティングとエンジニアリング

 コンピューターサイエンスの学位を持って就職しても、実際仕事で何をするかによって、給料は変わってきます。以下の図は、職種とIT新卒の初年度年収の関係を、学部卒、修士卒に分けてプロットしたものです。

figure_einsteig.png

 コンサルタントの給料が高いのはドイツも同じのようです(学部卒の中央値が583万円、修士卒で636万円)。おそらく自動車業界が牽引しているのでしょうが、エンジニアリングも同等水準のようです。一方、ウェブ開発 (web development) の初年度年収が、学部卒だと461万円、修士出ても465万円と、他の比べ異様に安いのは気になります……。

 その点、ソフトウェア開発が学部卒(529万円)と修士卒(589万円)で大きく違うのは注目に値します。修士を2年やって初年度年収が60万円上がるなら、ソフトウェア開発をしたい人は修士をした方がいいかもしれませんね。

 今まではドイツのIT新卒が、初年度いくらもらえるか見てきました。今度は、一般的にドイツのIT業界ではいくら稼げるのか見ていきたいと思います。

IT業界の平均年収は、752万円

 コンピューターサイエンスを大学で学び、ドイツでIT業界に就職すればそこは、平均年収57,862EUR (約752万円)の世界です。以下の図で、職種と平均年収の関係を示します。

figure_ITjobs.png

 出世して、プロジェクトマネージャーとしてプロジェクトを牽引する立場になれば、平均年収は1000万円に迫る勢いです。セキュリティ(平均年収920万円)もエキスパートになると相当稼げる分野のようです。一方、ウェブ開発 (Web development)の賃金の低さはやはり気になります。カスタマーサポート (User support)よりも約100万円弱年収が低いというのは、業界のことを良く知らない私にはよくわかりません(知っている方がいたら教えてください)。

経験を積めば、給料も上がる

ドイツには年功序列という概念はあまりありませんが、基本的には仕事をきちんと続けていれば年々年収は上がっていきます。以下は、職務経験と平均年収の関係を、職種ごとにプロットした図です。

figure_experience.png

 どの業界も数年単位で年収がぐんっと上がっていくので、働いてて楽しいでしょうね。業界によらず、ほぼ線形に上がっていくのでモチベーションを維持できる気がします。もちろんコンサルティングやエンジニアリングの年収が高いのですが、Web開発やヘルプデスクの仕事でも、5年以上働けば平均年収600万円に到達できるようです。

まとめのまとめ

  • ドイツのIT新卒の初年度平均年収は、588万円(45,211EUR)
  • ドイツのIT業界における平均年収は、752万円(57,862EUR)

終わりに

 私自身はドイツでも日本でも働いたことはないのでよくわかりませんが、ドイツのIT業界の給料は、物価水準から見てもけっこういいんじゃないかという気がします。

図を作るコード

gehalt.py
# import libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# EUR to JPY =======================================
def eur2jpy(x):
    y = np.round(x*130/10000)
    return y.astype(int)

# the size of a company =============================
# list of data
med = np.array([42170,45108,48534])
err = np.array([med-[36167,40257,42925],[47203,49337,55532]-med])

# visualization
plt.figure()
plt.errorbar(np.arange(3), eur2jpy(med), yerr=eur2jpy(err), \
             fmt='--o', linewidth=6, alpha=0.5, c='k')
for i in np.arange(3):
    plt.text(i-0.2,eur2jpy(med[i])+10,str(eur2jpy(med[i])), fontsize=15)

plt.xticks(np.arange(3), ['small (< 100)','mediam','large (> 1000)'], fontsize=15)
plt.xlabel('Company Size', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.xlim([-0.5, 2.5])
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.show()

# education history =============================
# list of data
med = np.array([42379,46422,57370])
err = np.array([med-[36835,41968,50967],[47364,51423,62965]-med])

# visualization
plt.figure()
plt.errorbar(np.arange(3), eur2jpy(med), yerr=eur2jpy(err), \
             fmt='--o', linewidth=6, alpha=0.5, c='k')
for i in np.arange(3):
    plt.text(i-0.2,eur2jpy(med[i])+10,str(eur2jpy(med[i])), fontsize=15)

plt.xticks(np.arange(3), ['Bachelor','Master','Doctor'], fontsize=15)
plt.xlabel('Education History', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.xlim([-0.5, 2.5])
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.show()

# Field =========================================
# list of data
med = np.array([48700,48040,47600,47114,46499,\
                46455,46011,44762,44555,43433,\
                43379,42379,41258,40584,37876])
err = np.array([med - [44391,42192,40159,42243,39943, \
                40395,42379,40903,36123,39191, \
                34205,36306,33014,35094,32737], \
               [59093,59440,52132,53534,50268, \
                54978,51822,50128,47835,54113, \
                60541,50103,44541,50090,45341] - med])

# visualization
plt.figure()
plt.errorbar(np.arange(15), eur2jpy(med), yerr=eur2jpy(err), \
             fmt='o', linewidth=6, alpha=0.5, c='k')
for i in np.arange(15):
    plt.text(i+0.1,eur2jpy(med[i])+15,str(eur2jpy(med[i])), fontsize=15)

plt.xticks(np.arange(15), \
           ['Automobile','Space & Aviation','Energy','Medical',\
           'Telecomunication','E-technique','Consulting','Logistic','Building',\
           'Insurance','Consumer goods','Hardware','Civil Service','Commerce','Health'], \
    fontsize=15, rotation=45, ha='right')

plt.xlabel('Field', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.xlim([-0.5, 14.5])
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.show()

# new-graduates' income ====================================
v = np.array([[44869,48921],[45219,46398],[40667,45341],\
              [43600,44425],[41846,44132],[35429,35735]])
leg = ['Consulting, Engineering','Project- & Quality management',\
       'Software development','Database development','Admin & Helpdesk',\
       'Web development']
plt.subplot(121)
for i in np.arange(6):
    plt.plot(np.arange(2), eur2jpy(v[i]), label=leg[i], \
             linestyle='-', linewidth=6, alpha=0.5)

plt.xticks(np.arange(2), ['bachelor','master'], fontsize=15)
plt.xlabel('Education', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.xlim([-0.5, 1.5])
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.legend(bbox_to_anchor=(1.05, 1), fontsize=15, loc=2, borderaxespad=0.)
plt.show()

# IT jobs ==================================================
v = np.array([72400,70763,69850,65040,58000,54000,\
              51891,47848,43200,42260,35810])
leg = ['Project manager','Security expert','SAP consultant','IT consultant',\
       'SAP developer','Mobile developer','System- & net administrator','Administrator',\
       'Frontend developer','User support','Web development']

plt.figure()
plt.bar(np.arange(11), eur2jpy(v), alpha=0.5)
for i in np.arange(11):
    plt.text(i-0.2, eur2jpy(v[i]) + 10, str(eur2jpy(v[i])), fontsize=15)

plt.xticks(np.arange(11), leg, fontsize=15, rotation=45, ha='right')
plt.xlabel('IT job', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.show()


# income as a function of working years ====================
v = np.array([[47331,56678,65692],[46302,53296,63500],[46306,59289,63881],\
              [44409,52900,56405],[44409,47412,54532],[44733,46542,52700]])

leg = ['Consulting, Engineering','Project- & Quality management',\
       'Software development','Database development','Admin & Helpdesk',\
       'Web development']
plt.subplot(121)
for i in np.arange(6):
    plt.plot(np.arange(3), eur2jpy(v[i]), label=leg[i], \
             linestyle='-', linewidth=6, alpha=0.5)

plt.xticks(np.arange(3), ['till 2 yrs','3 - 5 yrs', '6 - 10 yrs'], fontsize=15)
plt.xlabel('Work Experience', fontsize=15)
plt.ylabel(r'Income / year  (x $10^{4}$ JPY)', fontsize=15)
plt.xlim([-0.5, 2.5])
plt.tick_params(labelsize=15)
plt.tight_layout()
plt.legend(bbox_to_anchor=(1.05, 1), fontsize=15, loc=2, borderaxespad=0.)
plt.show()