月並みなものは、ここでは話題にしません。よく「忘れがち」なものにフォーカスします。
コツ1. 土日という概念を捨てる
土日は、土日ではなく、たまたま仕事に拘束されない平日です。自分を高めるトレーニングに時間を使えます。
とはいえ、普段の生活もありますから、土日を全部使うのはさすがに厳しいかもですね。なので「半分だけ」とかが現実的でしょう。
半分なので24時間。土曜12時間、日曜12時間。もしくは、土曜16時間、日曜8時間。これなら日曜日はけっこう生活に時間を費やせます。
常にパソコンの前じゃなくても良いでしょう。出かけながらプログラミングしたっていいです。トレーニングになっていればいいので、書くプログラミングだけとは限りません(コツ6を参照)。
...
「そっか、あのプライベートの用事を削れば、あの機能その日にうちに実装できるかも、よし!」
常に "削れるプライベートを探す" 習慣を。
コツ2. 昼休みという概念を捨てる
昼休みは、昼休みではなく、たまたま仕事に拘束されず栄養補給する一時間です。自分を高めるトレーニングに時間を使えます。
ご飯を食べながらもくもくやりましょう。買ってくる時間がもったいないので、朝、オフィスに来る時に買ってきましょう。できるだけ、早く食べ終わるものが良いでしょう。(ただ早食いは良くないです)
楽しく外食ランチという概念もありません。もしくは、技術話をひたすらするメンバーとランチに行きましょう。
コツ3. 夜中という概念を捨てる
夜中は、夜中ではなく、暗いだけの昼間です。元気いっぱい。自分を高めるトレーニングに時間を使えます。
「フラフラになって、もう寝ないとつらい」
という風になったら寝る時間、と考えればわかりやすいです。ときには、朝方までやってもいいでしょう。次の日はちゃんと起きないといけませんが。
そして、これをやると、布団の中でも、朝起きた直後でも、ずっとプログラムのことを考えることになります。考えないようにしても考えてしまうのです。つまり、別のトレーニング効果が生まれます。
コツ4. 通勤という概念を捨てる
通勤は、通勤ではなく、物理的に輸送されているだけの自由時間です。自分を高めるトレーニングに時間を使えます。
ただし、姿勢が固定化されることが多いので、やれることは限られます。そういうところでもトレーニングできる小道具を用意しましょう。
パソコンが開けないのであれば、スマートフォンでひたすら技術ページを読むでもOK。紙に印刷されたソースコードを読んでもいいでしょうし、ひたすら脳内プログラミングしてもいいでしょう。
コツ5. 寝具に金は惜しまない
脳みそに負荷をかける分、睡眠の質を上げましょう。
布団、マットレス、毛布、枕など、それぞれ数万出せば、クオリティの高い心地よいものが買えます。加湿器とか寝るために快適なものも同様です。
それでトレーニングの質が上がるなら安いものです。遠慮は要らないでしょう。
コツ6. 書く時間と考える時間の分離
もうこちらのとおりです。
// 別にパソコンがなくてもプログラミングはできるよ
http://d.hatena.ne.jp/jflute/20170923/nopcpg
色々な概念を捨てても、パソコンの前に長くじっとしているのは、色々と支障が出るものです。
なので、パソコンがなくても色々とできるような習慣とスキルを磨いて実践することが大切です。
コツ7. しゃべりと笑顔のトレーニング
プログラマーであっても、コミュニケーション力は大切です。鍛えた「技術」を「成果」に変換するために欠かせません。
そして、コミュニケーション力も「力 (りょく)」です。鍛えることができます。
「コミュニケーションは性格的に向かないから...」とか言っても誰も免罪符をくれません。
「プログラミングは性格的に向かないから...」とか言ってるプログラマーに「しょうがないね」って誰も言わないのと一緒です。必要なことは必要です。
月並みのコミュニケーション力アップ方法は置いておいて、単純にしゃべり(滑舌)のトレーニングも有用だと思います。「言葉を発する」のに頭のCPUパワーを使っちゃうと、円滑な会話に支障が出ます。
会話中のCPUパワーは、伝える言葉を組み立てることや、相手の意図を汲み取ることに割り振りたいものです。
ちなみに、これはキーボードタイピングと同じです。「タイピング自体」に気を取られないで思考できるように。「言葉を発すること自体」に気を取られないで会話できるように。
...
また、笑顔も大切です。笑顔の素敵な人は話かけられやすく話しやすいので、その分たくさんの情報が入ってきやすいです。
その他さまざまな効果が期待できます。やはり人間同士ですから。
アナウンサーやホテルマンが笑顔のトレーニングをするのはイメージしやすいかもしれませんが、プログラマーだって人とコミュニケーションを取る以上は、トレーニングによる効果は期待できます。笑顔が苦手なのであればなおさら費用対効果は高いでしょう。
コツ8. タイピングとショートカットの練習
すでにしゃべりのところで話題に出ました。
タイピング、特にコードを打ち込むこと自体に、頭のCPUパワーを割かれたくないので、スムーズにできるようにしましょう。
タイピングやショートカットだけに絞って、反復練習すると良いでしょう。
タイピングは、パソコンの触り始めにやるが多いですが、ショートカットやコード補完を狙ってトレーニングする人は、なかなか少ないように思います。
頻繁に使うものであれば自然と身についてくるものですが、頻度が多くないものは自然と身につけるのは厳しくなります。そして、頻度が多くないものがたくさんあってチリも積もります。そういったショートカットやコード補完は、実用レベルになるまではトレーニングしないと、「スムーズに打てないから結局使わない」ってことになって、永遠と役立てることができません。
「ショートカット、なかなか覚えられないんだよね...」
覚えるのではありません。反復練習して習得するのです。
コツ9. 技術ブログを書く
プログラマーは、チャットやチケット上で、技術的な話を文字で表現してやり取りすることが多いです。
また、コード上のコメントやDBコメントなど、プログラマーは自然言語でプログラムを表現する力が求められています。
いかに文字上でロジックをスムーズに展開するかは、特に今後のプログラマーの生命線とも言えます。コミュニケーションの一つと言えます。
技術ブログを書くというのは、単に技術情報の公開という意義だけではなく、書いた本人のロジック書き出しトレーニングになります。
公開してるからプレッシャーも高い。
技術ブログを積み重ねていくことで、技術の説明や自分の考えを文字で伝えるトレーニングになります。
すると、レスポンスにもつながるでしょう。
// レスポンスのある人は信頼される
http://d.hatena.ne.jp/jflute/20170828/responsetrusted
コツ10. 狂人という概念を捨てる
これだけのことを実践してると、周りの人からは、こんなこと言われてしまうかもしれません。
「よほどの勇者か狂人だな」
勇者です。安心してください。狂人という概念を捨てていれば、選択肢はひとつだけですから。
優秀なプログラマーを目指しているのに、そんなところを遠慮しても意味がありません。
試合だけで上達したい?
トレーニングというもの自体を、なかなかやろうとしない人もいます。
試合もトレーニングにはなりますが、試合だけで完全なトレーニングにはなりません。
試合というのは、成果が問われるものです。それゆえに、トレーニング性よりも、目先の成果を優先することも多いです。
すると成長にはつながりません。より高い成果は「永遠に出せない」ということに。仕事というのは常に試合です。
しかも仕事というのは基本的に、その人のできるレベルに合わせた仕事が割り振られます。つまりできる仕事しか来ないのが普通です。
二軍の試合に年間130試合出てるからって、一軍の試合に出るための力が身に付くわけじゃありません。
なので、事前にトレーニングをする。それは、音楽やスポーツその他なんでも同じです。
部分部分を集中トレーニングすることで、レアケースにも対応ができる力が付いてきて、その積み重ねが多様なケースに対応できる力になるのです。
優秀なプログラマーになるためには、何をトレーニングしたら良いのでしょうか?それを考えることも大切です。
自分のモチベーション次第で、どんなトレーニングが足りてないか考えるのも良いでしょう。
// 独学のきっかけ、技術欲、問題解決欲、自己成長欲
http://d.hatena.ne.jp/jflute/20160210/selfgrowth
プロになりたいのであれば
ここまでやるの!?って思われるかもしれませんが、優秀になろうとしない人は関係ないですから、安心してください。
ただ、例えば...
プロのミュージシャンになりたい!
っていう人だったら、ここまでやってても違和感ないですよね。別に「優秀なプログラマーになりたい!」も変わらないかと。
さすがにずっとはできないかもしれませんが、一定期間でも、これらのコツのいくつかくらいは実践できなきゃ、たぶん何も変わらないでしょう。
行動力がスキルの源です。
【追記】
その後の補足をtwitterにて!
https://twitter.com/jflute/status/912887150143610880