четверг, апреля 26, 2007

Ищем программиста

Небольшой фирме, занимающейся разработкой игр и игровых автоматов (т.е. нам), требуется программист.

Обязательные требования:

  • желание разрабатывать игры;


  • умение пользоваться GNU toolchain;


  • знание Linux на уровне опытного пользователя;


  • хороший алгоритмический базис;


  • знание C++ на хорошем уровне;


  • скриптовые языки (желательно, python).


Желательно:
  • знание OpenGL, GLSL, OpenAL, wxWidgets;


  • умение собирать линукс с нуля (gentoo, lfs, etc.);


  • простое администрирование серверов (apache, backup);


  • огромным плюсом является знание Haskell или Ocaml (мы пишем на OCaml, если возможно, и на C++, если необходимо).


Обязанности:
  • написание инструментария для создания и тестирования игр;


  • сборка Linux-а, работающего в игровом автомате;


  • администрирование внутреннего сервера разработки (по мелочи);


  • и, конечно же, разработка игр.


Условия:
  • з/п от $800;


  • офис рядом со ст. м. Южная (г. Москва);


  • оформление по ТК;


  • график работы с 12:00 до 20.00, возможно гибкий;


  • возможен прием студента последних курсов.


Контакты:
  • E-Mail: <vshabanoff@gmail.com>;


  • Телефон: +7 926 536-27-96 (Владимир Шабанов);


PS: Комментарии приветствуются.

UPD: вакансия закрыта, желающие программировать на Haskell или OCaml по прежнему интересуют (на будущее), есть желание, скидывайте резюме на мыло, в будущем посмотрим.

суббота, апреля 21, 2007

Корректность, типизация и Erlang

В последнее время все чаще встречаю упоминания об использовании Erlang на просторах ex-USSR.

Судя по всему, возрастающее применение Erlang оправдывается достаточно большим количеством success stories. К тому же Erlang поддерживается не только группой исследователей и community, как это происходит с Haskell и OCaml, но и такой немаленькой фирмой, как Ericsson. Это позволяет легче убедить менеджмент в пригодности Эрланга для серьезной разработки.

Но, как и в предыдущем посте, я хочу поговорить о корректности программ.

С Эрлангом наблюдается очень забавная картина: с одной стороны он предназначен для написания fault-tolerant программ и обладает замечательной runtime системой, хорошо подходящей для написания распределенных пуленепробиваемых non-stop приложений. С другой стороны — это язык с динамической типзацией, что, по моему мнению, противоречит написанию корректных программ.

Как можно написать корректную программу, если язык позволяет допустить практически любую опечатку? А как я поправлю ВСЕ места, где использовался модуль, принцип работы которого я только что поменял? Возможно, у Эриксон и есть столько денег на тестеров, но что делать более экономным людям?

А вы подумали о времени и нервах, потраченных на поиск несчастной опечатки? Конечно, в Эрланге пытаются поправить существующее положение: создана специальная тулза dialyzer. Однако, никакие тулзы не заменят полностью качественной, теоретически обоснованной, статической типизации.

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

Короче, если вы никогда не опечатываетесь, никогда не редактируете большие программы, пишете юнит-тесты для всех функций в системе, и, самое главное, вам не лень делать работу, которую можно автоматизировать, то Эрланг, лисп, питон, перл, tcl, lua — это все для вас. Я завидую вашему кунг-фу :)

PS: Ни в коем случае не хочу сказать, что эрланг — плохая платформа. Если ваша программа на 90% состоит из сетевого трафика, то, возможно, Эрланг вам и подходит. Но вот как язык...

PPS: Еще одна, несколько другая, жалоба на отсутствие статической типизации в Эрланге.

пятница, апреля 20, 2007

Немного по OCaml и Haskell

От людей, пишущих программы на OCaml и Haskell часто слышно о том, что они в 10 строках описали то, что на C++/C#/Java занимало 100 строк, или за 2 недели написали то, что другие делали 2 месяца.

Это — всем известные факты. Программы на любом более менее вменяемом языке, будь то erlang, lisp, python, и т.д., в среднем занимают в 5-10 раз меньше места и, по личному опыту, пишутся в 3-5 раз быстрее.

Однако сейчас я хочу сказать про другую черту — корректность программ. Как часто вам приходится пользоваться отладчиком? Можете ли вы себе представить, что отладчик — вещь ненужная? В OCaml и Haskell это действительно так!

Хотя в OCaml есть чудесный отладчик, позволяющий ходить по программе и вперед и назад, никакой потребности в нем за последние 3 года я не ощутил. Да. За последние 3 года я ни разу не пользовался отладчиком для программ, написанных на OCaml. Он просто не нужен! Если и возникают какие-то непонятки, то все решается отладочной печатью или запуском проблемных мест в интерпретаторе.

Не могу сказать, что мои OCaml-программы никогда не падали. Было такое, но виновата была только C++ часть.

А в целом в OCaml и Haskell вы никогда не встретите:

  • access violation — нет pointer arithmetics;


  • NullPointerException — нет NULL :), а на любые места, где возможен None, компилятор вам укажет;


  • SIGSEGV или BSOD — ну нельзя тут загадить память.

Если вы, как и я, пишете программы, работающие 24 часа в сутки 7 дней в неделю, то такие языки как OCaml или Haskell могут стать очень хорошим подспорьем.

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