Как я могу научить умного человека без опыта программирования, как программировать? [закрыто]


100

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

Итак, вопрос: как вы думаете, как лучше всего ускорить процесс разработки (не в данном случае .Net)?


1
Может быть , связанный с этим вопрос: programmers.stackexchange.com/questions/10930/... : D
jmservera

Я слышал, что Learn Python The Hard Way хорош для начинающих непрограммистов.
john2x

Взгляните на Small Basic . Это просто, но полезно для начинающих.

3
Я думаю, что объяснять программирование тому, у кого нет ментальной модели того, о чем вы говорите, бесполезно. Выясните, на каком языке вы собираетесь говорить, и пусть они прочитают уроки и испачкают руки, а затем объяснят. Они будут бороться, и вы наберетесь и ускорите процесс обучения.
Человек

1
Я бы попросил его прочитать книгу Эдгсера Дейкстры «О жестокости по-настоящему преподавания информатики», чтобы он узнал о причине этой статьи, чтобы он мог быть осторожен с возможным повреждением мозга, которое может быть причинено ему общепринятым способы обучения программированию
vfclists

Ответы:


125

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

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

  1. Код Чарльза Петцольда.
  2. Язык программирования C, K & R
  3. Структура и интерпретация компьютерных программ, Абельсон и Суссман.

Мое правило: пробирайся сквозь эти три книги только силой, если это необходимо. Задайте любые вопросы, которые у вас есть, но только после того, как изо всех сил, чтобы понять это самостоятельно Если вы можете пройти через эти три книги, поздравляю, вы - программист, теперь я могу выбросить вас из PERL через 15 МИНУТ или любой другой мусор в книжном магазине в Большом Книжном Шкафу Java, и вы справитесь. Если ты не сможешь пройти через эти три книги, сдавайся, иди домой, ты никогда не получишь это.

Я не думаю, что вам нужно изучать C и Scheme, если честно. Они просто основа для будущего обучения. Эти две довольно простые книги на первый взгляд очень просты (C и Scheme - суперлегкие языки), но они очень глубоко разбираются в реальном искусстве программирования, не тратя время на запутанный синтаксис, поэтому они отлично подходят для начала повторного соединения Ваш мозг, чтобы быть хорошим программистом.

