プログラマーとしての適性

投稿日:2019年05月29日 |カテゴリー:勉強, 学校, 研究

みなさま、こんにちは。おくむら(@nori_broccoli)です。

もうかれこれ20年以上は何らかの形でプログラミングを続けているおくむらですが、未だにプログラミングを楽しいと思えないし、動いたときの喜びみたいなものも皆無なので困っています。何が困るかというと、プログラミング系の科目を週に6コマも持っているのに、教えている本人が「楽しい」と思えないのに、どうやってプログラミングを楽しませれば良いのか、皆目検討がつかない辺りに問題があるからです。

プログラミングしていて、バグ取りとかいろいろやって、ようやくプログラムがまともに動作したときに、「やっと動いた。疲れた。」以外の感情がなく、簡単なものでも複雑なものでもそれは変わりません。ただ、さすがに6コマも持っていると嘘でも良いから楽しそうにプログラミングした方がいいのかとか、いろいろ悩みは尽きません。

そんな中、毎週の講義を見ていて、プログラミングを学んでいる人にはいくつかのパターンがあるように思えてきました。私と同種の学生もちらほらいるようですし、今後の指導に役立つかもということでまとめてみます。(一応C言語を基準に書いているのでコンパイラが頻出しますが、適宜インタープリタならインタープリタと読み替えてください。また、他にもタイプがあれば教えてほしいです。)

何をやっても”楽しい”と思えるタイプ

心の底から羨ましいタイプです。1mmでいいから、その感覚を分け与えてほしいし、こういうタイプの学生を退屈させないように、課題の内容もしっかり吟味しないといけないなと思うところです。

このタイプの人は、コンパイルエラーが出ても笑っているし、作業ディレクトリを間違えていただけでも吹き出しそうになりながら嬉々としてcdコマンドを打つし、コンパイルが通っても動かなかったらそれはそれで「なんでやねーん!」と突っ込みながら笑っているし、無事に動いたときは「よっしゃぁあぁぁぁぁ…!!」みたいに歓喜の声を上げます。本当に一つ一つが面白いんだろうなと羨ましく見ているところです。

もっとも、今後複雑なアルゴリズムが出てきたときにどこまで楽しませられるかはこちらの手腕によるところも多々あるので、自分もプログラミングを楽しめるようにならないとな…と思うところです。

過程はともかく動くと嬉しいタイプ

感覚的には半数ぐらいがこのタイプじゃないかと思います。いろいろ試行錯誤して、コンパイルエラーと戦いながら、どうにか動作させるところまでたどり着いて「よっしゃぁ!」となるタイプです。

コンパイルエラーが出ると凹むし面倒だと思うし、一体何が問題なのか分からないしと、コンパイラとの戦いに辟易しているところがあるので、複雑な課題を与えると心が折れてしまう可能性もありますし、根性で伸びる可能性もあります。プログラミングを学んでいる最中は、こちらからも答えに向かうためのヒントは出していきますし、授業はそれで乗り切れるはずです。

授業が終わったあと、自分のためにプログラミングをする段階になったときに、エラーとの孤独な戦いにどこまで耐えられるかは、きっと授業中に可能な限り(ある意味意図的に)エラーを出させて、いろんなエラーのパターンを理解しておいてもらうことが必要じゃないかと思っています。しんどいエラー処理もフローで解決するならストレスは大分低減されますからね。

たぶん、このタイプの人はプログラムが動いたら奇跡ぐらいに思っていて、動く方がおかしいぐらいな感覚なのかもしれません。極論ですが、平常時の期待が低いので動くと満足度が高いのかも、と思ったりもします。

ロジックが組み立てられず悩むタイプ

こちらのタイプも比較的多い気がします。問題文の意味がわからず、何をどう解いていけばいいか皆目見当がついていないタイプです。文法はあらかた理解しているものの、それらをどう組み合わせたら正しく動作するのかが見えないタイプですね。

このタイプの中には、ロジックさえ分かれば後は何をしてても楽しいというタイプが少数ですが混じっているので、物事をロジカルに考える課題を与えないとうまく伸びません。例えば、変数の値を交換するプログラムを書くといったときに、やりたいこととプログラミング言語の制約のギャップが見えなければ絶対に解けませんし、いくらヒントを出しても、一つの考え方に固執してしまっていたりして、なかなか抜け出せない状態になります。

おそらく、こういうタイプの人なら、先人の書いた”良い”プログラムを多読することで、いくつかのロジックにはパターンがあること、それは誰が書いても似たようなものになることを理解していくことで、自分が組み立てるロジックの基盤になるのかなと思います。見取り稽古みたいなものですね。

