Як я можу покращити свою здатність вирішувати проблеми?


50

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

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


3
Дві корисні книги, згадані в Code Complete, - це концептуальна блокада Джеймса Адамса та " Бічне мислення " Едварда Де Боно.
mctylr

1
А-а! Я забув опублікувати сюди ще, коли на це було лише кілька відповідей.
Марк C

Відповіді:


25

Кілька методів, які можуть або не спрацюють:

  • Подивіться на існуючі рішення загальних проблем, наприклад, шаблони дизайну. Можливо, ви знайдете щось подібне, яке хоча б частково нагадує вашу проблему. Шукайте в Інтернеті.
  • Дійте так, ніби проблема вже вирішена, і простежте за подальшим рішенням. Наприклад, замість того, щоб розробити API для класу, просто напишіть код, який використовує клас, з викликами методів, як вам хотілося б, а потім реалізуйте цей API.
  • Займіться чимось іншим, наприклад, перейдіть в мережу або пограйте в пасьянс і чекайте, коли натхнення стане.
  • Подумайте про людину, яка вам найбільше подобається, і зробіть вигляд, що хочете вразити її своїми навичками вирішення проблем. Що було б надзвичайно вражаючим рішенням?
  • Перевірте проблему на наявність суперечливих чи суперечливих вимог та уточнюйте, що вони є та який компроміс можна зробити. Часто, коли такі конфлікти існують, але ви цього не знаєте, ви схильні відмовлятися одне можливе рішення за іншим, оскільки ви не можете ідеально задовольнити всі вимоги.
  • Якщо у вас вже є можливе рішення, але він відчуває себе "брудним" (копіювати-вставляти, глобальні змінні, код спагетті і т. Д.), Будь-ласка, скористайтеся ним і зробіть його краще після цього

Останній пункт відмінний. Іноді для вирішення проблеми є просто змусити її працювати в більшості випадків, а потім побачити, де його потрібно вдосконалити.
JeffO

4
Однак майте на увазі, що кількість "я виправлю це пізніше", яка переходить у "я це виправила", є (принаймні, на мій досвід) частково невеликою.
Гарет

3
Гарет: Правда, але ідея полягає не в тому, щоб зробити це краще наступного тижня, наступного місяця чи коли завгодно, а одразу після того, як його запрацюють. Він призначений як метод зламати жорсткі горіхи.
користувач281377

3
Я не переглядаю мережу як спосіб очікування натхнення. Вам потрібні простої мозкових циклів, щоб отримати натхнення, а серфінг по мережі - це спосіб витратити ці простої мозкових циклів. Натомість ходіть по магазинах, гуляйте чи катайтеся на велосипеді, прибирайте квартиру - робіть щось, що не потребує великих сил мозку. Натхнення прийде швидше за цих обставин.
Кен Блум

1
Geek: я знаю, що №4 звучить трохи парадоксально, але іноді це справді працює для мене; особливо в ситуаціях, коли представляється можливим більше одного підходу, а проблема полягає у виборі одного з цих підходів. # 6 означає не бути занадто обмеженим звичними донями в нашій професії. Іноді у нас є інтерналізовані правила на кшталт "уникати глобальних змінних" до того, що ми підсвідомо відкидаємо кожне рішення, яке використовує таку застарілу техніку.
користувач281377

20

Використовуйте R-режим або L-режим, якщо потрібно

R-режим - це творчий, невербальний підхід, який ми зазвичай асоціюємо з підсвідомим. L-режим - це лінійний, логічний, словесний підхід, пов'язаний з вашим "внутрішнім голосом".

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

Як отримати доступ до R-режиму мислення

Є багато способів, але, можливо, спробуйте метод Пуанкаре (названий на честь відомого математика).

Запишіть усе, що знаєте про проблему. Негайно вирішіть усі легкі його аспекти (якщо такі є). Виберіть один елемент із списку «важких проблем», а потім вирушайте на прогулянку, де вас не турбують і не відволікають.

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

Промийте і повторіть, поки всі проблеми не зрозуміють. Тоді починайте вивчати розуміння.

Рекомендація книги

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


4
Прагматичне мислення та навчання було чудовим
Бред Купіт

Ref: drawright.com/theory.htm (що таке R-режим і L-режим)
mctylr

17

Запитайте когось іншого ...

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

Часто ви будете це робити, як ви словесно.

Іноді інша людина задасть запитання або вкаже деталі, які розблокують ментальний заплив.

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

