シンガポールで転職活動をした

シンガポールでソフトウェアエンジニア職を探し、無事オファーを貰うところまでたどり着きました。誰かの参考になるかもしれないのと、自分で後で思い返せるように経験を纏めてみました。

背景

以下の状態で転職活動を始めた。

  • 日系企業に新卒入社・ERP開発
  • シンガポール在住(約6年)
  • ソフトウェアエンジニアとしての経歴は、研修期間や、PMなど実質別のロールで働いていた時期を除くと5年半くらい
  • 転職活動経験はほぼ無し
  • 大学は非CS卒(地方国公立文系)

実は元々日本に帰る予定だったのだけど、諸事情によりシンガポールに残る方針に変更。すでに会社事情で帰任時期が決まっていて、それまでに転職する必要がある形になってしまっていた。オファーを貰えたのはかなりギリギリ(若干アウト)のタイミングで、シンガポール国外には出ずに済んだ*1が、急に引継ぎが必要になってしまったので一部迷惑をかけてしまった…。

戦績

  • 応募した会社:11社
  • 選考まで進んだ会社:10社(書類選考落ち:1社)
  • オファー(内定):1社

2月から本格的に準備を始めて、7月上旬にオファーのメールを貰った。途中仕事が忙しくてあまり勉強等が捗らない時期もあり、結構時間がかかってしまった。

面接準備でやったこと

情報収集

シンガポールでの面接の方式は、アメリカやその他外資系企業と似通っている箇所が多いと思う。アメリカや外資系企業に転職した人の記事はたくさんあり、参考になった。

www.slideshare.net

en9.hatenablog.com

www.notion.so

Resume

Resume(英文での職務経歴書)は以前から書いていたものに追加するだけだったので、あまり苦労はしなかった。普段から準備しておくのが良いと思う。

フォーマットについては有料のKickresumeを利用した。見た目をテンプレートで決められるのでResumeの作成が楽になる。

www.kickresume.com

アルゴリズムとデータ構造

以前、シンガポールのNUSで勉強していたことを記事に書いた。*2その際にアルゴリズムとデータ構造の初歩を勉強していたので、まずはそれを復習した。かなり忘れていて、復習に時間がかかった。

また、本やUdemyでも勉強した。

www.udemy.com

これらは全てやったのではなく、自分が苦手な箇所等をかいつまんで勉強を進めた。

問題演習は、以下のサイトからLeetCodeの問題をピックアップして解いた。

1kohei1.com

時間が無かったので事前準備を満足にすることはできず、勉強 → 面接 → 勉強 → 面接 → … という感じだった。面接で解けない問題があるたびに、LeetCode等で類題を探し、もう一度似たような問題が出た際には解けるように準備した。

システムデザイン

こちらも全て完璧に勉強できたわけではないのだが、以下の2つのサイトにお世話になった。

www.educative.io

github.com

今回は殆ど観れなかったが、以下のYouTubeでのシステムデザインインタビューの解説動画も気になっていて、いつか時間を見つけて観たいと思っている。

www.youtube.com

その他の技術関連(デザインパターンなど)

Enterpriseのソフトウェアを開発していたバックグラウンドがあるからか、Javaでのシステム開発関連の職を紹介されることが多く、そこではデザインパターンオブジェクト指向周り)について聞かれることが少なからずあった。例えば「今まで実装したことのあるデザインパターンを教えてください」という質問は複数回あった。Job Descriptionからもそのような質問がされそうなことが予想ついたので、以下の本や記事を参照して勉強した。

以下の記事は、SOLIDについてJob Descriptionに記載があったので、SOLIDについて学ぶのに利用した。

note.com

余談だが、シンガポールには外資系金融機関のAPACの拠点が置かれることが多く、そこではJavaの経験があるソフトウェアエンジニアをよく募集している。

Behavioral Questions

普段の行動・姿勢等を聞かれるBehavioral Questionsは、正直あまり対策しなかった。インタビューをいくつかこなしているうちに、そこそこ上手く答えられるようになった気がする。

以下のスライドは確認して、ある程度答えられるようにしておいた。

https://business.linkedin.com/content/dam/me/business/en-us/talent-solutions/resources/pdfs/Guide-to-screening-candidates-30-essential-behavioral-interview-questions-ebook.pdf

面接の詳細

書類選考

以前から声をかけてもらっていた会社がすでに多くあり、その中からまず選んで応募した。また、LinkedInでステータスを「Open to work」に変更したところ、たくさんのお声がけを頂き、結局自分で直接応募したのは2社のみだった。なので、基本的には「そもそも面接に進めない」という事態になることは無く、時間が許せばもっと多くの会社の選考を受けることができそうだった。恐らく、ソフトウェアエンジニアの需要が増えていることと、COVID-19に伴う入国規制により、シンガポール国外からの採用が難しくなっていることが影響しているのではないかと思っている。

