パスワードを忘れた? アカウント作成
134671 story
IT

趣味のプロジェクトをきちんと仕上げるには? 68

ストーリー by soara
モチベーションがあるうちに短期決戦に持ち込む 部門より

pinbou 曰く、

ベテラン・プログラマ、カルロス・タサダ氏のブログ記事「Is it possible to finish a hobby project?」が興味深い。いわく

金をもらってやるプロジェクトだと、完全なロードマップや納期もあるし、プロジェクトに集中することになる。しかし趣味でやっているプロジェクトは完成したためしがなく、品質にも納得したことがない。なぜだろう? 思うに以下のような問題がありそうだ。

  • 自分に最もアピールする機能にばかり目が行って、他のところに手が回らない
  • 落ち着いて作業できる時間、まとまった量の時間をプロジェクトに割けない
  • 外部からのプレッシャーがない
  • 新技術の練習として、実験的に同じプログラムを違う言語やライブラリで実装することが多い。よって、機能的には進歩がない

これに対する処方箋として次のようなものはどうだろうか。

  • 最小限の機能セットを定義し、そこが終わるまでカッコいい機能の開発には取りかからない
  • 休暇や週末など、まとまった時間を割ける時だけ手をつける
  • 自分でデッドラインを設定して、達成したら自分にご褒美を出す
  • 実験はほどほどにする

