Фон
Чем дольше я работаю над проектом, тем менее понятным он становится. Как будто я не могу больше разделять различные классы / объекты в моей голове. Все начинает смешиваться, и очень сложно снова все разобрать. Я начинаю помещать функции в классы, где они на самом деле не принадлежат, и делаю глупые ошибки, такие как написание кода, который, как я обнаружил, на 100% устарел; В моей голове больше нет четкого отображения. Только когда я сделаю шаг назад на несколько часов (или иногда дней!), Я действительно могу увидеть, что происходит снова, и быть продуктивным.
Я обычно пытаюсь справиться с этим, я настолько увлечен кодированием, что даже на всю жизнь не знаю, чем еще я мог бы заниматься. Это когда вещи могут стать действительно странными, у меня в голове так сильно, что я теряю связь с реальностью (до некоторой степени), потому что различные действия, такие как наливание стакана воды, больше не происходят на осознанном уровне. Это происходит на автопилоте, во время которого почти вся моя сознательная концентрация (это вообще что-то?) Посвящена безграничному бессмысленному решению проблем (попытке отделить элементы кода). Это похоже на проигрышную битву.
Поэтому я недавно прошел тест на IQ (шкала интеллекта взрослых Векслера, я полагаю, что это так), и оказалось, что моя пространственная способность была довольно низкой. Я все еще получил приличный общий балл, чуть выше среднего, так что мне не придется ткать вещи с помощью клюшки, но я немного волнуюсь, что это такой недостаток при написании / разработке компьютерных программ, которые я выиграл ». никогда не сможет сделать это серьезно или профессионально.
Вопрос
Мне очень интересно, что другие люди думают об этом ...
Может ли низкая пространственная склонность быть причиной вышеописанных проблем?
Как программирование зависит от пространственной способности?
Может быть, мне следовало бы больше смотреть в сторону ADD или чего-то подобного, потому что мне поставили диагноз ADD в возрасте 17 лет (5 лет назад), но лекарство, которое я получил, похоже, не повлияло на меня так сильно, что я никогда не принимал это все так серьезно.
Насколько я знаю, люди рождаются с низкими / средними / высокими пространственными способностями, поэтому я думаю, что интересно узнать, являются ли более удачливыми лучше программисты по праву рождения.
источник
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,
Я не психолог, но если я правильно читаю по-английски и понимаю определение среднего, я не совсем понимаю, как это переводится наquite low
... Может быть, вы переосмысливаете это ... :)Ответы:
На самом деле есть некоторые точные данные исследований, в основном собранные за последние 35 лет, и я также испытал несколько подобных явлений, хотя и не на регулярной основе. Смотрите ниже для получения дополнительной информации.
Данные исследований
Кажется, есть некоторая, но незначительная корреляция, основанная на исследованиях, выполненных и обобщенных в следующих работах. Тем не менее, как и в случае с исследованиями, модели исследования различаются в разных исследованиях, и их следует внимательно изучить, чтобы понять, почему результаты представляют различия в выводах.
Изучение психологических предикторов программных достижений [ PDF ] (Эрдоган, Айдын, Кабака, 2008)
К сожалению, этот вопрос расплывчат в деталях. Это указывает на «сильное влияние» «способностей» в целом, но затем указывает только на другие исследования, не давая результатов для каждого теста способностей, поэтому мы не знаем, как распределяются пространственные способности. Это в основном обзор литературы, а не фактические исследования.
Пространственная способность и обучение программированию [ PDF ] (Джонс, 2008)
Предикторы успеха в первом курсе программирования [ PDF ] (Simon, Fincher & al., 2006)
Кто может приобрести навыки программирования? (Шут, 1991)
Способность к латерализации и программированию в полушарии (Gasen, Morecroft, 1990)
Корреляты решения задач в программировании [ PDF ] (Choi-man, 1988)
Интересный ... Хорошая модель исследования и количественные результаты с несколькими исследовательскими группами и учет достоверности факторов исследования. Это дает то, что:
Обучение, исследования и графическое представление программирования (Taylor, Cunniff, Uchiyama, 1986)
Когнитивные требования к обучению компьютерному программированию в групповых и индивидуальных условиях (Webb, 1985)
Когнитивные корреляты задач программирования у начинающих программистов (Irons, 1982)
Исследование способностей к обучению: отчет о проделанной работе [ PDF ] (RE Snow, 1976)
Возьмите это с щепоткой соли: некоторые из них относительно устаревшие, тесты IQ, возможно, изменились с тех пор. Я не провел тщательного поиска, чтобы найти цитаты каждой статьи, чтобы увидеть, были ли они подтверждены или опровергнуты позже.
Некоторые ссылки (особенно [PDF]) могут не работать для вас, если у вас нет доступа к библиотеке, предоставляющей доступ к этому онлайн-контенту.
Личное мнение
Предупреждение и раскрытие: Я НИ психолог NOR невролог, но я изучаю и преподаю программирования для обеих маленьких детей (начиная с 6) и студентов (до 60!).
Изучив вместе с И преподавал студентам в качестве преподавателя университета, в том числе некоторых студентов, страдающих от пространственных проблем (и других с более сильными нарушениями), я должен сказать, что, хотя это могло бы быть (я не отслеживал своих студентов, основываясь на инвалидности, очевидно), что некоторые из них были бы зарегистрированы в нижней части общей кривой, я все еще хорошо помню, что некоторые набрали высокий балл (и даже один, в частности, был главным в классе, по крайней мере, 2 года).
Я хочу сказать, что, хотя это может иметь эффект, и, как показали некоторые из исследований, приведенных выше, оно не учитывает большую часть вашей способности учиться программировать и мыслить как программист. Это несущественно, в том смысле, что оно не остановит вас в обучении, если вы действительно этого хотите, и не помешает вам работать в общем случае, хотя это может (как может быть в вашем случае) сделать его немного сложнее для вас.
Там практически нет предела тому, что и как быстро вы можете научиться .
В конце концов, ни один программист не любит хороший вызов, верно? (Я смотрю на тебя, RSI)
Личный (возможно, не связанный) опыт
Возможно, вы слишком страстны. Сколько часов вы работаете в день и в неделю? Вы делаете регулярные перерывы?
Аналогичный случай?
В какой-то период в моей жизни я работал дни по крайней мере 14 часов каждый день недели в течение всего года, и это стало кульминацией для записи недель в 120 часов работы перед экраном компьютера . Да, это только 48 часов в неделю, чтобы поесть, поспать, поехать на работу и с работы ( совет: избегайте вождения !! ), принять душ и другие жизненно важные функции. В этот конкретный момент я мог в значительной степени заснуть в ударе сердца (хотя обычно у него были проблемы со сном), ноЯ почти всегда продолжал мечтать о коде, и я также внезапно понял бы в душе или даже при ходьбе или беге или выполнении черных заданий, что мой разум вернулся к этому в автопилоте, как вы сказали это сами. К сожалению, я не мог бы волшебным образом решать проблемы во сне; это было бы ближе к тому, что вы, кажется, описываете и испытываете: гигантский водоворот запутанных мыслей, вращающихся в моей голове, который вроде бы (кажется) имеет смысл в более широком масштабе, но не дает четкого выражения какого-либо решения и без особого успеха схватив одну из этих мыслей, чтобы сосредоточиться на ней, разобрать ее и превратить в нечто полезное. И это обычно было довольно утомительно и мучительно.
Релаксация может помочь
Может быть, вам нужно немного успокоиться, расслабиться и меньше работать. Попробуйте найти что-то, что отвлечет вас от мыслей. В то время я заканчивал тем, что часто отказывался от нескольких драгоценных часов сна, вместо этого делая что-то, что действительно остановило бы этот безумный ход мыслей. Это кажется контрпродуктивным, но на самом деле я предпочел сделать несколько вещей, где бы я действительно расслабился, чем больше спать и не отдыхать. В некотором смысле отвлечение нервных батарей и сон для физических батарей.
Выявление триггеров
Если это не ваш случай, то, возможно, есть что-то еще, что вызывает это состояние для вас. Попытайтесь изолировать элементы, которые присутствуют в этих ситуациях, и посмотрите, можете ли вы воспроизвести это условие в других средах, чтобы посмотреть, сможете ли вы найти эти элементы также. Это происходит чаще на работе или дома, и т.д ...
изоляция
Кроме того, вы, возможно, уже слышали и пробовали это, но у меня есть друг с небольшой пространственной нетрудоспособностью, и обычно он, работая на компьютерах, помогает находиться в темной комнате, избегая слишком большого количества сложных видов и окон. открытый (чтобы не отвлекать), и вообще, чтобы все было довольно минималистично (как с точки зрения дизайна и цвета, так и с точки зрения содержания и представления).
Старайтесь также делать регулярные перерывы и освобождать свой разум на короткие промежутки времени каждые 1 или 2 часа, в зависимости от того, что вам больше подходит. Может быть, принять технику Помодоро или что-то подобное (у меня нет исследований по корреляции с этим, но это может быть полезно, чтобы заставить вас делать перерывы).
источник
Эх ... это заслуживает большего, чем комментарий.
Прекратите драться. Вы делаете вещи искажены и делаете ошибки правильно? У вас могут быть некоторые уникальные проблемы, но способ, которым ваш мозг бунтует, является нормальным для любого, кто слишком долго сосредоточен на проблеме. Когда я был моложе, слишком много моего дня было потрачено на размышления на этом очень сознательном уровне, и я не делал себе никаких одолжений. Ваша проблема не в том, что вы недостаточно стараетесь, а в том, что вы не знаете, когда бросить.
В конце концов я научился ценить ценность откладывания вещей, когда понял, что единственный способ заснуть в разумный час - это заставить себя думать абсолютно ни о чем, и был потрясен, обнаружив, что в течение 10 минут или около того Я засыпал, в то время как обычно я думал-думал-думал-думал, по крайней мере, пару часов, прежде чем потерял сознание.
Оттуда мне стало легче учиться распознавать, когда я слишком много думал о проблеме, и просто оставить ее на время. Я был удивлен, обнаружив, насколько это на самом деле помогает вам решить проблему.
Я рекомендую следующее:
Когда в вашей голове что-то искажается, и вы не можете позволить себе сделать перерыв и отправиться на прогулку или что-то в этом роде, попробуйте переключить передачи и какое-то время сосредоточиться на совсем другой части проблемы.
Никогда не пропускайте обед и всегда выходите из офиса. Дай себя, пока не доберешься до двери, чтобы прийти к остановке или просто уронить ее. Когда вы вернетесь к этому, у вас будет все, что стоит держать в голове, и все, что вам не нужно, исчезнет. Чем больше вы обнаруживаете это, тем легче становится.
Регулярно будешь сам ни о чем не думать в течение дня. Даже если это всего лишь минутку, пока вы получаете себе этот стакан воды.
Попробуйте использовать ООП или любой более проблемный архитектурный подход, чтобы думать о меньшем. Кто актеры в вашем коде на самом высоком уровне? У них не должно быть сложных отношений друг с другом. Это позволяет вам сосредоточиться больше на одной части проблемы за раз.
Некоторые принципы кодирования, которые могут помочь
DRY относится к общей практике кодирования, так как «Кража - это неправильно» может применяться практически ко всем этическим нормам и морали. Есть очень редкие исключения. Держите их очень редко.
Если у вас есть привычка чрезмерно решать проблемы, с которыми вы, возможно, столкнетесь в будущем, отбросьте их. Нет ничего более перспективного или «масштабируемого», чем код, не более сложный, чем он должен быть. «Предприятие» - это ложь.
Сложные модели часто обещают длинный список наград. Есть только 3 вещи, которые должны иметь значение в большинстве случаев. Это легко читать. Это легко использовать повторно. Это легко изменить. Думайте с точки зрения минимального применения силы, которое мог бы использовать мастер боевых искусств, и применяйте этот принцип к сложности. Достаточно точно, чтобы решить проблему идеально.
Сначала напишите свой интерфейс. И нет, я не имею в виду конструкции C # / Java, которые должны использоваться только при необходимости, я имею в виду API ваших объектов. Что нужно сделать классу / объекту? Напишите эти пустые методы и дайте им имена аргументов. Не заполняйте пробелы, пока не закончите. Вполне допустимо вносить изменения позже, но как только вы определите, что нужно сделать, вы можете сосредоточиться на том, как нужно выполнять каждую вещь, по одной за раз. Причиной того, что вы пытаетесь удержать в своей голове столько же, сколько вы часто делаете, может быть то, что у вас происходит реализация проблем, которые должны были быть решены задолго до того, как вы добрались до определенной стадии процесса. Есть много есть и есть методы? Это то, о чем я говорю.
Диагноз?
Я думаю, что проблема пространственной осведомленности хорошо освещена. Независимо от того, что вы решите в этом вопросе, я бы еще раз обратился к вопросу о ДОБАВЛЕНИИ, особенно если бы вы не хотели этого делать в первый раз. Это определенно звучит как гиперфокус, доведенный до крайности. В конечном счете, позвольте этой любви к кодированию побудить вас найти способы смягчения этих проблем, и я ожидаю, что ваша карьера окажется просто отличной.
источник
Сколько часов вы работаете, прежде чем начать видеть это размывание? Многие средние и хорошие программисты, которых я знаю о работе 4, могут быть за 5 часов до того, как выпить кофе или обед или что-то еще. Самый длинный из таких спринтов, о которых я когда-либо читал, - это когда Гай Л. Стил и Ричард М. Столлман выполнили 10-часовой спринт при написании Emacs. Стил продолжает, что он не хотел бы делать такой длинный спринт снова.
Если вы новичок в (менее, скажем, 5000 часов (это число пришло из поста Питера Норвига об обучении программированию за десять лет, сократив вдвое 10000 часов, которые он рекомендует стать опытным программистом)), это звучит очень нормально за исключением той части, где вы говорите, что вам нужны дни отдыха. Может быть, вы сжигаете себя, чтобы заставить себя так долго отдыхать?
источник
Из того, что вы описываете, ваша проблема может иметь различные причины:
неопытность
Потеря фокуса / усталости
Низкие пространственные способности
Неопытность может быть решена с помощью ... ну, в основном, опыта. Каким бы очевидным это ни звучало, если вы будете больше практиковаться, вы будете чаще попадать в сложные ситуации программирования и постепенно научитесь справляться с ними. Прямо сейчас вам может не хватать умственных схем и рефлексов, чтобы установить правильные связи, сделать правильные выводы и разблокировать эти ситуации, которые могут заставить вас чувствовать себя медленным и писать «устаревший код», но эти шаблоны решения проблем будут постепенно проходите в вашей голове по мере того, как вы становитесь более опытным (вам, как я понимаю, всего 22 года, который еще очень молод).
Существуют различные методы для улучшения вашего внимания. Pomodoro и Get Things Done - два примера. В области программирования разработка, ориентированная на тестирование, - это то, что я действительно рекомендую, поскольку она заставляет вас концентрироваться на одной маленькой, достижимой цели за раз (маленькие шаги). С подходом TDD у вас гораздо меньше шансов «поместить функции в классы, где они на самом деле не принадлежат», поскольку вы вынуждены четко определить ответственность вашего класса с помощью теста, а затем сосредоточиться исключительно на его реализации при кодировании , в отличие от прыжков между несколькими классами и случайного заполнения их постепенно.
Усталости и снижения внимания можно избежать, приняв устойчивый ритм с частыми перерывами. Вы могли бы заинтересоваться этой презентацией Линды Райзинг о том, как быть более продуктивной, уважая наш мозг: Born to Cycle .
Что касается низких пространственных способностей, я боюсь, что вы ничего не можете с этим поделать. Однако тяжелая работа может ослабить ее, и это далеко не единственный навык, необходимый для программирования. Такие вещи, как креативность, страсть, энтузиазм, строгость, аналитические навыки, проницательность, хорошее понимание деловых вопросов, навыки совместной работы, могут более чем компенсировать более слабую, чем в среднем, визуальную визуализацию базы кода.
Короче говоря, то, что вам нужно IMO это:
дисциплина
практика
Устойчивый темп
источник