Що ви робите, коли, здається, не розумієте певної частини програмування? [зачинено]


11

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

Наприклад, я ніколи не розумів покажчиків - у чому вони хороші. (НЕ ЧАСТИНА ЗАПИТАННЯ - повторне позначення тегів "Покажчиками" не потрібно ...)


Однак моє запитання полягає не в тому, що роблять покажчики, а натомість як я можу зрозуміти такі речі? Якщо, прочитавши книгу чи статтю про певну частину програмування, і я не розумію, що робити? Введення коду в певній функції програмування, безумовно, допомагає, однак насправді це не дуже допомагає зрозуміти. Теоретична частина важлива для розуміння.


11
Мені б хотілося зрозуміти, чому у людей так багато проблем з розумінням покажчиків. Назва дає всі необхідні мені уточнення.
ChaosPandion

1
Деякий Computer Architecture 101курс значно допоможе в розумінні покажчиків. ... і все інше.
ZJR

6
Питання не стосується саме покажчиків, це загальне питання, але дякую.
Багстер

2
Я не думаю, що нагадування хлопцеві про той приклад, з якого він зізнався, що має проблеми, допоможе йому один-єдиний шматочок до просвітлення ... Зроблено досить часто, але це заважатиме йому звернутися за допомогою, не боячись потрапити в купівлю довга нитка скупих і педантичних відповідей і принижуючих коментарів.
haylem

4
@FrustratedWithFormsDesigner: "Як мені навчитися вчитися", я думаю. Що є вагомим і цінним питанням.
haylem

Відповіді:


22

Якщо у вас виникли проблеми з розумінням абстрактного поняття, просто перейдіть на один рівень вниз. Якщо ви не можете отримати покажчики на C - перейдіть до рівня складання. Проблеми все ще виникають? Дізнайтеся більше про обладнання, аж до логічних воріт.


2
+1: працював для мене. У мене виникли проблеми з покажчиками в ALGOL, поки я не почав писати мову монтажу PDP-10.
кевін клайн

2
Цікава ідея. Хоча я зазначив, що писати та запускати програму в зборах заходить занадто далеко. На мою думку, виходити за межі базового розуміння на цьому рівні непотрібно. Але ей, якщо це те, що ти хочеш зробити, більше сил тобі!
Брайан Поле

1
@George Bailey, так, це може бути трохи згори для будь-якої реальної збірки та реального обладнання. Ось чому навколо є MIXі інші подібні архітектурні іграшки. Для апаратної частини це те саме - є багато простих, іграшкових процесорних ядер для вивчення.
SK-логіка

+1: Цікава ідея і, безумовно, може спрацювати, але (для повторного використання прикладу ОП) спуск від початкового рівня C до початкового рівня ASM може бути довгим, важким і звивистим шляхом для новачків. більше часу, ніж передбачалося курсом / проектом / інше. Це також може відчужувати слабко мотивованих людей (що, мабуть, не є справою ОП, але з точки зору вищого рівня це заблокує багато студентів, які беруть курси CS та потребують розуміння цього, але не гребують самим КС) . Але, безумовно, хороша ідея на довгострокову перспективу.
haylem

Ну, мій ступінь CS висвітлював це в галузі комп’ютерної архітектури. Ми дізналися про логічні ворота, поєднали їх у логічному симуляторі для створення суматорів, ALU та, зрештою, дуже простого процесора RISC. Ми також писали прості програми при складанні MIPS. Це все було потрібно для бакалавра з інформатики, і насправді не вважалося одним із курсів «бур’янів», тому я не думаю, що це перевершило чи зайшло занадто далеко.
Адам Яскевич

17

Короткий поступовий життєвий цикл навчання

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

Додаткові кроки

Використовувати обережно.

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

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

Кредити: Нупул (для діаграми)


2
+1! Чи можу додати - перед тим, як говорити, спробуйте на Дошці "замалювати його" (або просто тримати дошку під рукою під час розмови з ким-небудь :)
Кандидат,

1
+1 для "переходу коду за допомогою налагоджувача". Я дізнався про багато понять за допомогою простих інструментів налагодження ...
funkymushroom

@Nupul: хороша пропозиція, додано.
хайлем

@funkymushroom: Дійсно, хоча я б сказав, що зазвичай ви насправді не вивчаєте цю концепцію таким чином. Однак це допомагає "підняти туман", коли він знаходиться прямо перед вами, і ви просто не могли бачити, як шматки збираються разом, тому що ви занадто зосереджені на чомусь або ваш розум обсмажений. Мені здається кориснішим зрозуміти загальні проблеми алгоритміки, ніж загальні поняття.
хайлем

Розмова з дошкою зробила це для мене.
Пітер

5

На мій досвід, це все про вхід та зворотній зв'язок. Ви хочете отримати інформацію в якомога більшій кількості форм, і якнайшвидше отримати відгук про свої помилки.

З мого досвіду, мій ступінь CS був дуже сухим, дуже формальним і зовсім марним при навчанні будь-якому програмуванню. Я відвідував дві-три лекції на тиждень, і якщо ви цього не отримаєте, то це майже все - у викладача є ще один клас викладання, і він не може триматися, щоб допомогти вам. І, шанси на те, що один хлопець це розуміє певним чином, і він навчить це певним чином, і це все, тому якщо ти не думаєш, як він, ти його ніколи не отримаєш. Найгірше те, що оскільки він, ймовірно, розуміє мільярд інших пов'язаних з цим понять, він, швидше за все, буде його формулювати з точки зору тих інших понять, які цілком можуть бути над головою або просто навіть не в навчальному матеріалі.

