суббота, 24 сентября 2011 г.

Собеседования на позицию iPhone Developer

Прочитав правильную книгу iPhone Programming: The Big Nerd Ranch Guide и выполнив все упражнения в ней (в результате чего было написано около 10 маленьких приложений) начал искать работу в качестве Junior iPhone Developer. На ngs.ru было 8 вакансий на позицию iPhone Developer, при этом некоторые позиции от одних и тех же фирм. В итоге после фильтрации (офис далеко от университета или не гибкий рабочий день и пр.) отправил резюме только в 3 конторы. Это кошмар:) Если бы я вместо iPhone Development подался в Java, я думаю разослал бы резюме минимум в 15-20 разных мест и неделю (или даже две) ходил бы только на собеседования, чтобы потом можно было нормально выбирать из Job Offers наиболее понравившееся. Возможно, кстати, некоторые фирмы не размещают информацию о вакансиях в интернете, а пользуются услугами кадровых агентств, и поэтому вакансий было только 8.

Я слушал много разговоров в подкастах от опытных людей о том, как нужно правильно искать работу: от составления резюме до прохождения интервью, поэтому сложилось некоторое представление о том, как это происходит. Первое, что меня удивило - все 3 фирмы среагировали сразу же (в течении суток) и пригласили меня на собеседования. Я, вообще говоря, был готов к тому, что моё резюме вообще может быть даже не прочитано/не замечено/потеряно/забыто и пр. из-за большого потока писем от других кандидатов. Как выяснилось позже, в Новосибирске просто не хватает iPhone Developer'ов: "найти iOS программиста очень сложно, не говоря уже о тех, у кого бы был стаж работы в этой области год или более". Думаю, именно по-этому моё резюме не потерялось и со мной быстро связывались, и если бы я пошел в Java, то количество ответов на моё резюме (и, что еще более важно, приглашений на собеседование) было бы меньше 100%. Хотя не факт, разговоры в подкастах касались темы поиска IT работы преимущественно за границей.

Т.к. количество посылаемых резюме от iPhone developer'ов крайне мало, то в принципе это позволяет кандидатам не сильно заморачиваться на счет резюме и составлять его как попало, за 5 минут: т.е. не будет такого эффекта, что HR менеджер открывает ваше резюме и, не увидев за первые секунды в верхних строчках нужные слова, удаляет его из почтового ящика. Я же, не зная этого, сделал все как надо (да и если бы знал, все равно сделал бы как надо:) ): нашел самый простой CV template для LaTeX, заполнил его только релевантной информацией. В итоге оно у меня получилось на полстраницы: ни одного лишнего пункта (типа там о хобби и прочем бреде), а ключевые фразы сразу же бросаются в глаза. На составлении резюме вообще время экономить не стоит, это формирует первое впечатление работодателя о кандидате.

Была не совсем удобная ситуация, когда меня позвали на 2 собеседования, назначенные в одно и то же время. В первый момент немного испугался и не знал, что делать:)) Потом перенес одно из них на следующий день, никаких проблем при этом не возникло и, по реакции HR менеджера, вообще возникнуть не могло.

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

Я слышал разные отношения к собеседованию: кому-то они сильно не приятны и им проще написать любое тестовое задание, чем отвечать на вопросы на собеседовании. Другие, к которым я сам себя хочу относить, любят собеседования, особенно не слишком удачные, т.к. они наиболее полезны - на них можно узнать, что ты плохо знаешь, какие знания от тебя ожидают, а еще ты узнаешь, сколько ты стоишь. Причем все это - за достаточно короткое время и абсолютно бесплатно. Чит? Чит! :D

