プログラミングのボトルネックは、プログラミングではないところにあり!

シェアする

金子研では学生もわたしも、プログラミング言語は基本的に Python を使っています。文法はシンプルでわかりやすいですし、ライブラリも豊富でとても便利です。

基本的に学生たちは 4 年生で研究室に配属されるまで、プログラミングは行いませんので (ただ、2020年度から新たに Python を使った化学計算の化学情報実験を開講予定!)、4 年生からプログラミングを勉強することになります。プログラミングはあくまで研究 (マテリアルズインフォマティクス・ケモインフォマティクス・プロセスインフォマティクス) を行うためのツールです。なので、まず先にやりたいことがあって、それをプログラミングで実現する、といった流れです。

プログラミングでできることについて勉強することに関しては、やりやすい環境がそろっていると思います。特に Python は利用者も多いですし、いろいろな記事をウェブで (無料で) 読むことができます。変数やデータ型、for 文、if 文といった文法を学ぶことができます。numpy, pandas, scipy, matplotlib, scikit-learn, RDKit などのモジュールの使い方についても、公式のウェブサイトには丁寧に説明が書かれていますし、”実際に使ってみた” 系の記事もたくさんあります。それらを読むことで、同じようなことができるようになるでしょう。

ちなみに、文法やモジュールの使い方を、覚える必要はないと思います。実際わたしも、すべて覚えているわけではなく、使うときにググって確認してから使ったりもします。

こんな感じで、プログラミングでできることを実際に実行するのは意外と簡単なのです。

ではプログラミングで何が難しいのかというと、アルゴリズムだと思います。いいかえると、

研究・開発をする上でやりたいことと、プログラミングでできることの間を考えること、それらをつなげること

です。「こんなことをやりたいのですが、プログラミングでどうやったらよいですか?」 といったことですね。たとえば、あるフォルダに mol ファイルがたくさんあって、それらに対応する物性値のエクセルファイルもあって、それらをまとめて sdf ファイルにしたい、とかですかね。

そもそも、プログラミングをするときは以下のような流れで進めます。

  1. やりたいことを明確にする
  2. やりたいことを分割する (たとえば、分子設計する、を、データセットを読み込む、モデルを構築する、モデルを検証する、、、などに分ける感じです)
  3. アルゴリズムを考え、プログラムの設計図を書く
  4. プログラムを書く
  5. プログラムを実行して、やりたいことができているか確認する
  6. 4. と 5. をできるまで繰り返す
  7. 2. で分割したすべてができるまで、2. から 6. を繰り返す

この中で、2. 3. が難しい印象があります。ググっても出てこないことが多いです。

上達するには、やはり経験が大事なのだと思います。どれだけ 2. 3. を繰り返したか、です。もちろん、最初のころは、右も左も分からない状況だと思いますので、仮説・検証の試行錯誤は必要です。とりあえず考えて作ってみて、やりたいことができているか確認して、できていなかったらまた考え直す、といったことを数多くこなす必要があります。

また、人に聞くのも非常に重要です。経験者ほど、パッとアルゴリズムが出てくることが多いです。それを一つの経験として、次に生かせるとよいですね。

上達のために、ある程度は時間が必要と思います。がんばってください!

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

シェアする

フォローする