Drive your career as React Developer with Symphony Solutions!
×Закрыть

Hard skills

Добрый день, уважаемое сообщество,

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

1) Фрагментированность знаний
2) Отсутствие знаний основ компьютерных наук
3) Поверхностное знание используемых библиотек, фреймворков и технологий
4) Остановка профессионального развития
5) Перегруженность устаревшими, спорными и даже ложными знаниями
6) Оторванность от переднего края прогресса

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

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

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

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

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

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

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

LinkedIn

Лучшие комментарии пропустить

Це «проблема» ІТ абсолютно всіх країн. Нічого унікально-українського в цьому немає.

1) Фрагментированность знаний

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

2) Отсутствие знаний основ компьютерных наук

Даже если их чел знал, то успешно забыл за ненадобностью в работе.

3) Поверхностное знание используемых библиотек, фреймворков и технологий

См пункт 1. После 20-ого фреимворка, както углубляться во внутрь, желание отпадатает напрочь, навсегда.

4) Остановка профессионального развития

Колбасят на том на чем нужно в текущее время в текущем месте.
ВО вторых какое развитие? Что нового за последние 50 лет придумали?
Мода туда сюда накакието свистелки перделки, и гумантарные подходы постоянно меняеццо. то в моде ооп и паттерны, то скрам, то солид, то тдд, то не в моде. А суть кодингу при этом вообще не поменялась.

5) Перегруженность устаревшими, спорными и даже ложными знаниями

Текущие «новые» знания точно также будут ложными через пару лет, так зачем гнаццо за автобусом ?

6) Оторванность от переднего края прогресса

Вот нехрен в свобдное время делать — гнаццо за передним краем прогреса очередного фреимворка, или нового ванаби базворда.

У девелоперов помоложе — хард скиллы. У тех, кто постарше — уже софт.

На самом деле проблемы никакой нет. We get what we get.
Наши специалисты уровня выше среднего с развитыми софт-скиллами и предприимчивостью легко попадают и работают в любой компании мира. Тем, кто жалуются и продолжают риторику нытья «галеры, весло, грести», на самом деле очень комфортно в этом положении, поэтому они остаются здесь, кочуя между суднами, успевая поправлять хотелки на +500 и вовремя отвечая рекрутерам. Еще есть тонкая прослойка ультра-профессионалов, развитых в своей нише, которые не привязаны ни к чему, знают себе цену, и являются таки лицом индустрии нашей страны.

Каждый раз начиная стажировку для студентов 4-го курса своей родной Могилянки я сталкиваюсь с отсутствием культуры работы и у себя мы стараемся этому научить. Как сказала моя коллега, в универе никто не смотрит в твой код, а проверяют только выполняет ли он конечную задачу. Не учат у нас реальным DRY, KISS, и даже банально учиться выделять повторно используемые компоненты. Не учат грамотной коммуникации в задачах и вообще грамотно оформлять свои мысли. Те, кто осваивает все скиллы комплексно (и хард и софт) уже готовы работать где угодно и не обязательно остаются у нас.

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Якщо в українському ІТ стільки проблем, чому кількість зайнятих в ньому стає дедалі більше? Хтось наймає цих людей, дає їм роботу?

чому кількість зайнятих в ньому стає дедалі більше?

Занятых чем?

В Индии 2.7 млн разработчиков, проблемы Индии и разработчиков там все, думаю, знают и их нанимают и дают работу.

Так це і питається і відповідь: ринок великий і потребує багато манкі кодерів.

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

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

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

Рекомендации:
— учить и сертифицироваться по вещам которые почти не меняются. Паттерны, SQL минимальные алгоритмы, архитектура.
— хотя бы пару часов в неделю тратить на тренировку в leetcode, hackerrank etc
— воспринимать других программистов как союзников, а не как противников

Спасибо за обсуждение!

Но люди что-то делают, проводят цифровую трансформацию (пока остальные тут «меряются скилами») appau.org.ua/...​mpaniy-v-epohu-post-covid

Почитал комменты, похоже что теперь можно переопределить критерий синьйорности (вместо ЗП 3k$+ и сыров по 500грн/кг):
— или уже понял что IT — это утопия и рутина
— или еще нет и надеешься на технологии/развитие/знания

Один пример: в конце года пристрелят окончательно play.google.com — платный сервис музыки от гугла. А теперь прикиньте ситуацию с точки зрения разработчиков: там же была какая-то сотня людей, которая задротила пол жизни и мечатала попасть в тот самый FAANG, проходила 9 кругов ада на собеседованиях, рассказывала как их мотивирует писанина полезных проектов и как они хотят менять мир в лучшую сторону (а не просто получать ЗПшку). Они очевидно прыгали выше своей головы, писали на cutting edge technologies, покрывали код тестами, все по патернам, солидами, киссам, драям и best practices — чтобы в конце концов их многолетние труды выбросили в мусорку и положили большой болт на их старания.

Все эти наши «стабильные и долгосрочные проекты» — те же стартапы, которые сдохнут с вероятностью 99%. Разница только в том, что стартапы дохнут из-за того что им не дают деньги на развитие, а эти проекты сдохнут после того, как получат деньги на развитие. Так что можете задротить сколько хотите разбиранием кода фреймворков и боями за «сделать правильно» — ваш проект сдохнет с вероятностью 99% и все это отправится в мусорку. И фреймворк кстати тоже сдохнет :)

Один пример: в конце года пристрелят окончательно play.google.com — платный сервис музыки от гугла.

Переїде на youtube music. Суто маркетинг.

Они очевидно прыгали выше своей головы, писали на cutting edge technologies, покрывали код тестами, все по патернам, солидами, киссам, драям и best practices — чтобы в конце концов их многолетние труды выбросили в мусорку и положили большой болт на их старания.

Їх напрацювання підуть на новий сервіс.

Так что можете задротить сколько хотите разбиранием кода фреймворков и боями за «сделать правильно» — ваш проект сдохнет с вероятностью 99% и все это отправится в мусорку. И фреймворк кстати тоже сдохнет :)

Не всім подобається говнокодити.

Переїде на youtube music. Суто маркетинг.

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

Їх напрацювання підуть на новий сервіс.

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

Не всім подобається говнокодити.

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

И то что компоненты реюзнут и они будут служить дальше — скорее всего миф

Напрацювання це не лише жабаскріпт компоненти.

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

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

Обычно получается что он плохо кастомиризуется, он сильно большой и его не реиспользуешь никак :D

Был опыт в прошлоый компании написать бандл CMS + юзер-сайт (а то у нас у кастомеров слишком похожие запросы были), написали, каждый новый подключаемый проект требовал менять эти самые компоненты.

Не обязательно прямо многолетние труды выбросили в мусорку. Просто у программного продукта есть свой жизненный цикл. Если так рассуждать, то рано или поздно в мусорку летит вся конструкторская документация на здания, конкретные модели самолётов, автомобилей, бытовой техники. А Фаанги — действительно говнюки, что так измываются с инженеров на собеседованиях. Рано или поздно лопнет пузырь Фаангов на бирже, и доходы ихних программистов останутся как обычный base 120k в Калифорнии с огромным НДФЛ, а RSU будут обычной премией типа 13 зарплаты, т.е. ниочём.

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

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

Судя по той власти что у них уже накапливается, мне кажется что скорее они станут героями классических киберпанк сценариев Гибсона с мегакорпорациями покруче государств
А девелоперы станут зловeщими сарариманами в дзайбацу в черных костюмах и солнцезащитных очках бггг
... но это не точно)

и доходы ихних программистов останутся как обычный base 120k в Калифорнии с огромным НДФЛ

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

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

Я бы не рисовал картину в стиле «мы все умрём» с целью доведения прогноза до абсурда

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

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

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

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

20 лет назад в киеве небыло зарплат 5к, и аутсорса вообще почти небыло.

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

І для розвитку. Який особистий профіт гівнокодити?

1) Фрагментированность знаний

Если ты back-end разработчик 80% времени и 20% делаешь что-то со стороны фронта, то не удивительно что твои знания фрагментированы в соответствующей пропорции. Другие примеры: 20% dev-ops, 70% back-end, 10% front-end, ну и так далее. Включи сюда конкретные технологии и получится 20% dev-ops (Azure DevOps, но не GitLab например), 70% back-end (.NET экосистема), 10% front-end (Angular 6+) и т.д. и т.п.
Суммируя, фрагментированность знаний естественна для проекта * технологического стека * специализации * опыта. Это не касается Украины только, эта проблема актуальна везде.

2) Отсутствие знаний основ компьютерных наук

Тут кроется диллема. С одной стороны, основы computer science необходимы на этапе обучения ремеслу для получения полной картины и умении находить решения для любых поставленных задач. С другой стороны, в прикладном аспекте, если ты какой-нибудь сферический enterprise разработчик или фронт-енд девелопер тебе эти знания для общего развития и выветриваются через пару-тройку лет их активного неиспользования. Нужно постоянно тренировать себя в задачках на сайтах аля hackerrank.com чтобы быть на плаву.
Опять же, работая уже 4-й год в Европе, с коллегами со всего мира, могу сказать что пробема актуальна не только для Украины.

3) Поверхностное знание используемых библиотек, фреймворков и технологий

Опять же, чем это уникально для украинского ИТ?

4) Остановка профессионального развития

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

5) Перегруженность устаревшими, спорными и даже ложными знаниями

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

6) Оторванность от переднего края прогресса

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

В целом я вижу проблему hard skill-ов в Украине, в отсутствии добротных скилованных менторов, которые уже по заграницам давно выехали, в отсутствии сколь либо серьезных продуктовых компаний которые не только аутсорсят код (галеры), но и поддерживают рабочий продукт 24/7 годами. Еще в недостаточном следовании англоязычным ресурсам, литературе и видным личностям в своих областях. По поводу личной мотивации и остановке профессионального роста, это не проблема, т.к. естественный отбор перемалывает таких ребят и выкидывает из рынка, на их место приходят молодые и голодные.

Хард скиллз не нужны. Главное уметь красиво *******.

На самом деле проблемы никакой нет. We get what we get.
Наши специалисты уровня выше среднего с развитыми софт-скиллами и предприимчивостью легко попадают и работают в любой компании мира. Тем, кто жалуются и продолжают риторику нытья «галеры, весло, грести», на самом деле очень комфортно в этом положении, поэтому они остаются здесь, кочуя между суднами, успевая поправлять хотелки на +500 и вовремя отвечая рекрутерам. Еще есть тонкая прослойка ультра-профессионалов, развитых в своей нише, которые не привязаны ни к чему, знают себе цену, и являются таки лицом индустрии нашей страны.

Каждый раз начиная стажировку для студентов 4-го курса своей родной Могилянки я сталкиваюсь с отсутствием культуры работы и у себя мы стараемся этому научить. Как сказала моя коллега, в универе никто не смотрит в твой код, а проверяют только выполняет ли он конечную задачу. Не учат у нас реальным DRY, KISS, и даже банально учиться выделять повторно используемые компоненты. Не учат грамотной коммуникации в задачах и вообще грамотно оформлять свои мысли. Те, кто осваивает все скиллы комплексно (и хард и софт) уже готовы работать где угодно и не обязательно остаются у нас.

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

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

Да, всё так. Поэтому хотя бы у себя стараемся это переломить.

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

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

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

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

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

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

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

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

Але що в цьому поганого?Якщо ти працюєш в великій компанії з чіткою вертикальною структурою і розподілом обов’язків на кожній лінії, яка різниця, як там в тебе з «предприимчивостью» якщо ти нічого не «продаєш» на поточній позиції, а лише робиш свою роботу, а за «предприимчивость», «мыслить глобально», «ориентироваться на результат» зазвичай відповідає менеджмент над тобою?

Погано в тому, що ти сам себе обмежуєш у рості, хіба що тобі і так добре, тоді я з вами цілком погоджуюсь. А для індустрії в цілому погано, тому що це дає позитивне підкріплення менеджменту ставитись до спеціалістів як до ідеальних виконавців чия думка не має значення і головне — це слухатись ліда і ПМа.