Собеседовали меня сразу 2ое человек. Один из первых вопросов был про memory management в Objective-C, затем задавали вопросы почему-то по С++, операционным системам и многопоточности, в частности "Кто такие зомби", "Что нужно делать сразу же после того, как вы создали новый поток", и пр. Еще были вопросы по принципам ООАД и разным паттернам. Не совсем понял, зачем они проверяли эти слишком общие знания, при этом не прося писать код. Не ясно короче... т.е. если кандидат отвечает на вопрос типа "что такое полиморфизм?", то как они проверят, что кандидат на самом деле понимает, что это такое, и умеет этим пользоваться на практике? Наверное, задают, чтобы сразу отсеять тех, кто даже не знает определения - в таком случае вполне такой очень неплохой вопрос.
Дали задачку: посчитать количество единичных битов в integer'e - единственное задание, где нужно было написать код. Еще было 2 задачи на сообразительность (или эрудицию, не знаю) в стиле аля Microsoft и Google. Тоже не совсем понял, какой в этом смысл. Т.е. я понимаю, зачем это делают в Google, когда принимают кого-нибудь на должность главного менеджера по маркетингу в азиатском регионе и северной Африке, например. Но давать такие задачи Junior Developer'у, при этом сильно упрощенные (одна из задач задается в моей родной школе в 5ом классе на уроках математики), а потом без специального образования пытаться анализировать действия и ход мыслей кандидата - ...
После того, как вышел оттуда, были смешанные чувства: вроде все прошло нормально, но чувствовалось, что что-то не так. Были, безусловно, и позитивные моменты: я вспомнил принципы ООАД, и как некоторые из этих принципов проявляются в коде, ну и по мелочи узнал несколько вещей, которые помогли связать некоторые куски знаний в одно целое.

Единственный косяк, который я мог бы избежать, но забыл как это делать - это то, что я ответил на вопрос "Сколько вы хотите получать?". Как известно, кто первый называет цену, тот проигрывает:) Правильный ответ на этот вопрос (если вы не знаете, сколько вы стоите на рынке, и вам еще никто не сделал Job Offer - мой случай) - "Я уверен вы справедливо оцените мои навыки и я готов рассмотреть любое адекватное предложение о работе". Есть и другой правильный ответ, но это если вы пользуетесь услугами кадровых агентств. Т.е. (как я себе это представляю) вы приходите в агентство и говорите "хочу много зарабатывать, вот что я умею", затем агентство само ищет для вас работу, чтобы платили побольше (чем больше зарплаты вы будете получать, тем больше они получат за вас, т.е. они заинтересованы, чтобы вам предложили нормальный Job Offer). Затем, когда на собеседовании заходит разговор о зарплате, вы просто отвечаете "обсудите этот вопрос с моим агентом" или что-то в этом роде, но чтобы они уже общались по этому поводу с агентством: оно знает лучше, сколько вы на самом деле стоите на рынке. Единственное что - надо сказать агентству, чтобы они обязательно, перед тем, как выслать резюме в какую-либо компанию, сообщали об этом вам. Это нужно для того, чтобы из разных мест в одну компанию 2 раза не попало ваше резюме (например, если вы тоже сами ищете работу, или если пользуетесь услугами сразу нескольких агентств). Но я не имею опыта работы с агентствами и вообще не представляю, как они работают в России, и стоит ли вообще ими пользоваться. Кто может что-то сказать по этому поводу - можете отписаться в комментах.

Второе собеседование было на следующий день, было меньше волнения и я шел туда уверенным в себе, с настроем, что я могу помочь этой компании и она точно выйграет от того, что я в ней буду работать. Это очень правильный настрой, и если его нету - то это плохо. Т.е. если нет уверенности, что ваши знания могут помочь работодателю - не нужно было вообще тогда идти в IT. Это очень жестокая позиция, но надо просто хорошо знать техническую часть: сейчас в доступе есть любые книги на любом языке, это не 90ые - вам не надо по знакомым спрашивать нужную книгу и, если вам повезло и вы её нашли, ксерокопировать её, чтобы прочитать. Все, что нужно сделать - посадить зад на стул, открыть Google (или оплатить Safari Books Online) и просто читать книги/форумы/блоги. Это все. Абсолютно ничего сложного, было бы желание. То же самое, кстати, и с изучением английского. Благодаря инету сейчас так много возможностей, но так мало людей, которые ими пользуются.

