Как я могу улучшить свою способность решать проблемы?

50

Все говорят одно и то же: «настоящий программист знает, как справляться с реальными проблемами». Но они забывают, как они узнали эту способность или где: ее не учат в школах.

Что я могу сделать, чтобы улучшить свою способность решать сложные проблемы программирования? Какие стратегии сработали для вас? Есть ли конкретные области, на которых я должен сосредоточиться, такие как алгоритмы или шаблоны проектирования?

gcc
источник
3
Две полезные книги, упомянутые в Code Complete : « Концептуальный блокбастинг » Джеймса Адамса и « Боковое мышление » Эдварда де Боно.
Mctylr
1
AH! Я забыл опубликовать здесь, когда у него было только несколько ответов.
Марк С

Ответы:

25

Несколько техник, которые могут или не могут работать:

  • Посмотрите на существующие решения общих проблем, например, шаблоны проектирования. Может быть, вы найдете что-то похожее, что хотя бы частично напоминает вашу проблему. Поиск в Интернете.
  • Действуйте так, как если бы проблема уже была решена, и проследите, что следует вернуться к решению. Например, вместо того, чтобы разрабатывать API для класса, просто напишите код, который использует класс, с вызовами методов, как вам бы того хотелось, а затем реализуйте этот API.
  • Сделайте что-нибудь еще, например, путешествуйте по сети или играйте в пасьянс, и ждите вдохновения.
  • Подумайте о человеке, который вам нравится больше всего, и притворитесь, что хотите произвести на нее впечатление своими навыками решения проблем. Что было бы чрезвычайно впечатляющим решением?
  • Проверьте проблему на наличие врожденных противоречий или противоречивых требований и точно укажите, что они из себя представляют, и какой компромисс может быть достигнут. Часто, когда такие конфликты существуют, но вы не знаете, вы склонны отбрасывать одно возможное решение за другим, потому что вы не можете полностью удовлетворить все требования.
  • Если у вас уже есть возможное решение, но оно кажется «грязным» (копирование-вставка, глобальные переменные, код спагетти и т. Д.), Используйте его в любом случае, а потом сделайте его лучше
user281377
источник
Последний пункт отлично. Иногда для решения проблемы нужно просто заставить ее работать в большинстве случаев, а затем посмотреть, где ее нужно улучшить.
JeffO
4
Тем не менее, имейте в виду, что число «Я исправлю это позже», которые превращаются в «Я исправил это», (по крайней мере, по моему опыту) незначительно.
Гарет
3
Гарет: Да, но идея не в том, чтобы сделать его лучше на следующей неделе, в следующем месяце или когда-либо, а сразу после того, как он начал работать. Он предназначен для того, чтобы взломать крепкие орешки.
user281377
3
Я не занимаюсь серфингом в сети как способ ожидания вдохновения. Чтобы вдохновение могло произойти, вам нужны простоя мозговых циклов, а серфинг в сети - это способ тратить эти пустые мозговые циклы. Вместо этого, отправляйтесь за покупками, или прогуляйтесь, или покатайтесь на велосипеде, почистите квартиру - сделайте что-нибудь, что не потребует много сил. При таких обстоятельствах вдохновение придет быстрее.
Кен Блум
1
Компьютерщик: Я знаю, что № 4 звучит немного парадоксально, но иногда это действительно работает для меня; особенно в ситуациях, когда возможно более одного подхода, и проблема заключается в выборе одного из этих подходов. № 6 означает не быть слишком ограниченным обычными запретами в нашей профессии. Иногда мы внедряем правила, такие как «избегать глобальных переменных», до такой степени, что мы неосознанно отвергаем каждое решение, в котором используется такая устаревшая техника.
user281377
20

Используйте R-режим или L-режим мышления, как требуется

R-режим - это творческий невербальный подход, который мы обычно ассоциируем с подсознанием. L-режим - это линейный, логический, словесный подход, связанный с вашим «внутренним голосом».

