Почему ООП – полный отстой

Есть достаточно известное (в узких кругах) эссе с весьма эпатажным названием – Why OO Sucks. Его автор – архитектор языка Erlang, Джо Армстронг. После непродолжительного поиска перевода (он мне был нужен по некоторым причинам), я его не нашел. Так что решил перевести сам – благо текст не очень длинный. Постарался сохранить авторскую формулировку там, где очень хотелось её поменять. Например, как и у автора, методы объектов названы функциями. Если где-то есть возражения по переводу – отписывайтесь в комментариях (или письмом). Поправлю. Свои мысли по поводу прочитанного выскажу позже.

Why OO Sucks

Когда я впервые ознакомился с идеей ООП, я был скептически настроен, хотя и не знал почему – просто ощущал, что это неправильно. После этого ознакомления, ООП стало очень популярным (далее я объясню, почему) и критика ООП стала чем-то вроде “богохульства в церкви”. Объектно-ориентированность стала чем-то, что должен иметь каждый респектабельный язык.

Когда Erlang стал популярным, нас часто спрашивали, “является Erlang ОО-языком?”. Конечно же, правильный ответ – “Нет, конечно, нет”. Но мы не говорили это вслух – пока мы не придумали серьезные нестандартные пути ответа на вопрос, что было бы, если бы Erlang поддерживал ОО, чего на самом деле нет (если вы услышали то, что мы на самом деле сказали и умеете внимательно читать мелкий шрифт).

Здесь мне вспоминается ключевая речь главы IBM во Франции, которая была адресована аудитории 7-й конференции IEEE Logic programming в Париже. В IBM Prolog было добавлено большое количество ОО-расширений. На вопрос “зачем”, он отвечал: “Наши заказчики хотят ОО prolog, вот мы и сделали ОО prolog “.

Помню, я еще подумал – как просто, без угрызений совести, без самокопаний, без вопросов – “а правильным ли путем идем?”
Continue reading

Posted in IT, Переводы | Tagged , , | 1 Comment

Запредельный цинизм

Мой мозг обычно отсекает рекламу во всех её проявлениях. Да и телевизор я почти не смотрю. Но тут мои “фильтры” пропустили такое:

Если сюда зайдет кто-то не из Украины, поясню – ТМ “Наша Ряба” занимается производством и продажей мяса курицы. Не возьмусь утверждать точно, но мне кажется, что крупнейший производитель. По крайней мере, самый “на слуху”. Надеюсь, суть ролика будет понятна и без перевода.

То, что курицы живут далеко не в таких условиях – пусть останется на совести рекламщиков и производителей. Но такое умилительное уси-пуси по отношению к существам, которые завтра пойдут под нож? Я не вегетарианец. Я не горю желанием растерзать производителей мяса за то, что они убивают животных. Но зачем так уж цинично?

Понравился комментарий к ролику – он хорошо отражает то, что я реально вижу здесь:

— Сплять, янголятка… Ти сьогодні когось зарізав?
— Ні, завтра вранці прийдеш, сама всіх заріжеш!

Posted in Личное | Tagged | Leave a comment

Густая облачность

Наконец-то свершилось! Прошедший месяц порадовал прямо-таки всплеском активности облачных хранилищ. Вышел Яндекс.Диск, долго ожидаемый Google Drive. На фоне этих событий и “старички” поднапряглись – DropBox добавил мне бонусы за ранее присоединенных пользователей. Microsoft SkyDrive ни с того ни с сего, дал мне 25G места, хотя я его раньше только “щупал”, реально не используя.

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

Google Drive, Dropbox, SkyDrive, Яндекс.Диск: сравнение популярных сервисов

От себя хотел бы добавить пару строк по поводу Яндекс.Диск. В моем прошлом посте, я сетовал, что в нем нет шифрования. По крайней мере, я так понял цитату руководителя проекта. Однако, чуть позже сам Владимир Русинов разъяснил, что имелось в виду отсутствие шифрования на сервере – сам же трафик идет шифрованным. Так что можно не опасаться перехватов паролей и данных, например, при использовании общедоступных WiFi-сетей и т.п. За сим, поставил себе и этот сервис в режиме обкатки. Пока еще есть некоторые шероховатости, о которых сообщил в службу поддержки. В общем, смотрю на поведение.

Что же касается Google Drive… Его попробовать уже нет ни сил, ни времени, ни особой необходимости.

