для любого эпсилон больше нуля ВПИЗДУ! / it-юмор :: программирование :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

программирование geek it-юмор 
для любого эпсилон больше нуля
ВПИЗДУ!,программирование,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,it-юмор
Подробнее
для любого эпсилон больше нуля ВПИЗДУ!
программирование,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,it-юмор
Еще на тему
Развернуть
буду сисадмином
Ro-Mu 31 Ro-Mu 31 04.08.202121:31 ответить ссылка 1.5
С навыками программирования, чтобы зарабатывать 600кк в планковую секунду.
Tony001 Tony001 04.08.202121:35 ответить ссылка 13.6
после 2х недельных курсов на skillbox
Ro-Mu 31 Ro-Mu 31 04.08.202121:36 ответить ссылка 15.5
Бизнес аналитиком. Как работа не связана с аналами?
Только с твоим
Лови бизнес аналитика
А ты не осуждай
*30к срубылей в месяц.
Не так уж и плохо, есть куда падать.
LRSV LRSV 04.08.202121:49 ответить ссылка 2.5
попробуй, удачи
vover vover 05.08.202102:01 ответить ссылка -0.6
Нет, я в душе не чаю что это за шумы
А фрагмент из мема на 0:55
При просмотре, почему-то начал плакать.
Много нашего брата на нем полегло...
это божественно
Векторные поля забыли
A7ttim A7ttim 05.08.202108:38 ответить ссылка 0.7
когда пошёл в программисты
Это на каком языке? Жава?
На аутсорсинговом
Индийско-программистский
P Po P Po 04.08.202123:17 ответить ссылка 2.0
это какая-то индусская еботень, которую не так давно постили в комментах как классику жанра
никогда об этом ролике не слышал, но там пиздец полный
Это же Durgasoft. У них не только видео, там вся контора как портал в начало 2000х, достаточно по первой ссылке выдачи Гугла перейти
это классика блядь!
vover vover 05.08.202111:16 ответить ссылка 0.7
По-моему это лучшее фоновое сопровождение перед сном )
Tiki Tiki 05.08.202102:28 ответить ссылка 0.6
У меня плохие новости для тех, кто, не осилив матан, собираются в программисты.
Нет, сам матан врядли пригодится.
Но с такими навыками обучения, в программировании их потолок - обезьяна на галере, пишущая очередную систему заказов.
Да ты охуел
просто у людей гуманитарный склад ума - они по языкам больше
В жопе менеджера разве что.
Ага, открываешь книжку по программированию а там:

> Если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр (над этой монадой) — топос.

Ну или хотя бы