おそらく、ひたすらパターンを覚えるだけでは限界が来るので、自分が読み解いたプログラムを文章で表現してみるとか、そういうトレーニングが必要かなと思います。最近は授業でもサンプルコードにコメントを入れるという時間を取っていますが、なかなかみなさん理解が難しいところのようです。

そもそも文法が分からないタイプ

書き方のお作法、言語の仕様、こういった部分で詰まっているタイプです。残念ながらこのタイプの方にできるアドバイスは、とりあえず入門書を一冊読もうか、とか、基礎講座みたいなもので文法を理解しようか、ぐらいしか言えません。

初めて英語を学んだときと同じだと思います。単語を覚える、簡単な文法を覚える、時制を覚える…、知らないことだらけの世界で、何の基礎知識もつけずに英語がわからないのと同じで、プログラミングも最低限記憶しなければいけないことはあります。

もちろん、人工言語なので厳密なルールで設計されていますし、プログラミングするたびにルールを全部見ながら書いていけば、理論的にはプログラミング可能でしょうが、プログラマーはそんな些細なレベルのことはリファレンスで調べたりしません。

便利な関数やクラスはないかな?と思ったときに辞書がわりにリファレンスを使う程度です。もしこのタイプなら、しっかり基礎を理解して進まないとダメですね。

文法もわかるしロジックもわかるけど”だから何?”タイプ

さて、だいぶ長くなってきましたが、おくむらの属するタイプはここです。ごく少数ですが学生の中にもこのタイプはいます。

このタイプの人は、おそらく「プログラムは書いた通り書いたことをコンピューターが実行しているだけでしょ?」というものすごく冷めた目線を持っているのではないかと思います。おくむらの思考としては、ロジックはこうだし、記述はこうなる、実行結果は自明だよね…、とそもそもプログラムの動作は書いたことそのものなんだから、結果もそうなるよね、だから何?みたいなところがあります。

こうなってしまうと、面白いと思う過程がどこにもなくて苦行と化します。大きなプログラムだって小さい実験プログラムだって、まぁ、そこそこ書ける。もちろん、スーパープログラマーみたいな人たちのように洗練されたアルゴリズムではなくとも、要件を満たすことはできる。でも、「当たり前のことを当たり前に書いているのだから結果も当たり前」が大前提にあるので、めんどくさい作業以外の何物でもないんですよね。

プログラムは書いた通りにしか動かないんだから書いた通りにしか動くのは当たり前、動かなかったら心で舌打ちしながらエラーを潰す、そんな感じです。マイナスかゼロ、そんな思考状態だから楽しくなくて当たり前なんでしょう。

残念ながら20年以上この状態なので、ここから脱却する方法が全くわかりません。「こうすれば楽しいよ!」とか「これをやってみては?」とかあれば是非教えてほしいです。楽しくないものを楽しそうに教えるのって、ものすごいストレスなんです…。

特殊なタイプ

最後に特殊なタイプというか一定レベル以上でたどり着ける境地だと思いますが、「誰かに使ってもらえて嬉しい」タイプがいます。このレベルになってくると、おそらく上記のいろんな経験を積んできて、サービスを提供する側に回ったとか、オープンソースで自分のプログラムを公開していろんな人に使ってもらっているとか、そういう人たちなんだと思います。

残念ながらおくむらのモチベーションでは、リリースするようなプログラムは書いていないし、オープンソース化する以前に、私よりもよくできる人が多すぎて、公開することにメリットすら感じない状態ですが、このレベルに達した時には、これまでとは違ったプログラミングの楽しみも(同時に苦しみも)出てくるのかなと思ったりしています。

もう少しエンジニア寄りの発想を持って、使ってくれる人のことを考えたプログラミングをすると楽しいと思えるのでしょうか。私には辿り着いたことのない境地なので、なかなか理解できないところではありますが、このタイプの人たちは尊敬以外の表現が見当たらないぐらいすごいと思っています。

まとめ

こうやって書いてみると、なかなかプログラマーとして向き不向きってわかりにくい気がします。自分がどういったタイプなのかを把握できれば、それに応じてトレーニングすれば最低限のプログラミングなら誰でもできるようになるので、何を目指すかをしっかり考えないといけないのかなとも思ったりします。

なんとなく憧れだけでやってみたり、ゲーム(をすること)が好きだからプログラミングをやってみたい、というのは、プログラミングへの入門としては良いモチベーションだと思いますが、プログラマーとして覚醒するためには全然違うことを考えていかないといけないのだと思います。

いつになっても、どれだけ頑張ってもプログラミングに面白さを見出せないおくむらに、何でも良いのでアドバイスいただけると嬉しいです!