Обновить
99
0.1
Роман Смирнов @Source

Head of Elixir at Ecom.tech

Отправить сообщение
У меня вообще по ходу чтения возникло ощущение, что статью писали лет 10 назад и только слегка подредактировали с тех пор.
в то время как встроенный сервер php — совсем не производительное решение
Вы так пишете как-будто Webrick (встроенный сервер для Ruby) — производительное решение. Добавьте в Gemfile строку
gem 'thin'

и посмотрите ещё раз (после bundle install).

А по теме статьи, Вы по сути выбираете из медленных технологий. Рассмотрите Elixir+Phoenix и Golang+Gin, если производительность без кеша имеет значение для вас :-)
Если же правительство в конце концов отправит всех держателей в известном направлении, то проблема с долгом решится сама собой.

Так это Вы суверенный дефолт описали. Он, кстати, не освобождает от долга, а переносит вопрос в международные суды.
Вообще, слово взрыв там не очень уместно закрепилось, потому что рождает абсолютно левые ассоциации. Процесс расширения Вселенной больше похож на надувание шарика, где поверхность шарика — это и есть Вселенная. Что вокруг неё и что внутри неё неведомо, т.к. выйти за пределы Вселенной, будучи её частью, скорее всего нереально.
Такая же мысль возникла… только про wxWidgets
Вы помните, сколько нужно было написать кода, чтобы вывести стандартное окно, просто обрабатывающее стандартные кнопки и стандартное меню сворачивания, разворачивания и закрытия окна с помощью Win32 API?
Я помню, только, справедливости ради, этот код писали вручную разве что для развлечения уже 10 лет назад. В Visual C++ он генерировался автоматически в отдельных файлах, а в Delphi его даже видно не было. Ну и кстати ничего особо страшного в том коде не было, довольно простой, только многословный. Поэтому декларативный способ описания форм в итоге победил.
В принципе да, но если позанудствовать, то

tag .class {} — это стиль, который применится к любым элементам с классом «class», находящимся внутри элементов tag

tag.class {} — это стиль, который применится к элементам tag с классом «class»
Тут вопрос скорее в том, что для человека важнее. Если главное «пройти интересный квест», то это тоже самообразование, но уже не по специальности. Хотя кто знает, что Вы под квестом подразумеваете… может специализация туда тоже входит…
В случае с обучением в университете, есть известный критерий: ты зачем учишься? для получения знаний или для получения оценок/диплома?
Чисто технически, если для знаний, то это можно тоже самообразованием считать, так как учебный план ВУЗа будет только вспомогательной частью обучения.
всё-таки надо расширить до «перекладывание и преобразование», своебразный конвеер для данных, которые, пройдя через серию алгоритмов, превращаются в другие данные…
а так да, в этом вся суть программирования )
заранее составленный видео-урок вы куда отнесете? А книгу «Изучаем С++ за 3 недели» куда?
Конечно, в самообразование, если ты сам решил его посмотреть/прочитать потому что захотелось, а не потому что надо. Самообразование от образования отличается не отсутствием плана обучения(его можно и самому для себя составить), а тем что только ты сам решаешь что и как изучать и сам с себя спрашиваешь.
Оно может включать в себя что угодно, и чтение учебников, и просмотр видеокурсов, и общение на форумах, и парное программирование, в общем любые формы получения знаний и навыков.
Запросы очень разные бывают… Если приземлять на более-менее реальные кейсы(и не рассматривать ситуации, когда возможно целиком страницы кешировать), то нагрузки выше 3000 rpm, как правило, создают проблемы для rails-приложения на 1 физическом сервере приличной конфигурации.
как вариант, SaaS-решение за пару тысяч в месяц
> Подождем статью о том, что студии берут в четыре раза больше, чем фрилансеры

Была ж уже: habrahabr.ru/company/ruward/blog/169559
И как раз с K=4
Разработка ТЗ сама по себе стоит больше 30 т.р., а в тех документах, которые именуют ТЗ в типовых проектах, столько неоднозначностей, что вы можете бесконечно спорить с клиентом, что есть новая фича, а что само собой разумелось. Понятно, что вы пишете со стороны программиста, и поэтому плохо представляете как общение с клиентом проходит в таких проектах. Но на практике бюджеты (по полной стоимости проекта) от 100 до 500 т.р. — это очень пустынный сегмент. В нём практически нет заказчиков. Поэтому у хороших веб-студий выход один — уходить в нетиповые проекты.
А бюджеты до 100 т.р. начинаются как раз с 20-30 т.р., вырастая ближе к 100 по мере допиливания.
Itachi261092 это всё правильно, но есть одно но: в случае решения за 80 т.р. клиенту тоже захочется дополнительных фич и далеко не все клиенты осознают, что за эти доп.хотелки придётся доплатить и не так уж мало. А возникают эти хотелки практически сразу после того как сайт готов.
По факту все эти попытки сделать качественно и недорого, как правило, обречены на провал. Т.к. востребованы только 2 типа разработок: шаблонная и индивидуальная.
Шаблонная начинается с какого-то коробочного решения, которое разворачивается за 1-3 дня вместе с натягиванием выбранного шаблона дизайна, и потом допиливается под нужды клиента пока ему не станет жалко денег на этот сайт. Теоретически тут тоже может быть качественно, но только пока вы не упрётесь в ограничения вашего коробочного решения.
А индивидуальная — совсем другая история, но и бюджеты не меньше 500 т.р.
Может иметь, может не иметь… Лямбды могут что-то замедлять, но возможно это не будет имеет никакого значения, т.к. замедление будет на пару наносекунд, а возможно и его не будет, т.к. компилятор их заинлайнит. Абстрактно невозможно принять взвешенное решение.
Абстрактно можно только описать code style, который улучшит maintainability. Но это не значит, что не существует конкретных ситуаций, при которых стоит его нарушить. Конечно, они существуют, но если уж нарушать, то хотя бы с осознанием зачем, и в идеале выразить это осознание в комментарии.
Есть ощущение, что если бы вы работали не со строками, а с цифрами напрямую, то было бы ещё быстрее.
Хоть BalinTomsk не самым универсальным образом отрефакторил, но верное намерение в этом было. Не должно после if идти условие на 3 строки. И тот же Макконнелл об этом писал. Универсально это решается при помощи функций или лямбд.

Первый шаг:
if (is_defined?(a) && is_defined?(b) && is_string?(c)) {
    
}

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

Информация

В рейтинге
4 111-й
Откуда
Россия
Зарегистрирован
Активность