LINUX.ORG.RU
ФорумTalks

Почему решая литкод ты никогда не станешь архитектором (но на самом деле никогда не хотел им быть)

 , , , опус,


7

2

Специальный выпуск для linux.org.ru.

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

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

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

Мне вспоминается старый-престарый эпизод моей жизни, как я еще будучи школьником выиграл олимпиаду по информатике. Задача была на поиск кратчайшего пути (пардон, точного условия уже не помню, это было давно и неправда). Грамотный программист быстро выдаст вам «правильное» решение O(N log N) по алгоритму Дейкстры. Но поскольку на тот момент я не знал алгоритма Дейкстры и не был грамотным программистом, то вместо «правильного» решения выдал асимптотику O(N), заэксплуатировав некоторые особенности конкретных условий той задачи.

И второй эпизод, современный. Меня выбесило одно из недавних моих собеседований: некая контора дала мне тестовую задачку, являющуюся также одной из фундаментальных задач, решаемых их продуктом. Мне просто забыли сказать, что «правильный» метод должен быть O(N^3), и я случайно потратил целый день на разработку метода O(N^2), который оказался настолько неожиданным для «сеньоров», что им понадобилась целая неделя для анализа моего решения на 500 строчек (inb4: фу-фу, лапшемес), а на собеседование со мной собрали всю верхушку — на минуту у меня сложилось ощущение, будто меня собеседуют в гугл, а не в местную помойку. Я не удивлюсь, если вся их шарашка уже работает над интеграцией моего метода, и в скором времени получит премию, мол «наш отдел провел тщательные исследования предметной области...», а тебе, мартыха, хрен с маслом. И это собравшееся начальство на собеседовании было серьезно намерено развести меня на решение еще одной важной для их помойки задачки. Большая часть их штата джуно-мидлов занимается обвязками-прокладками-интерфейсами-тестированием, короче говоря, теми задачами, под которые можно нанять горсть рабов с улицы хоть прям щас — но эти люди в жизни не смогут выдать оригинального решения, а только будут ждать команд сверху.

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

Что мы всё про меня да про меня. С точки зрения массовой индустрии Дуглас Крокфорд — посредственный программист, и в недавнем треде большое число отписавшихся доходчиво пояснило, почему это так. Да, подумаешь, он создал какой-то там JSON, на котором работает половина индустрии, а еще создал JSLint, который ведь оказался так себе и был вытеснен ESLint-ом, и вообще «я могу сделать лучше, просто оно мне не надо». Но печальная истина в том, что тысячи смузихлебов писали на JS безо всякого линта, и, я уверен, при возникновении онного долго противились новой технологии. Проходит время, и вот уже каждый школьник считает своим долгом задействовать ESLint и JSON, а пишет, естественно, на ES2015, добрая половина фич которого была реализована при непосредственном участии Крокфорда (кстати, мало кто знает, что Object.keys/Object.values еще в ES5 было внесено по инициативе Крокфорда) — но этот школьник понятия не имеет, откуда взялись «мои любимые технологии».

Я хочу подчеркнуть, что это не одиночный пример мнения отдельной макаки — это закономерность, которую заметил не только я, и не только эту. Такие люди, как Крокфорд, могут бесконечно выдавать оригинальные идеи, но как исполнитель они так-себе, у них вечно шило в попе, толкающее на приключения, потенциально грозящие сорвать сдачу проекта (которая назначена на вчера, как обычно). Я задумался: а кому могут быть в самом деле нужны такие люди? Да, в силиконовой долине можно себе пригреть местечко — по этому пути успешно прошелся Крокфорд. А что делать, если я не хочу развивать силиконовую долину? Я в молодости отказался ехать туда, и сейчас не особо горю желанием (но и не предлагают уже). Вот такое вот я капризное животное.

Более того, если допустить, что Крокфорд выдал некое супер-пупер классное решение для вашей фирмы, то возникает проблема — кто его будет поддерживать/развивать? А также так называемый Bus factor — что делать, если Крокфорда убьют Крокфорд уйдет? Типовой сеньор-помидор, посмотрев на код Крокфорда, выпучит глаза и закричит «ты где такое видел? Кто так делает? У тебя своя голова на плечах есть?».

