Руководство молодого программиста

Как пасти (с)котов, или Советы юному программисту

Время на прочтение
12 мин

Количество просмотров 13K

Когда вышло первое издание на русском языке хорошо известной книги «Как пасти котов», посвященной непростой теме управления своенравными по натуре профессиональными и не очень разработчиками ПО, мой более опытный коллега руководитель проектов подметил: “Правильнее было бы её назвать «Как пасти скотов»”. Фраза запомнилась, и как показывает накопившийся с тех пор опыт взаимодействия с программистами — коллега был прав.

Как программистов ненавидят их коллеги

На Хабре имеется изрядное количество статей, посвящённых методологиям разработки ПО, общению и взаимодействию в проектной команде, отбору и найму на работу программистов. Без преувеличения каждая такая статья собирает множество гневных комментариев от программистов, в которых за недостатки той или иной методологии или за неудачи в проектах они клеймят «пиэмов», тестировщиков, сотрудников отдела персонала, аналитиков, заказчиков — кого угодно, но только не себя любимых. В статьях и в комментариях к ним превалирует мнение, что разработчик всегда прав. Преобладание этого мнения обусловлено помимо прочего тем, что программисты составляют в аудитории Хабра бо’льшую часть. В то же время, в организациях и проектных командах трудятся специалисты, которые не являются программистами. Данная статья в частном порядке как раз выражает точку зрения той, иной стороны, сформировавшуюся по ту сторону «баррикад».

Сегодня, Мой Юный Дружок, я опишу тебе мир глазами твоих коллег и расскажу тебе о том, каким в этом мире предстаёшь для них ты, Разработчик ПО, Великий и Всегда Правый Программист. Ты уверен, что являешься Центром Вселенной, подобно твоему коту, и что тебе все обязаны

по гроб жизни

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

Бизнес-аналитик ненавидит тебя за нереализованные якобы по случайному недосмотру наиболее трудоёмкие части спецификаций.

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

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

Служба поддержки ненавидит тебя за «самодокументированный» код и за постоянное увиливание от ответов на их вопросы, даже если в новом проекте, на который ты назначен, в твоём графике специально выделены часы на поддержку отчуждённого кода.

Впрочем, обо всём по порядку.

Жизненный путь рядового программиста

Как-то, после одного

успешно проваленного

проекта, я, с согласия руководителя отдела разработки, подготовил для группы программирования презентацию, в которую помимо прочего включил «график» изображающий «жизненный путь программиста», от его самого начала, кодирования в блокноте в школьном возрасте, через освоение интегрированных сред разработки (20 лет), управление дефектами (25 лет) и взаимодействие с прочими группами специалистов и внешними подрядчиками (30 лет), до применения практик постоянного интегрирования и автоматического развёртывания релизов, достигаемых к

появлению седых волос

35 годам (возрастные вехи, разумеется, условны, и служат лишь иллюстрацией к усреднённому жизненному пути). Программист, как возможно никто другой в современном мире, вынужден постоянно учиться и совершенствоваться в техническом и профессиональном плане, и очень многие в этом весьма и весьма преуспевают. В то же время большинство из тех, кто по написанию первой в своей жизни

свисто-перделки

программы «Hello, World» и публикации резюме на hh.ru / monster.com сразу начинают растопыривать пальцы на собеседованиях и горделиво называть себя «настоящим профессионалом», — таковыми на самом деле не являются.

В том проекте один разработчик умудрился забыть выложить обновлённый код в общий репозиторий и два его коллеги полдня в экстремальном режиме пытались определить — почему же функция не работает так, как заявлено? Другой разработчик допустил ошибку в скрипте развёртывания, и если бы она не была замечена руководителем проекта(!), внедрение результатов совместной работы команды за целую итерацию было бы отложено до следующего цикла выпуска кода в продуктовое окружение, т.е. на 2 недели.

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

Взаимодействие со специалистами-непрограммистами

Да будет тебе известно, Мой Умелый Дружок, что иные специалисты, с которыми ты бок о бок трудишься в проектной команде, такие как тестировщики, аналитики, технические писатели, дизайнеры и прочие, несут ответственность за успех проекта ничуть не меньшую, чем ты

, о чудо Вселенной

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

Аналитик, например, ожидает, что ты будешь не только придираться по поводу и без к каждой букве в спецификациях, но также будешь добросовестно воплощать их в программном коде. И что ты не будешь делать изумлённые глаза, когда во время тестирования тебя спросят, почему ты не реализовал ключевую функцию, которая была включена в завтрашний релиз и заложена в требования ещё до того, как ты был назначен в проектную команду год назад, всегда там была и никогда с тех пор не изменялась ни на одну букву.

Тестировщица вправе ожидать от тебя безглючного качественного результата твоего труда. При приёме на работу ей было обещано и потому она ожидает, что она не будет являться частью методологии разработки TDD, согласно которой ты, МУД, «выкидываешь» недоделанный продукт в тестирование и по его итогам доделываешь пропущенные куски функциональности и исправляешь очевидные дефекты. И ещё тестировщица непременно ожидает, что ты не будешь гнобить её за то, что она не умеет тестировать продукт иначе как вручную, или что её навыки работы с языком запросов к БД существенно ниже твоих. В конце концов не забывай, что и платят за ручное тестирование ей в разы меньше, чем тебе за программирование, и что если бы она знала SQL так же хорошо, как и ты, то в твоём кресле перед твоим монитором сидела бы она, а не ты, потому как при равных квалификациях между вами именно её предпочли бы оставить в команде и организации, потому что она, в отличие от тебя, пройдя нелёгкий путь тестировщика никогда не будет гнобить коллег по цеху так, как это делаешь ты.

Инженерное знание технологий

Ты уже закончил

детский сад

институт и на собеседованиях успешно объясняешь, чем конструктор отличается от деструктора? Скажу тебе по секрету, что профессиональный мир создания ПО не ограничивается этими знаниями и если ты продолжишь думать, что написанный и кое-как исполняемый код является достаточным результатом твоего труда для

