К основному контенту

Почему C++ возвращается... не возвращаясь?

C makes it easy to shoot yourself in the foot. 
C++ makes it harder, but when you do, you blow away your whole leg!
— Bjarne Stroustrup

"Why C++ Is Not “Back”?" - отличная статья про то, почему нельзя назвать нынешнее положение дел с C++, его возрождением или возвращением.

Действительно, соглашусь с автором. Если немного остыть и подумать, то часто, после прочтения очередной рюшки из С++11 ловлю себя на мысли "ну наконец-то, теперь я могу это делать в С++". Хмм, это значит, что до этого я уже мог это делать в знакомых мне C# или Python. Звучит не очень...

Недавно, анализируя источники трафика к постам, обнаружил, что на один из постов шел активный трафик с rsdn. Выяснилось, что на форуме обсуждался вопрос "стоит ли учить С++".  А пост, на который в качестве доказательства необходимости изучения дали ссылку, это интервью Kate Gregory и Steve Tiexeira. Там они обсуждают о том, почему сейчас важно опять начинать работать с C++. 

Вопрос о том, нужно ли или нет учить C++, действительно интересный. Особенно с учетом этого:

"It seems that many of the seasoned developers have forgotten why we stopped using C++ and moved on to Java, C# and other modern languages."

Автор статьи дает 3 ответа на вопрос "Почему я должен учить С++"
- вы серьезно заботитесь о производительности и при этом вам нужен язык с ОО подходом
- вы пишете код, который напрямую работает с железом
- вы серьезно заботитесь о распределении памяти и вам важна возможность иметь полный контроль над ней.
Это все.

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

Есть над чем подумать:
I held out for a long time trying to believe that all the investment I had made in C++ was not lost, but it turned out that C# simplified things to such a great degree that the extra power C++ gave me was not worth the extra responsibility.
В качестве бонуса, в статье есть отличный набор вопросов к собеседованию по C++
  1. Какие есть способы инициализации примитивных типов данных в С++?
  2. Почему деструктор нужно объявлять виртуальным?
  3. Что такое перегрузка (overloading) в C++?
  4. Какие примеру перегрузки вы знаете?
  5. Что такое кодирование имен (name mangling) в С++ и зачем оно используется?
  6. Что такое абстрактный базовый класс?
  7. Что такое RTTI?
  8. Как можно получить доступ к переменной, которая скрыта другой переменной с таким же именем? (тут похоже большое пространство для вариантов)
  9. Что такое namespace и для чего используется?
  10. Какая разница между классом и структурой в С++? А что в С?
  11. Что такое шаблоны и для чего используются?
  12. Что такое конструктор копирования, когда используется, чем отличается от оператора "="?
  13. В чем разница между shallow и deep копированием?
  14. Для чего используется const оператор?
  15. Передача по ссылке, значению, указателю - в чем разница?
  16. Когда можно, а когда нет возвращать результат по ссылке?
  17. В чем разница между переменными созданными в куче и на стеке?
  18. Как вы освобождаете динамически выделенную память для массива? Что будет если просто вызвать delete?
  19. Для чего используется множественное наследование?
  20. Чистая виртуальная функция - что такое?
  21. Для чего используется ключевое слово mutable?
  22. Для чего используется ключевое слово volatile?
  23. Что такое STL?
  24. Что такое vector?
  25. Что включает в себя <algorithms>?
  26. В чем разница между #include <iostream.h> и #include <iostream>?
  27. В чем отличие "++i" и "i++"?
  28. Что такое "быстрое сравнение" и как оно может быть использовано? В чем опасность?
  29. Что делает оператор ","?
  30. Что такое и как используется тернарный оператор?
  31. Что такое const для фунции-члена класса и как она может быть после этого использована?
  32. Использование try|catch в С++?
  33. Почему нельзя бросать исключения в деструкторе?
  34. Для чего используется ключевое слово explicit?
  35. Как правильно приводить к типу в С++?
  36. Для чего используется inline?
Но в конце концов, автор дает еще один плюс от изучения С++
If you can program in C++, you can program in any programming language.  If you understand how stack and heap memory work, pointers and references and all the low level details that make C++ so tricky, it will help you when you are working at higher abstractions and in understanding how computers work in general.
Дерзайте :) 

Комментарии

  1. If you can program in Assembler, you can program in any programming language. If you understand how stack and heap memory work, pointers and references and all the low level details that make Assembler so tricky, it will help you when you are working at higher abstractions and in understanding how computers work in general.

    ОтветитьУдалить
  2. думаю, что С++ коммерчески более выгоден. Поэтому начать нужно с него, а если уж его не хватит, то учить Ассемблер :)

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Полезные ресурсы для молодых (и не только) тестировщиков

сперто(с) Уже 3 месяца провожу собеседования тестировщиков (март 2016). Поначалу они просто  веселили - после 15-летнего опыта собеседования С++-разработчиков, общение с тестировщиками (чаще были "-цы") было чем-то экзотическим и забавным. Потом становилось все грустнее и грустнее, мимими закончилось. Началась печаль.

Заметки на коленке - 3. Что еще делать, если ваши тесты уже "зеленые"?

"Lately I find I'm working on automated tests that return non-binary results. Tests that neither pass nor fail" by  @noahsussman Отличная мысль, которую я ретвитил еще в 2016. Но давайте вместе подумаем, что за этим может скрываться? ( кстати, не знаю, что при этом думал Noah ) Ваши тесты прошли и прошли "успешно". Все хорошо или все же есть, куда еще посмотреть? Дальше то, что использовал я лично и то, что еще можно прикрутить дополнительно. Естественно все шаги ниже должны быть автоматизированны. 1. Контролируйте время выполнения тестов. Если набор проверок не меняется (а такое часто бывает, к сожалению), то рост времени выполнения может говорить о проблемах в продакшен коде (чаще всего) или проблемах с окружением. 2. Контроль за количеством выполняемых тестов. "Все зеленое" не значит, что сегодня выполняли те же Х тестов, что и вчера. Смешно(нет), но случается такое, что какие-то проверки "исчезают" из запуска из-за того, что у кого-то &qu

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub. Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются. Проверять работоспособность тестируемого объекта (system under test - SUT) можно двумя способами: оценивая состояние объекта или его поведение. В первом случае проверка правильности работы метода SUT заключается в оценке состояния самого SUT, а также взаимодействующих объектов, после вызова этого метода. Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT. Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы. Теперь подробнее. Gerard Meszaros использует термин Test Double (дублер), как обозначение для объе