менеджменту ставитись до спеціалістів як до ідеальних виконавців чия думка не має значення і головне — це слухатись ліда і ПМа.

Що тоді головне?І замість ідеальних виконавців краще мати команду rock-starts індивідуальностей, де всі як один з надзвичайною «предприимчивостью» і один поперед одного «мыслят глобально» як буде краще?

Ви праві, буває і так. Істина ж десь посередині, в ідеальному балансі між «думати глобально» та орієнтацією на результат.

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

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

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

и не обязательно остаются у нас

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

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

Когда наши ВУЗы будут котироваться на уровне со Стенфордом, тогда можно осторожно сказать что дальше некуда расти, а пока я бы сказал что у нас непаханное поле по до-образованию в плане предприимчивости, product design, коммуникациям. Тому же честолюбию как вы верно подметили (хоть это больше и проблема пост-совка). Наши факультеты стараются обходить стороной эти не технические дисциплины, не задумываясь насколько сильно они дают на самом деле создать что-то значимое и стать профессионалам мирового уровня. Лидерам рынка это тоже не нужно, потому что тогда людей сложнее контроллировать и удерживать.

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

Для начала ВУЗы должны стать частными и начать конкурировать за студентов.

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

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

И вот мы вошли в круг. Чтобы уменьшить варварство нужно образование. Но кому нужно?

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

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

так и работодателям, которые испытывают дефицит образованных специалистов.

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

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

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

заставлют знания атрофироваться у тех, у кого они были

 Ну это не прямо следует из предыдущего. Можешь предложить, куда продать знания подороже.

Ну это не прямо следует из предыдущего. Можешь предложить, куда продать знания подороже.

Да, за пределы Украины.

С переносом своей тушки за пределы Украины.

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

Ну я не уверен, что в Самсунге или Материалайзе (или Аяксе) платят выше, чем среднегалерно.

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

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

Так, так (насипаю ікру на перепелині яйця), на дні ми, куди нам, одні галери і опостиле весло :( От якби я вмів писати cover letter в канадську компанію, яка чекає сто резюме на вакансію, чи в гугль, ох, ох

А если заведете трактор, будете делать тоже самое, только золотой ложечкой.

насипаю ікру на перепелині яйця

Не понял, ты жалуешься или хвастаешься %) ? Ну хорошо, что хоть не икру трески на яйца колибри. Перепелинные — это уже достижение %)

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

Да нет такого нигде, что все ищут супер-спеца и готовы платить супер-деньги. Супер-спеца они нанять-то не против, но никак не за все деньги мира.

Начнем с конца

Оторванность от переднего края прогресса

Статья 10летней давности об исследованиях феномена Финляндии, т.е о том, какая подготовка делалась «несколько поколений подряд», а именно, о переходе к «экономике знаний» — то, на чем они делало их правительсиво акцент последние пару десятилетий, а сейчас пожинают плоды «своих инвестиций в человеческий капитал».
dspace.nbuv.gov.ua/...​ndroshchuk.pdf?sequence=1
Все в этой стране сделано, чтобы
1) подготовить «лучших учителей», а также выкосить булшит (как со стороны учителей так и учеников), научиться строить «здоровую» коммуникацию в коллективе с пеленок (и не на основании пола, веса или как принято «а у меня папа депутат, глава СБУ, т.п»).
2) социально-направленная экономика: «експерти ООН з програми людського розвитку встановили, що Фінляндія випередила всі країни світу щодо економічно-соціальної ефективності використання високих і надвисоких технологій. Пізніше Міжнародний інститут розвитку (IMD) та Всесвітній економічний форум (WEF) виявили, що Фінляндія вийшла на перше місце у світі за індексом глобальної конкурентоспроможності.»

Но какой прогресс также связывают с огромным количевом «женщин в политике» (Финляндия дала избирательное право женщинам раньше других — в 1906 году. hromadske.ua/...​-ocholili-veliku-politiku )

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

А какой нужен результат?

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

на столько что бы средняя ЗП в отрасли выросла в два раза

При этом она подтянется к американской, и нам вообще перестанут приходить проекты.
«Україна — аграрна країна», как говорят по радио.

то есть по вашему, при устройстве на работу я смогу писать в резюме, что вместо x суммы хочу 2*x сумму, только потому что средний уровень программистов в Украине высокий?

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

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

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

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

Ну как бы то что кто-то написал популярный Фреймворк не говорит о том что классный специалист. Вы путаете мягкое с тёплым

А кто тогда мягкий специалист?

Книги на русском никогда в истории писать не умели.
Туториалов на русском в инете море и много не тупо переводных.
Фреймворки? А кушать что, пока его писать будешь и продвигать?

(и не на основании пола, веса

и тут же

Но какой прогресс также связывают с огромным количевом «женщин в политике»

Какое милое двоемыслие

Какое милое двоемыслие

При чем тут двусмыслие, наоборот, финки принесли «смысл в политику», сделали ее прозрачной и социально-направленной (чем занимались мужики до этого в политике, вообще неясно. Хотелось бы получить исследование, когда бы отогнали 90% м от корыта, то скорее всего ситуация улучшилась бы еще «в разы» ;) ).
Но в то же время, на основании пола, веса, возраста и др. параметров чаще всего принимают решения работодатели отсталых патриархальных стран, и, увы, инновационность таким странам только снится (тут только привыкли торговать мозгами, яйцеклетками и другими органами, что приносит быструю и сомнительную прибыль).
А вот в образовании, где работают 90 % женщин, отличий на «разных параметрах» они не делают (хотя булшит среди детей подросткового возраста в постсовковых странах достаточно агрессивный. Увы, разруливание последствий психологических травм ложится на родителей, будущих супругов, и сотрудников компаний, куда попадает травмированная личность).

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

Програмую — на 17

Заглянул в github.com/...​ancaster-Lana/FitnessIntl репозиторий (C#). И после очень поверхностного просмотра, появились y меня замечания.

Всё выполнено по канонам (модель-вью-вьюмодель), но:

— какой смысл во вью-моделях, если они практически пустые?
— какой-смысл в MVVM, если весь код находится в «код-бехаинд»
— какой смысл в ProgressBarVisibilityConverter, если он дублирует стандартный BooleanToVisibilityConverter? (в общем-то, BooleanToVisibilityConverter даже продвинутее, т.к. обрабатывает nullable)

Попахивает нубизной. С остальными 16 ЯП так же?

Ты просто завидуешь

Ну не без этого. Я-то программирую лишь на 12 ЯП (если считать коденье на ассемблере со словарём).

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

какой-смысл в MVVM, если весь код находится в «код-бехаинд»

Це типова архітектура в дотнеті, я б сказав домікросервісного періоду. Слої, у кожного рівня свої моделі, все норм, так має бути.

Це типова архітектура в дотнеті, я б сказав домікросервісного періоду.

«Типичная архитектура» — это MVVM с пустыми «вью-модель» и кучей кода в «код бихаинд»?

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

Як людина, яка бачила еволюцію дотнет ентерпрайза від selecta в Button_click до selecta в async Task Get, в проектах, які до потрапляння в оутсорц часто починали «афроамериканські сіьори», я дуже ціную твої коментарі. Приблизно, як 25-копійкові монети виведені вчора з обігу ;)

Читай сюда — и не пиши глупости:
stackoverflow.com/...​ehind-in-wpf-mvvm-pattern

и вообще, гугли по „wpf code behind empty”

там ещё если зайти в профиль на доу в reviews, то можно почитать что она про компанию писала

это так в XSpace космические корабли на MVC подымают в космос

перепутал SpaceX с XSpace. извиняюсь

Розмовляю на

на украинском Лана что-то тоже не очень говорит)

финки принесли «смысл в политику», сделали ее прозрачной и социально-направленной (чем занимались мужики до этого в политике, вообще неясно. Хотелось бы получить исследование, когда бы отогнали 90% м от корыта, то скорее всего ситуация улучшилась бы еще «в разы» ;)

Ахаха, ну ясно, «man bad, woman good», какой отличный пример мизандрии)))
Да и просто сексизма

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

Да ладно, я не слышал что бы в США культурные девушки позволяли себе публичный откровенный сексизм, за это быстро наступают предсказуемые последствия.
Вот вы к примеру, говорили своим коллегам что считаете белых мужчин белыми бабуинами, или только на форуме себе это позволяете? =) ну и там сверху по мелочи, у вас каждый 5 коммент блещет мизандрией и сексизмом

90 % IT-ків — це білі чоловіки, які в середньому зароблять на 15-30 % вище їх колег-жінок того ж рівня. Тому я не бачу нічого критичного, щоб ввести податок 25-30% від ЗП білих бабуінів

я не слышал что бы в США культурные девушки позволяли себе публичный откровенный сексизм

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

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

Настало время офигительных историй.

относительно бабуинов... Приношу им свои глубочайшие извинения : эти милые зверушки не заслуживают такого сравнения ;)

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

к девочкам как к принцессам относятся

Может девочки ведут себя, как принцессы, поэтому и другие себя ведут рядом соответсвенно. Какой смысл бить детей, которые ведут себя воспитанно и спокойно ;)

почему мужчин начинают считать плебеями и заставлять вставать и уступать здоровым нормальным женщинам

Так может женщина тоже едет с ночной смены ;)
Лично я очень редко видела, чтобы мужчины уступали место (даже старикам) в Украине.
Если умеете читать, то на всех стеклах городского транспорта написано «місця для літніх людей та людей з дітьми», так что будьте добры освободить место, если перед вами такая категория людей, независимо от пола.

Если умеете читать, то на всех стеклах городского транспорта

ничего не написанно про уступать

здоровым нормальным женщинам

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

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

это мои мысли, за их валидность не ручаюсь.

Мне вообще по-****бану, кому вы уступает места в транспорте.
Но мне принцыпиально, чтобы более талантливые женщины не уступали свои рабочие места в ИТ и политике бездарям, а шли до конца, умели отстаивать свои права.

Но мне принцыпиально, чтобы более талантливые женщины не уступали свои рабочие места в ИТ и политике бездарям

А зачем они это делают?

более талантливые женщины не уступали свои рабочие места

Более талантливые — не уступают. Более того, в IT-мире пользуются своим «диверсити бонусом».

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

Ты вообще влез не в ту ветку, топик был создан как решить проблемы современного ИТ, а не переходить на личности.
Конструктива от твоих «левых» замечаний — 0! И вообще твое мнение почему-то меня ну совсем не интересует (мало того, о нем тебя и не спрашивали вовсе)

И вообще твое мнение почему-то меня ну совсем не интересует (мало того, о нем тебя и не спрашивали вовсе)

Справедливости ради твоё мнение тоже никто не спрашивал, но ты ж с ним вышла в паблик: dou.ua/...​rums/topic/31634/#1960276

Проклятый сексист!

Мое мнение основано на прикладных исследованиях экспертов, а не «ноумейм» чуваков, которые лезут в чужие репозитории и дают невнятные комментарии и еще и не в тему.

Зачем ты занимаешься таким ярым антифеминизмом? Что тебе сделали бедные женщины?

у него ник есть, значит уже не ноунейм.

обычно если комментарий не внятный, то его стоит уточнить

Конструктива от твоих «левых» замечаний — 0!

Конструктив есть. Просто, у считающих себя талантливыми — не всегда хватает мозгов увидеть очевидные вещи.

Скажем, один из вариантов конструктива: ты ведь зачем-то выложила код в репозиторий?
Тебе указали на то, что этот код смешон и не привлечёт работодателей/заказчиков к тебе, а скорее оттолкнёт. Это ведь конструктив?
Но тебе больше охота повозмущаться, чем принять полезную информацию к сведению и сделать соответствующие выводы/решения/действия.

Можешь показать свой репозиторий?

Можешь показать свой репозиторий?

Речь-то не о моём коде. А о конструктивной критике кода Ланы.

Если у тебя есть, что этой критике конструктивно возразить — попробуй.

Возражаю конструктивно:

talk is cheap. show me the code.

Так лол. Яка різниця хто обсирає чужий код, якщо обсир по-ділу? :)

