Сообщение Re[6]: Кому ваще этот С++ нужен? от 21.05.2015 2:18
Изменено 21.05.2015 2:23 greenpci
BDA>Вы не слышали про культ карго? Это он и есть. Давайте будем слепо поклоняться гугловым гайдлайнам, раз гугл с ними заработал, и мы заработаем. Ну смешно же, честное слово. Если кто-то хочет заработать денег, крайне не рекомендовал бы пытаться сделать это так. Объясню на примере. Допустим, вы видите, что у компании Miscrosoft есть свой R&D-центр. Денег на него тратится — море. Вы думаете: наверное, он очень хорошо окупается. Дай-ка и я открою при своем стартапе из 3 программистов R&D-центр в виде четвертого. Между тем, инсайдеры рассказывали, что ихний центр это идея лично БГ и служит он пенсией для тех, кому лямку тянуть надоело. Он же изначально умных нанимал, да еще натаскивал их потом, а куда они пойдут на свободе? Ну, объедут свет, купят ресторан, а потом? Потом к конкурентам или свой стартап открывать. При ЕГО масштабе и рыночном положении выгоднее было дать им возможность играть в бирюльки и платить, чтобы просто обезвредить. При масштабе «3 программиста, CEO и собака» балласт в виде четвертого может погубить все дело. Вот что бывает, когда гоняешься за авторитетами, а не объяснениями.
Майкрософт другое дело. Я больше говорю про то время, когда гугл еще был стартапом. Там не то что, пенсии высиживали, а даже директора в служебной поездке, в другом городе, не брали таксти, а ехали на общественном транспорте. Дело не в карго культе, а в поведении, которое можно рационально объяснить.
А про датацентр, то эта аналогия больше подходит к классам со Split функцией, чем к std::string.
>>Ну раз это не так, тогда ладно. Стало быть ты тоже инженер и программист. Тогда дам тебе ссылку на подробное объяснение почему пихать все в один класс не рекомендуется. C++ Coding Standards. Chapter 33. Prefer minimal classes to monolithic
BDA>Вы определенно издеваетесь. Или по-другому не умеете.
BDA>
BDA>Divide and conquer: Small classes are easier to write, get right, test, and use. They are also more likely to be usable in a variety of situations. Prefer such small classes that embody simple concepts instead of kitchen-sink classes that try to implement many and/or complex concepts (see Items 5 and 6)...
BDA>Покажите, как это относится, например, к String::Printf, String::Split, String::ToLower. Это не the right level of granularity? Или это dilutes encapsulation? Или с деплоем проблемы? Короче, завязывайте с джастификационизмом и вскрывайте суть.
Я предпочел бы отделить ToLower и Split от std::string. Они редко нужны и строку легче использовать без них. Я согласен с автором, строку легче использовать, когда в ней нет ToLower и друзей, а они лежат в другом месте отдельно и я про это место знаю. Проблемы еще и в следующем:
- std::string ::ToLower() это еще одно выделение памяти и копирование или move (который появился относительно недавно).
std::vector<std::string> ::Split() вообще ужас. Сколько там выделений памяти, копирований? Насколько это все разбросано и не попадет в L2, я думаю, объяснять не надо.
std::string ::printf, по моему мнению, уступает
(ostringstream() << "Hello" << 123).str();printf нужен только в тех редких случаях, когда есть шаблоны сообщений, и их можно держать отдельно от кода.
Я предпочитаю решать сам где я буду менять строку in place или copy. std::for_each(...ToUpper) или std::transform(...ToUpper). Так же я хочу добавлять символы динамически back_inserter или сделать resize(). Взять начальную строку из std::string или ofstream. И у меня для всего этого есть набор стандартных инструментов.
Для Split, в большинстве случаев, программист захочет читать строку и получать указатели на каждый элемент по очереди. Во первых, для этого не нужно туда сюда копировать. Во вторых, можно остановиться после нахождения нужного значения и не парсить дальше.
Поэтому, Split и ToUpper не достаточно гибкие для быстродействующего кода. С другой стороны, в медленных языках (C#, Java) и в С++ UI frameworks они подходят прекрасно. Поэтому они там и есть.
BDA>Я говорю, что за этим словом стоит неразумная теория. А значит слово не имеет права на существование. Что не мешает его употреблять даже мне самому, если проблему я вижу задолго до применения этой неразумной теории, например, как в случае с кастингами.
Я думаю, отметать книжки и работу других людей не продуктивно. У них есть таланты, желание, им заплатили и они потратили кучу времени на изучение особенностей языка. Если хороший умный человек, почему бы не послушать его и не воспользоваться знаниями? Надо "ехать на плече у гиганта". Да и потом, в книжках не просто написано "делай так как я сказал и все!". На каждую рекомендацию есть куча текста, описывающая почему и для чего все это нужно. Есть еще и другое полезное свойство таких книжек и рекомендаций. Самоучки в команде будут упираться и спорить, что каждый из них прав и создавать конфликты. В то время, как в книжке все написано. Показал им книжку, отправил читать ответ на вопрос "почему" так лучше, и конфликт угаснет. Другое дело, что есть разные авторы и у них может быть противоположное мнение. Я бы, кстати, хотел почитать тех, на которых основано твое мнение, если таковые имеются.
BDA>Ну, вот это уже по существу. Я утверждаю: форматирование строк (String::Printf) или смена регистра (String::ToLower) это по своему характеру ГОРАЗДО БОЛЕЕ строковые операции, чем std::string::swap. Спрашивается, кто нарушает single responsibility — я или Степанов?
Не нужно воспринимать имя string так буквально. Это контейнер для управления памятью: std::memory_management_wrapper_for_text и swap прекрасно вписывается.
BDA>1. Программисту не надо писать свой код для каждого нового проекта либо подключать левую библиотеку прямо с первых же шагов, поскольку базовые вещи в базовой библиотеке не сделаны.
BDA>2. Программисту не надо думать про взаимные преобразования, возникающие из-за того в п.1 разные программисты выбирает разные библиотеки. Например, про char*, wchar_t*, LPC(T)STR, OLECHAR*, _bstr_t, CString, std::string, std::wstring, QString... и продолжать могу еще долго.
Так это и есть одна из задач, которую выполняет STL. Он подходит для интерфейсов. А внутри блоков уже можно подбирать то, что лучше. С++ сделан для экономии места и времени. Для задач, требующих тонкой настройки. Каждый инструмент там надо подбирать под задачу. В геймдеве stl вообще не подходит, есть там ToLower или нет. А вообще, есть же QT действительно, там "богатые" строки и все все есть.
G>>>>Это компенсируется стабильностью. Опытный программист обучается обходить грабли и использует это умение много лет. Да, порог вхождения выше, зато, когда вошел, выходить не надо еще много лет, в отличии от того же дот нета.
BDA>А, так значит dynamic_cast<T>(o), который вы пропустили — не «антипаттерн» (что бы это слово ни значило)? Тогда зачем ОН режет глаз? Чтоб жизнь медом не казалась?
он тоже "вызывает нахмуренное лицо" (см. цитату ниже) и достаточно редкий, что бы его в удобные скобки оборачивать.
prefer to design away downcasting: Refactor or redesign your code so that it isn't needed ...
BDA>Ну так и сколько пустая студия у вас открывается в секундах?
Не на работе сейчас. На домашнем компе Intel Core i7 4GB RAM не SSD, VS Express 2013 for Destop — 24 секунды первый раз и 4 секунды второй и последующие. Но это если сразу запускать.
Вообще-то студия не очень хорошее сравнение. Там все еще много C++ и COM осталось, если не ошибаюсь, особенно во время старта.
BDA>Вы не слышали про культ карго? Это он и есть. Давайте будем слепо поклоняться гугловым гайдлайнам, раз гугл с ними заработал, и мы заработаем. Ну смешно же, честное слово. Если кто-то хочет заработать денег, крайне не рекомендовал бы пытаться сделать это так. Объясню на примере. Допустим, вы видите, что у компании Miscrosoft есть свой R&D-центр. Денег на него тратится — море. Вы думаете: наверное, он очень хорошо окупается. Дай-ка и я открою при своем стартапе из 3 программистов R&D-центр в виде четвертого. Между тем, инсайдеры рассказывали, что ихний центр это идея лично БГ и служит он пенсией для тех, кому лямку тянуть надоело. Он же изначально умных нанимал, да еще натаскивал их потом, а куда они пойдут на свободе? Ну, объедут свет, купят ресторан, а потом? Потом к конкурентам или свой стартап открывать. При ЕГО масштабе и рыночном положении выгоднее было дать им возможность играть в бирюльки и платить, чтобы просто обезвредить. При масштабе «3 программиста, CEO и собака» балласт в виде четвертого может погубить все дело. Вот что бывает, когда гоняешься за авторитетами, а не объяснениями.
Майкрософт другое дело. Я больше говорю про то время, когда гугл еще был стартапом. Там не то что, пенсии высиживали, а даже директора в служебной поездке, в другом городе, не брали таксти, а ехали на общественном транспорте. Дело не в карго культе, а в поведении, которое можно рационально объяснить.
А про датацентр, то эта аналогия больше подходит к классам со Split функцией, чем к std::string.
>>Ну раз это не так, тогда ладно. Стало быть ты тоже инженер и программист. Тогда дам тебе ссылку на подробное объяснение почему пихать все в один класс не рекомендуется. C++ Coding Standards. Chapter 33. Prefer minimal classes to monolithic
BDA>Вы определенно издеваетесь. Или по-другому не умеете.
BDA>
BDA>Divide and conquer: Small classes are easier to write, get right, test, and use. They are also more likely to be usable in a variety of situations. Prefer such small classes that embody simple concepts instead of kitchen-sink classes that try to implement many and/or complex concepts (see Items 5 and 6)...
BDA>Покажите, как это относится, например, к String::Printf, String::Split, String::ToLower. Это не the right level of granularity? Или это dilutes encapsulation? Или с деплоем проблемы? Короче, завязывайте с джастификационизмом и вскрывайте суть.
Я предпочел бы отделить ToLower и Split от std::string. Они редко нужны и строку легче использовать без них. Я согласен с автором, строку легче использовать, когда в ней нет ToLower и друзей, а они лежат в другом месте отдельно и я про это место знаю. Проблемы еще и в следующем:
- std::string ::ToLower() это еще одно выделение памяти и копирование или move (который появился относительно недавно).
std::vector<std::string> ::Split() вообще ужас. Сколько там выделений памяти, копирований? Насколько это все разбросано и не попадет в L2, я думаю, объяснять не надо.
std::string ::printf, по моему мнению, уступает
(ostringstream() << "Hello" << 123).str();printf нужен только в тех редких случаях, когда есть шаблоны сообщений, и их можно держать отдельно от кода.
Я предпочитаю решать сам где я буду менять строку in place или copy. std::for_each(...ToUpper) или std::transform(...ToUpper). Так же я хочу добавлять символы динамически back_inserter или сделать resize(). Взять начальную строку из std::string или ifstream. И у меня для всего этого есть набор стандартных инструментов.
Для Split, в большинстве случаев, программист захочет читать строку и получать указатели на каждый элемент по очереди. Во первых, для этого не нужно туда сюда копировать. Во вторых, можно остановиться после нахождения нужного значения и не парсить дальше.
Поэтому, Split и ToUpper не достаточно гибкие для быстродействующего кода. С другой стороны, в медленных языках (C#, Java) и в С++ UI frameworks они подходят прекрасно. Поэтому они там и есть.
BDA>Я говорю, что за этим словом стоит неразумная теория. А значит слово не имеет права на существование. Что не мешает его употреблять даже мне самому, если проблему я вижу задолго до применения этой неразумной теории, например, как в случае с кастингами.
Я думаю, отметать книжки и работу других людей не продуктивно. У них есть таланты, желание, им заплатили и они потратили кучу времени на изучение особенностей языка. Если хороший умный человек, почему бы не послушать его и не воспользоваться знаниями? Надо "ехать на плече у гиганта". Да и потом, в книжках не просто написано "делай так как я сказал и все!". На каждую рекомендацию есть куча текста, описывающая почему и для чего все это нужно. Есть еще и другое полезное свойство таких книжек и рекомендаций. Самоучки в команде будут упираться и спорить, что каждый из них прав и создавать конфликты. В то время, как в книжке все написано. Показал им книжку, отправил читать ответ на вопрос "почему" так лучше, и конфликт угаснет. Другое дело, что есть разные авторы и у них может быть противоположное мнение. Я бы, кстати, хотел почитать тех, на которых основано твое мнение, если таковые имеются.
BDA>Ну, вот это уже по существу. Я утверждаю: форматирование строк (String::Printf) или смена регистра (String::ToLower) это по своему характеру ГОРАЗДО БОЛЕЕ строковые операции, чем std::string::swap. Спрашивается, кто нарушает single responsibility — я или Степанов?
Не нужно воспринимать имя string так буквально. Это контейнер для управления памятью: std::memory_management_wrapper_for_text и swap прекрасно вписывается.
BDA>1. Программисту не надо писать свой код для каждого нового проекта либо подключать левую библиотеку прямо с первых же шагов, поскольку базовые вещи в базовой библиотеке не сделаны.
BDA>2. Программисту не надо думать про взаимные преобразования, возникающие из-за того в п.1 разные программисты выбирает разные библиотеки. Например, про char*, wchar_t*, LPC(T)STR, OLECHAR*, _bstr_t, CString, std::string, std::wstring, QString... и продолжать могу еще долго.
Так это и есть одна из задач, которую выполняет STL. Он подходит для интерфейсов. А внутри блоков уже можно подбирать то, что лучше. С++ сделан для экономии места и времени. Для задач, требующих тонкой настройки. Каждый инструмент там надо подбирать под задачу. В геймдеве stl вообще не подходит, есть там ToLower или нет. А вообще, есть же QT действительно, там "богатые" строки и все все есть.
G>>>>Это компенсируется стабильностью. Опытный программист обучается обходить грабли и использует это умение много лет. Да, порог вхождения выше, зато, когда вошел, выходить не надо еще много лет, в отличии от того же дот нета.
BDA>А, так значит dynamic_cast<T>(o), который вы пропустили — не «антипаттерн» (что бы это слово ни значило)? Тогда зачем ОН режет глаз? Чтоб жизнь медом не казалась?
он тоже "вызывает нахмуренное лицо" (см. цитату ниже) и достаточно редкий, что бы его в удобные скобки оборачивать.
prefer to design away downcasting: Refactor or redesign your code so that it isn't needed ...
BDA>Ну так и сколько пустая студия у вас открывается в секундах?
Не на работе сейчас. На домашнем компе Intel Core i7 4GB RAM не SSD, VS Express 2013 for Destop — 24 секунды первый раз и 4 секунды второй и последующие. Но это если сразу запускать.
Вообще-то студия не очень хорошее сравнение. Там все еще много C++ и COM осталось, если не ошибаюсь, особенно во время старта.