неполучения люлей от руководителя проекта / заказчика

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

«Версионирование? Комментирование кода? Придерживание стандартам кодирования и именования? Не, не слышал!» Так говорят твои коллеги там и здесь в самых разных проектных командах и организациях. Юный дружок, ты повсеместно ноешь ото всего, что не связано непосредственно с «колбашением кода»: о необходимости добавлять комментарии, покрывать код блочными тестами в соответствии с установленными в компании или отделе стандартами, сливании воедино (merge) веток репозитория… Что уж говорить о более комплексных вещах, требующих повышенной или по настоящему высокой квалификации: автоматизация тестирования, внедрение и поддержка постоянного интегрирования, настройка связок Bamboo-Cucumber-Maven-Puppet, многочасовое копание в системных логах в поисках свидетельств программных ошибок — всё это для тебя скукота и муть, которые не позволяют тебе совершенствовать навыки непосредственно кодирования и которые ты находишь принижающими твоё ЧСВ. Причём отказом от использования тех или иных технических средств ты, профессиональный разработчик ПО, зачастую попросту скрываешь неумение ими пользоваться. Я помню реакцию и лицо одного программиста, которому в качестве попытки уловить труднонаходимый «плавающий» дефект предложил воспользоваться профайлером встроенным в IDE: мне было указано, что это не собачье дело руководителя проекта советовать, какими средствами программист должен пользоваться в своей работе.

Навыки работы с инструментарием

Насколько твоя работа в рамках твоей рабочей станции автоматизирована? Ты прокачал свои навыки в работе с регулярными выражениями, создании и выполнении пакетных файлов? Ты можешь по запросу коллеги, тестировщицы, аналитика или заказчика за 3 минуты пропарсить пару сотен тысяч строк лога на удалённом сервере, найти нужное вхождение ключевого параметра, запаковать вывод, переслать его на указанный адрес и вернуться к выполнению прерванной задачи? Как быстро, МЮД, ты умеешь выполнять рутинные операции, требующие многократного повторения в течение рабочего дня?

Как известно, запуск компиляции в современных средах разработки возможен по нажатию клавиши F5 (или F6? Или F13?.. В конце концов почему я, руководитель проектов, должен знать такие вещи? Ты же не знаешь, МЮД, как быстро, за пару минут выгрузить из Jira, отформатировать надлежащим образом в Excel и послать по электронной почте заказчику отчёт о дефектах c

блек-джетом и шлюхами

графиками и трендами, но при этом никогда не преминёшь подколоть в курилке среди своих коллег своего «пиэма», что тот туп и не знает, чем деструктор отличается от конструктора). Но за достаточно долгую уже карьеру я встречал не так много программистов, использующих комбинации КБД на клавиатуре для вызова тех или иных стандартных действий — большинство для этого используют более медленный манипулятор «мышь». Условные «Tab — 1000 — Tab — 1 — Tab — 0 — Tab — Backspace — 2 — Ctrl+S — Ctrl-F6 — Enter, Alt-Tab, F5» за 6 секунд позволяют настоящему профи выполнить то, что елозением мышки и тыканием указательными пальцами по клавиатуре неумёха делает долгих пять минут. И когда такие операции выполняются по сотне раз на дню, в условиях приближающегося дэдлайна иному руководителю проекта иногда хочется

взять и ……

отодвинуть такого «профессионала» от клавиатуры и самому внести изменения / откомпилировать / выложить исполняемый код и дать отмашку группе тестирования, что новая сборка наконец готова.

Поэтому, МЮД, не поленись и потрать время на освоение слепой десяти-пальцевой печати и методов эффективной работы с инструментарием и поверь более опытным людям, пусть некоторые из них и являются так нелюбимыми тобою руководителями проектов, — это время тебе окупится сторицей. А пока ты, юный неумёха, не достиг в этом совершенства — Иди, уткнись в монитор и Пиши Код, Бл..!

Оценка трудозатрат

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

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

«Индусский» код

Одно из твоих любимых занятий — критиковать программный код, созданный индийскими разработчиками. Тебя хлебом не корми, но позволь лишь поизмываться над «макаронным» стилем программирования. Больше, чем обсуждать «индусский» код, ты лишь любишь болтать о технологиях (см. ниже). И это всё при том, что сам ты именуешь методы гордым именем kolbasa(), незабвенно копируешь куски кода в разные места программы и создаешь классы размером на десяток-другой экранов.

По незначительности своего собственного профессионального опыта, МЮД, тебе невдомёк, что

говно

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

соломинки в чужом глазу

изъянов в чужом коде.

Бесконечное обсуждение технологий

Ты бесконечно обсуждаешь с другими программистами в чём Java++ превосходит C## или чем версия номер сто двадцать девять дробь пятнадцать какой-нибудь Javascript-библиотеки лучше версии сто двадцать девять дробь тринадцать. На такие обсуждения тебе никогда не жалко времени даже в те дни, когда до конца итерации или многомесячного проекта остаётся 2-3 дня или недели и количество назначенных на тебя неисправленных серьёзных дефектов превышает полсотни.

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

Нытьё по поводу «ненужных» митингов

Поэтому, когда после того, как ты только что

проточил лясы

проговорил 2 часа на кухне / в курилке с полудюжиной таких же

говно

кодеров о новейшем фреймворке / вчерашней пресс-конференции Google-Microsoft-Apple-Линуса Торвальдса, чем украл пару-тройку человеко-дней разработки, ты вдруг на разборе завершенной итерации заявляешь о том, что в проекте проводится слишком много никому ненужных совещаний и надо бы их подсократить — в ответ на это тебе хочется проорать лишь одно: заткнись и ИПКБ!!!

Грамотный русский язык

