Прийшов час осідлати справжнього Буцефала🏇🏻Приборкай норовливого коня разом з Newxel🏇🏻Умови на сайті
×Закрыть
Senior Software Developer – Fishing Planet
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Спустя неделю, посмотрев на статью с учетом всех комментарией, должен признать, что попытка замахнуться на глобальное сравнение с другим языками, мягко говоря, удалась не очень. Но тем не менее, вполне получилось показать некоторые примеры проблем, с которыми так или иначе сталкиваются новички и к которым давно привыкли старички :).
    Так же сделал для себя вывод, что С++ изменяется со временем достаточно сильно. Так часть примеров была взята из последнего 3го издания достаточно известной книги Effective C++ Мэйерса, но которая вышла в 2005 году. За это время достаточно много чего изменилось и многое уже стало не актуально, особенно если использовать более новые возможности языка.
    Здесь напрашивается второй вывод: «хотите писать на С++ правильно — ищите как решать возникшую проблему современными средствами».
    Уже после написания статьи, с целью лучше разобраться, что нас ждет в с++20 нашел книгу changkun.de/...​rn-cpp-tutorial-en-us.pdf , которая может служить неплохим примером того, какие проблемы решали разработчики языка и как у них это получилось.
    Еще, для тех, кто хочет пощупать новые возможности с++20 уже сегодня, рискну порекомендовать цикл видео этого автора www.youtube.com/...​eBDH6i4Rr3E2ZYLUq6_Rdq3Dr
    У него специфический английский, но следуя его инструкциям я смог настроить у себя последние версии 3 различных компиляторов и попробовать в действии те возможности языка, которые станут доступны достаточно скоро.
    Всем бобра ;)!

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Потому как большинство примеров в статье — из личного опыта, которые в свое время стали для меня сюрпризом, не всегда приятным. Предупрежден = вооружен.

    Поддержал: Yegor Igorkin
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

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

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Это зависит исключительно от умения учащего, собственно, учить. Я, например, не умею, поэтому и не берусь.

    И тем не менее рекомендуете мне не продолжать это делать ;)?
    Не буду спорить — тоже понимаю, что статься не идеальна, особенно в свете некоторых уточнений, о которых я не знал, но о которых написали в комментах более опытные.
    Если не брать во внимание местами не удачную стилистику повествования, считаете ли вы, что я не зря потратил кучу времени (пару десятков вечеров)? Может ли такая статья быть полезной целевой аудитории?

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Может ли студент чему-то научить школьника? А джун студента? А мидл джуна? А один техэкспер другого?
    Вы считаете не должно быть статей для новичков, от немного более опытных?
    Мне кажется эксперту спустя годы сложно понять, что будет просто, а сложно начинающим, особенно, когда он с ними особо не работает.
    Я много работаю с новичками — мне нравится помогать тем, кто реально хочет учиться.
    Мне приходилось помогать студентам наших ВУЗов, один был из Гамбурга, один из Сиднея, один из Дублина. С удовольствием помогаю сотрудникам, если вижу, что могу быть им полезен. Я не зря написал, что самоучка, так как в политехе я учился не на программиста, но все время учебы делал работы для всех курсов. Меня никто не учил, все что знаю — нашел и разобрался сам. Потому мне проще понять, что именно вызывает проблемы на каждом этапе освоения той или иной проблемы, фреймворка, языка.
    Да, у меня в знаниях можно найти пробелы — но я всегда уважал стремления к знаниям другим и сам не собираюсь останавливаться на достигнутом.

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Кстати, сегодня была возможность сравнить скорость компиляции этого же проекта на чуть другой конфигурации.
    Диск похожий, оперативки 32Гб DDR3 (у меня 16Гб DDR4), проц i7-6700(4 ядра 8 потоков) против моего i7-8700(6 ядер 12 потоков). Скорость сборки у этого компа оказалась где-то в 1.5-2 раза ниже.
    Видать количество потоков тоже имеет значение.
    В случае C++ это понятно, скорость легко скалируется на потоки путем независимой компиляции каждого файла. В случае C# это было не так очевидно.

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Наверное, все же точнее сказать: тот, кому сложность проекта позволяет не использовать решарпер.
    Мне на текущем Unity проекте вполне стало терпимо без решарпера, начиная с 2015й студии.
    Можете привести пример того, что вам приходится очень часто делать из решарпера?

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    В тексте маленька ошибка, предполагалось

    но обязательно ЛИ ему платить премию? А если на это наложить вашу особенность характера болезненно относится к уходу каждого сотрудника?
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Если есть причина — можно ругать окружение созданное Микрософт для языка ;). Так объективно Resharper добавлял студии кучу возможностей, которой она не обладала без него. В результате студию допилили до состояния, что вполне можно жить на чистой студии, допускаю критика возимела действие.
    Я понимаю ваш довод. Да, к языку инструменты прямого отношения не имеют. А есть ли IDE, в которых ошибки линковки более информативны чем в студии?

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Вы в моем тексте где-то увидели претензии к вашей квалификации как С++ программиста? Ткните носом, если не сложно.
    Тем не менее вы подписались под наездом, целью которого было дискредитировать меня как программиста вообще и дальше пытаетесь давить авторитетом.
    Специально для вас процитирую:

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

    те, кто считает, что начинать нужно со сложного и максимально эффективного;
    те, кто много писал на C#|Java и подобных и хочет покорить новые вершины;
    те, кто имеет некоторый опыт C++, но, как и я, понимает, что нет предела совершенству;
    практикующие системные программисты на языках типа Rust и D, которые смогут рассказать, почему выбрали их альтернативой C++;
    гуру C++, которые в комментариях просветят неопытных, чем и на сколько оправданы те или иные подходы языка, затронутые в статье.

    Вы абсолютно точно пишите:

    Но это херня всё, я лично знаю людей, гораздо лучше меня знающих С++ в частности и умеющих программировать вообще.

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

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

    Вдруг вы так далеко «неосилили» :-\

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Синтаксически ObjectiveC, ИМХО, ужасен.
    Когда-то попробовал к нему прикоснуться и отсахнулся, как от дурно пахнущей кучи.
    Мне кажется не просто так Swift пришел ему на смену и последние годы успешно вытесняет первый с рынка.

    Поддержал: Anton Taranov
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Так я ж порівняв порожній проект на С++ для Unreal з досить великим проектом на C# для Unity і час виявився однаковим. Порівняння явно не на користь С++. Про які маніпуляції йде мова?

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Повесить ярлык куда проще, чем исследовать биографию, правда ;)?
    За 14 лет в gamedev я работал только в 3х компаниях и все они продуктовые, а не галеры, где лохам инстранцам продают мидлов за $6000, а по факту платят $2000. Следовательно каждая считает свои деньги и кого попало не набирает. Спросите у Ваэля, владельца Frogwares, скольким сотрудникам он платил в момент увольнения премию вообще. Мне, когда я увольнялся по собственнному желанию спустя 3.5 года работы, он не только долгов по зп не оставил, но и выплатил еще 4 месячных оклада премии. Скорее всего за красивые глаза.
    В текущей компании я работаю 4 года, сами посчитаете, сколько я проработал в Wargaming до этого?
    Помнится в 2010 году, до момента покупки «Першої Студії» «кровавым» Wargaming, мы короткий период аутсорсили для Electronic Arts — делали так называемые дрилы под Wii, XBox360, PS3 на кривых тулза EA. Они сами знали, что тулзы кривые, что только подготовка окружения и ресурсов под каждый новый дрилл занимает около рабочего дня, потому приемлимым считалось 5 дней на выполнение каждого и для этого требовался 1 программист. Одновременно в работе было порядка 7-8 дрилов/программистов. А потом «несвободно владеющий языками» TC взял и по собственной инициативе создал тулзу, которая позвоила каждому программисту заканчивать дрил за день. Прибавку к зп он снова получил за красивые глаза ;). А потом еще его, от нефиг делать естесно, выбрали одним из 5 программистов начинать проект для Wargaming и так он этот проект до релиза и доводил полностью отвечая за всю боевку на сервере и плотно работая с клиентскими программерами.
    В текущей компании без меня вышли на steam, но на PS4 и XBox выходили уже со мной. Вы много знаете чисто украинских компаний, который вышли на 3 таких платформы?
    Вот пример «бездарного» проектного решения TC, которое NDA незапрещает раскрыть:
    stackoverflow.com/...​keyword/37238655#37238655
    100 пудово каждый джун знает зачем нужны приватные интерфейсы.
    Если вы внимательно не вчитывались в целевую аудиторию статьи — можете очень коротко прочитать здесь, почему у нее оказался такой заголовок и почему примеры на столько простые.
    dou.ua/...​ign=reply-comment#1853645

    Поддержал: Punk Floyd
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Вважаю, що рефлексію виправдано використовувати тільки для невеликого кола задач.
    Без generic’ів шарп не був би такою потужної і елегантною мовою, для свого кола задач, певна справа.

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

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

    Поддержал: Taras Morozovsky
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    На скільки я в курсі, в .Net швидкість роботи з generic класами не поступається швидкості роботи зі звичайними класами.

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Я так сходу не вспомню какой-то прям всеобъемлющей ссылки. Если это одиночный пет-проект — выкручиваем ворнинги и code analysis компилятора на максимум, подключаем clang-tidy, гоняем тесты под санитайзерами, соблюдаем cppcoreguidelines. Можно еще обмазаться каким-то pvs-studio, если совсем скучно на карантине. ) Если проект на гитхабе — можно автоматизировать все это в travis/appveyor/что там сейчас еще модно. Для мелких/средних проектов должно хватить.

    Отлично, покопаю в этом направлении. Отдельное спасибо за cppcoreguidelines, подозревал, что что-то такое есть, но никогда не слышал :).

    Повторюсь: в данном случае претензию нужно адресовать в IDE, не в язык.

    Формально да. По факту все это оносится к удобству работы с языком. И я помню свое негодование, когда первый раз осознал, что от IDE помощи я в этом случае не получу :).

    Ирония тут в том, что С#, который позволяет ровно один способ записи (повторять public каждый раз), Вы нахваливаете за гибкость и промоушен современных стандартов. А С++, позволяющий писать как нравится (в том числе и «шарповским» способом!), почему-то ругаете за эту возможность. Несправедливо! )

    Сложно что-то несубъективное возразить :). Но скорее всего, если у вас кто-то на проекте начнет так писать — вы ему быстренько расскажете о корпоративном code style ;). Субъективно мне больше нравится (привычно?) как реализовано в шарпе и иже с ними. Интересно почитать почему именно такой способ стал популярнее и на сколько я угадал со своими предположениями.

    Делаем деструктор protected

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

    Так можно делать начиная с С++11, потому да, в 2006 году Мейерс об этом еще не писал.

    Я интересовался именно конструктором, когда значения полям присваиваются из параметров.

    struct A
    {
    public:
    int Y;
    int X;
    int Z; //забытые переменные остаются на вашей совести

    A(int value) :
    X(value + 1),
    Y(2*X) //в списках инициализации опасно полагаться на значения других полей
    {
    //классический для других языков способ инициализации в С++ считается не эффективным
    //X = value + 1;
    //Y = 2*X;
    //Z = 0;
    }
    };

    на сколько корректным считается инициализировать поля класса в конструкторе именно «классическим способом»? Мэйерс писал, что это менее эффективно — уже пофиксили?

    По шаблона вопрос: как все же каноничнее поступать (делают чаще) — писать код внутри шаблонного класса или выносить за его пределы?

    Спасибо за ликбез — я с удовольствием впитываю ;)

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Я независимо от оверрайдов стараюсь избегать такой мешанины из функций с одинаковым именем на разных уровнях иерархии.

    Мне показалось, что это было и о перепреоделения тоже. А так мы пришли к консенсусу

    А простой overload в классах наследника — вполне допускаю, что такое поведение оправдано, хоть и не видел подобного в других языках. Тем более, что в 99% случаев перегружаю только конструкторы.
  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Чуть недопонял. Примеры чего?

    Примеры статей, где для вполне опытных разработчиков на C#, Java и других популярных языков, но новичков в С++, были бы хорошо подобраны основные подводные камни и проблемы, с которыми придется столкнуться буквально с самого начала и как их решать?

    В целом да, хорошая. Помогла мне в своё время разобраться с iostream’ами (наиболее монструозная и неудачно задизайненная часть стандартной библиотеки C++, на мой взгляд). Очень подробно всё расписано.

    Я правда ее перелистывал пару месяцев назад — уже не так впечатляет. Да, много чего из нее я почерпнул полезного в свое время, но С++11 так описан достаточно куцо, а более новых возможностей нет вообще, так как вышла она уже скоро как 10 лет и переиздания не было.

    Я независимо от оверрайдов стараюсь избегать такой мешанины из функций с одинаковым именем на разных уровнях иерархии.

    Конечно же «що занадто, то нездраво», но полиморфизм это один из столпов ООП и виртуальные методы позволяют решать множество задач, например элегантно описывать пакетную обработку объектов унаследованных от одного класса (в C#|Java и имплементирующего один и тот же интерфейс). Потому переопределение методов в мире ООП языков оправданно используются достаточно активно.

    Именно из студентов — думаю, так и есть. Но разработчики, которые пишут на плюсах профессионально, о подобных инструментах как правило знают.

    Обратите внимание, что у статьи изменился заголовок — dou.ua/...​fficult-to-learn/#1853645

  • Недружелюбность C++ к новичкам: взгляд Unity-разработчика

    Ви неуважні, все повідомлення вище про Unreal. Про Unity там тільки пасаж, що вони в спробі нагнати Unreal зробили схожий редактор шейдерів.
    Ви якось різко прореагували на спокійний пост з смайлами на кожному кроці.
    Не смію вас більше дратувати

← Сtrl 123 Ctrl →