talk is cheap. show me the code.

Лана показала код. Я написал конструктивную критику здесь:
dou.ua/...​rums/topic/31634/#1961676

Что у тебя есть об этом сказать?

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

Ок, тогда выкладывай репозиторий своей жены, сестры, мамы ;)

а если мужчины будут уступать свои места бездарям, то вам ок?

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

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

зачем звёздочками закрашивать слово барабан?

Я понимаю, уступать инфалидам с костылями или палочками. Уступать беременным. Уступать инвалидам с проблемами опорно двигательного без костыля, если он попросит и назовет причину.
Но на основании чего уступать здоровой женщине или мужчине? По признаку пола? Это сексизм, аднака.

на основании чего уступать здоровой женщине или мужчине

Если мужчина в общественном транспорте занимает место 2-3х человек из-за раздвинутых ног, то такого чувака у нас «пока вежливо » просят встать (а в Мадриде он получает вдобавок и штраф).

мужчина в общественном транспорте занимает место 2-3х человек из-за раздвинутых ног

Такие мужики всеже редкость.

то такого чувака у нас «пока вежливо » просят встать

Засцут — обычно у нас такие мужики — альфачи непобояться на конфликт пойти вообще.

а в Мадриде он получает вдобавок и штраф

Пруфлинков бы.

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

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

Змінюй себе, змінюй країну на краще ;)

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

А вот в образовании, где работают 90 % женщин

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

скандалы, интри, расследования

Увы, это как раз ваша парафия

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

Эх, снова, чую, пару дней жизни уйдет на ДОУ. Ладно.

какая подготовка делалась «несколько поколений подряд», а именно, о переходе к «экономике знаний» — то, на чем они делало их правительсиво акцент последние пару десятилетий
подготовить «лучших учителей»

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

строить «здоровую» коммуникацию в коллективе с пеленок

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

социально-направленная экономика

Да. Только уровень безработицы в процентном соотношении чуть меньше, чем в Украине. И продолжает расти.

«женщин в политике»

Главное, чтоб не:
— Хьюстон, у нас проблемы.
— Какие?
— Ой, все.

Один известный политик говорил «Хочешь поболтать — иди к мужчине, хочешь решить проблему — иди к женщине» ;)

Это к тому, что женщины создают проблемы и их надо решать?
/trollmode

вы можете спокойно «переключиться на мужчин» и решать их проблемы ;)

Один известный политик говорил «Хочешь социального благополучия — поставь на стол борщ». ;)

дай угадаю, этот политик был женского пола? =D

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

Пригласи дядю Мишу, и порешайте, у кого какой уровень.

Денис, абстрактно это уже де факто. Я изложил про «пороги вхождения» в профессию шутливо.

Я учился на химика и помню это все. В ИТ еще хоть можно в интернете начитаться терминологии.

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

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

Интерпретатор php например читает строку из файла и интерпретирует последовательность < ? p h p как начало скрипта php
Когда я говорю ученику: напиши мне здесь начало скрипта php он тоже пишет < ? p h p
Мета_знание здесь «начало скрипта php»
И оно очень динамично. Это ведь может быть и просто «начало файла php» — некорректно, но для начала сойдет, можно догадаться. И все другое что связано с началом скрипта php — значками составляющими.
Без связи с под_капотом нет твердого ощущения знания и мета_знаний.
Это как построить дом на качающихся камнях. Вроде устойчиво, но если подпрыгнуть то все зашатается.
А вот функция сопоставления знаний и мета знаний она дает ощущение стабильности и прочности ученику. И я как раз эту функцию в интерфейсе материализую для применения.
То есть у меня даже «под капот» мета_знания можно будет заглянуть легко и просто.

о есть у меня даже «под капот» мета_знания можно будет заглянуть легко и просто.

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

А можешь написать к андерлайнеру именно клиента? Он так работать должен: Пользователь открывает блокнот виндоус обычный и нажимает hot key и потом пишет iddqd
iddqd исчезает и вместо него появляется надпись: GOD MODE ON
Это silence вариант.
А вот вариант с выбором: пользователь пишет:
id
а потом полупрозрачное окно выбора появляется (в java это фрейм без декора) и там написано три варианта dqd и kfa и fa
То есть мне нужен сканер клавиатурного ввода и выводитель такого окошка поверх вообще любой программы.
Я так смогу пользователю любой программы дать подсказку и мета подсказку и мета-мета подсказку.
У меня есть сейчас механизм один раз и навсегда запоминающий пользовательские знания и мета знания. А клиента работающего поверх любой программы — нету.

Пользователь открывает блокнот виндоус обычный

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

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

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

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

Добавить парочку миллиардеров в качестве модераторов? Создать иерархию с быстрой сменой кадров? Или наоборот совет архитекторов те которые реально двигают большие проекты? Я ж в этом не разбираюсь :)

Вот в НАНУ президентом был Патон.
И где это НАНУ?

И где это НАНУ?

теперь это группа НАНА

если можно провести открытый конкурс и узнать лучших

Что ещё за «открытый конкурс»? Олимпиадные задачки решать? Или, может, тестовые задания делать — на недельку-другую бесплатного труда?

Всё проще. Заработал коденьем за год 50к баксов и менее — шудра. Заработал до 150к — вайшья. Заработал до 350к — кшатрий. Заработал больше — брахман. Где-то так...

А бывших президентов — на Вишну?

на вишню жеж. главное ветки потолще выбирать

тоже вполне способ, тем более быстро и относительно справедливо, все-таки хотелось это все организовать пупырышками наружу и не делить на сорта программистов и усиливать разделение, а выделить скажем так элиту и прислушиваться к тому что она говорит ну или не прислушиваться, как рекомендации воз :)

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

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

Конечно с довольтсвием бы послушал :) особенно если существует хоть что-то минимально рабочее. самое удивительное что один раз и двадцати удается увидеть. Особенно если это что-то большее чем продвинутый автокомплит по онтология какой-то предметной области.

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

Давайте может не будем делать вот так сразу электронного президента?

Лично я свои знания — иcключительно продаю. А всякие гитхаб-репозитории с оупен-соурс реализациями, рассматриваю как разновидность коммунизма, с которой нужно бороться.

И это правильно. Если бы я и раздавал не_за_деньги, то обязательно при условии не_денежного вознаграждения. Я против коммунизма — коммунизм 100% создает слабых, не самостоятельных.

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

www.hillside.net/...​020/index.php?nav=program
Онлайн участие 10 баков. Записывайся.

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

В чем корреляция основ компьютерных наук и понимание картины мира ?))

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

Обычно можно изобрести мотороллер и продать как велосипед. И никто и не заметит, что он с акумами.

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

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

Если сравнивать лучших западных коллег со средними украинскими, сравнение всегда будет не в пользу последних. Ошибка в методике. Из личного опыта, средний «западный» специалист, даже с PhD, ничем принципиально не выигрывает.

Проблема не в тех знаниях, а в отсуствии денег у нас, и не желания денег приходить из других стран.
В США овердохера настолько косоруких индусов и ничего, пишут как-то. Вот та кучка крутых типа Макконела, Дяди Боба, Фаулера, Русиновича и прочих тянут на себе топовую индустрию, а простым инженерам ток таски в джире двигать и баги по туториалам фиксить, думать там особо не надо.
Придут деньги придут и спецы за ними и подучат кого надо.
О того что формошлеперы начнуть надрачивать литкод и CS ничего не поменяется.

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

Другими словами были бы у нас специалисты получше

По-перше, теза, що наші програмісти гірші неправдива, і ваші аргументи непереконливі. Об’єднати двадцять країн Європи (чомусь без України), назвати це «у них», і згадати, що в 70-ті «там» був Страуструп, в 80-ті Торвальдс, е..., хто там ще.. а от у нас тут формашльопи — так собі аргумент. Бо одразу хочеться розпитати про іспанських, чи ірландських програмістів, які «тягнуть галузь вперед», «задають тренди і вигадують нові мови програмування», і ?

дополнительные деньги пришли бы сюда очень быстро

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

а от у нас тут формашльопи

У нас були титани, на яких навіть Кнут дрочив по вечорам. Те, що ти про них не знаєш, не відмінює їх існування.

У нас

 От зараз прийде хтось з сусідньої теми про політику й почне питать, чи то ти себе до совка відносиш, чи Кнут спирався на українських націоналістів кінця 19 — початку 20 сторіччя.

Эти напечатанные деньги оседают в карманах миллиардеров в основном. Даже среднему классу в странах, где они печатаются, перепадает «на орешки».
Сюда доходят только объедки, ровно для типовых формошлёпных задач подешевле, и перелома какого-либо не будет. Точно так же, как производство бежит сейчас в дешёвое ЮВА.

Я просто пытаюсь понять чего нам не хватает для этого

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

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

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

Другими словами были бы у нас специалисты получше то дополнительные деньги пришли бы сюда очень быстро.

Спецам деньги заходят. Ну, по-крайней мере, в размере африканских зарплат — типа 3-6к/мес за тушку.

Но окромя зарплат — ни-ни. Потому как, в стране ведь беспредел.

Денег в мире очень много и нет каких-то существенных преград для перемещения денег в Украину

[хором]
— Здравствуй, инвестняня!

Проблема не в тех знаниях, а в отсуствии денег у нас, и не желания денег приходить из других стран

А как насчет программы Горизонтал2020, о которой сказано " семирічна Програма (2014-2020), бюджет якої оцінюється у 80 млрд євро. Головне завдання Horizon 2020 — підтримка й фінансування інноваційних ідей та продуктів, що важливі для різних сфер нашого життя."
ain.ua/...​ecial/about-horizon-2020

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

В статье Украина есть,а в списке стран указанных в документе — не числится. Заговор?

А о чем тогда инфа «Після Угоди про асоціацію українські вчені й підприємці активно беруть участь у Horizon 2020 — з 2014 по 2018 роки було подано 1 738 заявок. Фінансування отримали 110 організацій, які взяли участь у розробці 184 наукових та інноваційних проектів......... Загальна сума фінансування для українських організацій склала 21,692 млн євро. Трохи більше половини грантів ЄС отримали приватні підприємства за програмою підтримки малого та середнього бізнесу. Друге місце посідають науково-дослідні організації, а третє — заклади вищої освіти та державні підприємства.»

Ощущение, будто собирается материал для будущего курса «Как стать универсальным унисексом в мире разработки».

Все это нужно если есть четкое ТЗ и роадмап на годы

Ага, зрідка трапляються цікаві кандидати, які про Big O не те що б просто не знають, а навіть набираються самовпевненості говорити, що то все нудна лабуда, яка нікому не потрібна, бо є Array.sort :)

Сами-то наверное вчера новый алгоритм сортировки реализовывали?

Досить очікувано підмахнув, як на «full-stack JS».
Ні, сам я просто ціную людей з базою і кругозором, а для чого потрібна конкретно O-нотація, не так давно на ДОУ писали — згрубша для того, щоб не запіндюрити квадратичну складність для потенційного хайлоаду, просто не подумавши про це.
До ремісника таке знання приходить разом із набитими синцями, академічно освіченому фахівцю в ідеалі може бути закладено ще в базу.

в джс у сорта больше проблема чем не ясное Big O, стандартом не гарантируется что sort будет stable, как и метод сортировки в целом

Вы хоть сами поняли что написали или так, лишь бы написать? Если поняли, то объясните читателям значение

не гарантируется что sort будет stable

И к чему страшному это приведет на практике

К тому что нет гарантии что можно будет отсортировать по фамилии, а потом досортировать по имени.

Ага. Однако:

  1. Это пофиксили в ноде говорят с версии 11, в хроме с версии 70
  2. Не всем нужно сортировать объекты по нескольким полям. Если нужно — возможно архитектура неправильная и задачу для БД пытаются перенести в код
  3. Два раза вызвать сорт — это 2 прохода по массиву. Не эффективнее ли написать нужную функцию сортировки и передать её в метод sort? С точки зрения того самого Big O
Два раза вызвать сорт — это 2 прохода по массиву. Не эффективнее ли написать нужную функцию сортировки и передать её в метод sort? С точки зрения того самого Big O