Всё ли так безнадежно, и есть ли более-менее прикладные задачи, которые не сможет решить сеньор-принципал-архитектор даже в обнимку с цистерной смузи, даже выдавая по два заученных решения литкода в секунду? А может быть и есть. Например, быстрой инкрементальной Agile Scrum Kanban Fast-shipping Test Driven методикой постепенной разработки невозможно реализовать распределенную отказоустойчивую БД со строгой согласованностью данных. Отказоустойчивость — это бинарное свойство, БД либо отказоустойчива, либо нет. Не бывает почти отказоустойчивой приблизительно распределенной БД которая чуть ли не сохраняет все подтвержденные транзакции (привет разработчикам MongoDB). Ну то есть она в таком случае не отказоустойчива и не дает гарантий.

Даже Clickhouse можно почти сделать при достаточном стратегическом запасе смузи (только для единственного хоста), но яндекс так и не осилил аналога ZooKeeper (кластер ClickHouse работает через ZooKeeper), поскольку никакое количество костылей, инкрементально разработанных в Яндексе ранее, так и не смогли заменить одного грамотно продуманного решения. Что мы по итогу видим сейчас? Вся инфраструктура Яндекса стоит на ZooKeeper, найди возможность положить ZooKeeper — весь Яндекс встанет колом. Тот же Facebook тоже полагается на ZooKeeper (хоть и меньше, они там саги любят). В Amazon вообще всё печально, и я не поверю, что с любым количеством денег Amazon способен создать аналог ZooKeeper, поскольку я читал статьи их отдела по исследованию распределенных систем, и уровень там совершенно никакущий. Достоверно мне известна ровно одна контора, способная разрабатывать распределенные СУБД с гарантиями согласованности — это Google. Она разработала самое первое подобное решение, Google Chubby, близкой копией которого позже стал ZooKeeper.

Но вот в чем проблема — ZooKeeper уже есть, а значит «ты нам не нужен». Что же еще требует глубокого вдумчивого погружения и нестандартной находчивости? Похожие требования есть у многопоточных приложений. Еще подобного рода мышление нужно при тяжелой глубокой отладке софтины, на отладку которой систематически забивали, предпочитая спринты и быстрые релизы. Правда, с распространением защищенных сред выполенния, вроде JVM, CLR, JS, и Python, неустранимая потребность в отладке сильно снизилось, потому что в крайнем случае можно просто перезапустить контейнер или иметь запасные контейнеры сразу. (Еще есть UI/UX, но про мертвых либо хорошо, либо ничего).

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

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

Парадокс в том, что смузи-мастеры чуть ли не поголовно мечтают быть творцами. Какой смысл этого стремления? «Хорошо там, где нас нет»? «Полчаса побунтовал - и фатит»? Прежде чем окончательно и бесповоротно решить встать на этот путь, посмотрите на настоящих успешных творцов (не путать с клоунами вроде меня или Илона Маска). Такие люди не заработают заоблачных денег, их не расхватывают на рынке труда, им не так просто устроиться на обычную должность, а даже если устроятся — умрут со скуки, попутно занимаясь ремонтом того, что не ломалось, таким образом выведя из строя какой-нибудь старый добрый сервис на Cobol или MUMPS, написанный в 70-х годах «настоящими программистами, настоящими, не то что новое поколение».

Показательно, что работодатели идут навстречу этому стремлению, мол «пишешь конфиги для CI/CD? Ну ты же архитектор теперь». Аналитический склад ума нельзя поменять за месяц, его нельзя быстро приобрести или положить на полку на период отпуска. Wannabe-творец-на-выходные в лучшем создаст популярный клон существующего софта — даже не потому, что не способен ни на что другое, а потому, что понимает, что сообщество не примет ни одной значимой инновации серьезнее плагина к Emacs или очередных скрипт-костылей для сборки C++. Да и то, плагины к Emacs не нужны, поскольку уже есть настоящее проверенное решение в виде Vim и его аналогов.