Пришел заранее на 2-3 минуты, как и в первый раз. В начале собеседования ответил на 2-3 вопроса от HR менеджера по поводу предыдущего места работы и о себе. Потом она ушла и началась техническая часть интервью с менеджером и программистом. Вопросы задавал в основном программист, начав, как и в первом собеседовании, с memory management. Ответив теорию, перешли к практике: мне дали листинги функций, лист бумаги и ручку - мне уже это сильно понравилось - и задали пару вопросов о коде в функции (найти ошибки, недочеты, избыточный код и пр.). Потом попросили написать для класса методы, которые эквивалентны в C++ конструктору, деструктору и оператору копирований (присваивания). Немного тупил - Xcode сильно развращает, из-за грамотного IntelliSense очень было трудно на листочке написать сигнатуру метода, например. Очень сильно понравилось отношение менеджера и программиста к этому затруднению: понимание того, что именно этот момент роли не играет, а как раз очень важен сам код - тело метода. Потом попросили написать все виды геттеров и сеттеров, которые могут быть в Objective-C (там они называются properties). Задачка очень маленькая и простая, при этом охватывает все виды работы с памятью и, следовательно, позволяет узнать, понимает ли человек принципы memory management в Objective-C на практике. В итоге узнал достаточно много интересных фишек языка и iOS SDK прямо на собеседовании (за бесплатно:) ). Например, когда надо правильно убить поле объекта (которое является тоже объектом), то этому полю посылается сообщение release и потом указателю на это поле присваивается значение nil (аналог NULL в С++). Эти две операции могут быть заменены одной операцией (точнее, вызовом метода, или, в терминологии Objective-C, посылкой сообщения): просто через сеттер присвоить полю nil, а сеттер сам сделает release, если это требуется. Т.е. в принципе никакого выйгрыша нет (в обоих реализациях делается release и присваивание nil), но код становится элегантней, короче, красивее и выразительней. Таких фишек я в книге не видел (или по невнимательности просто не заметил/не обратил внимания) и ими не пользовался, и не узнал бы о них, если бы не сходил на собеседование. Еще один пункт в пользу любви к собеседованиям: можно узнать что-то новое:) Этим собеседованием остался очень доволен и понял, чем оно отличалось от первого.

В первом (мне так показалось, это субъективное мнение и я не утверждаю, что это на самом деле было так) мне задавали вопросы с желанием найти проблемы в знаниях, хотели найти ответ на вопрос "почему этот кандидат не получит эту работу". Во втором же было наоборот: "задать необходимые вопросы и выяснить, почему этот кандидат должен получить эту работу". С этой точки зрения объясняется то, что в первом случае задавались странные вопросы не из той технической области и давались задачки на сообразительность, а во втором не было ни одного лишнего вопроса и была видна последовательность собеседования: сначала задали вопрос по теории о memory management, затем проверили, могу ли я писать код, как я его пишу и как я применяю теоретические знания (которые изложил в ответе на первый вопрос) на практике. Сразу было четко понятно, что эти вопросы непосредственно связаны с работой и их незнание делает невозможным в принципе работу на этой позиции. В первом же случае такого понимания не было: ну не ответил я на вопрос о том, кто такие зомби, и что это значит? Могу ли я работать после этого? Нужно ли вообще это знание? Т.е. с тем же успехом можно было бы спросить "В чем различие в управлении памятью в Windows NT 3.1 по сравнению с Windows 2000?" и задаваться теми же вопросами. Ну и еще одним: "При чем тут винда?.."

И да, на втором собеседовании я тоже неправильно ответил на вопрос о зарплате, сказав, что хочу в районе Х рублей. Х примерно на 25-30% больше, чем я получал в Intel. Я называл эту сумму из расчета, что в любом случае мне будут платить меньше, чем я хочу, и будут предлагать 60-80% от Х (с учетом, что у меня нет опыта работы в iPhone Development). Таким образом, дав мне даже 60% от Х, я бы с удовольствием согласился на Job Offer, т.к. главная цель, которую я перед собой поставил - получить опыт работы в этой области (при некоторых обстоятельствах я бы даже согласился работать бесплатно), а не срубить побольше бабла - это такой короткий отрезок в начале карьеры, когда зарплата не играет решающую роль. На мой взгляд, лучше за год получить очень хороший опыт работы и изучить как можно больше всего, но получать в 2-3 раза меньше, чем в другом месте, где работа тебя не развивает. Таким образом, через год (или два, или три) можно будет поменять приоритет с получения опыта работы на получение максимальной зарплаты и это более выйгрышная стратегия.

