Как я могу лучше понять, как решить конкретную проблему? - PullRequest
4 голосов
/ 04 февраля 2009

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

Ответы [ 17 ]

1 голос
/ 05 февраля 2009

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

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

  • Посмотрите на ряд проблем и выяснить, что у них есть в общий . Чем больше общность с которой вы понимаете решение проблемы, чем больше вы Можно применить это к другим проблемам.
  • Попробуйте найти подходы, которые хорошие решения проблем используют для решения проблемы. Но не думайте, что у кого-то есть монополия на решение проблем
  • Если вы читаете книгу Ричарда Фейнмана книг , вы заметите, что он рассматривает много разных маршрутов добраться до своей цели. Не сужайте преждевременный подход
  • Будьте позитивны. Предположим, что вы можете найти решение чего угодно. Ваше состояние ума имеет значение. Наслаждаться процессом решения проблем значительно облегчает
  • Не бейся головой о стену. Если вы этого не сделаете кажется, что прогрессирует с одним подходом, попробуйте другой подход
  • Всегда ищите больше способов решение проблем и больше идей в сам процесс решения проблемы
  • Будь готов работать. Это все еще может занять много усилий, чтобы решить некоторые проблемы
  • Чем больше разных областей обучения вы знаете, тем больше у вас точек зрения. У меня сильный математический фон, и я считаю его очень полезным для многих задач. Физика, музыка или любая другая точка зрения могут быть полезны
1 голос
/ 04 февраля 2009

Решая актуальные проблемы. Практика совершенствует.

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

Это может помочь узнать, какие проблемы вам трудно решить.

1 голос
/ 04 февраля 2009

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

1 голос
/ 04 февраля 2009

Наилучшим способом, вероятно, является изучение формы master , если это возможно. Особенно, если вы можете найти кого-то, кто знаком с проблемами, к которым вы обращаетесь.

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

  • Знание языков (знайте свой язык (и))
  • Парадигмы программирования (императивные, объектные, функциональные)
  • Рамочные знания
  • Алгоритмы
  • Узоры
  • Дата-структуры
  • Методологии (Agile, DDD, BDD,? DD)
  • Инструменты
  • и т.д.

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

1 голос
/ 04 февраля 2009

Мне нравится этот общий метод:

  1. Перечислите возможные решения с их сильными и слабыми сторонами
    (Это подтолкнет вас, чтобы кратко попробовать все из них)
  2. Выберите лучший и создайте на нем свой дизайн
    (Если вы обнаружите какое-либо тяжелое препятствие, пересмотрите другие варианты)
  3. Реализовать

самое главное, на каждом шаге учиться

0 голосов
/ 04 февраля 2009
  1. Практика решения проблем.

  2. Пройдите алгоритм или дискретный курс математики.

0 голосов
/ 04 февраля 2009

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

  1. Класс-Ответственность-Сотрудничество n (CRC) карт Одна карта на класс, детально описывает ответственность класса и с какими другими классами он сотрудничает. Используя карточки, вы можете макетировать свой дизайн для решения и увидеть, где у вас слишком много связей или слишком много ответственности. Они позволяют вам легко обдумать дизайн перед тем, как приступить к написанию кода.

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

  3. UML-диаграммы - особенно схемы взаимодействия Некоторое время я использовал это много. Это действительно помогло увидеть, как все работает вместе под капотом. Я все еще буду неофициально планировать некоторые сложные взаимодействия, чтобы не пропустить ничего важного. Прохождение многих из них действительно помогло мне подумать о том, как взаимодействовали мои объекты, и теперь это своего рода вторая натура - думать с точки зрения взаимодействий.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...