И я не могу упрекать работодателей (как правильно заметил Kogrom по ссылке выше): им нужна взаимозаменяемость и предсказуемость, им нужно снижение рисков и издержек; им нужен посредственный сайт, который будет создавать иллюзию наличия этого сайта у компании — а больше и не нужно; заказчикам нужна иллюзия масштабирования и отказоустойчивости, с бессмысленными невыполнимыми требованиями к системы — выдайте ему микросервисную архитектуру со стоимостью и временем разработки в 3 раза больше грамотного монолита, также бонусом дайте ценные инструкции по масштабированию бигдата-серверов монги сверх 500 ГБ (на случай, если его бигдата размещается в кластере из айфонов). Можно упрекать разве что себя (мне — себя, а вам — себя, не меня). Например, много лет назад я имел возможность выбрать семью и карьеру, но я выбрал то, что выбрал — не иметь власти, но знать всё и ничего одновременно. В этом есть свой кайф и неудобство одновременно.

★★★★

Последнее исправление: alpha (всего исправлений: 6)

Ответ на: комментарий от sanyo1234

без каких либо дидлайнов

не получится. Нужен четкий план со сроками. Иначе ты ничего не сделаешь. Многие OpenSource проекты это подтверждают.

Например, Heroes 2 были сделаны полностью за 1.5 года.

А OpenSource версия fheroes2 начата 2006-06-09.

Уже более 15 лет, и ещё нет финальной версии игры. (притом что все ресурсы они берут от оригинала, и над сюжетом им не нужно думать)

Вот к чему приводит программирование без дедлайнов…

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

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

Где дидлайн для Slackware? Но многие его пользователи при этом счастливы как никто другой.

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 2)

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

Вся суть поста кмк. Отрефлексируй уже все это дерьмо и ехай дальше.

filosofia
()

Даже Clickhouse можно почти сделать при достаточном стратегическом запасе смузи (только для единственного хоста), но яндекс так и не осилил аналога ZooKeeper (кластер ClickHouse работает через ZooKeeper), поскольку никакое количество костылей, инкрементально разработанных в Яндексе ранее, так и не смогли заменить одного грамотно продуманного решения

4.2

clickhouse-keeper

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

leetcode

yandex

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

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

derlafff ★★★★★
()
Ответ на: комментарий от Nervous

Термин «прецедент» взят из книги Крэга Лармана «Применение UML2.0 и шаблонов проектирования» (глава 6, страница 95).

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

Для крестиков-ноликов я писал такое (тут ещё нет объектов и интерфейсов, они будут создаваться позже на основе описания):

  1. Основной (удачный) сценарий.
  • 1.1. Игрок запускает игру.
  • 1.2. На экран выводится поле с пустыми клетками.
  • 1.3. Программа предлагает ввести игроку координаты символа (крестика) в поле («столбец, строка»).
  • 1.4. Игрок вводит координату.
  • 1.5. Программа выводит поле с символами: крестиками и ноликами.
  • 1.6. Программа оценивает расположение символов на выигрыш, проигрыш, ничью. Если произошло одно из этих событий, то выдается соответствующее сообщение.
    • 1.6.1. Игроку предлагается начать игру заново.
    • 1.6.2. Если игрок соглашается, то переходим к пункту 1.2.
    • 1.6.3. Иначе программа завершается.
  • 1.7. Программа делает свой ход. На начальной итерации просто ставит свой символ (нолик) в свободную клетку.
  • 1.8. То же что и 1.6 с подпунктами.
  • 1.9. Переходим к пункту 1.3.
  1. Ветки неудачных сценариев:
  • 2.1. (вариант 1.4) Игрок вводит координату клетки, которая уже занята.
  • 2.2. Программа выдает сообщение, что клетка уже занята.
  • 2.3. Переходим к пункту 1.3 основного сценария.

Анализ (предварительный) по существительным.

Есть следующие объекты: игрок, программа (искусственный противник), анализатор выигрыша, поле (доска), клетка и 2 символа – крестик и нолик.

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

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

Доска включает в себя 9 объектов-клеток. Основные функции доски: получать координаты новых символов и выводиться на экран. Доска может просто использовать функции вывода клеток.

Каждая клетка может быть в трёх состояниях: пустая, с крестиком, с ноликом. Так как клетка меняет свое состояние, то нет смысла делать иерархию клеток. Состояние клетки можно выделить в отдельный объект или просто использовать целочисленную переменную.

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

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

Kogrom
()
Ответ на: комментарий от Kogrom

Прецеденты - повествовательные истории об использовании системы

Ветки неудачных сценариев

