Що робити, якщо у мене немає гарних ідей для реалізації функції? [зачинено]


32

Я працюю над власним додатком і я застряг. Мені потрібно реалізувати функцію, але я не можу знайти хорошого підходу до її використання. Я думав про це пару днів, і ніяких добрих думок не прийшло. Пошук в Інтернеті не дав мені натхнення.

Мені потрібно рухатись далі, але я хочу знати, що найкраще:

  • Думайте більше, чекайте більше і продовжуйте шукати найкращий підхід
  • Перестаньте витрачати час і почніть з поганого дизайну, покривши все тестами

Як ти гадаєш? Як я вже говорив, я працюю над власним додатком. У мене немає термінів, але я також хочу закінчити кодування програми як можна швидше.



12
@gnat: Ці інші питання стосуються ситуацій, коли запитуючі вже знають, як чітко реалізувати деякі функції, але можуть захотіти пожертвувати гарним дизайном для того, щоб бути "швидким і брудним". Це питання, однак, описує іншу ситуацію, це стосується вирішення проблем загалом, коли ви взагалі не знайдете кращого сенсу починати, так що це не дублікат IMHO.
Док Браун

зауважте: якщо додаток має успіх, ви ніколи не закінчите його кодування, і функції все одно будуть перероблені. Тож я б пішов з його реалізацією найкращим способом, який зараз можу.
ren

Відповіді:


41

Крім розмови з людьми про це (питання передбачає, що ви не маєте колег по проекту), я часто вважаю хорошим підходом зосередити увагу на тому, що я можу зробити.

Зазвичай є якась частина коду, яку я знаю, що я повинен якось написати. Речі, які я ще не знаю, як написати, замінюються заглушками, які або повертають фіктивні результати, або використовують наближення, яке достатньо добре, щоб перевірити решту.

Це робить вас продуктивними. І до того часу, коли вам потрібно реалізувати відсутні фрагменти, у вас є інтерфейс. І ви написали багато коду, що вирішує проблему, в тій же проблемній області, яка зазвичай допомагає мені генерувати ідеї: ви точно знаєте, що потрібно для виведення та які інші входи доступні, якщо це допоможе вирішити проблему. . Крім того, часто робиться висновок, що відсутній твір не повинен бути настільки всеохоплюючим, як вважалося спочатку.


6
Недоліком написання найризиковішого, найменш зрозумілого коду є те, що ви можете виявити, що вирішити проблему неможливо, або лише вирішити її можна з істотними змінами в архітектурі програми, що призводить до багато марних зусиль.
Річ Сміт

1
Інший недолік цього підходу іноді призводить вас до того, що "я можу вирішити проблему X. Залишилося лише зробити Y". коли насправді Y не здійснен, і справжнє рішення Z.
Брайан

@RichSmith, Брайан: Це трапляється, хоча рідко, якщо ви запитаєте мене. Тоді це допоможе вам краще зрозуміти, чому відсутня частина настільки важка, що покращує ваші оцінки. І я б не пропонував ставити на тижні роботи, засновані на умоглядному та довільному розподілі обов'язків.
jdv-Jan de Vaan

сперечається, чи це, чи ні, це недоліки. чи варто було б витратити свій час, а не вивчати проблему взагалі? або ти сидиш довкола, здогадуючись, що буде працювати? Я думаю, що це найкраща практика писати швидкі прототипи, пробувати речі та швидко провалюватися. це єдиний спосіб точно знати і набути досвіду для майбутніх подібних ситуацій
сара

14

