プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

人はなぜコメントを書くのか

コメントを書かないっていうのはちょっと極端な気がするけど、私もコメントは少なめ。

筆者が勤めている会社では、原則、プログラムにコメントを書かないのがルールです。

プログラムにコメント書かない文化もあるよって話 - NZ MoyaSystem

(ズボラだからだけどw)私も基本コメントはあまり書かない。自明であることを書いてもしょうがないしね。「なぜこんなことをする必要があるのか」っていう時に補足として書く。私のコメントの書き方についてはこんな感じ

あと上記記事に書いてないこととして、ソースコードの可読性を上げるため、自明であっても処理ブロックや関数/メソッドごとにコメントを挟むことはよくやる。コメントが全くないソースコードは、なんか窮屈に感じる。まあ好みだとは思うけど。

コメントを書く理由としては

ソースコードの可読性を上げるため、ということになるんだろうけど、個人的には人がコミュニケーションを取りたいからなんだと思っている。誰かに読んでもらいたいんだよね。TODOやFIXME入れておいたり、「なんか分かんないけど、こうしなきゃダメ」とか「なんでこんなことしてんだよ!」とか書いたりね(笑)。コードを通じて会話したいからみんなコメントを書くんじゃないかな。ボクもそう。そういう欲求がなければ、わざわざ面倒なコメントを書いたりしないと思うんだよな。

そういう意味で、人のコメント読むのって好きなんだよね。「ああ、ここはこんなこと考えて書いたのね」とか見えるのが楽しい。無味乾燥なロジックに、書いた人の人間を感じて親近感が湧いてくると、ソースコードを読むことが楽しくなってくるんだ。

え、そんなの私ぐらいですか!? ^^;

プログラマとして普通にキャリアを積めるような業界になって欲しい

ソフトウェアエンジニアのキャリアパスが用意されていないことが最大の問題。

各所でプログラマー不足が叫ばれる昨今。にもかかわらず、企業で働くエンジニアの中には、勤め先の要請によって「開発業務(コーディング業務)」から身を引かねばならない人も少なくない。なぜ、このような矛盾が生まれるのか。エンジニアが「好きな開発」と「キャリア形成」をうまく両立させる方法はないのか?データ分析と著名人対談を通じて考える。

「コードで食っていく」は何歳まで可能か?エンジニア300人調査で見えた理想と現実 - エンジニアtype | 転職@type

もう何度もこのblogで言っているので細かいことは書かないけど、要はソフトウェア技術者として正当に評価されて、それに応じた給与をもらえるという企業が(外資系も含めて)日本には本当に少ないのですよ。

プログラマとして経験を積み、これからが楽しいところ!って思ったら「そろそろ下の面倒を見てね」なんて話が来る。従えばプログラミングは出来なくなるけど、給料は上がる。そのままプログラマを続けても給料は上がらず、下手すりゃ左遷。どうすべきかなんて明白だよね。それでもプログラミングしたい!っていうyasuhoみたいな変人しか残らない(笑)

やはりプログラマとして普通にキャリアを積めるような業界になって欲しい。単にプログラミングの仕事をしたいだけなのに、なみなみならぬ情熱と覚悟が必要なんて、業界が衰退していくだけだよ。

あと

これは蛇足だけど、つまらない作業でプログラマを疲弊させる企業多すぎ。スペックは大事だけど、大した機能じゃないのに、つまらない定型フォーマットで何十ページも仕様書を書いて承認を得なければならなかったり、自動化が困難なマクロバリバリのExcelシートをメンテナンスしたり。アジェンダの不明確な会議(それも一つや二つじゃない)に延々と付き合わされたり…

そういうことが仕事だと思っている企業が多いんだよ。支出を抑えて利益を上げるのが企業だと思うんだけど、なんか長時間労働する人がエライっていう風潮は何なんだろう。優秀な技術者ほど、時間をかけずに仕事を終わらせるもの。そういう人たちのパフォーマンスを最大限に発揮できる環境を提供すべきだと思う。

ともあれ

プログラマのことを理解し、パフォーマンスを最大限に発揮させてくれる企業が増えてほしいと切に願います。

なぜアメリカのソフトウェア企業が優秀なソフトウェアエンジニアに快適な開発環境と高額な報酬を提供しているのか。日本のソフトウェア企業におかれましては、ぜひ今一度考えて頂きたく存じます。いやマジで。

とか書いてたら、いいインタビュー記事があった。こんなblog読んでないで、こっちを読みましょう(笑)

生涯「エンジニア」として食っていくには何が必要?及川卓也氏×田中邦裕氏の答え - エンジニアtype | 転職@type

