Написать пост

Как обучиться программированию, работая в другой сфере — отвечают эксперты

Аватар Анастасия Витвицкая

Наш подписчик прислал вопрос в редакцию Tproger: «Как обучиться программированию, работая не программистом?» Предоставляем вам ответы экспертов.

Обложка поста Как обучиться программированию, работая в другой сфере — отвечают эксперты

Нам в редакцию Tproger пришёл вопрос от подписчика, которым мы хотим поделиться с вами:

«Как обучиться программированию, работая в другой сфере?»

Мы обратились за разъяснениями к нашим экспертам, а полученные ответы представляем вашему вниманию.

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

Второе — нужны навыки, практика: решать учебные задачи, писать тренировочный проектик в свободное время.

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

Если все эти составляющие (источник знаний, возможность практиковаться и обратная связь) у вас есть, со временем вы добьётесь успеха.

Рейтинг полезности ответа:
1.7

Научиться программированию легко! Как говорил один великий русский певец: «Невозможное — возможно!» Сам я в прошлом так себе звукорежиссёр.

В своё время я скачал книгу по основам программирования, которая помогла мне определиться с направлением — веб-разработка. После этого я просмотрел много различных видеокурсов для «чайников» на темы: как работает сеть, HTML и CSS, JavaScript, PHP и Mysql.

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

Сделав пару сайтов по видеокурсам и несколько различных примеров по статьям, я написал письмо в одну из топовых веб-студий с таким примерно содержанием: «Мне нужна бесплатная стажировка, вам — бесплатная рабочая сила». Мы договорились. Около 3 месяцев я работал там в качестве стажёра, набираясь опыта у коллег. По истечении этого срока я был принят на работу в качестве junior-разработчика на оклад. Я был счастлив!

За 3 года я многому научился, работал в различных компаниях – от Qsoft до Mail.ru. Получил бесценный опыт от коллег и научился командной работе, что очень важно в IT-индустрии. В программировании желательно быть «на волне», т. к. сфера очень быстро эволюционирует. Я не перестаю изучать всё, что делает из меня профессионала. Особенно всячески пытаюсь закрыть пробелы по базовым знаниям, а именно: математика старших классов на KhanAcademy, алгоритмы и структуры данных на портале MIT, различные парадигмы программирования, языки, администрирование Linux и многое другое.

«Если очень захотеть, можно в космос полететь». Главное, что может дать плоды, — мотивация. Желание учиться и делать шаги, хоть какие-нибудь. Лично меня всегда вдохновляет успех других людей.

Рейтинг полезности ответа:
14.5

(Ответ подготовлен совместно с Михаилом Субботиным, преподавателем израильской высшей школы IT и безопасности HackerU)

Изучать книги, смотреть онлайн-курсы, решать задачи и участвовать в open-source projects. Откровенно говоря, либо никак, либо очень сложно. Можно быть управляющим проекта, а по вечерам штудировать его исходники. Конечно же, придётся забыть про сон, потому что у большинства программистов и разработчиков (и, возможно, у всех людей творческих профессий) мозговая деятельность более активна ночью.

Можно также прокачиваться с помощью игр. Это стимулирует и не особенно давит на мозг в процессе обучения. Никогда не стесняйтесь задавать вопросы, какими бы глупыми они вам ни казались. Есть ещё суицидальный метод: резко перейти на Linux без графического интерфейса. Достаточно быстро заставляет разум выйти из зоны комфорта.

Рейтинг полезности ответа:
1.8

Давайте сразу определимся, что, не решая программистские задачи, программированию научиться невозможно. Общепринято считать, что чтобы более-менее уметь программировать, надо написать от 5000 строк кода собственноручно. Желательно, решая разные задачи.

Самый простой способ обучиться программированию, не работая программистом, — учиться в вузе на ИТ-специальности. За 4 года, НЕ РАБОТАЯ ПРОГРАММИСТОМ, можно научиться программированию.

Если вам уже не 18, или вы не попали на ИТ-специальность, то есть другие пути.

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

Третий по действенности способ — берём реальную задачу и решаем её, по ходу дела узнавая необходимую информацию из интернета. Если вы хотите стать программистом, но в настоящее время работаете «не-программистом», и не хотите бросать эту работу, пока не научитесь программировать, то рекомендую такой алгоритм:

1) Посмотрите на hh.ru, какие вакансии в программировании вам интересны. Выберите специализацию (например, «Веб-разработчик», «Java-программист» и т. п.).
2) Найдите курсы (есть масса бесплатных) по этому направлению. Запишитесь на них. Честно пройдите 1-2-3 таких курса.
3) Если у вас ничего не получается после 2-3 попыток — попробуйте другую специализацию.
4) Если всё ок, значит, у вас уже есть базовые знания (после курсов), теперь надо получить опыт. Для этого найдите интересные вам задачи, которые можно решить при помощи этого языка. Это может быть что-то для вас или вашей семьи. Может быть реальная задача с вашей текущей не-программистской работы. Может быть идея стартапа. Это может быть ЧТО УГОДНО!
5) Делайте эти задачи!
6) Когда вы в общей сумме напишите 2000-3000, а лучше 5000 строк — вы уже что-то будете уметь, и можете претендовать на базовые вакансии программистов.
7) Выбирайте те компании, где есть выстроенная система обучения. Где вами будут заниматься и будут прокачивать.

