何かをデザインした後に、実際にコードを書くように動機付けする[終了]


27

それは私だけに起こるのですか、それともあなたにもおなじみですか?

これは次のようなものです。何かを作成する必要があります。モジュール、機能、アプリケーション全体などです。それはあなたが前にやったことのない興味深いものです、それは挑戦的です。

だから、あなたはあなたがそれをどのようにしようとしているのか考え始めます。いくつかのスケッチを描きます。いくつかのプロトタイプを作成して、アイデアをテストします。完全なビューを得るために、さまざまなピースをまとめています。

あなたは最終的に、あなたが好きなデザイン、シンプルで、誰にとっても明確で、メンテナンスが簡単なものになります...あなたはそれに名前を付けます。すべての拠点をカバーし、すべてを考えました。このクラスとそのファイル、およびそのデータベーススキーマを作成することを知っています。ここでこれを設定し、そこにこの他のものを適応させます。

しかし、今では、すべてが解決した後、あなたは座って実際にそのためのコードを書く必要があります。そしてもう挑戦していません。コードの記述は「形式的」であり、完了したばかりの内容を繰り返したように見えます。

私の以前の仕事では、他の誰かが私の仕様に基づいてコーディングを行っていたため、時々それをやめましたが、私の新しいギグでは、プロセス全体を担当しているので、私もこれをしなければなりませんそれ)。

しかし、仕事の後、自宅で仕事をしているペットプロジェクトがあり、私だけがいて、誰もそれをするためにお金を払っていません。私は創造的な仕事をし、それを書き留める時が来たとき、私はそれのように感じません(ウェブを少しブラウズして、P.SESOなどの新機能を見てみましょう)。

私は次の挑戦的なものに移りたい、そして次の、そして次の...

これはあなたにも起こりますか?どのように対処しますか?

どのようにして自分自身を説得して、おかしなコードを書くのですか?

私は答えを取ります。


あなたのプロジェクトのサイズについてのあなたの見積もりは何ですか?あなたの目標は何ですか?プロジェクトが成功した場合、誰がプロジェクトの恩恵を受けるでしょうか?どんなメリットがありますか?
rwong

2
@rwong:私の主な目標は私の知識を広げることです。私は、自己改善を目的として、さまざまなアイデア、テクニック、ライブラリなどを使用して個人的なプロジェクトを試しています。しかし、関連のないプロトタイプの単なるマングルではなく、実際のユースケースシナリオで何かを構築したかったのです。

1
設計するだけでコーディングしない場合、設計が機能するかどうかをどのように知ることができますか?コードは、「設計」の実行可能性を検証または反証します。別の言い方をすれば、あいまいな手を振って「設計」するのは簡単ですが、実際に実装するのは通常、膨大な量の作業です。時にはイライラすることもあれば、退屈になることもありますが、最終的には少なくとも私にとってはやりがいがあります。
ケビン

私は3年以上前にこれに答えましたが、あなたの質問を読み直しているとき、これがADHDの兆候ではないかと思います(たまたま持っている)。また、あなたの質問が説明するものと格闘します、そして、私が答えたことは私を少し助けますが、それはまだ非常に難しいです。ラッセル・バークリーがその理由を非常によく説明しています。youtu.be
マーク・フリードマン14

回答:


6

実装するのではなく設計することが課題である場合、別の動機付け要素が必要になる可能性があります。

ペットプロジェクト(仕事用ではない)の場合、実際にそれが生き生きとするのを楽しみにしています。そのため、デザインだけでは十分ではありません。あなた自身のペットプロジェクトを考え出すとき、目標は何ですか?使用する必要があるものですか?もしそうなら、それを実装の動機として使用できます。動作することを確認します。あなたがそれから抜け出すために探していた機能を提供するために。

他の人が利用できるようにする予定はありますか?やる気を起こさせる要因は、最終製品の恩恵を受けることです。単にデザインモードにある場合、ユーティリティからユーティリティを取得することはありません。また、マーケティングを計画している場合は、モチベーションを上げる要素として、デザインモードで動いている間は誰もあなたのペットプロジェクトにお金を払わないという事実を使用してください。

自分で仕事をするときは、仕事でできるよりも反復的なアプローチを取ります。何かを生成する前にすべての詳細を心配する必要はありません。それにはもっと時間がかかるかもしれませんが、1)それは私(または、それがどんな形でも存在することさえ知らない人)だけのためです。2)リファクタリングと物事のより良い方法を学ぶサイクルをたくさん費やします。比own的に言えば、私自身のダイムで。