あなたの会社は、プログラマを大事にしてくれていますか?

大事なことは、その会社がプログラマを大事にしてくれるかどうか、ってことだよね。

プログラマーとして就職するならその会社の体質として技術理解度がどれほどかという点はしっかり見た方がいいです。

技術理解の浅い会社にプログラマーとして入社すると辛いよという話 - プログラミングとデザイン、スタートアップの話

モチベーションの高いエンジニア...

ガンガン働いてくれそうで、
放っておいても安心でしょうか?

安心してください。
簡単に下げられますよっ!

["エンジニアのモチベーションを下げる方法 - jfluteの日記]

記事を見てて思ったのは、プログラマが会社に対して不満に思うことの多くはプログラマであるその人の技術や能力に敬意を評しているかということではないかということ。

例えば

給与の額、残業時間の長さ、人間関係、といった部分はもちろん大事ではあるのだけど、会社や個人ではどうにもならない部分もある。人が誰かと関わって仕事をする限り、それらが全て完璧ということはあり得なくて、自分なりにどこかで折り合いつけるしかない。

でも、プログラマをリスペクトとまでは行かなくても、会社にとって必要な存在であり重要であるということを理解しているかどうか、だけは折り合いつけるべきではないと思う。単価が安いからという理由だけで若い人をこき使うといった会社は言語道断。その人のプログラマとしての技術と価値を見てくれる会社でないと、結局その人は不幸になってしまう。

とはいえ、会社が自分にとっていいかどうかは個人差もあり、自分の上司との関係だったりもするわけで、結局は人間関係に行き着くのかもしれない。自分の場合、人間関係は自分の努力でどうにもならない部分があるから社風を重視するようにしているけど、人間関係が大事ではないというわけじゃない。

しかしながら

会社がそういったかところどうかを見極めることは非常に難しい。というか、たぶん100%の方法はない。会社と社員との関係は、恋愛関係に似てると思う。最初はよく見えたんだけど、付き合ってみたら思っていた人と違った、なんてことは普通にあるよね。でもその人と付き合ってみないと、相性なんて分からない。

身も蓋もないけど、結局のところ会社は入ってみないと分からないのだ。様々な事情や人それぞれの考え方はあると思うけど、自分が合ってないと感じたら、積極的に配置転換や転職をすべきだと思う。個人的にはネガティブな感情で転職することはオススメしないんだけど、自分が壊れちゃったら元も子もないものね。

あなたの会社は、プログラマを大事にしてくれていますか?

プログラマって人と関わらなくてもいいの?

いやいやいやいやいやいやいやいや。

クライアントや、社内での打ち合わせの時に人と接する場面はありますが、いったん作業に取りかかると、自分一人で行う作業となるため、人と接する場面は少ないと言えます。

人と関わらない仕事ベスト15 孤独に一人で稼ぐ!

そんなことない。

この「作業」ってのは

文章を読むにコーディングやデバッグのことだと思うが、プログラマがその作業に費やす時間の比率は低い。もしここに多くの時間をかけているのであれば、それはプログラムの仕様が固まっていないのだ(書いてて胃が痛くなってきた^^;)

誰かが実現したいことをプログラムで実現するのがプログラマの仕事。その「実現したいこと」ってのは大抵曖昧で、プログラムのことなんて考慮されていないことが多い。仮にしっかりとした要求仕様があったとしても、それを作った人の意図を全て理解するなんてあり得ない。プログラムの細かいところを考えていくと、さらに疑問が湧いてくるだろう。そこには要求者との会話が必ず必要になる。

会話をしないでプログラムを作るとどうなるか。「コレジャナイ」ってなる。作りなおす。まだちょっと違う。時間はどんどん過ぎていく。やがてプログラムは他の誰かが作ることになる(これも書いてて胃が痛い^^;)

メールやチャットでいいんじゃないかって?

文章で伝えられることなんて、本人が思っているより、ずっと少ないよ。受け取り側は自分の考えや価値観で判断するしね。そもそも会話した方が早いことが多い。あとで言った言わないにならないよう、あえてメールにすることはあるけど、それは話した結果の確認であることが多いよ。

いずれにせよ、プログラマは人とあまり会話しなくていいということは断じてない。

あと

独立すると、会社に通ったり同僚や上司との付き合いもなくなりますので、ますます人と関わらずにすむようにすることも可能です。

独立したことはないけど、逆では。自分で営業とかプログラミング以外の仕事もしないといけなくなるでしょ。会社勤めより、ずっとコミュニケーション能力が必要になると思うんだけど、どうかな。

ふだん反論とかあまりしないんだけど、これを読んで誤解する人が出ないよう、あえて反論させていただきました :)

