Чи викладання програмування робить вас кращим програмістом [закрито]


40

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

Мені було цікаво, чи дійсно це розширить мій програмовий репертуар. Хтось мав просвітницький досвід після успішного навчання групи людей?

Чи це також залежить від цих людей - чи вони програмісти, чи студенти-нобути? (У моєму випадку вони є проміжними .NET та Java-програмістами)

Чого слід чекати від них?

Один із моїх страхів - що робити, якщо я захлинувся, коли хтось із них задав заплутане запитання. Це нормально?


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

Спасибі. Але навчання НЕ в університеті - це разова можливість для навчання деяких співробітників Java / .NET пари невеликих веб-розробників.
treecoder

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

2
Будьте своїм природним «я» і висловлюйте знання. Студенти - це такі, як ти і я, які мають намір навчитися слухати тебе в класі. Коли ваші студенти отримають високі відмінності або запропонують приголомшливі рішення своїх проблем через ваше навчання, це покаже. Задоволення, яке ви можете отримати від цього, може легко не викликати виразу.
vpit3833

2
Усі тренери, з якими я коли-небудь брав інтерв'ю; провалили співбесіду на посаду розробника. Програмування - це не просто теорія. Щоб бути кращим програмістом, ви повинні навчитися "та" практикувати, створюючи додатки в реальному світі.
Мухаммед Хасан Хан

Відповіді:


37

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

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


1
@greengit Я б запропонував вам порівнювати мови, але переконайтесь, що ви дійсно знаєте, про що ви говорите, кажучи, що одна мова краща за іншу, оскільки деякі студенти можуть не погоджуватися та мати дійсні протилежні аргументи. Порівнюючи їх та показуючи способи, python полегшує різні завдання, ніж у Java / .NET - це чудовий спосіб допомогти представити концепції.
Райан Меттьюз

2
Я б сказав, зведіть порівняння до мінімуму і зосередившись на тому, як робити речі в Python. Я припускаю, що вони вже знайомі з основними конструкціями, такими як присвоєння змінних, циклі / ітерації, функції, рекурсія, структури потоку управління тощо ... Це може допомогти розробити проект, який вони будують під час курсу (якщо для цього достатньо довго) .
FrustratedWithFormsDesigner

3
@greengit Не претендуй на те, що знаєш те, чого ти не знаєш. Якщо ви не знаєте достатньо для порівняння, використовуйте це як точку навчання і попросіть свого учня пояснити, як це працює в Java / .NET, і спробуйте разом зійти з порівнянням.
Davy8

2
@greengit Я думаю, що це допомагає не вступати з припущенням, що вам потрібно знати все про цю тему. Це як би сподіватися на те, що ти зробиш роботу без можливості шукати посилання. Просто будьте гаразд з тим, що у вас не буде всіх відповідей, але ви можете допомогти спрямувати своїх учнів на відповіді. Можливо, дайте їм ключові терміни Google.
Davy8

1
+1 за визнання, коли ви не знаєте відповіді. Я бачу, що занадто багато інструкторів просто щось складають на місці, а потім визнають, що вони не знають усе. У мене також було кілька хороших інструкторів, які використовуватимуть як можливість, змушують учнів знайти відповідь, навчаючи як шукати речі. Це потрібно обережно зробити, щоб не відштовхувати людей від запитань.
Jim C

30

Старе дослідження Техаського університету зробило такі висновки.

Люди зберігають:

  • 10 відсотків прочитаного

  • 20 відсотків того, що вони чують

  • 30 відсотків побаченого

  • 50 відсотків того, що вони бачать і чують

  • 70 відсотків того, що вони роблять

  • 90 відсотків того, що вони навчають

Слідуючи цій логіці, найкращий спосіб НАВЧИТИ щось і зберегти те, що ви навчились, - докласти максимум зусиль, навчаючи це комусь іншому.

Навіть незважаючи на те, що я проходив навчання через Comp Sci 101 у школі, я взяв репетиторську роботу для C ++ і насправді не навчався C ++, поки мене не змусили навчити це бореться з учнями. Це було схоже на оргію лампочок, що відбиваються в моїй голові, коли я допомагав носіям, які не працюють у своїх центрах, у виконанні завдань.


2
+1. Мій ліміт голосування досягнуто :( Будь ласка, вкажіть на посилання, якщо воно є.
treecoder

22
Можливо, вам слід перестати звертатися до цієї таблиці. willatworklearning.com/2006/05/people_remember.html
Shawn D.

5
@ShawnD. Я подумав стільки… тому що ви знаєте, що вони кажуть, 84% статистики складається. Я думаю, що важливіше це слід сприймати для більшого повідомлення. Я зберігаю набагато більше того, що викладаю, ніж те, що читаю. Це мені дано як природне спостереження за собою. Це був пункт, який я намагаюся зробити.
maple_shaft

3
Приємна статистика, +1. Мій досвід багато в чому однаковий. У нас тут є приказка: Ті, хто вміє, роблять. Ті, хто не вміє, навчають. Ті, хто не вміє навчати, навчають спорту. Жартую :)
Сокіл

2
@Falcon, інша версія останнього речення - "Ті, хто не вміє навчати, керувати" ;-)
Péter Török

10

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

Дійсно, Ян Коменський зазначив вже пару сотень років тому, що найкращий спосіб по-справжньому глибоко зрозуміти щось - пояснити це іншим .

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


5

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

Ви згадали в коментарі, що ваше "знання Java / .NET майже до нуля". Це прекрасна можливість вчитися у своїх учнів. Навчання - це не єдиний процес.

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


+1 за "Ви також можете дізнатися у своїх учнів, якщо ви про це не розумієтесь". Я переживав це, коли викладав кілька нічних занять років тому.
DevSolo

