Re[25]: Макконнелл и дядя Боб
От: a7d3  
Дата: 05.06.19 11:26
Оценка:
Здравствуйте, Sharov, Вы писали:

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


A>>В плане личностей авторов, то если к «дяде Бобу» ещё есть вопросы, то персона Макконнелла хорошо известна.

A>>Дядя Боб интересен не столько свершениями, сколько идеями, которые в момент их публикации смотрели на 10 лет вперёд, по части развития индустрии софтваре. Его повествования с рассуждениями обретают ценность лишь по прошествию некоторого времени, в ретроспективе.

S>Читал обе книжки, первая откровенно громоздка. Вторую большую часть прочитал, возможно действительно перечитаю. Что касается личностей авторов -- то дядя Боб как раз боевой программист,

S>а Макконнелл -- писатель. Хотя здравые мысли про лицензирование(а у врачей, в общем) такой деятельности как программирование у него были. Но в целом книга, кмк, не очень. У дяди Боба
S>конкретней и меньшего объема.

Ребятам, вроде smeeld, имело бы смысл почитать обе.
Они из разных эпох, у Макконнелла из тех времён, когда были приняты несколько другие типы коммуникаций между людьми в ИТ-секторе.
У дяди Боба книженция более современная в этом плане — словно для миллениалов с их клиповым сознанием (которое соткано из банальных лозунгов с «кричалками» и подобно лоскутному одеялу).

Когда долгое время человек сидит на саппорте больших объёмов легаси кода, то у него лёгкий сдвиг по фазе начинается. Надо всё же иногда писать новые вещи с чистого листа, т.е. не в рамках микро-задач рядом с кучей окаменелых копролитов, а нырять в полностью новые проекты.
Re[19]: Собеседования в Яндекс++
От: chaotic-kotik  
Дата: 05.06.19 12:12
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Вот прямо с текущего экрана, смотри:

S>
   
S>    node_desc_type* allocate_next_cluster_shared_segment(bool wait){
S>       void* basep;
S>       DEBUG << " Prepare to fetsh shared journal segment ... ";
S>       scatter_desc_type *descp;
S>       cluster_node_desc_type* node_descp;
S>       shared_segment_lock_type shared_lck (shared_segment_ctrl);
S>       check_migrate_cluster_node_store();
S>       while((node_descp = get_cluster_node(current_cluster_node++)) != nullptr){
S>         if(node_descp->is_alive() and node_descp->is_idle()){
S>           while(journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0){
S>             if(node_descp->get_current_storage_chunk() >= get_journal_storage_chunk_count()){
S>               break;
S>             }else{
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>               continue;
S>             }
S>           }
S>           if(node_descp->get_shared_segment() == EMPTY_SEGMENT)
S>             continue;

S>           basep = reinterpret_cast<void*>(journal_store(node_descp->get_current_storage_chunk()).descriptor_table());

S>           descp = journal_storage(node_descp->get_current_storage_chunk()).template
S>                                   get_ptr<scatter_desc_type>(basep, node_descp->get_shared_segment());
S>           if(descp->is_shared()){
S>             if(descp->get_created_timestamp() < init_timestamp() and descp->get_init_timestamp() < prev_timestamp()){
S>               DEBUG << "Initializing Shared Descriptor With offset: " << descp->self();
S>               descp->init(init_timestamp(), journal_storage_info(node_descp->get_current_storage_chunk()).first(),
S>                           journal_store(node_descp->get_current_storage_chunk()).raw_size());
S>             }
S>             return node_descp;
S>           }
S>         }
S>       }
S>       if(wait){
S>         shared_segment_cv.wait(shared_lck);
S>         if(current_cluster_node() >= journal_store().cluster_node_count())
S>           set_current_cluster_node(FIRST_NODE_INDEX);
S>       }
S>       return nullptr;
S>    }

S>


просто просмотрел сверху вниз один раз и вижу
— reinterpret_cast<void*>
— неинициализированные переменные
— некорректное использование condition variable "shared_segment_cv", судя по всему используется как event и проверки на spurious wakepu нет (хотя конечно это специальная cv, как же иначе)
Re[20]: Собеседования в Яндекс++
От: smeeld  
Дата: 05.06.19 13:24
Оценка: :)
Здравствуйте, chaotic-kotik, Вы писали:

