Как бороться с динамической типизацией?

Я довольно часто писал на Python какие-то вспомогательные вещи, иногда сравнительно крупные, но почти всегда не знание типа объекта с которым работаешь было не критичным. Плюс возможность разрабатывать в IPython сильно облегчала жизнь. И так было до тех пор, пока я не решил плотно использовать Twisted. И оказалось что в IPython не попишешь нормально, а занание типов параметров в функциях обратного вызова и классов из обширного становится необходимостью.

И вот тут то я оказался в неком тупичке. Есть большое количество разнообразных классов со сложными интерфейсами. Перепробованные IDE (Eclipse, PyCharm и даже Emacs) не позволяют воспользоваться автодополнением в незнакомых им классах, что логично. В результате, весь код начинает выглядеть как пример ниже.

def _call_later(self, request):
"""
тут какое-то описание функции
@param request: тут какое-то описание параметра
@type request: Request (1)
"""

Да, безусловно, указывать 1 для каждой из создаваемых функций типы передаваемых параметров это решение, только оно выглядит как откровенный костыль. В итоге, у меня создается ощущение, что я как-то не верно использую этот замечательный язык… Что не так? Как с этим жить? Наиболее подходящим вариантом выглядит то, что все помнят параметры у API наизусть, я же вполне могу писать на C++ с подстановкой параметров исключительно из открытых файлов.

Remote: офис не обязателен

На днях дочитал крайне интересную книгу “Remote: офис не обязателен” от создателей небезызвестной компании 37signals (да, те самые авторы RoR). Меня давно интересует все что связанно с удаленной/частично удаленной работой, т.к. ходить в офис совсем невмоготу становится, так что книга оказалась более чем к месту и ко времени.

До прочтения Remote, мне и самому не раз приходила в голову мысль о том, что полноценно работать в офисе, особенно если это OpenSpace не возможно в принципе, т.к. там постоянно кто-то отвлекает: обсуждает прокачку танка в WoT, рыбалку, политику, да что угодно кроме работы! Хотя чем лучше обсуждение стороннего проекта у тебя под носом? В итоге, если понаблюдать за тем, как тратится время сотрудником в офисе, становится заметно что на выполнение полезной работы расходуется хорошо если 50% рабочего времени. А если сюда еще добавить кучу крайне важных и неимоверно “полезных” совещаний…
Continue reading

Разбитые надежды или просто непонимание?

В одной из лекций с PyCon US 2014 проскочила очень заинтересовавшая меня информация о том, что с Python 3.3 CPython поддерживает оптимизацию для классов, и старый вариант использования Python, когда класс могли просто заменить на Dict не верен в корне, т.к. Dict не поддерживает никакой типизации. Вроде все верно и логично: никак не ограничиваемый по данным ассоциативный массив против класса, в котором можно предсказать используемые типы и количество полей. Continue reading

Modern C++: What You Need to Know

На Channel9 появилось новое выступление Герба Саттера посвященное современному C++. Как всегда познавательно и крайне рекомендуемо к просмотру всем, кто активно работает с C++.

Наиболее интересное для не совсем новичков в C++ в конце лекции, так замеры производительности на вставках в середину массива и списка были для меня удивительным открытием. Пример от Саттера касается массивов с интами, что не очень интересно с практической точки зрения. Более детальное рассмотрение скорости можно найти тут.

Кроме того, Саттер немного рассказывает о новом проекте от Microsoft: ParallelSTL, который должен стать доступным публично на следующей неделе.

Rust 0.10

Сегодня вышел, на мой взгляд, интереснейший релиз Rust 0.10. Ломающих изменений в нем не очень много, зато был проведен просто грандиозный рефакторинг: две основные библиотеки libstd и libextra были разделены на полтора десятка библиотек “одной функции” в процессе чего libextra перестала существовать. Это хорошо в первую очередь тем, что появилась реальная возможность начать использовать Rust практически в пределах libstd (все же необходимо еще немного порезать libstd для отключения работы с задачами), а не только самого компилятора, на низком уровне, к примеру в драйверах. Сейчас как раз занимаюсь подобным экспериментом, выглядит ну очень заманчиво!

Ну, все изучать Rust!

Samsung Galaxy Note 3

С тех пор как Nokia свернула работы по развитию Symbian, я никак не могу определиться, какими же телефонами мне пользоваться. Выбор-то, по большому счету, не велик: либо красивый iPhone с ограниченным функционалом и выбором железа, но более-менее адекватной фильтрацией приложений в AppStore и какой-ни какой защитой личных данных, либо страшненький Android с широким набором функционала, выбором железа, но совершенно никакой защитой персональны данных, ведь 9 из 10 “фонариков” хотят читать твои СМС-ки и получать полный доступ к сети. Если же говорить об идеальном с точки зрения железа телефоне, то на данный момент это Nokia Lumia 1020, но идеальное железо – это еще не причина терпеть Венду и ограниченный набор приложений на телефоне. Continue reading

Python 3.4, asyncio

Думаю, ни для кого не секрет то, что основная реализация языка программирования Python фактически не поддерживает многопоточности. Есть модули которые позволяют эмулировать потоки посредствам процессов, но подобный путь крайне требователен к ресурсам и поэтому его применимость крайне ограниченна, особенно для большого количества операций ввода/вывода. При этом, в подавляющем большинстве случаев, распараллеливание задач не несет какого-то серьезного практического смысла и просто является одним из возможных архитектурных решений. В качестве альтернативы потокам могут выступать асинхронные операции, а с учетом ограничений интерпретатора, подобный подход должен бы был быть родным подходом в Python уже много лет как. Тем не менее, появился долгожданный модуль asyncio только в Python 3.4, но это в любом случае лучше чем никогда.
Continue reading

Kaleidoscope на Rust

Существует довольно известное руководство, посвященное процессу разработки нового языка программирования с использованием LLVM в качестве back-end под названием Kaleidoscope. Руководство очень грамотно доносит то, с какими трудностями можно столкнуться в процессе разработки нового языка и как с ними справится. Для любого разработчика, у которого внезапно мелькнула в голове шальная мысль “хочу свой язык” к прочтению обязательно.
Так вот, на прошлой неделе в сообществе Rust промелькнула интересная ссылка на тот же Kaleidoscope, но написанный не на C++, а на Rust.

Собеседование как…

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

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