歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【雑記】新人プログラマーになる妹へのアドバイス

妹からプログラマー職として就職するという連絡が来ました。この妹が実在するかどうかは皆様のご想像に任せます。

他の職も含めていろいろと悩んだそうなのですが、おそらく私の影響でこういう職種に親しみがあった(というか抵抗感が少なかったというほうが正確?)なのでしょう。ひとまず、おめでとうございます。

プログラミングの経験があるわけじゃなく、テクノロジーよりも、文化や歴史のほうが好きなタイプです。そのためいろいろ苦労すると思いますが、「この職種を選んで良かった」と言ってもらえるように(もしくは私のせいでひどい道を選んだと思われないようにw)、最初はいろいろ手引きを残しておこうと思います。

とは言っても、私の言いたいようなことは既に書籍やインターネットでいろいろな人が言い尽くしています。ひとまず@shyouheiさんの優秀なプログラマーになるためのコツあたりがオススメです。

「問題を解決すること」を忘れないで

これで終わるのも味気ないので、いくつか簡単なアドバイスをします。

プログラマーの仕事は「技術を使うこと」ではなく、「問題を解決すること」です。素晴らしい技術を使っても、きちんと使われて利益を生み出せないと意味がありません。

問題に向き合うことを忘れて、安直に「この××を導入すれば楽になるんだ!」「最近話題の超イケてるプログラミング言語を使おう」って飛びついてしまうと、大抵時間やお金を払って不便な思いをするだけです。それぞれの道具が、何を目的に作られたものなのかちゃんと見定めましょう。

逆に、ニュース通知などの単純なプログラムでも、問題を大きく外してなければ喜んでもらえます。そして、問題の解決は新しい問題を生む(エラー通知はどうしよう、コードのメンテナンスがつらい等)ので、「これってショボいんじゃないかな?」って思っている問題でも、それを問いていく過程で新しい発想や技術に触れられると思います。

ライト、ついてますか』という本にこういう例がよくまとまっていたので、一度読んでみてほしいです。

ライト、ついてますか―問題発見の人間学

ライト、ついてますか―問題発見の人間学

大事なのは「問題の本質を見つけること」「それに合った解決策を出せること」ですが、「これってどうやればうまくいくの?」を説明できるほどの実力はまだ私にはありません。ただ、シリコンバレー流の「早めにリリースして修正する」方針は参考になるかもしれません。

www.slideshare.net

ここまで大げさじゃなくても、関係する人に早めに見せると、自分の間違いが早く修正できて楽になります。

「楽をする方法」をまず考えてね

「勤勉なこと」はもちろん良いことですが、今の情報化社会では勉強しなければいけない分野が多すぎるので、真面目にやると疲れます。

例えばネットワークで問題が起こった時、いろいろな解決方法があると思います。

  • 自力で勉強して解決する
  • 先輩に泣きつく
  • (一旦)放置する
  • ...

この中から「自分やチームを総合的に見て、一番楽で時間のかからない方法を選ぶ」ゲームだと思うと良いです。上のような場合、「先輩に泣きついた後に、怒られながら勉強する」スタイルが一番効率が良かったですw

また、スクリプト言語Python, Ruby...)を一つ学ぶと、ボタンひとつで終わらせる定型作業が案外多いことに気づくと思います。余った時間はこっそりネットサーフィンしましょう。

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

ルールを守った上なら悪人になっていいよ

打ち合わせや交渉する場も少なからずあると思います。そういうときは、相手に気を遣うよりできるだけ自分の主張をハッキリとしたほうが、自分も相手も困らないことが多いです。というか、自分は気を遣ってるつもり(あの人時間なさそうだし…)でも、相手はそうじゃない(実は今は重要じゃない仕事ばかり)ってことが多いです。

残念ながら、自分のことを「私は悪いことしてないのに報われない」と思っているときほど、おそらく周囲からは迷惑な存在として思われています。

以前も紹介しているのですが、『医療とコミュニケーションについて』という本がこの点良かったです。

「『悪い人』は目的が決まっており、適切に対処すれば撤退してくれるからある意味付き合いやすい。『いい人』は目的がはっきりしないし、一方的に期待を積み上げてくるので交渉の余地がない」という話にも考えさせられました。

自分のことをクソ野郎だと思っていると、「こんなこと質問するとダメなヤツだと思われるんじゃないか」みたいな変な躊躇が無くなるのでオススメです。

レジデント初期研修用資料 医療とコミュニケーションについて

レジデント初期研修用資料 医療とコミュニケーションについて

また、『人を動かす 文庫版』も同じような文脈でいい本でした。あまり関係ないのですが、『7つの習慣』はやりがい搾取感が拭いきれず好きではないのですが、カーネギーとは友達になれそうな感じがします。

もちろん、違法なことをやれという意味ではないので、ルールとマナーは守ってくださいw あと度胸と愛嬌もあると尚良いです。

毎日勉強する習慣をつけるといいよ

数ヶ月経つと周囲が「毎日勉強する人(さらにアウトプットも出す人)」「全然勉強しない人」に2分されてることに気づくと思います。というわけで、「毎朝30分必ず本を読む」程度でいいので、インプットする習慣をつけると良いです。

私の同僚のエキスパートは「インプットするだけでは無駄。技術的にアウトプットも含めないと勉強にならない」と言っており、彼の言うことも正しいのですが、まあ気持ちが落ちてる時期もあるので無理なく続く程度にしてください。

snowlong.hatenablog.com

もちろん、「Write Code Every Day」と言って実践している方もいるので、もしかしたら参考になるかもしれません。

おそらく性格的に本を買いまくると思うので、早めに電子書籍リーダーを買うと良いです。私はiPad mini + Kindleアプリを使っていて、今のところ不便は感じてません。

iPad mini 16GB Wi-Fiモデル ホワイト&シルバー MD531J/A

iPad mini 16GB Wi-Fiモデル ホワイト&シルバー MD531J/A

スキルを言語化する努力をしよう

上手く言えないのですが、特にプログラミング言語は技術を説明するための言葉で、適切な概念を知っていれば驚くほど簡単に問題が解けることがあります。また、(今は縁遠いと思うかもしれませんが)数学も似たような性質のものです。

同僚のコードレビューで「こういう書き方するのはなぜですか?こうした方が楽じゃないですか?」と訊かれることが多く、その度に自分の暗黙知をきちんと言語化して(もしくは私のほうが間違っていて)意識的に使いこなせるようになることもあります。

…やっぱり上手く説明できないです。このあたりの本をおすすめします。

一人称研究のすすめ: 知能研究の新しい潮流

一人称研究のすすめ: 知能研究の新しい潮流

メンターを見つけよう

いろいろ書籍や記事はあるのですが、悩みや強み弱みは人それぞれで、自分の問題からは少しずつハズレていることも多いので効率は良くないです。

例えば、この記事でも「問題をちゃんと定義する」みたいな面を強調しがちですが、会社に入った後で「私が悩んでるのはそこじゃなかったわ」「セクハラ係長うざい」って思ってしまってるかもしれません。

こんなとき信頼できる先輩を見つけられると、もう少し客観的で的確なアドバイスを貰えると思います。

運動しよう

座りっぱなしだと正直気が参ってくるので、適度に身体を動かしましょう。これは私もできてないので、良いスポーツの趣味が見つかったら教えてくださいw