「AI創薬とは言われるけど、何から勉強すればいいの?」
「製薬企業の研究者がプログラミングなんてマスターできるの?」
「プログラミングの本にはいろいろ書いてあるけど、結局何が大事なの?」
今この記事を読んでいる皆さんは、そんな悩みを持っているかもしれません。
実際僕も同じように思っていました。
プログラミングの専門書ってどれも分厚くて、めちゃくちゃ多くのことが頭に入っていないとプログラミングってできないのかなって思ってしまいますよね。
でも実は、この記事で紹介するプログラミングの最低限の知識を知っておくだけで、IT企業の社員でなくても誰でも簡単にプログラミングができるようになります。
実際に僕自身も、この最低限の知識を身につけることで、たった
でプログラミングを実務でバリバリ使えるようになりました。この記事では、プログラミングをするにあたって最低限知っておくべきこと4点を紹介します。
この記事を読めば、プログラミングに必要な知識は ということが分かって、勉強のモチベーションが上がるとともに、短期間でプログラミングを実務で使えるようになります。
僕も実際にプログラミング学習に挫折した経験がありますが、その経験をもとに、プログラミング初心者が最低限知っておくべきことをまとめました。
この記事に書かれていることさえ理解できれば、とりあえず実務に入っても大丈夫です!
プログラミングでは「変数」をよく使う
そもそも、「変数」とは?
プログラミングには「変数」という概念があります。
変数というのは、スクリプトを書く人が、名前と値(中身)を自由に定義できるものです。
「値を入れる容器のようなもの」というようなたとえがされることもあります。
自分で「a」と言う名前の変数を定義して、その変数に1と言う値を入れるときに、「a = 1」なんていう書き方をすることがあります。
変数は値を更新することもできる
上では、「変数の定義」について書きましたが、変数の値は後から変更(更新)することもできます。
例えば、aに1という値を入れておいて、「a = a + 1」とすると、「aに、もともとのaの値に1を足したものを代入する」ということで、aの値は2(=1+1)に更新されます。
ここで注意しないといけないのは、スクリプト中のイコール(=)は、「等しい」という意味ではないということです。
中学校や高校の時に方程式を学んできているので、イコールといえば「等しい」というイメージが強いのですが、プログラミングの世界では、イコールは「等しくする」つまり「代入する」という意味になります。
もう少し正確に言うと、「右辺を左辺に代入する」ということですね。
僕はこの意味がなかなか理解できず、プログラミングに挫折してしまったことがありました。
スクリプト中のいたるところにこういう書き方が出てくるので、そのたびに違和感を覚えてしまって、「プログラミングは何か難しくて嫌だな」と思ってしまったんですね。
このようにパッと見ると「この方程式成立するわけないのに、なんでこんな書き方するの?」と思ってしまいますが、まずはこんな書き方に慣れることが大事です。
変数は、同じ値を使い回したいときに便利
そもそも何で変数を使う必要があるの?という疑問を持つ人もいると思いますが、変数の便利なところは、同じ値を使い回せるということです。
例えば、nameという名前の変数を定義して、「ゆきや」という値を代入したとしましょう。
「name = ‘ゆきや’」というようなスクリプトを書く、ということです。
そうすると、「{name}さん、こんにちは。{name}さんの今日の気分はどうですか?」という文章は、「ゆきやさん、こんにちは。ゆきやさんの今日の気分はどうですか?」と書き換えることができます。
そしてここで、nameを「太郎」に書き換えるとしましょう。
このとき、「{name}さん、こんにちは。{name}さんの今日の気分はどうですか?」という文章はそのままで、「name = ‘太郎’」と書くだけで、名前が2か所出てくるところを一斉に変更することができます。
別の言い方をすると、変数名が入ったテンプレートを用意しておけば、変数の値が変わっても変更がすぐにできてしまうということです。
上で書いた例は2か所のみでしたが、実際にスクリプトを書く際には10か所とか100か所とか、それも近くではなく遠くに離れたところに同じ文字列を入れたいなんていう場合もよくあります。
そんなときに「変数」という概念があると、
ようになるわけです。スクリプトを見るときは、「変数」と「変数以外のもの」を区別
初心者の人がスクリプトを見ると、「うわっ、何だこの文字列!」と情報量の多さに圧倒されてしまうと思います。
実際僕もプログラミングの勉強を始めたころはそんな状態でした。
そこでまず意識したいのは、
、を区別するということです。別の言い方をすると、「スクリプトを書いた人が新しく定義したところ」と「元からプログラミング言語で定義されているところ」を見分けながらスクリプトを読んでいく、ということです。
実際に僕は他人が書いたスクリプトを見るときはまず、変数と変数以外のものを区別するということを最初にします。
そして、変数があったらどこでその変数を定義しているのか探す、という流れですね。
このように見ていくと、「英語のお経のような文字列」から処理の固まりが見えるようになってきて、
なります。プログラミングでは「データ型」が大事
そもそも、「データ型」とは?
プログラミングには「データ型」という概念があります。
例えば、「a = 1, b = 2」としたときの変数a、bというのは、「数値」になります。
「a + b」を計算すると3になります。
別の例で、「name = ‘ゆきや’」としたときの変数nameというのは、「文字列」になります。
文字列はクォーテーションで囲むことになっています。
上で書いたような足し算の計算には使えないデータ型ということになります。
スクリプトを書くときには常にデータ型を意識することが大事
データ型があいまいなままスクリプトを書いていくと、途中でエラーが起こったり、思わぬ動作の原因になります。
例えば、「a = ‘1’, b = ‘2’」とすると、「a + b」の実行結果は、Python(パイソン)というプログラミング言語の場合「’12’」になります。
このとき、変数a、bはクォーテーションで囲まれているので、「文字列」になります。
「文字としての数字」みたいなイメージですね。
なので、「a + b」を計算しようとしても3になりません。
実行結果として出てくる「’12’」というのは「十二」ではなく、「1と2が並んだ文字列」という意味になります。
自分の書いたスクリプトでエラーや想定外の動作が頻発すると、嫌になってしまいますよね。
僕自身も過去プログラミングに挫折してしまったときの一因がそれでした。
ここで挙げた「数値」、「文字列」以外にもいくつかデータ型があるので、エラーや想定外の動作を少しでも減らすためにも、データ型は常に意識する必要があります。
「条件分岐」と「反復処理」がプログラミングの中心
「条件分岐」とは?
「条件分岐」というのは、ある条件が成立した時にはこの処理をして、別の条件が成立した時には別の処理をして・・・というように、条件によって処理を分けることを指します。
皆さんは意識していないかもしれませんが、仕事でも実験結果によって次のアクションを決める、というのはよくあることですよね。
いわゆる「decision tree」のような形で資料を作ることもあると思います。
その「decision tree」をスクリプトとしてパソコンでも実行可能な形に書きあげられるようになれば、
ようになります。多くのプログラミング言語で「if文」と「switch文」といった構文が条件分岐のために用意されています。
「反復処理」とは?
「反復処理」というのは、文字通り同じ処理を繰り返すことを指します。
普段の仕事でも同じようなことを何回か繰り返すことって意外とよくありますよね。
これが10回とかその程度なら手作業でも対応できることも多いですが、100回とか1000回とかになってくると、人間の手には負えません。
そんなときに
というわけです。もしくは、「普通にやるととてつもない回数の繰り返しが必要になるから、別の方法でやっている」というような場合にも、スクリプトさえ書ければ、その
。多くのプログラミング言語で「for文」と「while文」といった構文が反復処理のために用意されています。
条件分岐と反復処理で大部分のプログラムは作れる
実は、ここで挙げた「条件分岐」と「反復処理」がプログラミングの大部分を占めるといっても過言ではありません。
というのも、プログラミングをする目的というのは、「条件を分けて考えないといけないのがややこしいから自動化したい」とか「同じ作業を何度も繰り返すのが面倒くさいから自動化したい」といったことが多いからです。
実際に製薬企業の業務でも、エクセル(Microsoft Excel)でデータをまとめるときに、上で書いたような自動化したい場面によく遭遇すると思います。
僕の場合、エクセルベースで作りこんだファイルをもとに行っていたデータ解析を自動的に実行できるPythonスクリプトを作りました。
もともとのエクセルベースの解析シートは、条件によって計算式を変えたり、一連の作業を何度も繰り返したり、ということが必要なものでした。
ところがPythonスクリプトを使って自動的に実行できるようにすると、
することができたんです。なので、
、ということです。プログラミングの応用力とは、「調べる力」
さて、以上で書いた3点を押さえれば、プログラミングの基礎としては十分です。
あとは応用力を鍛えて、プログラミングのスキルを伸ばしたり、実務に生かしたりということになってくるわけですが、ここで大事になってくるのは、「
」です。というのもプログラミングは、文法や構文が山のようにあり、覚えようと思っても全てを覚えることは不可能だからです。
IT企業で働くようなエンジニアですら、自らネットで色々調べながらコードを書くわけです。
ましてや製薬企業の研究者がそんなたくさんのことを覚える必要があるわけないですよね。
なので、「こういう機能をつけたいんだけど、スクリプトはどう書いたらいいんだろう」というような疑問が出てきたときは、Googleなどの
ことが重要です。例えば、Pythonのfor文の書き方を忘れてしまった(かっこは必要なのか、コロンはどこに書くのか、などを忘れた)としても、「Python for」のようなキーワードで検索すれば、for文のスクリプトが載ったページなんていくらでも出てきます。
そのページを見て、「ああこう書くんだった」と思って目の前のスクリプトを書けばいいわけです。
何も見ずにスラスラコードを書けることは素晴らしいことですが、
。実際僕も会社で色々調べながらスクリプトを書いていますが、プログラミングを知らない人からは「もう出来ちゃったの?早い!」という反応がいつも返ってきます。
しかもスクリプトが出来てしまえば、今まで時間がかかっていた仕事があっという間に自動で終わるようになってしまうので、
わけです。そして、何回か同じことを調べていくうちに、何も調べなくてもスクリプトを書けるようになっていきます。
ただ、上で書いた基礎3点が押さえられていないと、調べたとしても分からないことが多過ぎてスクリプトを書くことが難しいと思うので、最低限の知識を持ったうえで調べるという癖をつけるようにすると良いでしょう。
まとめ
以上で紹介したプログラミングに必要な最低限の知識4点を理解すると、製薬会社での仕事の中でプログラミングを実践できるようになります。
もう一度簡単におさらいしておきましょう。
- 変数:初めてスクリプトをパッと見たときは分からない文字列ばかりだと思いますが、スクリプトを書いた人が定義した文字列も多く含まれています。まずはプログラミング言語で定義されている文字列とスクリプトを書いた人が定義したところを区別できるようになれば、処理の固まりをとらえやすくなります。
- データ型:自分で定義した変数も含め、データ型が何なのか、そのデータ型にあった処理は何なのかを常に考えることで、予期せぬ動作やエラーを防止することができます。
- 条件分岐と反復処理:この2種類の処理でスクリプトはほぼ書けるので、これらをマスターすれば実務でプログラミングに挑戦してみてもいいと思います。
- 調べる力:上記の3点の基礎を身につけたら、あとは分からないことを検索エンジンや本で調べれば大丈夫です。何度か同じことを調べていくうちに、何も見ずにスラスラスクリプトを書けるようになります。
以上の基礎が身についてしまえば、あとは
していきます。しかも、製薬企業にはプログラミングができる人はまだ少ないので、
自身のプログラミングスキルを向上させることができます。自身のスキルを伸ばしながら色々な人を助けられることこそが、「創薬エンジニア」としてのやりがいだと感じています!