Если проблема кажется неустранимой, возможно, это потому, что вы пытаетесь решить ее, используя неправильный режим мышления. Для программистов режимом мышления по умолчанию, как правило, является L-режим, поэтому он может помочь вам временно отключить его и перейти в R-режим.

Как получить доступ к R-режиму мышления

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

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

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

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

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

Кроме того, чтение Прагматического мышления и обучения может помочь вам лучше решить проблемы. (Кажется, в последнее время я часто ссылаюсь на эту книгу ...)

Гари Роу
источник
4
Прагматичное мышление и обучение были превосходны
Брэд Купит
Ссылка: drawright.com/theory.htm (что такое R-mode и L-mode)
mctylr
17

Попросите кого-нибудь еще...

Нет, серьезно. Ваш самый большой ресурс может быть человеком, сидящим рядом с вами. Даже не спрашивайте у них ответа на проблему, попросите их сесть рядом с вами и позволить вам объяснить проблему.

Часто вы решаете это, словесно.

Иногда другой человек задаст вопрос или укажет деталь, которая откроет умственный шлюз.

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

И если все остальное не поможет, по крайней мере, они смогут показать вам технику, которую вы даже не подумали бы использовать.

gingerbreadboy
источник
Задавать вопросы другим или создавать учебные группы - отличный способ учиться.
Гэри Роу
Я делаю то же самое, просто чтобы получить от меня представление, и это один из лучших способов.
Viswa
Этот метод известен как Rubber Ducking, отличная статья о кодировании ужасов codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki также полезна en.wikipedia.org/wiki/Rubber_duck_debugging
spats
9

На самом деле мой короткий ответ «решить больше проблем». Но дело в том, чтобы действительно сосредоточиться на проблемах и не сдаваться. Не просите помощи по StackOverflow или что-то еще. (Конечно, чтение StackOverflow - это нормально!) Старайтесь, пока вы не получите почти рабочее решение, тогда вы почти достигли своей цели. И продолжайте, пока не найдете удовлетворительное решение.

Для меня решение проблемы - это две вещи:

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

Пункт 2 действительно важен, на мой взгляд, потому что он заставляет вас изменить свое мышление, чем дольше вы застреваете с проблемой. Это также позволяет вам тратить больше времени на решение проблем, что позволяет еще больше улучшить свои навыки. ;-)

Кстати, я рекомендую вам прочитать Эдварда де Боно. Хотя я приобрел навыки решения проблем, главным образом, изучая физику, его написание действительно интересно.

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

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

Обратите внимание, что большинство из этих инструментов могут применяться рекурсивно.

И мой алгоритм таков:

  1. Какой инструмент из моего набора инструментов для решения проблем наиболее актуален на данный момент?
  2. Проблема не решена? Продолжайте с 1. ;-)

Шаг 1. это сложное решение, но чем больше вы практикуетесь, тем лучше вы принимаете решения.

Ох, и я чуть не забыл самый важный ингредиент:

Подумайте позитивно обо всем процессе. Не думайте: «Я надеюсь, что XYZ теперь решит проблему». Скорее подумайте: «Если XYZ не работает, то я знаю, что YZX не ​​может быть источником проблемы, и я проверю, работает ли ZYX». Решение проблем может быть забавным, в частности, если ваш процесс поиска проблемы оказывается элегантным и информативным.

Филипп
источник
Я искал на этой странице слово «Физика», чтобы узнать, писал ли кто-нибудь об этом. Математика другой.
Марк С
Я думаю, что ценность изучения физики с точки зрения вашей способности решать проблемы трудно переоценить.
Марк С
+1 за позитивное мышление. Если вы начинаете волноваться, ваша способность решать проблемы ухудшается. Посмотрите на проблему, поскольку она дает вам знания.
Гэри Роу
7

