Comments 40
Понятно что для того чтоб написать визитку — нет смысла делать множество абстракций и каждый раз разрабатывать свою цмс, но для сложных и потенциально высоко нагруженных проектах бездумно использовать кучу чужих библиотек… это далеко не самое правильное решение.
1) Никогда ничего не заказывайте на стороне. Ну просто потому что аутсорсеру вообще плевать что там будет после сдачи. Исключения можно делать только когда проект типовой, или у компании уже есть конкретные наработки.
2) Сроки, качество, цена — выбери любые два. Хотели быстро и дешево, получили соответствующее качество.
3) Технического задания, как я понимаю, тоже не было. А стоит оно также, как весь проект, и времени на его разработку нужно столько же.
4) Библиотеки помогают только если у команды есть необходимые компетенции. А если их не было, то чего вы ожидали?
1) вы будете удивлены, но очень многие проекты в том числе и весьма сложные делаются или на аутсорсе, или с привлечением аутсорсеров, по тому что это правильнее, эффективнее и проще.
2) Заказчик исходил из вашего постулата, быстро собрать, а потом посмотрим.
3) Было, единственное что не было учтено — это нагрузки которые могут возниктнуть, это был стартап и было не понятно взлетит или нет.
4) Нужно понимать что, когда и как использовать. Я не говорю о том, что нужно постоянно изобретать велосипед, но и бездумно пользоваться готовыми решениями тоже не правильно.
Вообще не понимаю, почему вы считаете что заказчик сделал все чтоб проект провалился. ИМХО Заказчик сделал все вполне правильно с точки зрения бизнеса. Потратил часть ресурсов чтоб проверить насколько проект будет востребованным, когда убедился что проект будет востребован — потратил еще ресурсы чтоб сделать его эффективным. Это называется управление рисками :) Ведь проект мог и «не выстрелить»
3) Вы меняете показания -) То пишете, что было настолько плохо, что пришлось ПОЛНОСТЬЮ переписать, то пишете, что все было учтено, кроме нагрузок. Ну так проблемы с нагрузкой легко лечатся — воткнул побольше памяти, еще парочку серверов, и все ок. Раз уж клиентов так много оказалось, то наверняка ручеек прибыли это должен окупить. А если нет, то тут тогда вообще не в разработке дело.
3б) А если ваша работа окупилась как раз с этой прибыли, тогда вообще не понимаю в чем проблема с библиотеками: их использование позволило вообще запустить проект в таких сложных условиях и нанять более компетентных специалистов которые перепишут все это г*но; Если все так и было, то вы только что привели просто хрестоматийный кейс, как библиотеки помогают бизнесу и почему даже их бездумное использование лучше, чем свои костыли.
Отнюдь, реализация не позволяла ни вменяемо масштабироваться ни держать нагрузку, но задачу свою с небольшим потоком пользователей — решала. На счет ручейка не берусь судить. Ну так я же с самого начала говорил, что прикладное программирование это НЕ ПЛОХО, просто не для всех задач подходит, как и инженерная разработка. Важно понять когда хорошо одно и когда хорошо другое. Причем, зачастую одно не исключает другого.
Инженерная разработка как раз и состоит из использования библиотек. Собственно, весь SICP как раз об этом: как правильно создавать библиотеки, чтобы их можно была переиспользовать. Просто в те времена все думали, что ничего сложного в том, чтобы разработать всю обвязку для бизнес-логики с нуля нет, и этим может заниматься тот же инженер, что и бизнес-логикой (а еще казалось, что такие библиотеки можно наследовать из проекта в проект). Практика показала, что это выходит слишком дорого и сложно, и все равно люди допускают ошибки на других уровнях, и стало понятно что использовать готовые чужие библиотеки гораздо выгоднее. Вот, собственно, и вся история.
Например, во фронтенде, в котором я работаю, доминирующая концепция — убер-модульность, когда даже для простейшего действия нужно скачать и подключить библиотеку из 10 строк кода. И ничего плохого в этом подходе нет, потому что экономит время, и позволяет избежать ошибок.
Часто делается совсем не неделю, месяцы. И так же в начале прибыль ничтожная, а ожидается где-то через год+. Быстрое решение, одно за другим, наростает функционал, работа идёт дальше и... В какой-то момент все силы уходят на регресс.
Кроме того, переписывание того, что работает? Крайне редко. Никто не будет ждать - конкуренты обгонят пока будешь переписывать всё приложение.
Всё же важен баланс. Ну и часто не стоит отдавать центральную часть проекта "на аутсорс"
Да, я тоже пишу свою панель управления хостингом, понимая, чем меня не устраивают те решения что тестировал, использовал или запустил в продакшен
Вы бы ещё РЖД или Сбербанк в IT-индустрию зачислили. Между прочим, у РЖД есть «небольшой» вычислительный центр (в Москве, на Красных воротах). Конечно, в нём работают не так много людей, как в Гугле, но я уверен, что счёт идёт на тысячи. В Сбербанке тоже есть IT-департамент, который по числу сотрудников скорее всего превышает 99% российских IT-компаний.
В 80-ых и 90-ых инженеры строили сложные системы, комбинируя простые и хорошо изученные «части». Целью SICP было предоставить язык абстракций для рассуждений о таких системах.Сегодня дела обстоят не так. Сейчас инженеры обычно пишут код для сложного аппаратного обеспечения, которое они не до конца понимают
Думаю, маятник качается обратно. LLM снимает нагрузку и необходимость изучения огромного числа библиотек и чужого кода. Тривиальный код теперь пишется очень быстро. Зато потребность понимания что под капотом никуда не делась.
Думаю, сейчас актуально это
6.006 — Algorithms
• «Швейцарский нож» архитектора: массивы/хеши, деревья, графы, сортировки, строки, DP, «разделяй-и-властвуй».
• Учит оценивать O( ), писать тест-бенчи и выбирать структуру под SLA и бюджет.
• Лабораторные — end-to-end задачи (каршеринг-роутинг, индексация текста), где важно не API, а выбор подхода.
6.046 — Design & Analysis of Algorithms
• Когда базовый нож не режет: потоки, матроиды, субмодулярные оптимизации, рандомизация, приближённые и онлайновые алгоритмы, нижние границы.
• Кейс-стади: CDN load-balancing, privacy-preserving analytics, блокчейн-консенсусы.
• Делает из «знаю алгоритмы» «умею изобрести свой под нетипичное ограничение».
6.8200 — Principles of Programming Languages
• Семантика (operational, denotational), λ-исчисление, типовые системы (Hindley-Milner, dependent), эффекты, GCs, JIT, concurrency models (CSP, STM).
• Сравнивают OCaml, Rust, Go, JS, SQL, DSL-ы; задача — понять, КАК язык влияет на безопасность, параллелизм и эволюцию архитектуры.
• Финиш-проект: мини-язык или расширение типа system-level DSL для конфигов облака.
Что даёт архитектору
Алгоритмы = производительность и скейл.
PL-принципы = надёжные абстракции и tooling.
Обе линии заменяют «зубрёжку фреймворков» умением спроектировать ядро системы под любые будущие библиотеки и LLM-подсказки
Почему в MIT больше не изучают SICP