Github, как мне кажется, географически (в смысле география юзеров) ОЧЕНЬ biased в сторону США.
Иначе я никак не смогу объяснить 4-ое место Ruby. Сам на нём пишу (писал) и прекрасно знаю, что он почти везде, кроме США, уже давно почти никем не используется. Во всяком случае на 4-ое место ему точно никаким образом не подняться.
Так же для валидации можно обратить свой взор на глобальный опросник от StackOverflow — insights.stackoverflow.com/survey/2018, раздел «Most Popular Technologies»
Если смотреть на чисто спортивные легковые автомобили, то, по-моему, лучше обойтись карбоно-керамикой, а не заниматься overengineering-ом.
Допускаю, что охлаждение тормозной системы может быть более чем оправдано для грузовых транспортных средств, работающих в жёстких условиях эксплуатации (и приток воздуха может быть банально недостаточным).
Жаль, что, скорее всего, больше такого в LKML (или где-либо ещё) не увидишь. Остаётся только перечитывать старенькое и пускать скупую ностальгическую слезу :) Это же просто бесценно.
А теперь выложите сюда pprof с go и вполне может оказаться, что ботлнек — это работа с базой.
Алсо, для нагрузочного тестирования есть православные ab / siege.
# это геттер
def first_name
@first_name
end
# это сеттер
def first_name=(val)
@first_name = val
end
Вот и всё различие.
На самом деле таким макаром геттеры/сеттеры не пишут, только если надо переопределить их стандартное поведение.
Дефолтную пару можно сгенерировать с помощью одной строчки
attr_accessor :first_name
Будет ли имя addParameter «запахом»?
Скорее да, чем нет.
Из Вашего примера, скорее всего данный функционал будет имплементирован немного по-другому.
request.params[key]=value
params — это просто словарь, к которому можно обратиться напрямую.
"[]=(key,value)" — это тоже метод.
P.S. Проверил — так примерно в рельсах и сделано. Только там params — это экземпляр класса Parameters, который в свою очередь ведёт себя как словарь.
Пример можно?
Я всего на нескольких ЯП пишу. Ни в одном из них нет ограничений на имя метода.
Ruby. Вполне характерно писать вообще без глаголов или глагольных префиксов.
И если чистые глаголы это ещё куда не шло (#call, #perform или что-то в этом роде), то глагол + ключевое слово — это скорее code smell, чем норма.
И это не ограничение, а соглашение.
start() — идеальный метод;
start(speed) — отличный метод;
start(speed, direction, path) — похуже. Сходу и не вспомнишь, в какой последовательности параметры передавать;
start(speed, direction, path, maxBias, onError) — комментарии, думаю, излишни.
Если аргументов больше ~3 (это эмпирически) — это уже code smell.
Разумно применять keyword-аргументы, если возникает путаница.
Приблизительный максимум 20 строк и 150 символов в одной строке
150 символов — это явный перебор. Большенство редакторов ставят отсечку почти на половине от этой величины. И даже это многовато.
Идеальное количество входных аргументов для функции = 0
Если это foo/bar/baz для hello world — да, а так нет.
Названия методов должны содержать глагол, который описывает, что этот метод делает и ключевое слово с которым работает данный метод. Если в названии метода нет глагола, то эта сущность не должна быть методом или ему нужно дать правильное название.
Не обязательно. Это зависит от ЯП.
Не комментируй плохой код — перепиши его. Не стоит объяснять, что происходит в плохом коде, лучше сделать его явным и понятным.
Это не всегда зависит от пожеланий одного разработчика. Время на рефакторинг далеко не всегда удаётся выбить.
If, else, while и т.д. должны содержать вызов одной функции. Так будет читабельнее, понятнее и проще.
Вообще не обязательно. Очень сомнительное правило.
www.artima.com/scalazine/articles/origins_of_scala.html
Тут есть некоторые пояснения :)
Интересно, насколько корнями Scala уходит в самую первую Java и ранее. И как сама Scala, которая частично «базировалась» на малоизвестных Funnel, Pizza, в каком-то даже смысле опережала развитие Java на тот момент.
У всех команд разный опыт, разная экспертиза и, как следствие, может быть совершенно иное видение того языка, который бы больше подходил под их конкретные задачи и требования. Для кого-то динамическая типизация = прагматичность — тогда не надо беспокоиться о системе типов (которая может быть очень даже непросто для понимания) или о скорости компиляции. Кто-то исходит из «модности», «хайповости», трендовости, размера и/или активности сообщества — как быстро можно загуглить ту или иную проблему или как быстро можно получить ответ на stackoverflow. Скала уже давно прошла свой пик популярности. Тот, кто с ней остался, вполне отдаёт себе отчёт — что, зачем и почему.
Каждый понимает «прагматичность» по своему.
Я не могу себя причислить к скала сообществу, потому что я не работаю с этим языком на постоянной основе. Но приходилось писать несколько проектов в прошлом на базе Play Framework. Перед этим я прошёл вводный курс по скале на курсере (который опять же ведёт Мартин). От этого языка всегда веяло какой-то академичностью — такое ощущение, как-будто его с интересом и любовью препарировали в стенах университетских лабораторий :) Я, кстати, не припомню, чтобы это кто-то скрывал.
И вот появился этот монстр, в основе которого JVM с своими возможностями и ограниченями, на которое сумели взгромоздить и FP и OOP, подружив их друг с другом, и доселе невиданную систему типов (я честно не знаю, украли ли они её у кого-то или сами придумали) и ещё бог пойми чего и всё это ещё и под соусом обещаний интероперабилити с java, type-safety, иммутабельности и т.д и т.п. Иронически, получился швейцарский нож. Университет EPFL, в котором преподает Мартин, так же находится в Швейцарии (Лозанна) :)
И вот тут уже конечному разработчику решать, как с этим многофункциональным ножом играться. Если юзать его аккуратно, как better java, оно, на мой взгляд, довольно хорошо работает. Писать на скале, как на улучшенной джаве действительно удобно и приятно. Прагматично? Ну, возможно.
Но можно заиграться и перерезать себе все руки (прежде, чем отстрелишь ноги) — любой обфускатор позавидует. Концов не соберёшь — в какой-то момент сдавался даже IntelliJ Idea для скалы. Отдельно радует SBT, в котором есть операторы, которые даже загуглить нельзя. :)
P.S. Я потом ещё прошёл курс по реактивному программированию на базе скалы — это просто взорвало мой мозг.
К несчастью, есть как клоны, так и китайские самоделки. Когда вышел честный, оригинальный ELM v1.4, китайцы его скопировали и назвали v1.5. А потом, китайцы пошли своим путём, создав свою поделку со своей же прошивкой, назвав её ELM327 v2.1. И если 1.5 это ещё куда не шло, то 2.1 — это довольно печальное и унылое зрелище. К слову, оригинальные ELM327 в продаже есть всего в нескольких местах, и стоят они под 50 евро. Клонированные или китайские поделки вычисляются несложно — в терминале они откажутся работать с целым рядом команд.
А в ряде специфических программ для сканирования и диагностики (например, FORScan), они просто откажутся работать (хотя будут работать в, например, Torque, ScanMaster и других мобильных приложениях). У меня вот версия 2.1 и она очень печально работает с маздой. Прям из рук вон плохо.
Спасибо за качественную статью.
В автомобильном мире это всегда актуальная тема.
ELM327 клоны шлют огромный пламенный привет.
Софт-брикнутные FTDI чипы после установки драйвера >= 2.10 тоже.
Я, как довольно активный пользователь ActiveRecord ORM (рельсы), могу сказать, что этого хватает на процентов, эдак, 95 всех задач. Он действительно хорош. Ещё процента 4 покрывает Arel — SQL AST, и, пожалуй, оставшийся 1 — это что-то совсем-совсем сложное, что нужно писать полностью руками.
Но это всё не отменяет того, что нужно хорошо понимать особенности работы БД, причём довольно глубоко
Спасибо, интересно.
Что-то разочаровало меня то, как устроены булевы типы, а именно наследование от целочисленного типа. В прошлой статье пример со словарём мягко говоря вообще не обрадовал.
Во-первых, спасибо за интервью. Интересно. Для 22-ух лет очень толково. Про ардуино, стробоскоп, преобразование Фурье и т.д было бы, кстати, интересно почитать отдельной статьей. А почему бы и нет.
Отвечая на вопрос, сразу хочу отметить, что то, чем я занимаюсь (веб-разработка) — это, конечно, мой хлеб с маслом, но не похоже, что это дело всей моей жизни.
Если бы веб-разработка стала незаконной, я бы попробовал превратить одно из своих хобби в работу или источник дохода. А именно, мне интересна и близка автомобильная тематика — автоэлектрика, электроника, их диагностика и ремонт. Помимо этого как практикант в своё «работал» с промышленной автоматикой — возможно удалось бы там чего-то добиться. Интересуюсь радиоэлектроникой и встраваемыми системами — программировать железяки тоже классно. В общем, смотрел бы куда-то по смежным областям.
Статически вычисляемое дефолтовое значение параметра функции — это как раз то, чем я себе ногу отстрелил.
Я поставил стандартное значение равным пустому массиву, который я в теле функции заполнял значениями и как-то использовал. Причём функция была ещё и в добавок рекурсивная. В общем, это было крайне неприятной находкой.
Иначе я никак не смогу объяснить 4-ое место Ruby. Сам на нём пишу (писал) и прекрасно знаю, что он почти везде, кроме США, уже давно почти никем не используется. Во всяком случае на 4-ое место ему точно никаким образом не подняться.
Так же для валидации можно обратить свой взор на глобальный опросник от StackOverflow — insights.stackoverflow.com/survey/2018, раздел «Most Popular Technologies»
Допускаю, что охлаждение тормозной системы может быть более чем оправдано для грузовых транспортных средств, работающих в жёстких условиях эксплуатации (и приток воздуха может быть банально недостаточным).
Алсо, для нагрузочного тестирования есть православные ab / siege.
Вот и всё различие.
На самом деле таким макаром геттеры/сеттеры не пишут, только если надо переопределить их стандартное поведение.
Дефолтную пару можно сгенерировать с помощью одной строчки
Скорее да, чем нет.
Из Вашего примера, скорее всего данный функционал будет имплементирован немного по-другому.
params — это просто словарь, к которому можно обратиться напрямую.
"[]=(key,value)" — это тоже метод.
P.S. Проверил — так примерно в рельсах и сделано. Только там params — это экземпляр класса Parameters, который в свою очередь ведёт себя как словарь.
Ruby. Вполне характерно писать вообще без глаголов или глагольных префиксов.
И если чистые глаголы это ещё куда не шло (#call, #perform или что-то в этом роде), то глагол + ключевое слово — это скорее code smell, чем норма.
И это не ограничение, а соглашение.
Если аргументов больше ~3 (это эмпирически) — это уже code smell.
Разумно применять keyword-аргументы, если возникает путаница.
150 символов — это явный перебор. Большенство редакторов ставят отсечку почти на половине от этой величины. И даже это многовато.
Если это foo/bar/baz для hello world — да, а так нет.
Не обязательно. Это зависит от ЯП.
Это не всегда зависит от пожеланий одного разработчика. Время на рефакторинг далеко не всегда удаётся выбить.
Вообще не обязательно. Очень сомнительное правило.
www.artima.com/scalazine/articles/origins_of_scala.html
Тут есть некоторые пояснения :)
Интересно, насколько корнями Scala уходит в самую первую Java и ранее. И как сама Scala, которая частично «базировалась» на малоизвестных Funnel, Pizza, в каком-то даже смысле опережала развитие Java на тот момент.
Я не могу себя причислить к скала сообществу, потому что я не работаю с этим языком на постоянной основе. Но приходилось писать несколько проектов в прошлом на базе Play Framework. Перед этим я прошёл вводный курс по скале на курсере (который опять же ведёт Мартин). От этого языка всегда веяло какой-то академичностью — такое ощущение, как-будто его с интересом и любовью препарировали в стенах университетских лабораторий :) Я, кстати, не припомню, чтобы это кто-то скрывал.
И вот появился этот монстр, в основе которого JVM с своими возможностями и ограниченями, на которое сумели взгромоздить и FP и OOP, подружив их друг с другом, и доселе невиданную систему типов (я честно не знаю, украли ли они её у кого-то или сами придумали) и ещё бог пойми чего и всё это ещё и под соусом обещаний интероперабилити с java, type-safety, иммутабельности и т.д и т.п. Иронически, получился швейцарский нож. Университет EPFL, в котором преподает Мартин, так же находится в Швейцарии (Лозанна) :)
И вот тут уже конечному разработчику решать, как с этим многофункциональным ножом играться. Если юзать его аккуратно, как better java, оно, на мой взгляд, довольно хорошо работает. Писать на скале, как на улучшенной джаве действительно удобно и приятно. Прагматично? Ну, возможно.
Но можно заиграться и перерезать себе все руки (прежде, чем отстрелишь ноги) — любой обфускатор позавидует. Концов не соберёшь — в какой-то момент сдавался даже IntelliJ Idea для скалы. Отдельно радует SBT, в котором есть операторы, которые даже загуглить нельзя. :)
P.S. Я потом ещё прошёл курс по реактивному программированию на базе скалы — это просто взорвало мой мозг.
Вся информация тут. Не надо выставлять человека уж совсем идиотом.
А в ряде специфических программ для сканирования и диагностики (например, FORScan), они просто откажутся работать (хотя будут работать в, например, Torque, ScanMaster и других мобильных приложениях). У меня вот версия 2.1 и она очень печально работает с маздой. Прям из рук вон плохо.
В автомобильном мире это всегда актуальная тема.
ELM327 клоны шлют огромный пламенный привет.
Софт-брикнутные FTDI чипы после установки драйвера >= 2.10 тоже.
Но это всё не отменяет того, что нужно хорошо понимать особенности работы БД, причём довольно глубоко
Что-то разочаровало меня то, как устроены булевы типы, а именно наследование от целочисленного типа. В прошлой статье пример со словарём мягко говоря вообще не обрадовал.
Отвечая на вопрос, сразу хочу отметить, что то, чем я занимаюсь (веб-разработка) — это, конечно, мой хлеб с маслом, но не похоже, что это дело всей моей жизни.
Если бы веб-разработка стала незаконной, я бы попробовал превратить одно из своих хобби в работу или источник дохода. А именно, мне интересна и близка автомобильная тематика — автоэлектрика, электроника, их диагностика и ремонт. Помимо этого как практикант в своё «работал» с промышленной автоматикой — возможно удалось бы там чего-то добиться. Интересуюсь радиоэлектроникой и встраваемыми системами — программировать железяки тоже классно. В общем, смотрел бы куда-то по смежным областям.
Я поставил стандартное значение равным пустому массиву, который я в теле функции заполнял значениями и как-то использовал. Причём функция была ещё и в добавок рекурсивная. В общем, это было крайне неприятной находкой.