На следующий день утром в почтовом ящике обнаружил Job Offer от второй компании с зарплатой 140% от Х. Был сильно приятно удивлен, при том, что сама компания мне понравилась и я туда хотел попасть. Сразу согласиться не мог, т.к. ждал ответа от третьей крупной компании и думал получить еще ответ от первой компании, которая обещала сообщить своё решение в течении недели. Как потом оказалось, третья компания мне звонила заранее еще до того ,как я получил Job Offer, но я пропустил звонок, а на e-mail они мне ничего не прислали. Когда они позвонили во второй раз, я уже согласился на Job Offer и поэтому на третье собеседование не пошел. По-хорошему, надо было соглашаться и идти, я ведь уже говорил, что это полезное бесплатное занятие, но я побоялся, что может что-то произойти, что потом во второй раз они не согласятся меня пригласить на собеседование, а т.к. вакансий в этой области не так много, то я не стал рисковать.

пятница, 23 сентября 2011 г.

Впечатления о работе в Intel

Прошло больше года с предыдущего поста. За это время произошло многое, в частности мне посчастливилось поработать в Intel интерном (Undergraduate Intern Technical).

Получилось все случайно и спонтанно: я искал работу на лето и товарищ Фенстер предложил попробовать попасть в летнюю школу Intel. Для этого нужно было просто заполнить анкету, отправить её в компанию и ждать результата конкурсного отбора. Очень ответственно подошел к заполнению анкетки и выслал её, через месяц пришло письмо о том, что я им подхожу. Долго думал, идти или не идти, все-таки хотелось научиться программировать под iPhone, специально для этого даже уже был куплен самый дешевый поддержанный macbook по объявлению за 20к :)

В итоге после недолгих размышлений и разговоров с разными людьми я решил, что надо по-любому идти. Во-первых, это opportunity, которую упускать не комильфо:) Во-вторых, было безумно интересно посмотреть, как устроена работа в гигантской корпорации изнутри. В-третьих, была вероятность того, что мне там понравится работать и я захочу остаться. В-четвертых, это возможность завести связи и познакомиться с людьми, которые там работают (кстати, по договору я должен их всех забыть и удалить их телефонные номера, т.к. я больше там не работаю, поэтому этот пункт формально не работает :D). В-пятых, запись в трудовой книжке о том, что ты поработал в Intel, - это круто, а еще круче указывать это в резюме. В-шестерых, это просто прикольная ачивка: хотя бы раз в жизни поработать в крупной корпорации.

Школа длилась два месяца. Мне понравилось абсолютно все, что там происходило, работа была наслаждением: помню, что делал усилия, чтобы не работать больше, чем нужно, потому что боялся "перегореть" и потерять интерес:) Нравилась команда, адекватный менджер, ощущения от работы в настоящей команде программистов, делающих реальный коммерческий продукт с известным именем и то, что этим продуктом интересуются фирмы с громкими рэп именами -- ощущения, что ты находишься в центре всего и что именно рядом с тобой развивается вся эта невообразимо огромная IT индустрия, при этом другие крупные фирмы не кажутся чем-то недостижимым и абстрактным. Нравилась атмосфера в самой компании, нравились митинги, особенно с начальством на английском (это мой первый опыт, когда английский действительно был необходим для общения).

