博士学生のスキル獲得術
博士学生の多くは研究の自由度が高く好き勝手やらせてもらえる場合が多いと思います。というよりも、自分で研究テーマを創り出さなければならないですからね。
その中で、唯一無二のスキルを磨くことも大事ですが、将来の就職を考えると汎用的なスキルの獲得もまた重要になってきます。
ということで、今回は博士学生のスキル獲得術について、書いてみたいと思います。
ここでは、はじめに自分が実践したプログラミングの習得に関して紹介しますが、どのようにプログラミングを身に着けたかよりも、どのような仕組みでプログラミングを学んでいったかという話になります。
つまり、このやり方はプログラミング以外にも汎用的に使える方法と考えます。
前提として
そもそも私は実験屋なので、研究や仕事でコードを書いている人の前で、プログラミングができるとは口が裂けても言えません。そうはいってもExcelを触るのが精一杯な一般人からしたら、一応書ける部類に入ると思います。
どれくらいレベルかを示すのは難しいですが、単純な理論計算を実装したシミュレーションの作成や、基礎的な画像処理ぐらいは可能です。
使用言語は主にpython, C++, javascriptの3つで、RとVBAはできなくはないけどほぼ使ったことがないレベルです。
ただ、基本的にどの言語も関数を覚えていないのでネット環境がなければ、全く使い物になりませんし、コンペに参加するほどのレベルもありません。
それでも、くらだないことはパソコンにやらせるぐらいの感覚は持っていますので、現在もつまらない単純作業をプログラムで何とかできないか四苦八苦しながら取り組んでいます。
習得するための仕組み
それでは前置きが長くなりましたが、私が実践してきたプログラミングの習得について紹介しましょう。
勉強することを目的に勉強できるタイプの人も一定数いますが、私は全くモチベーションがわかずできないタイプの人間です。逆に目的があれば、何としてでもやり遂げたいというタイプです。
勉強は嫌いだけど研究は好きという人は比較的後者のタイプが多いのではないでしょうか。
そんな人におすすめなスキル習得術は簡単です。研究内容にプログラミングが必要になるように仕組むのです。
博士学生にとって生活の半分ぐらい(10~12時間/日)を占める研究で必要となれば、習得しないという選択肢はありませんよね。さらにスキル(プログラミング)を身に着けることで、研究の幅が広がるとなればなおさらです。
仕組むって言ったってそんな簡単にはいかないよ…という方もいるでしょう。当然、指導教員に対して理由もなしにプログラミング使います! って言っても、どうして?何のために?といわれる可能性も無きにしも非ずです。
実践・研究にプログラミングを導入
ここでは私が実践した取り組みを紹介したいと思います。
修士の頃の私の研究は、基本的に手を動かして実験をするだけでした。材料系の実験屋にとってプログラミングをするのには多少なりともハードルがありますよね。
しかし、実験屋の持っている結果というのはプログラミングを活用できる素晴らしい宝の山なんです!
例えば、画像処理です。材料系や生物系といった物質や生き物を使った研究に従事している場合、顕微鏡を用いて対象を観察しているケースが多いと思います。
一般的に研究では観察結果を見て議論しますが、それはたいてい定性的な判断とも言えます。逆に定量的に画像を判断するためには、画像処理が必要です。プログラムを書いて画像を読み込み、定量的に示してやれば定性的な議論はより面白い発見があるかもしれません。
自分は顕微鏡なんて使わないんだ、って方の中にはスペクトル分析やパターン解析をする人はいるかもしれません。これこそプログラミングが光る場所です。
こちらも装置に備え付けの商用ソフトでできてしまうという批判がありそうですが、商用ソフトでは限界があります。例えばフィッティングひとつとっても、理論を完璧に模倣したフィッティングを実現するのは容易ではありません。
やはり、自分の手でプログラムを書くことでパーフェクトに近いモデルを構築し、フィッティングを実現することができます。
上記のように書いてはいますが、私の場合は商用ソフトでは検知できない画像データを解析するため、pythonで画像処理を習得して、その後フィッティングやシミュレーションに移っていきました。
なるべく、pythonを使って解析をすることで、プログラミングの最低限の知識を学びました。それにより、いざ必要に迫られてC++やjavascriptを触った際にも思ったよりも簡単に取り組むことができました。
プログラミング言語というのは、まず1つ習得することが重要です。あとは最初の言語で学んだ知識を使いまわして、アナロジーで考えていけば意外と早く初心者レベルに到達できます。
このようにして、学んだスキルは就活でも書きましたし、現在会社でもくだらない事務仕事を殲滅すべく、たまにコードを書いています。
スキル習得はプログラミングに限らない
個人的に現代の科学技術にプログラミングが必須であるという持論を持っているため、自らも最低限出来るようになりたいと思い、自分の研究の中で勉強しました。
しかし、スキル習得はプログラミング以外にもいろいろあると思います。
例えば、私は未習得ですが、エンジニアとして持っていた方が良いスキルとして電子回路設計や製図があります。
このようなスキルが欲しければ、装置の設計に携わるような研究を提案してみたり、簡易的なセンサやロボットを作るためにラズパイを導入したりといったことで習得可能です。
他にも国際学会に何度も参加すれば言語スキルも必須になってきますし、アカデミアに残る場合は特に予算申請スキルなども重要だと思います。
研究環境を自分で設計することにより、少しずつスキルを習得していければきっとその後の研究生活は楽しいものになるでしょう。
最後に
研究テーマを設計することは博士学生にとって最も重要なことの一つと言えます。そして、これこそが3年という長い期間がかけられる博士課程に許される研究の醍醐味だと思います。
決して楽なことではないですが、少しでも有意義な研究生活にしてスキルを獲得できるといいですね。