Что вы делаете, когда не понимаете определенную часть программирования? [закрыто]

11

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

Например, я никогда не понимал указатели - в чем они хороши. (НЕ ЧАСТЬ ВОПРОСА - переназначение с помощью «Указателей» не требуется ...)


Мой вопрос, однако, заключается не в том, что делают указатели, а в том, как я могу понять такие вещи? Если после прочтения книги или статьи об определенной части программирования я не понимаю, что мне делать? Написание кода в определенной функции программирования, безусловно, помогает, однако на самом деле это не помогает понять это. Теоретическая часть важна для понимания.

Bugster
источник
11
Хотелось бы мне понять, почему у людей так много проблем с пониманием указателей. Название дает все разъяснения, которые мне нужны.
ChaosPandion
1
Некоторый Computer Architecture 101курс очень помог бы с пониманием указателей. ... и все остальное.
ZJR
6
Вопрос не совсем об указателях, это общий вопрос, но спасибо.
Bugster
2
Я не думаю, что напоминание парню об одном примере, с которым он признался, что у него были проблемы, поможет ему хоть немного помочь просветлению ... Делая это достаточно часто, он, тем не менее, помешает ему обратиться за помощью из-за страха получить удар. длинная череда скупых и педантичных ответов и унизительных комментариев.
Хайлем
4
@FrustratedWithFormsDesigner: «Как мне научиться учиться», я думаю. Что является действительным и ценным вопросом.
Хайлем

Ответы:

22

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

SK-логика
источник
2
+1: работал для меня. У меня были проблемы с указателями в ALGOL, пока я не начал писать ассемблер PDP-10.
Кевин Клайн
2
Интересная идея. Хотя я бы отметил, что написание и запуск программы на ассемблере зашло слишком далеко. На мой взгляд, выход за рамки базового понимания на этом уровне не нужен. Но, эй, если это то, что вы хотите сделать, больше сил для вас!
Брайан Филд
1
@ Джордж Бейли, да, это может быть немного непомерно для любой реальной сборки и реального оборудования. Вот почему есть MIXи другие подобные игрушечные архитектуры вокруг. С аппаратной частью все то же самое - есть много простых игрушечных процессорных ядер для изучения.
SK-logic
+1: интересная идея и определенно может сработать, но (для повторного использования примера из OP) переход от начального уровня C к начальному уровню ASM может быть долгим, трудным и запутанным путем для начинающего, который может занять больше времени, чем предполагалось курсом / проектом / другим. Это может также оттолкнуть слабо мотивированных людей (что, вероятно, не случай ОП, но с точки зрения более высокого уровня, это заблокировало бы многих студентов, которые посещают занятия по КС и должны понимать это, но не беспокоятся о самой КС) , Но определенно хорошая идея на длительный срок.
Хайлем
Ну, моя степень бакалавра в области компьютерных технологий охватывает это в области компьютерной архитектуры. Мы узнали о логических элементах, объединили их в логическом симуляторе для создания сумматоров, ALU и, в конечном итоге, очень простого процессора RISC. Мы также написали простые программы в сборке MIPS. Все это было необходимо для получения степени бакалавра в области компьютерных наук, и на самом деле это не считалось одним из «выходных» курсов, поэтому я не думаю, что это слишком или слишком далеко.
Адам Яскевич
17

Короткий инкрементальный жизненный цикл обучения

  1. Попробуйте и не поймете концепцию.
  2. Попробуйте реализовать что-то, иллюстрирующее концепцию.
  3. Попробуйте нарисовать концепцию на доске (если применимо)
  4. Попробуйте поговорить об этом с кем-то, кто понимает концепцию.
  5. Попытайтесь объяснить человеку то, что вы понимаете (иногда помогает увидеть свет).
  6. Перезапускайте с 1 до тех пор, пока вы, наконец, не сможете объяснить это кому-то, кто находится в состоянии 1, и заставить его получить его

Дополнительные шаги

