7 причин почему Windows популярнее, чем Linux


Задумывались ли вы, почему в умах обычных людей Windows лучше, чем Linux?
Ведь Linux лучше - лучше технология, поддержка тысяч процессоров одновременно, posix совместимость, защита от вирусов, возможность пользоваться удобной командной строкой и устанавливать пакеты, набрав пару строк в консоли, да и сама возможность перекомпилировать ядро под свою машину чего стоит! В конце концов, он же бесплатный!
Ну почему другие люди не видят этих преимуществ?
А потому что для 99% людей это не преимущества, а развлечения для гиков. Они и слов-то таких не понимают.
А вот, что для них настоящее преимущество:


1. Windows можно купить в магазине, а Linux - нет.
Магазинам выгодно продавать Windows и компьютеры с установленным Windows, т.к. они получают бонусы с этого.
А с продажи компьютера с установленным Linux магазин не получает ничего. Разве это может заставить магазины выбрать Linux?


2. Windows рекламмируется везде, а про Linux знают только гики. У Linux-а ужасный маркетинг.
90% компьютеров сейчас работают на Windows. И только 1% на Linux.
Такое доминирование значит Linux должен быть в несколько раз лучше и удобнее Windows, чтобы люди начали на него переходить. Но и факта того, что Linux лучше в 10 раз - мало. Нужно еще, чтобы люди про это узнали. И тут нужен хороший маркетиинг. А его нет.
Так что Linux обречен быть системой для гиков, пока это не изменится.


3. Большинство пользователей и программистов на курсах или в университетах изучают Windows.
А если ты знаешь одну систему, то очень сложно заставить себя изучить другую.
А еще сложнее начать ее использовать в повседневной жизни.
И если вы заявите, что на самом деле это просто, то вы только докажете, что вы - гик :)


4. Даже среди программистов и IT-специалистов есть мнение, что Linux для гиков и для серверов, а Windows - для обычных нормальных людей и для десктопов.
Возможно это миф, но мифы очень живучи. И их нужно уметь развеивать.


Читать дальше 7 причин почему Windows популярнее, чем Linux…

Встреча с легендой: Бьёрн Страуструп


Сегодня я сходил на лекцию живой легенды - Бьёрна Страуструпа (на фото с лекции - Бьёрн, рассказывающий про первую версию компилятора C++).
Автор языка C++ и бессменный идеолог его развития, популяризатор идей объектно-ориентированного программирования, обладатель многих наград и премий, в том числе и награды “первый компьютерный ученый”.
Сложно даже просто оценить и уж точно не переоценить его вклад в развитие программирования. Сейчас уже сложно себе это представить, но еще 20-25 лет назад идеи ООП были непонятны никому. Уже была Симула, были научные трактаты про ООП, но их читали только профессора, а 99.9% программистов про ООП даже не слышало.
Всё изменилось, когда Страуструп создал C++. Именно этот язык произвел революцию в умах программистов в 80-х - 90-х и на смену эпохе структурного программирования пришла эпоха объектно-ориентированного программирования. А новая эпоха породила уже новые языки, включая любимую многими Java. Сейчас уже трудно представить себе программиста, который не понимает ООП.


На лекции Бьёрн (кстати, он датчанин и его имя по-датски надо читать Бьярне, а не Бьёрн, но т.к. имя Бьёрн уже устоялось, то не буду ничего менять) много говорил про историю создания C++. Про то, что привело его к идее языка. Про то, что было его движущими факторами при разработке первой версии и каждой последующей. Про то, как он видит прошлое и будущее C++. И это было очень inspiring, как говорят англичане (что-то типа “вдохновляюще”, но слово посильнее).
Вторая часть выступления была посвящана новому стандарту C++0x и тому, как он разрабатывается. В голосе Бьёрна слышалось небольшое раздражение медлительностью и неэффективностью комитета по стандартизации, а также их упертостью. Даже он не может там ничего требовать. Например, он много лет добивался, чтобы убрать обязательный пробел между двумя > в конце std::vector<std::list<int>>. И только постоянное капание на мозг заставило комитет потребовать, чтобы это компилировалось и без пробела.
Или еще лучше пример: уже в 80-х годах Страуструп реализовал ключевое слово auto в C++. Но его тогда потребовали убрать из-за несовместимости с С. И только теперь оно возвращается и теперь можно писать, например, так: for (auto i : v) std::cout << i << "\n"; и неважно какого типа переменная v.
В общем, понятно, почему стандарт вышел не 0x, а 0xB.
Также он показал примеры новых фич из C++0x и то, зачем они были созданы.


