Веб-разработчик. Легкий вход в профессию бесплатное чтение
Посвящается моим родителям, Вячеславу и Татьяне,
которые вовремя увидели мои устремления и интересы,
и делали все, чтобы я мог свободно развиваться.
Вступление
На протяжении многих лет я занимаюсь любимым делом – программированием, а если точнее, – веб-разработкой. Профессионально трудиться в этой сфере я начал в 2009 году – создавал простые сайты, писал скрипты или исправлял ошибки в существующих. При этом первую программу на «бейсике» написал в далеком 1998 году, еще будучи школьником. Первые заказы, за которые я получал оплату, приходили с фриланс-биржи. Затем я завел тематический блог о веб-разработке, и заказы уже пошли оттуда. Также за короткий срок мне удалось обзавестись постоянными клиентами, которые, к слову, неустанно продолжают приглашать меня в свои проекты по сей день. Параллельно с этим занимался разработкой собственных проектов, различных скриптов, утилит, нишевых CMS-систем, – некоторые из них со временем стали достаточно популярны. Так я основательно связал жизнь с веб-разработкой, что позволило мне за эти годы накопить много уникального опыта. Им я и хочу поделиться с вами в этой книге.
Бытует мнение, что быть программистом – достаточно сложная работа, а «фриланс» или свои проекты, как правило, денег не приносят. Я слышу подобное от читателей моего блога, знакомых, товарищей и друзей, которым очень хотелось бы войти в «айти», однако их всегда что-то останавливает. Как говорится, «и хочется и колется». Возможно, так и есть, чей-то профессиональный путь в «айти» закончился, не успев начаться, что подтверждают мои наблюдения: после окончания учебы на программиста, в профессии остается лишь 5–7% учащихся. Наверное, у каждого из вас есть знакомый, отучившийся на программиста, и сейчас работающий не по профессии? А кто-то всегда хотел погрузиться в «айти», но, испугавшись сложностей, просто прошел мимо. Профессиональных фрилансеров тоже не так уж и много. В итоге, со стороны складывается следующая картина: быть программистом, веб-разработчиком не каждому дано, и якобы для этого нужно обладать какими-то уникальными способностями.
Мой путь и опыт говорят об обратном! Порог входа, на самом деле, не так уж и высок, стать профессиональным веб-разработчиком, я уверен, способен каждый. Для этого нужно лишь немного желания и усидчивости. Да, возможно, путь до уровня «сеньор» займет годы, но первые хорошо оплачиваемые проекты вы сможете реализовать гораздо раньше.
Веб-разработчик – это не только создатель сайтов, как многие думают. Это специалист, которому подвластно гораздо больше. Сегодня, как никогда, технологии, использующиеся для разработки сайтов, применяются для разработки и мобильных приложений, и консольных программ для ПК, и специализированных утилит, и много чего еще. С помощью языков программирования, таких как HTML и CSS, которые ранее служили для оформления страниц сайтов, сегодня создаются профессиональные интерфейсы для различных устройств. А PHP, будучи языком гипертекстовой разметки, стал полноценным языком общего назначения, позволяющим создавать утилиты для работы с сетевыми протоколами или приложений, работающих в фоновом режиме («демоны») операционной системы Linux.
В этой книге я хочу рассказать вам о своей профессии, о том, как стать веб-разработчиком, какие у данной профессии преимущества и недостатки, поделиться общей философией, взглядом на различные, в том числе, жизненные аспекты. Возможно, что-то покажется забавным, а что-то даже абсурдным, и тем не менее, все, о чем я буду дальше писать, является моим пережитым опытом. Я уверен, он поможет и вам легко войти в профессию!
Кому подойдет эта книга? Всем, кто хочет познакомиться с профессией веб-разработчика и сделать первые шаги, независимо от возраста, будь то школьник или взрослый, реализовавшийся в другой профессии и желающий освоить что-то новое.
Книга разделена на три части. Первую я назвал «Перспектива». В ней речь пойдет о возможностях, которые открываются перед человеком, вставшим на путь веб-разработчика, о его преимуществах и недостатках, и немного о финансах – посчитать ведь все любят? Вторая часть – «Практика». В ней я предлагаю познакомиться с технологиями поближе, а также попробовать кое-что «написать». Цель – показать новичку, что веб-разработка – это не сложно, и 80% успеха заключается в достаточно «простых практиках». Третья часть – «Погружение», в ней я рассказываю о «буднях» веб-разработчика, делюсь полезными советами, рассказываю о сложностях, которые могут возникнуть, и как их преодолеть, и о том, что кроме компьютерных технологий включает в себя моя профессия.
Моя цель написания книги – помочь вам сделать первый шаг в мир веб-разработки, или немного больше, в мир бизнеса, основанного на веб-разработке. Показать, что это не сложно, и любой человек, независимо от возраста и пола, на любом этапе жизни может стать успешным программистом. Уверен у вас все получится, желаю вам приятного чтения!
1. Почему «айти» – это лучшее ремесло
Разве мы здесь не для того, чтобы оставить след во Вселенной?
Стив Джобс
Вы, наверное, не раз слышали о преимуществах работы в сфере «айти»: и высокие зарплаты (конечно же, куда без них), и высокий спрос на специалистов в общем и веб-разработчиков в частности (среди именитых компаний), и соцпакет, и замечательные условия работы (все же были в офисах Google или Яндекс? Я нет, если что…), и возможность удаленной работы, и интересные задачи, и проекты, и новые передовые технологии, да и вообще работа не пыльная и достаточно престижная…
Прежде всего хочу сказать: всё, что я выше перечислил, возможно, и есть, но лично для меня это – чушь! Выбирать свой путь, свое ремесло, свое призвание из-за возможности удаленной работы? Или высокой (мифической) зарплаты? Или какого-то соцпакета? Предположим… Однако это не мой случай… Я последние полтора десятилетия, что называется, «работаю на себя», занимаясь разработкой собственных проектов, а также реализую проекты клиентов, пришедших ко мне по рекомендациям: из блога или с фриланс-биржи. То есть большинство всех «плюшек» я не видел, мне они неинтересны, и менять я ничего не собираюсь.
Дак что же такое работа в «айти» именно для меня? Работа с высокими технологиями может быть разной: можно быть системным администратором, можно писать высокоуровневый код на C++, можно быть дизайнером UI-интерфейсов. Я же являюсь веб-разработчиком: пишу код, работаю с базами данных, верстаю страницы, администрирую серверы и много чего еще. Но все это лишь инструменты в моих руках.
А работа для меня начинается там, где начинается творческий процесс! Там, где возникает идея, где она начинает обрастать все большим и большим количеством деталей, смыслов, функций в конце концов. Буря мыслей, эмоций, переживаний – и вот очередное озарение! Затем идея переносится в текст и формируется техническое задание. Потом подготовка, сбор информации, разработка архитектуры кода и баз данных, визуализация и – скорее, скорее к первому прототипу! И вот я уже пишу код днями и ночами – работа кипит.
Для меня работа в «айти» – это возможность реализовать свои идеи, дав им жизнь и подарив их людям! Вы представляете? Обладая знаниями и навыками программиста, можно из ничего, просто имея под рукой любой компьютер (хоть печатную машинку), находясь в любой точке планеты (хоть на дрейфующей льдине) взять и написать программу, которая будет тиражами (тиражами, друзья!) расходиться среди пользователей и делать их жизнь лучше, удобнее, комфортнее, приносить им прибыль в конце концов! Ваша программа продолжит жизнь без вас, у нее начнется свой путь… Вы же как автор будете поддерживать ее, давая лучшее (лучшие идеи, лучшие решения), и однажды отпустите в самостоятельное плавание в океане под названием «интернет».
Что это значит для меня? Я словно становлюсь отцом, отцом своего творения (которое размножается путем простого копирования), пусть и не всегда красивого, быстрого и всем понравившегося. Но именно так, методом проб и ошибок, я реализую собственные идеи, одна из которых, возможно, снова «выстрелит», позволив мне вершить свою миссию! А она, в свою очередь, заключается в том, чтобы делать с помощью разработанного мною программного обеспечения, жизнь окружающих людей, компаний, страны и – как бы это высоко не звучало – мира чуточку лучше!
А вознаграждение в виде признания или материальных благ, которое будет снова и снова вас находить, уже практически без вашего участия, – приятное дополнение ко всему вышесказанному (о денежных потоках мы еще поговорим в следующих главах). И всё это вместе превращает работу в «айти» в нечто перспективное, в некий шанс реализоваться в жизни, что называется, «на максимум», достигнув высот несколько более значимых чем «машина, квартира, хрен в пол аршина». Альтернатив этому (ремеслу) нет!
И если даже очередной мой проект, моя программа, разработка никому не пригодится, не зайдет, не выстрелит – я буду пробовать еще и еще. Буду прислушиваться к пользователям, оттачивать навыки разработчика, писать «чище» код, продумывать детальнее архитектуру и снова реализовывать проекты, давая им вполне реальную жизнь, делая жизнь пользователей чуточку лучше.
Это и есть основной и главный смысл для меня! Именно поэтому я выбираю путь «айти». И если вы горите тем же желанием, если хотите Творить, приносить пользу людям и быть за это вознаграждены, это лучшее ремесло для достижения ваших больших жизненных амбиций!
P.S. За все те годы работы, что я пишу код, мне уже сложно подсчитать количество проектов, которые я реализовал, но могу с уверенностью сказать: большая их часть были по-настоящему полезны людям, а некоторые очень даже хорошо «выстрелили».
2. И пусть весь мир подождет
Если мы хотим подсчитать количество строк кода, следует воспринимать их не как написанные, а как потраченные.
Эдсгер Дейкстра
Работа программиста, как в рекламе йогурта, где красивая девушка ест йогурт, и голос за кадром говорит: «И пусть весь мир подождет». К сожалению в нашем случае речь не о йогурте, а о сознании, которое загружено алгоритмами так, что «колени потеют». И пока мозг трудится, остальной мир существует без вас, ведь вам попросту не до него.
Среди программистов есть те, кто может работать за компьютером дни и ночи напролет, получая от этого гигантское удовольствие на протяжении многих лет. Возможно, они просто интроверты. У них любовь ко всему, что связано с компьютерами, как по части работы, так и развлечений. Что уж там, порой даже отдых и отношения происходят через экран монитора. В итоге формируется такой «особый» образ жизни, что зачастую позволяет человеку стать специалистом высокого уровня в сфере «айти». К сожалению, я так не могу, я больше экстраверт.
Мне для столь длительной работы за компьютером по сей день приходится тренировать в себе целый набор качеств: упорство, усидчивость, концентрацию. Кто-то скажет, что это замечательно, но что за этим кроется? Представьте, какой ценой вырабатывается концентрация, например длительное (порой несколько часов) удерживание в сознании множества факторов, влияющих на работу программы.
Кроме этой информации вы не допускаете в сознание больше никаких мыслей, совершенно. Ни о рабочем месте, ни о помещении, где находитесь, ни о состоянии тела и самочувствии, ни о настроении, ни о других людях или обстоятельствах, ни о чем – совершенно ни о чем, кроме того, с чем работаете. И так – часы и дни напролет.
Представьте, каким чудны́м может быть человек при переключении на другие задачи, когда вроде бы физически уже идет работа над новой задачей, например сходить в магазин за покупками, а мозг еще не отошел от предыдущей (где была максимальная концентрация). Та еще мука (или смех, смотря с какой стороны и чьими глазами смотреть)… Но никуда не деться. Других вариантов просто нет. Как-то оптимизировать или делегировать процесс не получится.
Работая с кодом, человеческий мозг порой можно сравнить с компьютерным процессором, – в зависимости от сложности задачи он начинает нагреваться, а тело с радиатором охлаждения пытается его охладить. Будучи максимально сконцентрированным, неизбежно начинаешь напрягаться и, как следствие, уставать. Концентрация – это напряжение! Да, со временем, с годами, она будет даваться легче, и напряжения будет меньше, однако первое время это просто неизбежно.
И пока вы работаете за компьютером, где ваши любимые, родные и близкие? Например, когда дворник выполняет свой тяжелый труд – метёт двор, – его близкие всегда с ним, в его голове! Понимаете, о чем я? Он может думать о них, может скучать, а если захочет, может просто позвонить, используя гарнитуру Hands Free, совершенно не отвлекаясь от рабочего процесса. Руки заняты одним делом, а мозг – другим: мыслями о близких, предстоящих делах или отдыхе. Его жизнь, со всеми близкими для него людьми и важными событиями, проходит здесь и сейчас. А жизнь программиста? Она там, в максимальной концентрации, в понимании архитектуры, в обдумывании алгоритмов, запоминании переменных. И так продолжается даже в нерабочее время, – сложно оставить работу на работе.
Самое страшное то, что этому нет конца (Испугались?). В отличие от множества других профессий, в «айти» практически невозможно выйти на уровень «всепознания» по одной простой причине – технологии развиваются такими темпами, что выученное сегодня уже завтра может оказаться устаревшим. То есть завтра нужно будет осваивать новую технологию, снова фокусироваться на обучении, максимально концентрироваться на коде и, как следствие, в очередной раз напрягаться. Только так достигается реализация проекта, запуск его «в жизнь» и получение всех связанных с этим «ништяков».
Допустим, с концентрацией у вас проблем нет, может, от природы вы быстро вникаете в суть любого проекта и налету схватываете логику любого алгоритма. А как у вас обстоят дела с усидчивостью? Умение сопротивляться всем внешним факторам, отказываться от мимолетных предложений, вроде устроить кофе-брейк или пойти прогуляться с другом (а может, с красивой девушкой?) в этот чудесный день с солнечной погодой, понимая: таких дней в году не так уж много. Иногда, усидчивость – очень больно…
Упорство, а именно умение «биться головой в стену» до победного. Увы, когда работаете над сложной задачи, шансы, что она будет решена с первого раза, крайне малы. Иногда приходится начинать снова и снова, а затем, после тестирования вроде бы уже полностью готового проекта, еще раз – начинаем снова. На этом этапе хочется просто сдаться, выкинуть компьютер в окно и уехать в горы (кстати, многие так и делают).
Однако программист не имеет права сдаться, алгоритм не может быть не завершен, а программа – написана наполовину. Придется сидеть, думать и снова писать код, лишь изредка ловя себя на мысли: «и пусть весь мир подождет».
3. Три пути разработчика
Наслаждайтесь тем, что вы делаете и вы никогда в своей жизни не будете работать.
Билл Гейтс
У программиста есть три пути, от выбора которых зависит его дальнейшая судьба, как творческой личности, специалиста и бизнесмена (да, представляете?). Первый путь – это стабильная и спланированная карьера на работе по найму. Второй – это «сумасшедшее», всестороннее, профессиональное развитие на фрилансе (попроектная работа – выполнил проект, получил оплату, следующий…). Третий путь – разработка собственных программных продуктов с целью предоставления их пользователям (не бесплатно конечно). Все три направления имеют свои плюсы и минусы, в теории вы можете двигаться по всем сразу, но на практике возможно потянуть максимум одно или два.
Например, работать над собственным проектом и время от времени брать заказы на фрилансе для поддержания финансового благосостояния, в надежде на то, что, когда завершите собственный проект, он «выстрелит» (а он обязательно выстрелит!). Или можете работать по найму, строить карьеру, а в выходные по вечерам с коллегами писать собственный проект. Или даже экстремальный вариант (по уровню нагрузки), работать по найму, а в нерабочее время брать заказы на фрилансе. В перспективе, получить постоянных клиентов и брать заказы только от них, почему бы и нет. Конечно же, выбрать что-то одно тоже можно.
Я хочу поделиться с вами собственным опытом в работе по всем трем направлениям (не одновременно конечно), но с оговоркой: работать по найму на своем пути построения карьеры веб-разработчика мне приходилось не так часто. И в большинстве случаев я выступал как партнер или подрядчик, но не как наемный работник. То есть поистине познать все плюсы и минусы данного пути лично мне не представилось. Хотя у меня много друзей и товарищей, кто работает по найму более десятка лет, и поэтому мне есть, что про этот вариант рассказать.
Наверняка многие из вас работали по найму, пусть и не в IT-компании, и поэтому большинство преимуществ и недостатков вам уже известны. На отечественном рынке в нише «айти» все то же самое, что и в любой другой нише. Приятные «плюшки» всем известны (ведь о них говорят из каждого «утюга»): красивый офис, вежливый персонал и коллеги, вложения в развитие сотрудников, всякие там «митапы» с печеньками, и много обещаний про перспективу карьерного роста. Да, зачастую так и есть, проработав лет десять в одной компании, у вас действительно есть шанс из простого «кодера» стать «тимлидом», а может и нет, тут все от вас зависит, как с начальством «дружить» будете…
Но что-то я разогнался! В хорошую компанию с «печеньками» еще надо устроиться. Формула этого пути: сначала много учимся (при этом, как правило, не зарабатываем, а платим), практикуемся, а потом устраиваемся на работу. И не факт, что вас туда возьмут, ведь желающих попасть в столь «сладкое» место очень много. Одних только выпускников разных курсов, программ переквалификации, студентов различных «гикбреинов» – тысячи. Да, возможно, вы отличный специалист, мастер своего дела, но при приеме на работу в большей степени решает то, как вы пройдете собеседования, а не ваши уникальные таланты (как ни странно). Выпускников экспресс-курсов к этому готовят (вся их суть в этом, и пусть их потом увольняют пачками, не беда – они просто штурмуют следующую компанию). А как с этим обстоят дела у вас? Поэтому на начальном уровне советую умерить аппетит и не рассчитывать на большие зарплаты и на лучшие условия, двигаясь от малого к большему постепенно, набираясь опыта – возможно даже начав с этой книги. Да, это парадокс: с одной стороны, все говорят о нехватке кадров в нише «айти» и сулят большие гонорары, с другой – многие специалисты довольствуются малым.
Соцпакеты и зарплаты, конечно, радуют, но только истинных гуру. Все остальные довольствуются типичным середнячком. Зачастую программист получает зарплату, как машинист в метро (да, у них хорошая зарплата), а иногда и меньше (может, проще пойти в машинисты?). Многое зависит от компании, куда устроитесь. При этом работать порой приходиться много, один лишь «легаси» (устаревший) код от вашего предшественника чего стоит переписать (да, придется…). И стабильный обещанный график не всегда такой стабильный. Поработать сверхурочно? Пожалуйста!
Интересные проекты? Да, возможно. Однако уже через полгода-год скорее всего вы осознаете, что все порученные вам задания однотипны. Компании выгодно иметь одного хорошо работающего специалиста, «винтик», в одной конкретной области. Любопытно, что как правило все тренинги и курсы по повышению квалификации, которые у вас будут, укладываются в ту же узкую специализацию, в которой вы работаете. Получается, развитие какое-то медленное, долгие годы топчемся на месте. Привет, «выгорание»!
Зато стабильность и вовремя выплачиваемая зарплата. Хотя и тут не все так гладко, сложно не заметить, как стремительно меняется мир вокруг нас, компании закрываются или уходят с рынка. Стабильные IT-компаний разве что Сбер и Яндекс, все остальные то и дело меняют курс (сегодня в ходу Landing Page, а завтра – работа над проектом CRM-системы для какого-нибудь завода), или устраивают реструктуризацию. Но несомненно в «айти» лучше, чем в любой другой нише.
В «найме» хорошо специалистам высокого уровня, за которых борются, которые любят свое дело, и, как ни странно, не желают двигаться по карьерной лестнице вверх – за пределы основной специализации, например, уходить в управленцы, предпочитая оставаться «Сеньором» (профессионалом), оттачивая мастерство.
Хочу представить вам текст небольшого интервью с моим другом Дмитрием Артёмовым, который, работая в крупной игровой студии Elephant Games, занимающейся разработкой компьютерных игр, прошел карьерный путь от простого программиста до руководителя проектной группы, и не только.
В каком направлении ты работаешь?
Я работаю в компании Elephant Games. На данный момент у меня несколько должностей: руководитель проектной группы (Project Manager) и по совместительству C++ программист, тимлид. Наша команда занимается развитием и поддержкой игры, которой уже почти 10 лет.
Сколько лет в компании?
11 лет (c 2012 года).
С чего начинал?
Прошел в компанию на должность «левел-дизайнер», далее стал программистом игровой логики на языке Lua.
Много ли приходилось учиться в процессе работы?
Учиться в нашей профессии приходится постоянно. Профессия программиста обязывает быть в курсе последних трендов. К примеру, если для решения одной задачи раньше нужно было затратить день-два, то с появлением какого-то нового фреймворка может потребоваться 5 минут. Необходимо постоянно изучать новые подходы в программировании, читать статьи, книги и так далее.
Сложно ли устроиться в компанию новичкам?
Новичкам везде устроиться сложно. Если человек целеустремленный, увлеченный своей профессией, постоянно улучшает навыки, у него не будет проблем устроиться куда угодно.
На какую зарплату могут рассчитывать новички?
Всё индивидуально. Тут зависит от того, на какую должность идёт и какого уровня новичок. Бывают люди совсем без опыта, студенты, тогда зарплата ниже средней (от средней по стране). Да и в целом, может, чуть ниже средней, но с возможностью роста.
Правда ли, что программистов заваливают деньгами, у них много прочих бонусов и крутой соцпакет?
Опять же, всё зависит от уровня специалиста. Сейчас очень много программистов-самоучек, которые нахватались знаний по верхам, написали приложение уровня «Hello World» и думают, что могут рассчитывать на зарплату сеньора в крупной компании.
Всё индивидуально. На данный момент профессия «программист» перегрета, такие зарплаты и бонусы, как раньше, мало где можно встретить, если только это не какая-то узкая специализация или есть знание редкого языка программирования или фреймворков, технологий. На данный момент подобное наблюдается с профессией DevOps, вот там зарплаты такие, что многим программистам и не снились.
Бывают ли увольнения?
Увольнения бывают, как и везде, это вполне нормальный процесс. Если человек не соответствует по какой-либо причине занимаемой должности, к сожалению, с ним придется попрощаться. Конечно, сразу никого не увольняют, человеку даётся шанс, проводятся беседы. Такие случаи редки, и в основном люди уходят сами. Кто-то находит работу с лучшими условиями, кто-то хочет попробовать себя в другой сфере и так далее, причины у всех разные.
Что ты больше всего любишь в своей работе? Компании?
Мне очень нравятся люди в компании, взаимодействие с ними. Когда ты сталкиваешься с увлеченными людьми, профессионалами своего дела, то вдохновляешься, заражаешься их позитивом, рабочим настроем, хочешь быть частью этой команды, быть полезным. Это круто.
Были ли разочарования? Какое самое больше, если были.
Ну тут сложно ответить однозначно. За 11 лет в компании происходило многое, в том числе и разочарования, но я бы не хотел, наверное, сейчас о них рассказывать, может потом, когда буду писать мемуары, вспомню о них и напишу.
Как оцениваешь уровень нагрузки, бывают ли выгорания?
О, да. Выгорание я ощутил, что называется, «на собственной шкуре». Примерно года три назад я принимал участие в разработке сразу двух проектов. Причём я так же, как и сейчас, пытался совмещать сразу несколько должностей. Я был и руководителем на двух проектах, «техлидом» компании и разработчиком на обоих проектах. По началу всё шло очень даже неплохо, но в какой-то момент начались проблемы сначала с одним проектом, потом с другим. Я почти сразу отказался от должности Project Manager на одном из проектов, потом пошел срыв сроков, проблемы росли как снежный ком, я понял что просто не вывожу и в какой-то момент мне стало на всё наплевать, появилось безразличие к работе. Я долго приходил в себя, взял отпуск в конце года, а после постепенно подобрал себе замену на одном из проектов, разрешил проблемы на основном, где работаю и по сей день, и жизнь снова наладилась. Конечно, я описал довольно сумбурно, однако это было довольно сложное время в моей профессиональной жизни.
Хотел бы ты сменить вид деятельности, уйти в свой проекты или уйти вообще из айти?
Такие мысли периодически возникают. У меня есть мысли для своих проектов, и их довольно много. Думаю, рано или поздно я их реализую.
Что бы ты посоветовал новичкам для успешной карьеры?
Новичкам в первую очередь необходимо усвоить, что профессия программиста – одна из самых сложных , и здесь надо постоянно развиваться, не стоять на месте, изучать новое и идти в ногу со временем…
Тут все куда интереснее, я бы даже сказал, именно тут начинается настоящее веселье (как в хорошем, так и в плохом смысле). Поистине, множество разнообразных задач различного уровня сложности, с различными условиями и такими же различными заказчиками (клиентами), со всеми вытекающими. Самое главное преимущество этого вида деятельности – это низкий порог входа в профессию с возможностью быстрого заработка.
Допустим, вы обучились основам языка разметки веб-страниц – HTML, и основам языка описания внешнего вида веб-страниц – CSS, уже можете браться за решение простых задач по доработке внешнего вида сайтов (переделки, исправления ошибок, что-то добавить или убрать). За месяц на таких простых задачах можно с лихвой перебить средний показатель по зарплате в вашем регионе. Вы сами выбираете проект, за который готовы взяться, зачастую сами ставите цену, за которую готовы работать, и срок выполнения. Свободный график, «кофе-брейки», перекуры и прочие выходные – по желанию! Но и налоги, больничные, декреты и всё прочее вы берете на себя, никакого соцпакета, конечно, здесь быть не может.
Самое главное преимущество фриланса, – это даже не низкий порог входа и быстрый выход на доход, а возможность сильно прокачать профессиональные навыки за короткое время. Дело в том, что придется учиться в процессе выполнения работы. Какой бы вы проект ни взяли, вы обязательно встретите в нем что-то новое, столкнетесь с проблемами, «гуглить», много читать и находить решения (или нет, получая «минус в карму»). Буквально за год вы получите такой кругозор в своей профессии, какой не даст ни одна работа по найму, ни собственные проекты. Также познакомитесь с огромным количеством различных бизнес идей, как новых «стартапов», так и давно функционирующих и приносящих владельцам хорошую прибыль, всё то, о чем вы даже не догадывались! Кругозор будет огромный, только стоит учесть – поверхностный (достаточный именно для решения поставленных вам задач).
Формула этого пути: учимся, получаем базовые навыки, получаем первые заказы и доход, параллельно учимся, повышая квалификацию, получаем еще более дорогие заказы и еще больше доход, опять же учимся. И так по кругу, пока не достигните потолка рынка, где уже навыки более высокого уровня просто не нужны (на фрилансе специалисты экстра-класса требуются не часто) или пока не наступит выгорание. В отличие от работы по найму, где выгорание происходит из-за монотонности работы, здесь напротив, выгорание происходит из-за постоянных новых проектов и отсутствия оплачиваемого отпуска. Я как-то за год сделал больше сотни проектов, а потом три месяца думать про фриланс не мог – тошнило.
Именно на фрилансе вы встретите самое большое количество капризных клиентов в своей жизни, вам изрядно потреплют нервы, будут менять техническое задание по ходу дела, просить скидки, предлагать созвониться напрямую, а также поработать в долг (конечно же, в очень крутом и перспективном проекте). Помимо прокачки профессиональных навыков, вы научитесь хорошо разбираться в людях, поймете, что такое «бумажный договор», а также усвоите правило: «деньги всегда вперед». И это того стоит!
Веселья здесь не много, но это самое «крутое» направление в области «айти» – на мой взгляд. Именно тут вы максимально реализуете свой творческий потенциал вкупе с предпринимательской жилкой. Что же касается профессиональных навыков, то порог входа здесь несколько выше, чем во фрилансе, но несколько ниже, чем требуется при трудоустройстве по найму. С оговоркой – невысокий уровень навыков достаточен для небольших собственных проектов, которые сможете предоставлять пользователям за небольшую плату, или вообще бесплатно, в надежде на то, что они закажут у вас индивидуальную платную доработку (усовершенствование функционала). То есть, для получения прибыли будет присутствовать «элемент фриланса». Но со временем, повышая уровень профессиональных навыков, вы сможете делать все более сложные и дорогостоящие проекты, полностью или частично отказавшись от индивидуальных заказов – передав их сторонним разработчикам, получая хорошую прибыль от продаж.
Свои проекты это и шанс сорвать «джекпот». Если хорошо чувствуете нишу, для которой разрабатываете программное обеспечение, и при этом решаете ряд проблем пользователей, есть большая вероятность востребованности вашей разработки. И тогда большое количество продаж с не меньшим количеством заказов на индивидуальную доработку вам обеспечено. Однажды пройдя этот успешный путь, вы уже не сможете остановиться и будете снова и снова придумывать и разрабатывать программный «продукт» в расчете, что он «прострелит».
Формула этого пути: учимся, делаем собственный проект, если «выстрелит» – пожинаем плоды (порой долгие годы), если нет, делаем следующий проект. Вероятность того, что проект удастся, просчитать, конечно, невозможно, но, как правило, тот проект, что «выстрелит», окупает затраты на все предыдущие, неудачные, иногда окупая с лихвой.
Однако тучи могут прийти оттуда, откуда не ждали – проект может затянуться (если выгорание настало раньше времени), или функционал получится не совсем тот, который хотели бы видеть пользователи, и, как следствие, продаж и спроса вы не увидите. А вместе с тем и прибыли, так необходимой для существования вашего дела и вас как личности. Уходя в творческий процесс разработки, нужен некий запас «жирка», это надо учитывать.
Аналогичным образом, как на фрилансе, всё, что касается соцпакета, ложится на ваши плечи. Более того, продавая свой «софт» тиражом, неплохо бы оформить как минимум ИП, завести бухгалтерию, разработать с юристом лицензионное соглашения между пользователем и вами (как автором и правообладателем).
Но самое тяжелое – поддержка уже готового, популярного проекта, когда сообщения от пользователей сыплются десятками в день. Это и благодарности, и пожелания об улучшении функционала программы, а порой критика, гнев, обиды и много чего еще. Кому-то не так ответили, кто-то неверно прочитал описание, кто-то рассчитывал на индивидуальный подход – со всем этим разбираться вам! Хотите список найденных ошибок в вашей программе? Пожалуйста! Получите – распишитесь. И не забудьте исправить их к завтрашнему утру, «выкатив» при этом очередное обновление.
По иронии, подобная «движуха», падая тяжелым грузом на ваши плечи, и есть тот самый максимальный «кайф», который можно получить, двигаясь путем собственных проектов. Это и есть то самое «признание»… За которым многие охотятся. И я уверен: если пойдете этой дорогой, у вас все непременно получится!
Для примера, приведу несколько коротких ссылок (сокращенных с помощью моего сервиса сокращений, чтобы вам было проще их набрать в строке браузера, если читаете текст на бумажном носителе), ведущих на мои странички профиля на фриланс-биржах, а также на некоторые мои проекты готовых программных решений.
Профиль на fl.ru, с чего я начинал путь во фрилансе. Хоть я там и не появлялся лет десять, в целом, данная фриланс-биржа классная: https://s.rche.ru/fl.
Профиль на Kwork. За прошедший год я выполнил на нем больше сотни заказов и даже получил отрицательный отзыв (да, и такое бывает, это нормально): https://s.rche.ru/kw.
Готовое решение для торгового бизнеса. Это CMS/CRM система (два в одном) для сайта «Совместных покупок», дата релиза 2010 год, на его базе построено несколько сотен сайтов, проект актуален по сей день https://sp.rche.ru/.
Готовое решение для страхового бизнеса. Это также CMS/CRM-система для сайта по страхованию, со встроенными калькуляторами стоимости страховки, личным кабинетом агента и многим другим, проект окупил себя, но не более https://s.rche.ru/icms.
4. Войти в «айти» после двадцати
Когда мне исполнилось 23 года, у меня уже было больше миллиона долларов, в 24 года – больше 10 миллионов, а в 25 лет – больше 100 миллионов. И всё это не имеет никакого значения, потому что я никогда ничего не делал просто ради денег.
Стив Джобс
Часто можно услышать рассуждение на тему, что в «айти» нужно входить как можно раньше, чуть ли не с детства, и, мол, после двадцати, когда вы уже окончили обучение в институте по другой специальности, в программисты идти поздно, или же непомерно сложно. Кто-то скажет, что уже и мозг не тот, – к двадцати пяти уже нет былой гибкости, – и прочее. Мое же твердое убеждение: в «айти» можно входить в любом возрасте, и если у вас есть желание, то не только можно, но и нужно! Конечно, в пятнадцать лет подрастающий ум схватывает всё куда быстрее, чем в двадцать пять или сорок лет. Главное правильно выбрать свой темп, скорость и объем обучения, а дальше дело, как говорится, «техники».
Я выделяю три основных способа войти в профессию.
Первый – выучиться на желаемую специальность в институте, потратив на это пять лет, защитить диплом, а затем трудоустроиться. Это вполне реально сделать в любом возрасте. К основным недостаткам данного пути, как вы понимаете, относится длительный срок обучения, а также сложность в освоении пятилетней программы, которая будет включать еще и общеобразовательные дисциплины. Про стоимость обучения в институте тоже забывать не нужно. А после двадцати, когда у многих появляются новые потребности, планы, цели, а вместе с ними и обязательства (кто-то вынужден работать, чтобы заработать «на жизнь», кто-то заводит отношения, а затем и семью), такой вариант как институт – это сравни покорению Эвереста. Не хочу демотивировать тех, кто все же задумывается о данном варианте – сложно не значит невозможно. Но давайте рассмотрим и другие варианты.
Второй вариант – обучающие специализированные курсы. Этот способ несколько проще чем институт, и если повезет – почему бы и нет. Всё, что нужно, – подобрать желаемую программу обучения, приступить к занятиям, и по итогу будете квалифицированным специалистом, после чего вас сразу же расхватают работодатели, наперебой предлагая зарплату по верху рынка… Друзья, это сарказм, конечно, не все так просто. Сразу возникает вопрос: как подобрать желаемую программу обучения, ничего не смысля в «айти»? Кроме как поверить обещаниям организаторов таких курсов, всесторонне доверившись им, получается, и вариантов-то больше нет. Хорошо, если с «курсом» повезет, в противном случае, вы рискуете потерять время, деньги (порой немалые) и, самое страшное, полностью разочароваться в выбранном вами пути «айтишника».
Сейчас много организаторов, предлагающих подобные курсы, обещающих за короткий срок в два или три месяца сделать из любого «профессионала экстра класса» (да именно так, я не преувеличиваю). Однако в большинстве случаев это невозможно, путь в профессионалы не такой быстрый! Стоимость же этих курсов порой варьируется на отметке пяти или десяти средних месячных зарплат по региону.
Поделюсь одной историей про моего приятеля, который в возрасте около сорока лет решил изменить жизнь и пойти в программисты (это однозначно похвально). Ранее он проделал гигантский путь специалиста, попробовал себя и в различных профессиях, и в предпринимательстве. С «компьютерами» тоже дело имел и кое-что смыслил в них. В общем, «парень» достаточно толковый. Он выбрал направление обучения на «Джуниора» (начинающего разработчика): «JavaScript-разработчик с нуля, для новичков», стоимость курса – около четырех тысяч долларов, сроком в два с половиной месяца, с прибытием в город организатора курса (то есть это еще дополнительные расходы). Вместе с курсом было много обещаний, различных бонусов и «фишек», а также гарантия трудоустройства по окончанию, с хорошей зарплатой (конечно же, если сдадите все экзамены «на отлично»).
И как-то раз он мне звонит и говорит, что уже длительное время не может разобраться с «прототипическим наследованием в JavaScript». Из-за этого тормозится обучение, прогресса не видно, и он рискует «сойти с дистанции». Спустя еще какое-то время он действительно приостановил (по факту, бросил) обучение, окончательно застряв на чем-то типа «Инварианты ловушек прокси и Reflect». Что, «б$#»? – скажете вы, и будете совершенно правы! Я хоть и не первый год в профессии, но сходу даже не могу припомнить, когда работал с «Proxy и Reflect». Инструмент однозначно полезный, но зачем он новичку? Если даже не все опытные программисты его используют.
Однако программа курса с лихвой отрабатывает запрошенные за неё деньги. Надо учить, как говорится, «от души», чтобы на выходе получился «достойный специалист». В этом и кроется главный недостаток подобных курсов – слишком быстро (в сжатые сроки) слишком много и слишком дорого. Если вы гений и схватываете все быстро – пробуйте. А я расскажу еще про один вариант.
Третий способ – входим в «айти» малыми шагами, постепенно, двигаясь медленно, без экстремальных нагрузок и «высоких чеков». Потреплем за бороду дедушку Вильфредо, того самого пресловутого Парето, уже оскомину набившего, который придумал правило «восемьдесят на двадцать»: 20% усилий дают 80% результата. Теория широко зарекомендовала себя в экономике, но точно также, практически безотказно, работает и по части программирования. 20% знаний в программировании позволят вам закрыть 80% всех поступающих задач (если вы не разработчик компилятора Malbolge, конечно). И я убежден: новичку этого вполне достаточно, чтобы трудоустроиться на позицию «джуна», выйти на фриланс или «написать» первый коммерческий продукт. Именно так я и начинал свой путь!
Однако это не значит, что можно изучить 20% какой-то технологии и остановиться. Как раз напротив, получив базовые знания в одной технологии, вы двигаетесь дальше, к следующей, затем к следующей. Таким образом развиваетесь не вглубь, а вширь. И при этом затрачиваете минимум усилий, получая максимум результата (в соотношении применимости получаемых знаний, можно сказать – КПД). Такой подход снижает риск, что вы «споткнетесь» на чем-то сложном, что возможно в обозримом будущем вам бы даже и не пригодилось (было бы обидно, да?).
Как известно, чтобы стать хорошим специалистом начинающего уровня в выбранной профессии, нужно владеть 20% знаний и затратить год. Чтобы стать хорошим специалистом среднего уровня, нужно владеть 80% знаний и затратить на это пять лет. Чтобы стать специалистом высокого уровня, постигнув все 100% знаний в выбранной области, может не хватить и целой жизни.
Как учиться? Выберите первую технологию, которую хотели бы освоить, например HTML, затем купите самоучитель (подойдет и бесплатный вариант) – «Основы для начинающих» (можно в электронном виде), сразу же потихоньку практикуйте, постоянно пользуйтесь поиском в интернете. Можно пройти какой-то базовый курс, желательно бесплатный. Все, что вам кажется сложным или непонятным, можете отложить на потом – наверстать всегда успеете. Ищите примеры готовых решений, в «сети» их множество, смотрите, как делали другие, изучайте, вникайте. Придумайте свой первый небольшой (чем меньше, тем лучше) проект и начните его реализовывать (не исключено, что даже он в будущем принесет вам прибыль, даже если будет совсем «простеньким», а идея не уникальной). Далее таким же способом осваивайте следующую технологию… Итеративный подход.
Мой друг Леха серьезно заинтересовался веб-разработкой после тридцати, решив воплотить в свет свои идеи, которые у него назревали долгое время. Он с удовольствием откликнулся на мою просьбу дать небольшое интервью. Надеюсь вам будет интересно и полезно.
Почему ты решил заняться веб-разработкой?
С юношества с компьютером. С математикой тоже хорошо. Был опыт создания простеньких сайтов – всегда интересовало программирование, но было сложно. И только недавно желания хватило настолько, чтобы действительно начать в этом что-то понимать.
С чего ты начал: с чтения книг или с написания кода?
Полноценных книг по веб- или пхп-разработке я никогда не читал, лишь учебники и статьи. Несколько раз в течение многих лет я пытался изучать php. Но что-то не шло, может, не хватало мотивации или казалось сложным. С недавних пор снова решил попробовать разобраться, нагуглил небольшой учебник. И пошло: установил линукс, апач и после обучающих уроков проверял, как работают простейшие элементы кода (операторы, операции, циклы, условия, функции).
Какой у тебя был «бэкграунд» в сфере «айти» до этого?
Первый сайт я сделал в далёкие лет 14–15 (начало нулевых). Старший брат и его одноклассники тогда увлекались всем этим – сделать свой сайт. Меня же больше тянуло к играми, хотя и зацепило, решил, что тоже хочу сделать сайт. Он был для игрового «клана» в StarCraft. Что-то почитал, скопировал html-коды готовых сайтов и с этих копий делал что-то своё. Самое, наверное, сложное было – разобраться с таблицами. Тогда зачастую «фишкой» проектов являлись изменяющиеся кнопки при наведении курсора. Скопировал такой JS-код с сайта одноклассника брата. В программировании тогда не понимал абсолютно ничего, и потому гостевую книгу попросил сделать соседа. Он уже тогда в программировании буквально «варился» чуть ли не с детства. А чтобы разместить сайт понадобилось пойти в «Ростелеком» (раньше он назывался иначе и был единственным поставщиком интернета) и написать заявление. Через некоторое время выдали поддомен в региональной игровой зоне. Ну и так на протяжении нескольких лет: сайты, где из «программной» части только форма обратной связи (разумеется, скопирована из какой-то нагугленной статьи).
Что было сложнее всего на начальном этапе?
Заинтересованность в линуксе меня подтолкнула к решительному шагу изучения php. Более или менее понять, как с ним взаимодействовать, было непросто. Установить на линукс IDE с сервером было нелегко и разобраться, как это всё работает, плюс настроить. Это, наверное, самый демотивационный момент. Но где-то прочёл, что это входит в условия «быть программистом» и является частью программирования на сколько-то там процентов (10–20%, не помню) – чуть отпустило. К тому же в привычной Windows, вероятно, всё проще.
Сейчас уже и не вспомнить всего. Обычно мой метод – «научного тыка». Скопировал готовый код, изменил, посмотрел, что произошло. Не понимаю, как можно это понять только через теорию. Вероятно, нужно обладать сильным абстрактным мышлением. Мне же надо видеть глазами: как именно влияют те или иные параметры, если я их изменю. Сложно по мере разрастания проекта помнить, где что расположено и что за что отвечает. И если приходило понимание, что где-то код оказался «мудреным» – переделывать его (а это могут быть и цепочки кода). Также было сложно после создания проекта оптимизировать его под поисковые системы.
Тяжело ли было совмещать программирование с основными своими делами (работой)?
Нет, но у меня была подушка и уверенность в завтрашнем дне. А также дела не требовали много времени. Ну и, справедливости ради, нет обременения в виде семьи. Так что я от студента мало чем отличаюсь.
Какой стек-технологий ты охватил в первый месяц?
С html и css я уже был знаком довольно хорошо, с js – частично. Получается php, затем mysql, bash где-то параллельно. И до этого с ним был небольшой опыт.
Какой проект был для тебя самым сложным?
В основном занимаюсь собственными проектами. Часто идеи приходят уже во время создания или даже после. Добавлять в проекты что-то новое бывает довольно сложно. Намного проще, когда есть узкое ТЗ или готовая схема проекта с расписанным необходимым функционалом. Из функций, генерация ЧПУ (и обратное считывание ЧПУ ссылки) совместить с изменением страницы без её перезагрузки – пришлось повозиться.
Были ли разочарования (ожидание и реальность)?
Конечно, когда проекты оказываются не востребованы.
Приходилось ли сталкиваться с прокрастинацией, выгоранием?
Всю жизнь. Связана ли веб-разработка с этим? Скорее, на данный момент больше помогает. Как способ переключиться от одной деятельности к другой.
Где черпал вдохновение?
Насколько мне известно, никто не знает ответа на этот вопрос, сколько бы ни искал. Само приходит: появилась идея, начал думать о ней, что-то фантазировать. Уже не можешь уснуть – и пошел делать.
Что бы ты посоветовал новичкам?
Да я сам новичок. Советую не «забивать» на свои проекты, даже если они сегодня не пользуются спросом. Лучше их развивать, дополнять чем-то иным.
А так, думаю, если нет предрасположенности к сфере «айти»: интереса понять, как что-то работает, желания иметь возможность на это повлиять, то не имеет смысла этим заниматься. Сегодня почти все профессии плюс-минус могут приносить хороший заработок. Лучше делать что-то в сфере, к которой есть максимальный интерес. Для тех, кому это скучно, вероятнее всего это и останется скучным. Мне в математике всегда нравились формулы, поиск решения и результат. И кайф от того, что нашёл (или сделал, если касается программирования) то, что работает.
5. Умный просто умеет «гуглить»
Именно то, как вы собираете, организуете и используете информацию, определяет, победите вы или проиграете.
Билл Гейтс
Я часто слышу от людей, далеких от «айти» (хотя и не от далеких тоже), следующее: чтобы стать программистом, надо быть в первую очередь очень умным, и якобы не всем это дано. Мол, надо в совершенстве знать алгебру и математику, владеть алгоритмическим и логическим мышлением, знать английский язык (а еще лучше множество языков) и иметь память как у слона (как известно, они славятся исключительной памятью), чтобы выучить, понять и запомнить огромное количество команд и функций (которых сотни или даже тысячи).
Возможно при решении каких-то задач (при написании драйверов устройств под операционную систему или разработки «физики» в RPG-игре) действительно всё вышеописанное нужно знать и всем перечисленным пользоваться. Но на практике для старта в профессии всё это совершенно не обязательно. А секрет в том, что просто нужно уметь пользоваться поиском в интернете, то есть «гуглить» – принцип «обучение во время работы» – по мере поступления задач.
Имея базовое понимания, как устроен язык программирования (об этом поговорим в следующих главах), будь то язык гипертекстовой разметки HTML или скриптовый язык общего назначения PHP, все остальное можно найти в «сети»: как справочник по командам, с описанием каждой команды и в частности искомой вами, так и множество примеров готовых блоков кода для решения конкретной задачи, написанных другими программистами (причем в нескольких вариантах).
Например, можете задать поисковый запрос: «php как округлить число» и тут же получить ответ, с примерами: «для округления чисел в php, есть функция round». Или задать такой поисковый запрос: «css как сделать подчеркивание у текста», и сразу выяснить ответ с примерами: «задайте свойство для элемента text-decoration: underline». Можно сформулировать и поискать решение по более сложному вопросу.
Удивительно, но среди желающих начать свой путь в «айти» много тех, кого останавливает страх перед большим объемом информации, который якобы необходимо знать наизусть. Это конечно неплохо, однако практически невозможно (особенно для новичка). Нет, друзья, гуглят все и постоянно. Я пишу код, и при этом история моего поиска в браузере пополняется десятками запросов, каждый день! Хотя с кодом я работаю большую часть жизни.
В навыке формулировать поисковый запрос и быстро находить нужную информацию и кроется секрет успеха успешного программиста: новичка или профессионала. К счастью, этот навык развивается гораздо проще и быстрее, чем обучение программированию. Профессионал лишь более четко формулирует, а затем «гуглит» решение задач, и уровень их, возможно, несколько сложнее, например: «как оптимизировать архитектуру высоконагруженной базы данных». В этом и кроется одно из его отличий от новичка.
Однако есть важный нюанс! Когда речь идет о поиске решения, не подразумевается, что это решение должно быть готовым, что называется, «под ключ». Совершенно нет! Программу вы пишете условно с нуля и каждую строку кода внимательно обдумываете, а к «всемирной паутине» обращаетесь именно за информацией по части команд или примеров готовых блоков кода. Они лишь могут являться частью проекта. Еще раз – «только команды и блоки кода». Разумеется, глупо было бы говорить о программисте, который вместо разработки проекта и написания кода постоянно ищет аналогичное решение уже кем-то реализованное. Нет, ни в коем случае!
«Поисковая строка» – это быстрый доступ к справочникам и всемирной базе знаний, а не панацея от всех бед. Логика работы программы должна быть всегда в вашей голове!
Вот пример списка поисковых запросов, которые могут быть актуальны при разработке, например, «формы обратной связи» на сайте, функционал которой следующий: «пользователь может указать в форме: тему, текст сообщения и e-mail для связи с ним, затем, нажав кнопку “отправить”, данные отправлялись бы администратору сайта в админпанель и на его e-mail».
Пример списка поисковых запросов:
● Пример HTML-формы для отправки запроса на сервер.
● HTML тег INPUT и его параметры.
● Что такое POST-запрос.
● PHP обработка POST-запроса.
● PHP подключение к базе данных MySQL.
● PHP подготовка данных для вставки в БД.
● PHP пример вставки строки в таблицу MySQL.
● PHP отправка сообщения на E-Mail.
● PHP параметры функции mail ().
● CSS для оформления блока «спасибо за сообщение».
Вы спросите: «Откуда же мне знать заранее, еще до написания программы и вообще не имея опыта, что искать в сети? Вот откуда на начальном этапе мне знать про какую-то там команду mail (), чтобы искать про нее информацию?».
На самом деле все просто. Вам не нужно формулировать сразу весь список вопросов для поиска. Надо лишь сформулировать первый. Просто подумайте, с чего начинается ваша программа? С HTML-формы, куда пользователь будет вводить сообщение. Вот и поищите информацию о ней. Изучая найденный HTML-код, вы увидите в нём теги INPUT, изучите их, также найдя про них информацию. Затем подумайте, что должна делать форма? Верно, отправлять данные на сервер. Поищите информацию, как это сделать, отправить и принять данные. Вы встретите упоминания о POST-запросе – отлично, «погуглите» про него. И так дальше, шаг за шагом, по мере продвижения вашей работы.
Ваша программа готова! Таким образом, просто понимая, какую функцию должна выполнять программа, можно разбить ее алгоритм на последовательность действий, а затем «загуглить», как реализовать каждое из полученного списка. Конечно же найденные результаты требуют осмысления и могут нуждаться в доработке, но именно так реализуется подход «обучение во время работы».
6. Полный стек
Большинство программ на сегодняшний день подобны египетским пирамидам из миллиона кирпичиков друг на друге и без конструктивной целостности – они просто построены грубой силой и тысячами рабов.
Алан Кёртис Кэй
В мире «айти» есть разные профессии, одних только типов программистов насчитывается несколько десятков, и все в определенной степени являются специалистами – просто разными. Одни разрабатывают приложения для мобильных устройств, другие пишут программы для операционных систем семейства Linux, третьи работают с веб-технологиями. Для работы в каждом направлении, требуется уникальный перечень технологий, который программист должен знать. Это называется «стек» (т.е. список) технологий».
Бывают узкоспециализированные программисты, которые знают ограниченное количество технологий. Их преимущество в том, что они знают эти технологии в совершенстве, оттачивая мастерство годами. К недостаткам можно отнести то, что, ограничившись определенным, узким «стеком» программисту будет крайне сложно реализовать готовый «продукт», с нуля до конечного «релиза» (выхода в свет). Готовый продукт чаще всего требует гораздо большего набора технологий, чем владеет узкоспециализированный программист.
Программист, владеющий всем перечнем технологий в своей нише, называется «Разработчик Full-stack» (от англ. Full stack – полный стек, список). Его преимущества очевидны: возможность решать максимум поставленных перед ним задач самому, реализовывать проекты, требующие всего перечня технологий. А к недостаткам можно отнести то, что как правило «разработчик Full-stack» в первые годы практики владеет познаниями технологий не настолько глубоко, как узкий специалист. Разумеется с годами он догонит, однако в силу более широкого перечня технологий развитие «в глубину» у Full-stack программиста идет медленнее.
У каждого программиста, занятого в своем направлении, стек технологий свой. Я являюсь веб-разработчиком, и мой стек технологий выглядит следующим образом: HTML, CSS, JavaScript, PHP, MySQL, основы администрирования веб-серверов на базе Linux (далее мы будем разбирать именно этот список). У разработчика мобильных приложений под iOS стек будет таким: Objective-C, Swift, JavaScript, Flutter. А вот для Android уже другой стек: Java, Kotlin, Jetpack Compose. У разработчика программ для операционной системы Windows: C#, WinForms, WPF, MS SQL.
Стек технологий может дополняться знаниями специализированных библиотек (расширяющих базовый язык программирования, например jQuery для JavaScript) и фреймворков (готовых наборов инструментов, например Laravel для PHP).
Как вы понимаете, программисты не взаимозаменяемы, и попросить веб-разработчика просто дописать какой-то функционал для программы, работающей на компьютере под управлением Windows, не получится. Безусловно, у всех программистов есть общая база знаний, основы устройства и работы вычислительной техники, компьютерных сетей и ряда прочих навыков, позволяющих им быстро ориентироваться в «рабочем окружении» того устройства, с которым они имеют дело. Тенденции последних лет сводятся к тому, что потребность в узкоспециализированном специалисте уступает место специалистам с более широким охватом технологий. Уровень такой специализации получил название DevOps (от англ. development & operations) – инженер, который владеет навыками и методологиями полного цикла разработки, настройки и развертывания программного обеспечения. Иными словами, работодатель (или заказчик), хочет получить за свои деньги больше опцией в одном лице нанимаемого им специалиста.
На рынке труда, будь то в найме или во фрилансе, пока еще ценится и достойнее оплачивается именно узкоспециализированный специалист. Так как к его услугам прибегают в основном для решения конкретных и при этом сложных задач, которые не может решить программист начального или среднего уровня. С другой стороны, такому специалисту бывает сложнее устроиться на работу, или получить заказ на фрилансе, именно по причине того, что ниша его – узкая.
Если узкоспециализированный специалист решит заняться своими проектами, то чаще всего они будут рассчитаны на профессиональную аудиторию, например на других разработчиков, которые смогут использовать его готовые наработки в своих уже полномасштабных проектах. Программист, имеющий в своем арсенале полный стек технологий, может разрабатывать продукт для конечного пользователя.
Какой именно путь выбрать – решать вам, я бы рекомендовал на начальной стадии освоить полный стек технологий выбранного направления (тех, что описываются в этой книге, стек веб-разработчика), затем углубиться в одну или две технологии, достигнув там мастерства профессионала, а затем постепенно, не торопясь, «подтягивать» остальные. Идеальный вариант – через несколько лет стать узкоспециализированным программистом по каждой технологии из всего стека. Таким образом вы будете профессионалом высшей категории в области веб-разработки (или иного, выбранного вами направления), «разработчиком full-stack», а затем, возможно, DevOps.
Представляю вашему вниманию интервью с моим братом Андреем Яровиковым, который является, что называется, «прирожденным айтишником». Он познакомился с миром электроники, микроэлектроники и программированием еще в дошкольные годы (более тридцати лет назад). Профессионал своего дела, «full-stack» разработчик фирмы Sinoby.
В каком направлении ты работаешь?
Разработчик веб-сайтов и различного рода внутренних сервисов компании.
Какое самое большое преимущество веб-разработчика full-stack?
Если ты «backend» или «frontend», зачастую свою работу ты делаешь лучше, чем «full-stack». Ты являешься хорошим винтиком в хорошо отлаженном механизме разработки. Если ты «full-stack», у тебя более широкий кругозор при программировании проектов. Желательно знание других языков программирования для понимания подходов и технологий. Из «full-stack» есть возможность вырасти в руководителя проектов. Есть понимание, как устроены реально работающие проекты и сайты.
Разработка на full-stack – есть ли в этом азарт? Правда, что работа с большим набором технологий не дает скучать?
Азарт есть всегда, особенно на первых этапах. Азарт приходит, когда занимаешься чем то новым. Глаза горят. Хочется всё сделать хорошо, но реальность такова, что всегда есть сжатые сроки. Почти всегда проект надо сделать ещё вчера, так как время программиста стоит денег, а заказчик и руководитель проектов должны экономить и свои, и деньги клиента. По этой причине в реальных проектах, чтобы успеть к сроку, часто приходится идти на компромиссы и писать не всегда понятный и красивый код. Для знания большого набора технологий надо уделять свободное время, которое никто не хочет оплачивать. Реальность такова: на работе тебя пытаются использовать для зарабатывания денег, и никто не хочет платить за твоё обучение. Набор технологий и инструментов даёт выбор, как сделать тот или иной проект максимально быстро и технологично.
Что самое сложное в full-stack?
Пожалуй, это опыт. Нужно много знать и стараться поспевать за трендами. Обычно это приводит к тому, что код, написанный, например «frontend», красивее и лучше, так как человек целыми днями только этим занимается и оттачивает мастерство, однако заказчику нужен реально работающий проект. Особенно если это «startup». И ему главное готовый продукт.
Правда, что узкая специализация ценится больше?
Скажем так. Ценится хороший разработчик. Специализацию всегда можно поменять. Это не проблема, начиная от определенного уровня навыков и технологий. Если ты «full-stack», ты можешь стать хорошим «backend» или «frontend». Количество вакансий обычно больше на «frontend» или «backend», так как руководители проектов набирают команду в уже создаваемый проект. Им нужен тот, кто будет создавать какую-то конкретную часть проекта.
Какой путь развития лучше: сразу в full-stack или что-то одно, но глубоко?
По моему мнению изначально желательно вкладываться в своё развитие. Изучать технологии. Попробовать то, что нравится. После того как определился, можно выбирать направление. Лучше всего начинать путь в разработке с углубленного изучения чего-то одного. Если станешь хорошим «backend» или «frontend» разработчиком, посмотришь, как у других работают проекты под капотом, сможешь пройти собеседование (отдельная тема), тебя возьмут в нормальную команду и подтянут твой «skill».
Как постоянно поддерживать уровень знаний, ведь технологий много?
Это самое сложное. Как я уже писал выше – никто не хочет платить за твоё обучение, поскольку тебе на работе платят зарплату, и ты должен её отбивать. Все заинтересованы в получении прибыли. Главный критерий – максимально быстро сдать проект и приступать к следующему. Приходится изучать технологии в свободное от работы время. Читать книжки в метро или в поезде после работы. Тебе должна нравится профессия, иначе встанешь на своём уровне и годами будешь делать одно и то же. Стагнация.
Правда, что full-stack разработчик в одиночку может построить большой проект уровня «управления всеми процессами компании»?
Когда меня спрашивают, можно ли сделать такой проект или такую функцию, я всегда отвечаю: можно всё, что угодно. Главное – время и деньги, которые будут выделяться на разработку. Обычно этот ответ нравится всем. Все понимают, что хорошо, быстро и дешево не бывает. Можно написать всё самостоятельно – это не проблема, но проект будет затягиваться. Можно нанять человека, который тебя разгрузит, только ему нужно платить зарплату, что удорожает проект. Можно нанять команду – это гораздо быстрее, чем делать всё самому, однако уже нужно хорошее финансирование.
Что бы ты посоветовал новичкам?
Как завещал Ленин: «учиться, учиться и ещё раз учиться». Видел и хороший плакат: «Теория без практики – мертва, практика без теории – слепа». Много практики. Пишите какие-то свои простые завершенные проекты, используя стек знаний. И всё получится.
7. Денежные потоки
Зарабатывай за счет своего ума, а не за счет своего времени.
Наваль Равикант
Раньше, лет двадцать назад или более, компьютерная тематика и уж тем более профессия в этой сфере привлекала лишь узкий круг людей, которых в свою очередь называли «гиками» (от англ. слова geek – «человек, увлеченный высокими технологиями»), и которые были рады работать почти за бесплатно (у программистов или системных администраторов, было даже правило: что-то сделать «за пиво», хотя-бы что-то). Сейчас направление «айти» привлекает многих «зарплатами», о которых не говорит в последнее время только ленивый. В этой главе я расскажу, какими путями «айтишнику» могут приходить деньги, возможно, подтвержу какие-то общепринятые мнения, или же опровергну. В любом случае, посчитать всегда интересно (особенно чужие денежки, правда?).
Однако давайте сразу условимся. Так как вы эту книгу можете читать в разное время, прошедшее с момента написания, приводить какие-то денежные суммы в абсолютных значениях не буду, просто потому что курсы валют постоянно меняются, цены скачут (растут), да и вообще инфляцию никто не отменял. Оперировать я буду в относительных величинах, например «средняя зарплата в столице». Для регионов можно брать значение «средняя зарплата в столице региона». Это позволит в любой момент времени понимать, о каких примерно цифрах идет речь. И вряд ли рынок ниши «айти» в относительных единицах изменится по отношению к другим нишам в ближайшие пару десятков лет.
В зависимости от того, какой путь в «айти» вы выбрали – найм, фриланс или собственные проекты, – будут определенным образом формироваться денежные потоки.
В найме вы просто получаете зарплату, то есть деньги от работодателя ежемесячно поступают к вам, на их количество влияет соблюдение вами рабочего графика (и трудового договора), уровень компетенции и немного (или много) удачи при устройстве на работу. Вопреки всеобщему убеждению, что зарплаты у всех «айтишников» высокие, скажу, – не у всех! Только у тех, кто является профессионалом высокого класса. Новичок может рассчитывать на сумму в половину от средней зарплаты. И новичком может считаться первые три года (а то и дольше) работы в компании. Да, грустно, не спорю, но такова реальность.
Имея хороший стаж, от пяти лет, и «прокачку» по всему «стеку» технологий, можно рассчитывать на 1-1,5, максимум 2, средние зарплаты. И только на отметке стажа в семь или десять лет можно говорить о сумме в 3 и более средних зарплат. Еще раз: друзья, может понадобиться десять лет, чтобы выйти на тот уровень зарплат, о которых все кругом говорят!
Во фрилансе аналогичным образом деньги от клиентов поступают к вам, но на их количество влияют иные факторы, а именно, умение находить заказчиков, грамотная оценка стоимости и сроков проекта, ваше усердие в работе и уровень компетенций. Как говорится, «волка ноги кормят». Тут с доходом дела обстоят несколько иначе, и самое интересно то, что новичок, выполняя узкий перечень простейших задач, за счет высокой скорости работы может в считанные месяцы (отточить навык) выйти на 1-2 средние зарплаты. Выйти на показатель, который в найме достигается лишь спустя годы.
Есть и обратная сторона: это – потолок, в который упирается каждый фрилансер, а именно – физическое ограничение по максимальному количеству выполнения заказов в месяц. И даже повышение уровня квалификации не в силах помочь. Дело в том, что задачи как были из разряда «все подряд» – и простое, и сложное, – так и остались. Высокая квалификация может просто не пригодиться. Если же фрилансер решит сфокусироваться лишь на сложных и хорошо оплачиваемых заказах, он рискует длительное время «сидеть» без работы. Достичь показателей в зарплате, максимального уровня найма, возможно, не удастся – никогда. Вы можете десять лет работать и получать тот же доход, что и в первые месяцы после входа в эту сферу. Неоднократно проверено на личном опыте…
В собственных проектах, опять же, интереснее: тут открывается поистине большое поле для творческих идей по части формирования бизнес модели и денежного потока. Вы можете получать деньги с прямых продаж исключительных прав на свой «продукт», или же с предоставления неисключительных прав на использование (авторское вознаграждение) с рядом ограничений для клиента (о правовых аспектах, авторстве, правах и лицензиях поговорим в следующих главах). Возможно, предоставление доступа с разовой оплатой или с оплатой помесячной или годовой подписки. SaaS (Software as a Service) – предоставление программного обеспечения как сервис.
В отличие от найма, где вы продаете свое время, и фриланса, где продаете конечный результат вашего труда, в собственных проектах вы как личность можете вообще не быть вовлечены в так называемый товарно-денежный обмен. Сначала работаете на «продукт» – потом «продукт» работает на вас. Все может функционировать автономно. Опять же, проверено на личном опыте. Именно тут начинается строительство собственного бизнеса, будь то в рамках индивидуального предпринимательства или компании.
Здесь доход может быть нулевой и даже минусовой (расходы тоже бывают), если проект «не зашел»; может быть доход с постепенным ростом длиною в годы; а может произойти и резкий скачок по числу совершаемых сделок, доход устремится на отметку, о которой и говорить «неприлично». Как вы понимаете, тут давать оценку в средних зарплатах уже некорректно, так как разброс сумм – «ноль тире бесконечность». Не всем подойдет такое положение дел, но те, кто готов рисковать, в ком есть предпринимательская и творческая жилки, будут в восторге!
Денежные потоки, друзья, – они такие. Кому что больше по душе – выбирайте, комбинируйте. Мир «айти» разнообразен.
8. Права на код
Для меня не важно, на чьей стороне сила, важно то, на чьей стороне право.
Виктор Мари Гюго
Работая с кодом, как со своим, так и с чужим, важно учитывать и юридический аспект по части того, кто является автором кода, кто правообладателем и какие операции над кодом разрешено производить вам (если работаете с чужим кодом) или вашим пользователям (если они работают с вашим кодом). При этом учитывать юридическую сторону нужно в любом случае, используете ли вы непосредственно сам текст кода или со скомпилированной (где исходный код переведен в машинный язык) программой – запуская ее на своем устройстве для выполнения.
В данной главе разберем следующие понятия: автор, правообладатель, исключительное право, неисключительное право, и что такое лицензия на программу. А также то, как они все взаимосвязаны между собой. Даже базовое поверхностное понимание, как все устроено, сбережет вам в будущем время и нервы, а возможно и оградит вас от непредвиденных финансовых расходов.
Начнем с того, кто такой «автор»? И что такое «авторское право»? В контексте разработки программного обеспечения, автор – это тот, кто его написал, и факт авторства (то есть, имя автора) закрепляется за программистом автоматически, для этого не обязательно что-то специально оформлять и регистрировать, таков закон (причем это регулируется, в том числе, международным правом). Если кто-то пожелает оспорить принадлежность кода автору, это бремя ляжет на плечи оспаривающего.
Для того, чтобы уведомить пользователей произведения, что все права на него защищены (напомню, это происходит автоматически по факту его реализации автором), можно дополнительно разместить в описании программы или на сайте (если речь о сайте) копирайт. Он выглядит следующим образом: – «© Имя Автора. Все права защищены, 2023», то есть содержит символ копирайта, имя автора, текст о правах и год публикации. Такой копирайт имеет юридическую силу: пользователь произведения с наличием копирайта осведомлен об авторских правах на него.
Автор имеет следующие права, одни из которых отчуждаемы (могут быть переданы другим лицам), а другие нет:
● Считаться автором (не отчуждаемо).
● Обнародовать произведения под своим именем, псевдонимом или анонимно (не отчуждаемо).
● На неприкосновенность произведения (отчуждаемо).
● Исключительное право на произведение (отчуждаемо).
Отчуждаемые права можно продать третьим лицам, передать за вознаграждение, или автоматически присвоить, если автор создал произведение (программу) на заказ или в процессе выполнения своих трудовых обязательств (написал программу на работе). Это важный момент, который нужно учитывать, работая, например, с заказами на фрилансе. Если реализуете программу для заказчика, несомненно, вы будете считаться ее автором, у вас будет право указать своё имя в описании программы, но при этом более вы с ней (и ее копиями) не сможете совершать никаких действий: у вас не будет исключительных прав. Также автор, в рамках работы над заказом, может заключить договор, регулирующий передачу прав. Например, автор может указать, что заказчик получает не все права на программу, а лишь часть (допустим, только воспроизведение), это называется «неисключительные права».
Исключительные права на произведения позволяют использовать программу любым образом: осуществлять публичный показ, воспроизводить, модифицировать, распространять или продавать ее копии с ограниченными правами использования. То есть, совершать абсолютно любые действия. Тот, кто владеет исключительными правами, является правообладателем. Например, распространение программы без разрешения правообладателя называется «пиратством» и уголовно наказуемо. В случае неправомерного размещения программы на каком-то интернет ресурсе правообладатель может потребовать у владельца ресурса удалить ее, в ином случае обратиться в суд и Роскомнадзор (Федеральный орган, осуществляющий надзор в сфере связи), после чего данным вопросом будут заниматься они.
При этом исключительные права являются имущественными – их можно передать по договору (продать) или оставить детям как наследство (и правами будут распоряжаться ваши наследники). Исключительные права действуют на протяжении всей жизни их обладателя, а также в течение семидесяти лет после его смерти.
По желанию, для большей надежности, по части закрепления за собой статуса автора, а также исключительных прав, можно зарегистрировать программу в Федеральной службе по Интеллектуальной Собственности (Роспатент), получив на нее свидетельство. Для этого надо подготовить необходимые документы, сам код программы и отправить заявку в Роспатент. Стоит учитывать: сам Роспатент не изучает присланный вами код на его уникальность и достоверность факта, что именно вы являетесь автором и правообладателем.
Роспатент занимается так называемым депонированием. То есть, лишь принимает на хранение присланный вами код, и в случае возникновения споров по нему (об авторстве или исключительном праве) Роспатент сможет предоставить хранящийся у него код с указанием даты, когда тот был депонирован. Это позволит установить факт (например в суде), кто первее из сторон заявителей (участников спора) имел исходник данного кода на руках (а следовательно признается автором по закону). Депонирование – один из способов защиты программы от незаконного распространения (от «пиратства»). В своем блоге я подробно рассказал, как получить свидетельство на программу в Роспатенте, статья доступна по ссылке https://s.rche.ru/fips.
В «сети» можно встретить мнение программистов, которые говорят, что защищать программу от незаконного распространения до момента ее популярности глупо (намекая, что автор несколько высокомерен и переоценивает свои таланты), мол, сначала сделайте такую программу, которую захочет использовать большое число пользователей. Я же с этим мнением категорически не согласен. Дело в том, что когда программа станет популярной, защищать права на нее таким образом будет уже несколько сложнее. Ведь ее написание может требовать гигантских усилий: много месяцев или даже лет, а также финансовых вложений.
Для того, чтобы пользователи могли работать с вашей программой, нужно им предоставить данное право. Да, конечно, можно просто предоставить копию самой программы, не снабдив ее информацией, какой перечень прав и действий доступен. Однако это может привести к неприятным последствиям. Поэтому каждая копия программы, передаваемая в рамках неисключительных прав, должна содержать данную информацию. Это называется «лицензия».
Ее текст можно составить самостоятельно. Он может содержать перечень, что пользователю разрешается делать с программой. А можно воспользоваться уже готовым текстом. Существует множество готовых лицензий (GNU General Public License, MIT, AGPL и т. д.), разработанных профессиональными юристами в области международного права. Их текст, как правило, написан на английском языке. И тем не менее он имеет силу в большинстве стран мира. В некоторых случаях, подобные (готовые) лицензии, могут вступать в конфликт с законодательством тех стран, где используется ваша программа, поэтому, если разрабатываете «продукт» для рынка, какой-то определенной страны, заблаговременно проконсультируйтесь с компетентным юристом (разумеется, это актуально только если ваш продукт уже имеет большой пользовательский охват и «бюджеты»). Для более удобной работы с готовыми лицензиями я подготовил для вас «генератор лицензий», доступный в моем блоге по ссылке https://s.rche.ru/licgen. Пользуйтесь на здоровье.
Снабдить программу текстом лицензии можно по-разному, например, добавить в архив с программой текстовый файл, содержащий необходимую информацию, или разместить текст лицензии на сайте автора в том разделе, где предоставляется возможность ее скачать.
Также при разработке программного обеспечения не исключено, что вы будете использовать сторонние готовые модули и библиотеки, написанные ранее другими авторами, поэтому тщательно изучайте условия их использования. Может получиться так, что их авторы (правообладатели) не разрешают, например использование в коммерческих проектах или требуют соблюдение каких-то иных, порой специфических, условий. Возможно, для разработки вашей программы лучше посмотреть сторонние библиотеки, которые не имеют подобных ограничений, например, распространяемых по лицензии MIT (The MIT License).
9. Чистый разум
У вас есть власть над своим разумом, а не за пределами событий. Осознай это, и ты обретешь силы.
Марк Аврелий
Как я ранее говорил, программисту важно иметь хорошо «прокаченные» навыки концентрации, фокусировки внимания, терпения и усидчивости. Все они напрямую зависят от вашего ментального, физического и психологического состояния, иными словами, от вашего здоровья в целом. Именно это позволяет достигать желаемых результатов как в обучении, так и по части работы в сфере высоких технологий. Ваш основной рабочий инструмент – не язык программирования, не компьютер и даже не ваши пальцы, которыми вы со скоростью сапсана (который славиться своей скоростью в спринтах) набиваете код на клавиатуре, а ваш чистый разум. Именно от работы мозга и вашего разума зависит ваш успех во всех жизненных сферах (это просто факт, друзья).
Я не хочу показаться «ханжой» и занудой, также умышленно не буду оперировать какой-нибудь статистикой, ссылаться на исследования и каких-то ученых, а просто поделюсь опытом в контексте своей профессиональной деятельности в роли программиста.
Еще в начале «карьеры» веб-разработчика, после окончания института, я заметил за собой такую особенность: если выпиваю умеренную дозу алкоголя, например в пятницу вечером, затем на протяжении недели я не могу сконцентрироваться на проекте и коде, как это было ранее. То есть, не могу войти в состояние «потока», когда мысли на ходу формируются в завершенные идеи, и все это моментально перетекает в код (строки, функции, классы, модули). Это состояние, когда кажется, будто кисти рук напрямую соединены с сознанием, перенося сотни строк кода в IDE (интерактивную среду разработки) на компьютере.
Постепенно я стал экспериментировать, то есть прекращать употребление алкоголя на пару недель, месяц, два, и наблюдать за своим сознанием. Результаты всегда подтверждались. Действительно, выпивая алкоголь в эквиваленте «сто грамм водки» за вечер, вся последующая неделя проходит с показаниями КПД (коэффициент полезного действия) мозга с сильным отставанием (от прежнего). И в какой-то момент, я окончательно принял решение не употреблять алкоголь – вообще никогда и ни в каком виде. Затем, в течение десяти лет, я занимался работой и творчеством, писал код, работал с клиентами, разрабатывал свои проекты – совершенно без алкоголя (от слова «совсем»).
Но как-то раз, давно позабыв о своих экспериментах на «старте» пути, я решил, что выпивать немного хорошего, дорогого коньяка или вина, и только по праздникам, можно. Спустя какое-то время я заметил, вспомнил и осознал, что мои прежние выводы были верны – алкоголь, даже в небольших дозах, полностью перекрывает доступ к состоянию «потока» на несколько дней (от пяти до тридцати). Это ужасно, друзья! Вывод однозначный: если хотите связать жизнь с миром «айти», алкоголь – ваш злейший враг. А рассказы, что любая проблема решается с помощью «полторашки пива», вовремя занесенной «сисадмину», это дело давно минувших дней. Сейчас это, мягко говоря, «не модно».
Аналогичным образом на ваш мозг и сознание действуют другие вредные привычки. Несмотря на то, что я, например, никогда не курил, думаю, мое предположение, что сигареты также снижают потенциал сознания, никто оспаривать не станет. Следуя банальной логике, мне понятно, что нанося вред легким, насыщая кровь никотином, аммиаком, угарным газом, свинцом и прочими вдыхаемыми с табачным дымом веществами, вы уж точно никак не способствуете продуктивности своего мозга. Вообще, для хорошего самочувствия человеку, который большую часть времени проводит за компьютером, жизненно важно иметь постоянный приток максимально свежего воздуха, насыщенного кислородом. Мозгу это необходимо. Так что и никотин – в топку.
Вместе с ним придется максимально сократить, а по возможности и отказаться, от различного рода энергетических напитков (повышающих раздражительность, провоцирующих расстройство сна и депрессию); употребления прочих психостимуляторов, в том числе различных настоек, таблеток; посещение кальянных и курения кальянов (тот же угарный газ, прочие химические вещества), «вайпов», «ашек». Желательно, по возможности, сократить в рационе питания всякий «мусор»: чипсы, газировку, фастфуд, снеки, соусы. Я не говорю, что от всего нужно отказаться раз и навсегда и больше никогда в жизни не употреблять. Однако сократить это однозначно стоит – тело и мозг скажут вам за это спасибо.
Что касается различных запрещенных препаратов, тут и говорить не о чем: если что-то такое присутствует в вашей жизни, все это исключить раз и навсегда. Не вижу смысла на этом даже заострять внимание.
Немаловажен психологический аспект состояния вашего сознания. Если в жизни есть неразрешенные проблемы, семейные драмы, конфликты в семье и отношениях, отсутствие взаимопонимания с родителями, неурегулированные споры, трудности с законом, – это также может стать тормозом на пути профессионального развития, причем не только в «айти». Но очень остро отражается именно на работе в области разработки программного обеспечения (программирования), где, еще раз повторюсь, важен чистый разум.
Дело в том, что если что-то из вышеперечисленного в вашей жизни присутствует, с наибольшей вероятностью оно перетягивает внимание. Достаточно какого-то «триггера», и мысли уже там, фокус внимания на проекте потерян, а чтобы восстановить его может потребоваться как пятнадцать минут, так и целый час (если проект сложный). Вы представляете? «Выпал» из фокуса внимания, потерял мысль, задумался о своих переживаниях – и всё, упустил драгоценное время.
Поэтому настойчиво рекомендую, параллельно с погружением в «айти», урегулировать все вопросы и проблемы, которые, на ваш взгляд, пагубно влияют на ваше настроение, внимание и концентрацию. Попросите прощения у родителей, договоритесь со своей «второй половинкой», найдите консенсус, заплатите налоги в конце концов! Вообще, «айтишники» всегда считались миролюбивыми, добрыми и увлеченными людьми, которые могли часами рассказывать про свои «компуктеры», а еще немного чудаками – да есть такое, признаю… Но это же здорово!
Информационная гигиена – сократите до минимума просмотр новостей, особенно негативного характера. Минимизируйте потребление контента социальных сетей, особенно того, который показывает чью-то «красивую» жизнь – в большинстве случаев все это «постановочный контент», но его просмотр создает сильный контраст с окружающей реальностью. После резко падает мотивация заниматься творчеством, а мысли перетекают из «о, как здорово, я тоже так хочу» в «я веду унылый образ жизни и ни на что не способен». Полностью оградите себя от контента, явно направленного на сексуальную провокацию (это вид психологической манипуляции), будь то фотографии знакомой девушки из той же соцсети или просмотр фильмов для взрослых (что вообще разрушает мозг на физическом уровне, информации об этом полно, изучайте) – оградите себя от всего этого настолько, насколько возможно!
По части спорта. Бытует мнение, будто спорт очень полезен для мозга, но и тут не все так однозначно. Спорт бывает разным. Если вы боксер (в чем у меня был опыт) и параллельно решили стать программистом, учитывайте такой момент: систематические удары по голове не сильно-то способствуют повышению уровня концентрации (мягко говоря), которая нам так необходима. Это касается и других контактных видов спорта, где есть элементы, связанные с нанесением физического урона противнику (и вам).
Посещение спортзала, чтобы «подкачаться». В соотношении затрат времени, сил и денег на получаемый результат по части пользы для мозга – она (польза) очень незначительна. Подробнее о затратах времени и эффективности для среднего обывателя, такого как я, можете прочитать в моей статье: «Тренировка дома или спортзал? Подсчитаем», доступной по ссылке https://s.rche.ru/sport. На мой взгляд, если не планируете стать профессиональным спортсменом и не «больны» желанием сделать себе «красивое» тело, лучший вариант – разминка, зарядка, а также базовые упражнения (турник, отжим, приседания) в домашних условиях, иногда пробежки на свежем воздухе. Поверьте, этого более чем достаточно (по части спорта) для хорошей работы мозга и чистого разума.
Берегите свой рабочий инструмент друзья, – это лучшая инвестиция в себя, которую вы можете сделать. Я стараюсь придерживаться всего, о чем написал выше, и ни разу об этом не пожалел, чего и вам желаю.
10. Терминология
Прежде чем спорить, давайте договоримся о терминах.
Франсуа-Мари Аруэ
Я не хочу сильно «грузить» вас различной профессиональной терминологией, чтобы не усложнять восприятие книги новичками, но некоторые термины, определения и понятия в мире веб-разработки необходимо знать. Тем более дальше, по мере чтения книги, они будут встречаться чаще. Возможно, опытные пользователи, читающие этот текст, прекрасно понимают, что такое, например, «сервер» или «протокол связи с сервером». Однако многие новички могут не понимать, о чем речь. Быть может, определения терминов читать не так интересно, как истории «из опыта», и все же для общего кругозора или повторения рекомендую ознакомиться со всем списком.
CDN (Content Delivery Network) – Сеть из нескольких взаимосвязанных серверов, размещенных по всему миру с целью размещения на них некоторых файлов ресурсов для ускорения их последующей доставки конечным пользователям.
DNS (Domain Name System) – Система доменных имён, хранящая сведения (записи) о доменах, таких как IP-адрес сервера, куда ссылается домен, данные о маршрутизации почты, прочие служебные записи.
FTP (File Transfer Protocol) – Сетевой протокол передачи файлов, работающий по принципу клиент-сервер. Клиент устанавливает соединение с сервером, например по IP и порту (обычно это порт 21), затем может работать с файловой системой сервера так же, как и с локальной – записывать, изменять и удалять файлы.
GET – Метод запроса по протоколу HTTP, для обращения к сетевому ресурсу (сайту) по URL для получения данных от него. Для того чтобы передать какие-то данные в момент запроса, они добавляются в URL.
HTTP (HyperText Transfer Protocol) – Универсальный протокол взаимодействия сетевых узлов между собой, работающий по принципу клиент-сервер. Изначально разрабатывался для передачи документов (страниц) в формате HTML, но сейчас используется в более широком спектре задач.
HTTPS (HyperText Transfer Protocol Secure) – Протокол, имеющий расширенные возможности по сравнению с HTTP, в частности он поддерживает шифрование данных с помощью протоколов SSL и TLS для повышения уровня безопасности передачи данных.
IP-адрес (Internet Protocol) – Уникальный числовой адрес (идентификатор, состоящий из четырех числовых секций, разделенный точкой, например 10.0.0.1) устройства, работающего в сети по протоколу TCP/IP.
POST – Метод отправки данных на сервер по протоколу HTTP, при котором передаваемые данные содержатся в теле запроса. Как правило, такой метод используется при отправки данных на сервер из HTML-формы.
SSH (Secure Shell) – Защищенный сетевой протокол, позволяющий производить подключение к удаленному устройству (серверу) для осуществления управления им, от передачи файлов (по аналогии с FTP) до работы с сервером, используя командную строку.
URL (Uniform Resource Locator) – Адрес ресурса в сети Интернет, ссылка на сайт, имеющая, например, вид «https://example.com/page.html». Содержит протокол (схему) доступа, адрес хоста (домена), путь. Также может содержать логин, пароль, параметры и якорь. URL со всеми параметрами выглядит так: <схема>:[//[<логин>[:<пароль>]@]<хост>[:<порт>]][/<URL‐путь>][?<параметры>][#<якорь>]
Данные доступа – Набор данных, служащий для получения доступа к некому сетевому ресурсу, включает адрес (домен или IP), порт, логин и пароль.
Домен – Уникальный адрес сайта в сети интернет, под которым он зарегистрирован и доступен. Домен, как правило, регистрируется на данные физического (или иного) лица, а в настройках домена указываются различные параметры DNS, например для сопряжения (делегирования) его с IP-адресом сервера, где размещен сайт.
Порт – Числовой идентификатор сетевого соединения, по которому доступна та или иная служба (коих может быть множество), размещенная на сервере. Например, для подключения к сайту используется порт 80, для FTP – порт 21, а для подключения к SSH – порт 22. Таким образом на одном IP-адресе, может быть множество разных служб и сервисов, доступных по разным портам.
Протокол – В нашем контексте, протокол передачи данных по сети. В зависимости от задач и используемых служб (программ) протокол может быть разным. Для передачи файлов – FTP, для доступа к сайту – HTTP, а для удаленного управления сервером – SSH. Вообще, сетевых протоколов насчитывается несколько сотен, и все они используются для своих, определенных задач.
Сайт – Набор данных, как правило, представляющих HTML-страницы, логически объединенных между собой и доступных в сети Интернет по уникальному доменному имени. Под сайтом, как правило, понимают совокупность: домен, хостинг, HTML-страницы, скрипты, базы данных, изображения и прочие ресурсы.
Сервер – В контексте веб-разработки и сети Интернет, сервер – это некий техническо-программный комплекс (компьютерная система), предоставляющая пользователю доступ к чему-либо, например к сайту, или файловому хранилищу, или DNS-службе. На одном физическом сервере, может размещаться множество различных служб.
Сетевой запрос – Отправка данных пользователем (или компьютерной системой) по сетевому протоколу. В зависимости от типа протокола, формируется состав и формат данных сетевого запроса. Например для доступа к сайту отправляет запрос по протоколу HTTP, а в качестве ответа пользователь получает документ в формате HTML (страницу сайта, которую затем отобразит браузер).
Сеть – Информационно-вычислительная сеть, в которую объединены подключенные к ней устройства, в том числе устройства (компьютеры) пользователей, серверы, маршрутизаторы с целью обмена данными между собой. Пример тому – сеть Интернет, или локальная «домовая сеть».
Уровень домена – Доменное имя, состоящее из последовательности символов, с уровнями, разделенными между собой точками. Например домен example.com, является доменов второго уровня, а test.example.com – третьего. Чем больше секций, отделенных точками, тем выше уровень домена. При этом домен первого уровня в указанном примере будет считаться – com. Пользователь может зарегистрировать домен второго уровня (платно) и создать на его основе множество доменов третьего (и последующего) уровней (бесплатно).
Apache – Он же Apache HTTP-сервер, программное обеспечение, веб-сервер, устанавливаемое на сервере в качестве службы, для последующего предоставления пользователю доступа (по протоколу HTTP/S) к ресурсам сайта.
LAMP – Акроним (первые буквы списка), ставший стандартом набора программного обеспечения, устанавливаемого на сервер для обеспечения его работы в Интернет. Расшифровка: Linux – операционная система; Apache – веб-сервер; MariaDB / MySQL – СУБД; PHP – язык программирования. Когда говорят, что нужно установить LAMP на сервер, подразумевают установку и настройку данного перечня программ.
Nginx – Программное обеспечение, веб-сервер, устанавливаемое на сервере в качестве службы, для последующего предоставления пользователю доступа (по протоколу HTTP/S) к ресурсам сайта, но в отличии от Apache имеет ряд преимуществ, в частности скорость работы и малую требовательность к ресурсам.
База данных (сокращенно БД) – Упорядоченный набор данных, хранящийся в одном месте, как правило, в виде одного или нескольких файлов, доступ к которым осуществляется с помощью системы управления базой данных (СУБД), например MySQL, PostgreSQL. В свою очередь СУБД позволяет записывать, изменять и удалять данные в БД.
Веб-сервер – Программное обеспечение, установленное на сервере (хостинге), принимающее HTTP-запрос от пользователя и отвечающее путем отдачи запрошенных им данных. Например, при поступлении GET-запроса с указанием адреса страницы на сайте, веб-сервер (Apache или nGinx) ответит отдачей соответствующего HTML-документа (страницы), размещенного по указанному адресу на сервере.
Виртуальный сервер, VPS (virtual private server) или VDS (virtual dedicated server) – Это компьютерная система, представляющая собой полный технический аналог физического сервера, с реализованным на нем всем необходимым (имитация физических устройств, виртуализация) для работы программного обеспечения, которое требуется для веб-сайта. На одном физическом сервере может сосуществовать множество виртуальных серверов, не знающих друг о друге и не мешающих работе друг друга. При этом каждый виртуальный серве будет потреблять лишь дозволенную (выделенную администратором сервера) ему часть ресурсов физического сервера ресурсы делятся между пользователями, владельцами сайтов).
Выделенный сервер – Отдельная физическая машина, целиком (со всеми ресурсами) предоставляемая пользователю (в отличии от виртуального сервера) для возможности установки и настройки на ней, как правило, любого программного обеспечения, необходимого для функционирования, например веб-сайта, постовой или DNS-службы. Преимущества выделенного сервера в том, что все ресурсы доступны одному пользователю (владельцу сайта).
Панель управления сервером – Специализированное программное обеспечение, устанавливаемое на сервер и позволяющее управлять им удаленно. Производить различные настройки, устанавливать программное обеспечение, работать с файлами и многое другое. Преимущество перед управлением по SSH в том, что в отличии от командной строки, панель предоставляет удобный графический (или веб) интерфейс и много чего еще. Пример таких панелей: ISP Manager, CPanel, VestaCP, BrainyCP и т. д.
Сервер баз данных (также SQL-сервер) – программное обеспечение, устанавливаемое на сервере в качестве службы, позволяющей пользователю получить доступ к желаемой базе данных путем отправки запросов к ней (службе) на языке SQL.
Хостинг – Как правило, ограниченное тарифом дисковое место на сервере (который имеет постоянное подключение к сети) с набором необходимого, установленного и настроенного программного обеспечения для работы сайта, с возможностью размещения на нем ресурсов сайта.
Ajax (Asynchronous Javascript and XML) – Обмен данными браузера с сервером в фоновом режиме, то есть без перезагрузки страницы. Данная технология используется для построения интерактивных веб-приложений. Работа технологии базируется на использовании скриптом JavaScript динамического создания тегов (вставки изображения, включения скрипта, включения фрейма) в структуре документа HTML, которые, в свою очередь, генерируют запрос к серверу.
CMS (Content Management System) – Система управления содержимым сайта. Позволяет работать с пользователями, контентом, ресурсами (документами, изображениями), базой данных и многим другим. Позволяет организовать структуру сайта, дизайн сайта (на базе включенных в комплект шаблонов), а также расширить функционал сайта за счет подключаемых плагинов.
CRM (Customer relationship management) – Система управления взаимоотношениями с клиентами. Дает возможость вести учет и базу клиентов, управлять задачами, сделками, осуществлять рассылки, и многое другое.
CSS (Cascading Style Sheets) – Язык декорирования, позволяющий оформить внешний вид веб-документа (воплотить идею дизайна в жизнь), задать параметры внешнего вида для отдельных HTML-тегов.