Попытки использовать ярлык и перейти непосредственно к изучению того, что вы хотите изучить прямо сейчас (например, начиная с C # и ASP.NET), обречены.


25
Как человек, которому приходилось биться головой о «программистов», которые очень рекомендовали свои способности в C #, но не могли делать простые вещи, такие как реализация очень хорошо документированного базового класса, обнаружение утечек памяти в программах на c и c ++, или просто решить проблему самостоятельно или узнать новую идею даже в умеренном темпе, я согласен. Это не элитарность; это здравый смысл. Если вы не можете освоить указатели и рекурсию, вы никогда не будете очень полезны для тех, кто нуждается в разработчиках, которые могут решать проблемы самостоятельно.
Джонатан Хенсон

53
Нет, это не единственный способ быть хорошим программистом. Но если три книги - «пугающий список», то вы можете недооценивать то, что делают программисты.
Джоэл Спольски

32
Ты иногда не в курсе, Джоэл.
Роберт С.

46
Извините, газеты прибывают в мой частный клуб через пару дней, потому что камердинер должен их погладить, прежде чем мы их увидим.
Джоэл Спольски

19
К сожалению, этот ответ не проходит со up to speed quicklyстороны.
rlb.usa

30

Лучший способ быстро освоить не-разработчика - вдохновить их !

Чтобы добиться успеха, кандидат должен быть, по крайней мере, заинтересован, если не увлечен , программированием (независимо от платформы).

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

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


29
«Если вы хотите построить корабль, не бейте людей, чтобы собирать дрова и не назначайте им задачи и работу, а скорее учите их тосковать по бесконечной необъятности моря». - Антуан де Сент-Экзюпери
Жюльен Частанг

Жюльен - здорово! Именно так!
Jkoreska

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

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

12

Я ищу самый быстрый способ ускорить его.

Самый быстрый способ - дать ему время , которое может потребоваться, хотя это может быть год или два.

Конечно, кажется простым научить его простому языку (C #, если он занимается .NET), но изучение языка - это не обучение программированию.

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

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

Что касается того, как это сделать: у меня нет полноценной учебной программы, которую можно вставить здесь. (Извините.)
Однако я бы порекомендовал начать с обучения его одному языку программирования, чтобы у него была возможность быстро добиться начального прогресса и получить обнадеживающие результаты. Там довольно много книг для обучения таким языкам, выберите ту, с которой вы знакомы. Если в книге много упражнений, и он готов их выполнять, будьте готовы потратить много времени, помогая ему с этим. Если в книге нет (m), начните придумывать свои собственные заранее, но будьте готовы адаптировать их к своему уровню / скорости понимания.
Если этот первый язык не был C или C ++, IMO, он должен изучить один из следующих. K & R хорош для этого, как и TCPL Страуструпа или, если он может (с вашей помощью) справиться с крутой кривой обучения, Кениг / Му. Причина, по которой я бы порекомендовал это, состоит в том, что, когда вы знаете C или (предпочтительно IMO) C ++, сравнительно легко выбрать любой из этих производных C, таких как C #, Java, ObjC ...

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


1
«Разработчик начального уровня, поддерживающий существующие приложения .Net» ... »ему нужно будет узнать о массивах, связанных списках, модели компиляции любого изучаемого языка, модульности, управлении ресурсами, парадигмах, шаблонах, двоичной записи». все хорошо, но я держу пари, что большая часть разработчиков, написавших код, не обладает такими навыками.
Кирк Бродхерст

1
@KirkBroadhurst: Если так, значит, что-то не так в вашей компании.
СБи

@Sbi Я думаю, что вы найдете что-то не так во многих компаниях. Компания OP предлагает перевести непрограммиста (но он «умный парень»!) На роль поддержки приложений. Я не знаю, где вы работаете ... но по моему опыту это "реальный мир". Действительно хорошие, компетентные программисты являются исключением - как и в большинстве отраслей, большинство людей делают достаточно хорошо, чтобы обойтись.
Кирк Бродхерст

1
@KirkBroadhurst: Где я работаю, это мое решение. Я бежал из компаний за некомпетентность, и я бы убежал, если бы ни один из разработчиков не знал хотя бы о большинстве этих вещей.
ВОО

7

Я бы не стал запускать их на .NET. Я делал эту ошибку слишком много раз. Не позволяйте работодателю заставлять вас создавать некомпетентного программиста из-за времени. .NET может быть быстрой платформой разработки, но она не заставляет разработчиков изучать программирование. Только в C # вы обнаружите, что разработчик застрял на ссылочных типах, времени жизни объектов, они оставят огромные утечки памяти (да, это возможно в .NET) и будут иметь плохой дизайн. Было бы намного лучше запустить их на C или C ++ (возможно, на c ++, поскольку им нужно будет использовать концепции ООП), а затем сказать что-то вроде: «Теперь было бы неплохо, если бы ваша память управлялась для вас, каждая вещь была объектной -ориентированы, а вам не приходилось иметь дело со всеми этими мерзкими указателями? " Вот C # и JAVA. Если они освоили c ++, они победят как через неделю, так и две. Я рекомендую полк Джоэла. Это был список, который дал мне мой учитель по CS 101, и я почувствовал себя намного лучше, когда приступил к численному анализу. Это также позволит вам узнать ранее, будет ли кандидат нарезать горчицу или нет. Кроме того, как только вы получите c и c ++, вы автоматически поймете c # и java после прочтения введения в книги. Вы не только поймете их, но и поймете их лучше, чем те, кто не знает c и c ++.


4
«Теперь не было бы хорошо, если бы ваша память управлялась для вас, каждая вещь была объектно-ориентированной, и вам не приходилось иметь дело со всеми этими мерзкими указателями?» Вы имеете в виду Вот STL. Подождите, что Почему ты не научил меня использовать STL в C ++ с самого начала ?!
Рейнос,

Ну, STL сладкий. Я имею в виду больше API-интерфейс Windows, насколько это касается программирования Windows. Windows API не разработан с учетом ООП. Я считаю отличным упражнением заставить бедного парня написать приложение, использующее API в c ++. Затем я заставляю его / ее написать класс Window и инкапсулировать цикл обработки событий… ну, вы знаете, сделайте его объектно-ориентированным. Затем, после того, как они наконец заработали, я показываю им Windows Forms. Это действительно заставляет их иметь дело с некоторыми основными понятиями - то есть, как работает приложение Windows - которые кто-то никогда не получит, если они просто запрыгнут в .NET.
Джонатан Хенсон

4
Зачем кому-то трогать Windows API с палкой. Я имею в виду, говорили о hWND80-х, верно? Очевидно, что вместо этого вы используете хорошую абстракцию (какая абстракция - совершенно другая дискуссия). Конечно, хорошо знать, как это работает под капотом, но вам не нужен C # .NET для абстракции
Raynos

2
API для Windows потрясающий. В любом случае, я использую его только в качестве учебного пособия. Например, люди обычно не понимают, как события волшебным образом запускаются в программах Windows. Им полезно дурачиться с циклом событий. Кроме того, программисты должны, по крайней мере, быть знакомы с hWND, особенно если они будут иметь дело с любым API-интерфейсом, который дурачится с графикой - так же, как вам будет трудно делать что-либо в Unix, не зная, как использовать XID. В любом случае, это заставляет их изучать, как работает программа Windows. Кроме того, как только они закончат, они знают, как работает Windows.Forms.
Джонатан Хенсон

Это не должен быть переход к C # btw, просто к .NET в целом. Я думаю, что у @Joel есть хорошая статья о законе утечек абстракций о том, почему программистам часто полезно заглянуть под капот, прежде чем использовать фреймворк.
Джонатан Хенсон

6

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


6

Парное программирование. Позвольте им скрывать вас, пока вы пишете свой собственный код - любой код. Через несколько часов они попросят вас ввести ваш код, а вы скажете им, что делать, нажимая клавишу, даже если это необходимо. Ответьте на несколько их вопросов, но не настолько, чтобы вы сильно замедлились - просто дайте им впитать все это. Они также обнаружат ваши опечатки и больше ваших ошибок, чем вы думаете. Через несколько дней они смогут начать «навигацию», сообщая, какой код вводить для задач, аналогичных тем, которые они видели ранее.

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


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

Да, научите их работать с парным программированием и дайте простые задачи - реальные задачи, на программном обеспечении, над которым они должны работать, на языке, на котором они должны работать, с реальным достижением. Просмотрите и наставник всей их работы, и они будут прогрессировать.
Томас В.

2

Дайте ему хорошую идею (визуальные студии, экспресс все еще хорош). Обучите его общепринятым 60% синтаксиса (пропустите yield, linq, перечисления, атрибуты и т. Д., Проведите занятия, виртуальные и переопределите). Потратьте время на отладчик (особенно на стек вызовов). Затем скажите ему, чтобы он гуглял "msdn functionanme" всякий раз, когда ему нужна помощь, и это должно помочь ему быстро начать работу.

Также научите его никогда не ловить и не глотать исключения. Скажите ему, что он должен сбросить или записать это!

Бонус: научите его, как сериализовать данные JSON, чтобы он мог легко читать / записывать в файл. БД является излишним и слишком многим для изучения, и вы не хотите, чтобы он писал пользовательские форматы файлов, хотя я могу разрешить проходить по одной записи на каждый тип строки, чтобы сохранить / загрузить массив строк как приемлемый.


1

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

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

Далее идут основы языка. Начните их на выбранном языке. Дайте задачу программе.

После того, как это первое сокращение закончено, заставьте их выполнять основы CS и шаблоны проектирования.

Теперь заставьте их перепрограммировать ранее возникшую проблему с помощью этих новых концепций.


1

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

Язык не имеет значения, но выберите что-то, что вы знаете, и это очень абстрактно (java, python и т. Д.), Так что ему не нужно беспокоиться о таких вещах, как управление памятью, указатели и т. Д. Научите основам рекурсия, башни ханио или рекурсивно ищущие каталоги.

Научитесь программировать - хороший бесплатный ресурс по программированию на Ruby. Сделайте это забавным, легким и интересным.


1

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.