Всего 2 основные идеи стоят за каждой новой фичей в C++0x:
1. Простота освоения языка новичками и простота обучения. Ибо новичков среди разработчиков всегда больше, чем профессионалов.
2. Сделать C++ еще более подходящим для системного программирования и создания библиотек. Ибо это именно то, где C++ силен. C++ не собирается конкурировать в прикладных узких областях с другими языками, но зато за счет множества библиотек использование С++ постоянно расширяется и может прийти и в эти области.
Еще одна из движущих идей - сделать уже написанный код еще быстрее. Отсюда все эти move constructors, константные выражения (constexpr) и т.п.


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


А в завершение хочу сказать, что шанс встретиться с таким человеком может представиться только раз в жизни. И я абсолютно не понимаю программистов, которые проигнорировали это событие и не пошли послушать лекцию.
Представьте себе - бесплатно, всего в 10 минутах от вашей работы выступает Страуструп, а вы это событие игнорируете.
Можете себе такое представить? Я - нет.
Но при этом послушать Страуструпа из всей моей большой фирмы пошло всего 2 человека! Мне этого никогда не понять…

Решения загадки: пишем код на русском языке

Вчера я задал небольшую загадку про то, как на C++ заставить компилироваться и правильно работать такой cpp файл:

НАЧАЛО ПРОГРАММЫ

Выведи текст на экран

начало текста
“Я помню чудное мгновенье: \n\
Передо мной явилась ты, \n\
Как мимолетное виденье, \n\
Как гений чистой красоты.”
конец текста

Выведи текст в файл “Стих.txt”

начало текста
“В томленьях грусти безнадежной\n\
В тревогах шумной суеты,\n\
Звучал мне долго голос нежный\n\
И снились милые черты.”
конец текста

КОНЕЦ ПРОГРАММЫ

Сегодня выкладываю свой ответ (весь код и проект для Visual Studio 2010 вы можете скачать отсюда).
Итак, понятно, что где-то должны быть #define, в которых должны быть прописаны ключевые слова, например:
#define НАЧАЛО int _tmain(int argc, _TCHAR* argv[]) {
#define КОНЕЦ }


Читать дальше Решения загадки: пишем код на русском языке…

Загадка: пишем код на русском языке

Только что написал корректно компилирующуюся программу для C++ на русском языке.
В ней всего 1 cpp файл.
Вот он целиком:

НАЧАЛО ПРОГРАММЫ

Выведи текст на экран

начало текста
“Я помню чудное мгновенье: \n\
Передо мной явилась ты, \n\
Как мимолетное виденье, \n\
Как гений чистой красоты.”
конец текста

Выведи текст в файл “Стих.txt”

начало текста
“В томленьях грусти безнадежной\n\
В тревогах шумной суеты,\n\
Звучал мне долго голос нежный\n\
И снились милые черты.”
конец текста

КОНЕЦ ПРОГРАММЫ

Как несложно догадаться, программа выводит сначала первое четверостишье на экран, а затем второе в файл “Стих.txt”.
Этот код компилируется и работает!
Почему?
Ведь тут даже ни одного #include нет, чтобы хоть чем-то работоспособность можно было объяснить.
Кто сможет разгадать этот ребус?
Пишите свои ответы и дополнительный код в комментариях (ведь определенно должно быть что-то еще кроме этого .cpp файла). И постарайтесь не подглядывать чужие ответы в комментариях :)
А завтра я опубликую свой вариант и имена тех, кто предложит лучшие ответы (самый красивый вариант, самый короткий вариант и т.п.).
Upd:
Понятно, что должен быть .h файл и он должен как-то скрыто подключаться. Но это только половина решения.
Вторая часть решения - это написать сам этот .h файл.



Популярность языков программирования