ただ、労働ビザの都合でシンガポール国民・PR(永住権持ち)しか受け付けてくれない企業もあった。いくつかの企業では、メッセージに返信したあとにPRかどうかを聞かれ、Noと答えると返事が無くなるということがあった。

返事しきれないくらいのメッセージ量だったので、選別して返事する必要があった。エージェントで具体的に企業を紹介してくれない人だと、電話してからすでに選考を進めている企業の紹介だったりして無駄に時間を費やすことになるので、企業名を先に教えてくれないエージェントにはだんだん返事しなくなってしまった。

ちなみに、JAC*3などエージェントに自らコンタクトする方法もあると思うが、自分の場合は特に行わなかった(不要だった)。

技術面接

ここですごく苦労した。もともと日本ですら技術面接をそもそも受けたことが無かった*4ことから、単純に経験が足りてなかった。

さらに、LeetCodeやAtCoderのようなアルゴリズムは特に苦手だったので、最初にスクリーニングとして行うWebでの試験に落ちてしまったことも数社あり、落ちるだびに結構凹んでいた。

英語

自身はすでにシンガポールに5年以上在住しており、日本人がいないチームでずっと仕事をしてきていたので、英語での面接は緊張はすれどもそんなに問題にならないだろうと思っていた。しかし、いざ受けてみると英語面でもかなり苦労した。

転職活動を本格的に始めたばかりの頃、エージェント経由である外資系金融機関でのソフトウェアエンジニア職に応募した。事前課題と1次面接は突破し、次の面接が通ればほぼ内定は確定と言われていたのだが、その面接であるタイミングから急に英語が何も分からなくなり、コミュニケーションが取れなくなってしまったことがあった。ライブコーディングしながら、さらにあまり聞きなれてないタイプの発音だったのも重なり、意思疎通が突然できなくなってしまった。(恐らく、面接官からしたら意味不明な挙動だったと思う。)

この面接はかなりトラウマになってしまったが、同時に、緊張状態にあると英語面でも問題が出てくることが分かり勉強になった。面接には慣れが必要とよく言われると思うが、英語だとなお、きちんと慣れておかなければならないと気づいた。また、そもそも英語が得意とは言い難い状態なので、引き続き勉強を続ける必要性も感じた。

給与交渉

今回良くなかった点は、複数社のオファーを貰うことができなかったので、給与交渉の余地がほぼ無かったことだった。自分はもう帰任時期が近づいて時間切れだったのだけど、できればもう1社オファーを貰えれば給与を上げる等の交渉が行えたかもしれない。

また、自身の給与について聞かれたときには正直に答えてしまっていたが、これは実はあまり良くなかったかもしれない。以下のような意見を複数見たことがある。

嘘をついてはいけない*5が、自分の給与を必ず開示しなければならないというわけではないことは心に留めておくと良いだろう。

次があるとすれば、やりたいこと

もっと問題を解く

今回はシンガポールを出なければならない期限が決まっていたので、面接対策は不十分な状態で面接を受けることになってしまった。LeetCodeで確認したところ、今まで1度でも解いたことのある問題は「82問」だったが、まだ足りないなという印象。次があれば、以下の「Top Interview Questions」くらいは最低でも全問解いてから臨みたい。

Top Interview Questions

今回受けた企業の中ではLeetCodeのような問題を一切使わない企業もあったが、アルゴリズムが苦手なのは多くの場合ボトルネックになる。シンガポールは日本に比べて容易に解雇できることから、Job Sefetyのためにも普段から鍛えておく必要があるかもしれない。

システムデザインについては模擬面接をやって、もっと場数を踏んだ方が良いと感じた。また、以下の記事ではシステム系の基礎力の勉強について「ISUCONの過去問をいくつかやってみると良いのでは」とあり、ISUCONを利用してみるのも良いかもしれない。

kumagi.hatenablog.com

勉強方法の工夫

次はこの方法を試してみたい。

雑感

10社の選考を受けた、という数が多いのか少ないのかはよく分からないが、感覚としては「落ちまくって大変だった」という感じ。面接一つ一つにすごい体力を使うし、それを普段の業務と並行しながら進めるのは結構大変だった。さらに自身の場合だと明確な期限があったので、それがさらにきつかった。最終的にはだいぶ面接慣れしたし、無事オファーも頂けたので良かった。