Начните работать над умением выявлять проблемы. Иногда вы должны признать, что есть проблема, прежде чем вы сможете ее решить. В школе им требуется слишком много ответов и недостаточно вопросов от учеников.

Найдите людей вокруг вас, которые решают проблемы, и спросите их, как они справляются с этим.

Будьте готовы ошибаться. Вы не улучшитесь, если будете держать их всех при себе, и вам это не поможет.

JeffO
источник
+1 за «В школе им нужно слишком много ответов и недостаточно вопросов от учеников». это правда, и нужно время, чтобы научиться задавать правильные вопросы ... проверяйте везде, где есть много примеров плохих вопросов
Rémi
4

Основным преимуществом компьютерного образования для инженеров-программистов является способность создавать и понимать абстракции. Абстракции используются для инкапсуляции общей функциональности, такой как методы класса String, в узкие, повторно используемые пакеты, которые позволяют нам сосредоточиться на более крупной проблеме.

Научитесь распознавать и создавать абстракции :

Но самое главное, абстракции учат нас, как разбить проблему на более мелкие, более управляемые куски . В сочетании с научным опытом, сочетание этих навыков может создать инженера, способного пробиться сквозь шум и понять суть проблемы.

Научитесь решать проблемы, используя научный метод :

При устранении неполадок в производственном приложении, где существует трудно обнаруживаемая проблема, иногда это помогает фактически разбить приложение дальше (в непроизводственной среде), чтобы исключить несколько переменных, чтобы выделить и устранить одну.

Таким образом, научный метод, извлеченный из взятия всех факультативов по физике и других факультативов по естествознанию, необходимых для получения степени информатики, помогает решить эти проблемы, как если бы мы испытывали плацебо и новое испытание на наркотики на серии добровольцев. Как ученые, которым иногда приходится делать что-то хуже, чтобы сделать это лучше, иногда мы, как инженеры, должны делать то же самое.

Научное мышление таким образом может - в общем случае - исходить только из наличия опыта в науке. Иногда решение проблемы не может быть воспринято как линейный путь от А до Б.

Одним словом, изучайте информатику, изучайте другие научные области, изучайте функциональное программирование. Это поможет вам думать как ученый и мыслить нестандартно.

jmort253
источник
Именно так. Разбейте большие проблемы на более мелкие.
Билл Мичелл
3

Все зависит от того, какие проблемы вы хотите решить, но учиться мыслить логически, если вы уже этого не делаете, - это хорошо.

В общем, и ты будешь ненавидеть меня за это, но практика совершенна. Меня не вытащили из чрева моей матери, зная, как быть хорошим решателем проблем, и никто другой этого не сделал. Вы должны практиковаться и учиться делать вещи самостоятельно. Если вы еще учитесь в школе и у вас нет занятий по программированию / информатике, математика и естественные науки также очень хороши для развития этих навыков.

user7007
источник
3

Я думаю, что вы ищете эвристику информатики.

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

Как вы получаете эти знания? Хорошая степень CS - это хорошее место для начала ... Не инженерия программного обеспечения или информационные системы, но те вещи, которые большинство студентов жалуются на "непрактичность".

Вы можете сделать это самостоятельно, но, вероятно, это будет сложнее. Я бы начал с этих двух курсов:

Введение в алгоритмы

Великие идеи в теоретической CS

красно-грязь
источник
2

Мои ответы относятся конкретно к кодированию, но могут быть применены ко всему.

  1. Отойди от клавиатуры. Поговорите, прогуляйтесь, поговорите с коллегой за чашкой кофе
  2. Стань на 10 лет старше! Мой опыт очень помог мне.
  3. Используйте бинарную отбивную. Разделите проблему на две части и сузьте проблему: повторите.
  4. Помните Шерлока Холмса: когда вы устранили возможное, ответом остается то, что остается (как бы странно это ни было)
  5. Проверьте свои тестовые данные. Более половины моих действительно сложных проблем были вызваны ошибочными данными, а не неисправным кодом или алгоритмами.