По окончанию летней школы мы с коллегой успешно выполнили проект и нам предложили остаться в Intel. Я согласился на full-time: работа отличная, з/п на тот момент мне очень нравилась -- что еще нужно?:) Для того, чтобы меня "оставить", меня пришлось уволить и нанять занова с новым трудовым договором (поэтому дни отпуска, которые я мог взять, "обнулились"). И вот эти формальности, пожалуй, самый большой (а также чуть ли не единственный) минус в корпорациях. Дело в том, что их достаточно, чтобы украсть у тебя время: ты должен проходить различные тренинги (чтобы получить доступ к чему-либо), после прохождения некоторых из них - ждать approval от менеджера, а в случае необходимости придется общаться с IT-шникаи и объяснять им в долгой переписке (потому что, как правило, они находятся далеко и рабочий день с ними мало пересекается) зачем тебе вдруг понадобился доступ к чему-либо.

Так получилось, что была возможность писать диплом там же, в Intel, чем я не мог не воспользоваться. Очень благодарен за это, в первую очередь, своему менеджеру Дмитрию Петунину, который согласился стать моим научруком, а так же команде за их помощь и ответы на мои бесконечные вопросы:) Дипломом я честно горжусь, был получен реальный такой результат, практический и полезный, который долго обсуждался (в том числе с коллегами по ту сторону океана) и велись споры на его основе. Конечно, можно было сделать еще больше и лучше, и тогда можно было бы вообще-вообще гордиться и "бить себя в грудь", но, как это обычно бывает, диплом писался в последние месяцы до защиты:) Защитил его, конечно же, на отлично.

Работа моя заключалась в написании различных тестирующих (и не только) скриптов (преимущественно на Perl, но были и на bash/shell), а так же поддержанием уже написанных скриптов. За 10 месяцев понял, что это не совсем то, чем я хотел бы заниматься: все-таки мне больше нравится принимать участие в создании продукта, а не следить за тем, чтобы программисты чего не испортили в нем уже работающего. Но в команде разработчиков хватало и нужны были как раз ресурсы для QA работы. Тем временем срок договора истекал и нам с Intel пришлось расстаться.

В общем, впечатления от Intel остались положительными. Не думаю, что еще где-нибудь в Новосибирске встречу такие же условия труда, какие существуют там: везде чисто, бесплатные чай-кофе-шоколад и фрукты, везде крутые яркие проекторы, доски с фламастерами, 100% оплачиваемые больничные, полностью белая зарплата - и еще очень много разных вкусных плюшек. А вообще, все сложилось идеально: последний курс обучения, работа и успешный диплом. Т.е. теперь я с высшим образованием, уже имею год стажа работы, при этом еще и тачку смог купить.

Кстати, работал я практически без отпусков, если не считать 4 дней перед самым увольнением, которые, состыковавшись с праздником и выходными, превратились в 9 дней отдыха. Без отпусков - это потому что я их планировал так, как если бы оставался работать и дальше. Из-за этого последняя зарплата получилась в 2 раза больше, а я, чувствуя, что уже вдоволь наработался и научился (диплом), решил нормально отдохнуть. Поэтому летом работу не искал и устроил себе каникулы целых на 2 месяца, о чем ни сколько не жалею :)

воскресенье, 11 июля 2010 г.

Pascal vs. C & C++ vs. Delphi. Perl.

Читая комментарий на предыдущий пост от Фенстера:
На каждом языке получается писать выразительно что-то одно, а другое не получается :)
Я начинаю это по-настоящему осознавать, т.к. начал изучать Perl (о первых впечатлениях ниже). Все равно остается не понятным, чем философски отличается Pascal от C? И тот, и другой генерят бинарник, только разве что я не знаю паскаль настолько хорошо, что не представляю, как там реализовать списки. И что, из-за этого создавать новый язык? Они реализуют разные парадигмы? (паскаль и си)
А еще: С++ и Delphi - в чем различия? Разве что делфай (я слышал произношения делфи и делфай, какой правильный - не знаю, если говорю не правильно, не обижайтесь) - это не столько язык, сколько среда разработки, по крайней мере у меня сложилось такое впечатление. Кстати, первая моя программа была написана не на паскале, и не на си, и не на фортране или бэйсике, а как раз не делфае! Что-то вроде ShowMessage("hello world!"); или типа того.
Я вообще понимал всегда язык как набор правил, позволяющих строить из букв осмысленные команды. Кому, зачем и почему понадобилось набор правил изменять? Почему цикл в паскале отличается от С, а С++ отличается от Java в некоторых конструкциях? Зачем надо менять синтаксис? По мне так оставили бы С++, подпилили бы его и сделали для него виртуальную машину, и в ключах компиляции (в той же IDE) просто бы указывали "хочу скомпилировать это под виртуальную машину!". Но почему-то вокруг куча языков, и для особого способа компилирования и исполнения непременно надо изобрести свой.. Интересно, как бы это все выглядело в идеальном мире? Тоже сотни языков и сред разработок, виртуальных машин и пр. или же все таки 3-5 языков было бы достаточно?