今はインタビューのことは忘れて、次の企業で使う技術の勉強を始めている。次の仕事を楽しみたい。

*1:シンガポールを出ると、入国制限があるのでシンガポールでの転職難易度がかなり上がることが予想される。

*2:https://ryoishizawa.hatenablog.com/entry/2020/12/02/090000

*3:https://www.jac-recruitment.sg/ja

*4:偶然ITの会社に入社し、プログラミングの研修で自分で製品を作れる楽しさに気づいてソフトウェアエンジニアになった。それまでの開発経験はゼロだった。

*5:ビジネス上当然だと思うが、それ以外の理由として、シンガポールではオファー受諾後に(シンガポール国民・PRで無い限り)必ず行う労働ビザの申請時に月額給与を書くことになる。

シンガポール国立大学(NUS)で社会人学生をやってみた

本エントリは「社会人学生 Advent Calendar 2020」2日目の記事です。

去年の8月から今年の4月末くらいまででシンガポール国立大学(National University of Singapore、NUS)で「Graduate Certificate in Computing Foundations」という社会人向けコースに通っていたので、そのコースの様子と、色々思ったところをシェアしてみようと思い、初めてブログをきちんと書いてみることにしました。*1

自己紹介

シンガポール日系企業のソフトウェアエンジニアとして働いている者です。大学卒業後、日本で研修含めて2年半ほど働いたのちシンガポール赴任になり、こちらで5年勤務しています。シンガポールでは、日本で販売している製品の開発チームの一部をシンガポールに移したり、新製品の設計チームをリードしたり、コードを書いたりしてきました。

なぜNUSに通うことにしたのか

今は職業として日々コードを書いていますが、大学は文系、就職まで1行もコードを書いたことの無い人間でした。新卒で入社した会社が偶然研修でプログラミングをさせる会社で、何とか研修を終えた結果、製品を作ること自体に興味が湧いてきてエンジニアへのを配属を志望した、というのがキャリアの始まりでした。

日本で働いていた頃は私と似たようなバックグラウンドを持った人が周りにも多くいて、活躍もしているようだったので、コンピュータサイエンスのバックグラウンドを持ってないことについてあまり考えていませんでした。しかし、配属されてから2年後にシンガポール赴任することになり、シンガポール赴任後はコンピュータサイエンスのバックグラウンドを持っているメンバーに囲まれて仕事をするようになりました。

私の所属するオフィスでは、周りは若くて経験の少ないメンバーが多く、また当時私は日本で得た業務知識や、業務上利用しているフレームワーク等の知識を多く貯金できていたので、コンピュータサイエンスを専攻していないというバックグラウンドの違いがあっても何とかやっていけました。*2 しかし、今後もエンジニアとしてキャリアを積んでいくにあたっては、コンピュータサイエンスを学ぶ、ひいては学位を取ることが必要かな、と考え始めました。また、シンガポール現地採用されている外国人メンバーがどういうバックグラウンドを持っているのかということにも興味があったし、周りのメンバーでもパートタイムでNUSの修士課程(Master)に通っている同僚がいたので自分も行ってみたいと思いました。*3

そこで、修士課程の説明会に出向いたのですが、そこで出された授業一覧には「Advanced Operating Systems」「Advanced Networking...」みたいな感じでやたら「Advanced」な感じでした。(あとで冷静に考えれば、Masterなので当然なのですが)基礎すら怪しいのに応用って…と思いながら聞いてたら、担当者が「基礎を学びたい人にはこういうコースがあって…」という説明と一緒に今回受けたコースを紹介してくれました。これは受けなきゃ!とその場で思い、応募に必要は書類を集め、無事NUSに通えるようになりました。

授業内容

