хочу научиться писать код
Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать
(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)
Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь 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 серьезным конкурентов среди подобных проектов.
Каких рекомендаций следует придерживаться, чтобы обучение продвигалось эффективнее
Заключение
Сайтов, обучающих программированию в сети, очень много. Мы выбрали лучшие. Изучайте написание кода, развивайтесь и пусть вашей мечтой станет переезд на работу в Силиконовую долину!
Как научиться программировать
Опытный тимлид дал простой и чёткий алгоритм входа в IT. Спойлер: начать можно почти с любого языка, сменить его потом — не проблема.
Lead software engineer, автор Telegram-канала «Так говорил 2Pizza». Интересы: IT, код, софт, разработка, литература, игры.
Программирование захватывает мир. Сейчас не осталось ни одной области, где бы оно не применялось: автоматизируется даже работа комбайнов на полях и сложные медицинские исследования.
Программирование настолько востребовано, что новички готовы отдать огромные суммы денег разным людям и компаниям, которые обещают научить их кодить и хорошо зарабатывать. И это классно. Хотя многие и ругают курсы — мол, они длятся всего несколько месяцев и выпускают на рынок низкоквалифицированные кадры. Но на деле, чтобы научиться писать код, вовсе не обязательно просиживать пять лет в универе.
Где взять базу
Компьютер — это довольно сложная штука, но в его основе всего несколько базовых принципов. После их освоения тебе будет гораздо проще понять, что происходит в коде. И для такой базы нет ничего лучше бесплатного курса от Гарварда CS50 — он переведён на множество языков, в том числе и на русский. Очень рекомендую стартовать с него.
Если после CS50 желание программировать не улетучилось и не сменилось разочарованием, начинай изучать язык программирования JavaScript. Тебе необязательно знать его от корки до корки или помнить наизусть все операторы и правила синтаксиса. Опять же, главное — разобраться с базовыми вещами: как запустить программу на JS, какие типы данных существуют, как написать условие и цикл. Для старта этого более чем достаточно.
Как выбрать первый язык
Тут есть тонкий момент: языков программирования очень много и они сильно отличаются. Поэтому в интернете немало воинствующих знатоков, которые пытаются доказать, что их язык — самый лучший. Но не стоит их слушать: на самом деле первым может быть вообще любой язык. И если у тебя есть друг-программист, смело выбирай тот язык, на котором он пишет.
Если же ты понятия не имеешь, за какой язык браться, то JavaScript будет лучшим выбором. Это самый популярный язык программирования в мире. На нём можно написать всё что угодно — даже игры. Плюс по нему полно обучающих материалов: и платных, и бесплатных.
А ещё JavaScript работает в любом браузере и тебе практически ничего не понадобится для старта — да и первые результаты ты получишь очень быстро. Кстати, обязательно посмотри на TypeScript: этот язык — почти как JS, только лучше. Вот пара ссылок для начала:
Кстати, если ты начал изучать JavaScript, это вовсе не значит, что у тебя есть только одна дорога — во фронтенд и создание сайтов. Освоив на хорошем уровне один язык программирования, ты легко сможешь перейти на любой другой, потому что сам язык программирования и его синтаксис — это не более 10% всего программирования.
Когда начинать кодить
Написать первый код можно, когда освоишь самые базовые концепции. И тут появляется вопрос — а что именно писать? Ответ простой: решай простые задачи. Да, сначала будет трудно. Но это отлично прокачает тебя и поможет стать классным программистом. Есть куча разных сайтов с самыми разными задачами для программистов. Вот три самых известных:
Выбирай какой понравится — сначала попробуй решать задачи самостоятельно, пусть даже каким-то неоптимальным способом. А если уж совсем непонятно, гугли решения, перепечатывай их, разбирайся, зачем нужна каждая строчка и что она делает. К двадцатой или тридцатой задаче станет легче.
Стоит ли учиться по книгам
Я не рекомендую сразу читать книги по программированию — они только затормозят тебя. К тому же русский перевод может быть вредным. Лучше читай официальную документацию и старайся искать ответы на вопросы, которые у тебя возникнут. Читать книги лучше уже после того, как ты освоишься, — они помогут систематизировать знания. Лучший ресурс с самой актуальной информацией по веб-разработке — это MDN (Mozilla Developer Network).
А если вдруг ты с трудом понимаешь англоязычные тексты, документацию или ответы со Stack Overflow, то обязательно прокачивай английский — параллельно с программированием. Минимальный уровень для кодера — умение сносно читать и писать. Без этого в программировании делать нечего.
Как собрать портфолио
Когда ты освоишься с задачками и почувствуешь уверенность, начинай думать о портфолио. Вариантов тут несколько.
Во-первых, можно делать какие-то простые вещи для себя, друзей и соседей, автоматизировать что-то, писать ботов для Telegram. Только заведи аккаунт в GitHub — пусть код хранится там. Знание Git тоже пригодится. Это профессиональный стандарт и «гигиенический минимум» разработчика. Изучать Git рекомендую на официальном сайте: https://git-scm.com/book/ru/v2.
Во-вторых, можно поучаствовать в разработке Open Source. Правда, это на порядок сложнее. В большинство проектов не пускают людей с улицы. Но твои патчи в популярном репозитории или фреймворке точно дадут бонусные очки в глазах работодателя и помогут снискать всеобщее уважение.
Начать вникать в опенсорс можно с репозитория, в котором собраны популярные проекты от русскоязычных разработчиков. Конечно, новичкам лучше выбирать небольшие проекты. Советую обратить внимание на проекты моих любимых авторов Open Source — Никиту Прокопова и Андрея Ситника. А идеальный вариант — предлагать исправления в инструменты, которыми ты пользуешься сам.
Найди ментора
Бывает, что самостоятельно очень сложно собраться и начать что-то делать. Все мы немного «ленивые жопы», и частенько без ментора просто не обойтись. Но это не значит, что нужно брать огромный кредит и отваливать кому-то кучу денег. Есть варианты намного доступнее. Например, на getmentor.dev можно найти людей, которые любят помогать другим, — и нередко они делают это бесплатно или берут чисто символическую плату.
И главное: программирование — это ежедневная учёба в течение всей жизни. И если тебя это не пугает — желаю удачи!
обложка: Marcin Wichary / Wikimedia / Annie для Skillbox