CK>просто просмотрел сверху вниз один раз и вижу

CK>- reinterpret_cast<void*>

Оно там надо. Без этого никак. Это не хелловорлд от олимпиадников.

CK>- неинициализированные переменные


Открой исходники линукса и посчитай количество функций, в которых переменные объявляются все в начале функции и используются далее в функции разным образом, в том числе и в циклах. Авторитет разрабов линукса для меня гораздо более значим, чем непонятных юзернеймов с rsdn.

CK>- некорректное использование condition variable "shared_segment_cv", судя по всему используется как event и проверки на spurious wakepu нет (хотя конечно это специальная cv, как же иначе)


С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.
Re[26]: Макконнелл и дядя Боб
От: smeeld  
Дата: 05.06.19 13:28
Оценка:
Здравствуйте, a7d3, Вы писали:

A>Когда долгое время человек сидит на саппорте больших объёмов легаси кода, то у него лёгкий сдвиг по фазе начинается. Надо всё же иногда писать новые вещи с чистого листа, т.е. не в рамках микро-задач рядом с кучей окаменелых копролитов, а нырять в полностью новые проекты.


98% всей мировой индустрии крутится на том самом легаси. Новомодные свистелки или эфемерны, живут пару лет или пару месяцев, или постепенно сращиваются с тем легаси, дополняя его. Всегда занимался не саппортом легаси, а его дополнением новыми вещами.
Re[19]: Собеседования в Яндекс++
От: koenig  
Дата: 05.06.19 13:41
Оценка: +2
A>А мне вот доводилось не один и не два раза слышать, что работа в яндексах — это клеймо позора. Такое, что людей с него кадрови даже и не рассматривают, отсеивая на этапе просмотра резюме.

мрак какой
я там не работал, но — совершенно нормальные ребята оттуда приходят, совершенно нормальные ребята туда уходят, исключений не встречал
я бы не пошел, но чисто по профессиональным соображениям
Re[21]: Собеседования в Яндекс++
От: chaotic-kotik  
Дата: 05.06.19 13:47
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Оно там надо. Без этого никак. Это не хелловорлд от олимпиадников.


Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.

S>Открой исходники линукса и посчитай количество функций, в которых переменные объявляются все в начале функции и используются далее в функции разным образом, в том числе и в циклах. Авторитет разрабов линукса для меня гораздо более значим, чем непонятных юзернеймов с rsdn.


Ядро линукса написано на Си, а это код на С++. Предыдущая ошибка и вот эта особенность просто кричат о том, что уровень разработки — ремесленно/кустарный. Что нет прогонов статического анализатора на CI и подозреваю, что CI как такового тоже нет. Обычный промышленный код (как бы я не не любил выражение "промышленный код") такого содержать не будет, потому что это даже обычный cppcheck может найти.

S>С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.


штука, повторяющая интерфейс condition variable из стандартной библиотеки C++ один в один и носящая гордое имя shared_segment_cv... действительно, с чего бы! ну тоесть если это не cv, а что-то еще, работающее по другому, то тем более фу
Re[22]: Собеседования в Яндекс++
От: smeeld  
Дата: 05.06.19 14:04
Оценка: -2 :)))
Здравствуйте, chaotic-kotik, Вы писали:

CK>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.


static_cast там возвратит ошибку.


CK>Ядро линукса написано на Си, а это код на С++. Предыдущая ошибка и вот эта особенность просто кричат о том, что уровень разработки — ремесленно/кустарный. Что нет прогонов статического анализатора на CI и подозреваю, что CI как такового тоже нет. Обычный промышленный код (как бы я не не любил выражение "промышленный код") такого содержать не будет, потому что это даже обычный cppcheck может найти.