Ну и в конце, как говорится, последнее, но далеко не самое неважное. Даже если ты, МУД, в совершенстве знаешь такие языки, как C## или МозгоЁб — это совершенно не избавляет тебя от необходимости грамотно писать и говорить по-русски (да и по-английски тоже, XXI век на дворе). Поэтому, прежде чем в следующий раз ты сподобишься писать спецификации, комментарии к коду, письма заказчику или свои многоумные статьи и комментарии здесь или на каком-то другом ресурсе

для быдлокодеров

— иди и сначала как следует выучи русский язык, бл..! Сделай это, чтобы что_бы ты ни писал — любой грамотный человек читал бы это с лёгкостью и радостью, а не спотыкался на каждой твоей орфографической ашыпке. Посети и выучи наизусть содержимое сайта tsya.ru и запомни уже наконец, что «тестер» — это прибор для определения значений различных параметров электрической сети, а специалиста по тестированию ПО называют «тестировщик» и что «функционал» — это математический термин, а набор возможностей программного продукта называется «функциональность», бл..!!111

Эпилог

Надеюсь, что советы данные выше пойдут тебе впрок, и со временем ты вырастешь в настоящего инженера по разработке программного обеспечения, профессионала в своём деле, который грамотно и вежливо взаимодействует с коллегами по цеху, выполняет свою работу качественно и в оговоренный срок. Успехов тебе в твоём нелёгком труде! И, пожалуйста, всегда помни о том, что твои коллеги-непрограммисты своей работой заслуживают ничуть не меньше любви и уважения, чем твой

с

кот.


Дополнение

В комментариях к первой редакции статьи был задан вопрос: где же вы таких разработчиков берете? Специально, разумеется, в свои проектные команды автор статьи таких людей не отбирал, но встречаются подобные кадры практически в любой организации.

Конечно, далеко не все разработчики, профессионально трудящиеся на ниве ИТ, похожи на описанных в статье. Автор согласен с широкораспространенным мнением, что программист-эксперт производительнее своего начинающего коллеги в 10 раз. Производительность разработчика средней руки примерно в 3 раза выше, чем у новичка, лоботряса или неумёхи и продуктивность, конечный выхлоп от эксперта, гуру, “зубра” также примерно в 3 раза выше такового от рядового профессионала.

По моему опыту количественные соотношения числа низкоквалифицированных разработчиков к обычным и обычных к экспертам примерно такие же: 1 к 3 и 3 к 1. Эти пропорции могут сильно варьироваться от одной организации к другой, но в среднем достаточно верны. За всё время своей карьеры мне довелось поработать с четырьмя людьми, которых я в полной мере отношу для себя к категории “звёзд” (крайняя часть “спектра”). Они умели всё необходимое для реализации поставленных перед ними задач, плюс многое сверху того, квалифицированно оценивали трудозатраты, выполняли работу в отведённый для неё срок, после своей работы в проекте, над продуктом или в компании оставляли чётко задокументированные артефакты.

Обычных” программистов, тех, что умели делать многое из того, что умели “звёзды”, но не всё вместе, было абсолютное большинство. Их данная статья, очевидно, не касается, или касается лишь тем, что некоторые из приведённых зарисовок могут вызвать у них улыбку наподобие “а, да, точно, я, помнится, в компании XYZ поступал так же, господи, какой же дурак я тогда был (два / пять / двадцать лет назад)!”.

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

Последней категории как раз и посвящена данная статья.

Данная статья является переводом. Оригинал доступен по ссылке:

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

Хотя все эти чувства естественны, есть несколько способов, как преодолеть эти страхи. Мы встретились с Ризель Скарлетт из нашей команды по связям с разработчиками, чтобы получить советы из ее собственного опыта.

1. Насколько важен выбор языка программирования и специализации на начальном этапе?

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Когда дело доходит до выбора между Python, Java или JavaScript, это не имеет большого значения. Важнее всего понимать основы.

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

К основам языков программирования относятся:

  1. Создание и вызов функции.
  2. Создание переменных.
  3. Понимание и объяснение условных конструкций.
  4. Выполнение вызовов API.
  5. Понимание области видимости, строк, действий с массивами и структур данных (которые будут различаться в зависимости от языка программирования).

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

2. Должны ли начинающие разработчики изучать классические языки перед знакомством с другими популярными языками и фреймворками?

Ризель: Я слышала, что люди начинают изучать фреймворк, прежде чем овладеть основами, и у них в дальнейшем все хорошо. Я лично не думаю, что это подошло бы мне. Поскольку многие из этих фреймворков основаны на фундаментальных языках, на мой взгляд, изучить фреймворк и разобраться в нем будет легче, если вы уже знаете язык. Думайте о фреймворках как о диалекте языка: будет сложно выучить AAVE (афроамериканский диалект), если вы не знаете английского.

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

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Моим первым и главным советом было бы присмотреться к сообществам с открытым исходным кодом, потому что это больше всего похоже на опыт работы в команде. Вы будете делать pull requests и работать в классном месте, и это даст вам возможность выделиться среди остальных соискателей.

Мое второе предложение — начать свой личный проект и сделать что-то, что подтолкнет вас к созданию чего-то необычного. Начните с проекта, который вы сделали по учебному пособию или во время стажировки. Заставьте себя подумать: «Что еще я могу добавить?»

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

4. Я заинтересован в работе над проектом с открытым исходным кодом, но понятия не имею, с чего начать. Есть советы по выбору проекта?

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Вы можете начать с github.com/topics, где вы можете найти проекты с открытым исходным кодом, где используются интересующие вас языки программирования или инструменты. Когда вы только пришли в проект с открытым исходным кодом, вам следует обратить внимание на задачи с меткой good-first-issue, которая указывает на то, что задача нуждается в свежем взгляде со стороны. Существует также целая куча инструментов, которые объединяют и выявляют good-first-issue в проектах.

First Timers Only предоставляет список агрегаторов, которые находят для вас good-first-issue. В нем также есть руководство, которое поможет вам изучить и понять рабочий процесс Git для участия в проектах с открытым исходным кодом. Это немного отличается от работы над вашим проектом или проектом вашей компании.