Я зайшов у Стек Overflow і попросив у каналі чату С ++ і за п’ять хвилин отримав п'ять різних пояснень. Всі вони були спеціально розроблені для мене і точної проблеми, яка у мене була, тому не дивно, що один з них вразив мене додому, і я це отримав. Швидкість, з якою можна навчитися отримувати відгуки в реальному часі від багатьох експертів, значно перевищує те, що можна отримати від джерела сухих паперів.

Тож в ідеалі перервіться, і тоді ви знайдете невелику до середнього розміру групу однодумців, яким немає нічого кращого робити і спілкуватися з ними наживо. До речі, Stack Overflow - прекрасне місце для отримання такого роду високоякісних високошвидкісних особистих відгуків.


3

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

Задавайте питання на stackexchange ...;>


2

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

Джерела: Книги, Інтернет, UserGroups, друзі, Video Learning, використовуючи веб-сайти, які дозволяють перевірити трохи "біт" коду, наприклад jsfiddle (переважно html),
Rubular (Ruby вирази),
SQlzoo для випробування sql,
jslint для javascript,
кодова панель для багатьох мов.

Щоб запам'ятати абстрактні речі, врахуйте мнеоміку - лікарі ними користуються!

Подумайте про себе, що навчається на все життя, і будьте скромним, і можете піти далеко.


1
+1 для "практики". Але мнемоніка, тьфу. Вони є дуже недостатньою милицею, яка ніколи не може замінити, і ніколи не повинна витісняти розуміння. Насправді вони відзначають відсутність розуміння. "Лікарі використовують їх", оскільки вони змушені дізнатися занадто багато роз'єднаних фактів за занадто мало часу. Ми потихеньку стикаємося з тим, що наша освіта для медиків відстійна, а США, наприклад, вже на шляху повністю переробити освіту. Мнемоніка не є рішенням, вони є частиною проблеми. Якщо ви виявили, що користуєтесь ними, ви не зрозуміли.
Конрад Рудольф

1

Вам потрібно змінити фокус на деякий час, а не на 5 хв. або 5 годин ... я маю на увазі щось на кшталт 1 дня, не дивлячись на цей код .... просто похолодайте ... перечитайте щось інше ...

Якщо ви маєте це зараз зрозуміти ... зверніться за допомогою до друзів або тут =)


1

Те, що роблять всі інші в ІТ.

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

Можливо, ви також не повністю розумієте стек, купу, автоматичні змінні, процес компіляції C ++, збірку, керовану пам'ять проти некерованої пам'яті.

Більше ясності щодо цих та інших понять, пов’язаних з покажчиками, можливо, все б зрозуміло.


1

Немає безпечного швидкого способу зрозуміти тему. Ваш успіх залежить від того, скільки контексту ви приносите з собою під час навчання. Вам дуже пощастить знайти когось, хто пояснить речі з вашої точки зору. Як і машини Тьюрінга, кожен може навчитися тому, що знають інші, і це лише питання наполегливості та прийняття того, що розчарування є природним.

Я пам’ятаю величезну складність, яку я мав із покажчиками. Тільки до того, як дуже терплячий чувак пояснив це мені, як я був повним ідіотцем, що я це зрозумів. Ось іноді це потрібно.


1

Це поширена проблема в навчанні та навчанні. І, як говорили інші, немає впевненого способу обійти це. Основна правда, що всі ми вчимося по-різному, оскільки наші мізки по-різному підключені до тонких, але вирішальних способів.

Навчання породжує нові нейронні зв’язки. Не надто сильно заглиблюючись у нейронауку (про яку я майже нічого не знаю), генерування нових зв'язків вимагає різного роду опромінення поняття для різних людей. Спробуйте багато різних кутів, читайте / чуйте / дивіться різні пояснення. Тренуйтеся!

Якщо це не спрацює, відкладіть проблему: можливо, вам просто не вистачить ще однієї частини головоломки, яка, як тільки буде придбана, робить початкову проблему очевидною.

Чи знаєте ви цих аха! моменти? Це коли ваш мозок щойно встановив новий зв'язок. Ось як відбувається навчання.

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

На жаль, занадто багато вчителів ігнорують це і пояснюють речі лише один раз. І навіть якщо їм вдасться знайти елегантне пояснення з чудовою метафорою, цього просто недостатньо.


0
  1. Прочитайте будь-яку відповідну документацію та свої сумніви у Google.

  2. Спробуйте написати приклади коду, подивіться, що вони роблять.

  3. Спробуйте виконати код у налагодженні і перегляньте його поетапно.

  4. Якщо ви все ще не розумієте певної поведінки, запитайте когось особисто чи на веб-сайті, як це. Якщо ви спробували все вищезазначене, у вас повинні бути всі елементи, щоб скласти гарне запитання. Не соромся :)

Я думаю, це майже все, що роблять всі інші.


0

Продовжуйте дослідження та навчання. У мене були ті ж проблеми з різними іншими аспектами програмування. Але розмова з іншими та читання статей врешті-решт призводить до "AHA" моменту. Як правило, саме інший пост в блозі або відповідь ТА подає інформацію, яку я можу переслідувати.

В основному, слідкуйте за терпінням і будьте терплячі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.