Точно, use cases. Понапереводят, а мы потом мучайся. У одного сценарии использования, у другого прецеденты, у третьего еще что-нибудь.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Lamobot

А сколько ты просил денег?
Просто интересно во сколько себя оценивает «архитектор» который не смог решить простую задачу (даже на литкоде написано что это easy)

$4000.

byko3y ★★★★
() автор топика
Ответ на: комментарий от derlafff

clickhouse-keeper

О, написали наконец. Правда, пока что это препрод, так что хз, какое у него будущее.

byko3y ★★★★
() автор топика
Ответ на: комментарий от vaddd

Самый кайф - это когда так работаешь не за деньги

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

Toxo2 ★★★★
()
Ответ на: комментарий от byko3y

Правда, пока что это препрод, так что хз, какое у него будущее.

Хз теперь какое будущее у zookeeper в долговременном плане.

btw кафку вон там тоже переписали с jvm, ожидаемо с 100x приростом: https://github.com/vectorizedio/redpanda

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от byko3y

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

Exmor_RS ★★★
()
Последнее исправление: Exmor_RS (всего исправлений: 1)
Ответ на: комментарий от X512

Я бы так не сказал. В последние 20 (и даже 10) лет было много «прорывных» технологий сделанных (или, по крайней мере, начатых) одним человеком. Эти люди и есть великие программисты.

rupert ★★★★★
()
Ответ на: комментарий от rupert

Если уж на то пошло - это не великие программисты, а великие организаторы. Бизнесмены. О них знают только потому, что они раскрутили свое творение.

vaddd ★☆
()
Ответ на: комментарий от byko3y

Идеальное решение при ограничении по времени требует точного применения unordered_map

остальные варианты: map

От std::map до std::unordered_map один шаг. Или ты просто не догадывался, что в C++ уже есть unordered_map? Я бы не сказал, что unordered_map - «специфичная фича стандартной либы». hash_map был даже в SGI STL 25 лет назад. А unordered_map очень быстро приняли в C++11 (кстати, поторопились, и поэтому он неоптимален).

rupert ★★★★★
()
Ответ на: комментарий от Nervous

Точно, use cases

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

На практике я один раз встречал архитектора у подрядчика. Долго пытал его, чем он занимается. UML рисуешь? Нет. Декомпозицией задачи занимаешься? Нет. Код пишешь? Нет. А чем занимаешься? Всем.

Kogrom
()
Последнее исправление: Kogrom (всего исправлений: 1)
Ответ на: комментарий от Kogrom

архитектор … Различать map и unordered_map - не его задача.

И поэтому мы так часто имеем нереализуемую говно-архитектуру.

rupert ★★★★★
()
Ответ на: комментарий от rupert

было много «прорывных» технологий сделанных (или, по крайней мере, начатых) одним человеком.

Электрон что ли? До 2000 было настоящее развитие, была заложена основа всех современных ОС, были сделаны Xerox Star, Mac OS Classic, NextSTEP, X11, Windows 9x, NT, OS/2, BeOS. Прогресс был такой, что за пару лет успевали переписать ОС с нуля и технологии сменялись полностью. Сейчас же за 10 лет не могут доделать жалкий Wayland.

Мы стоим на результате труда великих.

X512 ★★★★★
()
Ответ на: комментарий от X512

Электрон что ли? До 2000 было настоящее развитие, была заложена основа всех современных ОС, были сделаны Xerox Star, Mac OS Classic, NextSTEP, X11, Windows 9x, NT, OS/2, BeOS. Прогресс был такой, что за пару лет успевали переписать ОС с нуля и технологии сменялись полностью. Сейчас же за 10 лет не могут доделать жалкий Wayland.

Мы стоим на результате труда великих.

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

// Не то что бы я записываю себя в великие или обижаюсь что меня туда не записали, просто чудится мне что сложность/масштабы сейчас уже не те что были до 2000х. И тот продукт которым был w9x и/или MacOS и прочая сейчас уже не впаришь даже если будешь приплачивать за установку.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

90% кодовой базы современной Windows – это блоатварь не обязательная для работы, в чём можно убедиться запустив Windows RE. Основы заложены в Windows NT 4 и с тех пор ничего фундаментально не поменялось как например Win 9x -> NT.