しかし、最終的には、薄い空気から何かが生き返るのを見ることに本当の満足はありませんか?それは私にとってそれが何をするかです。それがあなたのためにそれをしないなら、あなたの動機が最終製品でない限り、私はあなたがなぜペットプロジェクトに全く取り組みたいのか理解していない。設計があなたを刺激するものであり、あなたが仕事でそれをするなら、あなたはすでにあなたが探している満足感を得ているようです。


6

自宅でラピッドプロトタイピングが必要です。

プライベートな個人プロジェクトに同じレベルのプロの厳格さを適用すると、簡単に過剰なエンジニアリングが発生します。

個人プロジェクトに高い基準を設定することは完全に許容できますが、プロジェクトを進行させるのに十分なリソース(毎日の8時間の作業に加えてコーディング時間)がない可能性があることを理解する必要があります。

ペットプロジェクトで最も重要な目標は何ですか?あなたの洞察の一つの有用性を証明するには?この場合、概念実証プロジェクトになるまでプロジェクトをトリミングします。次に、ラピッドプロトタイピングを使用して、より少ないコーディング時間でより多くのことを達成できるようにします。


5

私だけだと思いますが、逆の問題があります。通常、コードの記述を開始して実際に関連する問題に遭遇する前に、すべての詳細を考えるのは困難です。現実的には、何かをコーディングし始めたとき、私は通常漠然としたデザインしか頭にありません。私の大きな課題は、自分自身にすべての詳細を考えさせ、設計を事前にさせることです。


5
なぜこれが非常に高く投票されたのか、それは主な質問「どうして自分が入り込んで奇妙なコードを書くように説得するのですか?」
dan_waterworth

1
@dan_waterworth:多くの人が答えに関係していると思う。私が後輩だったとき、私も同じことをしました。それ以来、タイピングの段階に進む前に、実際に座って考える方が良いことを(難しい方法で)学びました。

2

私は間違いなくそれに関連することができます。私は遭遇したことのないものに挑戦するのが大好きですが、私がすでに解決したものに取り組むのは難しいです。私がする最大のことは、Xを完成させて機能させるという目標を持って座ってもらうことです。たいていの場合、最初に出たときよりも楽しい時間を過ごして、やりがいがありますが、目標を強制しないと何時間も病気になります。

私はあなたと一緒にいます。これはオフィスでよりも自宅で副業が多いからです。気が散るのか、仕事で焼けるのか、それとも...


2

私は前に自分でそれを経験したので、私は確かにあなたの不満を理解しています。

私はこれが素晴らしいアプローチではないことを知っているので、コミュニティからのいくつかの炎を恐れていますが、サイドプロジェクトの私のアプローチをあなたと共有します。この方法は私にとっては有効であり、中期/長期プロジェクトで使用することに注意してください(私は通常、一度に終了するモチベーションがあるので)小さいものには使用しません。

プロジェクト全体を取得し、それを「パッケージ」に分割します。各パッケージは、相互に頻繁に対話する部分で構成されています。次に、各パッケージを小さな部分に分割し(最大数時間と考えてください)、設計およびコーディングできます。

理想的には、1日のサイドプロジェクトに割り当てられた時間に各作品を完成させることができますが、それは必須ではありません(人によって異なります)。

個人的には、各ピースの推定時間枠を設定していません。その推定に失敗すると失望し、やる気がなくなるだけなので、お勧めしません。時間はかかりますが、長くはかかりません。

これで、各小片が、通常の開発プロセス、設計、テスト、実装など、必要なすべての段階をすべて取得します。アイデアは、各ピースに良いキックスタートを与えることですが、まだ完全な仕上げの仕上げではありません。

これは私のモチベーションを維持します。なぜなら、実際の退屈なコーディングを数時間行った後、私はもっとやるべきことがあるということを知っているからです。自分の目標から外れることはせずに、その恐ろしいタスクをやり続けるだけで、すぐに終わって終わります。

すべての部分を終えたら、パッケージを見てください。それがどのように動作するのか、何をしているのか、パッケージ全体をもう一度確認してください。変更と調整が行われると確信しています。今すぐ変更してください。他のすべてのパッケージで作業するときに必要になるため、最も重要な情報を念頭に置いてください。メモも保管してください。彼らは大いに役立ちます。

各パッケージに目を通し、以前に行った他のすべてのことを思い出してください。あなたが書いている新しいコードは、1週間前に書いたものとどのようにやり取りするのでしょうか?すでに書いたものを検索することを恐れないでください。

最後に、すべてのパッケージがなくなったら、通常は数日間放置し、休憩して他のことに集中します。

通常、私は戻ってパッケージの絡み合いを始め、遊び心のあるテストを開始するのにうんざりしています。書くべきコードはそれほど多くなく、目標は近いです。それが私にとって十分な動機です。