コンピュータの仕組みを学ぶにはどうしたらいいの?

さすが古くからコンピュータに親しんでいらっしゃる、すがや先生!本質を掴んでいらっしゃいますね :)

- 子供がプログラミングする意味についてどう思われますか。

 論理的に考えられるということと、仕組みを理解できるということが大事ではないかと思います。問題解決というか物事を判断して実行するときには、論理的に考えて冷静に行動すべきときがいろんな局面であるでしょう。また、物事のブラックボックス化に甘んじるのではなく、中身を理解することも重要です。例えば、Javaプログラミングでもライブラリを使うだけではなくて、その中身も理解しておくべきだと思います。そうでないと、いざというときに応用が利かないと思います。そもそも私自身、仕組みが見えないと嫌なんです。

(3/3)子どもたちにプログラミングを教えよう!イベントレポート - 自分が楽しい世界を知らせたくて描いた『こんにちはマイコン』:ITpro

子供達がプログラミングを学ぶ上では、両方学んだ方がいいと思うのだけど、前者はともかく、後者はなかなか難しいかなあ。

プログラミングの本質であるアルゴリズムや論理的な思考力という意味では、scratchとかがいいと思う。小学校四年生の息子にscratchを消化したら、ちょこっと説明しただけで基本的なところは出来るようになってしまった。きっと感覚的に覚えられる世代なんだね。いいなあ、脳みそが柔軟で :)

さて

コンピュータの仕組みとなると、どうだろう。昔はプログラミングの本の最初の方には必ずコンピュータの原理の説明がしてあって(今も書いてある本はあるけど)プログラミングを学ぶと、自然に学ぶことができた。ハードウェアが今よりずっと単純で分かりやすかったことも良かったのだと思う。BASICからI/Oを叩いて動きを確かめるなんてことも簡単にできた。基本的にコンピュータはハード/ソフト含めて全部自分の手のひらの中にあった、または個人でどうにか出来そうと思わせるぐらいコンパクトだった、というのは大きいと思う。

今はハードウェアもソフトウェアも高度化した。今のコンピュータは抽象度が上がり、中身は完全にブラックボックスだ。とてもじゃないけど、個人で簡単にできそうってレベルじゃない。今やアセンブラですら書いた通りのバイナリコードにならない…

プログラミングに限らず、コンピュータの動作原理を理解するには実践あるのみだと思っている。本を読んで完璧に理解したと思っても、実際に動かしてみると想像をつかなかったことが起こる。そこで初めて本に書いてあった「なんでこんな注意が書いてあるんだろ」が実感できる。いや、書いてないことの方が多いだろう。そういうことを繰り返すことで、初めてコンピュータは理解できるものだと思っている。

今コンピュータが学べそうなのは

Arduinoとかかな。でもLEDを光らせるぐらいだとちょっと地味すぎるし、とっつきも悪い気がする。IchigoJamあたりはいい線いってる気がするけど、ちょっと大きなプログラムを作るには容量が足りないかな。いずれもハードウェアに詳しい人のオモチャで、初心者が気軽にという感じじゃないんだよな。

そういう意味で

昔のパソコンの復活を希望します。

それが言いたかったんだろうって!?そらそうよ。yasuhoの脳みそは8bitで出来てるんで、しょうがないっす :b

なぜ今の子供達は忙しいのか

いいなあ、ボクも学研本社に訪問してみたい!

「いやね、そもそも今日なんでお邪魔したかと言いますと、友だちと飲んでる時に『学研ってあったよねー』『科学と学習の付録、おもしろかったよね』みたいな話になったんですよ。で、思ったんですよ。あれって、モノづくり系エンジニアさんたちの思考の原点だったんじゃない?って。子どものころから、実際にモノに触れることで発想が豊かになったんじゃないかと。けれど、調べてみたら2010年に休刊してて……! ぼくが将来、子どもできたら絶対学研取ろうって思ってたのに……!」

「科学と学習」の付録を学研本社で見せてもらったら、懐かしすぎて泣きそうになった | i:Engineer

今の自分があるのは学研の科学のおかげと思っている私にとって、この記事は科学と学習が休刊する経緯とか分かって、よかったです。

「あのような対面販売が世の中に受け入れられなくなったんですよね。インターホンが普及して『学研です』って言っても『いりません』って、ドアも開けてくれなくて時代遅れになっちゃった」

それは確かに今の時代キビシイかもしれない。ボクの場合、学校の体育会で販売されてたんだよな。それこそ今じゃ絶対ムリ…