TIOBE опубликовала очередной индекс популярности языков программирования.
На первых двух местах по-прежнему C и Java. А вот PHP отнял третье место у C++. Вообще, популярность C++ стабильно падает последние 10 лет, а ведь 10 лет назад это был самый восстребованный язык программирования.
Радует, что из скриптовых языков на первом месте мой любимый Python. Он хоть и уступил одно место, но не чему-то, а самому C#, который с каждым годом поднимается все выше и выше.
Обратите внимание на резкий рост Objective-C и нового гугловского Go. Но это легко объяснить тем, что росли они практически с нуля.


Вот таблица:

Позиция
Март 2010
Позиция
Март 2009
Изменение позиции Язык программирования Рейтинг
Март 2010
Delta
Mar 2009
Статус
1 1 Java 17.509% -2.29% A
2 2 C 17.279% +1.42% A
3 4 PHP 9.908% +0.42% A
4 3 C++ 9.610% -0.75% A
5 5 (Visual) Basic 6.574% -1.71% A
6 7 C# 4.264% -0.06% A
7 6 Python 4.230% -0.95% A
8 9 Perl 3.821% +0.40% A
9 10 Delphi 2.684% -0.03% A
10 8 JavaScript 2.651% -0.96% A
11 11 Ruby 2.327% -0.27% A
12 32 Objective-C 1.970% +1.79% A
13 - Go 0.921% +0.92% A
14 15 SAS 0.769% -0.03% A
15 13 PL/SQL 0.737% -0.31% A
16 22 MATLAB 0.661% +0.20% B
17 17 ABAP 0.639% +0.00% B
18 16 Pascal 0.603% -0.13% B
19 19 ActionScript 0.594% +0.11% B
20 27 Fortran 0.563% +0.24% B

Читать дальше Популярность языков программирования…

Value stream mapping (Карта потока создания ценности)

Есть в системе Lean production одна техника оптимизации, которая мне очень нравится, и с которой я сейчас хочу вас познакомить. Называется она Value stream mapping, что на русский переводится плохо. Лучший официальный перевод, что я нашел - это Карта потока создания ценности, хотя mapping - это не карта в этом контексте, а скорее “отображение”.
Но не в этом суть, в дальнейшем я буду называть этот метод для краткости VSM (от Value stream mapping).
VSM - это техника, которая изначально была придумана в системе Lean производства Тойоты для анализа потока материалов и информации. В Тойоте этот метод использовали для максимального ускорения процесса создания продукта от момента запроса чего-то до момента доставки этого потребителю.
Как и практически всё остальное из тойотовского Lean manufacturing, VSM прижился и в других отраслях, включая отрасль разработки ПО. Фактически, VSM можно использовать для оптимизации любого процесса и использовать где угодно - от программирования до организации вывоза мусора.


Основная идея VSM очень проста. Вам надо выделить финальный продукт, который вы создаете. А также первое действие, которое вы делаете для создания продукта. После этого вы рисуете схему, как от первого действия вы продвигаетесь к созданию конечного продукта. Квадратики в такой схеме - это этапы или события, а линии между ними - это связи между этапами. Каждый этап занимает сколько-то времени, но и на передачу данных или материалов между этапами также уходит время, так что нужно отмечать временные затраты и на этапах и на переходах. После того, как такая схема нарисована - это и есть готовый Value stream mapping. На ней сразу будет видно где вы теряете время в процессе создания продукта и сколько времени вы тратите на работу, а сколько на ожидание. Главная цель создания VSM - это максимальное уменьшение времени ожидания в процессе разработки. Делается это достаточно просто с помощью анализа полученной схемы VSM.


Словами это описать сложно, а на примере понять легко, так что напишу пример из жизни.


Читать дальше Value stream mapping (Карта потока создания ценности)…

Принят финальный проект для C++0x


Наконец-то свершилось!
Комитет по стандартизации C++ принял сегодня финальный Draft (проект, черновик) для C++0x, о чем в своем блоге поспешил сообщить Herb Sutter.
Теперь впереди финальные небольшие доработки и исправления, но кардинально меняться ничего уже не будет. А через год выйдет и совсем финальный вариант стандарта, который, как шутили многие, будет называться C++0xB.