これがあなたの努力に役立つことを願っています。


2

私は常に、元の仮定が完全に保持されず、実際の実装を行っている間に収集された経験に基づいて、元の設計の多かれ少なかれを変更する必要があることを常に発見しました。

いくつかのボックスを描いた後、デザインが完全に不可andで完璧であると考えているが、実際に試してみる前に、いくつかのプロジェクト実装の完璧な候補者とみなします。

配送は機能です。遠くまで行かなければ、あなたはただの建築家です。


1
+1全体的に良いことですが、アーキテクトが自分の場所を持っていることの懸念の1つです。
オーブリング

@Orbling:Thorbjørnはアーキテクチャ宇宙飛行士を控えめに思っていました。
rwong

@Orbing、そうかもしれません。あなたが他の人に指示することを自分でできないという事実をどのように表現しますか?

1

問題は間違った目標にあると思います。目標「設計システム」を設定したように見えます。そして、あなたはそれをうまくやって、目標を達成しました。したがって、1つの提案は別の目標「システムを実装する」を設定することですが、それはモチベーションとその方法により関連しています。

私にとってうまくいった方法がもう1つあります。最初の目標を「システムの設計」または「システムの作成」ではなく「特定のユーザーにシステムを提供する」に設定することです。この方法では、ユーザーが何か貴重なものを取得するまで、満足することはありません。そして、あなたはそれを最初からうまくやっています(テストやその他の最新のファンシーなものを含む)。


1

実際に動機付けの問題であることは別として、ソリューションの一部は、設計とコーディングプロセスを組み合わせることで見つけることができると思います。それは私が主にそれを行う方法です。基本的に、考えたときに設計の基本を実装してから、次のステップに進みます。

たとえば、基本クラスを設計した場合は、それらを記述してテストを実行します。次に、基礎となるデータベースを設計し、セットアップしてテストします。次に、データベースにすべてを出し入れするために必要なメソッドと関数を用意しました。基本クラスがすでに用意されているので、テストはより簡単に行われます。そして、ようやくユーザーインターフェイスを設計するようになったときは、いろんなコードのセットが用意されていて、いじってみることができます。

これは、インターフェイスを介してリンクされるブロックで設計することも前提としています。私は教育のためのプログラマーではないので、高価な言葉を知りませんが、あなたは私が何を意味するか知っています。

お役に立てれば。


1

次に、デザインのアイデアを書き留め、それを(ブログで)公開し、問題と他の人に思いついた解決策を説明するために最善を尽くします。

秘::デザインの説明を文芸プログラムとして書く:)次に、興味深い部分(デザインアイデア)を自分で占有しますが、実際に一緒に提供する実際のコードでそれらを正当化します。

そして、リテラシープログラムを新しいアイデアのプレゼンテーションとして他の人に投稿してください!


1

これはささいなことですが、ただ始めてください。おそらく開発環境を開く必要があるので、それを行います。おそらく、デザイン内の各クラスを定義し、それらのメソッドシグネチャを書き出す必要があるでしょう。最も重要なメソッドの実装を開始する必要がありますので、実行してください。

通常、この頃、私は起動に問題があったことを忘れてしまい、ゾーンにいます。

約80%の時間で動作します。残りにはテトリスがあります。


0

それは間違いなくあなただけではありません!私は実際にプロジェクトを先送りしています。

自分以外の誰もあなたをやる気にさせることはできません。

現実的なタイムラインを作成し、各セクションを時間通りに完了するようチャレンジしてください。プロジェクトが設計段階を通過しない場合、プロジェクトに表示するものは何もありません。


0

あなたの質問から判断すると、あなたの問題は、あなたが車輪を再発明しているように見えることです。これらすべてを既に実行した場合、なぜ再度実行する必要があるのですか?あなたのためにそれを行うフレームワークはありませんか?そうでない場合(これはかなりありそうにありませんが)、なぜ書いてみませんか?

プログラミングの重要なタスクは、退屈な作業を繰り返し行うことではなく、一度だけ実行し、適切に実行してから再利用することです。またはそれ以上:一度きちんとそれを既にやった誰かを見つける。


0

私はあなたがどこから来たのかを完全に理解しています。それはあなたが興味を持っている問題です、そして、あなたがそれを理解したら、実装はちょうど働きます。

ソリューションを設計し、他の人に実装してみませんか?


-1

私がやること:

  • 私の前に大きなタイマーを置きます(1時間単位でリバースモードにすることができます)
  • 目標に到達するまで起き続けるように強制します(時にはビールを飲んで、少しのアルコールが役立つことがわかりました)

常に機能するとは限りませんが

PS。私は自宅で仕事をしています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.