X512 ★★★★★
()
Ответ на: комментарий от X512

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

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

А там решай сам.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

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

Нет, потребуются те же 2 года, просто программисты писать программы разучились. В случае с GNOME/KDE это ещё связано с их малой востребованностью, никто не хочет вкладывать значительные ресурсы на их разработку.

Посмотрите на проект Serenity, там один человек за год написал полноценную UNIX-подобную ОС с GUI с нуля за год. Вот где настоящие программисты, но индустрии они больше не нужны, всё уже написано.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 2)
Ответ на: комментарий от X512

Почему вы считаете, что там где было (условно) 20 млн строк сделано за 2 года, можно сделать 200 за те же 2 года? Почему тогда «гиганты прошлого» не сделали за 2 года 200, а сделали всего 20?

Что то мне кажется что это противоречие.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

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

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

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

Я не согласен с вашим тезисом. Я думаю что современное ПО гораздо более детализировано. ПО 20 летней давности - это не более чем «скелет» современного ПО. И эта детализированность съедает 90% ресурсов. По моему, это чем то похоже на фракталы - вроде бы мы прорабатываем какую то деталь/часть общей картины, но усилий нужно опять потратить столько же, сколько на большой кусок. И так для каждого подкуска и подподкуска. И дальше видимо будет только дороже и сложнее. По крайней мере с моей тз пока не видно почему это должно измениться.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от AndreyKl

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

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

X512 ★★★★★
()
Ответ на: комментарий от AndreyKl

Современное ПО - громоздко, объемно и трудоемко. Как китайская стена, пирамиды или транссиб. Оно создано трудом огромного количества винтиков-исполнителей и не имеет ничего общего с понятием «великие программисты».

vaddd ★☆
()
Ответ на: комментарий от AndreyKl

ПО 20 летней давности - это не более чем «скелет» современного ПО.

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

X512 ★★★★★
()
Ответ на: комментарий от AndreyKl

И дальше видимо будет только дороже и сложнее. По крайней мере с моей тз пока не видно почему это должно измениться.

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

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от X512

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

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

Великие они не потому что сделали то что сегодня сделать нельзя, а потому что сделали это _тогда_.

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

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 3)
Ответ на: комментарий от AndreyKl

Лично я бы не стал называть великими кого-то, кто был всего лишь первым и на основании этого получил известность. Можно назвать великим Эйнштейна, потому что для сделанного им нужно иметь реально ума палату, но можно ли назвать великим Колумба? Примерно так и с программистами. Они крутые инженеры, успешные, сумевшие протолкнуть свои труды. И как бы на этом все. Не открой Америку Колумб - открыли бы спустя пару лет другие, ничего в этом выдающегося не было. Где-то так же и с ОС, с языками и тп.

vaddd ★☆
()
Ответ на: комментарий от AndreyKl

Я думаю что любой более-менее грамотный студент

«Грамотный студент» уже не знает куда сохраняются код который он пишет. Тут тема недавно была. Вот какой ерунде сейчас учат.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от vaddd

Ох, я понял вопрос. Лично я не вижу ничего страшного если кто-то называет. Кто хочет - называет, кто не хочет - не называет.

Штука в том что сложность уравнений не так уж отличается от сложности кода.

Эйнштейн использовал преобразования Лоренца и что там ещё для написания ОТО. Ото в начале была не так страшна. Да, за годы он развил и СТО. Я не буду спорить что Эйнштейн - великий. Но таки опять же, сегодняшняя физика, на сколько я понимаю, сильно сложнее того что сделал Эйнштейн.

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

Что до Колумба, то тоже да. Да, кажется, что не уровень Эйнштейна в физике. Но вот как то так вышло что никто до него. Значит, великий. И значит всё таки тот же уровень в некотором сложном смысле.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от vaddd

Не открой Америку Колумб - открыли бы спустя пару лет другие, ничего в этом выдающегося не было.

С Эйнштейном и вообще любыми учёными тоже самое. Что не отменяет величия первопроходцев.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от vaddd

Не открой Америку Колумб - открыли бы спустя пару лет другие, ничего в этом выдающегося не было.

По моему мнению точно то же самое можно сказать про теорию относительности.

AndreyKl ★★★★★
()
Ответ на: комментарий от X512

