プログラミングを始めるみなさんへ

2016-06-30

毒田 弦三

 

みなさんこんにちは。私はポスドク研究員の ぶすだげんぞう と言います。専門は素粒子原子核宇宙物理の実験です。この記事では「研究でプログラミングを始めることになった」という方に知っておいてほしい事を紹介します。

 

 

ある日、研究室の教授が「キミも研究を進めていくにあたって、実際にデータをとってその解析をやってみよう」とこう言ったわけです。大量のデータを扱うのにプログラミングを使うと。そういういきさつによって、詳しいことは良くわからないけれど、突然あなたはプログラミングなるものを始めることになりました。

 

そのためにはまず何から始めようか。どうやら言語がたくさんあると聞くが、C言語というのが基本らしい。なんかC言語の発展形のC++なるものがあるらしい。さらにC#なるものもあるらしい。だけどとりあえず本屋に行ってCかC++の適当な参考書を買ってこよう、で、とりあえず読んでみよう。そして一通り内容が理解できたら自分の研究に応用しよう・・・と、これが多くの学生さんが歩む道です。

 

しかし、そういった道に足を踏み入れる前に知っておいてほしい事があります。それはいわば「プログラミングとは何かという基本」、「開発にあたる姿勢の基本」といえるものです。

 

先ほどの例はたとえるなら、「アメリカに行って、現地でしか手に入らないこの品物を買ってきてほしい」と言われ、とりあえず英語の辞書を買って単語を順に覚えていくようなものです。目的を達成するためにはもっとやるべき根本的なことがあります。ブツを売っている店はどこにあるのか、最寄りの空港はどこにあるのか、そういう情報を調べるなり教えてもらうなりして得て、言語はというと、そういった情報をもとによく使いそうなものを集中的に覚える、これが正しいやり方です。

 

 

というわけで、プログラミングを始める際に知っておいてほしいことを3つにまとめました。順に紹介します。

 

 

 

1.プログラムの使用には責任がともないます。

 

コンピュータとは人の持つ計算能力を拡張する道具で、プログラムとは人間がコンピュータにこういう計算をしてくれと依頼するための指示書のことです。まずこの認識をしっかり持ってください。コンピュータはこの指示書に忠実に従い、ものすごい速度で計算をやってくれます。人間がちまちまやっていたら何日もかかる計算でもコンピュータはすぐやってくれます。けれども注意しなければいけないのは、この指示に間違いがあった場合、コンピュータは間違った計算結果を猛スピードで量産していくということです。

 

そこでプログラムを書く人には、出てきた計算結果が正しいかどうかを判断する能力が求められます。

 

下の物理のテストの答案を見てください。これは「計算結果が正しいかどうかを判断する能力が欠けた人」が実際にやる間違いです。

「X君は走り幅跳びをしました。(略)X君のジャンプした瞬間の水平方向の速度を有効数字2桁で答えなさい。 → こたえ 1.0 * 10^2 m/s」

おい待ってくれと。人間が秒速100mで走れるわけがない。絶対計算間違いです。しかし当の本人はこの答えを疑うことなく答案に書き、「いや、公式に当てはめたらこうなったんで・・・」と間違いに気づかないのです。こういう人がプログラムを書いて間違いを犯したら、「いや、プログラムの出力がこうなったんで・・・」とコメントすることでしょう。残念ながらこの言い訳は絶対許されません。

 

プログラムによって得られた計算結果に責任を負うのはそのプログラムを書いて使った本人です。もし後になって計算の間違いが見つかれば、個人ひいては研究チームの信用を失います。これがルールだということを知り、常に意識するようにしてください。計算結果が出たら本当にそれが正しいかをよくチェックしてください。そしていつも「このプログラムを走らせたら結果はこうなるだろう」と予想し、それと違った結果になった時には何故そうなったかを納得するまで調べてください。

 

 

2.ソフトウェアのコストと価値について考えましょう。

 