授業4つされているうち3つを取ればCertificateが取れる仕組みで、私はプログラミング基礎コース以外の3つを取得しました。(プログラミング基礎の授業は本来必須なのですが、私がすでに業務上でコーディング経験があったので履修免除されました。)

  • IT5002 Computer Systems and Applications(主にCPUの仕組みについて)
  • IT5003 Data Structures and Algorithms(データ構造とアルゴリズム
  • IT5004 Enterprise Systems Architecture Fundamentals(エンタープライズアプリケーションの設計・UMLなど)

以下、感想をつらつらと書いていきます。

行ってよかったこと

狙い通り、「コンピュータサイエンス専攻の人が大学で何を学んできているのか」というのは(完全に理解したわけではないものの)だいぶクリアになりました。NUSに入るとほかの学生と同様の学生として扱われるので、システム上でも同じものを利用できます。それを元にNUSのシラバス等を確認したりして、大学卒業までにこういうことが前提知識としてありそう、というところもある程度掴むことができて楽しかったです。

また、思いがけず良かったのは、大学のセメスターとか、どういう風に単位を取得していっているのかを英語と共に学べ、それを同僚との雑談に活かせるようになったことでした。留学経験すらも無いので海外の大学がどういうものなのかよく知らなかったのですが、バックグラウンドが分かっていると、やはりこちらから色々聞ける内容も増えるし、理解も容易になりました。

辛かったこと①英語

大学に行く時点で、会社ではほぼ全ての業務を英語でこなしていて、チーム全員が外国人の環境でも長く問題なく適応していました。なのであまり心配していなかったのですが、行ってみるとなかなかつらかったです。恐らく日本語でも難しいことをひたすら英語で聞き続けるので、果たして英語が分からないのかそもそも内容が理解できないのかもよく分からず状態でした。テストでさえ、「これってこういうことを聞いているのか…?」と考えて試験時間が経過してしまう始末。1つのセメスターを終える頃にはさすがに慣れましたが、英語がもう少しできていればもっと成績取れたかな…と思います。

辛かったこと②時間・体力

当然といえば当然ですが、やってみると、社会人をやりながら学生をやるというのは本当に大変だな…と改めて実感しました。*4 このコースの場合、授業は修士課程の学生に比べると少ないですが、特に去年の10月~12月は週3日大学にいく形式になっており、テスト前は特に体力的にしんどかったです。上記で書いたIT5002の試験を終えたあと、気が抜けたのか体調を崩してしまい、その次の別のクラスの最終試験前なのに体調が悪くて勉強どころでないという事態になりました。無事単位取れて良かった…!ですが、私はあまり体力がないので、今後修士課程に進む場合にはフルタイムの学生に戻る選択肢も考えた方が良いなと思いました。

内容は難しかったり易しかったり

内容は非ソフトウェアエンジニア向けの授業なので、中には易しいものもありました。特に「IT5004 Enterprise Systems Architecture Fundamentals」は、自分自身がエンタープライズ向けのアプリケーションを設計・開発する立場だったので難しくはありませんでした。(Aを取るために宿題にはかなり時間を費やしました。)一方、普段の業務ではほぼ使うことの無かったCPUの内部のアーキテクチャアルゴリズムについては難易度が高く、辛くもありつつもとても楽しかったです。「IT5002 Computer Systems and Applications」はいわゆる「パタヘネ本」をベースにした授業なのですが、こちらが一番難しく、低レイヤって本当にすごいな…と毎回関心していました。

次どうするか

ここは悩み中です。元々はNUSの修士課程へ進学するのを考えてコースを受講したのですが、色々思うところがあり、NUSでなくても良いかな?と思い始めています。*5 日本だと、JAISTが自分のバックグラウンドに合いそうな気がしています。

諸事情ですぐに大学に行ける状態ではないので、もうしばらく働きながら、引き続き検討していこうと思います。

最後に:同じコースを受ける人向け

私の受講したコースはシンガポールに住んでいないと受講できないため、この記事を読んでから実際に受講できる人は殆どいないと思いますが、受ける人向けに情報をいくつか書いておきます。

  • 事前にTOEFL等の英語試験を受ける必要はありません。ただし、当然ですがある程度できないとついていけません。
  • 値段は、外国人にとっては、ここに書きたくないくらいには高いです。(知りたい方はご自身でどうぞ…。)*6 私は、コンピュータサイエンスのバックグラウンドをどうしても身に付けたかったのと、たとえ自分にとって簡単だったとしても英語の勉強にはなるし、学生の頃はできなかった留学っぽいものを経験できる良い機会だな、と色々と理由を付けて自己投資することにしました。
  • 本コースを修了した後にNUSの修士を受ける際、GMAT/GREの受験は不要になるとメールで聞きました。これもこのコースを受講する動機の一つになりました。但し、私があくまでも個人的に確認した内容で正式な文書等は見つけられてないので、気になる方はご自身でもきちんと確認しましょう。大学にメールすると、数日以内に返信をもらえます。

*1:本当は去年のカレンダーで書こうと思ってたのですが、去年のこの時期はきちんと単位を取れたのか分からず冷や冷やしており、書ける状態ではありませんでした。。

*2:そういえば、赴任当初はまだSeasar2とかFlexとか使ってました。懐かしい。

*3:一時期はチームの半分がNUSに通っている状態でした。

*4:ご家庭を持ちながら社会人学生をやってたら、この比ではないんだろうな、と思います。

*5:NUSを受けて受かるかどうかは別問題。

*6:シンガポール人かPR(永住権)だとそれほど高くないです。