Хочу научиться программированию с нуля самостоятельно с чего начать
Как начать программировать?
Для кого эта статья?
В первую очередь для тех, кто интересуется программированием, но не знает как к нему подступиться.Ведь это неизвестность, которая всегда пугает.
Ко мне периодически обращаются юноши, которые горят желанием программировать, но теряются. Действительно, есть много такого, что хочется создать своими руками. Много разного. Чаще всего молодёжь хочет написать крутейшую игру, которая будет работать на слаааабенькой видеокарте 🙂 Мне приходится их разочаровывать. Дело в том, оптимизация программы не менее сложная работа, чем её написание. целые команды профессионалов работают над этим. И наивно полагать,сто один разработчик,который только начал изучать азы программирования окажется более эффективным в этой задаче. Задача «крутая игра на слабом железе» возникает от невозможности позволить себе дорогую видеокарту. Обычно такую задачу ставят себе старшеклассники, либо студенты начальных курсов институтов.
Один из моих студентов со временем понял, что заниматься WEB программированием (не путать с вёрсткой) намного интереснее. А крутую видеокарту можно купить на нормальную зарплату программиста, без особого ущемления других своих потребностей.
Платформы
Итак, первым шагом определяем, что именно хочется программировать. В какое именно устройство вложить свой мозг и для чего это нужно именно Вам (может, просто для высокой зарплаты).
Основных направлений не так уж много:
Мобильные приложения (Android, iOS)
Виртуальная и дополненная реальность AR/VR
Мультимедиа (Фото, видео и звук)
Встроенные системы и IoT(типа, Arduino, STM32, AVR, ESP и т.п.)
Наверняка есть ещё направления. Более экзотические. Или комбинации из перечисленных. Например, дополненная реальность в мобильных приложениях.
Выбирайте, с какими устройствами Вы хотите работать и переходим к следующему шагу.
Инструменты и технологии
Лёгкий старт
Для того, чтобы новичку придать начальное ускорение в каждом развитом технологическом решении (платформа + инструмент) есть примеры готовых приложений, которые можно просто собрать и запустить на выполнение. Посмотреть как оно работает. Поизучать какие изменение в тексте программы как влияет на исполнение приложения. Есть так же образцы кода, которые можно скопировать в своё приложение. На жаргоне программистов это называется «скопипастить» от слов Copy + Paste Правда, они могут не всегда работать 🙂
Живое сотрудничество
Тайные смыслы
Почему так сложно? Потому, что современное программирование давно и далеко ушло от своих истоков. Наработано огромное количество технологий, библиотек, компонетов и прочего кода, который хочется использовать повторно. На жаргоне это называется Reuse (реюз) Встают практические задачи совместно использовать один компонент с другим, одновременно использовать разные компоненты, в одном приложении или системе использовать различные технологии одновременно. Такая задача называется интеграцией. Сборкой чего-то целого из частей. И программисты часто сталкиваются с проблемой совместимости этих самых частей. возникают ошибки, конфликты сборки и исполнения, различия систем понятий. Чтобы разрешить проблемы нужно глубоко вникать в детали и подробности. Глубже и глубже. Делать предположения, проверять их. Затем тестировать. В общем, это целый мир. «Зазеркалье»
Хотите туда? Интересно? Тогда дерзайте.
Эта статья не претендует на введение в специальность.
Она была написана постольку, поскольку вопросы задаются и я на них отвечаю.
Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать
(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)
Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.
Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?
На ум сразу пришел бомж-программист, но после успеха с его приложением он предпочёл остаться «дзен-монахом». Есть ли еще примеры? Вдохновляющий пример, что научиться кодить может каждый — слепой программист. Когда я прочитал статью на Хабре «Смотря на код с закрытыми глазами», то понял, что нет преград, кроме собственных отмазок.
А у меня для вас есть три истории из моей жизни. Просто три истории.
История первая — ламер
Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.
Так вот как-то один из «богов» подозвал меня к монитору и спросил: «Так сможешь?». И показал прогу, которая ждала, когда пользователь введёт в командной строке любой символ, а потом поворачивала его на 90 градусов. Я был ошеломлен.
Наверное, меня это так зацепило, что я решил — во что бы то не стало, выучить все что можно, и стать самым крутым программистом. Заряда хватило на годы. Этот случай я позабыл, прошло несколько лет, и, вспомнив о нем, я написал не больше десятка строк на basic`e минут за 20. Программа работала идеально.
Вывод. Личные отношения с падаванами очень важны. Возможно, ваша простенькая программа определит судьбу человека и повлияет на выбор жизненного пути.
История вторая — первый шифр
Задумка была следующая: каждой букве русского алфавита мы приписываем массив из 5 символов в виде букв русского и английского языка, спецсимволы. При шифровании мы рандомно выбираем один из них. Получалась «расширенная» простая замена. Это сейчас мне понятно как его ломать, но тогда для меня была запредельная высота. Через 3-4 года я поступлю на компьютерную безопасность.
Вывод. Решать интересные задачи — это круто. Но гораздо круче придумывать и находить задачи самому.
История третья — триумф BASIC`а
Я уже 2 года «занимался» программированием. И тут в школе появилась… информатика. Меня почему-то отправили в слабую группу. Как узнал позже, моё лицо не понравилось преподавательнице и она посчитала, что я тупой. Мои друзья ворвались в кабинет к директору и сказали, что я занял призовое место на краевой олимпиаде по программированию. Начались, разборки, но мне было так пофиг, что я остался в слабой группе, где учили вводить цифры в Exсel. За первую неделю я сдал всю программу и спокойно ходил играть в Diablo 2 в компьютерный клуб.
А на олимпиаде был забавный случай. Разрешённые языки — C, Pascal, а я то был прожжённым бейсичником. Выкрутился. Задачу принимали в виде exe’шника, а я подсуетился и нашёл бейсик, который кует exe’шники. Программы проходили тесты, а сами тесты принимались на серваке. Одна задача была сугубо вычислительная. Давались координаты центров и радиусы двух окружностей. Требовалось выдать взаимное расположение окружностей в текстовом виде: пересекаются, касаются, одна в другой, совпадают, и прочие.
С формулами было возиться лень, и недавно я как раз разбирался с графикой. Задачу решил графически, рисовал окружность одним цветом, а потом «сканировал» попиксельно по второй окружности, втыкаюсь ли я в уже окрашенный пиксель. Был большой страх, что прога не сможет работать на серваке без монитора, но все обошлось — 10 тестов из 10. На разборе задач был звездный час. Полсотни человек решили задачу один в один как автор, какого же было их удивление, когда я рассказал свой способ.
Вывод. Школа — зло. Результат — круто. Нестандартное мышление — прикольно. Обходной путь есть всегда.
Зачем взрослым учиться программировать
У меня есть три ответа на этот вопрос. Они зависят от горизонта планирования:
— Цель на 1 неделю или месяц — это вызов. Это как пробежать марафон или забраться на Эльбрус, проверить не засохли ли мозги, выйти из зоны комфорта.
— Цель на год-два — это бабло. За это время можно научиться создавать ценность и работать удаленно. Или учить других. Очень многие хотят научиться программировать.
сам поискал 8 сентября:
на русском в 1000 раз меньше:
— Цель на 5-10 лет — развитие в целом. Во-первых, вы улучшите своё мышление. Во-вторых, вы сделаете неоценимый подарок детям. Они получат несколько лет форы в изучении программирования и у вас появится много чудных моментов совместного написания программ. Для полного счастья останется научиться играть в компьютерные игры, но это вы скорее всего уже умеете.
Как научиться программировать
Есть заезженная картинка на этот счёт:
Почему-то все сразу начинают советовать Кнута, Кормена и прочее, но неподготовленный человек сможет осилить только предисловие. Если совсем проблемы с самооценкой возьмите детскую книгу и напишите игру.
Если готовы приступить по-взрослому, то есть множество ресурсов для самообучения. От Coursera (раз, два) до всяких %имя%academy (codeacademy, htmlacademy и пр)
Если намерения совсем серьёзные, могу посоветовать курс «Врубиться в Ruby».
Во-первых, есть живой преподаватель с хорошим бэкграундом в разработке. Виталий Куреннов, 6 лет пишет на Ruby и больше года обучает всех желающих этому навыку, работал над Ruby проектами для Nokia и Avaya.
Во-вторых, есть группа единомышленников, работая бок о бок с которыми, у вас многократно повысятся шансы дойти до победного конца и освоить программирование до того уровня, когда оно начнет приносить прибыль.
— Никита, почему именно Ruby?
— Все просто, мы нашли очень хорошего преподавателя.
Про Ruby
Попробовать сделать первые шаги можно прямо сейчас, займет всего 5-10 минут.
Нашел шикарный ресурс с геймификацией и сразу из браузера tryruby.org
За 5 минут выполняем несколько заданий, получаем ачивку и переходим на следующий уровень.
А зомбяк не хотите ли? railsforZOMBIES.org
«Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.» Пол Грэм, «Побеждая посредственность»
Нашёл для себя удобную браузерную обучалку Learn Lisp The Hard Way
«За те годы, что я проработал в Viaweb, я прочитал множество объявлений о найме на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я делал после того, как проверял, доступна ли онлайновая демонстрация работы их программы, — смотрел список их вакансий. Через пару лет я научился отличать опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от описания требуемых кандидатур, тем менее опасна была компания. Самыми безопасными были те, кому требовались специалисты по Oracle. О таких не стоило беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или Java.
Если требовались программисты на Perl или Python, это уже было слегка пугающе — это значило, что компанией или, по крайней мере, ее технической частью заправляли настоящие хакеры. Если бы я когда-нибудь увидел объявление о найме на работу Lisp-хакеров, я бы обеспокоился не на шутку.» Пол Грэм, «Побеждая посредственность»
Ещё пара советов
Общие упражнения:
Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование на любом языке.
Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
Rosalind — это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
Ruby Quiz — серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.
Задачи из олимпиад по программированию:
UVa Online Judge — коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
Timus — то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
SPOJ — похож на UVA, с огромным числом языков программирования на выбор.
USACO содержит несколько задач на алгоритмы с руководством по их решению.
Под определённые языки:
Для Prolog, Lisp и подобных языков посетите P-99 и L-99, наборы из 99 задач для повышения вашей эффективности в данных языках.
Python Challenge — объединяет загадки и головоломки, которые помогут вам серьёзно прокачаться в Python.
4Clojure — набор упражнений по программированию, специально разработанных под Clojure, Lisp-подобный язык.
Учитесь программированию с этими замечательными сайтами
Содержание
Содержание
Решили изучить программирование, но не знаете, с чего начать? Сегодня мы поделимся с вами подборкой полезных сайтов, которые помогут освоить эту нелегкую науку. Но прежде, чем мы начнем, озвучим несколько непреложных истин, незнание которых сделает процесс учебы неэффективным.
Во-первых, конечная цель. Без ее постановки успеха не добиться. Если вы решили стать крутым программистом просто так или ради большой зарплаты, то это путь в никуда. Цели должны быть реальными. Например, выучиться ради трудоустройства, чтобы стать Junior-ом (младший программист). Золотых гор с такой квалификацией вам не видать, но несколько лет упорного труда и вы Middle с вполне достойной оплатой труда.
Но надо понимать, что это нелегкий путь. И что деньги — это хороший мотиватор только до тех пор, пока их не хватает. Если вы обеспечены (и не жадны патологически), то большая зарплата погоды не сделает и не заставит вас изучать программирование еще глубже.
Либо ваша цель создать игру, сайт или приложение для себя. Если у вас горят глаза и вам нравится программировать, то учеба будет легкой. Как показывает статистика, а также рассказы бывалых программистов, большинство (2/3 из них) — самоучки.
Во-вторых, определитесь с языком программирования (ЯП). Лучше всего начинать с относительно простых ЯП, например, PHP или Python. Изучать ООП (объектно-ориентированные ЯП) с нуля не стоит. Это сложно и непонятно. Ориентируйтесь на свою цель (что именно вы хотите создать и какой язык для этого подойдет лучше всего) и возможности (сколько времени сможете уделять учебе и прочие нюансы).
В-третьих, параллельно изучайте английский язык. Это поможет как с пониманием программирования (львиная доля документации ЯП на английском языке), так и с поиском работы. Программисты, знающие английский, куда более востребованы на рынке труда. Теперь непосредственно к инструментам обучения.
Русскоязычные сайты
Skillbox
Образовательная платформа, где обучают не только программированию, но и маркетингу, дизайну, управлению и т.д. Для будущих программистов доступно 28 различных курсов, охватывающих WEB-программирование, мобильную разработку, тестирование, создание игр и другие сферы. Плюс Skillbox — гарантированное трудоустройство после завершения обучения. По крайней мере, так утверждают создатели платформы.
ITVDN
Крупный образовательный проект, делающий упор на обучение посредством видеоуроков и видеолекций. Имеется обучение языкам программирования, разработка под iOS и Android. Здесь есть бесплатные вебинары, но все основные курсы — платные. Наличие интерактивного тренажера, а также программы обучения сотрудников выделяют ITVDN среди конкурентов. ITVDN занимает лидирующее место среди наших соотечественников, судя по отзывам.
Яндекс.Практикум
Яндекс предлагает освоить свыше 10 курсов, большая часть которых направлена на фронтенд-разработку. Здесь также есть курсы по аналитике данных, Data Science, алгоритмам, дизайну интерфейсов и другие. Вводные занятия Яндекс.Практикум бесплатные, а за оставшийся курс нужно будет заплатить.
Нетология
Платформа предложит вам 16 курсов, охватывающих различные сферы программирования: фронтэнд, бэкенд, мобильная разработка и т. д. Есть здесь и бесплатные уроки, но они больше для ознакомления, чем для серьезной учебы. Все курсы Нетологии по сложности разбиты на две части: для новичков и для профи.
GeekBrains
Огромное количество курсов как по программированию, так и по смежным профессиям. В список входит веб-разработка, Python-разработка, проджект-менеджмент, продакт-менеджмент, интернет-маркетинг и SMM, дизайн, а также разработка под Android. Плюсом онлайн-университета является то, что каждый курс подробно расписан. План обучения, преподаватели, знания, которые вы получите после обучения — все разжёвано и разложено по полочкам. Гарантированное трудоустройство тоже обещают.
Stepik
Очень разносторонний образовательный ресурс: здесь есть и платные, и бесплатные курсы. Причем как по популярным ЯП (Python, Java, C++), так и по машинному обучению, нейронным сетям, Data Science. А для тех, кто далек от программирования, есть курсы по гуманитарным наукам (даже по подготовке к ЕГЭ).
SkillFactory
13 курсов для программистов разного профиля, включая Data Science и аналитику. Помощь наставников и сертификат о прохождении обучения. В общем, все то же самое, что и у конкурентов, разве что образовательных программ поменьше.
HTML Academy
Ресурс, который специализируется на обучении веб-разработке, в частности HTML и CSS. Ознакомительный курс бесплатный, а за продвинутое обучение придется раскошелиться. Обучение происходит в игровой форме непосредственно в вашем браузере, что очень удобно.
Hexlet
115 курсов по верстке и программированию, обучение с наставником. Плюсы Хекслета – возможность пройти 21 бесплатный курс (PHP, Python, JS, Bash), практика в браузере, а также доступ к сообществу, где можно задать вопросы и обсудить встречающиеся в процессе обучения проблемы. Цены на услуги платформы демократичны.
JavaRush
Лучший русскоязычный проект для обучения ЯП Java. Обучение проходит в игровой форме с забавными диалогами и персонажами (слизанными под копирку с «Футурамы»). Упор сделан на практику. Полный курс включает в себя 1200 заданий, после выполнения которых вы станете крепким Junior Java Developer.
Javascript.ru
Еще один специализированный ресурс, который поможет освоить ЯП, фреймворки и другие технологии для WEB-программирования. Внушительная теоретическая база (бесплатно) и платные курсы длительностью от 5 до 6 недель — этого будет достаточно, чтобы овладеть необходимыми основами.
Англоязычные сайты
Codecademy
Одна из самых популярных образовательных зарубежных платформ. Здесь обучают всем самым востребованным ЯП. Базовые курсы бесплатные, для получения уровня «Профи» необходимо оплатить ежемесячную/ежегодную подписку.
freeCodeCamp
Проект в минималистичном стиле, который обучит вас Full Stack программированию на javascript. Обучение бесплатное и самостоятельное.
Pluralsight
Проект включает в себя как курсы по популярным ЯП, так и обучение по следующим направлениям: IT Ops, Data Professional, Architecture and Construction, Manufacturing and Design, Business Professional, Information and Cyber Security. Очень популярен за рубежом, если верить отзывам.
Udemy
Образовательная платформа позиционирует себя как «Самый большой выбор курсов в мире». Здесь можно как учиться, так и стать платным преподавателем. Помимо курсов, охватывающих практически все стороны программирования, на Udemy можно обучиться дизайну, маркетингу, музыке, фотографии и многим другим вещам.
Codewars
Ресурс предлагает изучить множество ЯП (включая редкие), но для того чтобы зарегистрироваться нужно доказать свои знания (достаточно знать основы выбранного языка). Для совсем чайников Codewars не подойдет. В подборку сайт попал только по причине своей популярности среди пользователей.
Coursera
Онлайн-платформа сотрудничает с ведущими университетами мира. 700 различных образовательных программ, сертификаты по завершению обучения, возможность прохождения бесплатного обучения делают Coursera серьезным конкурентов среди подобных проектов.
Каких рекомендаций следует придерживаться, чтобы обучение продвигалось эффективнее
Заключение
Сайтов, обучающих программированию в сети, очень много. Мы выбрали лучшие. Изучайте написание кода, развивайтесь и пусть вашей мечтой станет переезд на работу в Силиконовую долину!