「あと大きいのが、子どもがみんな忙しくなったっていうことですね。みんな塾に行って、スイミング習ってっていう。雑誌を読んだり、付録で遊んだりする暇がないんですよね。そんななかで、科学と学習って、読めばテストの点が上がるっていう性質のものではないじゃないですか。遅効性といいますか」

それは言えてる。今の子供、みんな忙しいもんね。うちの息子にも、もっとLEGOやscratchなんかで遊ばせてあげたいんだけど、いろいろ忙しいんだよなあ…

もっとも、塾に忙しい子供は学研の科学が全盛期だった当時も一定以上いたんだけどね。でも、当時は学校から帰ってくるなり外に出ていって、暗くなるまで友達と遊んでるっていう子供の方が多かった。ぼくもずっと学研の科学で遊んでるってことが出来たし、小学生の頃は塾にすら行ってなかった。まあ今になって勉強してなかったツケが回ってきてるわけだが(笑)

なぜ今の子供達は忙しいのか

ボクなりにその理由を考えると、子供の将来に対する親の危機感の違いじゃないかと思う。

高度成長期からバブル前に育った子供の親たちには、子供の将来に対して不安どころか自分たちよりいい未来しか想像できないって感じの人が多かったと思う。「勉強ができなくたって、この子なりにどうにかなるさ」って会話もよく聞いたしね。ぼくは工業高校を出て就職したんだけど、当時の学校には企業からの募集が山のように来ていて、就職に対する不安なんて全然なかった。

対して、今の時代はボクが言うまでもなく。キビシイ時代だよね…

そういう親が感じている危機感や緊張感って、子供に伝わる。いや、親の方から積極的に子供達へ伝えることも多いと思う。そうすると、子供達は自らが忙しくなって行かざるを得ない。自ら科学や技術に触れる機会が減っても仕方ないよね。

とはいえ

最近はscratchなどを使ったプログラミング講座も流行ってるみたいだよね。雑誌の付録は難しいかもしれないけど、別の形で子供達が技術に触れる機会が増えていってほしいと願う。

プログラムが書けるようになるまで - yasuhoの場合

うんうん、分かんないよね。どの本を選べばいいのか、実は私もよく分からないのよ^^;

入門書「この言語の入門書であって他の言語がある程度分かる前提で説明していきます」


なんでどれもこんなんなんだよ
説明で使われる単語単語が分からねーよ
初めは一々ググってたけど効率悪すぎるしね

ぼく「プログラミングの勉強する為に入門書でも買ってみるか」 : IT速報

プログラミング言語の入門書って、その言語に対する経験が初心者で、プログラミングは知っている前提っていうのが多いんだよね。プログラミングそのものを学ぶには、何か一つの言語を題材にした、初心者向けに教える本を読むのがいいと思うんだけど、そもそもどの本を読めばいいのか分からない。

本当は「プログラムはなぜ動くのか」みたいな、基礎的な原理を最初に学ぶのがいいのかな。でもそれって、最初に読むには退屈だと思うんだよな。ある程度プログラムを作ってみてから読んだ方が、腑に落ちていいかもしれない。

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

入門書に限らないんだけど

技術書を読む上での一番の問題は、本が自分の興味レベルにあわせてくれないこと。当たり前なんだけどさ。自分の知りたいことが自分の持つ知識レベルで書かれているのが理想なんだけど、本の方から自分にあわせてはくれないからね。結果として、自分が本に合わせなくちゃいけなくなって、疲れちゃう。

ぼくの場合、分からないところは読まないことにしてる。分からないところを頑張って読んだって苦痛だし、頭に入ってこない。とりあえず先に進んで「あ、あれはそういう意味だったのか」って分かったら元に戻る。

本は

主に言語の概要を理解するためと、リファレンスとして使ってる。

個人的にはプログラミングの技術は手を動かさないと理解できないものだと思っている。分厚い「プログラミング言語Java」を読んだらJavaでプログラムが書けるようになるわけじゃない。

プログラミング言語 Java 第4版

プログラミング言語 Java 第4版

まずは本の最初を読んでみて動かし方が分かったら、実際にコードを書いて動かしてみる。まずはサンプルから初めて、とにかくいろいろ書いてみる。

実際に書いてみることで、本には書いてなかった疑問がいっぱい出てくる。そうしたら本に戻る。それでも分からない時はgoogle先生に聞いてみる。これを繰り返すことで、その言語らしいプログラムが書けるようになっていく感じ。ぼくはそうやって覚えた。いつもそんな感じ。

昔の人間だからかなあ。昔から本を読むことは苦手で、実際に実践で使わないと覚えられない。なので、これはあくまで一例ね。

一番いいのは

近くに教えてくれる人がいることなんだよな。誰かいないかなあ^^;