Fortyrunner
источник
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 для хороших советов по решению проблем.

оборота StuperUser
источник
1

Играть в шахматы

Игра в шахматы - отличный тренер для решения задач программирования. Слои задач и логические деревья очень хорошо связаны между собой. Это также поможет вам думать заранее и планировать, прежде чем идти по неоптимальному пути и тратить время.

Шахматы также требуют баланса между левым и правым «режимами мышления». Если вы станете слишком аналитичны, вы можете увязнуть в попытках вычислить все, что невозможно. Тем не менее, каждое творческое вдохновение необходимо проверить с помощью расчета, чтобы убедиться, что оно соответствует конкретной реальности ситуации. Тяжелые проблемы такие же.

Шахматы демонстрируют, как учеба и практика приводят к существенному улучшению линейным способом. Это верно и для решения программных проблем.

Игра в шахматы также может помочь вам понять, сколько нужно учиться. Даже если вы программируете (или играете в шахматы) в течение 10 лет, вы еще не гроссмейстер.

Джефф Дэвис
источник
Я обнаружил, что мой ум отточен регулярной игрой в шахматы.
Пол Натан
1

Недавно я решал проблемы в Project Euler . Проблемы разной сложности. Решения обычно не требуют большого количества кода, но вы должны учитывать множество факторов, таких как время выполнения вашего алгоритма. Вы можете использовать любой язык, который вам нравится, так как вы просто вводите ответ. Существует хорошее описание оптимального решения для многих проблем и множество дискуссий по каждой проблеме. Попробуйте решать одну проблему каждый день, и вы будете удивлены, насколько улучшится ваше решение проблем и их анализ. Чтобы получить дополнительную оценку, попробуйте решить одну и ту же проблему во многих языках, таких как процедурный язык (возможно, C ++), язык сценариев (например, python) и функциональный язык (например, F #).

Erik
источник
1

Я родом из науки, поэтому, когда я смотрю на проблему, я склонен использовать тактику из Научного метода . Мне особенно нравится устраивать «эксперименты» на основе гипотез и использовать «элементы управления», поэтому я создам что-то, а затем изменю / добавлю только одну вещь об этом и посмотрю, каков результат этого одного изменения / дополнения, и если я Я не получаю нужный мне результат, я переключу его обратно и что-то другое. Это хорошо работает для устранения неполадок / отладки кода. Иногда вы получаете ответ, который ищете, но вы всегда узнаете что-то новое, делая это, даже когда терпите неудачу. Мне также нравится учиться через редукционизм- взять что-то, что уже существует (всегда хорошо начать с чего-то, что вы, возможно, не понимаете, но знаете, что это работает) и выглядит для меня сложным, и посмотреть, смогу ли я разбить его на составные части и узнать, как они работают в первую очередь. Иногда моему мозгу легче справляться с таким обучением, чем целостным подходом к проблеме, и я могу сам использовать эти знания для создания других подобных сложных вещей. Я также рекомендую читать книги по логике и рассуждать, выбирая работы как классических, так и современных мыслителей (начните с Аристотеля и продолжайте свой путь вверх). Они могут дать вам некоторые основы базовой логики, которые вы можете использовать, чтобы помочь в решении проблем на компьютерах. И, конечно же, если вы не можете решить проблему и работали над ней некоторое время, сделайте перерыв в работе мозга. Размышление об определенном аспекте проблемы иногда вредно. Каждому нужны перерывы :)

kelleystar
источник
0

Самая трудная часть решения проблемы - «Сужение восприятия».

Вы выбираете что-то, что кажется вам проблемой, и упрямо идете после этого, пока не устанете и не добьетесь прогресса.

Чтобы сделать это, нужно быть уверенным - абсолютно уверенным - вы действительно понимаете проблему. «Решение правильной проблемы» является наиболее важной частью решения проблемы.