/.Jの諸氏は、彼と似たような問題を抱えていないだろうか? 何か工夫や経験談があればシェアしてほしい。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 他人の目 (スコア:4, すばらしい洞察)

    by new release (37404) on 2009年08月22日 18時06分 (#1627281) 日記
    プログラムに限らず、趣味に区切りを持たせるには他人の目にさらすのが
    一番いいと経験上考えます。
    他人の目は、フリーソフトとして公開できるところまで行かなくても、友人に
    なんとなく見せるだけでも大丈夫です。
    友人に見せることを前提にすると、どこがいい加減でよくて、どこが無いと
    いけないかは自ずと決まってきます。枝葉が実装されてなくても言葉で説明できる
    部分は説明で済ませても、見せたいものの本質は伝わりますし。
    あとは、自分で再利用する場合を想定しても、手を抜けない部分がある程度
    見えてくるかな。

    タレコミの主旨とはずれるけれど、趣味の場合、キッチリ仕上がっている
    必要はまったくないと思います。
    • by Anonymous Coward

      公開するとあーしろ、こーしろとうるさくないですか?
      GPLと書いてあっても、自分でやらない人が多い。
      この間なんか、コンパイルの仕方を教えろというメールが
      しつこくきて、いやになった。

      • Re:他人の目 (スコア:1, 参考になる)

        by Anonymous Coward on 2009年08月22日 21時29分 (#1627345)
        さあ? 基本的にメールには回答しないって宣言してあるからなぁ。
        ダウンロードするところにも書いてあるから、来たメールは読まずに保存ボックス行きだね。
        読むのは次回のアップデートの直前。

        そしてフィルタリングソフトを通すからNGワードが入ってるのは読まずに削除。
        あと、件数が多いメール元のも削除だな。スパム扱い。
        親コメント
        • by Anonymous Coward
          メールアドレス公開する意味なくね?
      • by Anonymous Coward
        そーゆーヤツからのメールは自動振り分けでゴミ箱に入れちゃっていいのでは?

        #でも、「こーだったらいーなー」くらいは許してね。
    • by Anonymous Coward
      >タレコミの主旨とはずれるけれど、趣味の場合、キッチリ仕上がっている
      >必要はまったくないと思います。

      全くの余談ですが、これを読んで「天邪鬼なソフト」のアイデアがひとつ。
      例:save機能の無いエディタ。(書ければいいじゃないか!と割り切る)

      趣味に走るとこういうのもアリだな!っと。(w
      • Re:他人の目 (スコア:1, 興味深い)

        by Anonymous Coward on 2009年08月23日 0時51分 (#1627403)
        個人的には、エディタの国際化とかがやってて一番楽しいですからねぇ。
        意味もなく、アラビア語の勉強なんて始めてしまったり・・・。

        それからすると、保存機能なんてゴミだな。
        親コメント
      • Re:他人の目 (スコア:1, おもしろおかしい)

        by Anonymous Coward on 2009年08月23日 1時13分 (#1627409)
        昔のワープロソフトのお試し版でそんなのがあったような.
        飾り文字の種類やらを競っていたころ.一通り書けるけど,保存できませんってやつ.
        あと,書いたソースやコードを保存できない統合開発環境お試し版もあった気もする.
        いくらお試しでもプログラミングでそりゃ無いだろと思った.
        親コメント
      • by Anonymous Coward

        結構前からありますよ? [xrea.com]それ。

  • 出来たところが完成形 (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2009年08月22日 17時59分 (#1627276)
    t/o
    • by Anonymous Coward

      サブジェクトだけしか書いてないけど本当にそうかもしれないと思う

      自分も趣味のプロダクトをいくつかやっているのだけど、完全な完成ってあり得ないとしか思えないんだ
      作り終えたらそれをもっといじり倒したくなるというか、次を目指してしまうと、今完成した物が中途半端な物になっちゃう
      実は仕事でもちょっとこの状況が発生することがあってものすごく悩んでる
      プログラムに限らず、なにか設計を込みで作る物だと再設計とか改良って常に存在すると思うんだ(設計前の自分と製作後の自分の間の成長とかを勘案しても)

      #自分が未熟なだけなのかもしれないけど、せめて自分が作成中に成長したと信じたいけどな
      #生涯一学徒を胸張っていえる位すごいならいいんだけどなぁ

      • by Anonymous Coward

        >生涯一学徒を胸張って

        まったくご尤も。

        結局のところ多くの人は、
        学徒でい続けるための十分なリソース(を産むための能力)が不足してるがために、
        どこかの時期で学徒を「退学」せざるを得なくなってしまうんだよね。
        悲しいことだが。

        つまり生涯一学徒を貫くためには能力が必要。(それ以外にも色々ね)

        ヘビーではあるが、男子が(女子も歓迎!)一生を賭けるに値する話ではあると思う。

    • どのくらい一般的にそう言えるのかわかりませんが、個人的にソフトを書くきっかけって、
      ・「~をしたいけどできるソフトがない」という自分の需要(または知り合いの依頼)
      ・単に「~をするソフト」を作ってor勉強してみたかった
      のどちらかが多いような気がします。

      だとすると、前者のきっかけで始めた場合、需要とリソースを天秤にかけながら要求仕様を設定することが(実際に設定するかどうかは別として)でき、それを満たした時点で「完成」です(仕様変更がないとは限らないけど)。後者の場合は「ここまでできればOK」というラインが最初からありません。

      あとはあれですね、他人の需要を満たすためのソフトとか、外部の仕様に従って動くソフトの場合、自分だけのために作る場合と比べて仕様変更が頻繁になりがちなので、逃げ水的に「いつまでたっても完成しない」可能性はありますね。画像をリサイズするソフトを作ったら減色もできるようにしてくれと言われた(対応しないのも手だけど)とか、ブラウザのアドオン作ったらブラウザの仕様が変わったとか。

      #このコメントもt/oにした方が粋だったかしらね

  • by Anonymous Coward on 2009年08月22日 18時24分 (#1627288)

    タレコミを読んで

     そうか、この人は仕事のプロジェクトはきちんと仕上げられてるんだ

    と羨ましくなった奴は手を上げろ!

    ノシ

    • by firewheel (31280) on 2009年08月22日 21時57分 (#1627355)

      が必要条件だと真っ先に思いつきました。

      そら日本発のオープンソース プロダクトが少なくなるわけだわ。。。。

      親コメント
      • by Anonymous Coward

        モチヲじゃあるまいし、趣味のプログラムとオープンソースに何の関係があるんですか。しかも隣のストーリーはLinuxカーネルの大部分は企業が開発している [srad.jp]だというのに。

        • by Anonymous Coward on 2009年08月22日 23時01分 (#1627373)

          >しかも隣のストーリーはLinuxカーネルの大部分は企業が開発しているだというのに。
          その発言の裏は、「Linuxを開発しているのは企業ではないという固定観念がある」ということですね。
          それに何よりLinus氏がLinuxを開発したのは趣味だし、Matz氏がRubyを開発したのも趣味だよねと。

          ビジネスになった『後』なら企業も参入することは珍しくないけれど、
          ビジネスになる『前』に開発者動かすを原動力は、「それが僕には楽しかったから」。/ [amazon.co.jp]

          親コメント
    • by Anonymous Coward

      >金をもらってやるプロジェクトだと、完全なロードマップや納期もあるし、プロジェクトに集中することになる。
      なに言ってんだ?学生さんか?と思った人も挙手!

    • by Anonymous Coward
      趣味プロジェクトの問題リストを見て、失敗した前の仕事のプロジェクトそのものじゃないかと思った人も挙手。
      (念の為に言うと税金ね、やることがなくぶらぶらしてた最低のプロジェクトだったのでうらやましいなどと言わないように)
  • きっと誰かが完成させてくれる。

    • オープンソースにすればいい

      きっと誰かが完成させてくれる。

      オープンソースプロジェクトは、始めた人が「使えるレベル」まで自力でもっていかないと成功しない、とどこかで聞きました。

      しかし、ソースコードを公開しておくことには意味があります。人の要望を却下するとき、「ソースコードは全部公開しているから、どうしてもというなら自分でやってね」という気持ちになれるのは、僕にとっては大きいです。興味がなくなったら、ソースコードが公開されていることを言い訳にして、いつでもやめるつもりですし。

      それと、ソースコードを公開しておくと、ひょっとしたら誰かがこのコードを使ってすごいソフトを書いてくれるかも、という期待だけは持てます。今の僕にはこの方が、宝くじを買うよりよほど夢があって楽しいです。

      親コメント
  • by gonzo (38147) on 2009年08月22日 23時38分 (#1627384)

    お金をもらって仕事してやっているプロジェクトすら満足にできないのに、
    利益もでないようなことがまともに出来るはずがない。

    と、自分のことを思い出してそう思った。

  • 趣味だから完成しなくても誰も怒らないんだけど、でも「完成」させたいってのはわかります。僕もそうです (大したプログラムも書いたことがないくせに偉そうに)。

    小さい頃は、「完成」というのはこれ以上いじる点がないことだと思っていました。「まだいろいろ追加したいことはあるけど、ひとまず完成」なんてのは欺瞞だと思っていました。

    でも、今の僕は「ひとまず完成」を受け入れるようになりました。改善するべき点があっても、ソフトウェア自体が成立していれば OK。僕が公開するソフトウェアではこの状態を目指しています。

    僕は Firefox 用の拡張機能 [mozilla.org]を公開しています。追加したい機能はありますが、今のバージョンは機能の面では「ありうる完成形の一つ」だと思っています (実装にバグがあるのは別問題)。

    このように今のところ完成させることができている要因には、次のようなものがあります。

    • 「完成形の一つ」であることを目指している。これ以上いじる点がまったくない「真の完成形」のようなものは目指していない。
    • 自分の中で「絶対にほしい機能」が最初から明確だった。
    • 新機能を安易に追加しないようにしている。自分で何か思いついても、人から要望を受け取っても、まず、その機能は本当にこの拡張機能で実現するべきことかどうかを検討するようにしている。
    • そもそも簡単なことしかしていない。 :)

    一方、こっちの Greasemonkey スクリプト [userscripts.org]は、こちらも完成形の一つというつもりで公開したのですが、根本的に考えから抜け落ちていた部分があった上、簡単には直せないので、中途半端になってしまっています。「バグ」と呼んではいますが、実装のバグではなくて設計ミスです。完成していなくて良いというつもりで出したつもりではなかったのですが。まあ、直す方法を思いついたら直します。

  • 目的を持つこと (スコア:1, 参考になる)

    by Anonymous Coward on 2009年08月22日 18時46分 (#1627297)
    小説だったら「小説賞に応募する!」
    DTMだったら「ニコ動で公開する!」(笑)
    目的を持てば達成はできるはず。これは私の体験談です。


    え、応募&公開した後の結果? 聞かないでくださいよ、あはは……(苦笑い)
    • by donadona (37711) on 2009年08月22日 19時37分 (#1627311)

      自分の場合、ちゃんと完成した趣味ソフトはどれも最初に仕様書を書いていました。
      ゴールが明確になっていること、どんな機能を実装すべきか見えていること。
      これ大事だと思います。

      #もっとも、最初に仕様書書いたけど完成しなかったソフトも多数。

      親コメント
      • by Anonymous Coward

        私が(ある意味で:ほかのプログラマに部品取りしてもらえたという意味で※)一番気に入ってるソフトは、ステートチャートを添付していました。これこれこうするとこういうふうに状態遷移するんだよ、というアレ。

        チャートを描いたことがよかったかどうかは謎ですが、
        チャートが綺麗に書けるくらいに状態の扱い(の構造)がきちんとしてたという点は、やっぱりプラスだったんだろうなと想像してます。

        ※もちろん、自己申告でそういうかたが居た数、でしかないですが。

        >最初に仕様書を書いて

        ところで仕様変更はどうしてます?

        まさか趣味でもWaterFallみたいに「一度決めた仕様は変えない」な

  • ちょうど作ってる最中だけど、コーディングはともかくテストとドキュメント作成が面倒。
    それに、ユーザがどの程度利用してくれるか解らないからモチベーションの維持が難しい。

    モチベーション維持できたら来月中頃には完成すると思うので、良かったら見に来てください。
    ちなみに致命的なバグがいくつか...

    Web Database Mímisbrunnr [appspot.com]

  • 私の場合 (スコア:1, 参考になる)

    by Anonymous Coward on 2009年08月22日 23時28分 (#1627382)
    趣味の自分で使う物を完成度を上げる目的も兼ねてサイト等を持たずに2chを通して公開していました、と言っても専スレでは無いですが・・・
    ・第三者の意見が聞ける→適度なプレッシャーになる
    ・アドバイスがもらえる→サンデープログラマーなので技術が大分向上しました
    ・上と被りますが自分では考えもしなかった機能やアプローチを教えてもらえる
    ・感謝の言葉がもらえる→モチベーションが保てる
    ・デバッグ要員の確保→複数環境でのバグの洗い出しが無料!
    ・自サイトを持っている時に比べてクレクレや教えてが少ない→勝手に周りが叩いて減っていく
    ・メールアドレスを公開しないのでスパムがこない
    殆どメリットばかりだったのですが、ある日無断かつパッケージを改変されて雑誌紹介+付録に収録され(しかも表紙に煽りコメント付き+広告を除いた2ページ目だか3ページ目の見開きカラー)「作者は出版社から金を貰ってる」や「雑誌向けに専用版を作ってる」などと嫌儲の方々に根拠の無い憶測で叩かれ嫌気がさしてコメントを残して一切の公開を辞めてしまいましたが・・・
    だらだらと中身の無いことを書きましたが、結論としては外部から「適度」なプレッシャーをかけてもらうのが一番な気がします

    余談ですが、過去いくつかのツールやソフトで数回雑誌掲載された中で匿名+無断で載ったその時が一番扱いが大きかったのは微妙に凹みました、ライターの意見も提灯記事なみに好意的な書き方だったのも追い打ちをかける始末・・・
  • 何故趣味のプログラミングをするのでしょうか?
    ・コンピュータを使って「何か」をしたいが、それを達成するためのソフトがない(あるいはあっても高価)。だから自作する。
    ・プログラミングを楽しみたい。
    もちろん両立する幸運な事態もあるとは思いますが...。

    > 新技術の練習として、実験的に同じプログラムを違う言語やライブラリで実装することが多い。
    これは明かに後者の態度ですよね。前者だけの目的には不要ですから。

    個人的な経験から言わせて頂くと、前者の目的があれば完成できます。もちろん「自分にとっては使いやすい」という意味だけで他の人にとっては「謎の仕様」のソフトとなる可能性は大ですが。私の場合、誰にも公開していない「自分にとっては使える」という意味で「完成」したソフトが何本もあり、時折バージョンアップもしています。何を以って「完成」というかというのもありますが、完成させるためには「他人に見せる」のが重要ではないこともあります。

    ちなみに、私が完成したことのあるソフトは特定の複数の種類のパズル作成支援ソフトです。自作のパズルに別解がないことを検証したりとか。ある条件を満す問題を検索したりとか。こう言った類のソフトは(詰将棋のような比較的多くの人が触れるパズルを除いては)普通ないので欲しければ完成するまで自作するしかありませんから。他には、アウトラインプロセッサ(アウトラインエディタ?)が欲しくて自作して、結構自分では使えると思うレベルまで行ったのですが、OmniOutlinerの存在を知って開発を辞めました。今ではOmniOutlinerを使ってます。

    長々と書きましたが、「欲しいから作る」のか「作りたいから作る」のか、それが問題だと思います。
    --
    Best regards, でぃーすけ
    • by Anonymous Coward

      >長々と書きましたが、「欲しいから作る」のか「作りたいから作る」のか、それが問題だと思います。

      結論は頭に持ってきてください。

      長々と文章を書いている間に、
      ・書くべき事を忘れる
      ・結論を見失う
      ・他にレスを付けたいコメントを見つけてしまう

      などのプロジェクト完遂の阻害要因が多く発生します。
      結論だけ付けて書き始めればあとは何とでも締められますから。

  • by grep (21372) on 2009年08月23日 1時07分 (#1627407) 日記

    私の場合以下の3つに気をつけてプロジェクトをはじめました。
    割とうまく言ってる気がしてます。

    ブログに作業状況を書くこと。
    自分にとって必要なものを作ること。
    完成が遅れたとしても、時代遅れにならないものを作ること。

  • by duenmynoth (34577) on 2009年08月23日 7時24分 (#1627449) 日記
    他の人も書いていますが、
    最初からきちんと仕上がらない事を前提にしている時点で「既に無理」だと思います

    「2chで宣言」するのはまあ効果的かもしれませんが、
    それは運よく?話題になった時の話ですよね
    でもまあやらないよりはマシなので、
    ・実名もしくはそれに近い名前で、当然トリップ付きで
    ・何年何月何日までにどういう機能を仕上げる
    最低でもこの2点を明確に宣言すればいいと思います
    要は「自分を追い込む」事ですね

    #ドラクエやFFだって延期しまくるんだから、期限の無い仕事なんて永久に終わりませんよ
  • by Anonymous Coward on 2009年08月22日 17時59分 (#1627277)
    本当に欲しいもの(完成予定品)ならきちんと作りますって。
    そうでないのなら欲しいものじゃないってだけのこと。

    つまり、そんなに欲しくないものなのだから、仕上げる必要なんてない。
    ただ、経験した情報はその都度きちんとまとめておくと後から参照するのに便利。それは言える。
    • by Anonymous Coward

      アイデアの段階でつまらないので現実化するに従い興味が無くなる。
      既存のモノでは満たせない(not= 高度)要素が1つ位は入っていないとモチベーションなど続く訳がない。

      • by Anonymous Coward

        つまりそれは本当に欲しいものではなく、漠然としたもの。
        それだけのことだ。

  • by Anonymous Coward on 2009年08月22日 18時23分 (#1627285)

    楽しくデスマーチを続けさせてよ。

  • by Anonymous Coward on 2009年08月22日 19時56分 (#1627317)
    そのような状況になるのであれば、
    おそらくそのソフトは自分にとって真に必要なものではない。
    況や他の人をや。

    そもそも「カッコいい機能」とか言ってる時点で終わっている。
    そういったものは利便ではなく見栄を提供するものだからだ。
    • by Anonymous Coward
      後出しの結果論なら何とでも言える。
      「真に必要なもの」かどうか事前に知る方法を書いてくれたら生産的なんだけど。
      • by Anonymous Coward
        「ご自分の胸に聞かれてはいかがですか」

        必要かどうかなんて当人にしかわからない。
        昔はともかく近頃は趣味でやってるものなのに周りの目を気にする手合いが多い。
        自分のためにやっているはずなのに、なぜか一般へ公開することが前提になっている。

        それは妙な下心があるからだ。
        そんなものが先行していたらうまく行かなくなるのも無理はあるまい。
        • by Anonymous Coward

          >妙な下心があるから

          違うな。というかそういう面も有るがそういう面に限るものではない。

          悟りの化け物って民話を知らない?
          人間は「自分がしたいことすらナカナカ判らない」生き物なんだよ?

          今まで自分についてソウいうことを感じたことが無いのだとしたら、
          むしろ今までの自分(のやりかた)が「枠に収めるようにコジンマリ」していたことの証拠だ。
          それは人としてはちょっと悲しい状態だよ。

          >ご自分の胸に聞かれては

          今の自分に聞いても無駄さ。
          3日後の自分は他人っていうだろ?
          3日後の自分はまた新たな答えを持っているものさ。
          もちろん4日後もまた違う答え。

  • by Anonymous Coward on 2009年08月22日 20時00分 (#1627320)

    才能がないやつはそういうところで迷わない
    生まれ持った差だからあきらめれ

  • by Anonymous Coward on 2009年08月22日 21時29分 (#1627344)
    どうしてもいろんなところに目移りするから
    明確なゴールと期限を定めるしかないんじゃないかな
    マイルストーンでもいい
  • by Anonymous Coward on 2009年08月22日 21時36分 (#1627347)
    逆に言えば、時間内で完成しない作業はしないこと。
    その都度成果が上がっていれば達成感が味わえますし、
    そのぶんモチベーションも維持できます。
    半端なところで中断していると、その時点でなに考えてたか忘れますし、
    いつまでも形が見えてこないと、そのうち飽きてしまいます。
    大きい作業は、ゴールを分割していきます。
    私の場合、最初の立ち上げだけは時間を作ってとにかくなにか動くところまで一気にやってしまいます。
    あとはちょっとずつ取れる時間の分だけ拡張してますね。
    • by Anonymous Coward

      年末年始、ゴールデンウィークがチャンスですね。

      # プライベートでプログラムを組むなんて言うとバカじゃね?って顔する奴ばかりだなあ・・・はぁ

  • by Anonymous Coward on 2009年08月22日 22時29分 (#1627366)
    もうすぐ2chでスレ立てするつもりです。
    これで後には引けない。
  • by Anonymous Coward on 2009年08月22日 22時31分 (#1627367)

    その処方箋みたいなことをしたら、「仕事みたいにつまらなく」なるのがオチじゃん。
    忌避するに限るね。

    アピールしたい機能以外なんていう退屈なもの、作りたくなくて当然じゃん。そのせいで実用性が下がったとしても「これはコンセプトモデルだ」と言えば済むこと。「このコンセプトを披露したいのだよ!」とね。
    こういうチマチマした悩み方をするのは日本人ばかりであってラテン系は悩まないのかと思っていたが、案外世界はアレだな。

    完成や品質については、それこそ「こまめにリリース」でいいじゃん。今日満足してなければ今晩書き足して明日満足すればいいんだよ。それでもダメならそのサイクルを毎日繰り返せばいいんだよ。
    なお、この件についてもうちょっと言い添えるならば、
    自分と他人の両方のタメにも、公開は単なるファイルアーカイブじゃなく、バージョン管理リポジトリ単位での公開とするほうがお洒落だぞ、と言いたい。

    >最小限の機能セットを定義し

    その定義という行為じたいが自分の快楽行動に直結してるなら、しても構わない(というか、しろ)。そうでないなら、そんなもん無視すべきだ。

    そうでなければそれはもう趣味ではない。ただの苦役だ。

    たとえば、オブジェクト指向設計(分析)は、多くの人にとってはビジネスライクな苦役でしかないようだが、俺個人にとっては「趣味」なので、趣味でもヤル。むしろ「このモデルいかすだろ!」とか一人でニヤニヤしながら考えたOOモデルを披露したいがために実装を作る節すらある。それで出来上がるものはいわゆる綺麗なクラス階層を持つOOフレームワークとかになる。

    いっぽうネットワーク関係やWeb関係は全く趣味から外れるので、趣味プロでは一切やらない。

    #札幌のRuby逆引き本レシピ本紹介イベントにいってきたのでAC
    #ネットワーク関係のライブラリは、それを(趣味で)作ったかたがたのをありがたく使わせて頂くこととします。

    >実験はほどほどにする

    よくわからないな。
    趣味は人それぞれといえばそれまでなんだが、俺の感覚だと、
    実験が快楽行動になって「いない」人がプログラムつくりを趣味と呼べるんだろうか?と
    疑問に思ってしまう。

typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...