Ееее... З точки зору Big O це буде ідентичним. O(NlogN) + O(NlogN) = O(NlogN).

гдето математика потерялась... о + о = 2о

это big O математика, константы можно не учитывать

ага, а менеджеру, на вопрос «какго черту запрос выполняеться 2 минуты вместо одной», тоже можно говорить что это константа!

А какое отношение O имеет к 2 минутам?

это скорее к изначальной фразе про

які про Big O не те що б просто не знають, а навіть набираються самовпевненості говорити, що то все нудна лабуда, яка нікому не потрібна

Я с говорящими что О это лабуда — согласен. Ибо в конечном счете реальное время запроса решает.

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

Я буду куда «спокойнее спать» от успешно пройденых нагрузочных тестов, чем от того что там ктото О. посчитал...

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

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

Один ти тут в 3х вимірні шахи граєш.

«И эти люди запрещают мне ковыряться в носу!»

Увы, но таки он прав :-) Смысл этих нотаций не сколько время, а показать зависимость времени выполнения и размера массива, так что даже если там вместо 2, 5 раз проход будет, все равно не поменяется сложность алгоритма :-).

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

www.khanacademy.org/...​/a/big-big-theta-notation

Вот здесь хорошо обьясняют, там неск статей.

Ну вид зависимости не поменяется, но сортировать массив 2 раза или один — разница какая-то должна быть