> Шаблон мост — структурный шаблон проектирования, используемый чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо», используея инкапсуляцию, агрегирование и наследование для того, чтобы разделить ответственность между классами.
Psilon Psilon 04.08.202123:51 ответить ссылка -0.4
В моих книжках иероглифы были. Наверное для тех, кто "по языкам больше"
- (void)downloadDataForURL:(NSURL*)url {
NSPurgeableData ‘cachedData = [_cache objectForKey:url]; if (cachedData) {
// Stop the data being purged [cacheData beginContentAccess];
// Use the cached data [self useData:cachedData];
// Mark that the data may be purged again [cacheData
aspi aspi 05.08.202100:24 ответить ссылка -0.2
ту что-то на яблочном
villy villy 05.08.202108:36 ответить ссылка 1.6
непривычно, но вполне читаемо
классика жанра
// Use the cached data
[self useData:cachedData];
...
// Use the retrieved data
[self useData:data];
nanoo nanoo 05.08.202112:09 ответить ссылка 0.3
Потому что:

1. Шаблоны не для начинающих программистов.
2. У банды четырех суммарно за тысячу ICQ и писали они для таких же додиков. Если в английской вики еще попытались как-то разжевать, то в русской ебашат по методичке.
3. Отрывок - не определение, а какое-то рандомное описание, которое втемячили в первый абзац и терминами сверху присыпали чтобы ваще все охуели. Тяпки используются в сельскохозяйственных работах и состоят из палки, крепления, и хуёвины.

Про функциональщину ничо не скажу.
Supert Supert 05.08.202101:52 ответить ссылка 3.4
такая „функциональщина“ хацкелисту нафиг не нада. так же как бесконечно малая сппшинку. прикол в изучении математики - развитие абстрактного мышления и всё.
nanoo nanoo 05.08.202112:16 ответить ссылка 0.0
Зависит. Если ты хочешь как нижник процессы гонять и делать про них какие-то далекоидущие выводы, если ты хочешь использовать продвинутые фичи вроде ранк2 - то понимание всего этого будет вполне полезно.

А так да, теоркат оверрейтед
Psilon Psilon 05.08.202112:47 ответить ссылка 0.9
> 1. Шаблоны не для начинающих программистов.

как раз для них. Где-то на уровне "назовите трёх китов" и "что такое солид/кисс/ягни".

> 2. У банды четырех суммарно за тысячу ICQ и писали они для таких же додиков. Если в английской вики еще попытались как-то разжевать, то в русской ебашат по методичке.

Обычные инженегры, даже не ресерчеры ни в каком виде. айсикью у них такое же как у всех. Ну да, немного структурировали шаблоны, знаю человека который по-другому их же сгруппировал - это же опять же инженерная задача. Просто они популяризовали, это они молодцы.

> Тяпки используются в сельскохозяйственных работах и состоят из палки, крепления, и хуёвины.

Это просто определение, как в оригинальной картинке. Дальше уже можно было бы подробнее расписать что имелось в виду, но книжку уже выкинули и пошли заниматься чем-то ещё.

А ответ простой: любая работа головой требует думать этой самой головой. Само оно ничего не приходит.
Psilon Psilon 05.08.202112:46 ответить ссылка 0.0
главное не путать, что связность должна быть высокой, а связанность - низкой
главное не перепутать thread, stream и flow в переводе, где это всё потоки
villy villy 05.08.202108:38 ответить ссылка 2.4
fiber ещё
Поэтому лучше не использовать рускоязычные термины. Отсюда кстати у разрабов этот суржик с таскми, промисами, кохэншнами и каплингом
Psilon Psilon 05.08.202112:55 ответить ссылка 0.1
сделаем робастненько, как говорил знакомый тимлид)
Это теория для тех, кто хочет продвинуться дальше. Начинать с нее - безумие, ты просто не поймешь какие задачи поставлены, как они решаются и почему именно так.
Hellsy Hellsy 05.08.202117:29 ответить ссылка 0.0
А потом они рассказывают, что написать софт без багов и крашей невозможно. Пидарасы.
Писать софт практически без багов как раз часто можно - для этого уже лет 30 как придуманы автотесты. Просто часто благодаря эффективному менеджменту бывает прямой запрет на их написание, либо полное игнорирование их надобности и возложение ответственности на программиста (а он вообще-то не то чтобы должен например эти автотесты в ci-cd интегрировать на добровольных началах).
Ведь практически всем проект нужно сдать "вчера" а тесты потом сами как-нибудь напишутся. Из воздуха блядь возникнут, не иначе. А секрет в том что нет - не напишутся. Тебя просто перекинут на другой проект и скажут "и так сойдет".
LcRL LcRL 04.08.202122:53 ответить ссылка 0.8
Есть древняя мудрость - тесты говорят о наличии ошибок, но не об их отсутствии. Если это юнит тесты, то ошибки будут на интеграции или end-to-end. Не на всё можно написать тесты в принципе. И я не говорю о том, что с определённого уровня на поддержание тестов нужно тратить время и самая мякотка - в тестах тоже могут быть ошибки. Мне достоврено известен кейс, когда на проекте было почти 100% покрытие тестами и инциденты там возникали более-менее регулярно, даже в протестированном коде
dibroo dibroo 04.08.202123:06 ответить ссылка 5.7
* Тратить времени больше, чем на разработку
dibroo dibroo 04.08.202123:10 ответить ссылка 1.4
Правильно, поэтому нужно брать идрис/кок и вместо тестов писать пруфы в коде!
Psilon Psilon 04.08.202123:54 ответить ссылка 0.9
0xdeadf00d, ты ли это?
Эх, если бы.

Надо бтв к нему в калифорнию (или он щас в техас переехал? Не помню) сгонять лично познакомиться. Но да, он меня смотивировал на всю эту фигню, статья про разворот списка была шикарна
Psilon Psilon 05.08.202112:56 ответить ссылка 1.2
Прикольно, что есть крутые люди, у которых хватает силы воли победить лень и прокрастинацию. Я лично иногда читаю рандомные статейки и руст курил, на этом мое погружение в мир типов повышенной строгости закончилось.

А если не секрет, в какой области работаешь? Насколько могу судить по вакансиям, в основном около-ФП наблюдается либо в финтехе (редко), либо в каких-то крипто-блокчейн-стартапах.
Ну до этого я работал в логистике, сейчас как раз подумываю про блохчейны-этц, просто потому что я знаю раст неплохо и там прилично платят. А так - без разницы, что писать, лишь бы люди интересные были. С этим в последнее время порядок, так что я доволен. Как говорится, если вы самый умный человек в комнате - то вы не в той комнате сидите.
Psilon Psilon 05.08.202120:49 ответить ссылка 0.9
ну, разумеется ничто не может быть гарантом при определенной сложности проекта. Разве что формальная верификация (но я в верификации не особо шарю, так что не буду ничего утверждать). Но в любом случае тесты искореняют довольно много ошибок, и плюс позволяют проектировать интерфейс так, чтобы он реально был модульным - это ли не счастье и идеал к которому стоит стремиться?
LcRL LcRL 04.08.202123:13 ответить ссылка 1.0
Верификация это просто типы на стероидах. Например мейнстримные типчики самим своим существованием делают невозможных приколюхи из мира динамики. Например, если ты написал что функция принимает инт, то строку туда не подсунуть никак, хоть что делай. Верификация просто позволяет вешать предикаты на типы. Ты мог бы обойтись и без них, просто делая везде типчики НенулевойИнт, ИнтМеньшеДесятиНоПростоеЧисло, МассивДлинойДваИлиСемь и так далее, просто это не оч удобно. А с пруфами можно просто навесить `(arr ** arr.Length = 7)` и все, тип за тебя будет сгенерирован, а ещё если ты чекнешь длину на 7 то сможешь автоматом использовать значение во всех контекстах где ожидается это условие, оно само подтянется из контекста.

Короч, как я выше написал рекомендую идрис - увлекательная зарядка для мозгов. Ну и в некотором кастрированном виде применить можно и в крестьянских языках.
Psilon Psilon 04.08.202123:57 ответить ссылка 0.2
Virgin Haskell Developer
dibroo dibroo 05.08.202100:10 ответить ссылка 0.7
звучит хорошо. а скинь ссылку какую-нибудь плз - чет не смог сходов идрис нагуглить
LcRL LcRL 05.08.202100:13 ответить ссылка 0.0
Можно ли осилить идрис, если хаскель знаешь на уровне хеллоуворлда, а теорию категорий на уровне функтора? Или сначала их раскурить?
Да можно, есть хорошая книжка (правда её тяжело найти) Type-Driven development with Idris - очень крутая. Начинается все с тривиальных примеров "давайте докажем что у нас нет нигде деления на ноль" и дальше все интереснее и интереснее.
Psilon Psilon 05.08.202112:42 ответить ссылка 1.2
>Ты мог бы обойтись и без них, просто делая везде типчики НенулевойИнт, ИнтМеньшеДесятиНоПростоеЧисло, МассивДлинойДваИлиСемь и так далее, просто это не оч удобно.

или можно написать проверки в сеттере, не скатываясь в маргинальщину
Это не маргинальщина.

1. С помощью конструкторов/сеттеров пытаешься поддерживать инвариант класса, ок. Но еще требуется поддерживать инвариант функций
2. Проверки придется написать своими руками, покрыть тестами своими руками. Зачем писать то, что может сделать компилятор?
3. Проверки в рантайме могут упасть в рантайме, это надо как-то обрабатывать
4. Самый смак: все такие проверки имеют свойство
а) либо расползаться по коду и дублироваться
б) либо приходится доверять кускам кода, полагаться на то, что то, что тебе пришло - уже правильное. И вот это самое мерзкое, я пишу на обычных ЯП (Си, питон), и у меня прям горит от этого.

