トリコロールな猫

猫とつくばと茨城をこよなく愛するnekotricolorのブログです

iやjを使いまくっていた学生時代、プログラミングのなにが難しかったのか考えてみました

なんかえらい叩かれてますけど私はとても楽しく読ませていただきました。

note.mu

読んでいて学生時代を思い出しました。私も卒論を書くまでこんな感じで全然できなかったなと。大学卒業後は刺身にタンポポを乗せる仕事ではなく、ITセキュリティの仕事に就いたんですけども。

ちなみにいまはRubyでSeleniumを使ってWebサイトをクロールして、得たデータをnattoなど使って処理し、Rでcosine類似度を計算してプロットする程度のことはできます!

初めてコンピュータを触ったのは小学生の時。幼なじみの家にMSXがあり、BASICだったと思うんですけど本の通りに打ち込んでヴェートーベンの曲が鳴ったり絵が描けたりするのにすっかり心を奪われてしまい、大学は特に迷わず情報専攻にしようと決めていました。

大学では、情報専用の24時間営業の端末室にSPARC Solaris*1のWSが100台くらいあって、Muleでメールを送ったりニュースを見たりする方法を学ぶ傍ら、だんだん各種ソートや巡回セールスマンの課題が出てきて、という感じ。ktermでコマンドを打ち込んだりするのはとっても楽しかったのですが、プログラミングの課題は完全にお手上げでした。

いま考えてみると、その手の課題では

1. 数学の問題を解く
2. アルゴリズムを考える
3. コードに落とし込む

を同時にやらなければならず、それが予備校出たてで家でPCを触っていたわけでもない学生には難しすぎたのかなと。
1はともかくとして、2はそもそもアルゴリズムってなに、な世界だし、なにより3がね、言語がCだったんですよ。型宣言がどーのとかポインタがどーのとか、もちろん個別には習ってるけど、1個1個で引っかかりまくり心が折れるわけです。

だからHTMLベタ打ちでホームページを作る授業は楽しかったし、卒論は意味検索エンジンを使ってPerlであれこれするもので、それも面白かった。Perlは型宣言しなくても動くんだ!楽!!と強く思った記憶があるので、よっぽどCでそこにハマってたんでしょうね。

2重for文の変数名i, jにしたら絶対途中で打ち間違えるだろ。お前は打ち間違える。そういうやつだ。

iとかjとかめっちゃ使ってたので笑ってしまった。でもこれね、例えばy=5x^2+8x+1という方程式をp=5q^2+8q+1とか書いてもOKって教科書にそれまで出会ったことがなかったわけですよ。x軸y軸をhorizontal軸vertical軸って書く先生もいなかったし。だから教科書*2でiとjが使われているなら、それ以外を使うとか全く想像しないわけです。変えた方がわかりやすいからそうするって考え自体がなかった。

例えば「キーボードから数値を10回入力し、それぞれの値を配列に格納して、最後に配列の値を逆順に表示せよ」みたいな問題が出てきたときに、「キーボードから値を入力する」「10回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思う

この問題も、卒論を書く前だったら「数値を10回入力」を「10回"繰り返す"」に変換できないだろうなと思う。それをスッと変換できるのはたぶんプログラムを書き慣れているからであって、日本語の読解力の問題ではないのではないかと。"同じ"数字を10回入力するというなら、繰り返しだと気づくかもしれないけども。
というか当時の自分ならそもそも「10回入力する」というのがどういう状態なのかわからない気がする。「入力」っていうから標準入力だろうなというのはかろうじてわかるけど、改行されたらそれを1回の入力とみなすって?うん、わからなかったろうね。

初心者って関数とかクラスとかめちゃくちゃ嫌うよね。ベタ書き至上主義というか、自分の目の届く範囲に全部置いときときたいというか。

関数をまともに使うようになったのも会社に入ってからだなあ。卒論のスクリプトはそこそこ長かったけど、ベタ打ちに近かった気がする。これは値を渡したり戻り値を使ったりする能力がなかったからだな多分。仕事でシェルコードの検証のためにrootkitぽいものを作るのにlsコマンドの再開発みたいなことをしなきゃいけなくて、そこで初めて「あ、これは関数というのが必要なやつだ」と実感できた。そういえばデータベースも、Excelの2次元では表現しきれない問題に直面して初めて「あ、これデータベースで解決できるやつだ」と思ったな。原始的な方法でめちゃくちゃ苦労して初めて、それを解決してくれる手法を身につける。やばいなにこれちょー便利ってなる。なんでこういう風に教えてくれなかったのかしら・・とかいったら当時の先生にガチ切れされるだろうなあ。最初からそういう風に教えてんだよおおおおって。

思い出すままにつらつらと書いてみて感じるのは、私は教える仕事は好きですがこんな学生の相手をしなければならない大学のTAとか絶対にやりたくないなってことです。報われない仕事だと思いますが、私はプログラマではないもののIT系でご飯を食べられていたので、当時教えていただいた皆さまには大変感謝しています。本当にありがとうございました。

*1:私はSPARCが好きです。固定長の命令のカッコよさ、delayed slotの様式美、レジスタウィンドウの素晴らしさたるや(以下略

*2:カーニハンのやつでした