І якщо все інше не вдасться, то, можливо, вони зможуть показати вам техніку, яку ви б і не думали використовувати.


Запитувати інших або формувати навчальні групи - відмінний спосіб вчитися.
Гері Роу

Я роблю те саме, просто щоб отримати від мене ідею, і це один з найкращих способів.
Viswa

Ця методика відома як Rubber Ducking, відмінна стаття про неї в кодуванні жахів codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki також корисна en.wikipedia.org/wiki/Rubber_duck_debugging
шпиці

9

Насправді моя коротка відповідь - «вирішення більшої кількості проблем». Але справа в тому: дійсно концентруйтеся на проблемах і не здайтеся. Не звертайтеся за допомогою до StackOverflow чи будь-якого іншого. (Читання StackOverflow нормально, звичайно!) Намагайтеся наполегливо, поки не отримаєте майже працюючого рішення, тоді ви майже не досягли своєї мети. І продовжуйте, поки не знайдете задоволення.

Для мене вирішення проблем - це дві речі:

  • стратегія вирішення проблем
  • стійкість і розчарування

Точка 2 є дуже важливою на мою думку, тому що вона змушує вас змінити своє мислення, чим довше ви стикаєтесь з проблемою. Це також дозволяє витратити більше часу на вирішення проблем, що дозволяє ще більше вдосконалити свої навички. ;-)

До речі, рекомендую прочитати Едварда де Боно. Хоча я здобував свої навички вирішення проблем, головним чином вивчаючи фізику, його написання справді цікаве.

Ну і мій інструментарій щодо вирішення проблем:

  • довільно спробуйте щось
  • читати випадкові статті / блоги / повідомлення про тему, яка мене хвилює (або тісно пов’язану тему)
  • зробити приємний малюнок
  • розділити проблему на кілька, але простіші проблеми
  • робити щось інше
  • Google щось пов’язане з проблемою
  • поговорити з іншими про проблему
  • скласти список TODO
  • запишіть відомості про вплив проблеми, щоб ви могли легше знаходити шаблони

Зверніть увагу, що більшість цих засобів можна застосовувати рекурсивно.

І мій алгоритм такий:

  1. Який інструмент мого інструментарію з вирішення проблем має найбільше значення на даний момент?
  2. Проблема не вирішена? Продовжуйте з 1. ;-)

Крок 1. - важке рішення, але ви приймаєте кращі рішення, чим більше практикуєте.

О, і я майже забуваю найважливіший інгредієнт:

Подумайте позитивно про весь процес. Не думайте, "я сподіваюся, що XYZ зараз вирішить проблему". Скоріше подумайте: "Якщо XYZ не працює, то я знаю, що YZX не ​​може бути джерелом проблеми, і я перевірю, чи працює ZYX". Вирішення проблем може бути цікавим часом, зокрема, якщо ваш процес пошуку проблеми закінчується елегантним та інформативним.


Я шукав на цій сторінці слово "Фізика", щоб перевірити, чи вже хтось про це писав. Математика - інша.
Марк C

Цінність вивчення фізики щодо вашої здатності до вирішення проблем важко переоцінити, я думаю.
Марк C

+1 за мислення позитивне. Якщо ви виявите, що ви працюєте, тоді ваша здатність вирішувати проблеми порушена. Подивіться на проблему, як це дає вам знання.
Гері Роу

7

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

Знайдіть оточуючих людей, які вирішують проблеми, і запитайте їх, як вони це роблять.

Будьте готові помилятися. Ви не покращуєтесь, якщо будете тримати їх у себе і не будете корисними.


+1 за "У школі вони вимагають занадто багато відповідей і недостатньо запитань від учнів." це суто вірно і знадобиться час, щоб навчитися ставити правильні запитання ... перевіряйте, де є стільки прикладів поганого питання
Rémi

4

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

Навчіться розпізнавати та створювати абстракції :

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

Навчіться вирішувати проблеми за допомогою Наукового методу :

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

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

Наукове мислення таким чином може взагалі виходити лише з досвіду наукового досвіду. Іноді рішення проблеми не може сприйматися як лінійний шлях від А до В.

Словом, вивчайте інформатику, вивчайте інші наукові галузі, вивчайте функціональне програмування. Це допоможе вам думати як учений і мислити поза межами.


Саме так. Розбийте великі проблеми на менші проблеми.
Білл Мішель

3

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

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


3