Пример. Ко мне пришли какие-то данные, я проверил их, и пустил дальше. Какой-то модуль вынужден допустить, что там не NULL, что массив не пустой итп итд. Да, можно какую-то информацию вынести на уровень типов, но далеко не всю.

Например, в питоне с помощью аннотаций типов я должен явно указать, что аргумент функции/поле класса nullable, в противном случае, линтер поругается. Поэтому я могу проверить, что у меня есть какие-то нужные данные, и записать их в non-nullable поле структуры. Но каких-то ограничений на непустой массив, и тем более, более сложных, я наложить не могу.

Блин, выводить инварианты на уровень типов - это реально круто! Это в той или иной мере возможно во многих ЯП, это не обязательно сложно и требует знаний матана какого-то, но это дает новый уровень уверенности в коде.

Вдохновляющая статья:
https://habr.com/ru/post/498042/
а зачем ты продолжаешь грызть кактус сей?
villy villy 06.08.202100:21 ответить ссылка 0.0
Интересность проекта для меня важнее стека. И интересные проекты что-то нашлись на си, а на том же расте не особо. Недавно искал.
ну сам притаскивай в проект новые технологии. начальство никогда не придет и не скажет "а что это у нас тут устаревшие небезопасные технологии? непорядок! срочно внедрить самый новомодный язык!"
villy villy 06.08.202108:35 ответить ссылка 0.0
С новомодными языками, в частности, с растом, есть интересная проблема.

С одной стороны, мы имеем ЯП, который заявляет, что более безопасен, чем сишечка, и может снизить вероятность сделать широкий класс ошибок. Казалось бы, это то, что нужно в разных safety-critical задачах.

Но у нас есть компилятор раста и библиотека раста, которые выкатывают новые версии каждый месяц, и которые, хочу заметить, не гарантируют, что ошибок нет в них самих! И они есть, время от времени баги компилятора раста находят.

И если у нас safety critical (такое, что там регуляторы регулируют и сертифицируют), то проще писать это с использованием определенного кодстайла (вроде MISRA C) и компилировать расово верным сертифицированным компилятормо (вроде IAR), чем писать на расте.
ну есть же разница, с одной стороны, я сижу и пилю свой проект, а параллельно чуваки пилят руст. когда-то у меня будет безопасный проект на безопасном языке. на халяву.
с другой стороны, я сижу и пилю на сях, и никогда он не станет безопасным в принципе.

административный подход к безопасности не работает. доказано всякими микрософтами, гуглами и тд, у которых частота косяков в проектах на сях/плюсах с годами не снижается
villy villy 07.08.202112:25 ответить ссылка -0.3
почитал вдохновляющую статью - херня какая-то.
во-первых, хочется автору плюнуть в харю за попытку придать всем хорошо известному термину "парсинг" какой-то свой новый ёбнутый смысл.

про арбузинг системы типов тоже тупость.
рассмотрим его привет с функцией head. заебись, мы сделали тип, который нам "упрощает" вызов head. а потом мне понадобился tail - мне этот же тип расширять или другой мутить и туда-сюда перекладывать данные? а потом я захотел вызвать head(tail(arg)) - и всё, на колу мочало, начинай сначала - делаем тип, в котором будем хранить 2+ элементов?

нормальные люди делают вменяемое апи. в данном случае можно было бы сделать 3 функции: maybeHead, headOrDefault, headOrThrow - и всё.

не обязательно систему типов перегружать фичами, чтоб иметь ниибически широкий функционал. design by introspection от D как пример. сама система типов далеко не самая навороченная, эт вам даже не Цейлон с его reified generics и прочими intersection types, не говоря уже про что-то более навороченное. но ее охуенно дополняет compile-time function execution.

да и прост надо головой-то думать - как другие люди будут работать с таким фреймворком ad hoc типов?
villy villy 07.08.202109:44 ответить ссылка 0.1
1. > рассмотрим его привет с функцией head
Безусловно, реализация непустого списка в статье, не особо применима на практике, потому что нельзя просто так взять и сделать кальку с Haskell в плюс-минус мейнстримном языке, как минимум, потому что списки в том же Haskell - это связанные списки, что дает легкость операций head, tail, а бонусом идут всякие хитрые оптимизации компилятора. Получится неудобное и медленное говно.

2. > а потом я захотел вызвать head(tail(arg)) - и всё, на колу мочало, начинай сначала - делаем тип, в котором будем хранить 2+ элементов?
Зависимые типы не завезли ни в раст, ни даже в хаскель. Автор рассуждает о самом задротском способе подъема на уровень типов на примере ЯП, в котором этого нет и близко. Если в ЯП есть зависимые типы, то можно было бы списку указать ограничения и получить "список длинной не меньше 2" без копипасты.