Ну вот с точки зрения биг о идентично, а в тесте таки не совсем:

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node -v
v14.0.0
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.66 ops/sec ±0.16% (269 runs sampled)
Method 2 (1 sort call) x 133 ops/sec ±0.73% (281 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 94.52 ops/sec ±0.45% (263 runs sampled)
Method 2 (1 sort call) x 132 ops/sec ±0.51% (280 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.40 ops/sec ±0.38% (268 runs sampled)
Method 2 (1 sort call) x 138 ops/sec ±0.21% (282 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.40 ops/sec ±0.38% (268 runs sampled)
Method 2 (1 sort call) x 136 ops/sec ±0.35% (281 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 100 ops/sec ±0.13% (269 runs sampled)
Method 2 (1 sort call) x 137 ops/sec ±0.15% (282 runs sampled)
Fastest is Method 2 (1 sort call)

Массив состоял из 10к объектов

//method-1.js
const sortByName = (a, b) => {
  return a.name.localeCompare(b.name);
};

const sortByAge = (a, b) => {
  return a.age - b.age;
};

module.exports = (entries) => {
  return entries.sort(sortByName).sort(sortByAge);
};
//method-2.js
const sort = (a, b) => {
  return a.age === b.age ? a.name.localeCompare(b.name) : a.age - b.age;
};

module.exports = (entries) => {
  return entries.sort(sort);
};
//index.js
const method1 = require("./method-1");
const method2 = require("./method-2");
const Benchmark = require("benchmark");

const names = [
  "Gary",
  "Ann",
  "Bob",
  "Sue",
  "Sam",
  "Anton",
  "Vitaly",
  "Vasily",
  "Andrew",
  "Irina",
  "Katherina",
  "Elena",
  "Dmytro",
  "Aleksey",
  "Viktor",
  "Adolf",
  "Hui Wei",
  "Mariya",
  "Marina",
  "Anastasiya",
  "Angelika",
  "Angelina",
  "Yana",
  "Svetlana",
  "Roksolana",
  "Oksana",
  "Helloworldiana",
];

const people = [];

for (let i = 0; i < 10000; i++) {
  people.push({
    name: names[Math.floor(Math.random() * (names.length - 1))],
    age: Math.floor(17 + Math.random() * 70),
  });
}

Benchmark.options.minSamples = 200;

const suite = new Benchmark.Suite();

suite
  .add("Method 1 (2 sort calls)", () => {
    method1([...people]);
  })
  .add("Method 2 (1 sort call)", () => {
    method2([...people]);
  })
  .on("cycle", function (event) {
    console.log(String(event.target));
  })
  .on("complete", function () {
    console.log("Fastest is " + this.filter("fastest").map("name"));
  })
  .run({ async: false });
"dependencies": {
  "benchmark": "2.1.4",
  "microtime": "3.0.0",
},

Блять, я навіть не знаю звідки почати придиратись...

0. Ти що бахнувся тестувати сортіровку на 10к елементах? Ми не в 70х, коли це міг би бути показовий тест. Чи в JS настільки все повільно, що ми відкатили 50 років прогресу хардварщиків?

1. Є багато різних stable sort’ів. Вроді би ті, яким не потрібно багато додаткової пам’яті (більше ніж O(logN) на стек) повільніші за O(NlogN), в тому ж С++, якщо правильно пам’ятаю, там O(N log^2 N). TODO: вставити жарт що JS жере RAM.

2. Ти включаєш час на клонування початкового масиву в бенчмарк. Там не багато, але все ж у твого бенчмарк-фреймоврку повинен бути спосіб задати setUp.

3. names[Math.floor(Math.random() * (names.length - 1))] — неправильно. У тебе Helloworldiana ніколи не попаде в вибірку. Ти зря 1 відняв — правильно floor(random() * len).

4. Жопою відчуваю, що львину долю твого часу з’їдає далеко не сортіровка, а саме localeCompare. Перетестуй з двома цілочисельними полями. Враховуючи що це дико «дорогий» метод, тебе б «врятувала» сортіровка, яка робить мінімум порівнянь.

5. Нафіга ти на три файли розбив цю штуку? Бро, та ми віримо що ти вмієш JS модулі підключати.

Ти що бахнувся тестувати сортіровку на 10к елементах? Ми не в 70х, коли це міг би бути показовий тест.

Думаешь что на 100к или на 1кк каким-то магическим образом вызов сортировки 2 раза будет быстрее чем вызов сортировки один раз? Ну-ну

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js
Method 1 (2 sort calls) x 9.21 ops/sec ±1.01% (219 runs sampled)
Method 2 (1 sort call) x 9.95 ops/sec ±1.64% (227 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js
Method 1 (2 sort calls) x 0.84 ops/sec ±0.98% (202 runs sampled)
Method 2 (1 sort call) x 0.99 ops/sec ±0.82% (202 runs sampled)
Fastest is Method 2 (1 sort call)
Чи в JS настільки все повільно, що ми відкатили 50 років прогресу хардварщиків?

Тебе 12 лет? Или травма психологическая от неудачного изучения JS осталась?

Є багато різних stable sort’ів

К чему здесь эти теоретические выкладки? Цель теста — показать что вызвать Array.prototype.sort один раз с более сложной функцией сортировки быстрее, чем вызвать Array.prototype.sort 2 раза с более простой функцией сортировки, а следовательно stable sort не особо нужен в JS.

Ти включаєш час на клонування початкового масиву в бенчмарк. Там не багато, але все ж у твого бенчмарк-фреймоврку повинен бути спосіб задати setUp.

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

names[Math.floor(Math.random() * (names.length — 1))] — неправильно

Да, действительно. Но сути результата это не меняет.

Жопою відчуваю, що львину долю твого часу з’їдає далеко не сортіровка, а саме localeCompare

Выше вообще писали

К тому что нет гарантии что можно будет отсортировать по фамилии, а потом досортировать по имени

Фамилия и имя — текстовые поля, очевидно. Замена на числовые поля кардинальным образом ничего не меняет (1кк объектов):

Method 1 (2 sort calls) x 1.53 ops/sec ±1.36% (203 runs sampled)
Method 2 (1 sort call) x 2.01 ops/sec ±1.39% (204 runs sampled)
Fastest is Method 2 (1 sort call)
Нафіга ти на три файли розбив цю штуку?

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

К чему здесь эти теоретические выкладки?

Ти перший зморозив єрунду про Big O нотацію.

Думаешь что на 100к или на 1кк каким-то магическим образом вызов сортировки 2 раза будет быстрее чем вызов сортировки один раз? Ну-ну
Цель теста — показать что вызвать Array.prototype.sort один раз с более сложной функцией сортировки быстрее, чем вызвать Array.prototype.sort 2 раза с более простой функцией сортировки

Якщо можеш — протесть ще початковий варіант (там де 10к) коли спочатку порівнюють по імені (з localeCompare) і тільки потім по віку, а не навпаки — реально цікаво.

а следовательно stable sort не особо нужен в JS.

це взагалі окреме обширне питання. Але stable sort тобі точно потрібен на фронт-енді коли ти відображаєш якусь таблицю, де можна сортувати натиснувши по стовпцю. Зі stable sort’ом користувач може відсортувати таблицю по двох полях просто клікнувши по імені, а потім по віку. Без stable sort’у всю таблицю буде повністю перетрушувати — не зручно, йопт.

Тебе 12 лет? Или травма психологическая от неудачного изучения JS осталась?

Травма після використання залишилась :(. Чомусь суб’єктивно сьогодні всьо нафіг повільніше ніж років 20 назад, блін. TODO: вставити жарт про спіди.

Без stable sort’у всю таблицю буде повністю перетрушувати — не зручно, йопт.

Думаю, можна динамічно підставити функцію сортування за історією полів, і буде те саме, що з стейбл сортом. Але я не ЖС.

Так ніхто ж не каже, що це неможливо зробити, лол. Просто фраза що «ой здався нам той стейбл сорт» теж показує незнання.

Просто фраза що «ой здався нам той стейбл сорт» теж показує незнання

Когда люди выдают отсутствие стейбл сорта как большую проблему сортировки в JS — это тоже показывает незнание. Или у человека был очень специфичный опыт, когда бизнес-логика вся сводилась к одним только сортировкам. Хотя что мешает в таком случае закодить нужный алгоритм сортировки и оставить в покое Array.prototype.sort? Даже готовые модули есть, например www.npmjs.com/package/stable

Якщо можеш — протесть ще початковий варіант (там де 10к) коли спочатку порівнюють по імені (з localeCompare) і тільки потім по віку, а не навпаки — реально цікаво.

Первый метод выдает всё так же около 100 опс/с, второй немного ускорился

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node -v
v14.0.0
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.42 ops/sec ±0.34% (269 runs sampled)
Method 2 (1 sort call) x 144 ops/sec ±0.41% (277 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.52 ops/sec ±0.22% (268 runs sampled)
Method 2 (1 sort call) x 146 ops/sec ±0.24% (278 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 100 ops/sec ±0.21% (269 runs sampled)
Method 2 (1 sort call) x 145 ops/sec ±0.53% (278 runs sampled)
Fastest is Method 2 (1 sort call)
Але stable sort тобі точно потрібен на фронт-енді коли ти відображаєш якусь таблицю, де можна сортувати натиснувши по стовпцю. Зі stable sort’ом користувач може відсортувати таблицю по двох полях просто клікнувши по імені, а потім по віку. Без stable sort’у всю таблицю буде повністю перетрушувати — не зручно, йопт.

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

//method-3.js
const compare = (a, b, direction, type) => {
  switch (type) {
    default:
    case "string": {
      return direction === "asc" ? a.localeCompare(b) : b.localeCompare(a);
    }

    case "number": {
      return direction === "asc" ? a - b : b - a;
    }
  }
};

const createSortFn = (sortRules = []) => {
  return (a, b) => {
    for (const { field, direction, type } of sortRules) {
      if (a[field] !== b[field]) {
        return compare(a[field], b[field], direction, type);
      }
    }

    return 0;
  };
};

module.exports = (entries, sortRules = []) => {
  return entries.sort(createSortFn(sortRules));
};

Вызов:

method3(
  [...people],
  [
    { field: "name", direction: "asc", type: "string" },
    { field: "age", direction: "desc", type: "number" },
  ]
);

Правда скорость такого решения уже меньше чем 2 сортировки:

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.11 ops/sec ±0.39% (268 runs sampled)
Method 2 (1 sort call) x 137 ops/sec ±0.18% (282 runs sampled)
Method 3 (1 sort call, same rules as M1 and M2) x 70.29 ops/sec ±0.44% (268 runs sampled)
Method 3 (1 sort call, name asc, age desc) x 68.95 ops/sec ±0.14% (266 runs sampled)
Fastest is Method 2 (1 sort call)
gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls) x 99.15 ops/sec ±0.16% (268 runs sampled)
Method 2 (1 sort call) x 136 ops/sec ±0.45% (282 runs sampled)
Method 3 (1 sort call, same rules as M1 and M2) x 70.29 ops/sec ±0.41% (267 runs sampled)
Method 3 (1 sort call, name asc, age desc) x 68.38 ops/sec ±0.25% (265 runs sampled)
Fastest is Method 2 (1 sort call)


То ли из-за лишнего свича, то ли из-за for of. Но если очень нужно, то можно

Стоп, я не про то. Я про то, що треба знати що таке stable і що таке unstable сортіровки. Чому? Бо юзери очікують що якщо клікати по стовпцях буде stable.

Стосовно бенчмарків я трохи заплутався. Для 2х сортувань (практично) пофіг порядок сортування (ім’я, вік) чи (вік, ім’я) — тут всьо ясно, тут у тебе 100 ops/sec (10мс). А от якщо ти сортуєш одним компаратором, то у тебе трохи дивні результати.

Тіпа (ім’я, вік) повинно бути сильно повільніше, а не швидше за (вік, ім’я), бо в (вік, ім’я) ти викликаєш дорогу localeCompare тільки коли дешеве порівняння віку сказало що вони рівні; а от в (ім’я, вік) тобі завжди прийдеться дорого порівнювати імена і тільки у разі рівності дешево порівняти числа (вік).

Тут я подумав що є ще одна проблема — у тебе порівняння рівності імен буде дуже ефективним, бо якщо вони вказують на одну і ту ж строку, то далі можна не порівнювати.

Можеш при побудові основного масиву зробити щось тіпа

name: names[Math.floor(Math.random() * names.length)].clone()
і знову протестувати 2 сорт функції: (ім’я, вік) і (вік, ім’я)?
Я про то, що треба знати що таке stable і що таке unstable сортіровки

Если программист не знает про стейбл сортировку и её свойства (или плохо знает), он скорее сразу станет писать ту функцию-компаратор, которая сортирует по нескольким полям.

Если знает про стейбл сортировку, но не знает что в жс сортировка не стабильна — узнает когда увидит как оно работает в браузере. Или куа заметит. Или пользователи (но кто ж виноват что ни код-ревью, ни тестирование в конторе не налажено)

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

Тіпа (ім’я, вік) повинно бути сильно повільніше, а не швидше за (вік, ім’я)

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

name: names[Math.floor(Math.random() * names.length)].clone()

Строка в жс — простой тип, передается по значению, копируется простым присваиванием. То же самое касается типов boolean и number. По ссылке передаются массивы, хешмапы, объекты кастомных классов. И клонирования из коробки (.clone()) нет — используются или фокусы с es6 (хорошо подходят для shallow copy), либо сторонние библиотеки / собственные кастомные методы (для deep copy).

Вот со случайными именами:

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js
Method 1 (2 sort calls, age asc, name asc) x 46.36 ops/sec ±0.51% (256 runs sampled)
Method 1 (2 sort calls, name asc, age asc) x 46.79 ops/sec ±0.60% (256 runs sampled)
Method 2 (1 sort call, age asc, name asc) x 90.79 ops/sec ±0.34% (273 runs sampled)
Method 2 (1 sort call, name asc, age asc) x 51.16 ops/sec ±0.21% (261 runs sampled)
Method 3 (1 sort call, age asc, name asc) x 53.08 ops/sec ±0.34% (263 runs sampled)
Method 3 (1 sort call, name asc, age asc) x 38.23 ops/sec ±0.20% (262 runs sampled)
Fastest is Method 2 (1 sort call, age asc, name asc)

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

Генератор:

const people = [];

const makeAName = (length) => {
  const letters = "qwertyuiopasdfghjklzxcvbnmйцукенгшщзхъфывапролджэячсмитьбюіґїє".split(
    ""
  );
  const name = [];
  for (let i = 0; i < length && i < letters.length; i++) {
    let letter;
    while (!letter || name.includes(letter)) {
      letter = letters[Math.floor(Math.random() * letters.length)];
    }
    name.push(letter);
  }

  return name.join("");
};

for (let i = 0; i < 10000; i++) {
  people.push({
    name: makeAName(1 + Math.floor(Math.random() * 20)),
    age: Math.floor(17 + Math.random() * 70),
  });
}

Дякую. Але давай глянемо на (name asc, age asc):

Method 1 (2 sort calls, name asc, age asc) x 46.79 ops/sec ±0.60% (256 runs sampled)
Method 2 (1 sort call, name asc, age asc) x 51.16 ops/sec ±0.21% (261 runs sampled)
Method 3 (1 sort call, name asc, age asc) x 38.23 ops/sec ±0.20% (262 runs sampled)

В чому різниця між метод 2 і метод 3? Чому метод 1 швидше за метод 3?

Я там выше кидал код — третий метод принимает массив с правилами сортировки, и динамически создает компаратор, который к тому же вынужден ходить по массиву с правилами

А, поняв. Ну в любому випадку.
Метод 1 — 21.3мс
Метод 2 — 19.5мс
Щось всього лиш на 9% швидше ;)

І, до речі, все-таки (age, name) сильно швидше за (name, age), а не так як ти писав раніше ;)

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

Не було б. Ти імена б отримував з бек-енду і під два ідентичних імені у тебе було б два різних об’єкти. Тобто node.js не могла б під капотом просто взяти і порівняти вказівники і побачивши що вони однакові сказати що об’єкти рівні.

І взагалі localeCompare найдовше працюватиме саме на однакових іменах, записаних в різних об’єктах — це ж треба по абсолютно всіх буквах пройтись щоб сказати що вони рівні.

Ти імена б отримував з бек-енду і під два ідентичних імені у тебе було б два різних об’єкти.

При чем здесь объекты? Я же писал,

Строка в жс — простой тип, передается по значению, копируется простым присваиванием.

Нету там указателей никаких, жс сравнивает их всегда по значению

Нету там указателей никаких, жс сравнивает их всегда по значению

ніт.

зроби щось таке

a = ""
b = ""
for (int i = 0; i < 1000000; i++) {
  a += '$'
  b += '$'
}

і забенчмарч localeCompare(a, a) і localeCompare(a, b)

Это уже пустой разговор. Я знаю как себя ведут базовые типы в жс и что передается по ссылке, а что — по значению.

Я знаю как себя ведут базовые типы в жс и что передается по ссылке, а что — по значению.

По-ходу не знаєш :).

function f(a, b) {
    a.localeCompare(b);
}

let a = "", b = "";
for (let i = 0; i < 10000000; i++) {
    a += '$';
    b += '$';
}
let c = a;

for (let j = 0; j < 1000; j++) {
    f(a, b);  // !!!
}

Варіант f(a, c) буде практично миттєвим, а f(a, b) — ні.

Чувак, ты гонишь, прекращай. Давай ты не будешь мне рассказывать как работает JS, а я не буду тебе рассказывать как работает C++

Тобто, по-твоєму, буде однаково по часу?

Якщо вважаєш, що так, то давай заб’ємось на пиво?

Все строки в твоем коде являются примитивами, а не объектами. То о чем ты говоришь актуально только для объектов. Возможно, если бы ты создавал строки как a = new String(""), ты был прав. Но не в этом случае.

Так давай без демагогії. Різниця в часі роботи між f(a, c) і f(a, b) буде чи ні?

Демагогия — это сводить разговор от изначальной проблемы (ой, в жс нет стэйбл сорта, как же без него?!) к скорости сравнения строк. Я тебе без демагогии объяснил что примитивы всегда копируются.

Вміст всіх трьох строк (a, b, c) ідентичний: 10 мільйонів знаків $. Якщо всі змінні копіюються, то час виконання a.localeCompare(b) і a.localeCompare(c) буде однаковий чи ні?

Ти можеш, заради Бога, нарешті сказати «так» — (час виконання буде приблизно однаковий) чи «ні» (час виконання буде неоднаковий)?

Я не на полиграфе чтобы отвечать да или нет

Короче, якщо ти вважаєш що «так» (час роботи буде однаковий), то ти абсолютно не правий. І відповідно давай поскромніше, а не як тут:

Это уже пустой разговор. Я знаю как себя ведут базовые типы в жс и что передается по ссылке, а что — по значению.

— ні, не знаєш

і тут:

Давай ты не будешь мне рассказывать как работает JS, а я не буду тебе рассказывать как работает C++

— ні, не треба мені (та і комусь іншому) про JS розказувати

Короче, якщо ти вважаєш що «так» (час роботи буде однаковий), то ти абсолютно не правий

Допустим, я не прав. Так и что? Это сделает как-то 2 вызова сортировки более быстрыми, чем один?

Допустим, я не прав.

Що значить допустимо? Ти досі не визнаєш що ти неправий?

Так и что?

Ну так трохи іронічно, що в темі «Hard skills», де всі обговорюють що робити з повальною некомпетентністю ти двічі підряд залажав в досить базових речах, не находиш? Ну фіг би з ним, якби ти нормально до цього поставився — може навпаки б щось нове для себе дізнався в цьому форумному срачі. Так ти ж залупився, що не мені, С+±овому холопу, тебе, сонцеликого JS-ника вчити.

— Папа, что такое «некомпетентность» и «безразличие»?
— не знаю, сынок, не разбираюсь я в этом, да и мне собственно по***.

В зеркало глянь и то же скажи что написал.

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

Ізначально ти зморозив єрунду про О-нотацію. Потім ти привів хворий на голову бенчмарк. Коли тобі почали вказувати на всі проблеми в твоєму коді, ти почав залуплятись:

Это уже пустой разговор. Я знаю как себя ведут базовые типы в жс и что передается по ссылке, а что — по значению.

і

Чувак, ты гонишь, прекращай. Давай ты не будешь мне рассказывать как работает JS, а я не буду тебе рассказывать как работает C++
Короче, якщо ти вважаєш що «так» (час роботи буде однаковий), то ти абсолютно не правий. І відповідно давай поскромніше, а не як тут:

Какой поинт ты пытаешься доказать? Строка лежит в куче, в переменной — ссылка на эту кучу. Метод, который сравнивает строки, сначала оптимистично сравнивает ссылки, если они равны, то строки равны. В противном случае, идет символ за символом.

github.com/...​s/builtins-string.cc#L160

Какое отношение это имеет к сортировке?

Я теж глянув що там «під капотом» перед тим як влізати в спор :). На кону ж пиво, як-не-як.

Какой поинт ты пытаешься доказать?

Що Геннадій плутає грішне з праведним.

Какое отношение это имеет к сортировке?

Це має відношення до того говнокоду, який Генадій написав був для якоби порівняння сортіровок. Його перша версія ( dou.ua/...​rums/topic/31634/#1959993 ) мала масив з 27 імен. Далі він створює масив з 10к елементів, де кожен елемент є копією одного з цих 26 імен (на 27ий він забиває, але то окрема розмова), але на аргумент того, що велика частина порівнянь просто буде short-circuit я отримав у відповідь:

Это уже пустой разговор. Я знаю как себя ведут базовые типы в жс и что передается по ссылке, а что — по значению.

... і потім ще:

Чувак, ты гонишь, прекращай. Давай ты не будешь мне рассказывать как работает JS, а я не буду тебе рассказывать как работает C++
Це має відношення до того говнокоду, який Генадій написав був для якоби порівняння сортіровок. Його перша версія ( dou.ua/...​rums/topic/31634/#1959993 ) мала масив з 27 імен. Далі він створює масив з 10к елементів, де кожен елемент є копією одного з цих 26 імен (на 27ий він забиває, але то окрема розмова), але на аргумент того, що велика частина порівнянь просто буде short-circuit

Часть будет short-circuit, но как я вижу, оба теста используют один и тот же .localeCompare. Т.е. если особенность инпута позволяет сравнивать его быстрее, то это одинаковым образом должно повлиять на оба теста, нет?

велика частина порівнянь просто буде short-circuit

Если у него 2726 разных имен, то только 1/26 сравнений будет short-circuit, что далеко не «большая часть»

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

Чувак, ты гонишь, прекращай. Давай ты не будешь мне рассказывать как работает JS, а я не буду тебе рассказывать как работает C++

Не знаю как насчет хард скилз, но с софт скилз есть проблемы с обеих сторон стора.

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

Ні. Глянь ще раз на тести. В tuple-компараторі він спочатку порівнює вік, і тільки якщо вік співпадає, то тільки далі порівнюються строки. Відносно дороге порівняння строк буде тільки в 1 з 70 випадків.

В більш правильному тесті, де порівнюють різні строки і сортується спочатку за name а потім за age різниця виявилась ~9%:

Method 1 (2 sort calls, name asc, age asc) x 46.79 ops/sec ±0.60% (256 runs sampled)
Method 2 (1 sort call, name asc, age asc) x 51.16 ops/sec ±0.21% (261 runs sampled)

Коли Генадію сказали

І, до речі, все-таки (age, name) сильно швидше за (name, age), а не так як ти писав раніше ;)

він взагалі якось лажово відповів:

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

що потягнуло за собою нові питання. Просто доволі очевидно, що найгірший випадок для localeCompare це коли строки однакові, але реальні дані живуть по різних адресах — тоді прийдеться перелопачувати всі букви обидвох строк. І якщо вже сильно говорити про «реальні задачі», то однакові імена прийшли б в json’і тіпа такого ["гена", "гена", "гена"] і не зважаючи на те, що строки рівні я чомусь на 99% впевнений, що json-парсеру абсолютно по*** і він покладе їх по різних адресах, тобто якраз найгірший для localeCompare випадок.

Власне я про це і писав:
dou.ua/...​rums/topic/31634/#1960538

Але Гені хоч в очі сси:
dou.ua/...​rums/topic/31634/#1960544

Ти імена б отримував з бек-енду і під два ідентичних імені у тебе було б два різних об’єкти.

При чем здесь объекты? Я же писал,

Строка в жс — простой тип, передается по значению, копируется простым присваиванием.

Нету там указателей никаких, жс сравнивает их всегда по значению

Воу ... ну і тут вже пішло-поїхало. Залуплятись так залуплятись.

Не знаю как насчет хард скилз, но с софт скилз есть проблемы с обеих сторон стора.

про це в окремому топіку — я в такі не залажу :)

Ні. Глянь ще раз на тести. В tuple-компараторі він спочатку порівнює вік, і тільки якщо вік співпадає, то тільки далі порівнюються строки.

да, не заметил

Власне йому ж сказали навіщо stable sort — щоб юзер міг посортувати таблицю по (A, B) клікнувши спочатку по стовпцю B, а потім по стовпцю A. Але Гена буде або якісь костилі городити, або взагалі запрос на бекенд слати.

Костыли? Я тебе показал что при любых входных данных костыли быстрее твоего православного метода с двумя стейбл сортировками. А ты приебался к сравнению строк, которое вообще к вопросу относится опосредованно

Костыли?

Да, бля, саме костилі. Колись у нас була така переписка:

Але stable sort тобі точно потрібен на фронт-енді коли ти відображаєш якусь таблицю, де можна сортувати натиснувши по стовпцю. Зі stable sort’ом користувач може відсортувати таблицю по двох полях просто клікнувши по імені, а потім по віку. Без stable sort’у всю таблицю буде повністю перетрушувати — не зручно, йопт.

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

І далі костиль така ляля:

//method-3.js
const compare = (a, b, direction, type) => {
  switch (type) {
    default:
    case "string": {
      return direction === "asc" ? a.localeCompare(b) : b.localeCompare(a);
    }

    case "number": {
      return direction === "asc" ? a - b : b - a;
    }
  }
};

const createSortFn = (sortRules = []) => {
  return (a, b) => {
    for (const { field, direction, type } of sortRules) {
      if (a[field] !== b[field]) {
        return compare(a[field], b[field], direction, type);
      }
    }

    return 0;
  };
};

module.exports = (entries, sortRules = []) => {
  return entries.sort(createSortFn(sortRules));
};

Правда чомусь цей костиль уже приторможує:

Правда скорость такого решения уже меньше чем 2 сортировки

Ну нічо, я впевнений що в npm’і знайдеться потрібна тобі функція — аби самому нічого не писати і зазря голову не напрягати. Також всі JS програмісти знають, що в чужому ніколи немає помилок.

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

Ояєбу.

Ну я понял, что код читать — не твоё.

Звідки ти це поняв?

Главное ж биг о

Знаєш, якщо Біг-О погане, то все інше до сраки. Ух йопт — не знаєш же — з цього ж вся ця заваруха ж почалась була, блѣ.

[...] объём гоняемых по сети данных — кому оно там нужно.

Як ти об’єм ганяємих даних по сєті собі в плюси записав? Чи не ти хотів робити новий запит по кожному кліку юзера по стовпцю?

В общем случае, считаю не очень хорошей идеей сортировать на фронте

... вроді би ж ти, нє? А ну да, це ж сортіровка — це вже занадто багато вимагати від фронтендщиків.

искать мелочи, к которым можно было бы придраться

Тут та ж проблема що і раніше — ти ж не знаєш, що можна краще, і вперто відказуєшся щось нове вчити. Але ж да, навіщо тобі мене, якогось задрипаного C++овика, слухати?

Бо тільки інші гуру джаваскрипта мають право тобі сказати, що не треба провіряти direction === "asc" в кожному кейсі твого compare, а достатньо результат інвертувати і код вже сильно спроститься:

const compare = (a, b, type) => {
  switch (type) {
    default:
    case "string": {
      return a.localeCompare(b);
    }

    case "number": {
      return a-b;
    }
  }
};

const createSortFn = (sortRules = []) => {
  return (a, b) => {
    for (const { field, direction, type } of sortRules) {
      if (a[field] !== b[field]) {
        const cmp = compare(a[field], b[field], type);
        return direction === "asc" ? cmp : -cmp;
      }
    }

    return 0;
  };
};

Та і switch треба було б убрати з самої частовизиваємої функції в сортіровці, хоча що я плюсовий бидлан можу знати про JS:

const createSortFn = (sortRules = []) => {
    const all_cmps = [];
    for (const { field, direction, type } of sortRules) {
      let cmp
      if (type === "number") 
        cmp = (a, b) => a-b; else
        cmp = (a, b) => a.localeCompare(b);
      if (direction !== "asc")
        cmp = (x, y) => -cmp(x, y);
      all_cmps.push({field, cmp});
    }
      
    return (a, b) => {
      for (const {field, cmp} of all_cmps) {
        if (a[field] !== b[field])
          return cmp(a[field], b[field]);
      }
      return 0;
    }
}

(якщо є описки, звиняйте — писав прямо в браузері)

Если бы ты потестил, то ты бы конечно знал что замена switch на if там кардинально ничего не меняет. Но ты ж спешишь писать прямо в браузере. Да и вообще, как оптимизировать 3й метод я писал 6 дней назад, с результатами запуска тестов.

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

Як ти об’єм ганяємих даних по сєті собі в плюси записав? Чи не ти хотів робити новий запит по кожному кліку юзера по стовпцю?

О чем говорить с человеком, который не понимает что в базе может и несколько сотен тысяч объектов оказаться.

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

Забув відповісти на

Какой поинт ты пытаешься доказать?

Пробую довести, що один код буде повільніший, а інший — швидший. Конкретно те, що a і c вказують на один і той же участок пам’яті і тому a.localeCompare(c) буде феноменально швидким.

Мене просто прикалує як половина присутніх тут сидить і на серйозних щщах відповідає на

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

абсолютно не усвідомлюючи, що вони і є тим «толстым школьником против якодзуны».

То ли из-за лишнего свича, то ли из-за for of. Но если очень нужно, то можно

Оптимизировать 3й метод можно так:

const compare = (a, b, direction, type) => {
  switch (type) {
    default:
    case "string": {
      return direction === "asc" ? a.localeCompare(b) : b.localeCompare(a);
    }

    case "number": {
      return direction === "asc" ? a - b : b - a;
    }
  }
};

global.multiFieldSort = {
  compare,
};

const createSortFn = (sortRules = []) => {
  return new Function(
    "a",
    "b",
    `
    ${sortRules
      .map(
        ({ field, direction, type }) => `
    if (a["${field}"] !== b["${field}"]) {
      return global.multiFieldSort.compare(a["${field}"], b["${field}"], "${direction}", "${type}");
    }
    `
      )
      .join("")}
    return 0;
    `
  );
};

module.exports = (entries, sortRules = []) => {
  return entries.sort(createSortFn(sortRules));
};

Такая оптимизация требует осторожности в плане безопасности (валидировать и очищать sortRules, если там есть пользовательский ввод), но скорость работы сильно улучшается (10к объектов, в поле name — рандомная строка, таким образом вероятность повторных имен низкая):

gennady@gennady-ubuntu-pc:/data/projects/js-sort-test$ node index.js 
Method 1 (2 sort calls, age asc, name asc) x 46.46 ops/sec ±0.64% (257 runs sampled)
Method 1 (2 sort calls, name asc, age asc) x 46.62 ops/sec ±0.22% (256 runs sampled)
Method 2 (1 sort call, age asc, name asc) x 90.10 ops/sec ±0.34% (272 runs sampled)
Method 2 (1 sort call, name asc, age asc) x 50.60 ops/sec ±0.28% (261 runs sampled)
Method 3 (1 sort call, age asc, name asc) x 87.02 ops/sec ±0.35% (270 runs sampled)
Method 3 (1 sort call, name asc, age asc) x 50.70 ops/sec ±0.31% (261 runs sampled)
Fastest is Method 2 (1 sort call, age asc, name asc)

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

Аноним слился в унитаз. Ясно, понятно.

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

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

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

клиент согласен на все мои условия лишь бы я остался

$10K уже дают?

Ну напиши статью как с синьорской 5К прыгнуть на 10К и сколько для этого нужно времени.

Жирных мест много, а вот кандидатов которые их могут занять почти нет

Ну скинь линк на репу

Мой опыт говорит что на доу этого делать не стоит по крайне мере не анонимно

Так делай анонимно — тут анонимы темы на форуме заводят, вроде. Или с новой учетки.

В целом можно, только надо некоторые факты по менять чтобы не деанонимизировали. Спасибо за идею!

Можно платный курс создать.

Предвкушаю прям видео, где типочек разежжает на ламборгине в дубаях, вещает о том как несколько лет назад он был простым гребцом ездил в мтеро и питался мивиной. Но однажды ему повезло и он выучил основы реактивного блокчейн микро солид дизайна.И сразу дела пошли вверх, ибо код оказался на 20% меньше, и короче, а главное производительность кода увеличелась на целых 3 О(NLogN)!
К гребцу выстроилась очередь из клиентов готовых платить любые деньги. И теперь он живет в Дубаях, ездит на ламборгине и насобирал на стабильное будущее чтобы не париться совсем.
И чисто из альтруистичных побуждений, всего за 3.5к $ в месяц, готов вести курс о реактивно блокчейн микро солид дизайне.

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

Ну напиши статью как с синьорской 5К прыгнуть на 10К и сколько для этого нужно времени.

10К — это всего лишь 50/час х 200 часов. А 50/час для «тру синьора» — это днище, но никак не потолок.

Ну возьми ты напиши инструкцию на 100/час

На словах ты Лев Толстой, а на деле — не смог ответить на простой вопрос и понтуешься под анонимным профилем

Якщо сортировщику дають 10к, то він напевно сортує щось важливе. Наприклад трупи попередніх сіньйорів з проекту!

Наприклад трупи попередніх сіньйорів з проекту!

Ничего там сортировать не надо, придет гарбедж коллектор и всех утилизирует :-)))