Иногда они называют это «нестандартным мышлением». «Коробка» - это узкая точка зрения, которая может не включать в себя реальную фундаментальную проблему. Мыслить нестандартно - значит искать правильную проблему для решения.

Существует множество книг о стратегиях предотвращения сужения, которое связано с преждевременным фокусом на неправильной проблеме.

Главным образом трюк состоит в том, чтобы определить, каким должен быть реальный результат. Затем выясните, что блокирует этот желаемый результат.

С. Лотт
источник
0

Честно говоря, я думаю, что все люди разные, поэтому у каждого есть пути к лучшему решению проблем. Вы можете учиться на опыте других людей, но в конце концов вы должны проложить свой собственный путь. По сути, это обучение чему-то «трудному пути», но в этом случае оно эффективно.

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

Итак, другими словами, я рекомендую вам найти какой-нибудь проект в реальном мире для погружения или плавания. Если вы в настоящее время работаете программистом, найдите проект или спросите его у босса. Если этот сценарий не возможен, найдите кого-то вне работы, возможно, контрактную / внештатную работу или что-то в этом роде. Я решаю проблемы очень хорошо и очень быстро, когда мне нужно, и я сохраняю эти знания из-за интенсивности проекта. Если это не сработает, просто сделайте то, что предлагают все остальные в этой теме :).

hockfan86
источник
0

Ответ сам в вопросе , предлагая различные решения. Всегда существует более одного решения (например, сортировка может быть выполнена разными способами, а именно: сортировка по пузырькам, сортировка по выбору и т. Д.), Вам просто нужно выбрать способ, которым вы можете сделать это (сортировка) эффективно. Попробуй с другим разом в следующий раз и так далее ... И книги для решения проблем ..... Нет Вы не можете выучить навыки решения проблем из книг, больше кода вы будете выполнять больше знаний, которые вы получите. Удачи

рейнджер
источник
0

Программисту легко мысленно атаковать проблему, визуализируя, как решить проблему с помощью своего любимого языка программирования. Как классический плотник, который видит все проблемы как гвозди, когда его любимым инструментом является молоток.

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

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

sharkin
источник
0

При разработке приложений многие из проблем, с которыми мы сталкиваемся, являются либо нашим собственным изобретением, либо изобретением идиота, унаследованного нами от этого испорченного кода. Решение проблемы чаще всего сводится к поиску источника . Часто, как только мы находим, где это происходит, для решения проблемы нужна только компетентность .

С этой целью:

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

Все тренировки мозга в мире бесполезны без информации для мозга. Чтобы решить проблему, вы должны знать, какие возможности есть в первую очередь! Даже тогда работать с хорошей информацией гораздо быстрее, чем просто с описанием проблемы.

Я мог бы размышлять, пока коровы возвращаются домой, почему что-то занимает слишком много времени, чтобы выполнить. Но если я скажу «давайте сначала получим некоторые данные», я мог бы увидеть, что выдается много исключений, и понять, что вместо этого я мог бы изменить это на выражение if. Не зная, как собирать информацию, зная, что на моей платформе исключения занимают немало времени, и что есть способ проверить, прежде чем пытаться быстрее, я бы никогда не решил проблему.

MIA
источник
0

Ваш ответ состоит из двух частей:

а) Техника для решения актуальных проблем

б) сделать свой мозг «лучше» в мышлении и решении проблем

Там всегда было несколько хороших ответов по технике (предположим, вы знаете проблему и т. Д.), Поэтому я не собираюсь освещать это так много. Что касается тренировки вашего мозга, есть несколько вещей, которые вы можете сделать, чтобы пересечь эти синапсы и построить больше взаимосвязей

1) Изучите новый язык, настоящий язык (например, французский или китайский может быть хорошим выбором в наши дни)

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

3) Сделайте что-нибудь художественное, например, рисовать или рисовать

4) Играть в скрэббл или делать кроссворды

