среда, 26 августа 2009 г.

Популяризатор

Оформилось при написании предыдущего поста и разрослось в отдельный пост.

В C++ есть очень много возможностей/фич, которые в связке могут давать больший выигрыш, чем  каждое по отдельности – т.е. существуют некие наборы, для которых 2+2=5. Что-то наподобие паттернов, только на языковом уровне. Мне самому это находить пока навык не позволяет, только разве что почувствовать, что оно где-то рядом. Как пример того, что может дать больший полезный выхлоп чем кажется начально: лямбды и стандартные алгоритмы, Valarray, срезы и обработка больших массивов данных…

Но Community C++ сильно нехватает Популяризатора – да, именно популяризатора с большой буквы. Причём не только русскоязычному, а и мировому.

Нет человека, который выступил бы в некотором роде “локомотивом” для C++. У Python есть Гвидо ван Россум, у C# - Microsoft целиком, даже у Java есть(был?) Sun, который раскручивал этот язык.

А у C++ никого/ничего подобного нет: Страуструп ушёл в развитие возможностей языка, Эккель сам говорит, что его больше интересует Python по различным причинам, Александреску заблудился в “лабиринтах шаблонов”, Майерс – где-то рядом с Александреску ( пока… - хотя тут возможен вариант), Степанов – ближе к научному программированию, Саттер – он подходит больше всех сейчас на роль популяризатора , но у него, уже на момент публикации “Free lunch is over” в 2003, оформилась многопоточность и всё с ней связанное, как основной приоритет. Т.е. Личности в Community C++ есть, но нет именно Популяризатора.

А ведь ситуация сейчас складывается довольно выгодная для C++: выросший рынок мульти-платформенных приложений с появлением сильного Qt может быть почти полностью привязаться к C++ на ближайшие 5-10 лет, постоянно растущий рынок embedded с его требованиями к эффективности склонен использовать C++, а не Java, C#, Python и иже с ними.

И вот хотелось бы найти Популяризатора, который смог бы раскручивать язык и использовать для этого в том числе и “языковые паттерны”.

Философия С++. Брюс Эккель.


По прочтении “Философия С++” Брюса Эккеля оформилось несколько мыслей, которые собственно и попытаюсь сформулировать.


  1. Основная мысль - Раньше её надо было прочитать, значительно раньше! Хотя бы сразу после “Паттерны проектирования” GoF. Ибо глава посвященная петтернам у Эккеля кроме собственно объяснений паттернов содержит реализацию паттернов на C++ и критику по паттернам. Т.е. позволяет паттерны хорошо утрясти в голове. При чём эккелевские примеры реализации содержат часто моменты, которые не видны при реализации “в лоб” при переносе оригинала с Java – соответственно мог переступить через несколько граблей, а не проверять их своим лбом. :(

  2. Возможности языка, которыми не владеешь хорошо, склонен рассматривать как зло предварительной оптимизации. А как только овладеваешь ими на уровне “Conscious Competence”, то уже перестаёшь понимать почему ты раньше так их боялся.

  3. В таблице моё впечатление от отдельных глав – насколько стоило их читать, т.е. что они позволяют достичь

Том/ГлаваЧто позволяет сделать

Том 1

повторить основы
Том 2
Главы 1-4повторить основы
Глава 5: Templates in DepthВдумчиво разобраться с механизмом
Глава 6-7: Generic Algorithms and ContainersОчень вдумчиво разобраться с описаными механизмами
Главы 8-9повторить основы
Глава 10: Design PatternsОчень вдумчиво разобраться
Глава 11: ConcurrencyПрочитать для интереса, за исключением Summary, которое стоит вдумчиво разобрать. Всё равно у Саттера лучше.



Да, C++Primer я читал – пока кажется “предварительной оптимизацией” ;)