Рейтинг полезности ответа:
8.0

Сегодня сделать это очень просто. Существует практически бесконечное количество курсов, как онлайн так и офлайн, платных и бесплатных. Правда, есть большой шанс натолкнуться на курс, от которого будет крайне мало эффекта. Очень часто вижу рекламу: «Научим программированию за 21 день», даже видел объявление «за 7 дней». На самом деле, если покопаться в Интернете, поспрашивать у сообществ в профильных чатах, то вы точно найдёте отличный курс и не один. Можно сказать, что универсальная и одна из самых популярных и качественных площадок с курсами — это Coursera.

Рейтинг полезности ответа:
0.3

Начать стоит с изучения основ программирования на несложном языке общего назначения. Например, PHP, JavaScript, Python и т. д. В нашей компании для обучения новичков программированию мы используем Python, потому что этот язык отлично показал себя в web-разработке, прост для понимания, хорошо спроектирован, имеет обширную и простую документацию, а также большое активное сообщество в сети.

К основам относится базовый синтаксис языка, конструкции и встроенная библиотека, с которой язык поставляется. Это лучше всего изучать по книгам-учебникам, которые существуют в изобилии для каждого языка. Для быстрого старта рекомендую проходить туториалы с официальных сайтов языков (PHP, Python), online-курсы (pythontutor.ru, coursera.org) или смотреть видео. Понимание базовых конструкций и библиотеки языка обычно приходит на практике. Тут вам помогут задания, которые есть в каждой книге-учебнике, а также отлично помогают сайты-задачники: HackerRank, W3resource, Codewars, Checkio.

Когда вы утолите жажду «начать уже программировать», решая простые задачки, следует приступить к изучению архитектуры ПК. Фаворитом тут является книга Эндрю Таненбаума «Архитектура компьютера». Это поможет понять, что же на самом деле делает язык программирования, когда вы запускаете ваш код. Параллельно надо продолжать практику, переходя к написанию более сложных программ. Например, написать парсер, который конвертирует лекции с вашего любимого Youtube-канала в звуковые файлы для прослушивания с телефона, или парсер погодных сайтов для вычисления наиболее вероятной погоды, или игру «Змейка». В завершении этого этапа будет не лишним получить опыт работы за деньги. На сайтах freelance.com, upwork.com сконцентрировано большое количество задач, преимущественно несложных, за выполнение которых вам заплатят.

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

Такие задачи можно найти в opensource-проектах, которые разрабатываются сообществами программистов во главе с профессионалами. Тут ваш код обязательно будет проходить code review. Более опытные коллеги будут направлять вас на поиск оптимальных решений для поставленной задачи. Обычно у таких проектов есть баг-трекеры, которые содержат перечень проблем, подлежащих решению. Найти такие проекты в интернете несложно, вот например — medium.mybridge.co. Почти всегда они хранятся на github.com, что также способствует изучению систем контроля версий, таких как Git или Mercurial. Этот этап, кстати, наиболее качественно можно пройти на стажировке в крупных компаниях. Мы часто набираем на стажировку тех, кто уже умеет программировать и в дальнейшем хочет получить предложение работать у нас.

Рейтинг полезности ответа:
5.7

Составляющие успеха можно разбить на 4 блока. Самую важную роль играет мотивация — желание и предрасположенность. На мой взгляд, именно мотивация обеспечивает 40% успеха. Следующий блок — непосредственно работа, а именно ежедневное планирование последующего дня и реализация плана, только таким образом можно приобрести и усвоить новые навыки. Это — второй по значимости блок, и я бы отвёл на него 30% успеха. Немаловажную роль в процессе обучения играют программы самообучения, на них приходится 20% успеха реализации. Причём обязательным критерием в отборе программ должно быть наличие чекпоинтов, контроля и статистики. Ну, и, можно сказать, вишенкой на торте (10%) является tacit knowledge, которое вы приобретаете при взаимодействии с профессионалами ИТ-сферы. Работа в ИТ, причём не важно, какую позицию вы занимаете, обеспечивает возможность учиться изо дня в день различным способам решения задач, а также даёт поддержку и свежий взгляд на вопросы, которые стоят перед вами.

Рейтинг полезности ответа:
1.6

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

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

Придумайте какой-то простой, но интересный мини-проект. Тут всё уже зависит от области: мини-браузер, калькулятор, аркадную игру на смартфон и т. д. И дайте себе обещание: ни в коем случае не сворачивать с пути, пока не дошёл до конца своего плана. Это очень важно! Стоит понимать, что мир программирования, каким бы разнообразным он ни был, работает по одним и тем же правилам. Если вы изучите фундаментальные законы на примере одного языка или одной технологии, то понять, как работает другой язык или технология, будет в разы проще. Поэтому так важно не бросать начатое на полпути. Даже если путь в итоге окажется ошибочным, он позволит без проблем в краткий срок изучить что-то другое.