Также есть аккаунт в Twitter под названием «Good First Issue» , который публикует задачи с этой меткой. Мне нравится такой подход, потому что вы можете сразу же получить уведомление, прежде чем кто-то заявит о нем.

5. Что я должен включить в свое портфолио?

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Во-первых, я думаю, что совершенно нормально, если ваше портфолио простое. Включите ссылку на свой код, размещенный на GitHub, GitLab или BitBucket. Это позволяет рекрутерам и менеджерам по найму видеть доказательства того, что вы умеете программировать, отслеживать рост с течением времени и получать представление о ваших навыках решения проблем.

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

Если вы ищете инструменты для создания своего портфолио, то, как вариант, присмотритесь к GitHub Pages, но вы также можете просто добавить ReadME. Мой ReadME – это мое портфолио.

6. Как мне искать наставника и чего мне ожидать от наставничества?

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Вы можете получить наставничество, присоединившись к официальной программе. У меня есть наставник от Girls in Tech. Вы можете найти наставника в вашем учебном заведении или во время обучения на курсах по программированию.

В таких группах, как #100Devs, есть люди, которые рады стать наставниками. Вы также можете взаимодействовать с людьми в Twitter, не только писать им в личные сообщения «можете ли вы наставлять меня», но и внимательно изучать их твиты. Иногда люди в Twitter пишут, что они открыты для общения с другими через Zoom. Забронируйте с ними время и получите возможность учиться у них. Имейте в виду, что они обычно очень заняты, и, самое главное, не ждите, что они найдут вам работу.

7. Как я могу использовать социальные сети для правильного продвижения своего бренда?

🌱 11 карьерных советов для начинающих разработчиков

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

Никогда не бойтесь показаться слишком неопытным – люди поддержат вас.

На кого из отличных разработчиков стоит подписаться для вдохновения?

В Twitter я настоятельно рекомендую следующее:

  1. @ceoreo
  2. @techgirl1908
  3. @hola_soy_milk
  4. @teneikaask_you

Я также пишу о новых вещах, которые я изучила, а также откровенно делюсь тем, что знаю, так что подпишитесь на @blackgirlbytes. 🙂

8. Я боюсь показаться слишком неопытным, когда комментирую что-либо. Как мне это преодолеть?

Ризель: Я понимаю беспокойство о том, что, возможно, вы будете чувствовать себя недостаточно опытным. Я думаю, что мы все чувствовали это раньше. Но нет ничего плохого в том, чтобы быть новичком. Вы определенно хорошо знаете какие-либо вещи. Покажите, что вы знаете! Кроме того, будьте честны в том, чего вы не знаете. Для ИТ-сферы это также важно.

9. Как лучше подаваться на вакансию?

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

Когда вы ищете работу, посмотрите, знаете ли вы людей, которые работают в интересующей вас компании. Эта связь всегда помогает в предварительных переговорах. Свяжитесь с людьми в LinkedIn и Twitter, если вы знакомы или если друг или коллега может представить вас. Связи и отношения имеют огромное значение в вашей карьере.

10. Как подготовиться к экзамену по кодингу?

🌱 11 карьерных советов для начинающих разработчиков

Ризель: Такие веб-сайты, как HackerRank, LeetCode, codewars.com и pramp.com, могут помочь вам подготовиться к собеседованию по программированию. Вы также можете попросить наставника или друга-разработчика взять у вас тренировочное интервью и дать вам обратную связь в режиме реального времени. Люди также предлагают прочитать книгу Cracking the Coding Interview.

Что касается меня, я использую метод «грубой силы», т. е. рассматриваю интервью как практику. Я предпочитаю данный метод, потому что получаю реалистичное представление о моем опыте, а также понимание того, над чем мне следует поработать для любых позиций, на которые я буду претендовать в будущем.

Ризель: Это зависит от компании и является темой, достойной отдельной статьи. Честный ответ заключается в том, что отличия есть. В некоторых стартапах, в которых я работала, меня до сих пор считают джуниором. Но, когда я общаюсь с людьми, некоторые из них считают меня мидлом. Я оцениваю себя скорее как мидла. Некоторые измеряют годами опыта, который составляет от нуля до трех лет для начинающего разработчика и от трех до пяти лет для разработчика среднего уровня. Это базовые показатели, и они полезны, но не должны быть непреложной истиной.

С моей точки зрения, начинающим разработчикам может потребоваться дополнительная помощь, чтобы понять, с чего начать или как лучше решить задачу, в то время как разработчики среднего уровня могут иметь более четкое представление о том, с чего лучше начать. Мидлы, вероятно, планируют, исследуют и проектируют немного больше, прежде чем писать код, чтобы убедиться в оптимальности решения. Это не означает, что разработчикам среднего уровня не нужна помощь, но они лучше представляют себе проблему и ее решение, потому что видели нечто подобное в прошлом.

***

Материалы по теме

  • 🐍 15 самых часто задаваемых вопросов на собеседовании про Python
  • 🎓 Куда податься новичку? 10 актуальных ИТ-направлений 2022 года
  • 💼 10 самых страшных ошибок рекрутера, так сильно раздражающих ИТ-специалистов

Я решил программировать. С чего начать?

Даже если вы уже учитесь в университете на программиста, скорее всего этого не хватит, чтобы сразу найти высокооплачиваемую работу. Если, конечно, у вашего вуза нет партнёрской программы с крупной IT-компанией, например, с «Яндексом». В этом случае вы получите конкретно те знания, которые требуются для работы.

Если же вы не учились на программиста, придётся начинать с самых основ. Скорее всего, вы что-то помните с курса информатики в университете, но этих знаний слишком мало. Что делать в таком случае?

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

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

Чтобы начать учиться, есть два пути:

  • Попробовать выучить все самому;
  • Найти школу, в которой вам помогут. 

Часто онлайн-школы проводят семинары, которые помогают людям определиться с областью интересов.

Хочу, чтобы мне помогали. Как выбрать школу?