Якщо пошук не вдається, ви завжди можете реалізувати, використовуючи першу (не обов'язково найкращу) ідею, яку ви отримали, а потім перефактуруйте її пізніше, коли знайдете правильний підхід.

Це правильний підхід, оскільки навіть якщо ви знайдете щось, що виглядає як гарна ідея, згодом це може виявитися поганим. Або це може бути добре тоді, але згодом ви знайдете щось набагато краще. Тоді вам все одно доведеться робити рефактор.

Роблячи це, переконайтеся, що спроектуйте та реалізуєте таким чином, щоб це було легко переробити. Якщо ви зробите це правильно, вам доведеться змінити лише проблематичну частину, а не починати з початку.


1
Здається, це передбачається в цій публікації, але я хотів би додати, що дуже важливо, щоб ви писали свій код таким чином, щоб його легко переосмислити.
c_maker

@c_maker Так, звичайно. Інакше немає сенсу переписувати все згодом з нуля. Я додам це до відповіді. спасибі
BЈович

10

А як запитати іншу людину? Наприклад, ви можете описати свою проблему тут, або, якщо це більше стосується впровадження, на stackoverflow.com та запитати ідеї. Іноді це вже допоможе вам, якщо ви почнете записувати проблему, навіть якщо не отримаєте хороших відповідей.


Якщо це проблема інтерфейсу користувача, є також ux.stackexchange.com
Rob Church

якщо ви запитаєте SO, тоді відповіді будуть захищені авторським правом у Creative Commons, і залежно від проекту, цей код може бути непридатним.
smcg

2
Поради можуть бути захищені авторським правом? Напевно автор використовував би це як підручник, а не копіювати / вставляти?
grizwako

@smcg: тема обговорювалася тут: meta.stackexchange.com/questions/12527/… - Але якщо чесно, якщо це справді стає проблемою, я думаю, що можна обійти це шляхом, як запропонував GrizzLy.
Док Браун

@DocBrown IANAL, тому я не можу точно сказати, чи не затримає це, але іноді добре помилитися з боку обережності.
smcg

2

Кілька ідей:

  • Мозковий штурм
    Запишіть кожну дурну ідею (на папері чи дошці). Перекресліть ті, для яких ви впевнені, що не вийде. Продовжуйте писати. Включіть рішення для потенційно пов'язаних з цим реальних проблем. Наприклад, чи змішування фарби, або нанесення цвяха в стіну, або зміна олії вирішують імідж у реальному світі?
  • Зверніться за допомогою до
    Google, попросіть тут, попросіть своїх друзів-потворців тощо.
  • Вирішити споріднену задачу
    Ви не можете вирішити на проблему, але ви можете вирішити набагато простіше один? Або однаково складний, споріднений? Зробити це. Потім внесіть невеликі індивідуальні зміни, щоб наблизити ваше рішення до бажаного рішення.
  • Просто почніть писати ззовні,
    незалежно від того, чи є ваш інтерфейс веб-службою, веб-сторінкою, натурформою, камерою, клавіатурою, монітором чи іншим , є інтерфейс. Напишіть кілька рядків коду / псевдокода, щоб інтерфейс працював. Використовуйте магічні методи, які ще не існують. Рекурсивно робимо те ж саме для кожного неіснуючого магічного методу. Оптимізуйте пізніше.

2

Немає нічого поганого в тому, щоб піти з поганим рішенням. Часто ви просто не знаєте достатньо проблемного домену в той момент часу. Виходячи з поганим рішенням, давайте рухатиметесь далі та дізнаємось більше про проблему. Тоді ви все ще можете повернутися назад та змінити своє перше рішення.


1

Я завжди намагаюся розглядати це з точки зору кінцевого користувача. Дуже легко думати про "класну" ідею як розробника, над яким можна витратити віки, працюючи над тим, що насправді додає дуже мало вашому додатку.

В ідеалі ви хочете скласти всі функції у вашому додатку та визначити їх пріоритетними відповідно до переваг для кінцевого користувача, я особисто використовую MOSCoW , хоча, якщо ви залишаєте метод пріоритетності однаковим у всьому, він може бути простим, як 1 - 5.

Після чого, якщо ви все-таки виявите, що ця функція є невід'ємною частиною вашого додатка, тоді, як люди вже сказали, запитайте! Я не думаю, що я ніколи не стикався з проблемою, яка врешті-решт не була вирішена ні колегою, ні тими приємними людьми на Stackoverflow.


Класно, бо я з Москви :)
користувач21974

Там ти йдеш на знак!
Mrk Fldig

1

Моя думка: ніколи не пишіть код, який просто працює! Реконструювати його в майбутньому має бути дуже важко.

Це дійсно поширений підхід для розробників (і, звичайно, прем'єр-міністрів або начальників). Я чув багато часу: "просто змушуй це працювати" або "я виправлю пізніше" (пізніше, коли ніколи!), Але, я думаю, що якість не те, чого ви не можете отримати в середині проекту.

Моя пропозиція: перестаньте на деякий час думати над своєю проблемою .... зробіть щось інше, і, колись, рішення просто виходить сам.

Btw, просити колегу - це абсолютно чудовий спосіб вирішити свою проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.