можно ли обучиться программированию самостоятельно с нуля
Обучение программированию с азов
Подрастающий в семье ребёнок рано или поздно начнёт приставать к папе или маме, занимающемся программированием дома:
– А что это ты делаешь?
– А что значит это слово?
– А почему здесь зелёненькие буквы, а здесь синенькие?
И обязательно придёт к главному вопросу:
– А ты научишь меня программировать?
Мне этот вопрос тоже был задан. Я оказался не готов к ответу. И начал размышлять над проблемой. Как приобщить ребёнка (около десяти лет) к этому интересному и увлекательному занятию?
Далее некоторые мысли на эту тему и к чему они меня привели…
Небольшое пояснение, для дальнейшего изложения. Я профессионально занимаюсь разработкой на Java. Мне этот язык и платформа хорошо знакомы. Я не считаю Java слишком трудным для изучения, даже как первого языка программирования. Как и другие языки, Java можно изучать постепенно, не погружаясь сразу в дебри ООП.
Я придерживаюсь того мнения, что азы программирования должен понимать любой современный человек. Это как знать математику в объёме начальной школы. Мы все пользуемся калькуляторами и электронными таблицами, но всё равно умеем складывать и умножать на бумажке или в уме. И обучаем этому детей. Так же и с программированием — человек должен владеть навыками алгоритмизации и иметь представление о том, как реализовать придуманный алгоритм на каком-нибудь языке.
Таким образом стоит задача познакомить ребёнка с программированием. Хорошо бы при этом не уничтожить зарождающийся интерес. Что мне удалось найти:
Scratch и другие визуально-игровые системы
Лично я такими никогда не пользовался. Уверен, что многим детям нравится в них играть и заниматься. Для моих целей такое мало годится т. к. я вижу в них слишком большую развлекательную составляющую.
Многочисленные онлайн курсы по обучению программированию
GeekBrains, JavaRush, Codecademy и другие. Опять же, в силу давности приобретения профессии, курсы не проходил. Просмотрел их маркетинговые материалы и пробные уроки. Так же не счёл их подходящими. Либо материал даётся не с азов, либо обучение слишком нацелено на дальнейшее трудоустройство. Общее впечатление — это не для обучения младших школьников, а скорее для овладения профессией.
Учебная литература
Нагуглил книгу Якова Файна «Программирование на Java для детей, родителей, дедушек и бабушек». Несколько устарела, но возможно как вспомогательное чтение подойдёт. Подробное изложение в первых главах как поставить и настроить JDK и Eclipse не каждого вдохновит на дальнейшее изучение. Лично на меня такие описания нагоняют сильную тоску и уныние.
Так же есть «Философия Java» Брюса Эккеля — хороший учебник. Но детям я бы его рекомендовать не стал.
Итак, мне не удалось найти идеальную систему обучения ребёнка программированию, но зато я выработал набор критериев, которым она должна удовлетворять:
Я согласен что программист должен владеть английским хотя бы на уровне «чтение документации». Но мы сейчас говорим не об обучении программиста. Возникающий на этом этапе обучения языковой барьер может стать непреодолимым препятствием и очень быстро погасить энтузиазм ребёнка. Именно поэтому я считаю русификацию всего и вся критически важной.
Интегрированная среда обучения
Как вы уже начинаете догадываться, я подхожу к сути статьи. Не найдя идеального в окружающем мире, я, как и многие из нас, решил создать его сам. Так уж у нас, программистов издревле заведено. Задача мне показалась интересной и выполнимой за конечное и разумное время.
Рабочее название проекта «Java класс». Идея следующая. Настольное приложение — «интегрированная среда обучения». Скачал, установил и сразу можно читать уроки, писать код и запускать его на выполнение.
Технология JavaFX. Среда может находится в трёх режимах: чтение учебных материалов, работа с исходным кодом и выполнение запущенной программы.
Режим: чтение учебных материалов
Здесь можно читать доступные уроки и документацию. Предполагается возможность скачивать материалы из онлайн хранилища.
Материалы будут авторскими. Предполагается разработка специального XML формата, для разметки текста. Внутри программы XML файлы будут преобразовываться в HTML документы и отображаться во встроенном браузере (WebView). В страницы будут встраиваться интерактивные элементы. Например, в конце текста урока будет стоять кнопка «Открыть проект» которая будет переводить среду в режим редактирования кода с загруженным примером из урока.
Для основных классов стандартной библиотеки предполагается написание минимальной документации на русском языке в стиле javadoc. Эта документация будет также доступна в виде контекстной справки в редакторе кода.
Режим: работа с исходным кодом
Код организуется в проекты, которыми можно управлять. Операции с файлами только основные — создать/добавить, удалить и «Сохранить как. ». Из редакторов пока будет только редактор java-кода. Изменения сохраняются автоматически. Код компилируется автоматически. Используется компилятор ECJ из проекта Eclipse JDT, что обеспечивает поддержку современной версии языка. Помимо прочего, это позволяет полностью перевести на русский язык все сообщения компилятора.
Для подсветки синтаксиса и ошибок компиляции используется библиотека richtextfx. Функцию code completion делать не предполагается.
Если в редактируемом java-файле есть метод main() то будет доступна кнопка запуска программы, которая переводит среду в режим выполнения кода.
Режим: выполнение запущенной программы
В этом режиме показывается консоль выполняемой программы, информация о программе, кнопки управления выполнением. Будут разработаны специальные инструменты для организации обучающих платформ с интерактивным визуальным взаимодействием. Т.е. консоль — это не единственное возможное проявление работающей программы.
Сейчас идёт работа над прототипом. Реализованы следующие функции:
Работа ведётся как над самой средой, так и над созданием цикла уроков «Java для начинающих», которые должны войти в начальную версию системы.
Что вы думаете обо всём сказанном? Нужна ли такая штука кому-либо кроме меня? Буду благодарен за высказанные замечания и конструктивные предложения. Также очень интересно услышать рассказы о вашем опыте вовлечения детей (и не только) в мир настоящих ИТ.
Программирование для начинающих: как стартовать и куда двигаться?
Бывает, что человек, совсем не связанный с IT, проникается интригующей красотой этой сферы и ставит себе задачу постепенно освоить программирование с нуля. И тут он зачастую просто теряется, не понимая, с чего начать, и нуждаясь в хорошем фундаменте и системном подходе.
Я, будучи недавно в такой же ситуации, гуглила, искала мануалов на Хабре (кое-что нашла: Десять советов начинающим программистам, Начинающему программисту про стартапы и не только…), но в итоге всё же была вынуждена обратиться за советом к одному хорошему человеку, который составил для меня вот такой план. С разрешения этого человека размещаю данный план на Хабре – вдруг он пригодится и кому-то ещё. (Тем более, что перечисленные книги относятся к «золотому фонду» литературы в данной сфере и проверены временем.)
UPD: Новичкам советую обратить внимание на комментарии — там активно и аргументированно корректируется этот план.
Нортон «Программно-аппаратная организация IBM PC»
Эта книга, несмотря на свою давность, относятся к тем, что пока отнюдь не устарели. Как новичок подтверждаю – повествование вполне понятно и для почти полного чайника в IT.
Гук «Аппаратные средства IBM PC»
А эту книгу стоит прочитать «поверх» – она расскажет о том, как дела в данной сфере обстоят сейчас.
Морс, Алберт «Архитектура микропроцессора 80286»
Почему тут берётся за основу именно микропроцессор 80286 – станет понятно по изучении трудов первого этапа.
Гук «Аппаратные интерфейсы ПК»
Гук «Интерфейсы устройств хранения»
Этап III. Операционные системы
Таненбаум «Архитектура компьютера»
Колисниченко, Аллен «Linux: полное руководство»
От общей теории переходим к изучению конкретной операционной системы – на примере Linux.
Немет, Снайдер, Хейн «Руководство администратора Linux»
Этап IV. Собственно программирование
Керниган, Ричи «Язык программирования С»
Почему первым для освоения выбран именно язык Си? Как мне рассказали знающие товарищи, он поможет достичь правильного «программистского мышления», чего было бы сложно достичь, начиная изучение, скажем, с Паскаля. Кроме того, язык Си по-прежнему используется в наши дни и подходит как для прикладного, так и для системного программирования.
Кнут «Искусство программирования»:
Том 1. Основные алгоритмы
Том 2. Получисленные алгоритмы
Том 3. Сортировка и поиск
Бентли «Жемчужины программирования»
Зачем осваивать эти труды? Как уже отмечали на Хабре – «наверное, нигде больше, чем в айти, не изобретается такое огромное количество велосипедов». Данные книги помогут этого избежать – и попутно будут прививать умение писать не просто код, а хороший код.
Ну а для затравки можно прочесть небольшой цикл лекций «Культура программирования» (автор – А. Бабий). Он помогает начинающим программистам понять, что их деятельность не будет проходить в вакууме, а неизбежно включит взаимодействие с другими программистами, с заказчиками и пользователями (а также включит необходимость копаться потом в своих собственных или в чужих программах).
Закономерный вопрос новичка: сколько времени займёт изучение всего этого? По прогнозам моего советчика, у человека, который может тратить на изучение программирования только вечера и выходные, на прочтение и осмысление литературы первых трёх этапов уйдёт полгода-год. На четвёртый этап тоже даётся год – чтение должно сопровождаться практикой по самостоятельному составлению программ. Как получится на самом деле – время покажет.
Буду крайне благодарна за ваши советы и уточнения.
Как я сам научился программировать за 8 недель
Для многих, кто никогда не программировал, обучение программированию кажется невероятно сложной задачей. Как бы то ни было, спасибо тому огромному количеству ресурсов, которые недавно стали доступны в Интернет и являются бесплатными — самообучение программированию никогда еще не было таким простым.
Я начал изучать программирование в начале этого года, и могу сказать по своему опыту, что изучение достаточного количества материала, чтобы создать свой собственный прототип не такая уж и сложная задача, как вам кажется. В самом деле, если вы хотите иметь рабочий прототип в течение двух месяцев, не прибегая к использованию отгулов, это абсолютно выполнимая задача.
Ниже я описал простой путь от ничего не зная о разработке программного обеспечения до обладания рабочим прототипом за восемь недель, который примерно повторяет шаги, которые я выполнил.
Получение начального понимания языка программирования Python и общих методов программирования (2 выходных дня):
Эти два ресурса немного взаимозаменяемы. Я рекомендую делать первые несколько уроков из обоих чтобы увидеть, какой вам больше нравится. После того как вы закончили один из них, просмотрите в другом те понятия, которые усвоились не в полной мере, это хороший способ получить дополнительную теорию и практику.
Получение начального понимания веб-фреймворка Django (1 выходной):
Во второй раз я не был так сосредоточен на новизне концепции и смог сосредоточиться на понимании того как все части взаимосвязаны.
Получение более глубокого понимания Python / общих концепций программирования (4-8 выходных дня):
Опять же, я хотел бы рекомендовал попробовать каждый из них и посмотреть, какой вам понравится больше. Я делаю оба, но это, наверное, перебор.
Практика построения простых веб-приложений (2 выходных дня):
Создайте свой прототип (2 выходных дня):
Вот и все. 8 недель (или меньше) и вы ушли от ничего не зная о разработке программного обеспечения до рабочего прототипа. Не так уж и сложно, так ведь?
Следующие шаги:
Само собой разумеется, что существует огромная разница между относительно беглым объемом знаний, необходимого для создания простого прототипа (в разрезе данного поста) и объемом знаний и опыта, необходимые, для того чтобы стать действительно квалифицированным инженером-программистом.
С чего самостоятельно начать обучение программированию: этапы освоения профессии и советы новичкам
История о том, как стать программистом с нуля
Здравствуйте, уважаемые читатели!
Решили сменить сферу деятельности, и выбор пал на программирование? Прекрасно! В этой области много востребованных, прибыльных, творческих и вдохновляющих профессий.
Но прежде чем начать обучение, подумайте и ответьте на пару вопросов: нравится ли вам программирование, готовы ли вы ежедневно посвящать этому делу время, искренне ли интересуетесь информационными технологиями, нужно ли вам вообще программирование? Если ответ на все вопросы “да”, прошу читать дальше. В противном случае, построить карьеру в IT-сфере будет весьма трудно.
Читайте статью, если хотите узнать с чего начать обучение программированию с нуля, как освоить IT-сферу самостоятельно и с помощью онлайн-курсов, кто такой программист, что надо знать, чтобы им стать.
Кто такой программист
Программист – это человек, который разрабатывает программы и алгоритмы для решения определенных задач. В своей работе он использует математическое моделирование, на основе которого пишет код. Продуктами работы программистов могут быть компьютерные игры и операционные системы, сайты и приложения.
Стать программистом может любой человек, независимо от пола и возраста. Но он должен искренне интересоваться компьютерами и веб-технологиями, ведь они непрерывно развиваются и меняются, поэтому специалисту надо мониторить изменения и постоянно обновлять знания.
Программисты обладают такими качествами, как:
Также у большинства есть высшее, чаще всего техническое, образование. Если же это гений-самоучка, то ему не помешает наработать стаж, чтобы получить должность в известной компании.
Что нужно знать и уметь
Работу программиста не назовешь простой и понятной. Для освоения этой профессии понадобится немаленький багаж знаний и умений. Сотрудник должен иметь способности к многозадачности, уметь находить контакт с коллегами, знать иностранный язык и язык программирования.
В остальном же краткий перечень требований выглядит следующим образом:
И это лишь часть того, что должен уметь делать программист.
Как стать программистом с нуля
Прежде всего надо изучать теорию алгоритмов и структур данных. Они не зависят от конкретного языка, наоборот, языки программирования устроены в соответствии с алгоритмами и структурами.
Язык – это просто инструмент для решения бизнес-задач. Поэтому новичку надо определиться с тем, как решать задачу, разбить это решение на этапы, оптимизировать процесс, чтобы не тратить время и ресурсы впустую.
После освоения алгоритмов и структур данных нужно выбрать направление программирования. Лишь потом можно приступить к изучению веб-технологий и инструментов. Это серверные языки и языки разметки, стили CSS и JavaScript, веб-фреймворки, подходящие к выбранному языку программирования.
И напоследок научиться работать с базой данных.
Подбор направления
Перед изучением языка надо определиться с направлением. У программирования широкий спектр возможностей и вариантов работы. Можно создавать сайты и мобильные приложения, игры, социальные сети, интернет-магазины, разрабатывать операционные системы и программное обеспечение.
По основной классификации программистов делят на прикладных, системных и веб-разработчиков.
Прикладные создают программы и приложения, которые решают конкретную задачу. Примерами прикладных программ могут быть онлайн-переводчики, аудио- и видеоплееры, игры, редакторы‚ мессенджеры и т. п.
Системные занимаются разработкой операционных систем и драйверов, а также условий и инструментов для их слаженной работы. Благодаря программистам сервис может работать как единый механизм. Специалисты предотвращают или устраняют перебои и ошибки в работе целого ряда программ на предприятии.
Веб-программист работает над созданием веб-сервисов и пишет для них программную составляющую. Соцсети, интернет-магазины, информационные сайты, форумы и прочее – все это труды специалистов по работе в сети.
Выбрать направление деятельности можно среди доступных профессий:
И это только часть должностей, которые может занимать программист.
Для каждой работы нужен свой инструмент, который может не подходить для создания чего-то другого. Поэтому направление – решающий фактор при выборе языка программирования для изучения.
Выбор языка программирования
Когда начинающий специалист встает перед выбором языка, ему надо учитывать количество имеющихся на рынке труда вакансий и выбранное направление.
Можно найти предложения о работе, в которых сразу написано, с каким языком надо будет работать, например, PHP-программист или программист Python.
Если же отталкиваться от направления, то надо знать, что веб-разработчик пользуется C++, Python, Java. Системный программист – Assembler, C, C++, Python. Администратор базы данных – SQL.
Ниже приведены самые распространенные и популярные представители языков программирования:
Чтобы изучить язык, сначала надо разобраться с его синтаксисом, т. е. ключевыми словами, операторами, правилами написания кода. А дальше можно перейти к более сложным конструкциям.
Если к этому времени специалист еще не приступал к изучению фреймворков, структур и баз данных, то сейчас эти знания просто необходимы. Не надо бросаться на все сразу, лучше выбрать что-то из основного: Git, SQL, HTML, CSS, XML, JSP, Maven, Spring, ORM, REST, MySQL, PostgreSQL.
Самообразование
Книги хороши тем, что их можно читать и учиться бесплатно, и тем, что они быстро погружают в тему. Рекомендую следующие пособия:
Можно использовать бесплатные обучающие платформы, сайты и приложения, форумы, где делятся своим опытом профессиональные программисты. А можно положиться только на самостоятельное обучение, но такой путь сложен для новичка. Лучше совмещать его с другими методами, например, с онлайн-курсами.
Онлайн-курсы
Новичку предлагаются курсы от онлайн-платформ GeekBrains, Нетологии, Skillbox, Coursera, beONmax. Постигать азы сферы информационных технологий можно в своем темпе и в домашних условиях. Так цена будет ниже, чем обучение в вузе.
Обучение предполагает как теоретическую, так и практическую часть. Нередко выпускники курсов имеют портфолио, диплом или сертификат, подтверждающий их навыки и знания.
Предлагаю ознакомиться со следующими обучающими программами:
Составление резюме и портфолио
Можно начать работать на бирже, чтобы было что написать про свой опыт в резюме и добавить работы в портфолио. Для первого реального опыта подойдут и небольшие проекты. Главное – начать.
Лучше выбирать иностранные биржи, особенно если есть знания английского языка. Там и заказов больше, и доход выше. Подойдут, например, Upwork и YouTeam. Если говорить о русскоязычных биржах, то популярны Kwork, FL.ru и Freelance.ru.
Заполнить портфолио могут помочь и собственные проекты, если есть идеи, возможность и желание.
А дальше можно уже перейти на специализированные сайты с вакансиями только для программистов, например, We Work Remotely и Хабр Карьера. А можно поискать работу на таких ресурсах, как hh.ru или SuperJob.ru.
У специалиста должно быть резюме, когда он откликается на вакансию. В нем надо указать правдивые факты о проектах, в которых он участвовал, и свои достижения на этой работе. Не помешает рассказать и о собственных проектах, если они есть. Это показывает профессиональный уровень и любовь к IT-сфере.
Надо указать свои знания и навыки, но не на несколько страниц, а коротко, четко и лаконично. Нужно писать саму суть, без воды.
В портфолио лучше указывать несколько самых лучших проектов, которыми специалист если не гордится, то хотя бы доволен ими.
Советы новичкам
Создайте план обучения, разбив его на этапы, рядом с которым пропишите, что именно надо выучить и с помощью каких средств. Переход от одного этапа к другому должен быть по мере увеличения сложности.
Не растягивайте обучение на полдесятка лет. Информационные технологии имеют способность быстро развиваться. И пока вы тщательно изучаете какой-то инструмент программирования, он уже может быть заменен на что-то более современное.
При обучении используйте все материалы, сервисы и знания других людей, которые будут доступны. Не пренебрегайте ничем.
При возможности общайтесь с практикующим программистом, у которого есть опыт работы. Если он согласится курировать над новичком, направлять его, указывать на ошибки и давать задания для развития – это будет отличным дополнением ко всему обучению. Особенно если начинающий специалист обучается самостоятельно.
Узнайте больше об архитектуре компьютера.
Учите английский. Большинство обучающих программ представлены на этом языке. Есть и русскоязычные, но их значительно меньше. Без иностранного языка сложно что-то найти в англоязычном интернете. А уже непосредственно при работе программисты сталкиваются с английским во время чтения и написания кодов.
Заключение
Подведем итоги. Чтобы начать обучение программированию, надо следовать поэтапно. Сделайте следующее:
И в качестве общих советов:
Как начать программировать?
Для кого эта статья?
В первую очередь для тех, кто интересуется программированием, но не знает как к нему подступиться.Ведь это неизвестность, которая всегда пугает.
Ко мне периодически обращаются юноши, которые горят желанием программировать, но теряются. Действительно, есть много такого, что хочется создать своими руками. Много разного. Чаще всего молодёжь хочет написать крутейшую игру, которая будет работать на слаааабенькой видеокарте 🙂 Мне приходится их разочаровывать. Дело в том, оптимизация программы не менее сложная работа, чем её написание. целые команды профессионалов работают над этим. И наивно полагать,сто один разработчик,который только начал изучать азы программирования окажется более эффективным в этой задаче. Задача «крутая игра на слабом железе» возникает от невозможности позволить себе дорогую видеокарту. Обычно такую задачу ставят себе старшеклассники, либо студенты начальных курсов институтов.
Один из моих студентов со временем понял, что заниматься WEB программированием (не путать с вёрсткой) намного интереснее. А крутую видеокарту можно купить на нормальную зарплату программиста, без особого ущемления других своих потребностей.
Платформы
Итак, первым шагом определяем, что именно хочется программировать. В какое именно устройство вложить свой мозг и для чего это нужно именно Вам (может, просто для высокой зарплаты).
Основных направлений не так уж много:
Мобильные приложения (Android, iOS)
Виртуальная и дополненная реальность AR/VR
Мультимедиа (Фото, видео и звук)
Встроенные системы и IoT(типа, Arduino, STM32, AVR, ESP и т.п.)
Наверняка есть ещё направления. Более экзотические. Или комбинации из перечисленных. Например, дополненная реальность в мобильных приложениях.
Выбирайте, с какими устройствами Вы хотите работать и переходим к следующему шагу.
Инструменты и технологии
Лёгкий старт
Для того, чтобы новичку придать начальное ускорение в каждом развитом технологическом решении (платформа + инструмент) есть примеры готовых приложений, которые можно просто собрать и запустить на выполнение. Посмотреть как оно работает. Поизучать какие изменение в тексте программы как влияет на исполнение приложения. Есть так же образцы кода, которые можно скопировать в своё приложение. На жаргоне программистов это называется «скопипастить» от слов Copy + Paste Правда, они могут не всегда работать 🙂
Живое сотрудничество
Тайные смыслы
Почему так сложно? Потому, что современное программирование давно и далеко ушло от своих истоков. Наработано огромное количество технологий, библиотек, компонетов и прочего кода, который хочется использовать повторно. На жаргоне это называется Reuse (реюз) Встают практические задачи совместно использовать один компонент с другим, одновременно использовать разные компоненты, в одном приложении или системе использовать различные технологии одновременно. Такая задача называется интеграцией. Сборкой чего-то целого из частей. И программисты часто сталкиваются с проблемой совместимости этих самых частей. возникают ошибки, конфликты сборки и исполнения, различия систем понятий. Чтобы разрешить проблемы нужно глубоко вникать в детали и подробности. Глубже и глубже. Делать предположения, проверять их. Затем тестировать. В общем, это целый мир. «Зазеркалье»
Хотите туда? Интересно? Тогда дерзайте.
Эта статья не претендует на введение в специальность.
Она была написана постольку, поскольку вопросы задаются и я на них отвечаю.