Как стать автором
Обновить

Комментарии 7

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

Программирование — это не умение писать код, а умение из десятков разных алгоритмов решения задачи выбрать оптимальный для данных конкретных условий. И теория нужна для того, чтобы:
  1. Научится видеть всё многообразие алгоритмов решения данной задачи.
  2. Научиться оценивать оптимальность каждого из этих алгоритмов в данных условиях.

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

И работа в команде тут не поможет: совместное обсуждение задачи группой неучей не приведёт к нахождению оптимального решения — даже если это оптимальное решение и возникало в процессе обсуждения.

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


Именно такую систему обучения мы и строим. Пример: если вы только начали изучать материал, то первая проблема может быть установить JDK. Сегодня нетрудно в сети найти, что такое Java, что такое JDK/JRE, как это установить, чтобы решить эту первую проблему. Помимо этого, в каждой группе мы специально набираем как людей без опыта, так и более опытных людей, которые приходят к нам чтобы прокачать свои soft skills и попробовать себя в роли наставников. После полугода работы мы уже довольно неплохо представляем набор и сложность проблем, которые нужно давать студентам, чтобы они были решаемы, но при этом еще и сложны ровно настолько, чтобы студенты изучили необходимый материал.


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


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

Невозможно адекватно «объяснить непонятное», если ученик не владеет знаниями, необходимыми для понимания объяснения. И прежде, чем ментор сможет объяснить, почему в данных конкретных условиях оптимальным будет именно этот конкретный алгоритм, ученик должен изучить, что такое O-большое и как именно оно связано с реальным быстродействием разных реализаций данного алгоритма, применённых к разным наборам входных данных. Ту самую теорию, необходимость которой вы отрицаете.

Да, есть и другой путь: вульгаризировать объяснение до уровня неуча. Но это не обучение, а его имитация, дающая лишь иллюзию понимания без реальных знаний.

Всё, о чём вы говорите — не теория. Теория — курс дискретной математики (от начал булевой алгебры и матлогики до «Конкретной математики» Кнута). Теория — сравнительный анализ алгоритмов сортировки у Вирта («Алгоритмы и структуры данных») или Кормена («Алгоритмы. Вводный курс»). Теория — основы алгоритмики, никак не зависящие от используемых языков программирования…

Установка Java SDK — системное администрирование, не имеющее отношения к программированию. А ReadLine — частная практическая задача, прибитая гвоздями к конкретному языку программирования. И строить «всеобъемлющую теорию» на одной частной задаче в одном частном языке программирования — это, мягко говоря, абсурд.

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

И если ученик не понимает, что такое «вычислительная сложность» (теория), то никакое сравнение разных решений не поможет ему научиться выбирать из множества решений лучшее.

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

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

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

Например, возьмем Питон. Достаточно простой язык, мне лично вполне хватило пары недель, чтобы понять его основы и принципы. С его помощью делал разбор внешних субтитров и пересборку обучающего видео (путем добавления двуязычных субтитров, повторов и пауз, примеры можно посмотреть на my.mail.ru/mail/emmerald/video/_myvideo ). Цель – разработка технических средств, для облегчения изучения французского языка).

Но всего этого оказалось недостаточно. Главное, как я понял, это словарный запас и программа для его освоения. Прототип подобной программы у меня есть ( scholium.webservis.ru ), но древний, сейчас пишу новый вариант на C++ / WTL. Здесь особых проблем нет. Однако для новой программы мне нужны озвученные слова и фразы, которые можно будет выбирать по определенному алгоритму из некой базы данных, которую еще предстоит создать.

Вот мы и приходим плавно к практической задаче, на которой лично я пока застрял. В сети есть масса хороших онлайн словарей, например, для конкретного слова «passer»: www.larousse.fr/dictionnaires/francais-anglais/passer/661830.

Задача состоит в том, чтобы эту страницу (которую можно предварительно скачать к себе на компьютер) преобразовать в полный файл данных, типа *.json либо подобный. Я перепробовал много способов и вполне уверенно извлекаю примерно 90% данных (у которых однозначная структура метаданных). Но данные с «плавающей» структурой извлекаются плохо.

Да, я понимаю, что это чисто алгоритмическая проблема, но не сверхестественная для Питона. Скорее, наоборот, это должна быть типовая задача для него, особенно, с использованием специализированных инструментов, типа lxml / etree / xpath и аналогичных.

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

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

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

Это все, конечно, здорово, но одни ученики не смогут выдать качественное решение. Нет у них для этого достаточно знаний (как правило). Задачи должен готовить преподаватель, увлечь ими учеников, чтобы те попробовали свои силы в их решении, а потом дать образцы их решения. Подобная форма очень удобна для Интернета, формата форумов и т.п.
Наставник не панацея. Мотивация — да.
Изучаю Python непрофессионально, как хобби. Начинал в прошлом году с курсов аналогичных описанных здесь. Получил четкое ощущение, что начал разбираться и понимать язык.
Чтобы углубиться купил книги уважаемого Лутца. И вот тут-то истина меня и накрыла, знать то знаю, но знания настолько обрывочны и границы как раз в рамках пройденных курсов. И для реального применения в работе, или в моем случае для хобби этого очень сильно не хватает.

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

Публикации

Истории