5) Танцуй как хочешь. Нет, я не шучу. Танцы оказывают влияние на ваш мозг и мышление

6) Расширьте свой опыт, инновационные решения пришли из применения теории в одной области в другой, поэтому изучайте различные области и области, которые вам интересны

7) Физические упражнения, физические упражнения крайне важны для улучшения процесса мышления

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


Homde
источник
0

Мой совет - выкинуть книгу!

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

Вы могли бы разработать формат изображения. Или веб-сервер. Или схема сжатия. Файловая система. Ядро. Искусственный интеллект. Язык программирования. Система компьютерного зрения.

То, что вы находите интересным, достаточно сложным и о котором вы никогда не узнали. Не читайте об этом: просто прыгайте прямо. Эксперимент. Делать ошибки. Изобретай колесо.

Не проси о помощи. Держитесь подальше от учебников. Держись подальше от теории. Не тяните раствор с полки.

Почему?

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

Сделайте несколько попыток, и как только вы почувствуете себя довольным достигнутым, оставьте это на несколько месяцев. Тогда возвращайся свежим и посмотри, сможешь ли ты найти новую перспективу. После этого пришло время начать читать о проблеме и о том, как ее решили другие (или разговаривать с людьми). На этом этапе вместо того, чтобы говорить себе «да, это имеет смысл», пока вы читаете, вы скажете «да, именно », или «ну, в некоторой степени», или «вау, это умно».

Другими словами, вы будете гораздо более критически относиться к тому, что вы читаете, и вам будет намного легче понимать и запоминать, потому что у вас уже есть большая «ментальная структура», к которой можно прикрепить это. Вы будете чувствовать себя хорошо о тех вещах, которые вы открыли самостоятельно, и вы уйдете с кучей новых знаний.

Не пытайтесь сделать ваше решение идеальным. Просто докажите себе, что вы можете решить проблему. Примите подход «с уверенностью», и если вы чувствуете, что проблема пугает вас, помните, что человек, который первым решил ее, вероятно, знал о ней столько же, сколько и вы (на самом деле, они не знали, что у нее есть решение!).

Artelius
источник
0

Решение проблем - это не то, чему можно научить или даже научиться чтению. Единственный способ стать лучше в решении проблем - это решать проблемы.

Существуют различные методы и методологии решения проблем, о которых вы можете прочитать, и вы можете прочитать об инструментах и ​​технологиях, которые можно использовать для решения проблем в определенной области. Если вы не будете постоянно думать о проблемах, пытаться найти решения (придумать несколько решений для каждой проблемы и сравнить их друг с другом), а затем сравнить свои решения с решениями, разработанными другими, вы не добьетесь успеха в решении проблемы. решения.

Я рекомендую взять копию « Прагматического мышления и обучения: рефакторинг вашей посуды» Энди Ханта . Это книга о понимании того, как вы думаете, реагируете и учитесь. Он вводит соответствующие теории из теории поведения и других когнитивных наук. Он специально предназначен для разработчиков программного обеспечения, но применим к любому специалисту по знаниям.

Томас Оуэнс
источник
0

Для новичков в программировании, как я, я рекомендую книгу «Думай как программист». В первой главе рассматриваются такие методы решения проблем, как повторение и разделение проблемы, начиная с того, что вы знаете, сокращение, аналогии и эксперименты.

Затем есть более продвинутые методы с примерами на C ++: решение проблем с массивами, указателями и динамической памятью, классы, рекурсия, повторное использование кода. Я не могу комментировать эту часть, потому что это слишком сложно для меня.

Григорий Красуцкий
источник
-1

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

Corv1nus
источник
-1

Пока решаем много проблем!

вы начинаете с простых проблем и переходите к более сложным, когда легкие становятся рутиной, а не проблемами.

Демьян Касье
источник
-4

Не придерживайтесь теории, делайте больше практики. С практикой приходит опыт.

Amir Rezaei
источник