Comments 54
Использование Jekyll вместо WordPress не сделает автора мультимиллиардером
Итак, появился молодой преуспевающий программист. (Хорошо, это был я.) Я решил, что вместо хардкода массива всех букв будет проще написать цикл for, который проходит от 65 до 90, а затем генерировал буквы по полученному коду символа.
Угу… А потом появился менеджер и сказал, что эта лабуда должна ещё поддерживать русский, греческий, финский и ещё полсотни разных языков.
Ничего страшного. Берем и пишем шаблонизатор, который будет заниматься кодо (бредо?) генерацией.
Действительно — наличие в коде магических констант вида "код символа А в русской раскладке" ничем не лучше полностью определенного массива. Главное — комментарии в коде не забудьте, которые будут говорить ЧТО МЫ видим перед глазами и ДЛЯ ЧЕГО это было сделано.
А потом появился менеджер и сказал, что эта лабуда должна ещё поддерживать русский, греческий, финский и ещё полсотни разных языков.Или сказал, что Q и O слишком похожи, потому давайте уберем одну из этих букв.
Историю эту рассказал мне близкий родственник, весьма почтенный
патриарх. Возможно, за два десятка лет к ней что-то для красного словца
и добавилось, но, в общем и целом, байка, думаю, правдивая...
Родственник мой, S., оказался в Америке в начале восьмидесятых, в
возрасте "за сорок" и владея английским языком в рамках "средней школы
давно". Помыкавшись некоторое время (не о том сказ), S. нашел отличную
работу — программистом Больших Шкафов для телефонного гиганта AB&C
(кто знает, тот поймет). Для общения с начальством новоиспеченный
программист быстро выучил английскую фразу "летмишоую" (сейчас покажу),
за которой следовала демонстрация работающего кода, и вопросов больше не
возникало.
Работа в телефонных гигантах неторопливая, но S. бездельничать не любил,
и решил заняться оптимизацией. В одном из Больших Шкафов обнаружилась
база данных, а в ней — таблица с парами чисел: 1-3, 2-6, 3-9,…,
1000000-3000000. Ничтоже сумняшеся, S. таблицу стер, а обращения к ней
заменил строчкой B=Ax3. Шкаф, радостно заурчав, продолжал
функционировать. Отсутствие таблицы начальство заметило (и то по чистой
случайности) через неделю. Состоялся знаменательный диалог:
- Где таблица?
- Таблица не нужна.
- Как это не нужна?
- Ну, не нужна. Летмишоую. Вот: B=Ax3
- Что это?
- Вместо таблицы.
- А где таблица?
- Я ее стер. Не нужна.
- Как стер???
- Летмишоую. Вот, работает. B=Ax3
- Ну, работает. А где таблица-то?
…
В конце концов, проявив завидную корпоративную мудрость, начальник
оставил S. в покое. А по AB&C долго ходили легенды о сумасшедшем
бородатом русском, который ПРИДУМАЛ ФОРМУЛУ.
Всё движется по кругу...
программистом Больших Шкафов для телефонного гиганта AB&C
кто знал и понял поделитесь пожалуйста своим знанием и пониманием
Запросто. А могло оказаться, что сэкономленная память позволила не устанавливать рядом очередной Большой Шкаф и компания сэкономила пару миллионов долларов.
Вывод банален — каждый конкретный случай нужно рассматривать индивидуально, и не агитировать за универсальные практики — "все сворачиваем в формулы" или "все выносим в константы". Всегда найдется куча исключений...
Чтение из памяти быстрее, чем две операции на CPU (сдвиг и сложение)? Не верю.
Маловероятно (учитывая, что умножение на 3 – это просто 2 сложения). А на современных процессорах вообще гарантированная экономия времени (кэш!).
Могло быть другое: где-нибудь в середине таблицы последовательность чуток меняется. Но, надеюсь, он проверил это.
Если вы про предысполнение Javascript на сервере или в билде, чтобы в браузер загружался только финальный результат, то такое уже есть: https://prepack.io
есть много доказательств того, что программное обеспечение ест мир.
Наверное, это — опечатка. Но, звучит, как народная мудрость.
type Letters = ("A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z")[];
Ну или так https://www.npmjs.com/package/alphabet
Пример вообще забавен: скармливаем его wc и видим 73 символа для генерации константы длиной 28 символов (26 букв и кавычки). Хотя по большому счёту тут пофиг, какое решение использовать, 99.99% это не узкое место.
А так – неплохо бы разработчику иметь опыт в разных областях (и, желательно, базовое образование в CS – можно просто книжки почитать, до уровня "уметь оценивать O(n) и выносить инварианты из цикла"). Например, поиграв с кодогенерацией в C++ или ещё чем – привыкаешь делать то, что можно, в Compile Time.
Имхо, на WP без динамики можно делать тоже самое: работать в локальном WP, а на сервак загружать статику.
![image](https://habrastorage.org/getpro/habr/comment_images/719/491/f91/719491f9198a44d625d63e85db137056.jpg)
Думаю легенды обошлись бы одним вызовом, а не пятью :)
А если начнёте работать с русским языком, то выяснится ещё одно преимущество хардкод-таблиц — возможность задать свою сортировку. Потому что буква Ё в юникоде находится не между А и Я, а в сторонке (причём в разных сторонках для строчных и заглавных). Такие дела.
А если ещё и до «Premature optimization is the root of all evil» додумаются, то вообще страшно становится, можно же будет писать и так и эдак, в зависимости от ситуации.
Это не выглядит так, как будто алфавит будет отличаться от одного сеанса к другому.
Сначала подумал, что опять английское "it doesn't look like" перевели дословно, полез в оригинал, а там "it wasn't as if".
На мой взгляд, что-то вроде "Алфавит ведь не будет меняться от запуска к запуску" будет более уместно.
Не в момент выполнения, а в момент проектирования