Я думаю, що ти шукаєш евристику інформатики.

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

Як ви здобуваєте ці знання? Належний ступінь CS - це гарне місце для початку… Не інженерія програмного забезпечення чи інформаційні системи, але ті речі, на які більшість студентів не поступають, нарікають на „непрактичність”.

Ви можете зробити це самостійно, але це, мабуть, буде складніше. Я б почав з цих двох курсів:

Вступ до алгоритмів

Чудові ідеї теоретичного КС


2

Мої відповіді стосуються конкретно кодування, але можуть застосовуватися до будь-якого.

  1. Відійдіть від клавіатури. Поговоріть на прогулянці, побігайте, поговоріть з колегою за кавою
  2. Станьте на 10 років старше! Мій досвід надзвичайно допоміг мені.
  3. Використовуйте Бінарний котлет. Розділіть проблему на дві і звужте проблему: повторіть.
  4. Пам’ятайте Шерлока Холмса: Коли ви усунули можливе, все, що залишається (як би не було дивно), є відповіддю
  5. Перевірте свої тестові дані. Більше половини моїх справді складних проблем були викликані несправними даними, а не несправним кодом або алгоритмами.

1

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


1

Є велике питання щодо цього.

Моя відповідь:

Найкращий спосіб вдосконалитись - це практикувати!

Підпишіться на RSS-канал за адресою: http://www.mensa.org.uk/puzzles/ та знайдіть час, щоб заповнити їх, як вони з’являться.

Календаря настільних головоломки на день (наприклад, http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) - це добре Ідея теж, тому що вона надасть вам регулярні, кусаються і різноманітні проблеми для вирішення.

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

Редагувати: Також перевірте: http://www.mindtools.com/pages/main/newMN_TMC.htm, щоб отримати поради щодо вирішення проблем.


1

Грати в шахи

Гра в шахи - відмінний тренер для вирішення проблем програмування. Прошарки проблем і логічні дерева дуже притаманні. Це також допомагає задуматися заздалегідь і планувати перед тим, як спуститися на неоптимальний шлях і витратити час.

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

Шахи демонструють, як навчання та практика ведуть до міцного вдосконалення дуже лінійно. Це справедливо і при вирішенні програмних проблем.

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


Я виявив свій розум загостреним регулярно граючи в шахи.
Пол Натан

1

Я нещодавно вирішував проблеми в Project Euler . Проблеми мають різну складність. Зазвичай рішення не вимагають великої кількості коду, але вам доведеться враховувати багато факторів, таких як час роботи вашого алгоритму. Ви можете використовувати будь-яку мову, яка вам подобається, як тільки ви вводите відповідь. Існує хороша написання оптимального рішення для багатьох проблем, і багато дискусій щодо кожної проблеми. Постарайтеся вирішити одну проблему щодня, і ви будете вражені, наскільки покращиться вирішення та аналіз ваших проблем. Щоб отримати додатковий кредит, спробуйте вирішити ту саму проблему багатьма мовами, як, наприклад, процедура процедури (можливо, C ++), мова сценаріїв (наприклад, python) та функціональна мова (наприклад, F #).


1

Я походжу з наукового походження, тому, коли я дивлюся на проблему, я схильний використовувати тактику наукового методу . Мені особливо подобається встановлювати "експерименти" на основі гіпотез і використовувати "елементи керування", тому я буду щось будувати, а потім змінювати / додавати лише 1 предмет про це і бачити, що є результатом тієї зміни / доповнення і якщо я " я не отримаю потрібного мені результату, я переключу його назад і щось інше поміняю. Це добре працює для усунення несправностей / налагодження коду. Іноді ти отримуєш відповідь, яку шукаєш, але завжди вчиш щось нове, роблячи це, навіть коли не вдається. Мені також подобається вчитися через редукціонізм- взяти щось, що вже існує (завжди добре почати з того, що ти можеш не зрозуміти, але ти знаєш, що працює) і виглядає для мене складним і бачу, чи можу я розбити це на його складові частини та дізнатися, як вони працюють спочатку. Іноді моєму мозку легше впоратись із таким навчанням, а не підходити до проблеми цілісно, ​​і я можу використовувати ці знання для побудови інших подібних складних речей самостійно. Я також рекомендую читати книги з логіки та міркувань, вибираючи твори як класичних, так і сучасних мислителів (починайте з Арістотеля і працюйте по дорозі вгору). Вони можуть дати вам основи основної логіки, яку ви можете використовувати для вирішення проблем у комп’ютерах. І, звичайно, якщо ви не можете вирішити проблему і працюєте над нею деякий час, зробіть перерву в мозку. Розібрання певного аспекту проблеми іноді згубне. Всім потрібні перерви :)


0

Найважча частина вирішення проблем - «Перцептуальне звуження».

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

Спосіб зробити це - бути впевненим - абсолютно впевненим - ви дійсно розумієте проблему. «Розв’язання правильної проблеми» є найважливішою частиною вирішення проблеми.

Іноді вони називають це "мислення поза коробкою". "Коробка" - це вузька точка зору, яка може не містити реальної, фундаментальної проблеми. Мислення поза коробкою - це пошук правильної проблеми, яку потрібно вирішити.

Існує чимало книг про стратегії уникнення звуження, яке йде з передчасним зосередженням на неправильній проблемі.

Переважно хитрість полягає в тому, щоб визначити, яким повинен бути реальний результат. Потім з’ясуйте, що блокує цей бажаний результат.


0

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

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

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


0

Відповідь сама в питанні , виходячи з різними рішеннями. Завжди існує більше ніж одне рішення (наприклад, сортування можна проводити різними способами, наприклад, сортування бульбашок, сортування виділень тощо), вам просто потрібно вибрати спосіб, як це можна зробити (сортування). Спробуйте з наступним разом і так далі ..... І книги для вирішення проблем ..... Ніяких Ви не можете навчитися навичкам вирішення проблем з книг, більше коду ви виконаєте більше знань, які отримаєте. Щасти


0

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

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

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


0

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

З цією метою:

  1. Дізнайтеся свою платформу.
  2. Вивчіть свої інструменти.
  3. Дізнайтеся, які інструменти доступні для вашої платформи, з якими ви ще не стикалися.

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

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


0

На вашу відповідь є дві частини:

а) Методика вирішення фактичної проблеми

