まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

先日のこのブログエントリの続きであり、こちらのブログからのリレーブログでもあります。

ちょっとした隙間時間や空き時間をプログラミングに活用したい、そんな想いから先日の「通勤プログラミング」を書きました。 今回のテーマはその上級編、「脳内プログラミング」です。
nonai


私は暗算とか苦手ですが、あんな感じなんでしょうかね。与えられたテーマに対してプログラミング環境や(ケースバイケースですが)紙&鉛筆もなしに、頭の中だけでアルゴリズムを組み立ててコードに書き起こしていく、という作業です。

私自身、コードに書き起こすとなるとそれなりの準備というか道具が必要になりますが、「ランニングしながらアルゴリズムを考える」のは結構やってます。走る苦痛を妄想でごまかしているだけですけど。 あと会議中の「明らかに自分は関係ないなあ・・」という話題の時も、脳内ではシステムの設計してたりアルゴリズムを考えたりしてることはあります、はい。

悪く言えば職業病なんでしょうけど、よく言えば刺激的で楽しいから自然とやってる、という感覚です。その意味ではソリティアとかクロスワード、クイズに近い感覚なのかもしれません。


で、そんな脳内プログラミングですが、「そもそも何をプログラミングするの?」という方もいると思います。 もちろん脳内でできる範囲のプログラミングなので大規模な内容のは無理でしょう。上でも触れましたが、ちょっとしたクイズ感覚で空いた時間を健全な妄想で過ごす、というものです。この「ちょっとしたクイズ感覚」になるようなプログラミングのネタを探すのが簡単ではないのかもしれません。


で、そんなみなさんに私から提案。「CodeIQ やってみませんか?」

CodeIQ(コードアイキュー)はエンジニア向けのプログラミングチャレンジサイトです。与えられたお題に(多くの場合で)プログラミングで回答します。プログラミング言語の条件があるものやないものもあり、単に解ければいいものだったり、その実行速度が求められたり、なるべくコンパクトなコードに仕上げる必要があったり、、、と多くの問題から自分が解けそうなものを選んで挑戦できます。その結果フィードバックを見て、エンジニアとしての自分のスキル確認もできます:
https://codeiq.jp/

各設問の難易度にもよりますが、CodeIQ の問題を解くこと自体は(回答条件を満たしているかどうかはともかく)かなり簡単だと思っています。出題内容そのものは覚えられる程度で、そのロジックを頭の中で考えて、で時間のある時にコードに書き起こす、と。言ってみれば「脳内プログラミングにピッタリ!」だと思っています。

以上、僕が少し関わっている CodeIQ の宣伝でした(笑)。









一度、この話題でブログを書いてみたかった。

私は業務でもシステム系プログラマーですが、それとは全く別に、プライベートでも自分のためのウェブサービスを作ったり、たまにそれを公開したりしています。 ただ平日はほぼ朝から夜まで業務に携わっていて、プライベートでのプログラミング時間はかなり限られています。

そんな自分の時間をなるべく有効にプログラミングに充てるため、必然的に思いついたのが「通勤プログラミング」です。通勤時間をうまくプログラミング時間として活用しています。

ただ通勤プログラミングにはいくつか条件があります。まず「座れる」こと。座ってノートPCを取り出して膝の上でキーボードを開いて・・・というスタイルなので、立ったままではちと難しいです(まあ立ったまま「脳内プログラミング」をすることもありますが、こちらはかなり上級編だと思ってます)。いかに座席を確保できるか、というのも非常に大きな要素になります。私自身は電車の始発駅に居住していることもあって、「駅で少し待てば座れる」立場です。座ってしまえば最初の乗換駅まではプログラミングに充てられるため、それなりの時間を確保できます。

次に「通信手段の確保」も必要になることが多いです。駅にいる間は公共 WiFi を使えるケースもあるかもしれませんが、通勤での移動中はそうもいきません。タブレットで開発できるものであればタブレット自体の通信機能が使えるかもしれませんが、Eclipse を使うなどの本格的なプログラミングをするとなると現状はタブレットではなく、まだノートPCが必要になってきます。そしてノートPC単体では通信機能を持っていないケースがほとんどだと思うので、WiFi ルータなどのいわゆる「テザリング」環境を用意する必要があります。 プログラミング自体は通信なしでも可能ですが、サーバーアプリの動作を確認したり、デバッグやログを見る目的でサーバーインスタンスにリモートログインしたり、分からないことをちょっとググって調べたり、という際にネットワーク環境が必要になったり、あると便利だったりするので、この通信手段が確保できるかどうかも効率に影響します。

最近は「限られた短時間内で何をするのか?」を明確にしておくことも大事だと分かってきました。業務ではプログラミングに集中していて気が付くと1~2時間経っていた、なんてことも珍しくないのですが、通勤で座っていられるのは自分の場合はせいぜい30分程度です。この時間内に区切りが付くことをする、その1回のゴールを明確にしておくことも大事です。当たり前のことですが、この30分はプログラミングというか、コーディングのためだけに使いたいので、そのためにも前提となる設計や方針など座っていなくてもできることは可能な限り事前にまとめておき(あるいはプラットフォームで待っている間に脳内で行なっておき)、座ってノートPCを開いたらコーディングに集中する、というスタイルが理想です。

余談ですが、この超短期的なゴール意識は普段の業務にも好影響を与えているように思います。設計の時間と実装の時間を明確に分離することで、コミュニケーションを取る時間と一人で集中する時間のメリハリを付けるようになりました。集中できる時間はどうしても限られてしまうのですが、このスタイルを続けることで逆に集中しない時間をうまく活用できるよう、意識が変わってきていると感じています。

と、まあ簡単ですが、僕の通勤プログラミングはこんな感じ。 プログラミングに限らず、通勤中にノートPCを広げる人はたまに見かけるので同じようなことを考えている人はいるかもしれません。また、なるべく腕を動かさず、キーボード音もならないよう心掛けているつもりですが、それでも迷惑に感じている人がいるかもしれません。申し訳ないです。

本当は通勤プログラミングを快適に行う(笑)ためのアイテムやらコツやらにも触れたいのですが、それはまた別の機会に。こんな通勤プログラミングをしている人が他にいらっしゃるようであれば「PCは何使ってるの?」とか色々お話ししてみたいです。





 

アマゾン(http://www.amazon.co.jp/) のトップページの文字コードは Shift_JIS でした。
ama1
 
ここで検索ボックスにキーワードを入れて検索してみると、その結果ページの文字コードは UTF-8 ・・・
ama2

更に検索結果から1つ選んで詳細ページに移ると・・・ 今度はまた Shift_JIS でした。
ama3

いっそ最後は EUC-JP にでもすればいいのに・・・
 

このページのトップヘ