Обучаю с нуля программированию по собственной программе обучения.
Программа ориентирована на основополагающее введение в специальность. Изучение построено по принципу bottom-up (снизу вверх). От самых основ - элементов цифровой логики - до продвинутых техник - функционального программирования. Акцент делается не на заучивании готовых рецептов и не на изучении деталей конкретных инструментов, библиотек или фреймворков, а на системное понимание и инженерное мышление.
Главная задача программы - подготовить вас к самостоятельному и независимому освоению специальности.
Программа занятий условно делится на две части: подготовительная (задания на логику и микроархитектуру) и практика с вкраплениями теории по мере продвижения по заданиям.
Главные темы, включённые в программу:
- элементы теории информации
- кодирование информации
- дискретная логика
- элементы цифровой техники
- микроархитектура вычислительных машин
- низкоуровневое программирование (ассемблер)
- языки среднего уровня (C)
- работа с памятью
- базовые типы данных
- базовые алгоритмы
- элементы теории сложности алгоритмов
- языки высокого уровня (JavaScript или другой)
- элементы объектно-ориентированного программирования
- функциональное программирование
Основные языки, которые я преподаю, это JavaScript, Python, C, C# и Java.
Студент сам выбирает язык, который ему больше нравится или подходит, либо я рекомендую один из них на основе моего представления о студенте, его предпочтениях и интересах. Все языки скопом не изучаются).
Даётся большое количество заданий. Все они проходят полный code review.
И цель здесь не столько в том, чтобы решить конкретную задачу в заданных ограничениях, но и видеть альтернативные варианты, уметь оценивать плюсы и минусы каждого решения. Так же задания часто отсылают к конкретным задачам, возникающим в практике программирования, или знакомят студента с полезными понятиям.
Так же большое внимание уделяется качеству кода, а не только его корректности или быстродействию. Так как 80% реального кода, создаваемого программистами, не нуждается в высокой производительности, то на первое место встаёт вопрос о читабельности, простоте, понятности кода.
По сути предлагаемая программа представляет собой сжатый, облегчённый курс computer science, сильно модифицированный на введение именно в практическое программирование, плюс довольно глубокий курс непосредственно по основам программирования.
При обучении я стараюсь полагаться не только на развитие правильных интуиций через имплицитное обучение (пример, повторение, практика). но и на явное, эксплицитное обучение, акцентируя внимание на идиомах, мини-паттернах, алгоритмических элементах, возникающих в коде. Сквозной темой являются явные трансформации, правила преобразования кода, подкрепляющие интуитивное понимание кода и развивающее профессиональное программистское "зрение", мышление и память.
В рамках занятий студенту даются профессиональные термины и понятия, относящиеся к рассматриваемым темам - в том числе на английском языке. Они помогают не строить объяснения на сомнительных аналогиях и грубых упрощениях, а обсуждать предмет как он есть. Профессиональная лексика повышает точность вашего языка и возможности по выражению ваших мыслей. Знакомство с данным вокабуляром нужно так же для того, чтобы вы могли лучше самостоятельно искать информацию, читать технические статьи и документацию, книги, лучше понимать лекции по профессиональным вопросам и проще коммуницировать с другими программистами.
Занятия проводятся с использованием Skype, виртуальной доски и платформы для коллаборативной разработки.
Занятия записываются на видео и бесплатно высылаются студенту. (Записи доступны только самому студенту, они нигде не публикуются и никому не продаются.)
Я провожу занятия по 60 или 90 минут, от одного до трёх раз в неделю.
В любой момент вы можете прекратить обучение без объяснения причин и с полным возвратом предоплаты, если таковая была.
Обо мне: Я самостоятельно изучил программирование в 7 классе школы, не имея на тот момент ни интернета, ни компьютера. Закончил техникум и вуз по специальности. Имею целостное представление о специальности как с теоретической, так и с практической стороны. Работал системным администратором Windows, Linux, Web-программистом (HTML, CSS, JavaScript, PHP, Ruby), системным программистом (C, драйвера), прикладным программистом (Python, C#, Delphi) и программистом микроконтроллеров (AVR, ARM, x86). В свободное от преподавания время веду коммерческую и некоммерческую разработку, слежу за развитием отрасли, читаю технические статьи (в том числе научные), книги. Преподаю с 2018 года, и как частный преподаватель, и как преподаватель в центре повышения специализации.
P.S. Изучение основ программирования может занимать сотни и тысячи часов. Это очень индивидуально. При этом довольно сложно "попробовать" программирование (если у вас сразу нет ярко выраженных способностей к этому). Это примерно, как решить попробовать космонавтику. Поэтому обучаетесь ли вы сами, на курсах или с ментором - в любом случае я рекомендую больше внимания уделять системности ваших знаний и хорошей базе, тогда всё остальное в долгой перспективе будет вам даваться всё легче и легче. Однако я со своей стороны не являются коучем по личностному росту или психологом (у меня нет даже педагогического образования), и я не буду вас мотивировать или подбадривать, но, с другой стороны, я и не буду вас ругать или осуждать. Только вы сами можете стать программистом или программисткой, ментор может вам только помочь в этом.