в джс у сорта больше проблема чем не ясное Big O, стандартом не гарантируется что sort будет stable, как и метод сортировки в целом

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

Вот несколько популярных языков. Как видите. нет общепринятого стандарта stable/unstable

C#: Array.Sort, List.Sort unstable

Java Array.sort stable/unstable

Python: sort: stable

Ruby: sort: unstable

Go: sort: stable/unstable

Rust: Vec.sort_unstable: unstable

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

А ты не думай, а читай документацию :)

Я читаю и знаю, просто у других какая разница, а потом они с круглыми глазами смотрят на баги

Here. I’ve fixed...

академічно освіченому фахівцю в недосяжному ідеалі може бути закладено ще в базу.

Розповісти про складність в термінах О-нотації, та перейматися складністю у повсякденному девелопменті — дві принципово різні речі. Ймовірність, що тіло тупо фігачитиме по 5 вкладених лупів (про рекурсію взагалі промовчу) на заздалегіть невизначених об’ємах даних, корелює із вмінням «апоговоріть» про О-нотацію трохи рідше, ніж ніколи.

І від «говорунів» досить часто чув щось накшталт: «сучасне залізо тягне», «час роботи програміста дорожчий, ніж +1(101) інстанс», та інше бла-бла-бла, від якого вуха в трубочку згортаються, коли розумієш, що людина не усвідомлює, і жоден академічний багаж не допоможе їй усвідомити, що умовний мільярд ітерацій по наносекунді кожна вже складаються у досить істотну та відчутну таку собі цілу секунду.
Це як із особистими фінанансами. Мало хто справді щиро хоче жити від зарплати до зарплати, і тим паче, щоб так — до смерті. Але, за інших рівних умов, в когось виходить зробити «подушку» та правильно вправлятися власним бюджетом, а хтось розводитиме хвілософію про «відкладене життя», не забуваючи при цьому періодично бігати позичати в перших, якщо раптом в місяці, О УЖОС, випадає 31 день.