Теперь про Perl. Интерпретируемый язык, наверное даже скриптовый. Путаюсь в этих терминологиях, почему программы на перле называют скриптами? Потому что они маленькие что ли? А helloworld написанный на С тоже скриптом можно назвать?
Кроме того, в книге Learning Perl сказано, что программа на перле сначала вся компилируется, затем переводится в байт-код и потом уже исполняется. Но! Это происходит каждый раз, как запускается программа на перле, она каждый раз компилируется. Что это означает для программиста? Это означает, что если он хочет продать свою программу, он должен продать и исходник, и максимум, что он может сделать для его защиты - написать что-то вроде лицензии в ридми файле "исходник нельзя модифицировать и продавать, иначе найду тебя и выкручу соскИ!". Почему это так делается - не понятно, ведь есть же байткод, почему его нельзя сохранить где-нибудь, как это сделано в джаве? Поправьте меня, если я не прав, но если джава девелопер написал код, он его может перегнать в байт-код и продать его, при этом сохранив исходники у себя. И еще, я правильно понимаю, что существование байт кода автоматически подразумевает наличие виртуальной машины? Джаву тогда тоже можно назвать интерпретируемым языком? Но! не скриптовым?

Теперь про язык. Мне нравится, простой и программки пишутся короткие, наверное раза в 2 в среднем меньше, чем эквивалентные программы на С. Динамическая типизация дает свободу, но я к ней отношусь осторожно и аккуратно. Дело в том, что переменная может быть и числом и строкой одновременно, смотря в каком контексте она используется. Например, оператор х:
5 x 7
берет строку слева и делает её конкатенацию столько целых раз, сколько указано справа от него. Т.к. слева число, то оно переводится в строковое представление "5" и затем 7 раз конкатинируется: "5555555". Еще между строками определена операция конкатенации: .(точка). Например
"orange" . 5*3
на выходе даст "orange15". Что же будет при вычислении выражения
5 x 7 * 3 . 5
я не знаю. Толи 5555555 умножится на 3 и потом к результату в конец допишется 5, толи 5 сконкатенируется 21 раз и к концу припишется еще одна 5, в общем все возможные варианты. Но это все флейм какой-то скучный, наверняка есть приоритет операций и все однозначно определяется, надо просто посмотреть, но для обычного смертного данное выражение должно заставить задуматься. Мне выдался результат 166666655. Тупой пример, теперь не разберешься, как же это работает! :) А хотя в общем первый вариант оказался верным.

Как я понял, фишка перла в том, что он вместо нулевого терминирующего символа \0 в конце строки (как сделано в С) хранят просто тупо количество символов в строке. И это дает преимущества при работе с текстом, в принципе, он был даже и создан для этой работы.
Сразу вспомнилась статья Joel Spolsky, где он рассказывал анекдот про парня, который красил дорогу. Теперь ужасный
while (str[i++]) {}
вовсе не нужен, перл знает длину строки и бедный паренек получил возможность телепортации как раз к тому месту, где он закончил красить:
str[length]

воскресенье, 16 мая 2010 г.

Компиляторы, интерпретаторы ...

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