次に、ソフトウェアというのは見た目によらず開発コストがかかるということを知っておかなければいけません。出来上がったソフトウェアのコードというのは結局のところ単なるテキストデータで、例えば計300行程度のものだったらデータサイズとしては10kBくらいなものです。しかし、その300行を書いて検証するのに筆者の力で丸2日かかった場合、筆者の日給は1万円なので、開発コストは2万円です。我々は普段、○indows8.1はX万円、○icrosoft ○fficeはX万円というのを見て「高いなぁ」と感じます。しかし、そもそもソフトウェアというものは開発コストがかかるものなのです。まして研究のために使うような限られた用途のソフトウェアにはさらに高いコストが必要であるということを覚えておいてください。

 

学生院生のみなさんがソフトウェアを開発する場合、人件費という意味でのコストは発生してはいません。しかし、みなさんは20代という貴重な時間を削って研究をしているわけで、そのコストは決して安くはないことを自覚してください。

 

このようにソフトウェア開発というのはコストがかかるものなのですが、敢えてそれをやるのは、ひとえに研究成果のためです。すべての研究開発の裏には、「これが成功したら新たな知見がもたらされる、だからやる」というシナリオがあるのです。リスクをともなう計画はそういった大きなシナリオの中で、リスクに見合うだけの価値があるからこそ成立しているのです。

 

プログラミングをする際には、自分がなぜそれを作っているのか、作っているものがどれだけの価値を発揮するかという事を常に念頭においてください。この勘定がソフトウェア開発において何をすべきかすべきでないかを判断する指針になります。

 

 

3.コミュニケーションが重要です。

 

プログラミングをはじめるにあたっては、身近な人にコーチになってもらい、その人にガイドしてもらって研究を進めていってください。一番良いのは研究室の先輩や先生です。研究活動の基盤は研究室であり、具体的な研究のスタイルは研究室のやり方に倣うべきです。そして研究を推進するにあたっては常に研究室内でコミュニケーションをとることが重要です。

 

プログラミングをやる時は、先輩(ただし夜型でない)と同じ時間に同じ部屋で作業し、分からないことがあったらすぐに訊ける状況でやってください。そしてできれば毎日話をして、自分がどんな状況にいるのかが周囲に分かるようにしてください。言語は何が良いかという話、実際にツールをインストールして環境を設定するまでの話、実際にどうコードを書いたらいいのかという話、エラーの対処の話、自分の書いたコードを見てほしいという添削の話、そして今自分の研究がどうなっているかという研究の話、色々な事を適度な間隔で話すようにしてください。

 

なお、最初から一人で教科書を読んで勉強するというスタイルは時間がかかりすぎます。プログラミングの教科書は数がありすぎて選ぶだけでも苦労します。しかも教科書というのは文法を丁寧に解説するのが趣旨です。しかも紹介されている例はどうしても一般的読者層に合わせざるをえず、「階乗を計算する」とか「動物クラスを継承して犬クラスをつくる(?)」とか即戦力になりません。教科書はある程度プログラミングの全体像が分かってきてから、言語のしくみを体系的に復習するのに使うのが良いでしょう。かたや、世の中にはあなたの解決したいことをずばり記した本もあるかもしれません。やはり本選びも、まず詳しい人に聞くのが良いでしょう。

 

 

 

さいごに


本来、研究とは暮らしを豊かにするもので、コンピュータとは人間を助ける道具です。コンピュータに振り回され、研究が進まないと苦しむ状況に陥ってはいけません。

 

毒田 弦三 博士研究員(自称実験屋)

ぶすだげんぞう。素粒子原子核宇宙物理の実験を専門とするポスドク研究員です。

カテゴリ一覧

さらに読みたい記事

一覧へ

Follow us

理系+では、理系分野に興味がある人に向けて様々な情報を日々発信しています。

最新情報はSNSアカウント又はメルマガにて受け取ることが出来ます。