Posted in IT | Tagged , , , , | Leave a comment

Яндекс.Диск

Похоже, что Яндекс пытается бороться с Гуглом не на жизнь, а на смерть. По крайней мере, на локальном рынке (постсоветское пространство). И недавно разродился новым сервисом – Яндекс.Диском. Принцип не новый – уже существует достаточно большое количество облачных хранилищ, различающихся по разным параметрам. В этой области я не являюсь новичком. Сейчас у меня прижились два сервиса – DropBox и Windows Live Mesh.

Dropbox использую для самых важных файлов, а также для импорта картинок с Андроида. Почему для важных? Дело в том, что даже в бесплатной версии DropBox существует возможность откатиться по истории изменений на месяц. Кстати, возможно это ограничение даже сняли – только что проверил и у меня получается ходить по истории файлов, измененных пол-года назад. А это немаловажно – вирусы и разные форсмажоры никто не отменял. Постоянный бекап – дело морочливое. Поэтому наличие истории дает существенное удобство. Нравится, что весь обмен информацией идет с шифрованием.

Windows Live Mesh у меня используется в другом режиме – для синхронизации между моими компьютерами. Без хранения в облаке. Т.е., если одновременно оказываются включенными 2 и более компьютера, они обмениваются самыми свежими файлами. Тут истории нет и использую я этот сервис для не самой важной информации. Просто такой, которую удобно иметь везде под руками. Как, например, файлы, принятые из скайпа.

И вот, Яндекс.Диск. Дают 10 GB места. Конечно, интересно. Я зашел на страницу, оставил заявку. Пока пришло приглашение, уже вышел первый обзор сервиса. Выделю фрагмент, где Владимир Русинов, руководитель проекта, отвечает на вопросы:

Шифрует ли Яндекс файлы, которые передаются с компьютера пользователя на сервер и обратно?

Что касается шифрования – нет, мы не шифруем данные. Пользователь при необходимости может самостоятельно применять к ним шифрование.

Ну что сказать? Как-то это очень уж по-советски. Пользователю нужно шифровать данные – пусть он и шифрует. Ну что ж, буду шифровать DropBox-ом. Он у меня сейчас и так, более чем наполовину пуст (путем вполне законных “махинаций” с приглашениями друзей и установки приложения для Андроида). Так что пока пропущу период становления. А может и дальше, если отношение к пользователю не изменится. Хотя, за попытку – спасибо.

Update 06-May-2012: В связи с разъяснениями Владимира Русинова, я изменил мнение о сервисе. Подробности в этом посте.

Posted in IT | Tagged , , | 3 Comments

Тестируем Invoke и его альтернативы

Мы, в своей работе активно используем широко известный движок для полнотекстового поиска Lucene.net. Библиотека достойная. Но, как обычно, не все гладко. Недавно, например, с удивлением обнаружил в исходном коде использование Invoke. Причем, не где-то при инициализации, а при каждом вызове Snowball-стеммера. Вот этот кусок из SnowballFilter.cs (я операторные скобки {} расставил в Java-стиле, чтобы код был компактнее):

stemmer.SetCurrent(token.TermText());
try {
	stemMethod.Invoke(stemmer, (System.Object[]) EMPTY_ARGS);
} catch (System.Exception e) {
	throw new System.SystemException(e.ToString());
}
Token newToken = new Token(stemmer.GetCurrent(),
  token.StartOffset(), token.EndOffset(), token.Type());

Что мы здесь видим:

1. Методом SetCurrent, устанавливается строка, от которой нам нужно получить стем.
2. Через reflection вызывается метод “Stem”.
3. Стем исходного слова возвращается методом GetCurrent.
Continue reading

Posted in C#, IT, Тесты | Tagged , , , , , | Leave a comment

Присматриваемся к Windows 8

Майкрософт уже выпустил восьмерку в редакции Consumer Preview. Скачать её свободно можно с сайта Майкрософта. Конечно же, поскольку это наше очередное светлое будущее, хочется к ней присмотреться поподробнее. В то же время, не хочется терять хорошо настроенное рабочее место, а ведь установка новой операционки чревата. В общем, выбираем самое простое и привычное решение – виртуальную машину.

