Как не вспомнить баян из времён шуток про одминов и креведок.
1) Тебе приходится работать сверхурочно. Как проститутке!
2) Обычно ты работаешь допоздна. Как проститутка!
3) Как правило, ночью твоя продуктивность повышается. Как у проститутки!
4) Тебе платят за то, чтобы клиент остался доволен. Как проститутке!
5) Клиент платит много, однако почти все забирает твой шеф. Как у проститутки!
6) Тебе платят фиксированную сумму, но работать нужно пока не закончишь. Как проститутке!
7) Ты никогда не станешь гордиться своей работой. Как проститутка!
8) Тебе платят за удовлетворение фантазий твоих клиентов. Как проститутке!
9) Тебе трудно завести и содержать семью. Как проститутке!
10) Когда у тебя спрашивают, чем ты занимаешься, ты не можешь объяснить. Как проститутка!
11) У тебя теряются связи с друзьями, и ты общаешься только с себе подобными. Как проститутка!
12) Клиент оплачивает тебе проживание в гостинице и рабочие часы. Как проститутке!
13) Шеф у тебя имеет роскошный автомобиль. Как у проститутки!
14) Когда ты удовлетворяешь клиента, тебя ценят. Как проститутку!
15) Но в конце ты себя чувствуешь так, как будто из ада вернулся. Как проститутка!
16) Тебя проверяют на профпригодность изощренными способами. Как проститутку!
17) Клиент всегда стремится заплатить поменьше, но в то же время ждет от тебя чудес. Как от проститутки!
18) Каждое утро, просыпаясь, ты говоришь себе: "Я не собираюсь этим заниматься всю жизнь! " Как проститутка!
19) Ничего не зная о своих проблемах, клиенты ждут, что ты дашь им нужный совет. Как от проститутки!
20) Если что-то не так, виноват всегда ты. Как проститутка!
21) Тебе приходится оказывать бесплатные услуги начальнику, друзьям и знакомым. Как проситутке!
22) И ты себя спрашиваешь сейчас: "Так кто я все-таки, программист или ..."
Полагаю, что-то при переводе пошло не так.
По русски это должно быть скорее что-то:
Если ты и заработаешь на крутую машину - то только для своего босса. Как проститутка
Они отлично используются во всяких стартапах, когда надо побыстрому сделать прототип и срубить бабла. А потом нанять прогеров и те уже будут ваять норм систему на нормальных языках. С возможностью расширения и прочими прелестями ООП.
Ты, кажется, что-то путаешь. NodeJS - асинхронная платформа, которая решает свои определённые проблемы. jQuery - фреймворк для работы с DOM страниц, тоже решает свой стек проблем. Angular - тоже клиентский фреймворк, на каком языке ты собрался его заменять?
На любом, шарп, джава. Или скажеш что ниодин не способен заменить? Я понимаю, что доказывать что либо фанату джиэса про другие языки бесполезно, у них даже есть агрумент, что на джиэсе можно и под ардуину писать. Вопрос только в надежности и дальнейшем использовании проекта.
JS - язык, на котором никто старается не писать, а все юзают транслятор из в JS. Всякие CoffeeScript, ClosureScript.
Шарп, кстати, вроде рулит аяксовыми запросами. MS как обычно старается всю цепочку разработки занять собой.
Ну раньше да, а сейчас вы опоздали с заявлением. Тренд современного веба - vanilla js ES 6 harmony. А транслируют его в тот же js, только 5 и более ранних версий под старые браузеры. Последняя версия js так чиста и хороша, что большинство отказывается даже от ts в его пользу.
Я мягко говоря не фанатею от жабоскрипта, но - как дела с асинхронностью у конкурентов (особенно с учётом того, что нам нужна целая куча хреноты, использующей её, а не синхронные средства)? За вычетом, пожалуй, golang-а - ЕМНИП, там таки с ней всё неплохо.
Ну и да, с клиентсайдом вроде же всё совсем грустно.
Вот и я о том же, JS плох по многим параметрам, но сегодня он - единственное адекватное средство запускать код на стороне клиента. И, как ни крути, с этим приходится жить. И со своими задачами он справляется, проблемы скорее с зоопарком браузеров.
На PHP - phpdaemon, на голом С - плагины для nginx как минимум, а вообще несколько фреймворков, на Java - приложения под томкат с разными библиотеками, на C# - несколько фреймворков с нативной поддержкой async/await в языке, на Erlang - нативная поддержка в языке. В общем, у конкурентов с асинхронностью всё более чем хорошо.
Шта? Вроде ж речь идет про клиента (я не беру в расчет имбецилов, которые на JS клепают бекэнд и вообще серверную часть). Увы и ах, акромя JS на клиенте больше ничего вменяемого нет. Мы конечно можем достать из могилы Flash и Silverlight, посмотреть на них и вернуть обратно, ибо уже померли они считай что... Вот и приходится жить с этим.
Извиняюсь, пьян был. Ну про другие фреймворки не скажу, но шарп 5.0 научили из коробки в асинхронное программирование, в том числе есть оно и в ASP+MVC.
Ну - tomcat из коробки не предоставляет подобного ноде, емнип (из коробки в жабе только многопоточность, не?)
Да и киллерфича в том, что любой говнокод васи пупкина будет таки асинхронен (если он не писал специально синхронно).
Ну а шарповые - спасибо, надо глянуть, как оно там организовано.
Ну всё-таки нода предоставляет очень много того, чего нет в джаваскрипте. Это то же самое, что юзать не голый шарп, а уже с каким-нибудь фреймворком. Хочешь не хочешь, а напишешь так, как он требует. К тому же даже в ноде есть синхронные функции :) Так что если вася совсем пупкин, то он не будет заморачиваться пониманием асинхронности, и даже в ноде напишет блокирующийся говнокод :)
Ну так-то да, просто раз уж завели речь за ноду - чего бы не поинтересоваться состоянием дел конкурентов.
И да - в ноде таки есть синхронные функции, но рекомендуются по умолчанию асинхронные. Читай - вагон и телега говнокода скорее всего таки асинхронны. Чего не скажешь о, как минимум, части конкурентов.
Правильно, JS - унтерязык и пишут на нём унтерлюди.
Шучу, конечно, если голова есть, можно и на JS нормально писать, но вся эта свобода и расхлябанность позволяет плодить ещё больше нечитаемых спагетти, чем даже на PHP.
Так это же наоборот плюс. Несмотря на неявное приведение типов, ты всегда знаешь, какая операция произойдет - конкатенация или сложение, независимо от типа данных в переменной. И таких граблей, как на картинке, не будет. А насчёт того, что это вынесено в отдельный оператор, а не сделано функцией - ну так PHP прикладной язык, в работе с вебом самая частая задача - оперировать строками.
С безопасностью я имел в виду в первую очередь проблему с вводом от юзера. Экранирование строк - это понятно, но очень часто встречаюсь с тем, что люди, вроде даже опытные, то ли из-за лени, то ли по незнанию, не приводят данные, которые должны быть int, к нему же. Допустим, id статьи или элемента, просто берётся из URL или POST и посылается в БД, при том, что вместо него может быть что угодно. Хорошо, если фреймворк сам решает этот вопрос и экранирует вообще всё, что в БД уходит, а если нет, то вот вам готовая дыра для инъекции.
Ну и да, фишка с приведением строки к int 0 по-моему всё ещё работает, потому что это соответствует логике приведения типов в PHP, хоть и неочевидно. поэтому надо юзать === в таких местах.
Порою это несколько нудновато. Хотелось бы настраиваемости. Скажем, int в double разрешать автоматически кастить, если для задачи обратное не нужно.. В C++ можно тонко настроить преобразования пользовательских типов - удобно.
Хооя, Слабая типизация и самоконтроль тоже могут дать плоды...
Ну, как минимум -в теории возможен сторонний код с достаточно неочевидными входными/выходными данными (да, документация - гавно).
И да, хоть я уже давно не стреляю себе в ногу таким образом - зачем вообще давать такую возможность? :-)
Ошибиться с типом данных - это не выстрел в ногу, это грабли. Выстрел в ногу - это ошибиться с указателем в C. Или упереться в Stack Overflow. И всё это на микроконтроллере, без возможности отдебажить.
Я таки, наверное, дофига ньюфажен, но в чём качественная разница?
"Выстрел в ногу - это ошибиться с указателем в C."
Так-то в обоих случаях софтина в лучшем случае - падает, в худшем же - творит НЁХ, не? Не в отладчике же суть, думаю.
И да, я таки прочёл фразу трупа страуса, но она вроде не говорит о том, что в остальных нельзя.
Пфф, переполнение стека, это легкое почесывание ноги после укуса комара, ну погавкает собака да и хрен с ней, а вот динамическое выделение памяти - это самый настоящий выстрел в ногу причем с попаданием в бедренную артерию.
Как я сказал выше, если голова на месте, можно на чём угодно нормально написать. Только вот голова на месте далеко не у всех, и постоянно приходится сталкиваться с чужим кодом.
Согласен, просто в ЖС порог входа очень низкий, поэтому тааааак много гавнокода. Современный набор разнообразных тулзов помогает писать все чисто, красиво и правильно. Другой вопрос что до этого доходят не все, кто-то так и сидит на багфиксе жикверных проектах и ему похуй чего там и с чем, а кто-то пользуется всеми удобствами современного фронт-енда и все в радугах и единорогах вокруг.
Ну это обратная сторона доступности и востребованности кодинга. Благодаря этому у нормального программиста всегда будет хлеб с маслом, потому что в серьёзных конторах понимают, как много вокруг говнокодеров, и насколько дороже обойдётся за ними потом всё подчищать.
P.S. Серьёзная контора != большая контора, бывают большие, но населены идиотами, а бывают маленькие, но адекватные. Как бы то ни было, с тех пор, как широко стал доступен интернет, я ни разу не видел хорошего кодера, который бы долго сидел без работы.
Полностью согласен, я помню как тяжело мне искалась junior позиция, куча тестовых и прочей херни. Когда собеседовался на уровень middle - совсем другое общение. Для offer достаточно просто прийти и поговорить с teamlead. И сейчас ко мне стабильно 1 рекрутер в день добавляется в linkedin и каждый третий присылает вакансию.
http://thedailywtf.com/articles/bidding-on-security - тоже забавно.
Но если серьёзно, то недоучки должны страдать. Либо ты помнишь, как работают операторы, либо будешь наёбываться. Просто в случае с js надо помнить чуть больше про один оператор, а не чуть больше операторов
ой, блять, нахуй, всё!
...то есть я хотел спросить: ядро линукса - это чтоле эталон разработки програмного обеспечения?.. что удерживает его от пиздеца, так это не продуманность апи, а высокий порог вхождения и жестокое ревью изменений. Имхо, кнешно же.
Ядро линукса не крупное само по себе. Оно состоит из 100500 модулей, сущностей там кот наплакал, пилят его бородатые дядьки из 80-ых, которые знают много соглашений о сокращениях. И по всюду m4, транслятор. И да, C++ там местами тоже есть. И когда у тебя тысячи контрибьютеров, написать систему на миллионы строк за десяти лет становится внезапно не таким сложным.
Тут уже ответили, что оно состоит из относительно небольших модулей. И кто скажет, что написать его было легко и просто, пусть первый кинет в меня камень. К тому же не забывай, писалось оно огромным количеством бородатых дядек, которые собаку на си съели, и код ревьюируют такие же бородатые дядьки с лупой. Другое дело, что есть задачи, для которых он необходим по вопросам производительности. Потому он и живёт по сей день, и здравствует, и здравствовать будет ещё долго, несмотря на гораздо более современные альтернативы.
Ну было бы удивительно, если бы ты на СИ сайты писал) На моём проекте тоже сейчас нужен сишник, писать прошивку для устройства на микроконтроллере (и да, на время тестов это действительно ардуина).
Там нечего понимать, нужно только запомнить приоритеты, их совсем не так много. Вот для оператора сложения для единственного, по-моему, 4 варианта приведения типов, и в приоритете приведение к строке, а для всех остальных всё намного проще - оба операнда приведут к числу, если возможно.
Ну а преобразование в логический тип, извините, он везде такой, где слабая типизация. В js просто путаница с undefined и undeclared (второго типа не существует, но плюются все из-за того, что нужно делать проверку на неупомянутость переменной, и что её неупомянутость легко спутать с undefined).
ОМГ я давно так от души не ржал) Финалочка шикарная.
Ещё понравилось, как он начинает в первые раз говорить "Let's talk about JavaScript" и зал уже смеётся.
И да, со стороны это выглядит один в один как
Да, вот без шуток, я пытался вспомнить, когда я так искренне и открыто ржал, и чёт даже не смог. В детстве разве что. Какая-то особая программистская магия.
Некоторые варианты приведения типов в разных языках дают настолько странный и неожиданный результат, что единственное, что приходит в голову, когда видишь подобное - лишь немой вопрос: э... ЧЁ?!
Учусь по направлению прикладная механика. Ожидал ключи гаечные, масленки..., а вместо этого какие-то, блять, вариационные исчисления, САУ, аналитическая динамика. ВУЗ меняет людей.
О да, это по нашему: Раскидать вокруг граблей, а потом удивляться - "Да что за ёбанные грабли?! Куда не наступи, везде бьют по роже!".
С другой стороны, могу сказать по опыту, что человек, который подобным образом стреляет себе в ногу в JS, найдёт способ выстрелить себе в ногу и в строго типизированных языках, вроде Java/C#/C++. Благо, что способов любой язык даёт предостаточно.
Дело не в языке, а в отсутствии культуры программирования.
» 4 in l <- false
Programmer Memes
@iammemeloper
Without a doubt, the best programming language
11:09 PM -Sep28, 2023 121.6K ¡ews
» let l = [1,2,3,4]
<- undefined
» 0 in l <- true
» "0" in l <- true
1) Тебе приходится работать сверхурочно. Как проститутке!
2) Обычно ты работаешь допоздна. Как проститутка!
3) Как правило, ночью твоя продуктивность повышается. Как у проститутки!
4) Тебе платят за то, чтобы клиент остался доволен. Как проститутке!
5) Клиент платит много, однако почти все забирает твой шеф. Как у проститутки!
6) Тебе платят фиксированную сумму, но работать нужно пока не закончишь. Как проститутке!
7) Ты никогда не станешь гордиться своей работой. Как проститутка!
8) Тебе платят за удовлетворение фантазий твоих клиентов. Как проститутке!
9) Тебе трудно завести и содержать семью. Как проститутке!
10) Когда у тебя спрашивают, чем ты занимаешься, ты не можешь объяснить. Как проститутка!
11) У тебя теряются связи с друзьями, и ты общаешься только с себе подобными. Как проститутка!
12) Клиент оплачивает тебе проживание в гостинице и рабочие часы. Как проститутке!
13) Шеф у тебя имеет роскошный автомобиль. Как у проститутки!
14) Когда ты удовлетворяешь клиента, тебя ценят. Как проститутку!
15) Но в конце ты себя чувствуешь так, как будто из ада вернулся. Как проститутка!
16) Тебя проверяют на профпригодность изощренными способами. Как проститутку!
17) Клиент всегда стремится заплатить поменьше, но в то же время ждет от тебя чудес. Как от проститутки!
18) Каждое утро, просыпаясь, ты говоришь себе: "Я не собираюсь этим заниматься всю жизнь! " Как проститутка!
19) Ничего не зная о своих проблемах, клиенты ждут, что ты дашь им нужный совет. Как от проститутки!
20) Если что-то не так, виноват всегда ты. Как проститутка!
21) Тебе приходится оказывать бесплатные услуги начальнику, друзьям и знакомым. Как проситутке!
22) И ты себя спрашиваешь сейчас: "Так кто я все-таки, программист или ..."
По русски это должно быть скорее что-то:
Если ты и заработаешь на крутую машину - то только для своего босса. Как проститутка
Шеф у тебя... Как у проститутки.
Шарп, кстати, вроде рулит аяксовыми запросами. MS как обычно старается всю цепочку разработки занять собой.
Продвинутые чуваки - да, но по моему опыту в общем море процент таких языков-надстроек не так уж велик.
Ну и да, с клиентсайдом вроде же всё совсем грустно.
Да и киллерфича в том, что любой говнокод васи пупкина будет таки асинхронен (если он не писал специально синхронно).
Ну а шарповые - спасибо, надо глянуть, как оно там организовано.
И да - в ноде таки есть синхронные функции, но рекомендуются по умолчанию асинхронные. Читай - вагон и телега говнокода скорее всего таки асинхронны. Чего не скажешь о, как минимум, части конкурентов.
Шучу, конечно, если голова есть, можно и на JS нормально писать, но вся эта свобода и расхлябанность позволяет плодить ещё больше нечитаемых спагетти, чем даже на PHP.
Знаю про хрень вида "0" =="0fndbfhfbfhfhd" в более старом пхп.
Ну и да, фишка с приведением строки к int 0 по-моему всё ещё работает, потому что это соответствует логике приведения типов в PHP, хоть и неочевидно. поэтому надо юзать === в таких местах.
Хооя, Слабая типизация и самоконтроль тоже могут дать плоды...
И да, хоть я уже давно не стреляю себе в ногу таким образом - зачем вообще давать такую возможность? :-)
"Выстрел в ногу - это ошибиться с указателем в C."
Так-то в обоих случаях софтина в лучшем случае - падает, в худшем же - творит НЁХ, не? Не в отладчике же суть, думаю.
И да, я таки прочёл фразу трупа страуса, но она вроде не говорит о том, что в остальных нельзя.
P.S. Серьёзная контора != большая контора, бывают большие, но населены идиотами, а бывают маленькие, но адекватные. Как бы то ни было, с тех пор, как широко стал доступен интернет, я ни разу не видел хорошего кодера, который бы долго сидел без работы.
Конечно будешь, куда ж ты денешься...
Но если серьёзно, то недоучки должны страдать. Либо ты помнишь, как работают операторы, либо будешь наёбываться. Просто в случае с js надо помнить чуть больше про один оператор, а не чуть больше операторов
Ну то бишь есть, но его очень мало. Я не шарю, но по-моему там только численные переменные могут приводиться, типа int в float или float в int.
сутенеромдедлайном :-)На этом можно уже и остановиться было.
1. оно писалось, ЕМНИП, не мгновенно :-)
2. в этой области вообще вроде не так много выбора :-)
...то есть я хотел спросить: ядро линукса - это чтоле эталон разработки програмного обеспечения?.. что удерживает его от пиздеца, так это не продуманность апи, а высокий порог вхождения и жестокое ревью изменений. Имхо, кнешно же.
з.ы. ассемблер не предлагать - на самом деле я даже для сей недостаточно упорот.
Ну а преобразование в логический тип, извините, он везде такой, где слабая типизация. В js просто путаница с undefined и undeclared (второго типа не существует, но плюются все из-за того, что нужно делать проверку на неупомянутость переменной, и что её неупомянутость легко спутать с undefined).
и еще дело в том, все это говно должно хотя бы приводятся к false.
https://www.destroyallsoftware.com/talks/wat
но убило до слёз
Ещё понравилось, как он начинает в первые раз говорить "Let's talk about JavaScript" и зал уже смеётся.
И да, со стороны это выглядит один в один как
а в итоге чертежи на а2, а3, матереаловедение, безопасность на рабочем месте
https://www.destroyallsoftware.com/talks/wat
С другой стороны, могу сказать по опыту, что человек, который подобным образом стреляет себе в ногу в JS, найдёт способ выстрелить себе в ногу и в строго типизированных языках, вроде Java/C#/C++. Благо, что способов любой язык даёт предостаточно.
Дело не в языке, а в отсутствии культуры программирования.