Comments 240
В том же Гугле тысячи работников, думаешь они все решают сложные задачи?
Гуглевские джуны != обычным джунам.
Есть же статьи на Хабре от тех, кто там работал. Даже младшие программисты Гугля — это далеко не каждая компания таких сеньоров может себе позволить/не каждая компания нуждается в таких слишком over-квалифицированных сеньорах.
Если всё это — да, то
Гуглевские джуны != обычным джунам
Не глупые, конечно, но и не мега-кодеры и уж тем более не сеньоры.
В иных фирмах сеньорами называют 23-летних, как раз с двумя годами опыта (что, в самом лучшем случае, имхо, крепкий джун или начинающий миддл) после ВУЗа, не мега-кодеров, в Гугль бы собеседование не прошли.
Но они вполне себе «сеньоры».
как минимум один джун мог бы на этом сидеть, пока старшие решают хорошие проблемы
Ну и можно давать джуну время от времени настоящие задачи — чтобы рос
По моему опыту, как раз в таких задачах, сеньоры и лиды показывают очень высокий перфоманс (когда не ленятся). Потому, что исправить сам цвет — 2 секунды. Найти это место в коде — до 30 секунд для сеньора и до часа для джуна.
Для джуна это какое-никакое изучение проекта/инструментов
Несомненно, для джуна в +. Проблема в том, что если в проекте подразумеваются джуны, то и уровень абстракций закладывается низкий (надо же, чтобы джуны потом сами разобрались без ежеминутных отвлеканий ментора), и сложность инфраструктуры необходимо изолировать. То есть, и синиоры в пол силы работают. А когда их нет априори, то все эти ограничени снимаются.
чем уйдет времени на около-задачную бюрократию
Так может проблема в ней?
Так как в реальности действительно сложные в реализации штуки встречаются все таки не так часто, то весь остальной код, если он нормально написан, понимается даже непрограммистами в виде специалистов из смежных областей. Джунов в эти сложные штуки пускать не будут, а с остальным, при условии нормальных синьоров, не должно быть для них проблемой.
И причем тут уровень абстракции?
Хм, знаете, я замечаю такую интересную вещь — чем сильнее программист, тем более понятный его код.
К сожалению, это правило работает не всегда. Например, далеко не всякий код на C# с активным использованием Reflection (и особенно Reflection.Emit) будет понятен с ходу, даже если его написал крутой специалист.
Если у вас 80% времени нужно писать круды — вряд ли ваша компания может назвать себя высокотехнологичной.
Если же нет, то таки да, взял бы и написал. И вместо четырех месяцов был бы один. Вы же не пишете crud один раз и навсегда, обычно сущности потом добавляются.
Ну и месяц это как то дофига, правда.
я не очень понимаю, что такое писать круд вообще, для меня это написать один родительский дженерик класс, который реализует 4 метода. Что имеет ввиду автор не до конца понятно, но он наверно имеет ввиду написание любого бойлерплейт кода))
для меня это написать один родительский дженерик класс, который реализует 4 метода.
а как именно он этим методы реализует? ручками или через библиотеки?
Хороший сеньор, написав 5 крудов, сделает генератор крудов, и после этого их будет писать БА. Либо этот же сеньор, но со скоростью 5 крудов в минуту. И чтобы достичь такой же производительности, надо ну очень много джунов + представьте себе каскадные изменения в таком копипастном коде.
Вообще, удел джуниоров — кодить сложно, сеньор должен кодить просто, чтоб любой джун понял. Поэтому, если джун не может разобраться в Вашем коде, подумайте, а сеньор ли Вы, а не гуано ли ваша архитектура, где какой-нить чертов getUserById, проходит через 100 классов, прежде, чем добраться до базы.
getUserById, проходит через 100 классов, прежде, чем добраться до базы.
О, выглядит как кишки андроида. Там считается нормой вложенность в 100 классов.
удел джуниоров — кодить сложно
Это да. По факту, именно джуны создают решения, где какой-нить чертов getUserById, проходит через 100 классов, прежде, чем добраться до базы.
Поэтому, если джун не может разобраться в Вашем коде, подумайте, а сеньор ли Вы
Про это — вывернутую логику — и автор этой статьи писал. Если джун не может разобраться в моем коде, то это далеко не означает, что моя архитектура плоха. Но это уже значит, что джун не понял. Что ж, ок, я подумал, и пришел к выводу, что я-таки сеньор, а джун по-прежнему не понимает мой код, мои действия?
ведь можно и проще сделать — разИ чем можно заменить Observer чтобы он сохранил свои свойства и это было проще?
джун по-прежнему не понимает мой код, мои действия?Позвать мидла. Если ему понятно — учим джуна, если не очень — код в корзину.
Статья статьей, но ведь и тот кто писал статью, да все были в свое время джунами в своей области и ведь их наняли где-то и кто-то, почему теперь такое отношение?
Когда то их наняли не из благотворительности, чтобы они могли научиться и стать потом специалистами.
А чтобы компания могла денег заработать.
Если же совсем другая компания работает по другой экономической модели и в ее модели не нужно экономить на программистах, нанимая джунов — то почему нет…
Ну как… Я, например, первой работой программистом пошел на мидла. Почему люди в институте балду гоняют, что бы потом пойти
Если, например, частная клиника будет нанимать только лучших врачей, вам жe нe покажется это странным? Скорее всего именно в эту клинику вы захотите обратиться если надо будет, а не в ту где врачи интерны учатся на вас и пробуют новые подходы к лечению.
если их в интернатуру брать не будут
Я говорил про одну конкретную частную клинику. Пускай учатся там где берут интернов.
Моя мысль не в том что джунов не надо нанимать, а о том что не стоит судить компании со своей колокольни.
Сейчас я работаю в компании которая нанимает джунов и интернов — и все ОК, до этого работал в компании в которой были только синиоры и выше — и тоже все было ОК. Никаких негативных вещей из статьи вроде токсичной кутьтуры, невозможности ошибаться и т.п. Просто не было задач для младших разработчиков и не было времени их выращивать.
А откуда эти лучшие врачи возьмутся, если их в интернатуру брать не будут?
А че, где-то кто-то написал, что теперь «принципиально во всех до единой больницах не будут брать интернов без опыта»
Одна-единственная фирма, которая может себе позволить не иметь дела с неспециалистами — не берет не специалистов. Специалистов для нее готовят другие компании.
Больниц и фирм ИТ-шных много.
Где подготовиться джунам/интернам — проблемы нет никакой.
Да, я понимаю, всем нам бы хотелось начинать карьеру с Google/Netflix/Microsoft. Но это не обязательно. Гораздо проще — и реалистичнее — поступить сначала на работу в фирму попроще, набраться опыта. После чего вас возьмут в «бодишоп» уже с желанием, после него — уже можно попытать счастия в высокотехнологичной компании, ну а уж потом — Netflix, Google…
Начните уже с районной поликлиники (ну или что там у врачей считается аналогом мелкой фирмочки по клепанию веб-сайтиков)
Одна-единственная фирма, которая может себе позволить не иметь дела с неспециалистами — не берет не специалистов. Специалистов для нее готовят другие компании.
Больниц и фирм ИТ-шных много.
Где подготовиться джунам/интернам — проблемы нет никакой.
Проблема в том, что в пределе всем выгодно не готовить специалистов, а получать их падающими с неба.
Проблема в том, что в пределе всем выгодно не готовить специалистов, а получать их падающими с неба.
Никакие это не проблемы.
Реальная жизнь расставляет все по своим местам. И мечты работодателей испаряются тоже. Но Netflix может себе позволить.
Автор, если твой подход к написанию — это паразитированние на чужих работах, а все твое мысленное усилие было приложено лишь к плевкам вида «комментарий: », то пожалуйста, не пиши ничего больше.
Каждый автор старается где-нибудь кого-нибудь зацепить, что бы было большое обсуждение.
Напоминает редакцию AdMe в лучшие его годы — так и вижу кучу авторов бегающих за рейтинговыми постами и только и думающие «чего бы теперь написать»
Вместо авторов, которые хотят донести своё другим — авторы, которые сидят на зарплате и просто пытаются заработать себе на жизнь.
Что же получается, если автор хочет высказаться на больную для сообщества тему (а т.к. он является участником сообщества, то скорее всего для него это тоже больная тема), то он «сидит на зарплате» и «гонится за рейтинговыми постами»? То есть никакой рефлексивности у сообщества нет, все гоняются за рейтингами, так что ли?
У качества статей есть отпечаток на карме. Посмотрите на эти два профиля:
Ализару поставили больше трех тысяч оценок, но почти половину из них — в минус. Он выезжает на желтизне.
А у Нулевого Пациента всего семьсот оценок, зато все в плюс. Он переводит технические статьи.
Это мой юзерскрипт — https://greasyfork.org/ru/scripts/368828-habr-features
Вычитал где-то в комментариях, могу ошибаться:
- Если повысил карму или сделал приглашение юзеру, которого потом его забанили, то снимают 0.1 или 0.5 кармы.
- Если два юзера повышают друг другу карму, то с них снимают по 0.1 кармы.
- Раньше была некая "сила голоса", когда в зависимости от достижений твои голоса считались больше единицы.
- Был баг в api хабра, когда можно было было поставить любое дробное число как свой голос, а не только +1 или -1.
Когда ты хочешь содрать бабло, обманув инвестора демонстрацией умных, у которых на любой вопрос ответ отлетает от зубов — нужны сеньоры.
Но, если ты заботишься о будущем компании — джунов набирать необходимо, и сразу группами! Пусть сеньоры продолжают «писать фортрановские программы на любом языке », это обеспечит текущую работу. А новые технологии джуны освоят гораздо быстрее и лучше, потому что примут их как данное, без ломки себя.
И я думаю, Вам очень сильно повезло, если Вам встречались по преимуществу конторы, создающие новые компиляторы, а не использующие их.
Хм, посмотрел Ваш же коммент чуть ниже — Вы там подтверждаете мои слова, по сути.
Мне вот, кстати, повезло. Моя контора и конкретно мой отдел как раз создаёт новые технологии. И у их потребителей (приобретателей наших продуктов) очень характерная картина: там, где сеньора ставят на освоение, мы обречены месяцами выслушивать, как всё неправильно сделано и почему всё не заработает никогда. А там, где джуны — через короткое время уже идёт использование и профит. После чего джуна срочно повышают, и не дай бог, если его место займёт вытесненный вчерашним джуном сеньор :-)
И это херовая схема. Это не джун быстро станет сеньером. Это он станет тимлидом в лучшем случае. Задача лида — натягивать тех специалистов на бизнес задачи. Задача сеньера — сделать хорошо и с умом и на перспективу. В споре этих двух противоположностей рождаются годные продукты.
А джуны, нашлепавшие говнокод в продакшен лишь бы поскорее заработало, это просто сюр. Это вы глупость путаете с тонким расчетом.
А джуны принимают новую технологию, как просто часть окружающего мира, они ничего другого не пробовали, и не знают, как трудно эту новую технологию постичь. Потому и справляются, практически все, что умные, что тупые.
Научить их делать приличный код — совершенно параллельная, не пересекающаяся, задача. И говнокод, и изюминка — могут быть и в старой, и в новой технологиях. Но фокус в том, что старая технология, даже изумительно реализованная — не нужна. И потому-то не нужными становится большинство сеньоров. Другое дело, что сеньоры умеют очень хорошо защищать свои позиции, затаптывая джунов.
Обычные проблемы, приведшие, кстати, в природе к появлению механизма старения, насильственно устраняющего сеньоров из эволюционного процесса.
старая технология, даже изумительно реализованная — не нужна.Почему? Мешает вам пилить бюджет?
На самом деле, не нужна большая часть новых технологий — они придуманы лишь для распила денег. Значительных преимуществ они не дают, зато недостатков — куча.
Ну как хрестоматийный пример — BGA. Достоинства — компактность, большое число выводов. Недостатки -совсем иное оборудование для изготовления и ремонта плат, обязательная многослойность платы, то есть невозможность ручного исправления ошибок разводки… Дикая компактность нам не нужна — на тракторах и ледоколах места хватает, даже для беспилотников без BGA уложились в полпачки сигарет. Большое число выводов — ну так себе преимущество, нам пока и без BGA хватает. Зато без BGA быстрый цикл выпуска и модернизации платы. И даже первые экземпляры, с наляпанными проводочками и разрезанными дорожками — вполне пашут.
Серьёзно: области, где нет нужды скакать по технологиям — есть, и они вполне многочисленны. Ну так да, там сплошь сеньоры и сидят.
Я — о другом, когда новая технология требуется. В этом случае коллектив, группа джунов, брошенная на её освоение и применение, срабатывает в конце-концов гораздо эффективнее, чем сеньоры. Ну да, к концу процесса они джунами быть перестают :-), но начинать нужно именно с таких.
Я — о другом, когда новая технология требуется.Это огромная редкость. Обычно новые технологии — это попытка возложить свои затраты на тестирование и апробацию на другие фирмы. То есть придумывается технология, разводится хайп и куча глупых джуниоров начинают на своем опыте ощупывать границы её применимости.
группа джунов, брошенная на её освоение и применение, срабатывает в конце-концов гораздо эффективнее, чем сеньоры.А выгоду получит тот сеньор, который новую технологию придумал. Потому что шишки будут набивать джуны из чужой компании.
1. Писатели комментов сплошь считают себя сеньорами и хором защищают позицию. Ожидаемо :-)
2. Деление джун/сеньор [в том числе по причине пункта 1] проводят по «тупой автор говнокода» и «высоколобый крылатый ангел». Что показывает очевидно узкий взгляд (не сеньоровский) и приверженность простеньким приложениям массового веба.
Как «лид» по принятой тут терминологии, и достаточно успешный (в нашей области наши продукты безусловно лидируют в России, применяются в нескольких странах, включая США, причём в США шире всего после России), скажу: говнокод вообще не проблема программиста — это проблема команды. Говнокода не бывает вообще — при правильно организованной работе с ревизией кода и выстроенным взаимодействием. Разница между разработчиками пролегает во времени поиска решений в тех местах, где нужно решения принимать. Сеньор находит их легко, джун — бьётся долго и решения хуже. Но и это соотношение действует в рамках уже принятого направления. Когда же начинается совершенно новое направление — я формирую под него именно группу джунов. Группа довольно быстро сортируется, в ней выделяются сеньоры… и пошла работа по направлению. Для последующего развития уже ставшей на ноги работы действительно нужны сеньоры — но они и появились преимущественно из той самой группы.
Соглашусь, что такой подход работает, когда компания развивается. Если она [вполне успешно] жуёт какое-то одно направление работ, то уже существующих сеньоров нужно куда-то девать, это, кстати, проблема.
Ну и напоследок — терминология просто недостаточна. Настоящий сеньор сам вырабатывает новое направление и предлагает его либо своей, либо другой компании. Вот таких — безусловно нужно брать в первую очередь, если, конечно, компания способна потянуть предложенное. Но таких людей всё же единицы, в довольно-таки массовое понятие «сеньоров» они не вмещаются.
Если речь о новых бизнес-направлениях, типа «а давайте из нашего сайта выделим движок и будем его продавать», то это уже точно не сеньор, а менеджер или даже предприниматель, случайно умеющий код писать. Сеньор решает бизнес-задачи техническими (обычно) методами, а вот постановки и продвижение новых бизнес-задач — это уже совсем другой вид деятельности.
Действительно, считаю, тут спорить не буду, но и позицию автора статьи защищать не буду, она порочна.
> Деление джун/сеньор [в том числе по причине пункта 1] проводят по «тупой автор говнокода» и «высоколобый крылатый ангел»
А вот этого я не говорил, не надо. Хватает и сеньорского говнокода (сам пишу иногда, каюсь), и высоколобых джунов. Разница в первую очередь в осознанности того, что ты делаешь, и, в меньшей степени, в глобальности задач, которые ты можешь успешно решить.
Если ты пятнадцать лет в отрасли, знаешь много умных слов и твой код работает, но дизайнишь ты его определённым образом не потому, что таковы условия, а потому, что умеешь только так — ты не сеньор; и, напротив, если ты можешь решить задачу с обоснованием, почему ты это делаешь так, а не иначе, и видишь альтернативные пути с их достоинствами и недостатками — ты не джун, даже если писать ты умеешь только псевдокодом и вчера пятый класс закончил.
И вот эти ваши джуны которые поднимают новое направление — совсем не джуны, если способны проявлять инициативу в решениях и вот это вот всё, равно как закостеневшие в древних технологиях сеньоры перестали ими быть в момент, когда перестали учиться.
Но общепринятая терминология всех этих нюансов не учитывает, тут абсолютно согласен.
мы обречены месяцами выслушивать, как всё неправильно сделано и почему всё не заработает никогдаУгу, именно поэтому мы любим сеньоров. Помните туполевское "сломается здесь"? Так где джуниор через пару лет будет удивляться возникшим проблемам и ещё пару лет их расхлебывать — сеньор видит их с самого начала.
Моя контора и конкретно мой отдел как раз создаёт новые технологии.Так и мы тоже не старьем занимаемся (высокоточная спутниковая навигация). И джуны из числа заказчиков — достали. Куча лишней писанины, требования, выставленные лишь потому, что «так в институте учили» и не имеющие отношения к реальности… Дурацкие просчеты в написанном джунами ТЗ…
К сожалению, джуны не отличают важное от неважного, а нужное от ненужного.
Вы так говорите, как будто компилятор — это что-то сложное. У меня у самого три написано (довольно простых, кстати). Компилятор — это лишь способ ускорить выполнение кода. Просто у джунов мысли не возникает, что можно самому написать компилятор.При решении сколько-нибудь серьёзных задач инициатива по созданию компиляторов внутри неё почти всегда означает отвратительную потерю времени и отвратительно же сложную поддержку продукта. Области, где подобное приветствуется — есть, но это весьма узкие области, и приводить их в пример неправильно.
Угу, именно поэтому мы любим сеньоров. Помните туполевское «сломается здесь»? Так где джуниор через пару лет будет удивляться возникшим проблемам и ещё пару лет их расхлебывать — сеньор видит их с самого начала.Там где сеньор пилит знакомую технологию — верно. Там, где нужно строить или осваивать новое — наоборот.
Так и мы тоже не старьем занимаемся (высокоточная спутниковая навигация). И джуны из числа заказчиков — достали. Куча лишней писанины, требования, выставленные лишь потому, что «так в институте учили» и не имеющие отношения к реальности… Дурацкие просчеты в написанном джунами ТЗ…Удивительное пишете! Если эта область, где у заказчиков нет опыта вообще, то создаётся классическая IT-ситуация, когда заказчик вообще не способен составить ТЗ и вообще представить, что ему, на самом деле, нужно. Только в самых-самых общих словах. Всегда и везде в таких ситуациях исполнитель пишет ТЗ сам для себя и отдаёт заказчику, чтобы тот поставил большую круглую печать и вернул.
Если же область сколько-нибудь заказчиком освоена — то никаких джуниоров в составлении ТЗ и не будет. Сеньоры не настолько дураки, чтобы самое вкусное отдавать желторотым.
В описанном же Вами я могу только согласиться — кошмар. Заказчик настолько оторван от реальности, что сеньоров у него нет вообще, и даже более того — он не способен воспринять и предложения разработчиков, так что фонтанирует дистиллированной глупостью. Но… денег у него немерено, приходится за это страдать. Ну, могу только посочувствовать, в таких условиях тяжело работать.
Надеюсь, становится видно и Вам, что у нас не противоречия, а плавный переход на поболтать. Потому, если просто приятно пообщаться, вспомнить былое и помечтать о новом — я готов. А продолжать обсуждение или тем более спор — смысла уже нет, согласны? Если да, просто давайте остановимся.
При решении сколько-нибудь серьёзных задач инициатива по созданию компиляторов внутри неё почти всегда означает отвратительную потерю времени и отвратительно же сложную поддержку продукта.Чушь какая-то. Компиляторы пишутся там, где они упрощают разработку. Ну как пример — электронные таблицы. На написание простейшего компилятора и простейшего интерпретатора байт-кода — два дня. А без компиляции сколько вы провозитесь, пока у вас начнет "(1+2)*3" считать?
Там где сеньор пилит знакомую технологию — верно. Там, где нужно строить или осваивать новое — наоборот.Вспоминаем количество новых технологий, запиленных теми же Туполевым и Королевым.
никаких джуниоров в составлении ТЗ и не будет. Сеньоры не настолько дураки, чтобы самое вкусное отдавать желторотым.Вы просто не сталкивались с конторами, созданными ради распила. Там одни джуны.
Всегда и везде в таких ситуациях исполнитель пишет ТЗ сам для себя и отдаёт заказчику, чтобы тот поставил большую круглую печать и вернул.Вам очень сильно повезло, что вы с такими конторами не сталкивались. «Мы тут выиграли тендер, а теперь объясните нам, что мы нужно сделать. Ну и сделайте работу за нас, но за полцены». Это, практически, дословно.
А писать наукоообразные документы — это единственное, что эти джуны умеют. Так что ТЗ они пишут сами, вплетаю много-много красивых слов.
Ну, могу только посочувствовать, в таких условиях тяжело работать.С момента падения цены на нефть это обычная ситуация по госзаказу. Выигрывают конторы-однодневки, сидящик под кем-нибудь из олигархов.
в таких ситуациях исполнитель пишет ТЗ сам для себя и отдаёт заказчику, чтобы тот поставил большую круглую печать и вернул.Это если у заказчиков есть сеньор. А девиз джунов — «слабоумие и отвага». :-)
P.S. Я согласен, что компиляторные технологии очень просты и удобны. Просто джунам они кажутся чем-то космическим.
Трансля́ция програ́ммы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке.
Любой перевод в байт-код — трансляция.
Получается, все языки, кроме, возможно, брейнфака — компилируемые?Не-а. Если у нас выполнения оператора может породить или не породить ключевое слово или идентификатор и мы не можем это узнать заранее — это будет чисто интерпретируемый язык.
То есть по сути так. В компилируемых языках мы можем откомпилировать модуль, а в интерпретируемых — только оператор.
Как минимум, не компилируемый FORTH — из-за динамического порождения ключевых слов.
Я склоняюсь к определениям, в которых компиляция — это произвольный перевод[1] из external language в некий internal language, самодостаточный и со строго определённой семантикой.
И тут вступает в силу странный критерий. А можно ли сохранить внутренний язык? А можно ли загрузить код на внутреннем языке и использовать его? Если можно — это компиляция, какая бы примитивная она не была.
Или, например, те же арифметические выражения после парсинга в AST я могу интерпретировать (бегая по дереву), либо скомпилировать в байткод для самописной стековой машины,Это менее значимый критерий. Если вы можете загрузить AST из файла — значит это компиляция.
Это формальный признак. Если есть файл с откомпилированным представлением — значит, есть компиляция. Если откомпилированное представление не сохраняется, значит оно лишь этап интерпретации.
Я тут не вижу противоречий. Если у нас для каждого запуска нужен исходный текст — это интерпретатор, что бы ни было наворочено внутри. Если для запуска можно использовать откомпилированное представление — значит есть компиляция. Пусть очень простая, но есть.
P.S. А что любой формальный критерий может быть извращен до полного бреда — IMHO нормально. Чтобы было не извратить — нужно несколько формальных критериев. И то, специалисты по извращению найдут лазейку.
Если в процессе выполнения программы изменить исходный код и программа станет работать с учётом изменений, то это интерпретатор. То есть, любые промежуточные представления для интерпретатора запрещены.
Есть ещё один критерий. В интерпретаторе легко делается выполнение произвольного выражения, введенного оператором с клавиатуры.
Кстати, по всем трем критериям, SQL получается интерпретатором. Хотя у него довольно большая стадия компиляции и оптимизации скомпилированного кода.
Исходный код кто меняет? Человек или программа?Человек не сам действует, а всегда посредством программы. Я имел в виду, что исходный код лежит где-то в памяти интерпретатора или в файле на диске (менять его может другой процесс или тот же самый), в сам язык не обязательно встраивать возможность само-модификации.
Есть ещё один критерий. В интерпретаторе легко делается выполнение произвольного выраженияЭто скорее следствие, но обратное не всегда верно (интерпретатор может быть зашит в железку без портов, через которые можно ввести выражение).
Кстати, по всем трем критериям, SQL получается интерпретатором.Да пожалуйста. Хотя насколько я знаю по популярным СУБД, хранимые процедуры лежат в виде байт-кода. Получается, что у СУБД есть компилятор в байт-код и интерпретатор байт-кода. То есть, одиночный запрос выполняется в режиме интерпретации (по этому критерию), а блок запросов — компилируется.
То есть, одиночный запрос выполняется в режиме интерпретации (по этому критерию), а блок запросов — компилируется.На MS SQL и одиночный запрос компилируется, а потом оптимизируется. Им для оптимизации (составления плана выполнения) нужна промежуточная форма. Похоже там и кэширование промежуточной формы есть. То есть подав 100 однотипных запросов, время на компиляцию будет получено только на первом.
Увы, плотно работал с SQL лет 20 назад, так что уже не помню точно. Но вроде бы у первого запроса время компиляции было ненулевое, а у последующих — 0.
На MS SQL и одиночный запрос компилируется, а потом оптимизируетсяВнутри может быть что угодно, я говорю о том, что по предложенному критерию одиночные SQL выполняет интерпретатор, и это с наблюдаемым поведением не расходится (возможна интерактивная работа)
За давностью лет уже и синтаксис помню нечетко, но мне кажется, что в транзацкии запросы типа
BEGIN TRANSACTION
DELETE FROM TABLE WHERE N=11
DELETE FROM TABLE WHERE N=12
END TRANSACTION
Отрабатывали как
BEGIN TRANSACTION
DELETE FROM TABLE WHERE N IN (11,12)
END TRANSACTION
То есть вроде как в MS SQL была межоператорная оптимизация. Не поручусь (20 лет прошло), но по рассмотрению плана запросов мне казалось, что так.
Если изменить исходный код до точки чтения — точка чтения улетит. Да и буферизация чтения помешает увидеть изменения.Да, такое я наблюдаю на Windows 10 с cmd-файлами. Можно из критерия убрать про диск, оставить только оперативную память, куда загружена интерпретируемая программа.
В интерпретаторе легко делается выполнение произвольного выражения, введенного оператором с клавиатуры.Антипример — классические BASIC-и времён 8-битных процессоров. Имея произвольное выражение (в виде строки, например), вычислить его сложно, т.к. интерпретатор не предоставляет таких ф-ций.
Имелся ли ввод строк в BASIC на 8080 — не знаю, скорее всего нет. А без ввода строк и строчных операций eval не нужен.
была возможность отказаться от исходного текста и использовать только «скомпилированную» версию программы.
Про спектрум и коммондор — копайте сами.
интерпретирует операторы. Ну то есть примерно как в FORTH.
Можно по скорости цикла посмотреть, была ли там компиляция. Скорость при чистой компиляции (без оптимизации, то есть фортран) — в 1.5-2 раза меньше скорости ассемблера. Скорость форт-систем — в 10-20 раз ниже скорости ассемблера. А скорость чистой интерпретации — намного хуже.
Чистая интерпретация была в FOCAL, по ощущениям — ну раз в 10-20 медленней FORTH. По ощущениям, фокал при каждом обращении искал значаение переменной по её имени.
Это будет парсер выражений в данном случае.
А вообще это лет 50 уже известно, что в интерпретируемых языках для скорости и отлаживаемости лучше вначале компилировать в AST или байт-код, а потом его исполнять.
Но есть и чисто интерпретируемые реализации, классические калькуляторы — это типовой пример.
А вот трудовой договор — это не алгоритм. В нем нет последовательности действий. Так что приходим к странному результату — текст программы на декларативном языке алгоритмом не является.
Джун после 25 лет — это нонсенс. Ну разве что человек пришел в программирование из физиков или строителей.
Если написанием компилятора мы упрощаем код и сокращаем время на разработку — значит компилятор менее сложен, чем остальной код. Ели компилятор сложнее, чем его замена — зачем его писать?
Пример уже вроде был — crud
Молодые сеньоры, вчерашние джуны
А мидлов не существуют?
Однако тут есть маленькая проблемка: как их найти?Это как просто. Любой программист младше 12 лет :-) — это будущий крутой сеньор.
Вопрос не в том, как их найти — места обитания таких людей известны. Вопрос в том, как их удержать. Слишком уж меняются интересы по мере взросления.
P.S. У меня был 17летний сотрудник, которого, по-хорошему нужно было ставить руководителем группы вместо меня. В 17 он был на третьем курсе и четвертый год программировал за деньги. Собственно многие его знают как человека, придумавшего идею языка Котлин и написавшего первую книжку по нему. Вот только даже в 14 — он уже был мидлом.
Почему же. Если оглядеться на реальный мир — можно увидеть, что джунов нанимают аутсорс-конторы, чтобы продавать их как миддлов, а заодно тренируют их проходить собеседования на миддлов. Заодно они же занимаются раздуванием кода программных продуктов, чтобы нанимать и продавать больше разработчиков, и их как раз устраивает низкое качество кода — можно заодно QA продавать.
А в момент, когда человек понимает, что не способен в своей доменной области в компании отрабатывать с желаемым уровнем качества — он начинает искать компании из второй категории.
И да, скорее всего любая компания, которая говорит, что не нанимает джунов, наймет человека, который будет сидеть по 24 часа в сутки, переделывая собственные ошибки и подходя с вопросами ко всем. Просто джуны обычно сейчас ждут, что их будут носить на руках, потому что они прошли двухмесячные курсы. Увы, говорю как человек, который занимается интервью последние пару лет довольно часто — как себе, так и другим проектам.
При нормально поставленном процессе — следить за джунами занимает меньше времени, чем реализовывать простые задачи силами сильных разработчиков.
При этом самим сильным разработчикам интересней работать, некоторым еще и само менторство тоже помогает отвлечься — а это тоже корпоративные деньги на тимбилдинги и тд и тп.
При том всем джуны имеют свойство расти и не сразу об этом понимать. Так что опять таки, при нормально поставленном процессе у конторы есть энное количество мидлов которые получают как джуны.
Вы можете сказать что это денежный вопрос и могут существовать компании где денег хватает и на сениора который половину рабочего времени формошлепит, и денег на то чтобы создать для него комфортную среду несмотря на формошлепство.
Вот только это сразу же ошибка с точки зрения бизнеса, ведь эти деньги можно пустить на дело и приумножить.
Речь идет про отвлечение старших разработчиков: вместо создания продукта они будут обучать (ревьюить, объяснять, направлять, подфикшивать и проч) младших разработчиков. Т.е. тупо экономия времени старших разработчиков.
Правильно ли я понял, что имеется в виду, что старшие разработчики будут экономить время за счет делегирования задач джунам?
Мне вот больше интересно, автор, а где Вы выловили такую мысль в приведенной статье? Автор статьи, которого Вы местами нещадно критикуете, всего лишь делает вывод на основании представленных пунктов. В принципе, тоже самое делаете и Вы, вот только у него вывод намного ближе к истине, чем Ваш…
И таких недочетов, на самом деле, у Вас еще очень много.
По делу:
— Есть, как уже тут отмечали, более сложные задачи, есть более тривиальные (ну там CRUD'ы и иже с ними). Использовать на тривиальных задачах сеньоров (в случае, когда, нет автоматизации производства такого рода кода) — почти что как забивать микроскопом гвозди.
— Джун, действительно, может взглянуть более свежим и упрощённым взглядом на вопрос, и иногда это бывает полезно.
— Джун — это инвестиция компании в будущее. И если в компании хорошие условия, то джун станет расти и приносить ей пользу (за исключением экстремальных личных обстоятельств, когда джун вынужден куда-то переехать или по иным особым причинам покинуть работу).
По сравнению с ним в РФ на рынке труда программистов «как грязи» и расслоение по зарплатам не так значительно.
Шта? «Хорошо только там, где нас нет». Полюбопытствуете медианам зарплат в США — многое для себя откроете.
habr.com/post/423695
110 000 в год сеньор с 15 летним опытом.
www.indeed.com/salaries/Junior-Developer-Salaries
62 000 джун
Разница в 2 раза.
Это в США разбег незначительный. Если не считать несколько самых крутых фирм, куда мало кому светит попасть.
В РФ типовой джун и 30 000 рублей в месяц может не получать.
Типовой сеньор — это далеко за 100 000 рублей в месяц, скорее ближе к за 150 000.
Разница в 5 раз.
И это если не считать, что можно из РФ работать «на западного дядю», где и 200-300 тыс. рублей в месяц не предел мечтаний, а можно и больше.
У нас более «дикий рынок». По зарплатам в том числе.
В РФ позиция сеньора закрывается за недели, в США многими месяцами с кучей собеседований.
То, что ради ЧСВ вакансию называют «сеньорской» вовсе не означает, что она таковой считается.
Неделю?
Мы по 2 месяца ищем. И дело даже не в зарплатах (они более чем достойные, существенно выше чем по региону).
Просто приходят в основном «23-х летние сеньоры». А то и вовсе «Я умею ставить Windows и являюсь администратором Linux, потому что сам поставил Ubuntu; что? командная строка? нет, не работал. зачем, GUI же есть».
Сеньор это от 7 лет опыта.
Где в РФ выгодно нанимать сеньоров у «них» имеет смысл обучить джуна.
Ничуть.
Зависит не от страны, а от особенностей конкретной компании.
В IT разве есть строго формализованное понятие «выслуги лет» аки в армии? Мне думается, что развитие и приобретение большего опыта не всегда коррелирует с временем. Как тут и в других местах уже писали, можно и семь лет сидеть на тривиальных задачах, не став, разумеется, сеньором. А можно и за год-два плотной работы как в команде, так и над своими навыками, получить колоссальное развитие. Ибо всё это условно, и нельзя ставить рамки. Но даже если как-то попытаться усреднить, то семь лет — многовато для сеньора. Я вижу (сугубо личное мнение) эту планку где-то в 4-5 лет. Быстрее, если разработчик крайне талантлив и трудолюбив, плюс для него есть толковые задачи.
«Сеньор это от 7 лет опыта», — разрешите узнать, почему?
В IT разве есть строго формализованное понятие «выслуги лет» аки в армии? Мне думается, что развитие и приобретение большего опыта не всегда коррелирует с временем.
Разумеется, не коррелирует на 100% людей. Это всего лишь грубая прикидка для среднего разработчика.
Если брать основную массу:
2 года от трейни до джуна (у кого-то может и год занять, у кого-то и 3).
потом еще лет 5 через-миддла-к сеньору, и то не все придут.
7 лет — это еще по оптимистичному, для целеустремленного человека, который и сам учился по профессии и которому повезло работать с грамотными коллегами, что его поднатаскали.
Разумеется, в конкретной ситуации могут быть и другие цифры
Но «23-летний сеньор»? Извините, не верю. Оно конечно бывает, но исчезающе редко очень…
Я начал программировать в 14. В университете сам уже учил преподавателей новым методам разработки. К 23 годам точно был максимум что миддлом, если еще не джуном.
Опыт получаемый не в реальных проектах — он так себе опыт.
«От 7 лет опыта» — значит, «не менее».
Дольше — да, можно.
Немного быстрее, скажем за 5 лет — дано не многим.
Существенно быстрее — не дано никому.
«23-летние сеньоры» в реальной жизни если и существуют, то никому из нас они не встретятся.
«2 года от трейни до джуна (у кого-то может и год занять, у кого-то и 3)», — все кого я знаю, этот путь закрывали ещё в вузе.
До мидла от джуна почти все вырастали быстро (год-полтора), но ценой труда и усидчивости.
Ну, 23-летний сеньор — согласен полностью, едва ли реально.
Но 25-летний лично мне известен, мой хороший друг. Он начал программировать в реальных проектах со второго курса, ну а так для себя что-то — ещё в школе, разумеется. Упахивался на работах, по 2-2,5 года отпуск не видел, но зато к 25 годам он уверенный сеньор был. Ценой огромного труда, ну и сам он талантлив и не глуп в довесок к тому.
До этого работал в Томске — город студентов, программистов много, с поиском сеньоров проблем не было, на каждое место был конкурс, за 2 недели закрывали.
Вы работали в большой фирме Томске, которая регулярно нанимала сеньоров? Иначе откуда у вас статистика.
Меня больше интересует — откуда в Томске столько большая фирма, регулярно нанимающая сеньоров.
Последние 3 года за трендами зарплат в РФ не слежу, но в нашем регионе больше 100 очень мало кто получал
У нас с вами просто разное понятие слова «сеньор».
Полагаю, вы этим словом называете того, кто по моему «миддл».
HH.RU говорит про Томск следующее:
Имеется 283 вакансии «программист».
Из них 63 с зарплатой более 120 000 в месяц
Ну и 34 — более 150 000
И даже 10 — более 185 000
22% от вакансий — это от 120 000 рублей в месяц
На самом деле гораздо больше, так как нижний сегмент по зарплате это эникеи, а не разработчики, просто их традиционно называют программистами.

Никто не говорит, что джуниоры — враги. Их просто не нанимают. А еще не нанимают, например, слесарей и художников.
Ну, передергивание же. «Джун» — это уровень квалификации, «слесарь» — представитель другой профессии вообще.
Я боюсь представить сколько времени висят вакансии на С++ сеньора.
Искать сеньоров оправдано в таких областях как разработка нейросетей, игр, игровых движков, научный софт.
Искать сеньоров не оправдано в таких областях как веб-разработка, бекенд, энтерпрайз разработка, в этих областях джун за 2-4 недели набирает нужный уровень.
Только где компания возьмет столько сеньоров и мидлов? Я видел как некоторые тривиальные вакансии(JS/React) по 6-12 месяцев висят и пересоздаются раз в неделю чтобы быть в топе. Это наверное те компании которые называют себя «высокотехнологичными с уникальным программным продуктом».
Я боюсь представить сколько времени висят вакансии на С++ сеньора.
Если в компании много, ну скажем, 100 разработчиков (а это еще не особо и большая фирма всего-то «малый бизнес»), то нескольких из них постоянно приходится донанимать.
Чисто статистически: кто-то заболевает или впадает в депрессию, кто-то умирает, кто-то вырастает из джуна, кто-то уходит в другую фирму, кто-то разочаровывается в профессии и становится таксистом, кто-то уезжает в другой город по семейным обстоятельствам, и это не считая того, что сама фирма может рости.
Чем больше сотрудников, тем больше в абсолютных цифрах (не в процентах, конечно) доля подобный флуктуаций численности.
Это не одна и та же вакансия, хотя и называется одинаково.
Ну вот скажите, зачем фирме проплачивать отдельно публикацию вакансии на каждого нанимаемого сотрудника, если должность одна и та же. Что там каждый раз изменяется? Новые контактные данные HR, что ли? Кадровичка на нового сотрудника новый сотовый себе покупает что ли?
Искать сеньоров не оправдано в таких областях как веб-разработка, бекенд, энтерпрайз разработка, в этих областях джун за 2-4 недели набирает нужный уровень.
Ну это если он до этого уже был сеньором в другой сфере разработки. И то, 2 недели тебе нужно просто чтобы войти в рабочий ритм фирмы, только чтобы понять «где какие файлы принято складывать» и т.п.
джун за 2-4 недели набирает нужный уровень.
Не всех заказчиков устраивают дико тормозящие сайты.
Не все заказчики довольствуются сайтами визитками или интернет-магазинами, где при изменении цены у поставщика приходится по всем 1000 товарам проходиться вручную меня цену.
Искать сеньоров не оправдано в таких областях как веб-разработка, бекенд, энтерпрайз разработка, в этих областях джун за 2-4 недели набирает нужный уровень.
Видимо вы не сталкивались с мало-мальски серьезными проектами и демонстрируете Даннинга-Крюгера.
Моя мысль в том, что они ну никак не вписываются в квалификацию джун/миддл/сеньор, в их прямые обязанности не входит написание кода, и сравнивать найм джунов в IT-компании с наймом библиотекарей/слесарей в IT-компании, как минимум, неверно.
Имхо, джуны имеют смысл в четырех случаях:
- У руководства имеется мнение (почти всегда ошибочное) что хороший сеньор с командой джунов выдаст продукт сеньорного качества со скоростью команды джунов
- Нанимаем джуна, по-быстрому подтягиваем до миддла, продолжаем платить как джуну — чистый профит.
- Недорого, быстро и при этом работает — осознанная политика руководства.
- Нужны узкопрофильные или лучшие специалисты и при этом есть деньги на их выращивание.
Нанимаем джуна, по-быстрому подтягиваем до миддла, продолжаем платить как джуну — чистый профит
Это не лишено смысла.
Миддлом он конечно не станет быстро.
Но уровень «начинающего джуна» и уровень «джуна с опытом», действительно, разительно отличается.
Недорого, быстро и при этом работает — осознанная политика руководства.
Не всем нужны высокие технологии.
Разработка уже давно не является элитной профессией. Раскатать CMS и щелкнуть в ней пару галочек уже и головастые «менеджеры по продажам» способны.
У руководства имеется мнение (почти всегда ошибочное) что хороший сеньор с командой джунов выдаст продукт сеньорного качества со скоростью команды джунов
Как правило просто нет бюджета на сеньора + 3 миддлов.
Далеко не всегда имеется уверенность что проект взлетит, потому невозможно привлечь инвестиции. Дорогая ИТ-шная разработка — это риски.
Посмотрите на Google — там есть и стажёрские позиции, и средние. Но, чтобы туда попасть, нужно на собеседовании показать такой же уровень, как у сеньора в Netflix. Зато сразу декларируется возможность роста. В Netflix, если тебя взяли синьором, то это уже потолок.
Компания никому ничего не должна. Даже если она разорится — это ее право.Вот это, среди прочих вполне здравых аргументов, крайне странная… эммм… сентенция. Компания должна — по определению. Начиная с налогов и отчётности и заканчивая зарплатой. А если она разоряется, то и говорить уже не о чем. Да, есть такое право — расформировать компанию. Но давайте не будем путать просто ликвидацию юрлица со стратегическими ошибками, которые приводят к упадку, либо невозможности исполнять то, что компания должна.
Суть любой компании — это зарабатывание денег.
Это может относится только к коммерческим организациям, но не к любой.
Заметили ошибку?
Заметил, что «Воистину!» написано через пробел.
Да что уж там, всё плавающее: и сроки роста из одной категории в другую, и критерии оценки. Как я уже выше отмечал, мир IT — не армия, тут не работает в обе стороны принцип «Ну посижу тут лет N да стану полковником». То есть не каждый, кто много лет работает в каком-то стеке технологий, является в нём сеньором, но и не каждый сеньор много лет работал в одном стеке технологий, чтобы стать тем, кто он есть.
Стоит развиваться, читать профильную литературу, просить более нетривиальные задачи. Я, например, обожаю, когда (звучит забавно, да) на работе много работы. Не через край, чтобы на выходных ещё сидеть, а вот самое оно — весь рабочий день заполнен. Это не скучно, интересно, занятно, чувствуешь своё развитие. И грущу, когда задач нет. Потому что в нашей сфере мы работаем не только на фирму. Мы, прежде всего, работаем на своё будущее. И наработанные для этого самого будущего навыки есть много более ценный капитал, чем материальное вознаграждение за проделанный труд.
Действительно, большинство компаний указывают в вакансии, например, «Senior developer». Но дело в том, что (как минимум у конкретной компании в рамках определённой вакансии) определяются навыки, требуемые для должности этой, ну и на собеседовании становится ясно, какой уровень и по каким моментам хотят от соискателя. В разных фирмах для должностей той или иной степени эти навыки и их глубина могут отличаться, но если собрать и экстраполировать эти данные, то мы получим более-менее усреднённый список навыков (возможно, в виде списка вопросов к собеседованиям) для данной позиции. Например, в моей сфере (ASP.NET, C#) такой список есть по стеку дотнета и шарпа. Понятно, что его расширяют списки основных вопросов по алгоритмам, БД и ООП. И если более-менее знать (а, главное, понимать, а не просто выучить ответы) по сути всех этих вопросов из этих списков, то вероятность успеха при приёме на работу (да и при дальнейшей работе) будет высока.
И джун знает из этих списков далеко не всё, а если и знает, то уж точно не всё применять умеет. Мид, соответственно, знает и умеет применять уже больше, а сеньор, по идее, должен знать и уметь это всё (или почти всё, или мочь быстро понять и применить, даже если не знал). В этом плане/контексте «джун», «мидл», «сеньор» могут рассматриваться в том числе и как уровни развития.
. Впрочем, вероятнее всего, сыграли роль также Ваши талант и трудолюбие, ибо без них сразу на позицию мидла попасть сложновато, как по мне.
Ихмо, все куда как проще.
Сейчас огромная куча «войти-в-айтишников» после 2 месячных курсов.
На их фоне человек с 4-мя годами обучения (если не балду пинал) выглядит вполне себе квалифицированым.
Тех, кто после 2-х месяцев — берут на простые работы. Ну и называют джунами.
А тех, кто после 4-х лет — как после этого называть? Вот и дают сразу миддла.
С сеньорами та же история. Многие, ой как многие, этим словом только называются.
Нет жестких критериев для формально-точного определения квалификации.
В пределах одной фирмы — да, можно оценить и прикинуть более-менее точно — «ты джун, а ты миддл».
Но универсального, пригодного для разных фирм метода оценки, чтобы оценка корректно распространялась и на другие фирмы — не существует.
Официально должность правда старший программист, но это у нас какая то странная градация: стажер-программист(пол года)->программист->старший->ведущий (правда он уже код практически не пишет).
Умудрился еще забыть: знание подходов и архитектур принятых на стеке технологий на котором этот человек пишет, несколько реализованных крупных проектов, знание широко используемых библиотек и подобного, желательно знание еще нескольких языков и разных парадигм программирования, умение управлять своим временем, оценка сроков задач.
Знание нескольких языков (синтаксисов) — тут очень по-ситуации. Например, мало кому из дотнетчиков нужно что-то кроме Шарпа, XML, HTML, SQL, JSON ну и если он — фулстек, то ещё базы по JS (как правило, в виде JQuery). Но вот C++, Python и т.д. едва ли там пригождаются.
Или взять C# — может быть полезным кроме SQL решений иметь представления о паре NoSQL решений (ключ-значение, колоночная). Хотя бы иметь представление что такое есть, в каких задачах может помочь и куда гуглить.
P.S. Возможно стоит еще добавить что лично себя я стал считать похожим на джуна где то спустя года 2 с копейками работы)) Хотя как по мне еще и не полноценным на тот момент)
Лучше всего свой уровень по зарплате мерить.
Это вы не себя меряете.
А измеряете смесь «моя квалификация+мое везение+возможности предприятия»
На совсем другом предприятии совсем другом человеку может совсем не так повезти на коэффициент 0,5 — запросто. При той же квалификации.
Это уже синерский уровень.
Как по мне это любой средненачинающий мидл в своей копилке иметь должен.
Вот это зачем? Типа пишешь ты такой на питоне или жс и должен знать, как оно в байт код компилится?
Не обязательно в деталях, но иногда и знания о промахах кеша могут на практике пригодиться например. Или например что в случае если мы обходим несколько миллионов элементов и у нас нет умной компиляции которая заинлайнит вызов метода внутри цикла мы сильно просядем. Или о соотношении времени доступа (кэш, память, диск). Или о функционировании ОС.
Тоже ни разу не пригодилось, хотя для приличия пыталась зубрить сортировочки.
Ну оценить на глаз сложность и без изучения действительно обычно просто. А вот «зубрить сортировочки» смысла нет как по мне. Полезней изучать подходы к созданию разных алгоритмов. «Разделяй и влавствуй» там, динамическое программирование и подобное. (К сожалению в части алгоритмов я очень плох)
Как по мне это любой средненачинающий мидл в своей копилке иметь должен.По-моему, ваше понятие «средненачинающий миддл» отличается от среднерыночного.
Полностью согласен! Возможно, уважаемая julia4545 не обратила внимания на то, что использует понятие сложности алгоритма при принятии решения «использовать std::map или std::unordered_map».Тоже ни разу не пригодилось, хотя для приличия пыталась зубрить сортировочки.Ну оценить на глаз сложность и без изучения действительно обычно просто. А вот «зубрить сортировочки» смысла нет как по мне. Полезней изучать подходы к созданию разных алгоритмов
Человек не может в одиночкуА кто сказал про «в одиночку»? Естественно в команде, отвечая за какие подсистемы (проектирование, согласование и собственно реализация).
Но вы же про глубокий уровень и под «парадигмами», наверное, подразумеваете функциональное программирование.
Не сказал бы что про глубокий. Скорее про то что парадигмы стоит знать и применять по месту подходы из них если есть возможность. И не только функциональное, еще процедурное, нормальное ООП, аспектно-ориентированное, может где то логическое.
Вот, как выглядит «чистый» код для меня до сих пор загадка, наверное, каждый проецирует на это свой стиль.
Главное чтобы он был читаемым, соответствовал принятым на проекте стандартам, следовал общепринятым паттернам и подобное.
Это уровень ПМ-а, может тимлида, но никак не обычного разработчика, оценивать организационные и прочие риски, не связанные с кодом. Или риски возврата кода с QA или CR.
Так ли хороши джуны?