Гав, мяу, JVM, JDK, JRE и все такое (немного Java в ленту)
Проще всего понять о чем говорим посмотреть на эту картинку. Более подробно в этом телеграмм-канале
В чем суть и различие?
JDK (Java Development Kit) - включает в себя Java Development Tools и среду выполнения Java - JRE (Java Runtime Environment).
JDT (Java development tools) - включают в себя около 40 различных инструментов: javac (компилятор), java (лаунчер для приложений), javap (java class file disassembler), jdb (java debugger) и др.
JRE - это пакет всего необходимого для запуска скомпилированной Java-программы. Включает в себя виртуальную машину JVM и библиотеку классов Java Class Library.
Резюмируем. Есть JDK для ведения разработки, которое содержит JRE и интсрументы разработки (тот же компилятор и дебаггер). Дальше сам JRE содержит какую-то JVM и библиотеку непонятных классов
Непосредственно JVM
JVM (Java Virtual Machine) - программа предназначенная для выполнения байт-кода. Благодрая которой, Java может работать на всех платформах. Раньше программы писали под определенную платформу, а теперь можно написать на Java и работать программа будет везде. Собственно JVM существует масса как комерческих, так и с открытым исходным кодом. А для чего пишется столько различных JVM? Нуу... Чтобы на какой-нибудь операционке работало быстрее, так же можно написать свою JVM для каких-либо своих целей
Что делает? Отвечает за загрузку классов, выполнение байт-кода, управление памятью и очисткой мусора (знаменитый сборщик мусора)
А что за байт-код? Когда мы компилирует программу мы получаем на выходе файлы с расширением .class. Это и есть файлы с байт-кодом
Есть вопрос гораздо интереснее, а как это файлы JVM находит? Что за сущность, которая говорит JVM: "О смотри что нашел, тебе нужно?". Сие носит название как Class loader
Class Loader
Загрузчики классов - это классы, часть JVM, они отдают классы в JVM, а дальше она делает с классами что захочет, но перед этим классы должны быть загружены. Загружаются классы не все разом, а по мере необходимости
Загрузчики:
1) Bootstrap classloader загружает основные библиотеки Java, расположенные в папке <JAVA_HOME>/jre/lib. Этот загрузчик является частью ядра JVM, написан на нативном коде (C, C++). Когда JVM загружает классы из rt.jar, она не выполняет все этапы проверки, которые выполняются при загрузке любого другого класс-файла т.к. JVM изначально известно, что все эти классы уже проверены. Поэтому, включать в этот архив какие-либо свои файлы не стоит, в отличие от наших классов, их JVM проверяет
2) Extension classloader загружает код в каталоги расширений (<JAVA_HOME>/jre/lib/ext, или любой другой каталог, указанный системным свойством java.ext.dirs). Если нужно, чтобы какой-то класс загружался каждый раз при старте Java машины, можешь скопировать исходный файл класса в эту папку, и он будет автоматически загружаться
3) System classloader загружает код, найденный в java.class.path, который сопоставляется с переменной среды CLASSPATH. Это реализуется классом sun.misc.Launcher$AppClassLoader.
Загрузчик классов выполняет в строгом порядке:
1) загрузка - находит и импортирует двоичные данные для типа.
2) связывание - выполняет проверку, подготовку и (необязательно) разрешение.
3) проверка - обеспечивает правильность импортируемого типа.
4) подготовка - выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
5) разрешение - преобразует символические ссылки из типа в прямые ссылки.
6) инициализация - вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
Немного о проверке корректности .class
Файл скомпилированного класса (.class) содержит дополнительную информацию о классе: имя, модификаторы, супер-класс, супер-интерфейсы, поля, методы и атрибуты
Так при загрузке класса:
1) происходит чтение класс-файла, т.е проверка корректности формата
2) создается представление класса в Constant pool (Meta space, область памяти для такого рода делов)
3) грузятся супер-классы и супер-интерфейсы. Если они не будут загружены, то и сам класс не будет загружен
Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM. У каждого загрузчика классов Java есть родительский загрузчик классов, определенный при создании экземпляра нового загрузчика классов или в качестве системного загрузчика классов по умолчанию для виртуальной машины
И это не все
Java нужно как-то интерпретировать байт-код, для этого есть угадайте что, интерпретатор, работает он быстро, но его недостатком является медленное выполнение. Если функция выполняется много раз он каждый раз заново компилирует байт-код в машинный код. Такую проблему решает JIT
JIT (just in time) - компилятор, который использует интерпретатор когда увидит функцию, использующую несколько раз. Т.е. интерпретатор видит повторяющийся код => отдает его на съедение JIT, а после использует сразу скомпилированный код от JIT (нативный код) и ему не нужно заново компилировать байт-код
Области тьмы (памяти)
JVM использует множество областей памяти для работы, одни области сооздаются при запуске программы и работают пока она не закончится, другие существуют поменьше
1) Heap (куча) - создается при запуске и работает пока программа не завершится. В ней хранятся объекты доступные для всех потоков из всех участков программы (не нужные объекты чистит сборщик мусора). Может быть фиксированного размера и определяться по мере выполнения программы
2) Run-Time Constant Pool - область хранения класса или интерфейса в рантайме. Хранит информацию о классе, константы (числовые литералы, ссылки на методы и поля)
3) Native Method Stacks - стеки для поддержки нативных методов, написанных не на Java
4) Java Virtual Machine Stacks - стек для потоков, т.е. каждый поток имеет свой стек. Стеки могут быть как фиксированного размера, так и динамически изменяться
5) Program Counter Register (PCR) - каждый поток имеет такую область памяти, в ней хранится адрес инструкции на которой поток завершился, чтобы потом начать с этой инструкции
Frame - новый frame создается каждый раз, когда вызывается метод. Frame уничтожается, когда завершается вызов метода. Соответсвенно раз фрэйм создается для создания метода, каждый фрейм имеет свои константы, локальные переменные. А фрейм, который выполняетсяв данный момент называется текущим, т.к. работать может только один фрейм во всей программе.
Каждый frame содержит ссылку на run-time constant pool для поддержки динамического связывания метода. Динамическое связывание загружает классы по мере необходимости. Позднее связывание методов и переменных вносит изменения в другие классы, которые метод использует с меньшей вероятностью нарушить этот код.
Почитать о том как я проходил собеседования, об IT и жизни можешь в этом телеграмм-канале
Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #4
Только такой картинкой я могу описать все что происходило с прошлого выпуска.
Мои студенты начали проходить уроки и выполнять домашку) появлялся новый контент и люди делали новые домашки) и постоянно где-то что-то нужно было докрутить / доавтоматизировать / быстренько поправить.
Каждый раз думаешь "ну что ж такое-то! Как я это не учел-то("
И на самом деле понимаю почему) потому что дел много и мест где надо что-то поменять тоже много) на всю систему тесты написать пока что не успеваю) думаю займусь ими в будущем году на январских праздниках)
Качнулся ли я за это время с прошлого выпуска?
Определенно) В этом мне помогают мои студенты, которые иногда делают домашки совсем не так как я это задумывал)
Из-за этого вскрываются новые нюансы, которые надо срочно починить чтоб не блокировать студентов)
А еще иногда ломается автоматизированное тестирование или в нем находят ошибки) и начинаешь задумываться о тестах для тестов) было у вас такое? признавайтесь.
Вообще когда делаешь такую комплексную систему, то начинаешь понимать всю прелесть современных архитектур и инструментов) в тоже докере очень много чего продуманного. docker inspect была самая мной используемая команда за это время)
Кстати, про докер. Некоторые студенты делают домашку на старых или загруженных компах и вот там кстати очевидный профит от маленьких докер образов которые я делаю для уроков (буквально по 30 метров).
Что говорят студенты?
Разное) Критика присутствует и это хорошо, это помогает развивать курс и его экосистему. Конечно до крупных учебных центров по программированию мне еще далеко, но с приходом живых студентов и выполнения ими домашек + обработка и реагирование на критику помогли сделать курс значительно лучше. Есть довольные и не очень) ничего, главное что работа идет)
Когда будет техничка?
В следующем выпуске) там заодно про кубер расскажу)
И вот холиварный опрос решил создать) интересное)
Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #3
В этом посте поговорим о том какого это делать онлайн-курс по программирования одиночку.
Не очень просто, как могло бы показаться на первый взгляд) Но зато очень интересно)
Впервые делал увеличение счетчика processedUsersCounter++ вот так 😂
Вот краткий перечень чему я научился или что хотя бы начал уметь делать хоть как-то:
попробовал и настроил кое-что для курса на zero-code :)
освоил самый базовый
шиномонтаж видео и работу со звукомнаписал кучу скриптов на Bash для внутренней автоматизации на онлайн-курсе
и еще одну кучу скриптов для автоматизированной проверки домашек
а что? вдруг я сплю, а человек хочет домашку сдать
немного использовал Go для некоторых уроков чтобы кое-что закодить на нем
так чтобы это было просто расширять или допиливать в дальнейшем
чтобы Docker образ получился бы маленьким и не тратить место на диске у студентов
сделал свой рекордный по размеру образ для учебных целей (для студентов спец мини
сервер на Go) - 9 мегабайт вышло) вроде подозрительно, но прикольно и работает)
поработал и продолжаю работать с Gitlab API для все той же автоматизации
В целом стараюсь избегать человеческого фактора и автоматизировать все что можно)
спасибо за внимание) подписывайся если интересно узнавать из первых уст как делаются онлайн-курсы по-программированию)
Максым Атыгаев, человек-разработчик.
Ответ на пост «Как я стал программистом в 32 года. Отработал 1 год. Стоит ли оно того?»
Отвечу постом чтобы максимально посеять мысль.
В общем вас хотят поиметь завлекая на айти курсы. То же было с акциями год назад. То же было со вкладами. То же было с криптой, с арбитражом крипты и тд. Когда маржинальность падает, вылезают такие клоуны с рекламой 100% успеха.
Не верьте, везде пиздеж.
Как я стал программистом в 32 года. Отработал 1 год. Стоит ли оно того?
Ровно год назад в возрасте 32 лет я получил свой первый оффер и устроился в IT-компанию на должность Junior-разработчика на языке Java, где отработал 3 недели, после чего уволился. Это не история успеха, после которой будут ссылки на какие-либо курсы, это всего-лишь личный опыт человека (то есть меня), который до 32 лет работал инженером в строительной области, но в один момент решивший изменить если не всё, то точно существенную часть своей жизни.
Ранее я подробно рассказывал о том каким был мой путь: как возникли мысли стать программистом в 30+ лет, как и где я учился, а также сколько времени ушло на обучение и насколько сложно было найти первую работу. Если очень кратко, то вот основные тезисы из прошлых постов:
Бэкграунд в программировании: ноль, но в плане ПК я продвинутый юзер, то есть могу переустановить винду, найти и установить драйвера и вот это вот всё.
Учился я под присмотром ментора.
Теорию смотрел на YouTube, либо в дешевых курсах с площадки на букву U.
Закреплял знания на практике, выполняя небольшие пет-проекты, задания к которым мне выдавал ментор. Если кому-то интересно, то могу скинуть ссылку на задания в комментариях.
На учебу ушло 7,5 месяцев или 1000 часов обучения.
У меня была накоплена финансовая подушка, которая позволила полностью отказаться от основной работы и бросить все силы на обучение.
Сделал 700 откликов на hh, прежде чем получил первое приглашение на работу.
Если не лень читать подробные посты на эти темы, то оставлю ссылки ниже:
Так уж получилось, что первая работа оказалось абсолютно не тем, чего я ожидал от работы в новой для себя IT-сфере: легаси-проект, максимально бесполезные (с точки зрения профессионального развития) задачи, а также зарплата, на которую невозможно было прокормить семью. Но мне повезло: спустя 3 недели после того, как я попал на свою первую работу, мне написала HR с другой компании и пригласила на собеседование. Проект на свежих технологиях, зарплата почти в 2 раза выше. И да, меня взяли.
Абсолютно без всяких сожалений я написал заявление "по собственному" и ушел одним днем. Помню, как рядом сидящий джун (студент) мне говорил: "Ну и зря ты увольняешься. Где ты ещё без опыта найдешь работу начинающим разработчиком, так ещё и на такую нормальную зарплату". Согласен, для студента, который живет с родителями, 45000р - это может и нормальная зарплата, но не для семейного человека, за плечами которого жена в декрете, маленький ребенок и съемная квартира.
Итак, я ушел в другую компанию. На новом месте меня всё более чем устраивало: приятный и дружелюбный коллектив, проект с нормально написанным (на первый взгляд) кодом, адекватные моему уровню задачи и зарплата, на которую уже можно хоть как-то жить.
Я попросил читателей моего небольшого блога накидать мне в комментариях вопросов, которые их интересуют, ведь мне есть чем поделиться. Перед началом обучения, да и в процессе обучения я сам искал подобные статьи, так как было безумно интересно узнать: а как оно всё на самом деле в этом вашем IT, так ли всё круто, как нам рисуют маркетологи различных IT-курсов, как проходит день разработчика и реально ли работать на берегу океана с макбуком на коленях? Кстати, идея работать на берегу океана - это отстой на мой взгляд, какая бы это работа ни была. А теперь отвечу на вопросы читателей, разбив их на 3 блока: обучение, работа, общие вопросы.
== Про работу ==
Среди коллег есть те, кто вошел в эту профессию в возрасте 35+ или даже 40+ ?
Есть.
Как ты себя ощущал в первые дни на работе?
В принципе на любой новой работе мне в первые несколько недель всегда не очень комфортно. Но если раньше это было в большей степени связано с новым коллективом, то здесь новым было практически всё. Когда мне дали первую задачу, я смотрел в экран монитора и вообще не понимал что от меня требуется, что происходит в этом коде и как сформулировать вопрос, чтобы меня не посчитали совсем уж тупым. Я работал в офисе и ежедневно по утрам проводились встречи (которые называют дэйликами), где каждый член команды рассказывал над чем работает в данный момент и какие есть проблемы. Для меня это было максимально стрессовое время, так как мне было непонятно абсолютно всё, но как задать конструктивный вопрос я не знал, поэтому был немногословен.
Расскажи про рабочий процесс: как получаешь задачи, от кого, как и перед кем отчитываешься, несколько примеров своих задач, состав команды?
В первые дни на первой работе мне дали ссылку на репозиторий, чтобы я ознакомился с проектом. Я смотрел на громадные классы со сложной бизнес-логикой, знакомился с БД, смотрел какие таблицы там есть, связи между ними. Первой задачей было найти и устранить баг: было задвоение информации в базе данных. Нужно было SQL-командой удалить задвоенную информацию. Кстати, на первой работе, где я отработал 3 недели - я не написал ни одной строчки кода, соответственно не сделал ни одного коммита. Всё задачи были связаны с БД.
На своей текущей работе задачи получаю из бэклога или тех.долга в Jira. После завершения задачи происходит код-ревью другим разработчиком (все ревьюят друг друга), после чего задача переходит в стадию тестирования. Каждый отчитывается о статусе своих задач на ежедневном созвоне. В команде 3 бэкенд-разработчика (один из них Senior, другой выполняет роль архитектора), 3 тестировщика, 1 проект-менеджер.
Примеры задач: отпилить от монолита часть логики и сделать отдельный микросервис, настроить логирование в нужном формате, настроить трейсинг, написать микросервис, который по расписанию будет забирать данные из БД, отправлять на сторонний API, получать данные и записывать в БД, привести в соответствие swagger и документацию в Confluence, покрыть код unit и интеграционными тестами. На прошлой работе писал ci/cd пайплайны для сборки образов и деплоя.
На второй работе в числе первых задач нужно было написать Kafka-продюсеры и консюмеры с несложной логикой обработки сообщений, а также изменить поля у DTO-моделей.
Была ли помощь более опытных коллег?
В первые дни на любой из работ я всегда спрашивал кого я могу спрашивать по проекту. Это нормально, особенно в первое время. Я всегда, когда это было необходимо, получал помощь или как минимум совет от более опытных товарищей. Старался спрашивать вопросы именно по самому проекту и его логике, а не по техническим моментам, которые можно легко загуглить, типа: "как переключиться на другую git-ветку".
Было ли разочарование из категории "ожидания - реальность". Когда работа на деле оказывается не настолько интересной, как кажется в начале пути?
Многое зависит от проекта и команды. Было разочарование, когда я попал на первую работу на легаси-проект с ужасным кодом. Но что касается второго и третьего места работы, то реальность совпала с ожиданиями. Работа над пет-проектами, как оказалось, была максимально похожа на реальную работу. Только всё на порядок сложнее, но это компенсируется зарплатой, а также возможностью обсудить проблему с коллегами. Ощущение, что я продолжаю обучаться, но теперь за это ещё и платят. В общем разочарования нет, работаю по большей части в удовольствие, но тот самый первый восторг от работы программистом уже ушел, привык что ли.
Расскажи какие трудности были на работе или они есть до сих пор?
Я бы не назвал это трудностью, скорее специфика отрасли - постоянно приходится изучать что-то новое, гуглить или спрашивать Chat GPT. На новом (уже третьем) месте работы практически каждая новая задача требует от меня того, чтобы я посмотрел часовой урок/доклад на YouTube или хотя бы прочитал статью на эту тему. В начале меня пугала эта неизвестность, сейчас это уже норма. Я больше начинаю переживать, если задачи закрываются, а я не узнаю при этом ничего нового себя, ведь это никак не способствует росту и, соответственно, повышению зарплаты. Собственно именно поэтому я ушел со второго места работы, так как было однообразное перекладывание json'ов и crud-операции.
Как происходило вливание в коллектив?
Я успел поработать как в офисе, так и удаленно. Мне было комфортно начинать работу в офисе, когда видишь коллег вживую и можешь пойти поболтать с ними на кухне за кружкой чая. А вот начинать работу в коллективе, когда слышишь только голоса (созвоны без камер) лично мне менее комфортно, но со временем привыкаешь и создается впечатления, что знаком с человеком лично. С одним из коллег договорились встретиться через пару недель, он приезжает отдыхать в город, где я живу.
Я не скрываю того факта, что стал разработчиком относительно недавно, все абсолютно нормально к этому относятся (даже на этапе собеседований). Никаких ущемлений не заметил. Более того на прошлой работе есть несколько людей, кто пришел в разработку в 35, 37 и даже в 40+ лет.
Что ожидает новичков, о чем мы не догадываемся и чему нам стоит больше уделять внимания? Насколько начал расти скилл и начал ли вообще расти?
Возможно, ожидают скучные, неинтересные и однотипные задачи. Повторюсь, зависит от проекта. Но когда ищешь первую работу, выбирать не приходится, обычно соглашаешься на первое предложение.
На счёт роста скиллов: пет-проекты – это, конечно, хорошо, но только на реальной работе можно столкнуться с проблемами высоконагруженных приложений и большого объема данных. Естественно, в процессе решения таких проблем растет скилл, а также скилл работы в команде, ведь приходится взаимодействовать с другими разработчиками, аналитиками, тестировщиками, инженерами devops.
Интересно было бы узнать какой уровень разработчиков, которые встретились вам на работе, насколько им вообще интересно расти, повышать ЗП, менять должности, насколько они активны?
Джуны, миддлы, сеньоры, архитекторы. Встретил только одного парня, который активно проходил собесы и в итоге ушел в другое место с повышением ЗП в 2 раза. Основная масса коллег - работает на одном месте годами с небольшой индексацией ЗП каждый год. Как сказал мне один из коллег: "Для меня прохождение собеседований - это выход из зоны комфорта. Тут я всё знаю, коллектив устраивает, а что будет в другом месте? Вдруг там всё плохо, что прибавка к ЗП не компенсирует этого?".
Отличался ли стек в вакансии, от стека на работе, по вашему опыту?
В моем случае всё, что было заявлено в описании вакансии оказывалось правдой. О легаси также открыто писали в вакансии и говорили на собеседовании.
Как растет понимание процессов, технологий после того, как устроились на работу, в сравнении с обучением или возможно наступает однообразие и роста нет?
Год назад ничего не знал о процессах, сейчас общее понимание присутствует в контексте всего цикла жизни проекта: анализ, планирование, разработка, тестирование, развертывание, поддержка. За 10 месяцев работы наступило некоторое однообразие в плане задач и остановка активного развития, что сподвигло меня на смену компании и даже языка программирования (Java -> Kotlin).
Какие ощущения после года работы? Считаете ли вы, что смогли достаточно узнать, чтобы закрепиться плотно в этой сфере и теперь уверенно развиваться вперёд, не боясь конкуренции по сравнению с теми, кто заканчивает институты по этой вакансии?
Определенно появилась некоторая уверенность в своих силах. Многого не знаю, но как показывает опыт - во всем можно разобраться, ведь в интернете в любом случае уже кто-то решал подобную или похожую проблему. Периодически пишут HR с предложениями пройти собеседование, иногда соглашаюсь и прохожу для опыта.
== Про обучение ==
Как считаете, ваш опыт работы инженером как-то повлиял на скорость обучения Java-разработке?
Безусловно повлиял. Инженерный склад ума, дружба с математикой, любовь к различного рода логическим задачкам, а также прошлая инженерная деятельность позволили в достаточно сжатые сроки освоить необходимый материал для трудоустройства. Но у меня есть знакомый (37 лет), который был максимально далек от математики, компьютеров и был скорее гуманитарием, а не технарем, но он также, как и я, прошел этот путь, просто это заняло в два раза больше времени.
Что бы ты посоветовал знать 100% перед первой работой?
Всё, что обычно указывают в вакансиях. Для Java-стека это: собственно сама Java (можно не углубляться в многопоточку, но всё остальное знать обязательно), SQL, Hibernate, Spring, Docker, Git, Maven (или Gradle). Чтобы выглядеть лучше большинства новичков стоит познакомиться хотя бы с одним из брокеров сообщений и микросервисной архитектурой.
== Общие вопросы ==
Насколько сложнее (проще) работать разработчиком по сравнению с твоей предыдущей работой?
До того как я перешел в разработчики, я работал инженером производственно-технического отдела. С технической точки зрения программирование, конечно, на порядок сложнее. Но с точки зрения условий работы, психологического комфорта и удовлетворенности - старая сфера деятельности сильно уступает.
Так ли там хорошо, как кажется со стороны?
Комфортные условия труда, зарплата, возможность удаленной работы, различные "плюшки" в виде ДМС, оплаты обучения и спорта - всё это имеется в большинстве крупных компаний. Не могу предугадать что представляют себе о подобной деятельности другие люди, но мои ожидания оправдались. Многое, конечно, зависит от компании, коллектива и проекта, поэтому вполне возможно, что кому-то повезет меньше или наоборот - больше.
Если бы финансовая подушка закончилась, а вы были бы не готовы начинать работать, что бы вы сделали?
До перехода в IT я был самозанятым инженером ПТО и имел подработку в виде репетиторства, то есть я имел возможность брать заказы и работать в удобном для себя графике. Если бы финансовая подушка закончилась, то, скорее всего, возобновил бы поиск заказов по старой деятельности и репетиторству, но не прерывал бы обучение.
Нравится ли вам IT профессия? Или уровень заработка все же на первом месте? Не думаете ли уйти в frontend или стать full-stack разработчиком?
Пока нравится. Если бы платили одинаково в строительной сфере и в IT, то с высоты своего опыта всё равно выбрал бы разработку. Frontend абсолютно никак не привлекает и ещё в процессе написания пет-проектов и работы над визуальной частью, я четко понял, что это не мое.
Насколько большая разница между Junior и Middle разработчиком?
Зависит от компании. Мое мнение: если прошел собес на Middle-разработчика, получаешь зарплату как Middle-разработчик, значит ты и есть Middle-разработчик)
Какие планы на будущее: очень рады, что так все получилось и уверены, что теперь нашли то, что искали или не так все однозначно, иногда подумываете между тем, стоило оно того или нет?
За свои 33 года я перепробовал достаточно много профессий и работ: официант, крупье в казино, инженер-проектировщик, инженер ПТО, риелтор, репетитор, пробовал открывать небольшой бизнес на набережной, открывал интернет-магазин настольных игр, пробовал вести бизнес с партнером и вот теперь я пишу код. Как я говорил ранее, на данный момент всё нравится, ожидания оправдались и искать что-то новое пока не тянет. Возможно, через 5-10 лет найду что-то более интересное для себя.
Удаётся ли соблюдать пресловутый work-life balance? Сколько часов в день вы выделяете на саморазвитие помимо работы?
До недавнего времени удавалось и всё было достаточно «лайтово». Как только устроился в новую компанию, где незнакомый для меня стек технологий, баланс немного нарушился, так как приходится даже после работы смотреть различные курсы и читать статьи. Может быть 2-3 раза в неделю уделяю по 1-2 часа на обучение.
Как справляешься с синдромом "самозванца"?
Глядя на чужой код или слушая коллег на созвонах, я очень часто ловлю себя на мысли, что я многого не знаю или не смог бы написать такой красивый с архитектурной точки зрения код. Иногда мне кажется, что я очень долго сижу над задачей и что другой разработчик справился бы гораздо быстрее меня. Как только синдром самозванца начинает мешать мне жить, я запрашиваю обратную связь о своей работе у тех людей, кто ставит и проверяет мои задачи. И во всех случаях (даже на той работе, где я отработал всего 3 недели) мне говорили: «Всё ок, быстро схватываешь». Также стараюсь перестать сравнивать себя с другими разработчиками, но пока не очень получается.
== Заключение ==
В заключении хочется сказать, что IT точно не для всех. И я сейчас не про умственные способности, а скорее про склад характера, усидчивость, любовь в решению логических задачек. Меня увлекло программирование на начальном этапе обучения и не было такого, что я что-то делал через силу. Наоборот, мне всегда хотелось побыстрее прийти домой, сесть за комп, ведь в голову пришла идея как можно реализовать вон ту штуку в пет-проекте или как решить алгоритмическую задачу. Поэтому сейчас я не испытываю проблем с тем, что мне «не хочется идти на работу».
Но большинство людей из моего окружения считает это невероятно скучным занятием и даже ради относительно высокой зарплаты никто не готов потратить около 1000 часов на обучение, после чего возникнет проблема с поиском первой работы. И их можно понять, зачем менять свою сферу деятельности, где ты уже профи на что-то непонятное и, возможно, неинтересное для тебя? Но если вам это нравится, то никогда не поздно. И моя история – далеко не единственное подтверждение этому.
P.S. Мелкие заметки делаю в телеге (https://t.me/lovecodebro), на Пикабу публикую редко и только лонгриды.
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
Бесплатный сайт для портфолио!
Народ, знакомый хочет набить портфолио для биржи. Может, конечно, сам наделать всякой фигни и запихнуть в портфолио) Но мало ли кому надо?
СДЕЛАЕТ БЕСПЛАТНО!* (с вас оплата домена, хостинга и прочего, что не относится к его работе - оплачиваете сами на сайте сервиса - ему только доступ.)
Рабочий стек:
PHP (laravel/yii2/самопис)
Java (spring)
*Бесплатно исключительно сайт-визитка, лендинг
@episkob (тг) - https://t.me/EPISKOB (публикую с его разрешения)
UPD: мопед не мой, я только разместил объяву)
UPD2: предвидя вопросы, это не бомбер, знакомый европеец хочет стать россиянином и сделать портфолио в RU сегменте, готов к вашим вопросам.