Использовать с осторожностью.

  • Поиск дополнительных материалов для чтения и изучения :
    • онлайн (популярные поисковые системы и Википедия - хорошие друзья),
    • в библиотеке (не стоит недооценивать книги и людей, которые идут туда, чтобы их прочитать),
    • в вашей системе (изначально документация и инструменты документирования часто поначалу отчуждают, но через некоторое время ваш лучший собеседник: научитесь находить в них то, что вы ищете. Например man -k, aproposи т. д.)
  • Попробуйте прочитать код, используя концепцию ...
  • ... и пройтись по коду с помощью отладчика.

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

Кредиты: Nupul (для построения диаграмм)

haylem
источник
2
+1! Могу ли я добавить - прежде чем говорить, попробуйте «сделать набросок» на доске (или просто держите доску под рукой, когда разговариваете с кем-то :)
доктор философии,
1
+1 за «пошаговое выполнение кода с помощью отладчика». Я узнал о многих концепциях с помощью простых инструментов отладки ...
funkymushroom
@ Nupul: хорошее предложение, добавил.
Хайлем
@funkymushroom: На самом деле, хотя я бы сказал, что обычно вы не понимаете концепцию таким образом. Это, однако, помогает «поднять туман», когда он прямо перед вами, и вы просто не могли видеть, как кусочки собираются вместе, потому что вы слишком сосредоточены на чем-то или ваш ум обжарен. Я считаю более полезным для понимания общих проблем алгоритмики, чем для общих понятий.
Хайлем
Разговор с доской сделал это для меня.
Питер
5

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

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

Я пошел в Stack Overflow и спросил в канале чата C ++ и получил пять разных объяснений за пять минут. Все они были созданы специально для меня и именно той проблемы, с которой я столкнулся, поэтому неудивительно, что один из них ударил меня по дому, и я понял это. Скорость, с которой вы можете учиться, получая отзывы от нескольких экспертов в реальном времени, значительно превосходит то, что вы можете получить из сухих бумажных источников.

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

DeadMG
источник
3

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

Задавайте вопросы по stackexchange ...;>

Сардатрион - против злоупотребления SE
источник
2

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

Источники: Книги, Интернет, Группы пользователей, друзья, Видеообучение, использование сайтов, которые позволяют тестировать немного «кода», такого как jsfiddle (в основном, html),
Rubular (выражения Ruby),
SQlzoo для тестирования sql,
jslint для javascript,
кодовая панель для многих языков.

Чтобы запомнить абстрактные вещи, подумайте о мномике - врачи используют их!

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

наркоман
источник
1
+1 за «практику». Но мнемоника, тьфу. Они - очень недостаточный костыль, который никогда не сможет заменить и никогда не должен вытеснять понимание. На самом деле они отмечают отсутствие понимания. «Врачи используют их», потому что они вынуждены выучить слишком много разрозненных фактов за слишком короткое время. Мы постепенно подходим к тому факту, что наше образование для врачей - отстой, и, например, США находятся на пути к полной перестройке образования. Мнемоника - это не решение, а часть проблемы. Если вы обнаружите, что используете их, вы не поняли.
Конрад Рудольф
1

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

Если вы должны понять это сейчас ... попросить помощи у друзей или здесь =)

Gerep
источник
1

Что все остальные в IT делают.

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

Скорее всего, вы также не до конца понимаете стек, кучу, автоматические переменные, процесс компиляции C ++, сборку, управляемую память и неуправляемую память.

Большая ясность в отношении этих и других связанных с указателем концепций, вероятно, прояснит все.

Брайан
источник
1

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

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

Кевин Хсу
источник
1

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

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

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

Ты знаешь это ага! моменты? Это когда ваш мозг только что установил новое соединение. Вот как происходит обучение.

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

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

Конрад Рудольф
источник
0
  1. Прочитайте любую соответствующую документацию и Google ваши сомнения.

  2. Попробуйте написать примеры кода, посмотрите, что они делают.

  3. Попробуйте выполнить код в режиме отладки и посмотрите его шаг за шагом.

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

Я думаю, что это в значительной степени то, что делают все остальные.

jlemos
источник
0

Продолжайте исследовать и учиться. У меня была такая же проблема с различными другими аспектами программирования. Но общение с другими и чтение статей в конечном итоге приводит к моменту «АГА». Как правило, это какой-то другой пост в блоге или SO-ответ, содержащий информацию, которой я могу следовать.

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

Schleis
источник