Составьте список всех школ, которые могут быть вам интересны, а самое главное — дают знания, которые вам нужны. Внимательно изучите программу каждой школы. Убедитесь, что выбранные курсы предназначены для новичков, и что обучение начнётся с самых основ. Почему это важно? Есть много школ, которые начинают преподавать, предполагая, что вы уже пришли с минимальными знаниями. Начав учиться, вы не будете понимать, что происходит, и не сможете догнать однокурсников.

Если что-то из программы не понятно, связывайтесь с учебным заведением и просите разъяснить, что содержит в себе каждый этап обучения. А если у вас есть знакомый программист — спросите у него. Даже если он сам не знает точных ответов, скорее всего у него есть приятель, который сможет проконсультировать насчёт программы выбранной школы.

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

Как правило, школы публикуют отзывы учеников. Попробуйте найти контакты кого-то из тех, кто оставил отзыв, и связаться с ним. Поинтересуйтесь, пришёл ли он в школу с нулевыми знаниями? Всему ли выучился и всё ли было понятно? Узнайте, нашёл ли он работу. Это не даёт гарантии, что вам будет так же легко и понятно учиться, как и ему, но по крайней мере вы будете иметь представление об опыте другого человека.

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

Я справлюсь сам. Как учиться?

Поздравляю, вы выбрали путь самурая. Вам придётся выучить всё самому. И если вы встали на эту тропу, то скорее всего уже знаете, чего конкретно хотите.

Если начинаете с нуля, найдите ресурс, который обучит нужному направлению с самых азов. Приготовьтесь, что занятия будут проходить на другом языке, потому что все проверенные ресурсы по большей части англоязычные. Например, freecodecamp.org или codecademy.com. Здесь можно проходить курсы бесплатно. Первый подойдёт тем, кто хочет разобраться во фронтенде, а на втором найдёте кучу разных курсов, начиная с Javascript и заканчивая анализом данных.

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

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

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

Когда вы более-менее вникли в тему, рекомендую зайти на github и посмотреть реальные проекты, разобраться в них. Там можно искать примеры кода, вбивая такие запросы, как «название языка example» (python example), либо «amazing название языка» (amazing javascript) — так можно найти репозитории с примерами кода или с библиотеками, которые используются в языке. Изучая их, вы будете перенимать опыт других разработчиков, которые уже решали эти задачи. Хорошим продолжением обучения будет реализованный личный проект. Идеи для проекта можно нагуглить.

Как только вы начнёте ориентироваться на github и понимать, как он работает, советую поискать небольшие open source проекты, которые были бы вам интересны, изучить их исходный код и правила внесения своего вклада (contribution) в проект.

Как правило, в активно разрабатываемых проектах есть issues (прим. система распознавания багов) с лейблом good first issue или help wanted. Значит, что можно смело изучить описанную проблему или задачу, прикинуть, как её решить, и если есть уверенность, что это может сработать, попробовать это сделать. Даже если что-то не выходит, всегда можно попросить помощи в решении задачи прямо у контрибьютора на проекте.

Если уже хорошо получается решать такие задачи, скорее всего, вы готовы искать работу.

Кажется, я уже что-то умею. Как искать работу?

Перед тем, как искать работу, пробуйте решать тестовые задания от разных компаний. Часто IT-компании составляют своё тестовое задание на основе их проектов и включают туда небольшие кусочки реальных задач. Найти задания также легко на github. 

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

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

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

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

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

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

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

Моя первая работа: что делать дальше?

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

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

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

Также не стесняйтесь просить помощи коллег, потому что когда компания нанимает новичка, она понимает, что придётся вкладываться в его обучение.

Частые ошибки новичков в профессии.

Оглядываясь на свой опыт, я могу выделить две основных ошибки:

  • Переоценивать свои знания. Иногда может казаться, что вы уже всё умеете, но поверьте, нет предела совершенству. Всегда есть задачи, которые могут быть сложнее чем те, которые вы уже решали.
  • Заканчивать учиться — главная ошибка. Не переставайте узнавать что-то новое, ведь только так можно быть конкурентоспособным на рынке.

Итог

Чтобы стать программистом, нужно не только получить багаж знаний, но и постоянно его обновлять. Работа в IT — это постоянная гонка технологий, поэтому нужно быть привлекательным на рынке труда. И главное — решая войти в профессию программиста, готовьтесь не к спринту, а к длинному марафону.

Фото на обложке: Unsplash

В прошлый раз мы подготовили компактные подборки с настольными справочниками для сисадминов и ресурсами для DevSecOps. Сегодня говорим о книгах для разработчиков, начинающих погружение в мир программного обеспечения. В списке «классика», которую рекомендуют резиденты Hacker News, Reddit и других профильных площадок.

В блоге T1 Cloud мы регулярно делимся полезными ресурсами для ИТ-специалистов — подписывайтесь, чтобы не пропустить будущие публикации.

/ Unsplash.com / Daoud Abismail

/ Unsplash.com / Daoud Abismail

Code Complete

Классика от программиста Стива Макконнелла. Опираясь на академические исследования и собственный опыт коммерческой разработки, он собрал под одной обложкой коллекцию лучших практик и принципов по написанию приложений. Книга затрагивает широкий спектр тем — например, производительность кода, отладка, составление документации.

Особое внимание автор уделяет структурированию кода, удобству чтения и восприятия. Один из резидентов Hacker News даже выделил любимую цитату в этом контексте: «Написать программу так, чтобы она была понятна компьютеру — это меньшая часть работы программиста; его основная задача — написать её так, чтобы её понял другой человек».

Читатели отмечают, что одна из наиболее интересных концепций, которую затрагивает Макконелл — это программирование с использованием псевдокода. Он позволяет изложить всю логику приложения, не написав ни одной строчки на каком-либо ЯП. Это может быть удобно при работе над масштабным проектом, в котором важно заранее предусмотреть потенциальные подводные камни.