Открой какой-либо массивный проект нс C++, в большинстве из них найдёшь кучу функций, содержащих объявления переменных в начале функции и последующее их использование самым разным образом. Авторитет разрабов тех проектов априори гораздо более значим, чем авторитет непонятных юзернеймов с rsdn.
Это всё вкусовщина, одни пишут так, другие иначе. Конкретно,запрет на обьявление локальных переменных без их инициализации-это из культуры дрессировки джуниоров, которым это вбивают в своё время в голову, чтоб они не портачили. Некоторым вбивают так, что откладывается в подкорке. Профи всегда и везде поступают согласно своим взглядам и вкусам в оформлении кода. Все те, кто тут кричит оголтело по неинициализированные переменные, или джуны, или только и званимаются, что джунов штудируют, это вся их работа.

S>>С чего Вы взяли, что там именно condition_variable? По секрету, там вообще нет ничего из STL или Boost, ни одной сущности. Тот wait-вызов кастомного специализированного сискола ядра.


CK>штука, повторяющая интерфейс condition variable из стандартной библиотеки C++ один в один и носящая гордое имя shared_segment_cv... действительно, с чего бы! ну тоесть если это не cv, а что-то еще, работающее по другому, то тем более фу


И что? Потому-что имеется некоторое сходство с поведением condition_variable (оно есть не только в STL, но и в POSIX), но не более. Вообще-же, назывывать это можно как угодно, это код.
Re[23]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 14:49
Оценка: +3
Здравствуйте, smeeld, Вы писали:

CK>>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.


S>static_cast там возвратит ошибку.


Там вообще не нужен ни reinterpret_cast, ни static_cast. Если объявляется переменная типа void*, то в качестве значения для нее может использоваться неконстантный указатель на любой другой тип. Каст к void* произойдет автоматически: https://wandbox.org/permlink/NugPaoCgSQHAJE6T

S>Открой какой-либо массивный проект нс C++, в большинстве из них найдёшь кучу функций, содержащих объявления переменных в начале функции и последующее их использование самым разным образом.


Скорее всего вы говорите о древних монстрах родом из начала 1990-х.

S>Это всё вкусовщина, одни пишут так, другие иначе.


Ничего подобного. Как только в C++ появились конструкторы и деструкторы, место объявления переменной и область ее жизни стало резко иметь важное значение.

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


Да-да-да. Тормоза придумали трусы. Уставы не написаны кровью. А гайдлайны для C++ пишут просто чтобы джуниоров выстроить.

Вы, блин, ну очень складно поете. Но при всем этом остается один маленький вопросик: чтож вы так говнокодите-то?
Re[24]: Собеседования в Яндекс++
От: night beast СССР  
Дата: 05.06.19 14:53
Оценка:
Здравствуйте, so5team, Вы писали:

CK>>>Как бы не так. Это новичковая ошибка, использовать reinterpret_cast там где будет работать static_cast.


S>>static_cast там возвратит ошибку.


S>Там вообще не нужен ни reinterpret_cast, ни static_cast. Если объявляется переменная типа void*, то в качестве значения для нее может использоваться неконстантный указатель на любой другой тип. Каст к void* произойдет автоматически: https://wandbox.org/permlink/NugPaoCgSQHAJE6T


это если предположить, что функция descriptor_table возвращает указатель, а не инт или еще какую фигню
что, учитывая интуитивно понятные названия, совсем не исключено.
Re[24]: Собеседования в Яндекс++
От: smeeld  
Дата: 05.06.19 14:54
Оценка: :))) :)))
Здравствуйте, so5team, Вы писали:

S>чтож вы так говнокодите-то?


А на мой взгляд говнокодите Вы.
Re[25]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 14:59
Оценка:
Здравствуйте, night beast, Вы писали:

NB>это если предположить, что функция descriptor_table возвращает указатель, а не инт или еще какую фигню


А вот это да. Не подумал.
Re[25]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 15:03
Оценка:
Здравствуйте, smeeld, Вы писали:

S>А на мой взгляд говнокодите Вы.


Может вы еще и обосновать попробуете?
Re[24]: Собеседования в Яндекс++
От: smeeld  
Дата: 05.06.19 15:29
Оценка:
Здравствуйте, so5team, Вы писали:

S>Скорее всего вы говорите о древних монстрах родом из начала 1990-х.


https://github.com/mysql/mysql-server/blob/8.0/storage/innobase/mem/memory.cc
Re[25]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 15:39
Оценка:
Здравствуйте, smeeld, Вы писали:

S>>Скорее всего вы говорите о древних монстрах родом из начала 1990-х.


S>https://github.com/mysql/mysql-server/blob/8.0/storage/innobase/mem/memory.cc


Вы решили подтвердить мои слова?
/** @file mem/memory.cc
 The memory management
 Created 6/9/1994 Heikki Tuuri
 *************************************************************************/

Или упор будет на то, что 1994-й -- это не совсем начало 1990-х?
Re[26]: Собеседования в Яндекс++
От: smeeld  
Дата: 05.06.19 15:43
Оценка:
Здравствуйте, so5team, Вы писали:

S>Или упор будет на то, что 1994-й -- это не совсем начало 1990-х?


Его после 94-го переписывали не раз. И проинициализировать все локальные переменные точно дело на пару часов, если бы так это нужно было.
Re[25]: Собеседования в Яндекс++
От: chaotic-kotik  
Дата: 05.06.19 15:47
Оценка:
Здравствуйте, smeeld, Вы писали:

S>https://github.com/mysql/mysql-server/blob/8.0/storage/innobase/mem/memory.cc


что ты этим хотел сказать? код по ссылке хорошо читается, обильно прокомментирован, нет вложенных while-ов и замечательных конструкций вроде 'do if (....) while (....) и тд
Re[23]: Собеседования в Яндекс++
От: bzig  
Дата: 05.06.19 15:49
Оценка: +1
S> Авторитет разрабов тех проектов априори гораздо более значим, чем авторитет непонятных юзернеймов с rsdn.

Эти люди начинали эти проекты, когда по другому было нельзя. То, что они не нашли нужным перестроиться не делает им чести
Re[27]: Собеседования в Яндекс++
От: so5team https://stiffstream.com
Дата: 05.06.19 15:50
Оценка: +3
Здравствуйте, smeeld, Вы писали:

S>>Или упор будет на то, что 1994-й -- это не совсем начало 1990-х?


S>Его после 94-го переписывали не раз. И проинициализировать все локальные переменные точно дело на пару часов, если бы так это нужно было.


Смотрите как получается.

Вы говорите: вот в уважаемых C++ных проектах полно неинициализированных переменных, объявленных в начале функций.
На что вам говорят: так это наверняка древние проекты, начатые в 90-е.
Вы приводите пример как раз такого проекта, начатого в 90-е, как раз со всеми унаследованными из C привычками: переменные в начале функций, многие без инициализации.

Т.е. вы сами подтверждаете выдвинутое вам возражение.

А теперь вы что доказать хотите? Что в C++ можно делать так, как сделано в древнем коде MySQL?

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

Вам же про другое толкуют: не следует так на C++ писать. Причем давно не следует. И если вы сейчас так пишите, так в этом ничего хорошего нет. Вы просто говнокодите.
Re[34]: Собеседования в Яндекс++
От: CreatorCray  
Дата: 05.06.19 16:25
Оценка: 20 (2) +1 :))) :)
Здравствуйте, smeeld, Вы писали:

S>На тот момент оно и в таком виде годилось.




PS: Упс, картинка внезапно получилась уж слишком "маленькой", обновил.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Отредактировано 05.06.2019 17:14 CreatorCray . Предыдущая версия .
Re[20]: Собеседования в Яндекс++
От: a7d3  
Дата: 05.06.19 18:28
Оценка:
Здравствуйте, koenig, Вы писали:

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


K>мрак какой

K>я там не работал, но — совершенно нормальные ребята оттуда приходят, совершенно нормальные ребята туда уходят, исключений не встречал
K>я бы не пошел, но чисто по профессиональным соображениям

А сфера деятельности у тебя какая? В том смысле, что «ты чьих будешь-то?».
Интернет-компания, аутсорцер, интегратор и т.д.?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.