3. > нормальные люди делают вменяемое апи. в данном случае можно было бы сделать 3 функции: maybeHead, headOrDefault, headOrThrow - и всё.
Может, у меня уже какое-то когнитивное искажение в сторону ФП и типодроча, но я не понимаю, как этот подход нам поможет в общем случае.
3.1. Напомню, что изначально задача стояла не получить head, а получить абстракцию "непустой список". Вы обосрали реализацию через head-tail, в чем я с вами согласен, потому что она неудобна в мейнстримных ЯП, и тут же предложили ее только в другом виде. Применяю ваш же контр-аргумент: что если мне нужен список с двумя и более элементами (head(tail(arg))? maybeFirst, maybeSecond и так далее? Возвращать tail? Если у нас есть NonEmptyList, то tail(NonEmptyList) != NonEmptyList, tail может быть пустым.
"я не понимаю, как этот подход нам поможет в общем случае"
ну, похоже, автору очень не нравится каждый раз делать проверку на null, ловить эксепшен, или что там еще может быть. в старых языках вообще не запаривались. в новых компилятор ругнётся.

так вот, что обычно люди делают с неожиданно пришедшим null'ом?
либо это адов косяк, при котором дальше работать не получится; либо можно заюзать дефолтное значение и идти дальше; либо это значение надо надо тупо передать дальше, и пофигу, что там было.

вот на эти 3 самых частых кейса я и предлагаю замутить свои функции. а если их не хватает - ну придется уже написать свою обработку.

по-моему с таким продуманным апи можно очень даже ненапряжно жить
это кстати пратичски как в котлине или Шарпе
list[0]!! // throw
list[0] ?: default

"maybeFirst, maybeSecond и так далее?"

list.tail().maybeFirst()
list.tail().tail().maybeFirst()
villy villy 07.08.202113:18 ответить ссылка 1.2
Ну у нас функции вида maybeXXX возвращают null/Maybe. С их помощью мы не избавляемся от проверок на null.

Если maybeFirst возвращает null, то делая
list.maybeFirst()/list.tail().maybeFirst()/... мы можем получить null, и здесь у нас варианты:
1. Проверить на null, а мы как раз хотим уйти от проверки на null
2. Забить, и тогда можем получить условный NullReferenceException

Если maybeFirst возвращает Maybe {Nothing | T} (либо пусто, либо T, но нельзя неявно привести к T, в отличие от null), то
1. Нам придется проверить, что это не Nothing, а мы как раз хотим уйти от подобной проверки
2. Сделать небезопасный unwrap() и получить эксепшн/panic, если там таки был Nothing. Разница в том, что в отличие от null, unwrap явно прописан

Итого, мы либо пишем лишний код, либо получаем эксепшн, что, в принципе, мало чем отличается от банального выхода за границу массива в языках, в которых эта проверка осуществляется (java, c#, rust etc).

> так вот, что обычно люди делают с неожиданно пришедшим null'ом?
Возможно, я кэп, но идея в том, что мы хотим, чтобы у нас были гарантии времени компиляции, что неожиданный null или иное говно не придет. Т.е. чтобы не было internal error, this exception couldn't be raised и прочего говна.

Идея лифтинга на уровень типов вообще и завтипов в частности в том, что сделав проверку на принадлежность данных какому-то множеству значений один раз, мы дальше гарантируем, что данные точно принадлежат домену.

Условный пример на условном языке. Не привожу пример с NULL, потому что not-nullable уже завозят потихоньку в языки
2
3
4
5
6
7
8
5
10
11
12
13
14
15
16
17
18
15
20
21
22
fn do some shic() -> Resulc<Error, 3ar>
Bi
// Пришли какие-то даные, их может быть ноль Lisc<Foo> raw_daca = gec_daca();
// Обработка данных, которая возврашает объект типа с суженной областью допустимых значений // 3


Все, в функции do_other_shit нас вообще не парят никакие проверки, никакие null, вообще нихуя. У нас тупо не может быть неожиданно пришедшего null/пустого списка. Компилятор гарантирует, что кто-то заранее озаботился проверкой, а если не озаботился, то не скомпилируется.

ИХМО, это принципиально отличается от устоявшегося подхода с getMaybe/getDefault, которые предполагают, что хуйня может произойти на любом уровне.
в моём примере tail возвращает список. tail от пустого списка - тоже пустой список.
так что можно сколько угодно раз его дернуть перед maybeHead, в отличие от варианта автора той статьи.
то, что во многих языках вообще что угодно когда угодно может оказаться нулом, я оставил за скобками.
неспроста эту хрень в жабе обозвали ошибкой на миллиард долларв.

пихать в систему типов что-то помимо того, что есть в теории категорий, имхо, не лучшая затея. этак мы начнём программировать на системах типов.
даже с размером списка, я более чем уверен, в компиляторе будет отдельная ветка обработки. а потом разгребай corner case'ы на стыке нескольких таких кастомных параметризованных типов.
алсо тормоза при компиляции. скала вон тормозит, хотя там система типов не сильно-то навороченная.

самая охуенная система типов в Цейлоне. она прагматичная, без всяких там извращений высших порядков, некоторые вещи захардкожены, зато быстрая.
жалко, что пидоры из ibm денег не дают его дальше пилить :(

попроще в котлине, но тоже заебись. скорее всего под капотом там происходит примерно то же самое, просто в самом языке не все типы описать можно.
villy villy 07.08.202114:39 ответить ссылка 1.2
Про Цейлон спасибо, покурю.

В котлине прикольная null-safety, но мне не особо зашло, как сделано (правда, смотрел давно, мб было лучше). Т.к. там компилятор делает все эти преобразования неявно под капотом, бывает, не очевидно. Я как-то сталкивался, когда переменная ну не может быть нулл, ну я все просмотрел, а компилятор не вывозит (мб он не умеет анализировать несколько файлов сразу, хз), приходится вставлять подпорки.
я с котлином работаю плотно. последний раз косяк компилятора ловил сколько-то лет назад, и был он в интеропе с явой, вроде бы.
всё вроде норм уже давно

эт мож на стыке с явой происходило? оно понимает какие-то аннотации (типа @NotNull, каждый фреймворк себе такие наплодил), но если их нет - се ля ви
villy villy 07.08.202115:35 ответить ссылка 0.0
4. design by introspection
Можете подсказать, как это поможет решить задачу? Не сарказм, я об этом первый раз услышал.

5. да и прост надо головой-то думать - как другие люди будут работать с таким фреймворком ad hoc типов?
Ну, это проблема. Если говорить о FP-inspired типоматане, то он весьма навороченный. Алсо, в моем изначальном комментарии я не призывал к типоматану, я призывал к поднятию определенных проблем на уровень типов, частично это можно сделать и на уровне мейнстримных ЯП, просто типоматан дает больше возможностей, имхо. А типоматан требует какой-то перестройки мышления. Ну а вообще, индустрии не нужны навороченные ЯП, индустрии нужен Go, который не сильно далеко от Си ушел в плане той же обработки ошибок, но на котором можно посадить писать человека почти с улицы.
ну конкретно с head - надо подумать...
допустим, нам действительно очень нужен список с минимум 1 элементом, на D-шных темплейтах можно намутить новый тип-обёртку над простым списком, привязать к нему стратегию, что делать, если список пустой. а если мы точно знаем, что он непустой (статический массив, например), то обёртка будет практически бесплатной.

у них есть либа, оборачивающая Int таким образом, что при переполнении триггерится некая стратегия обработки. а если вдруг она тебе не нужна, то эта вся машинерия схлопывается в обычный инт.

и вот мы потом пилим алгоритм, в который хотим работать с обёрнутыми списками, или статическими массивами, или еще чем-то.
мы можем чекнуть, а что вообще на этом типе определено. есть у него размер - давай размер, есть head - давай head юзать, есть popFront - тоже покатит.
проверки мы сделали еще на этапе компиляции, и оверхэда на всякие обёрточки, прокладочки, декораторы, врапперы и прочие прокси не будет.
как и лишных проверок в рантайме, а не пустой ли нам тут список прилетел.
в других языках пришлось бы мутить свою реализацию под каждый кейс, а в D это пара статичских if'ов

надеюсь, хоть немного понятно выразил мысль.
villy villy 07.08.202112:56 ответить ссылка 1.2
Прикольная штука, спасибо.
Go я ваще не понимаю. Своим путём идут. Мимо всего накопленного опыта по дизайну языков.
Им говорили, современный язык без дженериков - это хуита, сначала не слушали, потом всё-таки запилили, но только для коллекций. Говорят, сделайте нормальные эксепшены - упираются. Посмотрим, надолго ли их хватит.

Если б не бабки гугла и его авторитет, эта херня не тянула бы и на курсач
villy villy 07.08.202113:01 ответить ссылка 0.2
> Ты мог бы обойтись и без них, просто делая везде типчики НенулевойИнт, ИнтМеньшеДесятиНоПростоеЧисло, МассивДлинойДваИлиСемь и так далее, просто это не оч удобно.

Так их и делать не удобно, если нет чего-то типо newtype из хаскеля. Единственный вариант, который я знаю в мейнстрим языках - это оборачивать в структуру. Но потом придется вынимать обычный int из "НенулевойИнт", чтобы его использовать. А тут уже поле для ошибок и компилятор не моможет. Либо писать миллион перегрузок, что еще больше жесть.
Это собственно и есть из чего складывается "неудобно". Под делать естественно имеется в виду вся работа с ними в том числе
Psilon Psilon 05.08.202120:46 ответить ссылка 0.0
Есть ещё проперти-тесты, но да, самая большая подляна в том, что в спецификациях, соответствие которым тестируется, можно тоже наделать ошибок, причём разного рода (внутреннее противоречие, несоответствие требованиям, просто баги, дающие ложноположительные срабатывания)
Баги спецификации можно обнаружить, записав их в типы- компилятор подскажет, что требования противоречивы. Весь вопрос, как всегда, в сложности. Чем круче типы, тем дольше работа. Хотя и надежнее.
DYNAMIC static
TYPING	TYPING
Psilon Psilon 04.08.202123:59 ответить ссылка -0.1
А потом начинается такая херня:
checkM = +('' + data.eval).substring(5, 7);
А просто надо на языках с нормальными типами писать, а не на говне всяком
Типы не избавят от неадекватной спецификации (заказчик хотел одно, ты написал в типах другое)
Нужно тесты покрывать тестами.
aspi aspi 05.08.202100:26 ответить ссылка 1.3
Я знал, что рано или поздно мы перейдем и на эту дрянь.
villy villy 05.08.202108:45 ответить ссылка 0.3
agile и scrum для написания тестов?
nanoo nanoo 05.08.202112:23 ответить ссылка 0.0
villy villy 05.08.202112:29 ответить ссылка 0.0
А тесты, для покрывания тестов, нужно тоже покрыть тестами!
а можно баг сделать в тесте... причем логический - от того, что хреново понял требования или бизнес-модель. И мало что тебя от этого убережет
Может тогда не браться за такие условия работы? Но если человек допускает, что можно делать говно, он будет делать.
tdd хуйня. кода писать в 5 раз больше.
nanoo nanoo 05.08.202112:20 ответить ссылка 1.1
Как говорил один умный дядька: "если вашем ПО нет багов, значит оно не делает ничего полезного".
А если серьезно, это вопрос бабок.
Можно отправить команду "сеньер + 3 джуна + ручник" делать проект. Быстро-дешево с багами.
Можно набрать команду сеньеров, наебенить отдел автотестов отдельный, классно спекать задачи, обмазываться хорошими практиками и вот это всё. Будет в 10 раз дороже и втрое дольше, багов почти не будет.
Стоит оно того? Зависит от бизнеса. Если на луну лететь или робота-хирурга делать, то, наверное стоит. Если клепать лэндосы, то, наверное, нет.
kirrik kirrik 05.08.202109:23 ответить ссылка 0.5
Если все перестанут браться за такие проекты, они исчезнут.
Цитата херня. "Если в ваша обувь целая, без разошедшихся швов и правильно собрана, значит она не несет пользы как обувь".
Ну если в обувную метафору уходить (Макконел не одобряет), то ПО написали, но еще не пользовались. Поэтому багов в нем нет (точнее нет репортов)
kirrik kirrik 05.08.202116:25 ответить ссылка 0.0
Где ж ты таких "всех" перфекционистов найдёшь?) 80-95% процентов кодят за деньги и им пофиг, если заказчику пофиг. Ещё какой-то процент работает ради интереса к результату и им интереснее, чтоб их код скорее начал делать что-то охуенное, чем полное отсутствие багов - баги можно пофиксить "потом". И только, наверно, пара процентов поборников "идеального кода", готовых искать идеологически правильные проекты.
SSSZ SSSZ 05.08.202115:36 ответить ссылка 0.1
Я в курсе. Я о том, как должно быть.
Почему-то относительно "не для каждого" профессия стала вбирать в себя огромные массы совершенно не подходящих для этого людей. И теперь "программирование это легко, просто пройдите недельный курс".
Пиздец.
Нет, так быть не должно. Будет так порешает рыночек. Это раз.
А два - программистом может быть кто угодно. Это не какая то ультра непостижимая профессия. Секретов в ней нет. Только бабки и желание их зарабатывать. Се Ля Ви.
vladis_s vladis_s 06.08.202122:33 ответить ссылка -0.6
Рыночек порешает. Если каких-то проектов (например без багов) нет, значит никто не готов их оплатить.
Можно из огорчения что в мире мало проектов без багов завести акк на гитхабе с парой проектов. HelloWorld, FizzBuzz, еще что-нибудь такое надежное.
kirrik kirrik 05.08.202116:30 ответить ссылка -0.5
Да и матан тоже пригодится, если работа над серьёзными проектами, а не сайтики верстать.
А то и вторая вышка по проф. специальности
Hagh Hagh 04.08.202123:00 ответить ссылка 0.3
Приведи пример
Только не такой, где можно пригласить из универа профессора на три дня, а где реально нужен ботающий разработчик
Ну например у нас есть модуль решения VRP задачи: нужно раскидать множеству курьеров множество заказов, с учетом ограничений на вес, товарное соседство (нельзя везти химию с продуктами, например), всякие слоты бронирования, факт того что по некоторым дорогам некоторым тяжеловозам ездить запрещено, и вот это все... Без знания хотя бы базы вроде муравьиных алгоритмов, отжига, симплексов и т.п. просто на собесе разворачиваем. И нужен не математик, а именно что разработчик, кодес писать на этом вашем расте. Потому что бизнес приходит с хотелкой "нам нужно добавить возможность кругорейсов когда водители при досрочном завершении заказов возвращается обратно на склад и забирают следующую пачку заказов. Подсоби плз. И чтобы оптимально!!1", то тут задача типикал программиста придумать, как это сделать и запрогать, а не сказать "решение есть" и уйти в закат.
Psilon Psilon 05.08.202100:03 ответить ссылка -1.7
Для этого есть "профессор из универа" с навыками программирования и программист, который возьмёт этот код и зная особенности языка оптимизирует его.
Ты видимо никогда не видел код "профессора из универа" - там такой говнокод, что это проще выкинуть целиком. А оно должно быть поддерживаемым, расширяемым и проче *ым, в которое профессоры из универа не умеют.
Psilon Psilon 05.08.202112:49 ответить ссылка 1.2
А нанимать двух людей там где можно взять одного - на любителя. Тем более, что процесс коммуникации профессора с разрабом (который не знает математики) будет долгим и болезненным. Потому что вполне вероятно, что разработчик может "соптимизировать" алгоритм так что он перестанет быть корректным. Или наш дорогой математик придумает классный алгоритм с офигенным O(N) но такой константой, что при нашей жизни он никогда не завершится.

---

К слову у нас есть человек, который этим занимается. Сидит, пишет код, срется в чатиках про языки, читает параллельно пейперы про то, что там нового про задачи оптимизации придумали, ищет что из этих пейперов можно украсть к нам, чтобы улучшить какие-нибудь характеристики.

Короч, был вопрос "приведи пример" - я привел.
Psilon Psilon 05.08.202112:54 ответить ссылка 0.1
можно попросить профессора написать не рабочий код, а т.н. "псевдокод", т.е. описание алгоритма.

а реализацию напишет уже другой человек
Ты сейчас описал задачу коммивояжера, которая не имеет решения в общем виде. Зачем вам "муравьиных алгоритмов, отжига, симплексов и т.п. " для решения такой простой задачи в конечном виде, не понятно. Алгоритмов по интернету - куча. Любая питон-макака сделает за миску риса.
> Любая питон-макака сделает за миску риса.

Я посмотрю на питон макаку, которая напишет алгоритм, работающих на реальных данных (ну хотя бы 1000 заказов, 100 машин, 50 ограничений) за адекватное время и выдающий +- нормальный результат (не хуже, чем результат распределения Яндекс.Маршрутизации),
Psilon Psilon 05.08.202112:51 ответить ссылка -0.9
Это вопрос времени. Я уверен что даже у вас не получилось с первой попытки как надо.
>на этом вашем расте
фу блять. я к вам и на собеседование не пошёл бы.
nanoo nanoo 05.08.202112:27 ответить ссылка 0.1
Слышь, дядя, поясни за раст!
кто носит кепку марки раст
тот настоящий пидераст
nanoo nanoo 05.08.202117:02 ответить ссылка -0.6
Я бы не сказал что это какой то пиздец матан. Алгоритмы давно доступны в сети и полно примеров реализаций. Неделя на раскуривание, месяц на разработку/отладку. Матан ненужон.
Надо написать быстрее чем все реализации в инете. Это скаладывается как раз из факторов:

1. понять, что в алгоритме плохо
2. понять, что ты видел другой схожий алгоритм, где это делается
3. подружить ежа и ужа. Получить итоговый алгоритм лучше, чем оба исходных
4. посмотреть что за последние пару месяцев вышло по теме, найти ещё пару прикольных моментов, вкорячить себе
5. радоваться, что все работает
6. приходит заказчик и говорит что хочет добавить ограничений, которые при наивной реализации роняют перф в 10 раз. Сидишь неделю и думаешь, что как
7. goto 1
Psilon Psilon 07.08.202100:24 ответить ссылка 0.0
Переменный в математике: *греческий и ещё пара мёртвых языков от которых плывёт в глазах, а за пояснением что это надо читать другую книгу*
Переменные в программировании: thingA, thingB, thingAPlusThingB
Просто говоря по своему опыту, понять что делает алгоритм на почти любом языке будет проще, чем понять тот же алгоритм математическим уравнением (да, может быть для записи это будет проще, но мы говорим про обучении)
То, как выглядят переменные и символы - наименьшая проблема из возможных.
(15 pli) Find the general solution of the homogeneous different!»! equation
Шо это?
> обезьяна на галере, пишущая очередную систему заказов

А что не так? :) Это 5-10 средних зарплат по стране как минимум. Грех жаловаться, обезьянке то.
faiwer faiwer 05.08.202110:55 ответить ссылка 0.5
Да не, всё так, на самом деле. И ведь кому-то надо и системы заказов писать. Пусть они и кривые-косые, но это всё ещё лучше, чем их отсутствие.
Просто это ограничивает технический рост - к серьёзным вещам и бóльшим зп.
Впрочем, если у кого-то есть организаторские возможности и желание, можно идти в тимлиды на ту же галеру. Они тоже нужны.
Секрет большЕй зарплаты не только, и не столько в самих знаниях, сколько в навыке продажи своей тушки. Человек с подвешенным языком и чутьём легче выбьет себе высокую з\п, чем нерд, осиливший теорию категорий. Ну и да. Про тимлидов ты правильно сказал. Начиная с какого-то момента программиста всё его окружение начинает убежать что "руководить" важнее... Этому сложно сопротивляться. А это уже совсем другие навыки. Совсем не монады.
faiwer faiwer 05.08.202111:23 ответить ссылка 0.2
Навык продажи тушки тренируется автоматически.
И при равном навыке продажи, продать себя при наличии хорошего навыка обучения и как следствие - огромного багажа знаний и умений, можно гораздо выгоднее.
В галерах есть верхняя граница зп, выше которой не прыгнуть, хоть сеньору, хоть тимлиду.
А в продуктовых зрелых компаниях, с теплыми местами, типичные галерные гребцы не нужны.
Например, у меня аллергия на веб и галеры. Системный си программист, как раз сейчас перекатываюсь с работы на работу. Матан не спрашивают, но дрочат многопоточностью и железом в хвост и в гриву. На крудошлепстве мир не заканчивается. Алсо: в одной из контор спросили по линейной алгебре и линейной регрессии.
Я правильно тебя понял, что ты сейчас web-backend подвёл под крудошлёпов? А плюсы возвысил, ибо там "многопоточность и железо"? :-)
faiwer faiwer 05.08.202111:39 ответить ссылка 0.7
Подвел. Не возвысил.
1. Веб бэкенд разный бывает.
1.1. Можно пилить адский хайлоад, где тебе придется нетривиально издрочиться, чтобы все это реализовать, иногда в процессе этого дела, крупные компании запиливают и потом выкатывают свои нетривиальные продукты, типо in memory баз и прочего.
1.2. Есть проекты, где всякая бизнес-логика замудренная
1.3. Но по моему опыту бэка, у тебя, в лучшем случае, 20% бизнес логика, и 80% - репозитории, фабрики фабрик, сервисы, DTO, мапперы и прочая перегонка данных из одних классов в другие
1.4 А есть и CRUDошлепство, и уверен, его больше. Я лично занимался таким на ASP.NET. Странички, реквесты, в базу пару запросиков сделал, данные слепил, на фронт отдал. Ну и отчетики всякие лепишь.

