Re[31]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 02:34
Оценка: +2
Здравствуйте, a7d3, Вы писали:

A>Тот кусок что приводился в ветке — это нечто на гране говнокода. Т.е. годится лишь на уровень прототипа, демонстрирующего работоспособность какой-то идеи или технологии. Одноразовый код, который пишется для последующего выкидывания на помойку истории.


Беда в том что современный опенсорс работает по принципу: зашевелилось — commit, push

... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[31]: Собеседования в Яндекс++
От: bzig  
Дата: 05.06.19 02:38
Оценка: +1 :)
L>То есть, у тебя set/get имеют какие-то сайдэффекты, которые никак не видны из их названий?

Попробую угадать — названия нужны только детсадовским.
Re[32]: Собеседования в Яндекс++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.06.19 02:40
Оценка:
Здравствуйте, CreatorCray, Вы писали:


CC>Беда в том что современный опенсорс работает по принципу: зашевелилось — commit, push


Что-то мне последним версии macOS, которые до появления версии .1, нельзя ставить сразу вспомнились. Наверное то, что ядро опенсоурс во всём виновато
Отредактировано 05.06.2019 2:58 kaa.python . Предыдущая версия .
Re[30]: Собеседования в Яндекс++
От: bzig  
Дата: 05.06.19 02:44
Оценка:
S>Будет, так как после одного вызова shared_descriptor_count() следующий обязательно вернёт не 0, если только не вызовется секция после else. компилятор учитывает первое, но не учитывает второе, так как логика преобразований в тех функциях после else не очевидная для компилтора, он не достаточно умён, чтоб это учитывать, вместо цикла компилятор генерировал исполнение тела цикла единыжды. Тот continue выглядит костылём, но он там нужен.

Допустим у тебя ограничения на компилятор и приходится использовать то, что есть. Допустим, даже переписать нельзя, чтобы не нарываться на баг компилятора. Но почему у тебя в этом месте нет комментария? Ты совсем ку-ку? Этот continue просто напрашивается, чтобы его убрали.

  Скрытый текст
Я так понимаю, потом ты с удовольствием будешь рассказывать, как какие-то "детсадовцы", которым доверили твой код "всё поломали". Ты просто эталон из палаты мер и весов, кого нельзя к совместным проектам подпускать.
Re[32]: Собеседования в Яндекс++
От: a7d3  
Дата: 05.06.19 02:51
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, a7d3, Вы писали:


A>>Тот кусок что приводился в ветке — это нечто на гране говнокода. Т.е. годится лишь на уровень прототипа, демонстрирующего работоспособность какой-то идеи или технологии. Одноразовый код, который пишется для последующего выкидывания на помойку истории.


CC>Беда в том что современный опенсорс работает по принципу: зашевелилось — commit, push


Ничего нового под Луной.
Раньше носители этой системы ценностей толкались в загоне аутсорца. Теперь, поскольку аутсорц отмирает и жутко деградирует, они стали смещаться в нишу опенсорса.
Раньше было модно работать гребцом на галерах в душных, шумных и вонючих опен-сейсах. Это давало ощущение покупки входного билета в волшебный и высокотехнологичный ИТ-мир.
Теперь модно коммитить на гитхабе и размахивать перед работодателями звёздочками в этом своём профиле.

Завтра в тренды ИТ выйдет другая форма эксгибиционизма, сродни выкладывания стриминга написания кода на видео-хостингах. С особо ценными комментариями и пояснениями голосом от того, кто это всё сидел ваял.
Re[33]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 03:17
Оценка: :))
Здравствуйте, kaa.python, Вы писали:

KP>Что-то мне последним версии macOS, которые до появления версии .1 нельзя ставить сразу вспомнились.

Чорт, а я то не знал! У меня эти версии до .0 стоят на куче машин, и что ж мне теперь делать то? Вай беда!!!
Может винду десятку поставить?
А, чорт, этих до SP1 нельзя было ставить ещё в начале века. А поскольку SP1 для десятки никогда не выйдет мы все обречены и умрОм!
Все на BolgenOS!!!