Компиляторов много, и их больше, чем 2 или 3 типа, как многие думают (если верить книжке trustworthy compilers):
есть классические компиляторы, которые берут текст программы (написанный на нормальном человеческом высокоуровневом языке программирования, например C, C++, Pascal) и переводят те команды в машинный код, которые понимаются непосредственно железякой. Это нативное компилирование, самое мне родное и понятное, я с таких языков и с таких компиляторов начинал программировать :)
На втором месте - интерпретаторы. Вместо трансляции высокоуровнего кода в бинарник, они берут исходный код и начинают выполнять его по инструкциям языка, в итоге бинарник не рождается, и чтобы что-то исполнить, всегда нужен исходник, написанный на высокоуровневом языке. (Вообще говоря странно, интерпретатор - это не разновидность компилятора, это вообще другая штука по своей природе. Меня учили, что компилятор - это такая штучка, которая один язык программирования переводит в другой, это типа транслятор такой. Интерпретатор же - ленивая хрень, она ничего никуда не транслирует, а просто выполняет)
Следующий вид - кросскомпиляторы. Они берут сурс код и генерят бинарник для других устройств, например для телефона. (телефоны они тупые, они не понимают бинарников компа, поэтому к ним нужен особый подход и вот такие компиляторы создают команды, которые понятны даже телефонам. На месте телефонов может быть любой другой девайс, не понимающий бинарники компа, например какой-нибудь странный микропроцессор).
JIT компиляторы (just in time) - хитрющие компиляторы, которые работают в процессе исполнения программы и компилируют методы при первом их вызове, и при этом компилируют их в бинарный код текущей платформы. Такие компиляторы являются врожденной частью Java и .NET.
AOT компиляторы (ну-ка догадайтесь, как расшифровывается?) - это прекомпиляторы, которые все делают "правильно" и заранее компилируют платформенно независимый код в бинарный код текущей платформы. Зачем они это делают? Для повышения скорости исполнения. Впринципе, походу, это те же самые классические компиляторы.. Но вот решили в отдельный класс отнести. Ну ладно, пусть будет. АОТ так же используются в Java и .NET.
Конверторы - компиляторы, как раз в моём классическом понимании - переводящие один язык программирования в другой. Собственно классический компилятор - это частный случай конвертора, если я не ошибаюсь... Зачем было выводить его в отдельный класс, не понимаю, конвертор и конвертор, но раз товарищи ученые хотят - пусть будет 2 разных класса компиляторов.
Бинарные компиляторы - они прикольные. Они переводят бинарный код одной платформы в бинарный код другой платформы, при этом не требуют исходников на высокоуровневом языке.
Есть Graph compilers - какие-то суперновые компиляторы, зачем нужны и че делают я не понял)
Еще есть incremental compilers (тоже не понял зачем они нужны. Написано, что были популярны в 70ые, видимо до моих лет они не дожили. Ну и слава богу:) не буду забивать себе голову).

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

Языки бывают с разной типизацией, я знаю 4 из них: языки со статической типизацией, с динамической, со строгой и со слабой. А еще есть типизируемые языки, нетипизируемые, сильнотипизируемые и слаботипизируемые. Это упасть и не встать))) И вот мы плавно подходим к тому, что меня бесит и что я не понимаю.. Языки программирования. Зачем их так много придумали? Почему они такие сильно разные? Кроме тех 8 типов, языки еще можно разделить на компилируемые, интерпретируемые и скриптовые. И еще плагины существуют, которые ясности точно не приносяти еще больше все запутывают.

Мне всегда было интересно, почему это Java не совсем скриптовый язык? (или совсем не скриптовый?)) ) А вот Python - настоящий скриптовый язык. Что вообще такое скрипт? Я всегда считал, что это макрос. Просто последовательность действий, самая обычная. И почему же это на Джаве нельзя написать последовательность действий и обозвать то, что получится - скриптом? А C++ это тоже не скриптовый язык? Что же в C++ и Java такого особенного, что они не могут написать макрос? В общем куча непонятностей) Обо всем об этом в следующий раз.

среда, 12 мая 2010 г.

Apple vs. Flash