2. Плюсы тоже разные бывают.
2.1. По моему опыту, большинство вакансий по плюсам - это тот же бэк, только не на питоне/шарпе/жс/го, а на плюсах. Даже если это не непосредственно прямо-таки веб-бэкенд, все равно это что-то крайне близкое к нему с точки зрения задач.
2.2. Я ищу просто весьма специфичные вакансии, связанные с железным дрочем, это не свойство вакансий плюсов, а просто мои вкусы

3. Интересность задач в первую очередь зависит от проекта, а не от стека
С такой позицией согласен.
faiwer faiwer 05.08.202116:13 ответить ссылка 0.0
> спросили по линейной алгебре и линейной регрессии
Пиздец бля рокет саенс, земля тебе пухом.
>С такими навыками обучения
Какими? Я легко за 2.5 часа после проебанного месяца (у нас каждый месяц сдачи контрольных, без сессий) осваивал практику.
А теория это пиздец, 30 страниц а4 попересокращенных доказательств просто из нечитаемых наборов символов.
Кому оно нахуй нужно? Все серьезные задачи давно расписаны в сотрудничестве с теми, у кого памяти хватает на всю эту хуйню, да там уже и нейроночки подоспевают которым похуй на некоторые стандартные проблемы и они находят шорткаты.
Я вот не вижу чтобы за рубежом бомбили на матан так сильно - правильно, ведь у них это не лотерейные билеты, а сдача сугубо с практикой - все зарубежные мемы про учебу это набор реальных задач которые ты решаешь на тесте.
Именно вот с такими. Ты ведь даже не прочёл то, что я написал.
Не важен сам матан, важно то, сможет ли человек его осилить.
Это коррелирует с возможностью осилить сложные вещи в программировании.
Потому, не можешь осилить матан, не сможешь и в ИТ продвинуться дальше, чем обезьяна на галере.
Повторяю, каким образом постсоветский рудимент человека-болванчика, пихающего в себя полтома доказательств должен быть показателем чего-либо, когда погромизды справляются без этого в других странах? Даже не так, этот принцип "болванчика" (от слова болванка) даже у нас уже пытаются искоренить.
Тема бугурта поста никак не связана с "непониманием" матана, она связана с тем что студент тянет лотерейный билет в датабазу с полугодом часовых лекций 3+ раза в неделю, без надежды выехать на понимании, если не воспроизведешь рандомное доказательство-прересдача.
"куб где монотонным голосом тетка рассказывает что-то из матана"
Опять же, какой конкретно матан нужно осилить, как глубоко, охуевший?
Нужно обязательно познать весь, даже чтобы писать графические библиотеки, где алгем?
А, ты ж просто кидаешься утверждениями без пруфов, а когда нечего ответить жмешь минупс и скрываешься
Потому что ты опровергаешь не то, что я написал, а какую-то свою шизу в голове.
Я не сказал, что нужно учить матан. Я вообще и близко не подходил к системе образования и её нюансам.
Я сказал, что если ты не можешь сам осилить матан, неважно, где и как (это можно сделать и просто прочитав учебники, даже не учась нигде, внезапно), то в сложные аспекты программирования ты тоже не сможешь, потому что у них схожий уровень сложности.
У тебя всё гораздо хуже, ты не можешь осознать одну, весьма несложную, мысль, и говоришь с голосами в своей голове.
Ну если у кого и мультишиза, добавляющая голоса в чужие головы, то точно не у меня. Если ты в контексте поста считаешь что твой выпук как-то живет в своей реальности, то хз, ведь "осилять" эту хуйню вообще не стоит, а именно ее "при любом дельта", потому что куча хуйни для теоретиков, а практика этих дельт никогда не видит.
Уровень сложности абсолютно разный, одно дело ты создаешь реальные методы, обьекты, работаешь с вполне определенными типами и стандартами и совсем другое когда читаешь шизоидные высеры очередного учебника под редакцией очередного мухгу, ИТАКДАЛЕЕ, ОЧЕВИДНО.
Я тебе пытаюсь объяснить, что выше "работы с определенными типами и стандартами" на стандартной галере ты не поднимешься.
В ИТ есть куча вещей вполне сравнимых с матаном по сложности. Но лично ты, как уже ясно, до них никогда не дойдешь, тебе ебашить фабрики классов в сервисах на галере - самое то.
Это не так и плохо, на самом деле. Не надо так бомбить.
Опять проецируешь? Заглядываешь в мои мозги без меня, оценивая мои знания лишь по тому, что я сру неэффективный метод образования, без которого живет и здравствует весь остальной мир? Любитель подрочить матлаб вместо реальных приложений? Ну и сиди решай задачу коммивояжера 10 раз 3 повторения
А теперь попробуй мне рассказать, где я говорил про методы образования. Ты опять говоришь не со мной.
а мне стало даже интересно что там за дельта.
trimka trimka 04.08.202122:39 ответить ссылка 0.0
...f(x)-f(a) больше нуля при x>a, то функция называется возрастающей на участке {x;a}, например
zpyroz zpyroz 04.08.202122:52 ответить ссылка 0.3
А в программировании:
JavaScript...
..буду
проституткой
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
Newbie: So which programming language should I learn first? Programmers:Почему? Почему?! ^>о->Ьаг() — Почему? — А, вот почему...code comments be like ***i-*-S^lВыбираем первый язык программирования Да т У вас есть друзья? i Да Т Хотите много зарабатывать? jL Да ш Вы тупой? т. Т Вы насмотрелись уроков ХАУДИ ХО? /Г Да 7 Python Вам г~ нравится 1 1 Windows? Нет Fortran А они вам нужны? Они тоже РНР тупые? Да т
подробнее»

языки программирования программирование geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор сложный выбор путь в IT it-юмор

Выбираем первый язык программирования Да т У вас есть друзья? i Да Т Хотите много зарабатывать? jL Да ш Вы тупой? т. Т Вы насмотрелись уроков ХАУДИ ХО? /Г Да 7 Python Вам г~ нравится 1 1 Windows? Нет Fortran А они вам нужны? Они тоже РНР тупые? Да т