В целом «Code Complete» подойдет как начинающим, так и опытным разработчикам — каждый сможет почерпнуть что-то полезное вне зависимости от сложности проекта at hand. Однако материал может показаться «тяжелым» к прочтению — он изложен на 960 страницах. Вероятно, не каждый «осилит» книгу до конца. Однако её вполне можно использовать как настольный справочник и обращаться только к тем главам, которые помогут решить текущую задачу.

Clean Code

Если «Code Complete» представляет собой полноценное руководство по разработке программного обеспечения, то «Clean Code» затрагивает аналогичные вопросы, но в более повествовательном формате. Вероятно, это одна из самых часто рекомендуемых книг по разработке ПО, несмотря на тот факт, что она и её автор регулярно подвергаются критике.

«Clean Code» написал разработчик Роберт Мартин, также известный в ИТ-сообществе как Дядя Боб. Он разбирает принципы и приемы написания чистого кода, приводит большое количество примеров. В то же время книга содержит серию практических упражнений, где необходимо найти и устранить проблемы в предложенных блоках кода. Особенно полезна книга будет разработчикам на Java, поскольку в ней есть отдельные главы, посвященные модулю JUnit.

Автор неплохо раскрывает принципы DRY, и акцентирует внимание на том, что функции должны решать только одну задачу, но делать это хорошо. С другой стороны, автора критикуют за не самые удачные примеры кода и спорные подходы к разработке — например, за идею, что идеальная функция не содержит аргументов.

/ Unsplash.com / Shamin Haky

/ Unsplash.com / Shamin Haky

Если вам понравится подача материала и стиль автора, то в его портфолио есть несколько аналогичных работ: «Clean Architecture», посвященная проектированию чистой архитектуры, «Clean Agile» об организации задач в условиях гибких методологий и «Clean Coder» с лучшими практиками для разработчиков.

Хотя резиденты Hacker News отмечают, что книги представляют собой набор рекомендаций, которым не нужно следовать беспрекословно. Однако с ними стоит познакомиться, чтобы сформировать собственное мнение о предлагаемых практиках и понять, когда можно нарушать правила. В ИТ-сообществе до сих пор нет абсолютного консенсуса по вопросам чистоты кода и архитектуры. Сам этот факт находит отражение в «Clean Architecture». Роберт Мартин включил туда отдельную главу, которую написал приглашённый автор — Саймон Браун, и его идеи во многом противоречат остальной части материала.

Structure and Interpretation of Computer Programs

По словам пользователя Hacker News, эта книга встречается в тематических подборках литературы недостаточно часто. Она написана профессорами MIT — Харольдом Абельсоном и Джеральдом Сассманом — и одно время служила учебником для начинающих программистов на диалекте LISP (сегодня в вузе используют Python).

Несмотря на то что первое издание книги было выпущено в далеком 1985 году, изложенные в ней базовые принципы до сих пор остаются актуальными — такие как абстракция данных, метаязыковая абстракция, рекурсия. С другой стороны, некоторые подразделы безвозвратно устарели. К ним стоит относиться как к исторической справке и обращаться исключительно для общего развития.

Книгу можно скачать бесплатно — текст второго издания распространяют по лицензии Creative Commons.

В этом контексте стоит отметить еще одну книгу от издательства MIT Press — «Concepts, Techniques, and Models of Computer Programming». Она раскрывает ключевые концепции программирования, техники и парадигмы, необходимые начинающему разработчику. Материал используют и дополняют многие курсы и лекции профессоров технологического института.

The Mythical Man-Month

Эта работа Фредерика Брукса, пожалуй, наиболее известная рекомендация в нашей сегодняшней подборке. The Mythical Man-Month — это сборник эссе о проблемах разработки масштабных программных проектов. В отличие от предыдущих материалов, автор концентрируется не на практических, а управленческих навыках. Одна из ключевых идей автора — привлечение новых людей на поздних этапах разработки лишь отодвигает сроки сдачи проекта.

Книга ориентирована на продакт-менеджеров и других управленцев в сфере ИТ, однако полезные знания могут почерпнуть и рядовые разработчики — особенно в вопросах планирования и управления собственным временем.

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


Свежие материалы в нашем блоге на Хабре:

  • Скрытые жемчужины — сетевые протоколы, о которых мало кто слышал

  • Из энтерпрайза в стартап и обратно: история одного продакт-менеджера

  • Обсуждаем книги, которые можно читать вновь и вновь

С чего начать изучение программирования? Роль технологий за последние 20 лет сильно изменилась. Компьютеры и технологии проникли почти во все сферы нашей жизни: что мы покупаем, как мы добираемся с места на место, как мы работаем или где мы едим после окончания рабочего дня — мы решаем с помощью технологий.

  • Зачем учиться программировать?
  • Какие языки программирования изучать?
  • Как начать программировать с нуля
  • Советы для начинающих программистов

По этой и многим другим причинам программирование является одним из самых ценных навыков, которые можно приобрести в 21 веке. Хотите ли продвинуться по карьерной лестнице, создавать программное обеспечение, игры или разбираться в мире технологий, изучение программирования может стать важным подспорьем в профессиональном и личном развитии.

Однако изучение программирования может быть очень пугающим. Еще до написания своей первой программы я думал, что программисты — это элитная группа специалистов, обладающих талантом, превосходящим все, чем я могу обладать. Из разговоров, которые я вел с начинающими программистами, можно сделать вывод, что это распространенное мнение: программирование — это занятие, предназначенное только для самых выдающихся технарей.

Я хочу сразу же пояснить, что это не так. При наличии времени, усердия и доступа в интернету любой человек может стать программистом с нуля.

В зависимости от того, что вы хотите изучить и насколько глубоко вникнуть, можно потратить на обучение от нескольких месяцев до конца жизни, но все начинают с основ. Именно поэтому в этом руководстве расскажe обо всем, что нужно знать, чтобы начать писать код, включая:

  • Почему стоит научиться программировать;
  • С какого языка начать;
  • Как начать писать код;
  • Несколько ценных советов для тех, кто только начинает.