Шо за задачи такие страшные у вас по работе, что

по 5 вкладених лупів

?

Гамнокод :-) Понабирают по литкоду...:-)

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

Но просто как-то не припомню ни одной задачи, которая при решении «в лоб» требовала бы 5 вложенных циклов

Генетическая оптимизация со сложной фитнесс-функцией. Была у меня как-то задача по оптимизации такого кода, изначально написанного математиком)

5 фор лупов один в другом подряд — таки редкость. Однако на обходе какогонить дерева насверстать рекурсию рекурсий у которой сложностьне то что експотенциальная, а факториальная, (а иногда и значительно хуже en.wikipedia.org/wiki/Ackermann_function) с последующим выпилом по стек оверфлоу или оут оф мемори — легко вааще.

А вот нефиг юзать рекурсию, если не ограничена глубина.

Начал за здравие а кончил за упокой, какая связь между сложностью и фин подушкой?

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

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

Кстати упомянтуая тобой рекурсия, это сразу просадка по памяти, ;-)

умовний мільярд ітерацій по наносекунді кожна вже складаються у досить істотну та відчутну таку собі цілу секунду

Это что-то сродни «если не пить кофе в кофейне, можно за год сэкономить ххх денег».

Кстати, мне опытный американский технический менеджер (выше меня по должности) говорил что-то из ряда «у нас все равно мощный сервер» когда я переживал что импорт данных из файла в одном потоке с API может быть плохой идеей в долгой перспективе (потому что такой подход отлично работает только с маленькими файлами, а пользователям рано или поздно взбредает в голову идея импортнуть большой).

щоб не запіндюрити квадратичну складність для потенційного хайлоаду

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

Проект может тупо не дожить до таких данных.

В більшості випадків то все нікому не потрібна лабуда. І не тому що є Array.sort, а тому що задача сортування виникає досить рідко в нетривіальних місцях, які не покриті фреймворками. Якщо в тебе 100 объєктів, абсолютно байдуже, яким алгоритмом ти сортуєш.

Але все міняється, коли ми говоримо про embedded. Зрозуміло, там треба знати оптимізацію. Але це теж не надовго, ресурси стрімко дешевшають.

Зрозуміло, там треба знати оптимізацію. Але це теж не надовго, ресурси стрімко дешевшають.

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

А сложность задач — постоянно растёт...

А сложность задач — постоянно растёт

Скорее растёт глупость в проектировании. И предела ей нет и не предвидится.

Скорее растёт глупость в проектировании.

Сложность задач обуславливается заказчиками — не исполнителями. Т.о. вещь достаточно объективная.

Сложность реализации тоже растёт. Но то другое...

Ага, через «универсальный интерфейс»

И как же Андроид на джаве бегает на мобилках?
И почему ios его еще не вытеснил?
А Qt не вытеснил ios?

И как же Андроид на джаве бегает на мобилках?
И почему ios его еще не вытеснил?

В Андроидах на мобильниках начали с чего? С жабы, как «first citizen language».

А закончили чем? Правильно, выпуском NDK. Потому (пока) эппл и не вытеснил.

Ну вот жаба медленнее С++ (потому что не может расположить данные в памяти подряд, и проигрывает по работе с кешем процессора). А С++ обычно медленнее С (потому что сильно много динамики). Так почему C++ не вытеснил жабу с мобилок?

Так почему C++ не вытеснил жабу с мобилок?

Вытеснил. В эппле жабы нет. В андроидах скоро не останется тоже (останется — лишъ для самых примитивных поделок).

П.С. А что такое, по твоему, Андроид? Одна из разновидностей Линyксa. Как и эппло-осы — разновидность Юникса (дарвин). Т.е. жаба в андроиде — это так, сбоку припёка.

Там оконная система на джаве. И у всех приложений она. И ничего — батарейки и проц не влияют на выбор между Андроидом и Эпплом.

Там оконная система на джаве. И у всех приложений она.

Реализация написана на C. Протокол — X Window.

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

Любое приложение на джаве.

Любое приложение на джаве.

В Андроиде? Фигню пишешь.

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

Потому для многих контекстов утверждения что с++ быстрее Джавы становится не верным

Он неверен лишь для джунов, неведающих о «плэйсмент нью».

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

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

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

селява)

пока у тебя примитивом данные описываются

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

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

Координаты, например, вполне можно разложить на массив иксов. и массив игреков, етц.

И вот это убьет кеш.

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

Тогда пусть будут W и Z!

сравнивали решение их задачи на с++ с кудой

Это как???
docs.nvidia.com/...​gramming-guide/index.html

Ты сам понимаешь, что пишешь?

Может они сравнивали одинаковый код на CPU и GPU. Так в этом случае все ясно по-определению (принципу работы этих вычислителей). Если задача допускает массовый параллелизм, то на GPU будет выполняться быстрее, чем на CPU, если не позволяет, то будет медленнее.

Код там был нифига не одинаковый, хотя и решающий одну задачу.

Во второй версии тупых new на каждый нейрон в сетке никто не городил

Т.е. по сути сравнивали член с пальцем и сказали, что палец лучше для игры на рояле. Т.е. сказали, что их реализация на С или С++ на CUDA на GPU работает быстрее, чем другая их реализация на С++ неизвестно где.
С++ сравнивать с CUDA — это как сравнивать слона с кораблем.

Но если тебе интересно. То из всех реализаций maskRCNN, что я нашел пока на 6 ядерном интеле на 4400 работают приблизительно столько же времени, сколько и на 1080.
keras, pytorch на GPU столько же времени, сколько openvino на CPU.
Вот такая лажа.

А Qt не вытеснил ios?

хер с пальцем, Денис Ж)

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

Тут як раз навпаки. Семеро пашуть, роблять те, що працює, використовується, приносить корись і гроші. А двоє руками машуть — тдд, ддд, рефакторинг, функціональне програмування... )))

А потім семеро попадають в ентерпрайз, кожен пише по-своєму, а зібрать докупи оте написане не можуть. Бо не знають, як, і нема великої картини.

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

штампують копіпастом по вже заданій архітектурі і конвенціям

 А хто задасть архітуктуру? Якщо взяли сімох робити ентерпрайз з нуля?

вказати світу, що це лайно, треба переписати

 А от за таке звільняють.

тупе слідування останнім модним бест практикам

Без цього не проходиш співбесіду.

А хто задасть архітуктуру? Якщо взяли сімох робити ентерпрайз з нуля?

З docs.microsoft.com візьмуть стаб і вперед

І воно фіг заведеться для ентерпрайза з купою відділів, складів, бюрократії та документооборота.
Та навіть SOA зробить — фіг. На папері — красиво, а в реальності — не літає.

о что западные коллеги лучше и так понятно — это общая культура труда.

Ничем не лучше, на западе тож свой «совок»

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

а какая-то их разновидность которая у нас редко встречается

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

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

Если бы всем нужен был перформанс — то до сих пор писали бы на С.

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

Так вот у нас такие сильные идеи и решения почему-то не рождаются.

Есть ли в Украине мультимиллиардный бизнес(яндекс), зависящий от колоночной субд(кликхаус), который готов бахнуть неопределенное количество денег в течении неопределенного отрезка времени на обучение студентоты в КПИ(МФТИ) для того, чтобы потом нанять эту студентоту и поставить задачу написания сильного решения?

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

Когда у задротов есть деньги, чтобы пять лет сидеть в гараже и писать ОС — то они и двигают отрасль. А когда задроты голодные — то они продаются на галеру, и сил кого-то куда-то двигать не остается.

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

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

Ну хотя бы по килобаку в месяц на 5 лет написания ОС

У нас где-то 150к в айти и рядом, из них 20 процентов относительно вменяемых людей из них 20% теоритически могли бы скидываться скажем по 10 баксов в месяц. 150000 * 0.2 * 0.2 * 10 = 60 000. Из 60 человек хотя бы 5 что-то да придумают.

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

Если в стране африки получать на галере, скажем, 5к/месяц — а на жизнь тратить, скажем, 1к/мес. Сколько месяцев нужно отвеслать, чтобы потом 5 лет посвятить своему стартапу?

Это я к тому, что все материальные возможности в наличии. Не достаёт лишь желания.

П.С. Впрочем, подозреваю, умения не достаёт тоже. Скажем, многие ли из галерных расскажут о том, что такое «кэш-френдли»? А ведь это азы.

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

Кроме сбережений нужно ещё:

  • Большую веру в пользу стартапа и в то что он тебя потом будет кормить
  • Независимость не только тебя от других, но и других от тебя. Одно дело страдать самому, другое дело заставлять страдать семью

Содержателю может надоесть содержать куда раньше, чем закончатся личные сбежерения. :)

П.С. Почему, гэп? Стартап ведь. И артефакты останутся...

П.С. Почемуи, гэп? Стартап ведь.

Это уж зависит от нанимающих. Если встречаются заявления что пет-проекты не засчитываются в опыт, то и со стартапом так можно (он же пет-проект по сути)

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

Но мы-то не об этом...

чтобы потом 5 лет посвятить своему стартапу

 А потом жениться или рожать поздно будет. Или на море ехать — подставь сам.
Собственно, выбор между задротством и жизнью.

Посвятить 5 лет работе «на дядю» или те же 5 лет своему стартапу. В чём отличие для «жениться, рожать, море» и вот это вот всё?

В том, что работая на дядю у тебя остается пара килобаков в месяц на семью и на море.

В том, что работая на дядю у тебя остается пара килобаков в месяц на семью и на море.

Кто-то выбирает «низкие риски/низкое вознаграждение». Кто-то выбирает «высокие риски/высокое вознаграждание». Дело хозяйское...

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

Це глобальна проблема. Як напевно і решта тут описаних. А причина я думаю банальна — відсутність компетенції і реальних знань у більшості. В результаті є невеликий відсоток тих, хто дійсно розуміється в справі, і є більшість стада, яке лише повторює дії, з ненайкращою результативністю. І щоб перейти з категорії стада в категорію про, треба прикладати багато зусиль, і мати певні розумові здібності закладені на генетичному рівні. Знову ж, так є у всіх сферах людської діяльності. З простого — «задроти» і звичайні гравці в мультиплеєрних іграх. Де один задрот грає за половину команди, і може змінювати весь хід гри. Ми не рівні. Але ліваки хочуть нам втерти, що ми однакові.

Гуманитарий детектед