Есть всего 2 изменения, которые просочились сегодня в стандарт:
1. Пометили, как “устаревшие” (deprecated) спецификации исключений, но зато добавили ключевое слово noexcept для случаев, когда функция не генерит вообще исключений. Понятно, зачем убрали спецификацию исключений - их все равно невозможно было нормально использовать. А новое ключевое слово можно будет использовать так: “void f() noexcept {…}”. Это может помочь компилятору сгенерить более оптимальный код в некоторых ситуациях.
2. Убрали экспортные шаблоны. Был всего 1 компилятор (EDG), который их поддерживал, да и то его разработчики сами просили убрать их из стандарта. Вот их и убрали для упрощения.


Все остальное осталось неизменным с последней публикации. Про основные фичи C++0x было уже написано много, так что не буду повторяться. Тем более, что любой уже может с ними поиграть в Visual Studio 2010 или в новом GCC.
А в этот четверг к нам приезжает с лекцией сам Страуструп - будет вдвойне интересно его послушать после этого!

Прощай, Joel on Software


17 марта ровно 10 лет назад Joel Spolsky начал вести свой блог Joel On Software. Уже через несколько лет этот блог стал одним из самых читаемых блогов про разработку софта (если не самым читаемым). Многие программисты по всему миру читали статьи Джоеля и активно используют его термины в разговорах.
Как пример - “Flow” (состояние потока), “Leaking abstractions” (протекающие абстракции) и т.д.
А помните его статьи про работу в Microsoft или про Билла Гейтса, который прочитал спецификацию нового Basic за ночь?
Не погрешу против истины, если скажу, что статьи Джоеля оказали немалое влияние на меня и мою работу. Например, я недавно писал про свой метод интервьюирования программистов, который был разработан под впечатлением его статей.


И вот Джоель объявил, что 17 марта, ровно через 10 лет после открытия блога, он его закрывает.
Блог отнимает у него слишком много времени и уже не дает тех бенефитов, которые хотелось бы.
Прощай, Joel on Software.

Лучшие программерские комиксы

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


Для тех, кто имел “счастье” общаться с Win Vista без сервис пака:

Дилберт за работой:
Dilbert
Читать дальше Лучшие программерские комиксы…

Откуда берется эффективность программиста 2

Я получил несколько интересных комментариев на вчерашний пост Откуда берётся эффективность программиста, которые навели меня на мысль, что я не слишком четко изложил свою позицию по этому вопросу.
В комментариях люди пишут, что я не прав, говоря, что эффективность измеряется только временем, проведенным за клавиатурой. Что кто-то за 4 рабочих часа может сделать больше, чем другой за 8.
Но ведь это именно то, о чем я и писал!
Возможно первый пример про “работящего Васю” и “обычного Петю” сбил всех с толку, но этот пример показывает только то, что при прочих равных производительнее будет тот, кто больше времени уделяет работе, а не другим делам. Это вроде как очевидно и споров не должно вызывать.
Другое дело, что разница в производительности (эффективности) между такими Петей и Васей будет не очень-то большой, если они отличаются только усидчивостью - разница будет в процентах или десятках процентов, максимум в 2 раза (хотя бывают и клинические случаи, когда опытнейшие люди просто испытывают уже отвращение к работе и занимаются ей от силы 10% своего времени, но это все же клиника, которую можно не рассматривать).
К тому же редко встретишь программиста, который никогда не ленится или никогда не впадает в “рабочий раш”. Обычно программисты переключаются между режимами Пети и Васи несколько раз в месяц (а некоторые умудряются переключаться и каждый день).


Зато если Петя и Вася отличаются уровнем знаний, опытом и природной одаренностью, то разница в их производительности может уже составлять десятки раз.
Например, даже если Петя сидит за клавиатурой 3 часа в день, а Вася - 8, но при этом Петя одарён и опытен, а Вася - студент, только начавший изучение программирования, то производительность Пети будет в сотни раз выше, чем Васи. И неважно, что он клавиатуру может за целый день даже не потрогать - у него перед Васей такое преимущество, которое тому простой усидчивостью никак не наверстать.
Читать дальше Откуда берется эффективность программиста 2…