программирование

Зачем учиться программировать?

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

Приобретение профессиональных навыков

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

Чтобы сделать карьерный поворот в сторону IT или перейти на более техническую должность в своей области, знание хотя бы одного соответствующего языка программирования обязательно. Однако это относится не только к разработчикам. Веб-дизайнеры должны знать HTML, CSS и JavaScript. Менеджеры проектов должны знать внутреннее устройство инструментов, которые они помогают создавать. Даже если у вас простой сайт на WordPress, знакомство с языками front-end и немного с PHP поможет в работе с ним.

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

Наконец, умение программировать позволит заняться фрилансом и развить карьеру фрилансера. На этом пути у вас будет гораздо больше возможностей контролировать карьеру и проекты, за которые вы беретесь.

Возможность создавать продукты

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

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

Понимание окружающего мира

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

Это весело

Для многих изучение кодинга является полезным и приятным опытом. После освоения основ и начала работы над собственными оригинальными проектами, этот процесс будет меньше походить на обучение и больше на отдых. В конце концов, если вы не получаете от этого удовольствия, то зачем заниматься?

Какие языки программирования изучать?

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

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

HTML И CSS

Язык гипертекстовой разметки, или HTML, является основой интернета — он используется для создания содержимого веб-страниц. Когда вы загружаете веб-страницу, обычно вы видите HTML-документ, отображаемый браузером.

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

Возможно, вы менее знакомы с CSS. HTML определяет, какое содержимое появляется на веб-странице, но не влияет на то, как это содержимое появляется. Именно здесь на помощь приходят каскадные таблицы стилей (Cascading Style Sheets, или CSS). Язык CSS обрабатывает стиль HTML — он задает такие характеристики, как цвета, размер, шрифты и даже макет всей страницы.

Подпишитесь на авторский телеграм-канал про предпринимательство в России.

CSS также не является языком программирования. Это набор правил, применяемых к HTML. HTML и CSS почти всегда используются вместе, поэтому я рекомендую изучить оба. В противном случае веб-страницы будут выглядеть слишком примитивно.

HTML и CSS легко изучать в основном потому, что они не требуют вычислительной логики языков программирования. Изучение HTML и CSS также может показаться менее абстрактным, чем других языков, поскольку вы быстро видите результаты своего кода — просто создайте файл .html и откройте его в браузере. Или откройте существующий веб-сайт и используйте инструмент разработчика в браузере, чтобы заглянуть в исходный код. Это позволяет изучить два языка, которыми вы пользуетесь каждый день, за один день.

Но если вы хотите, чтобы ваши веб-страницы выполняли определенные действия, вам понадобится…

JavaScript

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

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

Смотреть онлайн-курсы JavaScript и Frontend-разработки

Python

Python — очень популярный язык программирования для начинающих благодаря своему удобному синтаксису и универсальности. Большая часть кода Python читается как английский, что помогает новичкам (кто понимает английский, разумеется) быстрее усвоить такие фундаментальные понятия, как функции.

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

Смотреть онлайн-курсы Python

C/C++

Язык Си — еще один популярный выбор для начала обучению программированию. Он более сложен, чем Python, и часто требует от начинающих писать больше кода для достижения тех же целей. Это больше работы, но полезно для понимания абстрактных концепций. Изучая C, вы приобретете навыки, которые можно будет легко применить к другим, более лаконичным языкам.

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

Java

Java (не путать с JavaScript) — это объектно-ориентированный язык программирования общего назначения. Как и Python, синтаксис Java легко читается и понимается программистами-людьми — зачастую сложные задачи могут быть решены одной командой.

Java широко используется в мобильных приложениях для Android и является еще одним отличным базовым языком, принципы которого можно интуитивно применять при изучении других языков.

Как начать программировать с нуля

  1. Пройдите онлайн-курс
  2. Смотрите видеоуроки
  3. Читайте книги / электронные книги
  4. Выполняйте проекты по разработке
  5. Найдите наставника и сообщество
  6. Подумайте о том, чтобы записаться в буткемп по программированию

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

1. Пройдите онлайн-курс

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

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

Популярные ресурсы с бесплатными курсами включают freeCodeCamp, W3Schools и известный гарвардский курс “Введение в компьютерную науку”, доступный на edX и YouTube-канале CS50. Эти варианты отлично подходят для того, чтобы на раннем этапе определить, готовы ли вы потратить время на изучение конкретного языка.

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

2. Смотрите видеоуроки

Вы наверняка смотрели видеоуроки на YouTube — почему бы не сделать то же самое на тему программирования?

Хотя онлайн-курсы — это лучший вариант для получения практического опыта, бесплатные онлайн-видео могут дополнить обучение и удовлетворить любопытство. Моими личными фаворитами являются “Краткий курс информатики” и “Основы” Тома Скотта, которые охватывают более широкие темы в информатике.

Я также рекомендую вышеупомянутый гарвардский курс CS50, а на YouTube нет недостатка в других лекциях по информатике.

3. Читайте книги и электронные книги

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

  • HTML/CSS: Руководство для начинающих по HTML и CSS для маркетологов
  • JavaScript: Eloquent JavaScript: Современное введение в программирование
  • Python: Краткий курс Python
  • C: Абсолютное руководство для начинающих программистов на языке C
  • C++: C++ Primer
  • Java: Эффективный Java

4. Практикуйтесь на реальных задачах

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