KP>Наверное то, что ядро опенсоурс во всём виновато

Несомненно!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[34]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 05:22
Оценка:
Здравствуйте, smeeld, Вы писали:

S>>Это находится не после else. А внутри.


S>Я это называю именно после else, а не внутри. "после" в Вашем понимании-это вообще после всего блока if — else.


Да что "в лоб", что "по лбу". У вас внутри while всего один if и последней инструкцией в else является continue. Что автоматически делает ее ненужной.

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


S>>PS. По большому счету, весь ваш вложенный while можно было бы записать так:

S>>
while((journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0) &&
S>>   (node_descp->get_current_storage_chunk() < get_journal_storage_chunk_count())
S>>{
S>>   node_descp->set_current_storage_chunk(node_descp->get_current_storage_chunk());
S>>   node_descp->set_shared_segment(journal_store(node_descp->get_current_storage_chunk()).first_descriptor_shared());
S>>}
S>>


S>Хе, и что Вы этим добились?


В школе это называлось раскрыть скобки. Чтобы из x=(2y + z) + (1 — z) — 1 получить x=2y.
Здесь в более простом и лаконичном виде написано то, что было реализовано у вас посредством if-а с break-ом. Ведь if с break-ом в основной ветке -- это условие выхода из цикла. А раз это условие выхода, то его следует включить в условие самого while.

S>Крутая оптимизация.


К оптимизации это не имеет вообще никакого отношения.

S>и надеясь, что компилятор вызовет все функции в нужном порядке


Порядок вызова функций внутри фрагмента:
while((journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0) &&
   (node_descp->get_current_storage_chunk() < get_journal_storage_chunk_count()))

имеет значение только если у вас методы-getter-ы (т.е. node_descp->get_current_storage_chunk(), shared_descriptor_count(), get_journal_storage_chunk_count()) имеют побочные эффекты. Что уже сильно плохо.

Еще хуже, если у вас есть сильная и неявная зависимость между порядком вызова каких-то методов. Например, вызывать get_journal_storage_chunk_count() можно только если предварительно был сделан вызов journal_store(). Если это так (а в вашем случае можно и такое ожидать), то это не просто сильно плохо.

Если же ничего подобного нет и у вас getter-ы не имеют побочных эффектов (как у нормальных людей, наслышанных о command-query separation principle), то о порядке вызова внутри такого условия можно не беспокоится.
Re[32]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 05:24
Оценка: +2
Здравствуйте, smeeld, Вы писали:

L>>То есть, у тебя set/get имеют какие-то сайдэффекты, которые никак не видны из их названий?


S>Это приватные функции, выполняющие определённую роль. Тот кусок кода-это из интерфейсной юзерспайсовой оболочки, предоставляющей доступ к функционалу высокопроизводительной системы стораджа через демон, функционирующий в юзерспайсе. Сама система-это система организации хранения данных, оптимизированная с учётом особенностей реализации драйверов шин блочных устройств в linux, а также особенностей взаимодействия кеша CPU, с областями памяти, которые выделены под зоны для DMA, в которых отображаются данные с диска. Она работает в обход подсистемы блочного IO ядра и слоя файловых систем в ядре. Основная функциональная часть реализации функционирует в kernel space. В юзерспайсе многопоточный демон, общающийся с кернел левелом через модифицированную подсистему epoll. Похожую вещь чуваки пропихивают в майнстрим. Сейчас в процессе превращения стораджа в распределённую систему хранения. Пока данные синхронизируются через упомянутый демон, организующий кластерный кворум в режиме мастер-мастер. Но есть планы реализовать обмен данными посредством RDMA. Требование к системе всегда было одно-производительность. Ради этой цели приходится идти на самые разные трюки. Порой код выглядит нечитабельным или малопонятным, но иначе никак. К тому куску выше это не относится, там тестовый набросок.


Это же нужно суметь так важно надуть щеки и наговорить кучу типа страшных слов вместо того, чтобы просто ответить на вопрос: имеют ли set/get функции какие-то побочные эффекты.

Вот за это решпект. Чувствуется многолетний опыт набивания себе завышенной цены.
Re[19]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 05:31
Оценка: +1
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, so5team, Вы писали:


S>Вот вам ещё кусок кода.


Подозреваю, что "в кадр" не попало еще 100500 строк, которые идут в db_engine::evaluate_statement ниже. Вы же не полностью код этого метода показали.

А к показанному претензии можно привести такие же, как к ранее обсужденному фрагменту: нет комментариев, большая вложенность, несколько циклов внутри одной функции.

Заодно хочется спросить, а почему здесь вы не последовали собственному же убеждению:

> Тут же просто собраны все объявления переменных в одном месте, в начале фукнции, это выглядит красивее, чем если ты будешь объявлениями переменных засорять тело цикла.
Re[32]: Собеседования в Яндекс++
От: jamesq Россия  
Дата: 05.06.19 06:01
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Беда в том что современный опенсорс работает по принципу: зашевелилось — commit, push


CC>Image: 121530.jpg


И не только оперсорс!
Давным давно, когда я узнал о феномене говнокода на примере всякого рода лажовых PHP-скриптиков, я реально был удивлён: как такое вообще возможно? неужели и впрямь люди такое пишут, и как у них там с рассудком? чтобы такие очевидные дыры оставлять, делать возможными SQLInjection и подобное, и т.п.

А много позже, я увидел то, как работают нотариусы, как они нам в документах, набранных впопыхах набили ошибочки, всучили их нам на проверку, а ещё ничтоже сумняшеся, ручкой сделали поправки с подписью. Вот это номер! И сейчас, на самом деле, вот такое наплевательство на качество повсеместно. Дома так строят, авиалайнеры, чего только не. Мне реально страшно думать, что с нами всеми делает эта погоня за баблом.
Вот буквально на днях, какие-то уроды нам расколошматили весь подъезд, сделав говноремонт (вопреки положениям всех подписанных документов). Все жильцы всего дома единогласно(!) восстали, пошли юридические склоки за бабло.
А врачи? Я лично имел дело, пришлось побегать, никому не желаю подобного.
Мы всю страну уже отправили под откос, на самом-то деле.
Re[35]: Собеседования в Яндекс++
От: night beast СССР  
Дата: 05.06.19 06:03
Оценка:
Здравствуйте, so5team, Вы писали:

S>>и надеясь, что компилятор вызовет все функции в нужном порядке


S>Порядок вызова функций внутри фрагмента:

S>
while((journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0) &&
S>   (node_descp->get_current_storage_chunk() < get_journal_storage_chunk_count()))

S>имеет значение только если у вас методы-getter-ы (т.е. node_descp->get_current_storage_chunk(), shared_descriptor_count(), get_journal_storage_chunk_count()) имеют побочные эффекты. Что уже сильно плохо.

эм... а как компилятор может поменять порядок вызова функций?
там же && для двух булей, никаких перегруженных операторов не видно.
Re[33]: Собеседования в Яндекс++
От: jamesq Россия  
Дата: 05.06.19 06:04
Оценка:
Здравствуйте, a7d3, Вы писали:

A>Ничего нового под Луной.

A>Раньше носители этой системы ценностей толкались в загоне аутсорца. Теперь, поскольку аутсорц отмирает и жутко деградирует, они стали смещаться в нишу опенсорса.
A>Раньше было модно работать гребцом на галерах в душных, шумных и вонючих опен-сейсах. Это давало ощущение покупки входного билета в волшебный и высокотехнологичный ИТ-мир.
A>Теперь модно коммитить на гитхабе и размахивать перед работодателями звёздочками в этом своём профиле.


Можно вопрос, а вы где работаете, географически? Неужели не в опенспейсе? Неужели не в России/СНГ?
Re[19]: Собеседования в Яндекс++
От: night beast СССР  
Дата: 05.06.19 06:16
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Вот вам ещё кусок кода.


а как же правило объявлять переменные в начале функции?

S>
S>                        if(s && s->root()->is_evaluated() && s->root()->value()) 
S>                            if(s->_ndx!=ndx){      
S>                            }

// сворачивается в один if

S>               *std::remove(nstore().begin_done(), nstore().end_done(), nullptr) = nullptr ;

// что здесь должно происходить?

S>


ну а вообще висячие ифы без скобок -- сильно на любителя стиль.
Re[33]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 06:20
Оценка:
Здравствуйте, jamesq, Вы писали:

J>И не только оперсорс!

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

J>Давным давно, когда я узнал о феномене говнокода на примере всякого рода лажовых PHP-скриптиков, я реально был удивлён: как такое вообще возможно? неужели и впрямь люди такое пишут, и как у них там с рассудком? чтобы такие очевидные дыры оставлять, делать возможными SQLInjection и подобное, и т.п.

Увы, спрос на разработку сильно возрос а вот предложение девелоперов за ним не успевает. В итоге и качество пытаются заменить количеством и сроки ставятся такие что даже те что есть вынуждены многое откладывать "на потом", которое как обычно не наступает.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[20]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 06:22
Оценка:
Здравствуйте, night beast, Вы писали:

NB>ну а вообще висячие ифы без скобок -- сильно на любителя стиль.

Это как раз без проблем, если стиль оформления вменяемый а не cramped как тут.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[36]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 06:24
Оценка:
Здравствуйте, night beast, Вы писали:

S>>
while((journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0) &&
S>>   (node_descp->get_current_storage_chunk() < get_journal_storage_chunk_count()))

S>>имеет значение только если у вас методы-getter-ы (т.е. node_descp->get_current_storage_chunk(), shared_descriptor_count(), get_journal_storage_chunk_count()) имеют побочные эффекты. Что уже сильно плохо.

NB>эм... а как компилятор может поменять порядок вызова функций?

NB>там же && для двух булей, никаких перегруженных операторов не видно.

Насколько я могу судить, компилятор волен вызвать get_journal_storage_chunk_count() до node_descp->get_current_storage_chunk(). Так же могу предположить, что если компилятор видит, что у node_descp->get_current_storage_chunk() нет побочных эффектов, то он может ограничиться всего одним вызовом node_descp->get_current_storage_chunk(). Но может сделать и два.

Так что некая вариативность здесь есть.

Но вообще лучше бы дождаться разъяснений от smeeld.
Re[34]: Собеседования в Яндекс++
От: jamesq Россия  
Дата: 05.06.19 06:30
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, jamesq, Вы писали:


J>>И не только оперсорс!

CC>Не только, да.
CC>Другой момент что в "коде за деньги" хотя бы как то можно заставить исправить, а в "свободном" же процветает "мы так видим, а если тебе надо — ты и корячься!"

J>>Давным давно, когда я узнал о феномене говнокода на примере всякого рода лажовых PHP-скриптиков, я реально был удивлён: как такое вообще возможно? неужели и впрямь люди такое пишут, и как у них там с рассудком? чтобы такие очевидные дыры оставлять, делать возможными SQLInjection и подобное, и т.п.

CC>Увы, спрос на разработку сильно возрос а вот предложение девелоперов за ним не успевает. В итоге и качество пытаются заменить количеством и сроки ставятся такие что даже те что есть вынуждены многое откладывать "на потом", которое как обычно не наступает.

Дык надо идти иным путём. И я думаю, идут. Сводить написание кода к минимуму, не требовать высокой квалификации (но сохранять при этом качество результатов), максимизировать повторное использование кода (через библиотеки и middleware), не писать велосипедов.

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

Вот в Unreal Engine сделали Blueprints вместо скриптов — куда как проще для простых людей.
Те же CRUD в приложениях БД — это тоже как-то можно устранить, сделав какой-нибудь конструктор или подобное.
Вот сейчас Go применяют, появление Java и C# вместо C++ — всё туда же.

Ты ничего нового не сказал, я всё это знаю про спрос и предложение.

А в "коде за деньги" подчас там политика компании такая — говнокодить.

Снижать качество не везде возможно, это раз. Есть предметные области, где надёжность, качественность, секурность софта — непреложное требование. Дальше, лучше чтобы на рынке имелся один единственный качественный софт, который будут все использовать, нежели чем тонны велосипедов у каждого. Тем более, что этот код пишется буквально раз и навсегда. Как известно, софт может жить и применяться десятилетиями.

А говнокодство появляется в погоне за прибылью. А погоня — это заложник экономической ситуации (особенно актуально для РФ). Видите-ли, когда люди выбирают куда вкладывать капитал, им всем подавай ROI побольше. А интересы страны и народа — это всё побоку. Ах да, ещё им нужно, как всегда, всё побыстрее.
Поэтому я считаю, что WallStreet — это зло.
Я всё время думаю — вроде программисты все сами люди не глупые, и вести бизнес могут. Отчего они сами не создают компании, где они сами себе акционеры?
У меня есть пример, когда выпускники ВУЗа (самому старшему 26 лет), а так им лет по 22-24, объединились, и пошли фрилансить. Вот это я понимаю. Фрилансят за бугром, там полный цикл работ.
Отредактировано 05.06.2019 7:02 jamesq . Предыдущая версия . Еще …
Отредактировано 05.06.2019 6:49 jamesq . Предыдущая версия .
Re[35]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 06:38
Оценка:
Здравствуйте, jamesq, Вы писали:

J>Сводить написание кода к минимуму

Там где надо из готовых кубиков сложить кучку уже и так набирают маппетов.
Задачи стоят сделать то, что из готовых кубиков не собирается в нужном виде.

J>не требовать высокой квалификации (но сохранять при этом качество результатов)

Взаимоисключающие параграфы, увы.

J> максимизировать повторное использование кода (через библиотеки и middleware), не писать велосипедов.

Это уже требует квалификации

J>Вот в Unreal Engine сделали Blueprints вместо скриптов — куда как проще для простых людей.

Угу, для делания заранее предусмотренных вещей. Примерно как "программирование в power point"

J>Те же CRUD в приложениях БД — это тоже как-то можно устранить, сделав какой-нибудь конструктор или подобное.

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

J>Вот сейчас Go применяют, появление Java и C# вместо C++ — всё туда же.

Упрощает клепание определённых вещей, но чем менее тривиальной становится задача тем больше надо иметь квалификацию исполнителей и понимание ими предметной области.
Чудес не бывает.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[36]: Собеседования в Яндекс++
От: jamesq Россия  
Дата: 05.06.19 07:07
Оценка:
Здравствуйте, CreatorCray, Вы писали:
J>>Те же CRUD в приложениях БД — это тоже как-то можно устранить, сделав какой-нибудь конструктор или подобное.
CC>Конструктор просто будет дорогой в изготовлении, а если ещё и мощный то соответственно и сложный в использовании. Опять таки надо мозги чтоб им научиться полноценно пользоваться.


Не, я имею в виду, что для всяческих приложений для БД, можно сделать какой-то механизм (механизмы), избавляющие от необходимости в каждой программе прописывать вот этот вот тупой код для CRUD. Чтобы он был один на рынке, и все бы его применяли. Как-нибудь через декларативное программирование извернуться.

А ещё добавлю, что на самом деле, программисты сами себе работу придумывают. Сначала у нас были десктопные приложения. А теперь, видите ли, это не модно, сейчас надо всё переписать на javascript, отправить в web (привет Google Docs!), и ещё облако сбоку присобачить.
А потом думают, как это всё впарить народу, которому особо-то это и не надо (вроде-бы).
Re[16]: Собеседования в Яндекс++
От: _ABC_  
Дата: 05.06.19 07:17
Оценка: +1
Здравствуйте, Sharov, Вы писали:

S>Обычная пролетарская зависть к буржуям сотрудникам Яндекса, не более.

Насколько я помню оглашенные мне вилки в своё время... Буржуями там не пахнет. Пахнет там студиозами, ЧСВ и "работать — большая честь".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.