Все что ты описал можно сформулировать одной фразой — «отсутствие системы образования».

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

Мы в смысле 3.5 айтишника — никакие, мы в смысле общество — реформировать систему образования.

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

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

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

Я вам предлагал Минск, получилось бы 5. Правда нынче еще и развлечения предлагаются в виде бега с препятствиями.
Какие проекты вы можете презентовать, если либо на ардуинках страдаете (на большее денег нет) или для дяди пилите нечто по НДА?

В чатик добавилось человек 20-30, пообещали прийти 8, пришло 4 вместе со мной. Тут уже не до презентаций проектов, а просто за жизнь поговорили. По второму разу вообще никто не собрался.
Система образования пусть и не идеальная у нас все-таки есть

Я хотел написать опус на 10к символов в ответ на это вопиющее заявление, но нехватка гуманитарного образования не позволила мне этого сделать, возможно я таки заставлю себя и все таки напишу его в отдельной теме.
А пока мои доводы следующие:
Студент получающий ~1-1.5 к грн стипендии, поступивший в университет ради отсрочки от армии и выбравший ИТ специальность потому, что у него был неплохой балл по математике и это вроде как модно — не будет вгрызаться в научные дебри, из которых и выходят все эти инновационные штуки, а будет учить условный ангуляр,чтобы поскорее получить миску супа за 1.5 к баксов, а не давиться миской за 1.5 к гривен.

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

не будет вгрызаться в научные дебри, из которых и выходят все эти инновационные штуки

 Ну из каких научных дебрей вышел MS DOS, Windows, Linux?

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

Не нужно переживать, в Голландии все то же самое.

У девелоперов помоложе — хард скиллы. У тех, кто постарше — уже софт.

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

А вот и нет. Вакансий на 10000+ исчезающе мало

Хочется все-таки перейти от обсуждения проблемы курицы или яйца к плодотворной дебютной идее. 10к даже по мировым меркам сумма приличная, но если бы тут было достаточно достойных кандидатов то давали бы и куда больше. От вас совет сообществу куда рости на индивидуальном уровне был бы очень ценным.

Сообществу расти в сторону взятия работодателя за горло. Не интересный проект в дружной команде, а давай бабло, сука!

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

Проблема Индии в отсутствии знаний

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

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

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

Это слишком много для ответа в топике, скоро будет статья.

Ну, допустим, настолько, чтобы применить на практике и послать статью в журнал или выступить на конференции. Это будет относительно независимой оценкой.
Пример: Ctrl+F тут members.accu.org/...​ournal/overload_by_author Ignatchenko
А вот и сайтик автора с публикациями ithare.com
А вот и семитомник в краудфандинге и в печати ithare.com/...​ock-exchanges-in-between

Сообществу расти в сторону взятия работодателя за горло.

Говоришь как коммунист какой-то :-)

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

Не интересный проект в дружной команде, а давай бабло, сука!

А оно тебя бац и на мороз, капитализмъ же :-)

Только одно «но», я — фрилансер и на морозе уже.

Лол нет
10k это копейки в случае лоера или доктора в США

Ну так слушай, мне пофиг у кого сколько

Как же это произойдет, если спрос на более дешёвых только есть, пренебрегая любыми хард скилами?

Чушь. Спрос есть на тот товар, который нужен в данной местности (нужен включает и просто желание купить, пусть и внушенное).

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

1) Фрагментированность знаний

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

2) Отсутствие знаний основ компьютерных наук

Даже если их чел знал, то успешно забыл за ненадобностью в работе.

3) Поверхностное знание используемых библиотек, фреймворков и технологий

См пункт 1. После 20-ого фреимворка, както углубляться во внутрь, желание отпадатает напрочь, навсегда.

4) Остановка профессионального развития

Колбасят на том на чем нужно в текущее время в текущем месте.
ВО вторых какое развитие? Что нового за последние 50 лет придумали?
Мода туда сюда накакието свистелки перделки, и гумантарные подходы постоянно меняеццо. то в моде ооп и паттерны, то скрам, то солид, то тдд, то не в моде. А суть кодингу при этом вообще не поменялась.

5) Перегруженность устаревшими, спорными и даже ложными знаниями

Текущие «новые» знания точно также будут ложными через пару лет, так зачем гнаццо за автобусом ?

6) Оторванность от переднего края прогресса

Вот нехрен в свобдное время делать — гнаццо за передним краем прогреса очередного фреимворка, или нового ванаби базворда.

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

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

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

Как тебе Scala теперь? Имеешь на ней проекты\задачи?

скала умирает. На всю целую долину я нашел аж 5 стартапчегов котрые занимались серьйозной скалой с фп. И все они выкинули мое резюме в треш, даж не пообщавшись. Рынок понятнее некуда :-) А я уже давно снова на джаве снова пилю «круды».

понятно, спасибо)) мне было интересно узнать из первых рук, из окопов))

оно к тому и шло, и небезызвестный Брюс Эцкель (Thinking in Java) и бывший евангелист скалы, так и говорил лет 5 назад: «скала — это был эксперимент».
Потом Брюс ещё окормился на продвижении котлина, пылко его втюхивая, и с тем же результатом.
Фишки скалы\котлина методично всасывает Джава (уже блин пятнадцатая).

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

что ты сейчас думаешь про Джаву после Скалы?
Джава как функциональный язык состоялась или это иллюзия, то, что вкрутили в 8-ю. Типа, нате вам функциональщину, раз так просили.

Есть мнение: «Java 8 is far from being a functional language (and it will probably never be). »
dzone.com/...​-wrong-java-8-currying-vs

Есть мнение: «Java 8 is far from being a functional language (and it will probably never be). »

Ну естественно, между лямбдами и монадами большущая пропасть. С другой стороны, 90% пробывавших скалу монады так и не смогли осилить (многие вон вообще в го перешли), потому пытаться наваять побольше тру-функциональщины в джаву весьма сомнительное предприятие.

что ты сейчас думаешь про Джаву после Скалы?

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

Типа, нате вам функциональщину, раз так просили.

Ну это да. Лямбды есть ща вообще во всех современных языках (возможно даже в С++), еслибы они их не добавили — количество котлин вакансий сейчас былобы на порядок больше :-).
Вот джавовский 8 Стриминг — это какоето оч странное недоразумение. Оно сильно мороченное чтобы делать простые вещи аля фильтр\мап\редюс на небольшом списке. И при этом сильно простое для того чтобы делать полноценные стриминговые приложение. Ни туда не сюда карочь. Я ща на проекте юзаю акку ( doc.akka.io/...​am/stream-quickstart.html ), и не сказать что под джаву она прям уж очень сильно хуже чем под скалу. Но джунам, и привыкшим все писать олд-скул, она конечно мозг выносит.

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

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

Как и на старте — академический а потому маргинальный. У C++ помноженном на Haskell не может быть будущего в пром разработке. Мнение конечно не свежее,я его писал... году в 12ом? или 10ом? не помню точно, хайп стоял дикий, а по Clojure еще не было. Надо в свою трудовую биографию смотреть, когда это было...
Пришел к такому мнению после знакомства с Scala, рассматривал всерьёз для перехода на нее.

Важно другое — такое будущее у всего тру академичного.
Фундаментальные науки и инженерные ремесла -союзники а не конкуренты.

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

Что нового за последние 50 лет придумали?

Вот! И хрен кого убедишь перейти на новое.

Це «проблема» ІТ абсолютно всіх країн. Нічого унікально-українського в цьому немає.

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

Согласен! Лично меня очень напрягает, когда приходится работать с чем-то, что я не понимаю как работает «внутри». Приведу пример: вам нужно решить кубическое уравнение — можно взять учебник по математике и изучить или вспомнить все принципы решения уравнений начиная с простых и квадратных. А можно погуглить формулы, попробовать так-сяк и как только получилось считать что задача решена.
К сожалению современное ИТ всячески приветствует второй подход и не приветствует первый. Бизнесу нужен человек, который будет «решать бизнес-задачу» здесь и сейчас. Важно быстро нагуглить рабочее решение — а вникать в глубь некогда.
Отсюда, кстати, такое засилье фронтенд-фреймвоков. Вот например — работа с таймзонами. Эта задача непростая, но давно уже решена на многих платформах. И только для фронтенда абсолютно каждое приложение лепит свои функции, или использует разные фреймвоки, или вообще перегружает системные функции для работы с датой. И с этим всегда лезут баги!
Локализация, глобализация, аксесибилити, логирование — то же типичные задачи для которых, в нормальном мире, уже давно должно быть решение «из коробки»... но нет — в каждом приложении баги лезут и приходится забивать костыли.
Такой бардак был в промышленности деле был в 19 веке: каждый делал свои болты и гайки, свои инструменты, свои марки стали и т.д. Пока не ввели общемировые стандарты — и специальное образование для инженеров. Что бы инженеры знали что есть и как это использовать, а не придумывали «выточить поршень из капа», как мужики в гараже.

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

А може нам треба знаходити гроші на створення своїх стартапів? В Росії з’являються великі продукти не тому, що у них розумніше населення, а тому, що там велика популяція, і загальна економіка достатньо потужна, аби робити щось окрім як продаж тушок в аутсорсі закордон. І вже там де є продукти, заводяться і хороші інженери. Навпаки не може бути.

ЕПАМ уже крупнее многих заводов.

Зібрали з миру по нитці. Гадаю, Лінус Торвальдс не дуже в основах комп’ютер сайенс шарить.

Это почему ты так решил? :-) Мне интересно.

Тому, що він сидів за компом з 386 процом, і йому було дуже цікаво перевести його в захищений режим, і побачити, як перемикаються процеси, що виводять одночасно літери A і B на екран. Так само, як мені колись було цікаво вичитати ata паспорт диска, вивести щось через відеопам’ять на екран чи софтайсом якусь прогу навчити працювати без прив’язки до ключа. А не Кнутта дрочити (про якого я і не чув). І я думаю з Лінусом така ж історія.

чи софтайсом якусь прогу навчити працювати без прив’язки до ключа

бро
(пускає скупу сльозу)

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

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

Гы, вот поэтому у линукса до сих пор шедулер никакой %) Пластырь на патчах и патчи на пластырях.

линус не любит плюсы. это неспроста-ж. небось паттерны ниасилил.

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

Ну надо же было чем-то заменить разноцветных гномиков, набиваемых в боинги круглыми люками.

Какаято дурацкая мода на чисто алгоритмы пошла

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

Есть две проблемы : 1. чистые теоретики 2. чистые практики .
Первые — в основном в вузах (статья о них ниже), вторые — в бизнесе, причем топы ИТ-компаний не имет даже технического образования. Первые и вторые существуют в параллельных вселенных и считают друг друга проходимцами ;) habr.com/...​mpany/vdsina/blog/521224

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

WAT? Давно есть несколько (меньше 10) популярных библиотек, каждый привык к какой-то одной. Для меня это moment-timezone. Ещё Luxon пробовал, но там возможна поддержка не всех браузеров, поэтому на текущий момент moment-timezone является более безопасной опцией

WAT? Давно есть несколько (меньше 10) популярных библиотек, каждый привык к какой-то одной

Если вы работаете на энтерпрайз проекте, который пилят тысячи человек по всему миру — угадайте сколько из этих 10 будет использовано одновременно? Учитывая что каждый привык к своей.
Ну еще добавить что каждая команда привыкла к своим любимым фронтенд-фреймвокам: у одних Ангуляр, у других Реакт, у третьих Бэкбон, Нокаут а у кого-то еще куски JQuery и JQueryUI.
Естественно, галера продает клиентам только фулстек-синьоров (и что бы еще и тесты сами писали). Поэтому сегодня я гуглю как пофиксить Агуляр , а завтра — как Реакт. Если бы у меня было пару недель — я бы прочитал несколько умных книжек, понял чем они отличаются и как делать правильно... Но кто же на галере будет ждать 2 недели? Гугли костыли и лепи — мы ведь конкурируем с индусами, которые это очень хорошо умеют!

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

Потому что он привык (сначала было тяжело), ленивый и трусливый.

Подписаться на комментарии