Проект — это любая программа (или веб-сайт), созданная на выбранном вами языке. В начале работы проекты должны быть краткосрочными. Если вы изучаете курс, вам могут быть заданы проекты, направленные на закрепление той или иной концепции. Существует также множество проектов для начинающих программистов, которые вы можете выполнить самостоятельно. Некоторые классические проекты включают:

  • Конвертер времени, в котором пользователь задает количество секунд, а программа выдает эквивалент в часах, минутах, днях и т.д.
  • Генератор случайных чисел, который производит случайное число между двумя значениями, указанными пользователем.
  • Калькулятор, в котором пользователь указывает свои входные данные и математическую операцию, а программа выдает результат.
  • Адресная книга, в которой пользователи могут вводить имена контактов, а затем искать их в вашей программе.
  • Алфавитный указатель, в котором пользователь предоставляет список слов, а программа сортирует их в алфавитном порядке.
  • Игра “Палач”, в которой пользователь пытается угадать скрытое слово, вводя буквы, а программа обеспечивает обратную связь для правильных или неправильных догадок. Если пользователь угадывает все буквы слова, он выигрывает.

Быстрый поиск в Google позволит найти еще больше мини-задач, требующих применения ваших навыков для решения реальных проблем.

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

Во-вторых, проекты по кодированию, особенно долгосрочные, дают возможность продемонстрировать свою работу. Одно дело — указать в резюме “Python”, другое — показать, что вы создали целый сайт или приложение с нуля. Проекты являются обязательным условием для программистов начального уровня, поскольку они доказывают компетентность в данном языке.

Приступая к долгосрочным проектам, подумайте о том, во что вы готовы вложить время. Будь то личный веб-сайт, мобильное приложение или программа для ПК, вы столкнетесь с беспрецедентным количеством препятствий на своем пути. Выбор проекта, который вам действительно нравится и о котором вы заботитесь, гарантирует, что вы доведете дело до конца.

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

5. Найдите наставника и сообщество

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

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

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

Онлайн-сообщества разработчиков также являются богатым ресурсом для начинающих. Обязательно загляните туда:

  • Stack Overflow, форус для вопросов и обсуждения программирования.
  • GitHub, хранилище кода для проектов с открытым исходным кодом с активным сообществом разработчиков.
  • Women Who Code — некоммерческая организация, которая организует мероприятия, сообщества и размещает вакансии для женщин, делающих карьеру в сфере технологий.
  • Сабреддит r/learnprogramming (т.е. микросайт на Reddit.com) для начинающих кодеров.

6. Рассмотрите возможность записаться в буткемп по программированию

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

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

Хотя выпускники, как правило, находят работу в сфере IT, поймите, что это не гарантированный результат и что придется выделить приличный кусок своего времени и сбережений для такого обучения. Тем не менее, трудно превзойти условия очного обучения в окружении таких же целеустремленных сверстников и преподавателей, как и вы.

Советы для начинающих программистов

Очевидно, что к практике программирования можно подойти по-разному, и некоторые методы и языки подойдут вам лучше, чем другие. Однако независимо от того, что и как вы изучаете, запомните эти советы:

Будьте терпеливы

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

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

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

Овладейте необходимыми инструментами

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

Все языки для начинающих требуют наличия текстового редактора — программы, которую вы используете для написания кода. Текстовые редакторы включают в себя функции, облегчающие работу с кодом, такие как цветовое кодирование, автозаполнение, поиск и замена и темный режим. Notepad++, Sublime Text и Emacs — популярные текстовые редакторы для начинающих.

Вы также должны научиться работать с консолью — текстовым интерфейсом операционной системы. Консоль позволяет находить файлы и выполнять команды на них быстрее, чем стандартный графический интерфейс пользователя (GUI). Ознакомьтесь с тем, как ее использовать, включая основные команды UNIX, поскольку вы будете делать то, что невозможно в графическом интерфейсе.

Изучите основы

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

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

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

Пишите чистый код с самого начала

Помимо того, что вы научитесь писать код, вы также должны уметь писать его хорошо.

Что это значит? Для любого конкретного вычисления существует более одного способа его программирования. Вы всегда должны стремиться написать его наиболее кратким и читабельным способом. Разработчики обычно работают в командах, поэтому другие будут часто читать ваш код. Если его трудно расшифровать, коллеги-разработчики не захотят с вами работать.

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

Возможно, вы задаетесь вопросом, почему чистый код так важно изучать на данном этапе. Вы новичок, так разве написание функциональных программ не должно быть главной целью? Ну, да. Однако речь идет о раннем формировании хороших привычек. Если вы приложите дополнительные усилия сейчас, вы сэкономите себе (и другим) немного здравомыслия в будущем.

Хорошим способом достижения этой цели является сокращение строк и функций. Я рекомендую ограничивать каждую строку кода максимум 80 символами, а каждую функцию — не более чем 15 строками. Хотя поначалу эти правила будут ограничены, они приучат вас отдавать предпочтение эффективному коду, а не первой пришедшей в голову идее.

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

Google – друг программиста

Нет ничего постыдного в том, чтобы искать решения проблем в Google. На самом деле, профессиональные разработчики делают это постоянно. Если вы испытываете трудности, кто-то, вероятно, был в такой же ситуации и задал вопрос на форуме. Вы удивитесь, насколько специфичными могут быть запросы, но при этом решение все равно будет найдено.

Кроме того, очень приятно закрыть 20 вкладок Stack Exchange после того, как наконец-то исправили упрямый баг.

Программирование — это больше, чем просто код

В заключение я хочу поделиться еще одним ценным советом из моего первого курса информатики.

С точки зрения новичка может показаться, что научиться кодировать — значит научиться буквально писать код. В этом есть смысл: когда мы представляем себе программиста, мы видим человека, пишущего код на компьютере.

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

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

Желаем вам удачи в обучении программированию!

По материалам сайта hubspot.com

Подпишитесь на рассылку FireSEO

и получайте подборки статей, полезных сервисов, анонсы и бонусы. Присоединяйтесь!

Автор:

Контент-менеджер в блоге FireSEO, пишу про интернет-маркетинг и разработку сайтов.

Понравилась статья? Поделить с друзьями:
  • Трофодермин мазь инструкция по применению цена отзывы аналоги
  • Мазь сунореф инструкция по применению аналоги
  • Как зажечь фонтан для торта видео инструкция
  • Лср строительство руководство
  • Aquatan для аквариума инструкция по применению