«Грамотный студент» уже не знает куда сохраняются код который он пишет. Тут тема недавно была. Вот какой ерунде сейчас учат.

ой кашмар, раньше всё было лучше: и трава была зеленей, и бабка твоя, внучек, симпотишней!

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

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 3)
Ответ на: комментарий от AndreyKl

Но вот как то так вышло что никто до него. Значит, великий.

Примерно понятно. Шел, шел, первым нашел, получил известность - великий. Можно и так конечно. Примерно как Белка и Стрелка )

vaddd ★☆
()
Ответ на: комментарий от vaddd

Успешно переплыть океан в то время и те технологии кораблестроения и навигации было серьёзным достижением.

X512 ★★★★★
()
Ответ на: комментарий от X512

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

vaddd ★☆
()
Ответ на: комментарий от rupert

От std::map до std::unordered_map один шаг. Или ты просто не догадывался, что в C++ уже есть unordered_map? Я бы не сказал, что unordered_map - «специфичная фича стандартной либы». hash_map был даже в SGI STL 25 лет назад. А unordered_map очень быстро приняли в C++11 (кстати, поторопились, и поэтому он неоптимален)

Во-во, начинается. Правда, несмотря на твое «глубокое» понимание ты почему-то не упомянул важный момент: если в тупую строить unordered_map по одному элементу, то даже без конфликта хэшей сложность алгоритма равна... O(N^2). Потому что копирование памяти, N/a элементов N/b раз. Потому даже «эталонное» решение неидеально — нужно вызывать reserve() (сложность которого O(N)), чтобы с очень большой гарантий получить именно O(N), а не непонятно что. Может быть какой-то сеньор-помидор, исчитавший сорцы STL от разных авторов вдоль и поперек, и может самостоятельно додуматься до такого решения за 20 минут, но не я.

byko3y ★★★★
() автор топика
Ответ на: комментарий от vaddd

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

Штука в том что так в любой отрасли. В науке совершенно точно так - можно привести кучу открытий которые были сделаны и забыты а потом переоткрыты заново, либо открыты с некоторым интервалом независимо и помнят обоих авторов (правда, ТО на сколько мне известно в них не входит) .

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

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

Но поскольку тебе прям так претит слово «великий», то я хочу отметить что я тоже не использую слово «великий» в отношении программистов. Как то обычно язык не поворачивается. Но всё таки если придераться, то моё мнение сводится к тому, что заслуги эйнштейна и келдыша вполне сравнимы. и никитина. и колубма. и вероятно тех кто разработал таки этот несчастный wnt или .java/.net.

AndreyKl ★★★★★
()
Ответ на: комментарий от derlafff

clickhouse-keeper

Ахазазаза — неа, это не совсем яндексовая поделка. Потому что:

src/Coordination/KeeperServer.cpp

raft_instance = nuraft::cs_new<nuraft::raft_server>(ctx, init_options);

И дальше спасибо ebay (или даже сотрудникам datatechnology) за реализацию того, чего 15 лет не могут сделать литкод-смузихлебы в яндексе. Вот что они умеют — так это размазать реализацию прокладки с сокетами и обработчиками состояния на три папки (src/program => src/Server => src/Coordinator) так, что мне пришлось потратить ненулевое время на поиск всех слоев обвязок nuraft. Мне даже кажется, что такая ситуация вызвана политикой в компании, из-за чего сотрудникам просто невыгодно бегать на долгую дистанцию, им проще быстро сдать что-нибудь, получить заслуженные палки, и забыть про проект как про страшный сон, чем серьезно подходить к проблеме с заранее неясным сроком реализации.

byko3y ★★★★
() автор топика
Ответ на: комментарий от Lamobot

А у std::vector::push_back знаешь какая сложность?

А вот мы и встретились! O(N^2). Потому что я за пару минут нифига не нашел, как грамотно сделать то, что в JS называется map. Ну типа сейчас я догадываюсь, что это скорее всего vector::reserve() и дальше копирование — получается O(N).

byko3y ★★★★
() автор топика
Ответ на: комментарий от Exmor_RS

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

Давай лучше не начинать про мою молодость. В какой-то степени можно сказать, что я «нагулялся». Лучше нагуляться в молодости, чем спиться под старость.

byko3y ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.