Рейтинг полезности ответа:
4.1

Если случилось так, что в один момент вы решили сменить профессию и обучиться программированию, то я советую вам запастись терпением. Несмотря на то, что многие курсы и школы заверяют, что «программирование — это просто», на самом деле это, в некоторой степени, лукавство.

Мотивация и ориентация. Если вы не совсем уверены, что хотите стать именно разработчиком, то пройдите несколько бесплатных курсов, где учат основам программирования.

Время на учёбу. Для того, чтобы стать востребованным специалистом, вам потребуется уделить ощутимое время на освоение новой профессии. Я не до конца согласна с теорией 10 000 часов, но эта цифра очень удобна для понимания того, сколько времени вам потребуется. Возьмите 10 000 и поделите на то количество часов в день, которое вы готовы уделять изучению программирования. В итоге вы получите количество дней, нужных для освоения профессии. Прибавьте к ним выходные, поделите на количество дней в месяце и перед вашими глазами будет срок, после которого вы сможете конкурировать на рынке трудоустройства. Хотите быстрее? Уделяйте больше времени!

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

И как же учиться? В интернете достаточно информации для самостоятельного обучения. Но в рамках ограниченного временного ресурса и желания получать актуальные знания в удобном для изучения порядке — ищите обратную связь. Вы же не хотите уметь писать код, но писать его плохо?! Поэтому работающему человеку имеет смысл пойти на обучающие курсы.

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

Начало карьеры. Если вы прошли обучение и готовы выйти на рынок труда, то мне хотелось бы вас предостеречь. Интерес к программированию в последние пару лет очень высок, и на рынке прямо сейчас очень много начинающих разработчиков, на профессиональном сленге называемых джуниорами. Это низкоквалифицированные специалисты. Из-за большого предложения и низкого спроса найти первую работу будет не так-то просто. Всё будет решать ваш опыт. Поэтому никогда не останавливайтесь в развитии. Вплоть до первого дня своей первой работы программистом уделяйте свободное время самообучению и пополнению своего портфолио. Читайте webref.ru, learn.javascript.js, документацию на сайте MDN и изучайте веб-стандарты. Если у вас есть финансовые обязательства, то не стоит увольняться с работы сразу после окончания курсов. Хотя кого-то подобные действия стимулируют и заставляют искать работу в 100 раз усерднее.

Рейтинг полезности ответа:
5.0

Программирование становится новой грамотностью. Кто-то может не согласиться с этим, но в ближайшие годы тренд только усилится. И даже если нет цели стать программистом, надо научиться читать код и понимать, как всё устроено.

Во-первых, меняются требования к известным профессиям, и знание программирования становится нормой. Если раньше круто было прочитать в резюме «уверенный пользователь ПК, Microsoft Office», то сегодня мы спокойно реагируем на «опыт программирования на PHP, Python».

Во-вторых, появляются новые профессии, в которые без программирования не попасть. То есть ты вроде бы не программист, но уровень подготовки должен быть таким же. Целый пул подобных специальностей появился в аналитике, рекламе, маркетинге.

Казалось бы, я — типичный не-программист, занимаюсь маркетингом и пиаром. Но дело касается IT-продукта. Хорошим специалистом я была бы, если бы не понимала, как работает продукт.

Я учусь по-разному.
1. Бесплатные и платные онлайн-курсы. Выбор огромный: Coursera, Stepik, Codecademy, GeekBrains и многие другие. Потому я всегда опираюсь на опыт тех, кто может оценить качество контента. Из последнего рекомендованного — курс по JS на Codecademy, например. Собираюсь пройти.
2. Блоги и тематические порталы. Качество публикации тоже валидирую — отправляю ссылку на статью и задаю вопросы. Даже если они кажутся глупыми и доходят до «расскажи-ка подробнее, зачем выпустили третью версию Python». Следующим шагом уточняю, что ещё почитать по теме.
3. Офлайн-мероприятия для «новичков». Открытые лекции, семинары, хакатоны — возможность попрактиковаться, задать вопрос и получить обратную связь в моменте. А еще познакомиться с теми, у кого позднее можно валидировать п.1 и п.2. Недавно, например, открыла для себя DjangoGirls, которые делают такие ивенты в Москве.

Наконец, важно найти человека, который будет «менторить» процесс обучения. Даже если это менторство в лайтовом формате вопросов и ответов. Я пришла к выводу, что это необходимо, потому что в какой-то момент почти утонула в информации вокруг. «Ментор» подскажет, куда идти, что читать, как практиковаться. Особенно актуально, если большая часть времени уходит на основную работу и нет возможности пройти офлайн-стажировку, которая решает похожие задачи.

Рейтинг полезности ответа:
2.1
Следите за новыми постами
Следите за новыми постами по любимым темам
20К открытий20К показов