August 23, 2006

Приём на работу

Вот здесь затронута интересная тема о дискриминации при приёме на работу. Тема весьма интересная и очень актуальная. Хочу поделить своими мыслями по этому поводу, а именно по поводу дискриминации по возрасту. На мой взгляд сейчас в среде работодателей широко распространено предубеждение, что раз человек молодой, то опыта у него нет.

Происходит всё так. Наниматель читает резюме и думает про себя: "Ага! 21 год. Только-только из института, да что он может знать!" Самое интересное, что дальше резюме читается уже по диагонали, всё написанное там воспринимается через призму "молодо-зелено". "Это он врядли знает; тут у него нет опыта; он не мог работать программистом там-то, наверное блат." По этому поводу мне сразу вспомнилась статья Joel Spolsky, на которую я буду время от времени ссылаться. Здесь очень хорошо подходит следующее высказывание: "Before the interview, I am very, very careful to avoid anything that might give me some preconceived notions about the candidate. If you think that someone is smart before they even walk into the room, just because they have a Ph.D. from MIT, then nothing they can say in 1 hour is going to overcome that initial prejudice. If you think they are a bozo, nothing they can say will overcome that initial impression".

Итак. К концу прочтения резюме общее мнение почти не меняется в лучшую сторону. Но! Брать кого-то надо, вакансия не может быть открытой вечно, и человека приглашают на интервью. Разговор происходит в формате: "пересказ раздела 'о компании' с официального сайта" -- "пересказ резюме". Потом следует техническая часть. Она обычно сводится к нескольким вопросам чисто энциклопедического характера, которые никак не отражают действительных способностей человека. "the worst interview question on Earth: "What's the difference between varchar and varchar2 in Oracle 8i?""(Joel Spolsky) Или, например, "в каком поярдке вызываются конструкторы при наследовании в С++". Я могу совершенно спокойно не знать об этом. Но дайте мне шанс, и я за 3 минуты напишу программу, которая мне скажет всё о порядке вызова конструкторов (а заодно и деструкторов), ещё 2 минуты потрачу на компиляцию этой программы, и вуаля! ответ готов. Такие вопросы ни в коей мере не показывают подготовленность человека к работе и к решению реальных задач.

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


August 18, 2006

Будущее Microsoft Visual C++

Как обычно пролистывая вчера RSS MSDN Blogs натолкнулся на следующую статью. Даже остановился на ней взглядом... Но, прочитав первый абзац, решил, что это не очень интересно, ибо первый пост человека мало когда содержит что-то интересное. А раз человек представляется в начале поста, значит это всё же первый пост. Не смотря ни на что, название статьи, а именно слова Abstract Syntax Tree плотно засели в голове.

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

Теперь понятно, почему компилятор С++ в Visual Studio работает так долго и мучительно. Всё оттого, что он не претерпевал "капитального ремонта" с оочень давних времён, ещё когда "на машинах было 256Кб памяти и хранить в ней (памяти) большой объект типа Абстрактного Синтаксического Дерева было очень расточительно".

Сама инициатива Microsoft переписать компилятор радует, а ещё больше радует обещание сделать API для доступа к структуре этого самого AST. Как сказал Олег, это будет что-то типа .Net Reflection. Я пойду дальше и скажу, что это будет что-то похожее на максросы в Лиспе.

В любом случае, буду с интересом следить за развитием событий. Память подсказывает, что писать на С++ было интересно :-)


August 14, 2006

Снова про языки программирования

Сегодня RSS со страницы Пола Грэма вывалил кучу разных ссылок на его старые заметки и статьи. Среди них была и такая (http://www.paulgraham.com/fix.html).

Позволю себе перевести её:

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

Algol: Ассемблер слишком низкоуровневый.

Pascal: В Алголе нет достаточного количества типов данных.

Modula: Паскаль слишком слаб (wimpy)  для программирования систем.

Simula: Алгол не достаточно хорош для моделирования (simulations).

Smalltalk: В симуле не всё является объектом.

Fortran: Ассемблер слишком низкоуровневый.

Cobol: Фортран просто ужасен! (scary)

PL/1: В Фортране недостаточно типов данных.

Ada: В каждом из существующих языков чего-то не хватает.

Basic: Фортран ужасен!

APL: Фортран недостаточно хорош для операций с массивами.

J: Для АПЛа нужен свой набор символов (character set).

C: Ассемблер слишком низкоуровневый.

C++: С слишком низкоуровневый.

Java: С++ это ошибка природы (kludge). И Майкрософт пытается нас раздавить.

C#: Джава подконтролтьна Sun.

Lisp: Машины Тьюринга - это неудобный способ описывать вычисления.

Scheme: MacLisp - это ошибка (kludge)!

T: Scheme не поддерживает библиотек.

Common Lisp: Слишком много диалектов Лиспа.

Dylan: Схема не поддерживает библиотек и синтаксис Лиспа просто ужасен.

Perl: Командные языки оболочки (shell scripts) не достаточно похожи на настоящие языки программирования.

Python: Перл - это ошибка.

Ruby: Перл - это ошибка, а синтаксис Лиспа просто ужасен.

Prolog: Программирование - не достаточно похоже на логику.


August 11, 2006

Мета-

В объектно-ориентированном программировании есть термин метакласс. Впервые я столкнулся с ним, изучая творчество Грейди Буча, а именно его "Object-Oriented Analysis and Design with Applications". Метакласс - это класс, экземплярами которого являются классы. То есть эдакая фабрика классов чтоли, но не совсем. Второй раз метаклассы я встретил при знакомстве с языком Python. На самом деле, это был первый язык, из тех, которые я знаю, где они реально были :-)

Потом был Ruby с его блоками кода. Затем много читал про Lisp с его макросами. Возможно, что-то из мной прочитанного написано давно и давно всем известно, что-то совсем недавно, но все эти материалы попались мне в довольно короткий промежуток времени. Всё это по сути механизмы которые позволяют создавать "программы, которые пишут программы".

Надо заметить, что во время прочтения каждой из статей в голове крутилось одно слово, не слово даже, а приставка: "мета-".

Продолжаем обобщать:
Есть интернет магазины, а есть интернет аукционы, которые по сути своей позволяют каждому подльзователю создать свой собственный интернет магазин. (Хотя здесь сравнение, может быть, не совсем правильное). Есть просто контент, который генерируется пользователями интернета, а есть мета-контент, который создаётся разного рода обобщающими ресурсами. Об этом очень точно написано у Михаила Елашкина.

Есть старая поговорка "там где есть 2 уровня, их может быть и N". Что же будет дальше? Мета-мета-классы? Мета-мета-ВСЁ?

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

This page is powered by Blogger. Isn't yours?