Начинаю новый блог, полностью посвещенный ИТ. Зачем? Не хочу перемешивать ИТ-ишные разговоры с обычными разговорами о бытовухе ) Этот блог скорее всего буду писать так же для себя в надежде на то, что это будет меня пинать под зад как можно чаще:) Типа.. "Damn dude, u r not advanced in this. Take that fucking book и учи матчасть!" Буду тут делиться впечатлениями по поводу чтения различных книжек, блогов, подкастов, новостей и т.д. Еще планирую рассуждать по поводу различных багов, кусков кода. Разбираться с чем-то новым, иногда будут посты уровня "bubble sort" или "select * from costumers where ..." )) в общем nothing special at all, посмотрю, что из этого выйдет. Комментарии приветствуются, с удовольствием обсужу любую тему, о которой я упомяну)

Let's rock:) Недавно Apple на официальном сайте опубликовал новость thoughts on flash , в которой объяснила, почему flash нет в iPhone и ему подобных продуктах. Я прочитал, даже проникся и даже поверил, что flash - жрет батарейку, не стабилен и не безопасен. Ну конееечно Стив Джобс не хочет, чтобы кто-то обходил App Store стороной (если флэш разрешить, то фактически я могу написать на нем приложение и продавать, не заливая его в app store. Как это? Я сам хз, как я понял, написав прогу на flash, можно сказать IDE "нука скомпилируй это для айфона", и, по аналогии как появляются бинарные файлы при знакомом мне компилировании, на выходе получится .ipa файл, который понимается айоном).

Так вот, несколькими днями позже(или даже в тот же день) глава Adobe тоже высказал свои мысли в адрес Apple (на сайте the Wall street journal видео есть. Прикольно газеты теперь в интернете сущесвтуют, по крайней мере буржуйские). "Ну началоось", - подумал я))

Флэш повсюду, куда ни зайди -- он везде. Вырубите флэш у себя в браузере, и многие сайты перестанут быть такими, какими вы привыкли их видеть. Поэтому мне было не совсем понятно, как эппл скажет "Мы не хотим флэш!". Очень смелое и наглое утверждение) Это как Google Chrome в своё время сказал "Так. Забудьте все, что было до Java 6. Мы не будем работать с этим старьем, мы поддерживаем только Java 6 Update 12 или выше". Ну прикиньте да?)) Дерзко и четко))
Но я уважаю то, что сделал гугл. До джавы 6 рантайм весил 16 метров, в джаве 6 появился java kernel, весящая 4 метра, и вместо 16 метров в память будет грузиться только 4 (если особо умный applet потребует специфические функции, kernel их подгрузит в процессе). Все работает быстрее там и легче) Может что-то еще, я не копал глубоко) В общем хром - это дополнительный пинок под жопу пользователям поставить последнюю джаву. Если будет много пользователей с последней джавой, будет больше апликейшинов, требующих последнюю джаву, и тем больше будет пользователей с последней джавой и т.д. Кароч Sun должна проставиться гуглу ))
Стив Джобс делает типа вроде как тоже шаг настречу HTML5, оставляя позади флэш. Но сейчас, вслед за Джобсом, любовь к HTML5 проявляют microsoft (прочитал на ixbt), и CBS переводит стрим видео из флэш в H.264 (да, я сам узнал об этом сайте сегодня))) посмотрел на нем интервью Evangeline Lilly (Кейт из Lost'а), занес сайт в bookmarks, буду смотреть на досуге=) ). Интересно, что будет дальше с Flash)

На самом деле у меня 2 различных мнения по поводу поддержки flash: с одной стороны, я сейчас ничего не знаю ни об objective c, ни про flash, поэтому: если бы flash был на айфоне, я бы непременно начал изучать его и пофиг вообще на все остальное: флэш популярен и работы флэш девелоперам хватает, а вместе с тем еще можно и эппликейшены клепать под айфон - вообще супер)) С другой стороны .. а что с другой стороны? С другой стороны objective c, с которым найти работу в Новосибирске сложно (её практически нет, если верить ngs.ru. Если кто знает более грамотный сайт для поиска работы тут - поделитесь:) ) .. В общем только сейчас понял, что на самом деле мне не выгодно, что iPhone и flash не дружат. Хотя еще часа 2 назад был уверен, что это cool, типа нафиг этот флэш вообще, не stable и не security enough он.. )

Вот пожалуй и все, о чем мне захотелось сегодня написать )