4

Так, ви отримаєте глибше розуміння. Я зробив подібний досвід, як і інші відповіді, які ви отримуєте тут.

Я зробив додатковий досвід: я швидше почав аналізувати помилки. Ви вчите людей, тому вони роблять помилки, про які ви ніколи не замислювалися. Коли ви їм допомагаєте, ви шукаєте проблематичний код (принаймні, я).

Один із моїх страхів - що робити, якщо я захлинувся, коли хтось із них задав заплутане запитання. Це нормально?

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


4

Я викладав класи технічного коледжу (але не з розробки програмного забезпечення). Ось мій прийом:

Чи зробить вас кращим програмістом?

Не 1: 1. Ви не отримаєте такого ж досвіду, як писали програми - але це зовсім не погано (читайте далі).

Чи розширить це ваш програмовий репертуар?

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

Це також залежить від цих людей?

Робота з професіоналами сусіднього домену кардинально змінює структуру. Вони вже вміють спілкуватися з комп’ютерами, писати програми. Синтаксис і логіка швидко засвоїть їх. Вони будуть задавати складні запитання в перший тиждень.

Чого слід чекати від них?

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

Що робити, якщо я задихаюся, коли мені задають заплутане питання. Це нормально?

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


3

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

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


3

Я б сказав, що це безумовно має значення. Зі свого особистого досвіду я захищаю це через наступні причини: -

  • Під час читання іноді розум стає досить ледачим, щоб ігнорувати деталі або починати припускати речі, а не ретельно читати, щоб зрозуміти відповідну вершину. Саме це і є причиною неповних здобутків знань під час читання себе.

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


3

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

Крім того, це допомагає вам будувати зв’язки з іншими розробниками, які згодом можуть перетворитись на ефективні стосунки команди розробників.


2

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

Але коли ви працюєте в галузі, часто документація призначена для когось, кого ви не зустрічали і не зустрінете, тому легко потрапити в пастку документування того, що ви зробили, а не того, що повинен знати зацікавлений / читач.

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


2

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

Крім того, студенти можуть запропонувати іншу проблематику чи (дивну?) Методологію до проблеми, розширивши простір рішення.

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


1

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


1

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

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

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

12 років тому мій вчитель інформатики 11/12 року дав мені пропозицію. Якби я протягом кожного навчального року в школі міг зламати його безпеку / брандмауэры тощо, він би дав мені + (100%) курсу, незалежно від моєї роботи. Чорт, я допоміг йому спланувати курс, коли я працював молодшим. тоді розробник. Ця пропозиція, яку він мені дав, зробила його (на той час) експертом з питань безпеки Windows NT. Я все-таки отримав 100%, мені довелося викрасти його UN / PW, а потім заблокувати його ... це був єдиний шлях, врешті-решт ... Але не потрібно говорити, що він став кращим як викладач і в ІТ через викладання - він працював З класом - не за власним порядком денним.

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


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

1

Доведеться вирішити десятки "чому мій код не працює?" Проблеми під час викладання навчальних занять у вступному курсі програмування зробили мене набагато краще в розумінні коду на льоту та імітації його в голові.


1

Спираючись на власний досвід вчителя. Я б сказав « НІ» .

Тому що, хоча ви краще розумієте основи, навчаючи дітей та / або новонароджених, ви не вдосконалюєте жодних удосконалень, пов’язаних із вашою реальною професією.

Чому це відбувається? - тому що програмування розвивається швидше, ніж люди можуть вчитися. З'являються нові мови та рамки, нові інструменти, нові концепції, нове обладнання. А професійний програміст ПОВИНЕН знати свій домен. Або ще - ніхто йому не знадобиться.

Ви можете сказати - "але ви можете вивчити основні алгоритми", - і я вам кажу - "але ви повинні вивчати їх в університеті".

Інша тема - робочий ритм. "Вчителі" повільні, їх не використовують для швидкого вирішення актуальних реальних проблем.

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


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

1

ТАК!

Луї Е. Френцель писав саме про це кілька років тому:

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


1

Не пов’язані безпосередньо, але ...

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


Я люблю такі кореляції!
нар.

1

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

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

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


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

0

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


0

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

Підготовка для людей, які вже існують програмістами, - це цілий рівень додаткових зусиль. Ви можете розраховувати на те, що в класі будуть люди, котрі ненавидять, що їх просять навчитися Python віце-улюбленому C # (або що завгодно). Вони оскаржують усе, що ви кажете. У вас можуть бути інші, хто вже має певні знання і в перший день задаватиме розширені запитання. У першому випадку переконайтесь, що ви продовжуєте тему і НЕ вступайте в обговорення відмінностей між мовами, якщо тільки клас не веде себе вороже. Просто поверніться до матеріалу, який ви збираєтесь охопити. У другому випадку майже все розгорнуте запитання можна посилатись пізніше на уроці (даючи час шукати відповідь, якщо ви цього не знаєте.) Так що це повинно вам впевнитись. Я завжди готую кілька складніших вправ для людей, які беруть заняття, тому що їм це потрібно, але вони вже знайомі з темою. Сорт незалежного дослідження для легко нудьгуючих. (І чи дивуються вони, коли я витягаю для них ті вправи з передовими темами, а всі інші борються з вправою, яку вони робили за п’ять хвилин!)

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

Студенти мають чудову здатність тлумачити речі, які ви говорите, унікальним чином. Їх помилки можуть бути такими, які вам ніколи не спадало б на думку робити. Допомогти їм виправити свої помилки та пояснити, чому вони є помилками, допоможе вам у перегляді кодів!

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