б) зробити свій мозок по суті "кращим" у мисленні та вирішенні проблем

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

1) Вивчіть нову мову, справжню мову (наприклад, французька чи китайська могла б стати гарною ставкою в ці дні)

2) Навчіться грати на новому інструменті

3) Робіть щось таке художнє, як фарба, малюйте чи скульптуру

4) Грайте в скребл або робіть кросворди

5) Танцюй так, як ти це маєш на увазі. Ні, я не жартую. Показано, що танці впливають на ваш мозок та мислення

6) Розширити свій досвід, інноваційні рішення виходять із застосування теорії в одній галузі в іншій, тому вивчайте різні сфери та сфери, які вам цікаві

7) Вправи, вправи мають вирішальне значення для поліпшення процесу мислення

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



0

Моєю порадою було б викинути книгу!

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

Можна створити формат зображення. Або веб-сервер. Або схема стиснення. Файлова система. Ядро. Штучний інтелект. Мова програмування. Система комп'ютерного зору.

Щось вам здається цікавим, що є досить складним, про що ви ніколи не дізналися. Не читайте про це: просто стрибайте прямо. Експериментуйте. Робити помилки. Винайдіть колесо.

Не звертайтеся за допомогою. Тримайтеся подалі від навчальних посібників. Тримайтеся подалі від теорії. Не тягніть розчин з полиці.

Чому?

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

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

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

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


0

Вирішення проблем - це не те, чого можна навчити чи навіть навчитися читаючи. Єдиний спосіб покращитись у вирішенні проблем - це вирішити проблеми.

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

Рекомендую підібрати копію Прагматичного мислення та навчання: Переробляйте свій утилізатор від Енді Ханта . Це книга про розуміння того, як ти думаєш, реагуєш і вчишся. Він приносить відповідні теорії з теорії поведінки та інших когнітивних наук. Він спеціально орієнтований на розробників програмного забезпечення, але застосовний до будь-якого працівника знань.


0

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

Потім є більш досконалі методи з прикладами в C ++: вирішення завдань з масивами, покажчиками та динамічною пам'яттю, класами, рекурсією, повторним використанням коду. Я не можу коментувати цю частину, тому що для мене це занадто важко.


-1

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


-1

До побачення, вирішуючи багато проблем!

Ви починаєте з легких проблем і переходите до більш складних проблем, як тільки легкі стають рутиною замість проблем.


-4

Не тримайте себе теорією, займайтеся більше практикою. З практикою приходить досвід.

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