Бытие современного фуллстек-разработчика


    Я живу на периферии технологической тусовки. И на периферии в географическим смысле. А это значит, что:


    • Я никогда не был на профессиональных конференциях. Просто потому, что никогда не предоставлялось такой возможности.
    • Я никогда не покупал обучающие курсы: для меня странно платить за то, что можно изучить самому в этих ваших интернетах или по книгам. Заманчиво, конечно, получить концентрированные знания, подкрепленные выполнением практических заданий, заполучить сертификат. Но на это у меня никогда не было ни средств, ни времени.
    • Я адепт цифрового аскетизма: не по своей воле, но как порождение вечной перестройки в нашей стране. В короткие периоды финансовой стабильности я обновляю электронику по остаточному принципу. Вот и сейчас пишу этот текст на Core2Duo десятилетней давности. Все еще жду следующего стабильного плато на кривой моих доходов.
    • Раза три в своей жизни я покупал игры. В 90-е. Это были кассеты для отживающего своё Спектрума. На покупку ПО я смотрю с удивлением: когда все пользовались пиратским ПО, то и я пользовался, не понимая сути вопроса. А потом, в начале двухтысячных, полностью перешел на Linux и покупать стало нечего.
    • Удивительно, но я ни разу не терял мобильник, с самого начала появления GSM-связи. И они у меня никогда не ломались и не ремонтировались. Все три штуки стоят аккуратно на полочке, а четвертый, смартфон, лежит в кармане. Ему пять лет. Опыта покупки ПО в Google Play у меня нет, даже не представляю как это делать. Жена знает, а я — нет.
    • Я умоляю провайдеров внести меня в черный список и не звонить мне с предложениями «купить интернет» или пакет телевидения. Потому что у меня нет телевизора, а для интернета мне достаточно минимальной скорости. Я прошу не рассказывать мне про новые тарифы мобильной связи, потому что я выбираю самый дешевый из доступных.
    • Я никогда не видел вживую англоязычных иностранцев. И голосом никогда с иностранцами не говорил. Никогда не предоставлялось такой возможности в моем медвежьем углу, хотя было бы интересно. Я потихоньку прокачиваю свой английский, но он мне нужен только для чтения литературы.

    Наверно, достаточно. Кто же я такой, и что я делаю на Хабрахабре? Дело в том, что я… Я — перманентный выживальщик. Другими словами, современный фуллстек-разработчик. Ох, представляю, как поморщились сейчас профильные программисты! Фуллстек… Что я им могу сказать? Ребята, я рад бы был прокачивать навыки в одном направлении. Рад бы был, как и вы, погрузиться в тему и становиться узкоспециализированным гуру. Но, к сожалению, реальность такова, что в регионах человеку на удаленке приходится хвататься за любую работу, лишь бы не идти аникеить или не становиться таксистом.


    Какими языками мне приходилось заниматься, и выдавать законченные вещи? Если сделать выборку по шкале времени, то получится такой список:


    Язык и технология Тематика проекта
    Си & Assembler x86 Для души
    FoxPro 2.6, Netware Налоги и бухгалтерия
    PHP4 & LAMP Веб-разработка
    AnSYS & StarCD & MathCAD Прочностной анализ, расчет потоков жидкостей и газов
    1С v7 Складской учет и бухгалтерия
    Си++98 Эмбендинг и геймблинг
    PHP5 & LNMP & Codeigniter Веб-разработка
    Си++03/11 & Qt СПО
    1С v8 & PostgreSQL & Linux Бизнес-процессы на атомных станциях
    Python 2.7 SMS-оповещения
    PHP7 & LNMP & Yii2 Веб-разработка
    Си++11 & Qt & QML & Java Картография и навигация, мобильная разработка под Android
    PHP7 & LNMP & Laravel & SIP Веб-разработка и телефония

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


    Грань перехода


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



    И для полноты картины еще пара публикаций:



    А про самую нижнюю строку таблицы "Веб-разработка и телефония" я расскажу далее в этом тексте.




    Итак, перспективный проект мобильного приложения под Android для кастомного навигационного оборудования резко закрывается. Еще вчера разработчик писал бекэнд-код на C++ и фронт на QML, прикручивал нативный код к Java через JNI, а сегодня он судорожно должен искать вакансию C++ разработчика на удаленке. Современный рынок C++ таков, что найти в России работодателя с C++ на удаленке — это большая удача. Все работодатели хотят видеть программиста C++ в офисе. Месяц в поиске — полный ноль. Пора переквалифицироваться, благо бэкграунд позволяет.


    Определение


    Фуллстек-разработчик (представитель семейства специалистов по всему) — мифический персонаж, предмет вожделения работодателя, мечтающего оптимизировать производство ПО до команды из одного человека. Фуллстек-разработчик обладает магическими способностями: имеет бездонную память, ибо знает все современные языки и технологии; в мозг интегрирован глобальный понятийный аппарат, превосходящий по организации мыслительного процесса Владимира Ленина, Альберта Эйнштейна и Леонардо да Винчи; системное мышление такого специалиста способно производить дебаг чего угодно прямо в мозгу, без применения средств отладки. Неприхотлив, питается солнечным светом.

    Переход на новую задачу


    Неожиданно на меня выходит хабрапользователь itsar, и берет в свою команду. У него висит несколько задач, и на пробу я реализую прототип веб-сервиса. По задумке, веб-сервис оповещает пользователей о различных событиях по различным каналам связи, включая телефонные звонки. В результате появился сайт QrCall.org, про который уже писалось на Хабрахабре: Поди туда — не знаю куда.


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


    Чтобы было понимание, к сегодняшнему моменту этот веб-сервис выглядит так (девелопер-версия):



    Итак, нам нужно перепрыгнуть с C++ на PHP7 и соответствующий современным реалиям стек инструментов. Времени на раскачку нет (С) Путин. Страуструп, Шилдт, Готтшлинг, Солтер с Клепером ставятся на дальнюю полку. Параллельно с написанием ТЗ я вспоминаю, что там понапридумывали в PHP7. Запрос "что нового в PHP7" дает несколько статей на Хабрахабре и в программистских блогах. Ага, пространства имен и импорт, новая разновидность тернарного оператора и всякий синтаксический сахар, скалярные типы и иже с ними, анонимные классы, доработка замыканий, генераторы… В большинстве своем все знакомо. В который раз отмечаю для себя, что PHP — это райское наслаждение по сравнению с суровыми плюсами.


    Выбор инструментов


    Телефония


    Больше всего беспокоит будущая реализация телефонии. Осилю ли я? Сразу понятно, что придется работать с SIP, но каким образом? В мозгу болтается воспоминание, что когда-то игрался с каким-то консольным SIP-клиентом, и даже мог набрать телефонный номер и совершить звонок. Для решения задачи этого будет достаточно. В крайнем случае придется заморочиться с Asterisk. Звоню знакомому связисту, описываю суть проблемы, прошу напомнить что за консольный клиент я мог щупать. Вердикт однозначный — это Linphone и его консоль linphonec. Но набрать номер в консоли — этого мало. Надо еще проиграть в виртуальную трубку звуковой файл. Устанавливаю Linphone, захожу в его консоль, смотрю возможности. Так, есть возможность переключиться со звукового дейвайса на файл. Это хорошо. И в консоли есть команда play, которая запускает звуковой файл на проигрывание. В принципе, больше ничего и не нужно.


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


    Фреймверк и пакетный менеджер PHP


    Далее нужно решить, на каком фреймверке делать проект, а заодно надо поразбираться с пакетным менеджером Composer. Раньше я к Composer только присматривался и ставил через него Yii2 без компонентов, потому что в Yii2 все что нужно уже было включено. Хорошо, какой бы фреймверк я ни выбрал, Composer все равно понадобится. Читаю, как его устанавливать. Ставлю, работает.


    Далее вопрос по фреймверку. Выясняю, что в 2019 году Yii2 уже не актуален, а Yii3 застрял в каком-то промежуточном состоянии. Что остается? Для Zend и Symfony я еще не созрел, поэтому вариантов практически нет — только Laravel. Читаю документацию, смотрю обучалки, заказываю книжку русскоязычного автора (оказалась очень толковая, то что надо для старта). После древнего Codeigniter и неактуального Yii фреймверк Laravel понимается легко, сразу видно как продвинулась программистская мысль в проектировании веб-приложений. Все, о чем мечталось уже реализовано, обкатано и обросло стандартными подходами. Да, проект планируется не нагруженным, так что могу себе позволить некоторую нубскую кривизну в реализации.


    Ставлю Laravel "по дефолту", предлагая Composer самому решить, какая версия Laravel в данный момент актуальна. Он ставит 5.5. Ну ладно, пусть будет эта версия, она более обкатана чем 5.8, значит будет проще решать проблемы. Мы не гонимся за нововведениями.


    NPM


    Для работы некоторых компонентов Laravel, например для системы сборки и минификации CSS-файлов Mix (надстройка над Webpack), требуется серверная среда выполнения JavaScript-кода Node.Js и написанный на JavaScript пакетный менеджер npm. В Debian Linux Stable, который я использую, уже есть пакет npm. Однако он достаточно древней версии, и не подходит для инфраструктуры Laravel 5.5. Разбираюсь, как ставить из сторонних источников, нахожу deb.nodesource.com, ставлю с него. Хм, странно, в том же пакете, вместе с Node.Js ставится и npm. Это совсем не Unix-way, ну да ладно. Главное, что работает.


    Верстка


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


    Сразу отметаю генерацию мобильного/десктопного контента на сервере путем анализа UserAgent. Это не наш подход для 2019 года. Тут однозначно нам поможет CSS-фреймверк Bootstrap. Вообще, верстка веб-приложений — это отдельная, гигантская, большая тема, которой должен заниматься отдельный специалист. Для меня в веб-разработке нет ничего более сложного, чем ковыряния с версткой. Я давно понял, что у меня версточный кретинизм. Я трачу колоссальное количество времени, чтобы сделать очередной правильный отступ, или выровнять несколько элементов. Но ресурсов на верстальщика у нас нет, поэтому приходится делать как можешь, желательно чтоб результат был ровным и красивым.


    Встает вопрос: какую версию Bootstrap использовать? 3 или 4? Выясняется, что Bootstrap сразу идет в комплекте с Laravel 5.5, и это версия 3.x. Разбираться с тем, как переделывать окружение на Bootstrap 4 времени нет, поэтому оставляю версию 3. В конце концов, в интернете сотни тысяч сайтов используют Bootstrap 3, а значит это достойная для использования технология.


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


    Вот как выглядит страница в десктоп-версии:



    А вот она же в мобильном представлении:



    Разработка


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


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


    Технологии


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


    • Операционка: Linux (я выбираю Debian Stable)
    • Язык: PHP7
    • Фреймверк: Laravel
    • Фронтэнд-свистелки: Bootstrap 3 + Vue.js
    • База данных: MariaDB (она же MySQL)
    • Веб-сервер: NGinx
    • Телефония: SIP+linphonec/linphonecsh
    • VCS: Git

    Да, не самый модный и продвинутый стек. Но нам нужно делать дело, а не упражняться в оборачивании окружения в Docker-контейнеры и не продвигать идею JS-only разработки.


    Очередь


    Очереди — это весьма специфическая предметная область, и в крупных командах за очереди обычно отвечает специально обученный специалист, обеспечивающий работу очередей на сотнях серверов. В нашем случае сотен серверов не наблюдается, поэтому необходимо использовать очередь максимально просто и по делу. Поэтому в качестве хранилища заданий я решил использовать уже используемый в проекте движок реляционной базы MySQL. Был некоторый соблазн сделать по уму, например на базе Redis, но разбираться с этой NoSQL БД времени просто не было.


    В ходе разработки появился запрос на задачу, которую невозможно было напрямую решить средствами очереди на MySQL, но которая решалась бы при использовании Redis. Проблема была в том, что после успешного выполнения задания, задание из очереди удаляется, и нет никакой возможности проверить, выполнялось ли, например, определенное задание в течении последних 10 минут? При использовании хранилища Redis это можно было бы реализовать через Rate Limitting, а вот при использовании MySQL такой возможности нет. Поэтому пришлось реализовывать подобный функционал просто на основе аналитики лога действий. Благо что лог действий — это непременная часть нашей небольшой информационной системы.


    Платные сервисы


    При размещении сайта в сети Интернет, необходимо закладываться на оплату различных услуг. Хостинг и доменное имя — это всегда практически обязательные платежи. Хостинг взяли недорогой, оплатили 2Gb оперативки, из расчета 1Gb на базу данных, остальное — на операционку и выполнение скриптов. В тарифе шло 2 ядра микропроцессора, хотя с нашими нагрузками, думаю, отлично справилось бы и одно. Дисковое пространство в 20Gb более чем достаточно для нашего проекта. В процессе развертывания потребовалась компиляция linphonec, потому что на моем десктопе разработчика стоял более древний Debian Linux, чем в готовом образе виртуалки, предоставляемой хостером, а стандартный пакет из репозитария содержал древнюю версию этой программы с несколькими неприятными "особенностями". И вот, на компиляцию linphonec, мне 2Gb и не хватило. Магия шаблонов в C++ выжирает память как не в себя, поэтому пришлось настроить своп, после чего сборка успешно завершилась.


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


    В наших современных реалиях нельзя расчитывать на то, что найдутся бесплатные сервисы Email-рассылки. А Email-рассылка в нашем случае нужна для отправки различных оповещений. По моему опыту, все попытки организовать отправку множества писем через Яндекс.Почту или через Google.Mail приводят только к тому, что почтовые серверы принимающей стороны, после трех-четырех писем, помечают сообщения как спам. То есть проблемы возникают уже на этапе отладки, не говоря про продакшен. Поэтому пришлось заморочиться с сервисом Mailgun, через который письма доставляются быстро и без проблем. С Mailgun только одна непонятка: в некоторых статьях пишут, что они дают бесплатно отправить 10000 писем ежемесячно. А на сайте самого Mailgun как-то скользко написано, что я понимаю как 10000 писем с момента регистрации. В любом случае, этот предел сервис пока не преодолел, так что надо просто понаблюдать.


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


    Фаирвол


    Фаирвол я всегда настраиваю просто и примитивно, всего тремя правилами. Первое правило для INPUT разрешает прохождение пакетов для установленных соединений. Второе правило разрешает установку соединений на определенные порты. Главное не ошибиться, и не забыть про порт для SSH, а то будет ой. Третье правило — DROP всех остальных пакетов цепочки INPUT. Конечно, в этой схеме возможны варианты, но базис именно такой.


    Так как в системе используется SIP-телефония, то чтобы ядро правильно видело пакты SIP-протокола для установленных соединений, и не обрубало их, нужно обязательно иметь подгруженным модуль ядра nf_conntrack_sip. Еще, если хост спрятан за NAT, рекомендуют включать модуль nf_nat_sip, но в моем случае это не потребовалось, работает и так.


    Бэкап


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


    Я понимаю, что такой подход — это сплошные костыли, поэтому планирую переехать на бэкапы через borg. Но пока настроено таким образом, как мне проще и удобней.


    Деплой


    Для деплоя я использую систему контроля версий GIT и специально написанные скрипты, разбитые на этапы, имеющие один центральный скрипт запуска. Разрабатываемый код пушится на сервер центрального репозитария. В момент, когда нужно обновить сайт, запускаются скрипты, которые выполняют часть команд от рута (остановка и старт всяких сервисов), а часть команд от веб-сервера (получение кода через git, запуск утилиты artisan). Для этого сделаны настройки в /etc/sudoers и заданы права доступа на файлы скриптов так, чтобы они могли выполняться определенным пользователем, но не могли быть изменены никаким другим сторонним пользователем.


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


    Эй, товарищ! — скажут мне. А где же твоя непрерывная интеграция? А я отвечу: побойтесь Бога! Проект не настолько обширен, чтобы еще и с системами CI заморачиваться. Если проект станет приносить дивиденты, вот тогда мы наберем команду программистов, и торжественно водрузим поверх всего еще и CI-систему, и тогда все будет по фен-шую.


    Недоработки


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


    Крупным просчетом было то, что я понадеялся на дефолтную установку Laravel, и использовал в качестве CSS-фреймверка Bootstrap 3 вместо Bootstrap 4. Все-таки Bootstrap 4 шагнул далеко вперед по сравнению с Bootstrap 3, и помимо flex-верстки в нем появилось много тех вещей, которых в Bootstrap 3 просто не было, и которые приходилось делать руками. Сейчас можно переползти на Bootstrap 4, но верстка обязательно поедет, а с моим версточным кретинизмом выправлять её придется очень долго.


    Все современные сайты, работающие с аутентификацией пользователей, обязаны работать на протоколе HTTPS. К сожалению, у меня пока не дошли руки до этого этапа, а этап очень важный. У меня уже есть опыт перевода сайтов с HTTP на HTTPS, я даже написал себе памятку Настройка сертификатов Let's Encrypt HTTPS на веб-сервере NGinx, однако нужно выделить время чтобы этим делом заняться.


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


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


    Итог


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


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


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


    Более поверхностные знания — это та плата, которую приходится платить фуллстек-разработчику за то, что он может, с помощью своих обширных знаний и навыков, делать достаточно дёшево разнообразные информационные продукты. Можно называть такие продукты прототипами, proof-of-concept, или еще как, но факт в том, что лучше иметь прототип и развить его в более крупное дело, чем не иметь вообще ничего. Или, другая крайность — сильно потратиться на разработку продукта, а потом выяснить что его невозможно никуда приткнуть.


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


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

    Поделиться публикацией

    Комментарии 94

      +1
      Спасибо, что вы есть. У самого похожая история, тоже в зрелые года решил профессионально заняться своим хобби — программированием. Не с первого раза получилось, но выручила любовь к программированию, сделал несколько хобби проектов, которые не было стыдно показать и меня взяли.
      В принципе, ничего страшного в программировании нет. Языки, фреймворки и прочие инструменты создаются людьми и для людей. И за каждой «фичей» стоит проблема, которая имела место и была успешно (или не очень успешно) решена. Это я к тому, что многих проблем, которые раньше забирали кучу времени уже в принципе нет. Например, кроссбраузерная верстка в большинстве случаев происходит без особых усилий. А это значит, что новички получают преимущество из-за того, что им не придется изучать устаревшие технологии.
      Поэтому, тем, кто интересуется вопросом реализации себя как программиста могу посоветовать сделать какой-то хобби проект и показать его профессиональным разработчикам, обязательно нескольким. Спросить интересующие вопросы, записать замечания. Повторить. После очередной итерации вас пригласят на работу.
        0
        Я так понимаю что у человека нет времени пилить какойто хобби проект…
          +2
          У меня есть убеждение, что хобби проекты — лучший способ обучения. Даже персональный ментор может только ускорить прогресс, но не сможет заменить практику работы над своим проектом. Даже в статьях на Хабре частенько можно увидеть фразу «полученный опыт бесценен» в конце статьи.
          Кстати, дополню свой предыдущий комментарий. Количество «итераций» — сделать хобби проект — показать — учесть замечания, идеи — опять показать. Так вот количество таких итераций вряд ли будет больше трёх.
            +1
            Ну никто с этим и не спорит. Только на это времени не всегда есть… Например есть такой момент как английский язык — который тоже кушает время немало… Или просто надо то за что платят таки сделать…
            Так что тут уже приходится выбирать, что конкретно делать.
            И да, хобби проект должен быть интересен своей идеей прежде всего, тогда его будет пилить интересно… а елси такой идеи не приходит — то и проекта не будет.
          0

          У меня есть хобби фуллстек проект и я когда писал резюме, естественно его выпячивал, типа "вот мой код". В итоге только одна контора упомянула его на собеседовании. Ещё 2-3 сказали что "посмотрели". Остальные просто проигнорили.
          Ну и интересно как это новичку показывать свой проект нескольким профессиональным разработчикам. Платить им что ли?

            +1
            Ну и интересно как это новичку показывать свой проект нескольким профессиональным разработчикам. Платить им что ли?

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

            "Цифровой аскетизм" — мне нравится.
            Я и сам поклонник аскетизма. Но не по неволе, а сознательно.
            Это некий симбиоз из концепций "Скупой платит дважды" Х "лишние вещи — лишний груз".
            Обучение для меня — это начитывание материала + самостоятельная практика. Материала для практики на бирже фрилансеров хватает.
            А освоение языков низкого уровня с их концепциями положительно сказывается на программировании на языках высокого уровня. Полезно знать что у тебя под капотом.

            0
            В который раз отмечаю для себя, что PHP — это райское наслаждение по сравнению с суровыми плюсами.

            И тут же споткнулись на операторе «точка» в PHP и задались вопросом — зачем так?:-)
              0
              Наверно, точка как конкатенация — это самая большая странность в PHP. Но для языка с древними корнями, эта особенность простительна. Когда язык появлялся, никаких современных устоев еще не было сформировано. Но таки да, плюсик на месте точки был бы более логичен.
                +2

                А мне наоборот нравится. Не люблю в целом перегрузку операторов в зависимости от типов.

                  +6
                  Мне, как человеку, когда-то давно начавшему именно с php казалось абсолютно логичным и очевидным, что конкатенация строк и сложение чисел — две абсолютно разные операции.
                    –1
                    Есть мнение, что логичнее то, что пользователь в силах понять не залезая в документацию.
                      +2
                      Есть мнение, что логичнее то, что пользователь в силах понять не залезая в документацию.

                      В силах понять, базируясь на чем?

                      Если не-программиста попросить выполнить операцию «Петя» + «Маша», то он, наверняка, напишет «Любовь». И если сказать ему, что на самом деле будет «ПетяМаша», то он с улыбкой возразит тем, что вряд ли они так назовут своего ребенка.

                      Если человека, перерешавшего ребусов и задачек по айкью, попросить сложить «АБ» и «ВГ», то у него, наверняка, получится «ГЕ». И если возразить ему, что на самом деле будет «АБВГ», он назовет эту задачу абсурдом.

                      Если мою маму попросить сложить «2» и «3», она совершенно точно напишет 5, не обратив внимание на то, что это были строки. И если я скажу ей, что это были две строки, она возразит мне, сказав, что строка там была только одна и содержала два числа.

                      В любом случае, будет какой-то бекграунд, который и будет определять то самое «логичное».
                        –2
                        Конечно можно утрировать до бесконечности, но очевидность явно хромает.
                          0

                          Не хромает. В очень близком в этом отношении JS гораздо менее очевидно какой тип будет у $a + $b, чем в PHP, в котором строкой этот тип точно быть не может. У $a + $b в PHP или инт, или флоат, или массив (ненавижу :) ), но не строка.

                    0

                    В том-то и дело, что плюсик в языке с динамической типизацией был бы абсолютно неуместен.


                    1. echo 6. 4 // выведет 64
                    2. echo "3" + "12" // выведет 15
                      0
                      Ну Python появился ещё раньше. И конкатенация строк в нём осуществляется плюсом. Ruby появился тоже 95-м (как и PHP). В нём тоже плюс используется. Думаю, дело в том, что он изначально был придуман для совсем другой задачи, чем нынешнее применение. Сейчас из него сделали (или пытаются сделать) язык общего назначение, коим он изначально даже не предполагался.
                        0

                        Думаю, просто дело в том, что так проще было и для реализации интерпретатора, и для чтения кода. Вопроса что вернёт 1 + "2" не возникает, как и вопроса а будет ли равно это "2" + 1. Уменьшение порога вхождения.

                      +1
                      А разве это проблема? Всего лишь привычка… Особенно после фокспро и 1С…
                        0
                        Ну это кому как, просто после Java, Ruby, когда в первый раз сталкиваешься, сразу возникает закономерный вопрос по поводу природы оператора конкатенации в PHP:-)
                          +8

                          Природа очень простая. При операторе . интерпретатор пытается привести значения к строке, при + — к числам.


                          <?php
                          
                          $foo = 1;
                          $bar = '2';
                          
                          $result = $foo + $bar; // 3
                          $result = $foo . $bar; // 12
                            +1
                            Ну а после basic, clipper summer 87, foxpro, turbo pascal, С++, 1С 7.7, 8.х, Delphi, PL/SQL — это вообще не вызывает никаких эмоций…
                              +1
                              после перла — единственный вопрос был «эхх, ну, почему так мало языков с такой фишкой?»
                          +3
                          По личному опыту поиска удаленки, ее на просторах России-матушки очень и очень много. Причем по самым разным стекам. Можно найти не только на PHP, к примеру, но и выбрать любимый фреймворк. И не надо будет распыляться на верстку или плюсы, если не нравится.
                            0
                            Сейчас на сервере крутится самописный скрипт, который обкатан на других проектах. Он получает на вход перечень команд и перечень каталогов. Перечень команд — это команды, которые нужно выполнить перед бекапом, например команды снятия дампа MySQL.…

                            Я понимаю, что такой подход — это сплошные костыли, поэтому планирую переехать на бэкапы через borg. Но пока настроено таким образом, как мне проще и удобней.

                            У меня нечто похожее выросло с 2005 года до отдельного приложения, которое имеет планировщик (можно указать конкретное время или интервал), умеет сжимать (zip), умеет шифровать бекапы (симметричный ключ), закачивать на 1+ (s)ftp сервера, по каждому серверу можно указать условия сколько копий хранить и т.п., умеет забирать бекапы обратно, дешифровать/разархивировать и восстанавливать в базу, ну и в конце (если надо) умеет запускать sql скрипт который может по желанию как захешировать чувствительные данные, так и чтонибудь другое сделать если бекап для стенда выкатывается.
                            Все сделано на чистой java, работает везде, тока в конфиге прописываешь нужные БД, доступ к ним, нужные фтп сервера, кол-во копий, дедлайн на устаревание копий и тп и т.д.
                            И теперь совсем не хочется брать что-то готовое стороннее :)
                              +1
                              Меня дико смущает в этом списке ANSYS (к тому же, почему-то, написанный через маленькую n). Он минимально относится к программированию, но требует уверенного профильного образования (прикладная механика/механика деформируемого твёрдого тела, механика жидкости и газа и так далее — в зависимости от того, какую конкретно задачу Вы решаете).

                              Метод конечных элементов (неважно, ANSYS это, или какой-то другой программный продукт, или вообще собственная реализация метода конечных элементов), при неправильном использовании, позволяет получить решения, которые даже физически будут похожи на правду (фактически, метод решает задачу нахождения минимума потенциальной энергии), однако не будут иметь ничего общего с механикой работы реальной конструкции (перечень возможных ошибок включает, но не ограничивается: неправильный выбор граничных условий, расчётных случаев, недостаточное количество элементов сетки для корректного описания поведения конструкции, не учёт физических и/или геометрических нелинейностей, некорректная интерпретация зон сингулярности во внутренних углах конструкции).

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

                              Могу я поинтересоваться Вашим базовым образованием?

                              P.S. Вы уж простите мой снобизм относительно этой темы… У меня базовое образование по направлению «прикладная механика», и работаю по профилю уже 10 лет. От роли молодого специалиста до руководителя расчётной группы. И я видел слишком много людей, кто пытался войти в эту профессию, и ни одного, кому это удалось самоучкой за меньшее время, чем требует полноценное высшее образование. Из статьи сложилось впечатление, что у Вас нет столько свободного времени.
                                +2
                                > Меня дико смущает в этом списке ANSYS (к тому же, почему-то, написанный через маленькую n).

                                Никогда не заморачивался по этому вопросу. Помнится, в отчетах мы писали AnSys, с другой стороны точно помнил, что на лого SYS было большими буквами. С третьей стороны у нас были споры, что стоит вначале слова. По-хорошему, вас должно было удивить, что я не написал лямбду, ведь именно лямбда написана на логотипе: ΛNSYS

                                > Последствия не правильно выполненного прочностного расчёта, я думаю, сложно переоценить.

                                Я с вами полностью согласен. Я проработал расчетчиком три года. Первые два делал прочностные расчеты, на третьем году перешел на потоки жидкостей и газов. Прочностные расчеты у меня были довольно несложные — по сути интересовало, как «поведет» конструкцию при воздействии градиентом температур с учетом собственной массы конструкции и давления на стенки. Иногда собственной массой даже пренебрегали, например при расчетах опор, потому что объект на опоре весит в сотни раз больше чем сама опора. На таких задачах задавать граничные условия достаточно просто. Расчеты на устойчивость (на скручивание) мы официально не делали, как-то обходились без этого, хотя тестовые задачи у нас получались. Я не знаю как сейчас, но тогда в ANSYS не было визуального параметрического моделирования, и построение некоторых конструкций я делал скриптами, потому что размеры все время менялись конструкторами.

                                Немного об этом я писал тут: habr.com/ru/post/321446, ищите в тексте фразу «Три года я занимался расчетами. Не сказать, что это дело из легких: большая ответственность, и каждый день как экзамен по физике.»

                                По поводу последствий неправильного расчета, я видывал как лажают даже опытные гуру. Складывалось впечатление, что в какой-то момент их лозунгом был «самонадеянность и бесстрашие — вот наша сила!». Например, проходя мимо чертежей одной конструкции (мы работали в опенспейсе), я обратил внимание, что внутренние ребра жесткости стоят странно, задом-наперед. Там была труба метра 3 длинной, у которой практически по всей длине был разрез, и к этом разрезу пристыковывался такой же длинный боковой фланец. Примерно так:



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

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

                                Расчеты жидкостей и газов я делал и самостоятельно (по формулам, и конечно-элементным анализом в StarCD), и с академиком Сударевым из Санкт-Петербурга, он специализировался на трубных пучках. На одном проекте мы, по сути, друг друга перепроверяли, делая один и тот же расчет многоходовых трубных пучков разными методами. Сударев умел только пользоваться Excel (о ужас), он у него был вместо калькулятора, и по каким-то причинам не осваивал настоящие математические пакеты. Он считал какими-то своими аналитическими методами, а я считал приближенными вычислениями в MathCad, так как он умеет крутить циклы. Сложность была высокая, в моих расчетах было более полутысячи формул, для расчетов я «оцифровал» все графики зависимостей разных физических величин из пособий. Результаты у нас с Сударевым сходились очень хорошо, и я оформлял для Сударева отчет, а он ставил свою подпись. Кстати, когда я уволился, через некоторое время я заглядывал в свои расчеты и нашел ошибку, о которой подозревал, но никак не мог найти. Там был четырехходовой пучек, и на третьем ходе я недоглядел в одной формуле один индекс. И это выражалось в маааленьком изломе на графике. Я пересчитал с правильной формулой, этот изломчик исчез, а конечный результат изменился в каком-то дальнем знаке, и я не стал сообщать об этом академику, было не актуально да и смысла не было.

                                > Могу я поинтересоваться Вашим базовым образованием?

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

                                  Всё же во всей технической документации там стоит буква A. Более того, английская википедия подсказывает: «He founded Ansys under the name Swanson Analysis Systems Inc. (SASI) » (выделение сохранено из первоисточника). Я полагаю, что в логотипе это просто стилизованная буква A, лямбда там не имеет смысла.

                                  А смутило это меня потому, что подобный способ написания я, как ни странно, увидел первый раз в жизни.

                                  > Расчеты на устойчивость (на скручивание)

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

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

                                  Я Вас сразу понял, что в статье речь про APDL. Согласитесь, от языка программирования там только циклы и оператор if. Там даже с созданием пользовательских функций куча проблем. Хотя бы то, что в неё нельзя передать переменную.

                                  > По поводу последствий неправильного расчета, я видывал как лажают даже опытные гуру.
                                  Складывалось впечатление, что в какой-то момент их лозунгом был «самонадеянность и бесстрашие — вот наша сила!». Например, проходя мимо чертежей одной конструкции (мы работали в опенспейсе), я обратил внимание, что внутренние ребра жесткости стоят странно, задом-наперед.

                                  Может не такой уж он и гуру был?

                                  А если серьёзно, то все делают ошибки. Иногда это опечатки, иногда это не правильно сделанные допущения. Я от своих сотрудников требую, что бы они всегда обсуждали, почему они сделали так, и почему получилось именно такое решение, какое получилось (вариант «так посчитала машина» не прокатит). Вплоть до разложения его на элементарные эффекты. Хороший способ значительно уменьшить количество ошибок. Обсуждать можно между собой, можно со мной, можно с коллегами из других отделов. Главное не вариться в собственном соку.

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

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

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

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

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

                                  А к преподавателям я отношусь с большим уважением за то образование, которое они дали.
                                    0
                                    Я Вас сразу понял, что в статье речь про APDL. Согласитесь, от языка программирования там только циклы и оператор if. Там даже с созданием пользовательских функций куча проблем. Хотя бы то, что в неё нельзя передать переменную.

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

                                    Может не такой уж он и гуру был?

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

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

                                    Все зависит от ВУЗа. Большинству преподавателей можно сказать спасибо за их работу, но были и такие, у которых студенты изучали предмет не благодаря, а вопреки. Тут уж кому как повезет.
                                +1
                                Доброго всем, сразу скажу лезу не в свой огород, но статья почему то мне стала интересной, дочитал и сложилось впечатление что специалист вы с опытом работы. Потом подумал, а что hh нам выдаёт по тематике full stack dev и вот отсюда вопрос, там как бы на удаленке с зарплатой от 100 и чуть ли не до 300 не менее нескольких десятков (если точнее 87), критерий выбирал именно удаленная работа. То есть не совсем понимаю зачем распылять на все и вся, если можно найти что-то одно (пусть даже под проект), но стабильное и с хорошим стабильным доходом.
                                  +2
                                  Я, конечно, не автор, но сам примерно в таком же стиле работаю.
                                  Не помню когда уже приходилось искать работу, ходить на собеседования и т.п. Обычно работа ищет меня. Плюс свободный график.
                                    0
                                    не совсем понимаю зачем распылять на все и вся, если можно найти что-то одно (пусть даже под проект), но стабильное и с хорошим стабильным доходом

                                    Банально, деньги не всегда приносят удовлетворение.
                                    –2
                                    «Я слепила из того что было...» (с) кто-то хз кто
                                      +2
                                      > Неприхотлив, питается солнечным светом.
                                      Забыли добавить — «Ест за четверых, Работает за семерых. А.С. Пушкин»
                                        +2
                                        Очень хорошо и жизненно написано. К сожалению тем, кто живет в России далеко — далеко за мкадом очень часто приходится именно так и выживать.
                                        Программирование вообще очень не легкое дело, постоянно приходиться учиться :)
                                        Автор, спасибо вам за вашу статью и желаю удачи в вашем деле!
                                          –5
                                          Перефразируя древнюю фразу:
                                          При встрече человека, который не курит и не пьет называется себя фуллстек-разработчиком, так и хочется спросить:«А не сволочь ли Вы, батенька!?»
                                          :)
                                            +3
                                            А потом, в начале двухтысячных, полностью перешел на Linux и покупать стало нечего.

                                            Ну не знаю… Сижу на Linux, но купил PHPStorm. Ни разу не пожалел.


                                            Каюсь, но я до сих пор не настроил ротацию логов.

                                            Laravel умеет в ротацию логов из коробки. Есть драйвер daily


                                            Для деплоя я использую систему контроля версий GIT и специально написанные скрипты, разбитые на этапы, имеющие один центральный скрипт запуска.

                                            Рекомендую попробовать Deployer. Написан на php, Добавляется через Composer, изучается и прикручивается за вечер

                                              0
                                              > Сижу на Linux, но купил PHPStorm. Ни разу не пожалел.

                                              Мне как-то NetBeans ближе, уже привык к нему.

                                              > Laravel умеет в ротацию логов из коробки. Есть драйвер daily
                                              > Рекомендую попробовать Deployer. Написан на php, Добавляется через Composer, изучается и прикручивается за вечер

                                              Благодарю, посмотрю.
                                              +17

                                              Не сочтите за критику, ни кого не хочу обидеть. Я просто честно не понимаю. Вы пишите про площадку стабильности, нехватку средств, выживание… более-менее освоив хотя бы одну (!) технологию, тем более имея IT бэкграунд — и свои $20 в час вы найдёте на Upwork. Попадаются и в России вакансии удаленные. И то, и другое даёт доход порядка 100 тысяч в месяц. Живя в регионе, с низкими (относительно дефолт-сити) расходами, в итоге получается высокий уровень жизни. Программистам в наш век грех жаловаться. Ну какое выживание? Какая нехватка средств? Я честно не понимаю, мы на разных планетах живём?

                                                +1
                                                Реальность она такая — порой преподносит сюрпризы (основано на собственном опыте).
                                                  0
                                                  Так было не всегда.
                                                  Да, сейчас с этим на порядки проще, но привычка менять «профиль» под текущую задачу — осталась-)
                                                    +8
                                                    Живя в регионе, с низкими (относительно дефолт-сити) расходами, в итоге получается высокий уровень жизни.

                                                    Это справедливо только для некоторых расходов, например аренды квартиры и походов в рестораны (правда, и качество этих самых ресторанов в большинстве регионов будет на уровне столовой). Повседневные расходы по статье услуг стоят примерно одинаково, если не ставить цель стричься в гламурном салоне в центре.

                                                    А вот товары в регионы везутся через Москву, и стоят дороже. В некоторых транспортно неудобных местах — раза в три дороже. Цены на билеты — тут вообще тихий ужас, за границу придётся лететь либо через Москву, либо через ближайший местный хаб по двойной цене. Плюс, если жить на отшибе, то по любому нестандартному вопросу придётся ехать 300-700км до ближайшего крупного города, а то и вообще лететь в столицу.
                                                      +1

                                                      В теории да. На практике, лично я видел другое.


                                                      1. Для многих оплата жилья- основная статья расходов. Двушка в Москве — это 50-60 тыс. в месяц, в Новосибирске — 20-30, в глубинке и того меньше, доходя до 10. Вдумайтесь в эту цифру: сэкономленные 50 тысяч каждый месяц.
                                                      2. Какие это расходы в статье услуг одинаково? Ребёнка к врачу сводить, стоматология, массаж, косметология, одежду ушить, сходить на мастер-класс, в Москве всё это в 2-3 раза дороже, чем в Новосибирске, иногда и больше, ну а про глубинку я опять же молчу. Я сопоставляю услуги одного уровня, например реставрация зуба у хорошего дантиста Москвы (50тыс) и Новосибирска (20 тыс). При сильном желании сэкономить в регионе можно найти и дешевле.
                                                        +1
                                                        Сколько раз ни приходилось лечить себя или родственников в Москве, с меня не вымогали ни разу ни копейки. Чего не скажешь о мелких городах, где специалист нужного профиля может быть один на город или область, и он этим умело пользуется. Или устал и не хочет вас лечить, и вот хоть вы убейтесь.

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

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

                                                        И опять же, вы сравниваете с городом-миллионником, претендующим на второе место по стране. Сравнение с условным Абаканом будет гораздо, гораздо грустнее.
                                                      +5
                                                      Это просто воспитание и восприятие.

                                                      Сам с этим сталкивался. Просто психологически тяжело вот так взять и сказать заказчику «моя работа стоит 1000 рублей в час», когда вокруг тебя люди за эту же тысячу весь день горбатятся на морозе или преподают в школе (а потом ещё весь вечер домашки проверяют). И при этом жалуются, что работу найти тяжело. А ты, мол, будешь этот час просто сидеть дома и даже не в полную силу работать.

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

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

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

                                                      Исправлял, в своём случае, просто постепенным повышением требований к оплате. Просто говорил себе — любой следующий проект должен быть выгоднее предыдущего. Поднимай планку. Ведь если работы не будет, всегда можно откатиться. Оказалось, что и за достойную оплату работы — море, а требования там такие же или даже ниже.
                                                        +3
                                                        > более-менее освоив хотя бы одну (!) технологию, тем более имея IT бэкграунд — и свои $20 в час вы найдёте на Upwork.

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

                                                        > Попадаются и в России вакансии удаленные. И то, и другое даёт доход порядка 100 тысяч в месяц.

                                                        Если в России, то для удаленщиков вы таких зарплат не найдете. Не верьте что пишут в вакансиях. Большой части вакансий просто не существует, я не знаю почему. На том же HH на половину вакансий ответа от работодателя нет никакого. За интересной вакансией можно раздобыть телефоны конторы и позвонить, но чаще всего такое общение заканчивается ничем. Для реальных вакансий на удаленку, в лучшем случае напишут 100 для сеньора, но тебя таковым не признают, объективно или нет — это второй вопрос. Еще обязательно отнимайте 13% если работа в белую, либо еще больше, ибо часто предлагают работать в серую или вообще в черную (вот тогда сотка возможна).

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

                                                        Ваша сотка никак не вытанцовывается.

                                                        > Ну какое выживание? Какая нехватка средств? Я честно не понимаю, мы на разных планетах живём?

                                                        У меня товарищ удаленно работает Linux-админом в крупном московском интеграторе. Он и админит операционки, и сети, и автоматизирует, и пишет скрипты, и пилит CI, и что-то там в веб-серверами колдует, и базы данных крутит, и дает консультации голосом, чего от там только не делает. Устроился на 35 тыр, сейчас ему подняли ЗП до сорокета, для регионов у них такие зарплаты. Работает четко по 8 часов в день, за выполнением следят по закрытым тикетам с учетом плановой сложности работ. Он от такой работы измотался как я не знаю кто, это все равно что филиал «Яндекс.Еда» для интеллектуальных работников. Вот это реальность.
                                                          0
                                                          Да! Вот это — и есть та самая реальность, к сожалению. Это к моему коментарию выше. И когда говорят о кадровом голоде, о больших зп, о сотнях вакансий я думаю — либо со мной что-то не то, либо не о той стране речь.
                                                            0
                                                            И когда говорят о кадровом голоде, о больших зп, о сотнях вакансий я думаю — либо со мной что-то не то, либо не о той стране речь.
                                                            Это в первую очередь актуально для Москвы, Петербурга и некоторых миллионников (но далеко не всех).

                                                            Так что старая поговорка «Москва — не Россия» по прежнему актуальна. :)
                                                            +3
                                                            Небольшая проблемка: у меня трудности с английским, в образовательных заведениях я учил немецкий. Сейчас третий раз пытаюсь освоить уровень Elementary, и боюсь что эта попытка тоже будет неудачной.

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

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

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

                                                            Присмотритесь к английскому, оно того стоит.
                                                              +2
                                                              Небольшая проблемка: у меня трудности с английским, в образовательных заведениях я учил немецкий.
                                                              В европе немцы одни из самых платежеспособных и работы там до фига. Может Вам сузить поиск работы до германии? Даже у нас (фриланс, не удаленка) процентов 10 заказчиков из германии, хотя по немецки ни бельмеса и общаемся на английском.
                                                                0
                                                                > В европе немцы

                                                                Как вы думаете, какое знание языка будет у человека, если он ему буквально ни разу в жизни не понадобился?
                                                                +2
                                                                Один мой товарищ работает удаленно в playrix, C++ программист он. Получает 120. Обычный программист. Раз в год их всех собирают на 5 дней в Сочи на конференцию за счет компании. Мне предлагали 180 в одной конторе, на C#, но я не пошел туда, т.к там МФОшка (Микрофинансовая организация).
                                                                Странно так что про удаленку… Она есть, но обычно по Московским меркам не большая 90-120т. Это в России. На запад есть тоже, но найти оооочень сложно.
                                                                Другой вопрос, что к людям которые «всегда были фрилансерами» отношение не очень. Ну и есть куча всяких разных требований, которым надо соответствовать. Я вот считаю себя хорошим программистом.
                                                                  +1
                                                                  Там сейчас все настолько хорошо? Пару лет назад я туда устраивался на 50 (и то мне скинули с 55) и не прошел испытательный срок.
                                                                  Возможно это связано с тем, что они платят разное количество денег в зависимости от региона проживания: Москвичу на удаленке они заплатят больше, чем провинциалу (и да, это официальная позиция компании, а не выдуманная, чтобы не быть голословным, вот ссылка)
                                                                  +1
                                                                  Ну у меня по 150+ два удаленщика работают. Но это скорее исключение. Позже решили, что раз все равно ставка одна и зп одинаковая, то пусть все новые формально будут в офисе, а когда им эффективнее на удаленке — просто не приходят. Иногда очень тяжело по телефонам-скайпам решить проблему, и много времени уходит на посредничество, а в офисе человек может за день всех обойти и разобраться самостоятельно.
                                                                    +1
                                                                    Если в России, то для удаленщиков вы таких зарплат не найдете. Не верьте что пишут в вакансиях.
                                                                    Очень категоричное суждение, основанное на чём?
                                                                      0
                                                                      На личном опыте. Перед проектом на C++/Qt/QML я искал вакансию почти полгода. HH, Job.ru, разделы «Работа» на разных программерских форумах — полный ноль.

                                                                      Вот например мои записульки на тот момент:

                                                                      • Программист C/C++/C# ffmpeg; говорят Linux, подразумевают Windows. На деле нужен C#
                                                                      • Программист C/С++ — Партнерская платформа — не отвечают
                                                                      • Разработчик под Android (C++/Qt) — 2ГИС — только офис
                                                                      • Программист С++ (VR проекты) -только офис
                                                                      • Системный программист C/C++ (Junior-Principal) 70-120 тыс руб, для principal до 250 тыс руб, только офис
                                                                      • C++ developer с опытом embedded разработки.( remote work), удаленка от 2000$, English Upper Intermediate
                                                                      • Embedded Developer, SPB, до 90 тыс. руб, удаленка под вопросом — Закрыто
                                                                      • PHP 7, JS, MySQL, Yii Framework; удаленка после испытательного срока, что-то мутят
                                                                      • Senior Network Software Developer, от 80000 руб., удаленка, не отвечают
                                                                      • Senior Software Developer, Ростов-на-Дону, 80000., офис полный день
                                                                      • Программист-разработчик C++, C#, OpenCV, от 35 000 до 70 000 руб., полный день
                                                                      • Разработчик (python), Ростов-на-Дону, 65000 руб., полный день
                                                                      • Программист PHP, Ростов-на-Дону, от 70000 руб., полный день, микрокредиты
                                                                      • Senior Network Software Developer, Ростов-на-Дону, 100000 руб., полный день, микрокредиты
                                                                      • Программист С++ в г Санкт-Петербург, 110000-150000 руб, полная занятость
                                                                      • Программист С++, Ростов-на-Дону, 40000-80000, полный день
                                                                      • Работа Android Developer, полный день, английский
                                                                      • Удаленка. Разработка. С++, Linux и Windows — релокация в США, английский
                                                                      • С++ разработчик на удаленную основу/оплата от 100 тыс.руб. — не актаульно
                                                                      • Ищем php (zend framework) разработчика, удаленно, ЗП сдельная. Поддержка магазина. Хотят много работы за мало денег, ЗП не хотят обсуждать
                                                                      • Python developer (remote job), офис, микрокредиты
                                                                      • PHP Yii2 разработчик — PHP, Yii framework, PostgreSQL От 80 000 до 120 000 руб. Полный рабочий день, офис
                                                                      • Центр разработка PHP — Тестовое задание для вакансии PHP – middle разработчик, бодишоп
                                                                      • Python Developer, RU — SMS — разводилы

                                                                      Вот здесь хорошо и подробно расписано: webhamster.ru/site/page/index/main/news/465

                                                                      За все это время я успел наобщаться с разными работодателями, адекватными и не очень. Периодически выполнял тестовые задания, которые, такое впечатление, что давали «на отвяжись». Из-за одного неадекватного руководителя проекта, который успешно шифровался под адекватного человека (пока не дошло до конкретного дела) появился OpenSource проект MoveNoid. В этом тестовом задании я демонстрировал свои навыки по работе с C++, Qt, OpenCV, Box2d. И только после отправки тестового задания выяснилось, что ему нужен не C++ а C#, а про Linux он просто мечтал, а на деле нужна разработка под Windows. В общем, на рынке работы в области IT творился какой-то трындец. Или мне так везло, не знаю.

                                                                      Так что опыта у меня хоть отбавляй. Удаленную работу я не смог найти ни через HH, ни через Job, ни через разделы программерских форумов «Работа». Через личные контакты на хабаре и через знакомых — да, а через специализированные сервисы — нет, только тратил время. К настоящему моменту мало что изменилось, и люди об этом здесь говорят.
                                                                      +1
                                                                      У меня складывается впечатление, что Вы и я находимся в несколько разных галактиках, не говоря уже о «другом глобусе».

                                                                      Взять хотя бы тот же PHP и Laravel. Сейчас разброс цен по этому фреймворку у фрилансеров составляет 500-2000 рублей в час. 500 — это малоопытный, но готовый учиться; 2000 — это гуру, имеющий в портфолио кучу своих плагинов и наизусть помнящий все вызовы API.
                                                                      Возьмём среднюю ставку — 1000 рублей в час. При полной загрузке 160 часов в месяц это 160 тысяч. Можно работать вчёрную, можно иметь ИП и платить 6% — это в любом случае значительно выше «сотки в месяц».
                                                                      Да, многие фрилансеры предпочитают иметь одновременно 2-3 «долгоиграющих» проекта, где они всё знают, но в то же время диверсифицируют риски. И когда приходишь к ним с четвёртым — они говорят «слушай, у меня сейчас другой клиент требует по 30-40 часов в неделю, я не могу брать новый проект», «Не смогу взять, текущий заказчик полностью нагружает, в следующем месяце еще пару сайтов даст». Хотя проекты на 200-300 килорублей чистыми за пару месяцев.
                                                                      И да, это фрилансеры, которые в любой момент могут сказать «чувак, я тут вчера горящие путёвки взял, завтра улетаю на месяц в Таиланд», «мне не нравится работать по этому проекту, я не чувствую в нём профессионального развития», поэтому приходится по любому направлению держать на примете пул в десяток человек, чтобы если один отказался — хоть кто-то мог подхватить.

                                                                      Касательно Вашего товарища. Если всё так, как Вы говорите, то в моей реальности такая работа стоит 2-3 килобакса в месяц. Да, удалённо. Да, есть люди, готовые платить. Недавно одна европейская платёжная система искала на удалёнку такого человека, приходили спрашивали, нет ли кого.
                                                                      Я не знаю, зачем Ваш товарищ работает в этом интеграторе, может быть — ему нравится считать, что он работает в крупной известной конторе?

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

                                                                      Я могу представить себе только несколько случаев, когда человеку не хватает работы. Это если он либо неграмотен и не пытается учиться (а что, я знаю товарища, который до сих пор пишет на php в процедурном стиле, не используя ООП и мешает html с кодом, а-ля пхп3), либо человек неадекватен в общении, постоянно продалбывает сроки и подводит заказчиков. Потому что вот лично вокруг меня работы и проектов гораздо больше, чем толковых фрилансеров. И можно было бы и ещё больше брать, если бы был человеческий ресурс.
                                                                      Вот это реальность.
                                                                        0
                                                                        Взять хотя бы тот же PHP и Laravel. Сейчас разброс цен по этому фреймворку у фрилансеров составляет 500-2000 рублей в час. 500 — это малоопытный, но готовый учиться; 2000 — это гуру, имеющий в портфолио кучу своих плагинов и наизусть помнящий все вызовы API. Возьмём среднюю ставку — 1000 рублей в час. При полной загрузке 160 часов в месяц это 160 тысяч. Можно работать вчёрную, можно иметь ИП и платить 6% — это в любом случае значительно выше «сотки в месяц».

                                                                        Возможно, вы и правы, а мне только предстоит познать золотые горы фриланса. Очень на это надеюсь.

                                                                        Касательно Вашего товарища. Если всё так, как Вы говорите, то в моей реальности такая работа стоит 2-3 килобакса в месяц. Да, удалённо. Да, есть люди, готовые платить. Недавно одна европейская платёжная система искала на удалёнку такого человека, приходили спрашивали, нет ли кого. Я не знаю, зачем Ваш товарищ работает в этом интеграторе, может быть — ему нравится считать, что он работает в крупной известной конторе?

                                                                        Он, как и я, не знает разговорного английского. Если английский не важен, напишите мне в личку, он с удовольствием пообщается на счет работы за 2-3 килобакса. Где работать — ему совершенно по барабану, если это не является противозаконной деятельностью.
                                                                        0
                                                                        Устроился на 35 тыр, сейчас ему подняли ЗП до сорокета, для регионов у них такие зарплаты.

                                                                        И что? Например, в Москве и Питере тоже есть говноконторы, платящие своим программистам (не джунам!) по 45-50 тыщ, и в них даже кто-то работает. Значит ли это, что 50 тыщ — нормальная зарплата для такой работы? Нет, в Москве и СПб зарплата хорошего разработчика-плюсовика или джависта от 100 и выше.
                                                                        С админами, подозреваю, то же самое. На крайний случай никто не мешает в девопсы переквалифицироваться, на них спрос сейчас бешеный.
                                                                        То, что ваш знакомый получает копейки означает лишь то, что он согласен работать за копейки, а его работодатели и рады.
                                                                          0
                                                                          Еще обязательно отнимайте 13% если работа в белую, либо еще больше, ибо часто предлагают работать в серую или вообще в черную (вот тогда сотка возможна).


                                                                          ИП+патент. Отдаете государству чистыми порядка 45 тысяч в год и все. В регионах патент на IT очень дешевый. Гораздо выгоднее, чем 13%+страхование при работе как сотрудник. Отпуска, больничные и т.п. — это все торгуемо. Конечно трудовое законодательство на вас не распространяется, да и вообще с законами разобраться немного надо, что бы налоговая не классифицировала вас как удаленного сотрудника компании и не содрала «недоплату» за 3 года. Но там в целом ничего сложного, главное помнить, что это договор между двумя предпринимателями, а не между компанией и сотрудником. Счета и акты сейчас можно совершенно официально перекидывать по почте, спасибо изменениям в законодательстве.
                                                                        +11
                                                                        Интересно, как автор прыгает со стека на стек.
                                                                        У меня уже складывается впечатление, что в больших городах сменить стек технологий даже на близкий без сильного провала по деньгам практически невозможно.
                                                                        Например, когда хочешь отвалить подальше от железок и сурового C++ и переползти в теплый и уютный энтерпрайз на C# (да, такое бывает), диалог на собеседовании примерно такой:
                                                                        — Нам нужен .Net-разработчик
                                                                        — Да, я сюда за этим и пришел. Троелсена читал, Рихтера читал (и всё понял), MSDN по ночам снится, для всего прочитанного и изученного пилил учебные- или хобби- проекты.
                                                                        — У нас .Net Core, сервера работают под Linux
                                                                        — Да без проблем, это моя основная рабочая система уже лет 10. Плюс одно время еще системным администратором Linux-хостинга подрабатывал.
                                                                        — Понимаете, мы разрабатываем под веб, у нас своя специфика…
                                                                        — Да не вопрос. Под веб пишу еще со студенческих времен. В древние года на PHP, даже была своя CMS, потом ряд хобби-проектов на NodeJS и веб-морд для разных железок, в прошлом проекте был сервис с JSON-RPC через вебсокеты. Кэши, балансировщики, сервера приложений и реверс-прокси конфигурировать умею. REST, HTTP/HTTPS, вебсокеты, MVC, шаблонизация — могу любой каприз за ваши деньги.
                                                                        — Понимаете, нам нужен Senior-разработчик…
                                                                        — Ну вот он я. C++ синьор, а в IT уже 12 лет. С пониманием ООП. DRY, SOLID и паттернами никаких проблем. Тесты пишу, хотите юнит-, хотите интеграционные. Код-ревью четко и по делу. Знаю как работает менеджер памяти в ОС, как компилятор переводит исходник в опкоды процессора и оптимизирует, понимаю как работает IP и TCP и сетевой стек в системе. Даже в исходники .Net CLR заглядывал, там интересно. Участвовал в больших легаси-проектах, начинал проекты с нуля как техлид (и до сих пор не стыдно), ментлорил. Писал большие и жирные модули, писал под микроконтроллеры с десятком килобайт памяти.
                                                                        — Да, мы все понимаем, но все-таки у вас мало опыта работы с С#, мы вам можем предложить только позицию middle-разработчика, возможно через какое-то время по результатам можно будет пересмотреть грейд (но это не точно и вилами по воде писано)
                                                                        — Ага, теперь осталось объяснить моей жене и детям что папа будет получать на 50 тысяч рублей меньше денег… Спасибо, до свидания.
                                                                          0
                                                                          У меня та же самая проблема. Тем более я считаю, что и вы (судя по коментарию) и я довольно неплохо владеем разными инструментами.
                                                                          +2
                                                                          Шестеренки на КДПВ клинят друг друга
                                                                            +11
                                                                            Выживание и программист — странно использовать эти слова в одном предложении в нынешние времена, если честно.
                                                                            Как показывает практика, вторым языком после первого языка программирования лучше всего учить английский. Это увеличит доходы примерно в 2-3 раза относительно российского рынка. Что бы это понять, достаточно посмореть на расценки на российских фриланс биржах и апворке(даже с учетом того, что они просто охренели с комиссией в 20% и бидами по 15 центов). Там кстати довольно высоко оценивают руки из восточной европы, русские и украинцы пользуются спросом и уважением (:
                                                                            В работе на такой бирже есть три основных плюса — заработок, публичный фидбек в профиле и возможность найти постоянное интересное место.
                                                                            Я в программировании всего 4 года… с самого первого дня обучения зарегался на апворке и брал простые проектики за 5-10 баксов, что бы был стимул, что бы самому не придумывать себе учебные задачки, и что б чуть-чуть подзаработать. В итоге сейчас прайс 30$ в час, есть постоянные клиенты… правда я остановил активную деятельность там года полтора назад, потому что нашел хорошую постоянную работу. Чему, кстати, поспособствовал профиль на апворке, как подтверждение моих скиллов.

                                                                            Не хватайтесь за все подряд. Это, как минимум, не выгодно. Хотя если вы долгое время не можете пользоваться одной технологией и становится скучно — тогда да… но это уже вопросы психологического характера…
                                                                              +3
                                                                              Как показывает практика, вторым языком после первого языка программирования лучше всего учить английский

                                                                              Ага, я тоже несколько лет назад попробовал поработать через апворк. Быстро понял, что без нормального английского там тяжело (все более-менее хорошие заказчики хотят поговорить перед тем, как тебя нанять). Раздобыл немного денег и свалил на Филиппины прокачивать английский. Через два месяца занятий по 8 часов в день, как-то, вроде бы без особых усилий с моей стороны, нарисовались проекты в апворке, я перешел в другую школу на 4 часа в день (что бы оставалось время работать). К этому моменту дохода с проектов уже хватало и на отель и на учебу и на остальную филиппинскую жизнь. Еще через пару месяцев поехал в Таиланд, пожил там немного, поездил по Азии и вернулся.

                                                                              Сейчас на апворке уже не работаю, занимаюсь своими проектами. Но в плюсе остался сносный английский и масса впечатлений от Азии.
                                                                              Так что я тоже за английский голосую. :) Денег у буржуев больше. И проекты более адекватные. И сама система почасовой работы удобная.
                                                                                +2
                                                                                Плюсом к этому идет нормальная культура работы в большинстве случаев, когда люди понимают, что такое work-life balance… Большинство проектов у европейских заказчиков (с азией и сша у меня мало опыта) довольно растянуто во времени, что дает определенную предсказуемость в долгосрочном периоде, и отсутствие необходимости рвать жопу по 12 часов в день без выходных(но когда набираешь дофига проектов на фрилансе, это правило не работает, конечно)…
                                                                              +1
                                                                              «ниша фуллстек-разработчиков находится именно в создании начального продукта» — это поистине золотые слова. Беда в том, что бизнес (ака «Заказчик») имеет от фулстека полный комплект ожиданий и на разработку продукта под ключ и на его техническую поддержку. И знаете — не надо их разочаровывать на первой фазе, это окупается.
                                                                                –1

                                                                                Давайте внесем поправку. Вы не "фуллстек", а многонедостек. Винигрет, который у вас есть, очень сложно продавать. Навскидку, тесты не упоминаются в принципе, значит QA хромает, значит будут проблемы как в коммуникации с заказчиками, так и с дизайном решений, поскольку тесты (особенно executable specifications в стиле Gherkin) развивают оба эти ключевых навыка. Про delivery ничего, кроме упоминания докера в негативном ключе, значит нет того необходимого чувства MVP. У вас чисто кодинговый фокус, который и половины SDLC не закроет. Фуллстеком можно с легкостью назвать нелюбимого вами "JS-only разработчика", который к стеку MEAN, например, подмешает CucumberJS, Jest, Jenkins, Docker. Суть не в количестве технологий, названия которых вы можете перечислить. Нарисуйте схему "стека", от первой коммуникации заказчика до доставки пятисотой версии продукта, разместите в нём свои навыки и удивитесь количеству белых пятен.

                                                                                  0
                                                                                  Ну как же, про тесты я полный абзац написал. А вот скажите, QA, Gherkin, delivery MVP, SDLC, MEAN, CucumberJS, Jest, Jenkins, Docker — это все должен крутить один человек? Или, все-таки команда?
                                                                                    0

                                                                                    Абзац про тесты, в котором говорится что тестов у вас нет, меняет суть моего сомнения? Я вам говорю про отсутствие фундаментального связующего звена. Без него вы не фулстек, а кодер-полиглот. У которого, говорям вашими же словами из того же абзаца, нет времени на QA, надо кодить.


                                                                                    А вот скажите, QA, Gherkin, delivery MVP, SDLC, MEAN, CucumberJS, Jest, Jenkins, Docker — это все должен крутить один человек? Или, все-таки команда?

                                                                                    Простите, кому должен? Есть вопросы ресурсов — "должен ли" гаражный стартап формировать себе пять-десять департаментов на все случаи жизни для запуска MVP с низким бюджетом? Склада ума — взять, скажем, классическое противостояние diffuse mind vs focused. Каким "должен быть" mindset? Личных предпочтений — я, как частный случай, обожаю фуллстек. Для меня это образ мышления, своеобразный философский вызов.


                                                                                    Но вы меня опять не поняли. Этим списком я хотел показать, что он в разы короче вашего, но фулстек и помог бы вам качественно развиваться.

                                                                                      +1
                                                                                      Абзац про тесты, в котором говорится что тестов у вас нет, меняет суть моего сомнения? Я вам говорю про отсутствие фундаментального связующего звена. Без него вы не фулстек, а кодер-полиглот. У которого, говорям вашими же словами из того же абзаца, нет времени на QA, надо кодить.

                                                                                      Я не говорил такого. Я говорил, что нет времени на написание тестов.

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

                                                                                      Простите, кому должен? Есть вопросы ресурсов — «должен ли» гаражный стартап формировать себе пять-десять департаментов на все случаи жизни для запуска MVP с низким бюджетом? Склада ума — взять, скажем, классическое противостояние diffuse mind vs focused. Каким «должен быть» mindset? Личных предпочтений — я, как частный случай, обожаю фуллстек.

                                                                                      Честно, по-моему, вам пора учить русский язык. Не хочу вас ничем обидеть, но это просто какой-то поток сознания.

                                                                                      Но вы меня опять не поняли.

                                                                                      Согласен.
                                                                                        0
                                                                                        Я не говорил такого. Я говорил, что нет времени на написание тестов.

                                                                                        Количество времени, которое вы инвестировали в тесты = 0 ("нет времени"). Пусть скорость написания тестов — v, если этого мало — V. Итого тестов написано 0*V LOC. В какую сторону это отличается от моего предположения, что "тестов у вас нет"?


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

                                                                                        Я себя подобными речами успокаивал лет 10 назад. Потом пришло прозрение и стыд. У вас оно либо впереди, либо, судя по отношению к сути советов, никогда. Тесты — это образ мышления, это прокачивание навыков дизайна вроде SOLID, это быстрый переход от общения с заказчиком к BDD и executable specifications. Именно эти критерии обеспечивают QA, а не обкликивание ПО и такой фантастический KPI как "аккуратность".


                                                                                        Честно, по-моему, вам пора учить русский язык. Не хочу вас ничем обидеть, но это просто какой-то поток сознания.

                                                                                        Нет проблем. Я помогу вам провести декомпозицию, хоть анализ потока сознания заказчиков — ключевой скилл фуллстека. А они зачастую изъясняются куда хуже. Начнём с первого вопроса:


                                                                                        Вы: ...X,Y,Z… — то все должен крутить один человек?
                                                                                        Я: Кому должен?
                                                                                    +5
                                                                                    Не понимаю почему возможная храмота с QA, приведёт к проблемам «как в коммуникации с заказчиками, так и с дизайном решений»?
                                                                                    QA в современном контексте CI/CD стало проявлять не больше 5-ти лет назад. До этог окк люди работали? Приёмочное тестирование без тестов не бывает? или вы ни где кроме «Яндекса» не работали?
                                                                                    Человек умеет писать программные продукты, был фулл-стеком это не значит заменять бизнес аналитиков и менеджеров проекта в купе с менеджерами по продажам. Это значит владеть полным стеком технологий для производства ПО.
                                                                                    Про дизайн решений это вообще за гранью… если проекты у человека без автоматизированного тестирования спокойно обходятся, значит у него всё плохо с архитектурой? Нет, просто не надо тратить время на вещи без которых можно обойтись. Это повышает эффективность.
                                                                                    С MVP у автора всё хорошо: две недели согласовывал ТЗ, за полтора месяца запилил, то есть успешно справился с реализацией MVP, или автор что то провалил?
                                                                                    +1
                                                                                    Изучение должно сопровождаться полным набором сопутствующих вещей: профессиональный коллектив, общение с коллегами и возможность обсуждения вопросов «на коленке», конференции, обучение, литература, академическая среда, большие и интересные проекты. Это касается любого языка и ИТ-технологии. Фуллстек-разработчик на удаленке этого набора априори лишен, и может рассчитывать только на самого себя. К сожалению, я вижу, что освоение сложных вещей очень непроизводительно в одиночку. Тематические форумы и телеграм-каналы тут мало помогают: куче народа давным давно плевать друг на друга, и если обсуждение какого-либо вопроса не выльется в флейм, оскорбления, лицемерие и оценку профессиональных и умственных способностей вопрошающего, то это будет большой удачей.


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

                                                                                      Всегда считал и продолжаю считать, что ценность программиста определяется не «прокаченностью» справочными знаниями, а способностями к архитектурному мышлению.
                                                                                      Да, «прокаченный» знаниями специалист делает работу быстрее, но без архитектурных способностей на выходе часто получается нечто вроде машин Голдберга.
                                                                                        +1
                                                                                        Почему-то хочется пойти поплакать где-то в темном углу и погладить кошку.
                                                                                          +1
                                                                                          Тоже никого не хочу обидеть.
                                                                                          И меня тоже удивляет. Но меня удивляет вообще необходимость поиска удаленки, особенно в контексте «выживания». При наличии в списке скилов 1с.
                                                                                          Знание 1с для программиста в России (а ещё в Казахстане, Белоруссии, Украине), практически гарантирует приемлемый доход почти в любом уголке. Где есть хоть какая-нибудь экономическая деятельность. Мы сами с супругой прошли путь: мелкие хутора-посёлки Краснодарского края — Таганрог — Ростов — Москва/Зеленоград. Но те люди, наши друзья, которые когда-то с нами начинали и не соблазнились столицей, все сейчас очень хорошо устроены в своих периферийных городах/станицах. Кому за 40, почти все разного уровня руководители. И исключительно благодаря именно достигнутому профессионализму, а не связям.
                                                                                          Так что тут скорее не сложности с работой для программиста на периферии, а принципиальное отношение автора или конкретно к 1с, или в принципе к «работе на дядю». Ну или принципиальное желание работать дома на удаленке.
                                                                                          Для меня самого 1С давно лишь средство гарантированного стабильного заработка, а большая часть перечисленного автором — как раз хобби для души.
                                                                                            +4
                                                                                            Реально, меня трясет от 1С. Как платформа — она прекрасна для своей предметной области. Но все что ее окружает — тупые бухгалтера, жадные хозяева производств, веселые эффективные менеджеры, «нам нужна автоматизация, но бухгалтерия не доверяет отделу кадров, поэтому учет будем вести в разных базах» — вот от этого всего хочется держаться подальше.
                                                                                              0
                                                                                              Я это конечно могу принять и принимаю, но понять не могу :-).
                                                                                              Сам когда-то достаточно случайно попал в эту тему. Зеленым совсем пришёл к франчу пособеседоваться, с нулевыми знаниями в экономике, с незаконченной вышкой, но некоторым опытом программирования и администрирования. И был принят только потому, что у них наклёвывался проект по внедрению «Галактики», а она тогда на БД Btrieve, а та работала под Netware, а я имел опыт администрирования общажского сервера под этой осью. Потом ещё глубоко погружался в администрирование и программирование под *nix, тогда это была Фря. Вобщем были все предпосылки стать ядрёным админом, и мне это нравилось. Но судьба так повернулась, что Галактику так и не продали, а я в Таганроге стал первым, кто разобрался с ЗиКом 7.5, и стал востребованным спецом именно по 1С, а не по сетям, Netware или FreeBSD. Хотя вообще то были чудесные времена, когда само собой разумелось, что большинство IT-шников знают и умеют всё в области IT, от прокладки сетей до разработки драйверов, вот только термина «Фуллстек» ещё не было.
                                                                                              Мне нравилось работать и с 1С тоже, и нравилось вникать в работу самых разных фирм, это был очень интересный опыт. В итоге, по прошествии уже более 20 лет, я ничуть не жалею о выбранном направлении. Большинство моих студенческих друзей, которые пошли другими дорожками, сисадминство и пр., сейчас значительно более скованы в финансовом плане. А я в свои уже более зрелые года снова возвращаюсь к администрированию *nix'ов, паяльнику, низкоуровневому программированию, но уже сугубо в рамках хобби. Потому что на жизнь, икорку на бутер, гараж и собственный кабинет в загородном доме, мне позволяет заработать столь ненавистная многим 1Ска. Ну и ещё греет знание того, что если мне вдруг надоест жить и работать в дефолтном муравейнике, я могу тыкнуть пальцем в (почти) любую точку СНГ, приехать туда и без проблем найти вполне приличную работу.
                                                                                                0
                                                                                                Да, и просят за бекап сайта 3х-летней давности 200к деревянных. Фактически, за просто так. Надеюсь, что ваша любовь и вникание в работу разных фирм со своим 1с принесла плоды. Почему надеюсь? На реальности вещей это мало отражается.
                                                                                                  0
                                                                                                  На реальности это периодически отражается самым прямым способом: у меня есть опыт автоматизации бизнес-процессов во множестве сфер хоз.деятельности, я это отражаю в своём резюме, и без проблем могу соискаться в компании самых разных профилей. На практике с момента приезда в Москву мне это пригодилось лишь дважды: сначала устроился в фин.холдинг, потом сменил поближе к дому на дистрибьютора орг.техники. А потом тот же фин.холдинг меня купил назад, и сейчас условия таковы, что лучше найти очень сложно. Так что — да, больше на реальности это не отражается. Но внутри холдинга тоже время от времени получается переходить в разные компании и совершенствоваться в новых областях.
                                                                                                  Ещё был не очевидный побочный эффект — в Таганроге за несколько лет работы во франче я оброс множеством знакомств. И в силу специфики этой работы, большая часть знакомых — это владельцы, директора компаний, или руководители подразделений больших компаний, которых в Таганроге не так уж много. Так что весьма полезно тоже было. Этот капитал оказался практически утрачен при отъезде оттуда, но ещё несколько раз пригождался.
                                                                                                  На самом деле, как сам прошедший уже долгий путь, считаю, что для 1Сников опыт работы во франчах очень важен, и это лучший вариант старта в этой области. Причём я даже не уверен, есть ли ещё сферы в IT, где есть такой лёгкий вариант старта с нуля? Куда ещё так легко возьмут без опыта работы и позволят набирать опыт по множеству разных профилей? И откуда ещё можно так легко соскочить работать в штат уже по конкретному профилю?
                                                                                            0
                                                                                            Что может быть лучше фуллстека на небольших (порядка 10-100К строк) проектах? Да и дальше специализация происходит плавно, а не скачком.
                                                                                            Длинный список технологий тоже необязателен, например C++ или C# и SQL — это уже минимальный стек, достаточный для построения многозвенных систем.
                                                                                              0
                                                                                              Живу за МКАДом конечно, но не считаю Екатеринбург периферией, тем не менее с работой и технологиями у меня такой же зоопарк (резюме).
                                                                                              Но это не потому что жизнь такая, а потому что я такой, мне не интересно заниматься ширпотребом, клепать сайтики, или сидеть на поддержке внутренних инф систем предприятия, я всегда нахожу приключений в стартапах созданных вчера, или в маленьких фирмочках со своей долей на рынке не самых обычных услуг.
                                                                                              Не называю это выживанием, называю это «моя весёлая жизнь». Мне нравиться.
                                                                                              Подозреваю что автору тоже, иначе бы он с этим что то бы уже сделал.
                                                                                                0
                                                                                                > Для Zend и Symphony я еще не созрел
                                                                                                А сейчас модно Symfony череp ph писать?
                                                                                                  0
                                                                                                  Благодарю, исправил.
                                                                                                  0
                                                                                                  .
                                                                                                    0
                                                                                                    Промахнулся комментарием. Del.
                                                                                                    0
                                                                                                    Прочитав первые 2 «экрана» статьи на всякий пожарный проверил: не я ли ее написал в приступе сомнабулизма -)

                                                                                                    webhamster как же Вы не одиноки!
                                                                                                    Хотя, в рабочие будни кажется наоборот..-)

                                                                                                    Короче, нужно организовывать профсоюз:
                                                                                                    — Здравствуйте, меня зовут Павел, я человек-оркестр фуллстек-разработчик… (почти (с))
                                                                                                      0
                                                                                                      Нас уже двое!
                                                                                                      +1
                                                                                                      Название «написать веб-сервис без знаний о современных подходах в веб-разработке» чуть больше коррелирует с содержанием как мне кажется)
                                                                                                      Интересно было бы взглянуть на код.

                                                                                                      А как вам ваш новый стек? Останетесь на нём?

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

                                                                                                        Самый обычный код. Короткие методы, если есть действительно крупная сущность — выделяется как класс. Декомпозиция согласно гайдлайнам фреймверка. Все что можно сделать средствами фреймверка — делается средствами фреймверка (в рамках моих знаний, конечно). Для ORM методично прописаны прямые и обратные связи. По возможности выборка из БД идет один раз в контроллере, далее работа с коллекциями. Как-то так.

                                                                                                        А как вам ваш новый стек? Останетесь на нём?

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

                                                                                                        Ещё мне кажется, что перейти с плюсов на PHP это похоже на безумие

                                                                                                        На самом деле PHP очень приятен своим простым синтаксисом и отсутствием необходимости следить за памятью и всякими мозговыносящими UB. Я на PHP просто отдыхаю. Главное, чтобы проект был интересным, а не очередной интернет-магазин. QrCall.org — именно такой проект.
                                                                                                          0
                                                                                                          Ещё мне кажется, что перейти с плюсов на PHP это похоже на безумие)

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

                                                                                                            0
                                                                                                            Каждому языку своё
                                                                                                          +2
                                                                                                          Всем привет! Полагаю, это мой, второй комментарий за последние лет пять (не на хабре, а вообще :) Захотелось поделиться несколькими соображениями.

                                                                                                          Причины две:

                                                                                                          1. Автор публикации

                                                                                                          Автор публикации (если кто не знает), является также автором программы mytetra. Пользуясь, случаем, выражаю ему огромное спасибо за труд и терпение. Mytetra подходит мне как нельзя лучше для моих исследований. Я пользовался и onenote, и в evernote у меня подписка до сих пор, но mytetra лучше! И если бы делал ее я, я бы сделал нечто очень похожее. Она в исходниках, можно под себя, что угодно допилить. Но это отдельная тема.

                                                                                                          2. Тема публикации.

                                                                                                          Мне (рожденному в СССР) тема эта весьма близка :). Говоря словами Коко Шанель, «если вы хотите получать от жизни то, что никогда не получали, вам придется делать то, что никогда не делали». Да, граждане разработчики, если хотите получать деньги, придется идти на компромисс. Как и большинству программистов-интравертов мне тоже хотелось бы писать красивый код и получать за это хорошие деньги. Но рынок есть рынок, ты продаешь себя – тебя покупают. Это всего лишь вопрос покупки-продажи, к разработке ПО он имеет отношение, поскольку постольку. У меня уже много лет в этом плане нет каких-то принципиальных проблем. Т.е. вопрос в конечном счете сводится к задаче «Продать себя». Да, это не то, чем мне хочется заниматься, но иногда приходится это делать. Попробую сформулировать несколько простых правил, которые если соблюдать, неизбежно приведут к хорошо оплачиваемой работе. Это из личного опыта, если у кого не так звиняйте.

                                                                                                          1) Найдите «фишку» которая вам нравится и в ней развивайтесь. Не хватайтесь за все. Это легко советовать, конечно, на самом деле может быть компромисс. У меня есть своя «фишка» которая неплохо продается, и покупают ее, а меня тянет F# к примеру, и я с поразительной глупостью, его где можно проталкиваю…

                                                                                                          2) Не пишите в резюме все, что когда-либо использовали, умели и где работали. Конкретного покупателя интересует определенный набор навыков (за определенные деньги). Если нужен и «швец и жнец» не продавайте себя такому, ничего хорошего не выйдет. И другая сторона этого дела, как сказал один из покупателей моему рекрутеру однажды: «ну… ему с таким багажом у нас будет скучно». Вывод: под выбранную позицию не поленитесь сделать вариант резюме, заточенный под покупателя.

                                                                                                          3) Не торгуйтесь по ЗП, ничего не выйдет. Просто называйте мин. сумму как данность и не приходите на интервью/созвон, если покупатель не согласен. Надо иметь этакую небольшую долю авантюризма, она полезна. Никто не может знать и уметь все на свете, но вы то должны понимать, что если вы сумели разобраться с AnSYS к примеру, то нет оснований думать, что не разберетесь с чем-то другим. Если девять покупателей не согласны, всегда найдется десятый.

                                                                                                          4) Автор перечислил в комментариях список позиций. Не знаю, конечно, его принцип поиска, но точно знаю, что некоторые позиции в кампаниях висят годами, т.е. люди определенных профессий нужны всегда и деньги тут не имеют значения. Покупатель очень часто готов заплатить в два раза больше, если ему подойдет соискатель. Те позиции у которых публикуется сумма, как правило, имеют потолок, который и приводится в описании. У хороших вакансий ЗП не указывается. При созвоне вы называете свою, а покупатель либо устраивает вам интервью, либо нет. Все просто.

                                                                                                          5) Совершенно справедливые комментарии про английский. Возможно, вам не хочется им заниматься (возможно, даже не сознательно). Я в школе и институте (времена перестройки) учил немецкий. Профессия заставила учить английский. Делал я это неправильно и мне больно вспоминать кучу времени потраченного впустую, теперь я знаю, как нужно было это делать (эх, если бы тогда знать!). Возможно у вас такая же ситуация, что была и у меня. Но, последние несколько лет я работал с заказчиками в Европе, Канаде, Аргентине, Юго-Восточной Азии и поверьте, никогда не испытывал проблем языкового плана. Здесь не место для обсуждения методик изучения, но разговорный язык это тот навык, который очень востребован. Это отдельная тема, как сделать так, чтобы изучение языка было также приятно, как программирование.

                                                                                                          6) Интервью – это определенный ритуал. Я часто находился по обе стороны. Находиться на стороне того, кто задает вопросы не менее мучительно, чем на стороне отвечающего. Многие подходят формально. Надо составить список вопросов, все эти DRY, SOLID и паттерны, замыкания не забыть в JS :) и т.п. Думаю редко, кто чувствует себя комфортно. Ну что делать, некоторые заклинания придется выучить. Лучше всего, на мой взгляд, работал метод тестового задания и дальнейшего его обсуждения. Даже если оно было с ошибками, человеку гораздо комфортнее и рассказывать про свой код и видно как человек думает. Ну это лирика, а чтобы их не боятся, способ один: нужно ходить(или созваниваться) как можно больше, анализировать и делать выводы.

                                                                                                          7) Не спешить. Помнить — покупатель найдется всегда, это вопрос времени.

                                                                                                          Такие вот размышления, все это ИМХО конечно, но факт в том, что я фулстек и проблем денежного плана нет. Правда в последнее время все больше по контрактам (ИП).
                                                                                                          Общий вывод таков: если вы смогли разобраться с очень сложными проблемами в коде, решить вопрос денег — дело плевое, просто признайтесь себе, что вам не хочется этим заниматься :)

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

                                                                                                          Самое читаемое