Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2013-06-28

[]プログラミングにおける毎日の課題を見つけるための課題一覧 22:49

 最近だと意識が高く、定時の一時間前に出社しては、なんらかの余技的な活動を行なっています(地獄のミサワっぽく読んでください)。しかし、最近はその辺がネタ切れになってしまって、「じゃあ何をしようかなー」とちょっとだけ悩んでしまいました。

 そこで、発想を変えて「じゃあ課題として考えられることを列挙してみよう」と思って、今回はブレインストーミング的に、「こういう課題が考えられる」ということを列挙してみようと思います。

「*-99」系の問題集をやってみる

 プログラマーなら、普段使っている言語があると思うのですが、それ以外の、気になるプログラミング言語をさわってみるというのもいいのかなと思います。

 そこで有名なのは「*-99」シリーズで、アスタリスクには各言語の頭文字が入ります。元々はProlog用の課題集だったaのですが、これが評判で、他のVersionもできるようになりました。その辺を、まず列挙してみます。

 上のものを、別の言語(例えばPythonであったり、Rubyであったり)で書き直すのもいいかもしれません。

競技プログラミングやオンラインジャッジに挑戦してみる

プログラミングの世界には、競技プログラミングの世界もあります。要するに、何らかのInputを与えられて、それを解くという奴ですね。

 例えば、その辺の本でいうと、通称・蟻本と呼ばれる『プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~』というものがあったり、あるいはTopCoderと呼ばれる競技プログラミングコンテストを対象とした『最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド』という本も出ています。

  • no titleを解く
    • Project Eularは、数学的な問題を、機械を使って解答するというゲームです。最初の内は割と簡単なので初学者にとってもやりやすいと思うのですが、段々と難しくなってきて、ある程度アルゴリズムみたいなものがわからないと解けない問題も出てきます。ちなみに、有志が日本語訳をしていたりしています。
  • AtCoderに参加する
    • 日本版TopCoder、とでも呼べばいいのでしょうか。定期的に開催されます。時間制限があるので、発想力と実装力が試されるといったところでしょうか。過去の問題も解くので、競技は苦手だけど、問題を解きたいという人にもいいかもしれません。
  • Sphere Online Judge (SPOJ)に挑戦する
    • とにかく莫大な量の問題数がある。ほとんど英語なので、問題の意図自体がわからないこともままあり、その当たりに関しては根性でなんとかするのがいいでしょう。ちなみに、基本的にshellの知識も必要になる(例えば、終了時はexit 0が吐き出されている必要が有る)ので、その辺もそつなくやるといいかもしれません。

 とりあえず、このあたりに関しては、こちらのwikiにもまとめられているので、その辺も参考にしてみると良いでしょう。

何かしらの講義を受けてみる

 以上のは、問題を解くというのに特化した形ではありますが、現在は「オンラインで勉強できる」という環境が整いつつあるので、淡々とその辺りを消化するのもいいかもしれません。

  • ドットインストール
    • もはや有名といえば有名になりすぎた教育サイト。RubyPythonの他に、ScratchやD3AWKなど、逆に幅広く提供し過ぎて、それってどうなのという気持ちもなくはないですが、逆に「これってどういうものなんだろう」というのを理解する上においては、いい感じかもしれません。

Newsを消化する

 もう少し、別の方向から。アウトプットするためには、まず何らかの形でインプットする必要もあると思うのですが、そのあたりのリソースなんかもちょっとだけ紹介します。

  • Stack Overflowをひたすら読む
    • 何か困った時に検索するとぶち当たり、そして解決し、その存在に感謝するサイト。別に問題にあたらずとも、とにかくスコアの高い記事をひたすら読んでいくのも、いろいろと勉強になることが多いように感じます。

一日一章、何らかの技術書を読む

 いま、ちょっと統計向けに作られたRをちょこちょこと読んでいますが、一日に一章だけ、技術書を読んでみるのもいいかもしれません。さすがに一日一冊だと気が滅入ってしまうのと、あと暴力的に硬い本であると、その一章の内容を理解するだけでも、非常に時間がかかってしまうことが多いので、そのあたりはゆっくりと時間をかけて理解していくのも一つの手なのかなとか、考えてます。

写経する

 良くプログラミングを覚える時に、写経するといいという話があります。もし何か覚えたいものがあれば、写経するというのは一つの手であるように感じます。ただ、写経するといっても、一から写経するのもつかれてしまうタイプなので、自分の場合だと、下のような写経の方法を考えたりしています。

  1. まず、ソースコードの構成を考える
  2. 自分が手を付けるだろうところから書き写していく
  3. 全体が完成したら、実行してみて、タイプミスなどをチェックしていく
  4. 次に、値や変数名を変えていってみる。その上でどのように挙動が変わるのかを見る

有名なフレームワークソースコードを読む

 ただプログラムをするだけだと、限界がある部分もあるので、他のソースコードを読み続けてみるのも一つの手です。自分の場合だと、良く使うフレームワークdjangoで、何かの問題にぶち当たるたびに、ソースコード自体を読みにいくのですが、それなりに使われるフレームワークは、それなりによく考えられた構成になっている場合が多い気がします。その辺を踏まえて、「なぜこの構成だと便利なのか」であったり、「なぜこういう書き方になったのだろう」と想像しながら読んでいくと、面白い発見をすることが時々あります。

快適な開発環境を目指す

 開発において、快適な開発環境というのは重要だと思います。そこで、開発環境のメンテナンスを少しずつ進めるというのも一つの手かなと思います。最近だとGitHubGistに、開発環境の設定ファイルを投稿している人がいるので、そういう人の設定ファイルを検索して、参考にしながら、自分だけのとっておきの環境を構築していくのは、普段の開発を進める上においてもスムーズになるかと思います。

 また、その他にも便利そうなスニペットがあったら、それを導入していってみるというのもいいかもしれません。

自分のサービスを一日一回機能改善する

 何かしらの、自分のサービスであったり、プラグインがあるとするならば、それらをメンテナンスすることは非常に重要なことであることというのも確かでしょう。バグがなかったり、追加する機能がなかったりしても、テストを追加したり、リファクタリングするという習慣は、きっと何かの役に立つかもしれません。

まとめ

 ということで、つらつらと書き連ねてみましたが、どうでしょうか。他にも「こういう方法があるよ!」という方法があれば教えてくだされば幸いです。

 ちなみに、現在自分が作成している、ブックマークされている本をランダムに表示したり、キーワードでつらつらと眺めてることができるFXでの失敗ケース | Just another WordPress siteも地味に毎日改良を加えているので、もしよろしければアクセスしてください(最近、こればっかりだな)。

 最近の改良は、本をキーワードごとに散策するという機能が追加されています。

 |