Подтвердить что ты не робот

Как думает программист?

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

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

Какие общие рекомендации, советы и умственные предположения вы находите полезными при решении проблем?

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

4b9b3361

Ответ 1

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

Получить общую картину:

  • Какое приложение это (веб, рабочий стол,...)?
  • Как это многоуровневое (автономное, клиент-сервер, n-уровень,...)?
  • Что такое назначение приложения? Что он должен делать?
  • Для чего создано приложение?

Посмотрите, как это работает:

  • Какой язык используется (?)?
  • Как структурирован код?
  • Как структурируются данные?

Понимать (или, по крайней мере, пытаться), как было продумано приложение:

  • Продумано ли вообще?
  • Является ли приложение оптимизированным? (Для выступлений? Для удобства чтения?)
  • Готово ли приложение? Или есть место для эволюций?
  • Есть ли признаки нескольких выпусков?
  • и т.д...

1-й и 2-й шаги являются чисто техническими, а третий ДОЛЖЕН быть как можно более нетехническим... это больше о психологии и понимании того, как приложение было построено. Это, очевидно, требует опыта, но до тех пор, как вы думаете, достаточно трудно и не тратить свое время мозга с техническими деталями, то вы будете в конечном итоге получить его.

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

Ответ 2

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

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

Ответ 3

Люди, как известно, плохо разбираются в собственных процессах мышления, но я дам ему завихрение. Я очень высоко оцениваю визуально-пространственную способность в тестах IQ, от средних до высоких для вербальных навыков и умерен для математических навыков (объясняет мой уровень математики уровня A, я полагаю). amd, когда я начинаю разрабатывать программное обеспечение, я думаю с точки зрения форм и связей между ними. Когда дело доходит до описания этих мыслей другим (или разъясняя их для себя), я использую простые блок-схемы или диаграммы объектов, взятые из метода Якобсона-Охотника - НЕ сверх сложного материала, который предлагает UML. Иногда я пишу текстовые описания сложных вещей, в основном как напоминания для себя, но никогда не использую числа или математику.

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

Ответ 4

Я не думаю... Я обрабатываю.

На самом деле это меньше флип, чем кажется. Я всегда разбиваю задачи на свои компоненты, а затем разбиваю их дальше, и это не просто для написания программного обеспечения! Подобно @Mark Pim U, последовательно просматривайте вещи.

Моя жена очень раздражается, когда я ужинаю, потому что я так долго начинаю.

Ответ 5

Разделить и покорить

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

Ответ 6

Это один из редких случаев, на которые я бы ответил: "Это просто работает". Я изучаю вещи, пробираясь сквозь них. У меня нет трюков или устройств, которые мне помогут. Понадобился мне время, чтобы изучить PHP, но после этого Javascript был намного проще. Когда вы решаете одну вещь, следующие предметы становятся кумулятивно - проще.

Ответ 7

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

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

Ответ 8

Подобно Джонатану Сэмпсону - это просто работает.

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

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

Ответ 9

Лично я вижу код в своей голове, а не текстовым (например, Neil Butterworth) - это немного сложно описать, поскольку (цитируя STIV) "нет общей системы отсчета".

Ответ 10

Моим основным навыком является выявление сходства между моделями или системами, о которых я уже знаю, и о задаче. Связи между некоторыми из них могут показаться довольно абстрактными; ключ должен определить соединения. Это приводит к абстрагированию общих закономерностей и подходов, которые широко применимы. В связи с этим самое важное, что я узнал об алгоритмах, было то, что проблема никогда не возникает с помощью умного алгоритма для решения X. Это модельная проблема X такая, что ее можно решить с помощью существующего интеллектуального алгоритма Y '.