понедельник, 15 июля 2013 г.

Возможности C++, которые лучше не использовать

Image courtesy of Idea go / FreeDigitalPhotos.net

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

Шаблоны (templates)

Без минимального использования шаблонов в C++ не обойтись. Но стоит увлечься их использованием, компиляция программы замедлиться в разы, а найти кто именно, что именно и у кого позвал, становится практически невозможно. Особо стоит упомянуть бинды (boost::bind, tr1::bind и т.п.), при использовании которых вызов в функции превращается в нечитабельную и неотлаживаемую портянку:
std::tr1::bind(
  &SomeThing::Process,
  std::tr1::cref(specificThing),
  std::tr1::placeholders::_1,
  std::tr1::cref(cancelState),
  std::tr1::ref(accumulatingProgress))

А уж какие невнятные ошибки выводят компиляторы, когда не находит подходящей функции для бинда (например, когда список аргументов слегка изменился) не компенсирует даже многоэкранный размер этих ошибок.

Лямбда-выражения

Какой соблазн, описать какое-то действие, не думая над его названием и сразу исполнить. Осторожно! Это сыграет злую шутку с теми, кому придется поддерживать код. Ведь названия сущностей и действий - это и есть то, что помогает понять, что именно делает программа.

Макросы

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

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

воскресенье, 14 июля 2013 г.

Предприниматели и наемные работники

Image courtesy of jscreationzs / FreeDigitalPhotos.net

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

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

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

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

Получается, что разница между наемным работником и предпринимателем - это лишь их мировоззрение. То, как они сами себя позиционируют.