Итак, попытка 1:
Берем настроенный на дексктопе с 64-битной W7, Windows XP Mode (наследник Virtual PC), создаем новую виртуальную машину. Подключаем в качестве DVD закачанный ISO-образ 32-х битной версии W8. Видим рыбку, ждем. Упс – Your computer ran into a problem and needs to restart.

Ладно, есть еще варианты.
Continue reading

Posted in IT | Tagged , , | 1 Comment

С миру по лепте 4

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

Первое – это даже не новое приложение, а давно используемое старое. Это DropBox. Если кто не знает – это облачный сервис, который с помощью клиента на персональном компьютере отслеживает все изменения в файловой системе и отправляет их в своё облачное хранилище. И, если такой же клиент инсталлировать на другой компьютер, то все эти файлы и их изменения появятся и там. Сейчас есть достаточное количество аналогов – тот же SkyDrive от майкрософта и еще куча всего. Но DropBox, пожалуй, самый известный. На всех своих компьютерах я его инсталлирую одним из первых, и тут находится то, что мне всегда нужно под руками (например, список паролей – конечно же в зашифрованном виде, для чего рекомендую KeePass).

Есть соответствующий клиент и для Android. Достаточно давно. Но он был какой-то неполноценный. Фактически, можно было просматривать файлы и отмечать для загрузки, какой нужно. Понятно, что с мобильным трафиком нужно обращаться бережно, но в общем, было сложно, долго и муторно. И вот, этот клиент обновился и стал совершенно другим! Что добавилось:
Continue reading

Posted in IT, Советы | Tagged , , , | Leave a comment

string.Format

Сравним два фрагмента кода на C#, выполняющих одно и то же:

int i = 15;
string s1 = "i=" + i;                   // Фрагмент 1
string s2 = string.Format("i={0}", i);  // Фрагмент 2

Во многом, использование первого или второго варианта является делом вкуса. Кому как нравится. Но есть одна деталь, которая не дает мне покоя. Возьмем такой вот фрагмент:

int i = 15;
string s2 = string.Format("i={1}", i);

Этот код отлично откомпилируется, но при попытке запустить его, получим Exception (FormatException). Все просто – строка, находящаяся внутри первого параметра Format, является фактически скриптом. Простейшим, но разбираемым во время исполнения программы. Поэтому компилятор ничем нам не может помочь. А такие опечатки вполне реальны (у меня бывали), особенно, когда количество параметров в строке намного больше единицы.

Конечно, это далеко не единственный случай, когда внутри компилируемого языка со строгой типизацией, используется другой, скриптовый фрагмент. Можем вспомнить те же Regex, биндинги в WPF, тип слушателя Trace, задаваемый в App.config. Все это куски с повышенной опасностью – тут компилятор не подстрахует. Хотя и гибко, конечно, тоже. И иногда не обойтись. В общем, выбирайте сами, что вам удобнее, но я вас предупреждал…

Posted in C#, IT | Tagged , | Leave a comment

Visual Studio 2010 – проблема с x86

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

Итак, Visual Studio 2010, SP1. Создаем консольный проект. Залезаем в Configuration Manager.

В открывшемся диалоге обнаруживаем, что у нас приложение помечено как x86.
Continue reading

Posted in IT | Tagged | 3 Comments

LINQ и синтаксис, облегчающий восприятие запроса

Попалась мне в руки книга, являющаяся введением в LINQ-запросы – “LINQ. Карманный справочник”, Джозеф и Бен Албахари. Книга достойная – кратко и понятно объяснены многие вещи. В общем, если у вас еще LINQ не захардкожен в мозгах, рекомендую. Но эта же книга навела меня на определенные размышления по поводу варианта запроса, названного как “синтаксис, облегчающий восприятие запроса”.

На всякий случай, для тех, кто не работает с C#, поясню, что это. В C# версии 3.0, ввели мощный механизм, позволяющий работать с запросами к разного рода последовательностям элементов. Это могут быть как коллекции, находящиеся в памяти, так и данные, хранящиеся в базе данных. Для работы, фильтрации и т.п. широко используются так называемые лямбда-выражения. Это небольшие куски кода, которые удобно передавать в качестве параметров. В случае если выражение передается внешнему источнику данных (тот же SQL-сервер), неявно для кодировщика, задействуется мощный механизм разбора передаваемых выражений, поэтому тот, кто, в конце концов, выполнит запрос, может превратить его в запрос уже в своем синтаксисе.
Continue reading

Posted in C#, IT | Tagged , | 2 Comments