Разработка на коленке "тут должна быть красивая цитата"

Уволился из Positive Technologies

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

Вчера был мой последний день в Positive Technologies.

How I picture myself at my next job interview

How I picture myself at my next job interview

Утащил к себе в блог, чтобы не пропало. Очень уж меня эта картинка задела. Нашёл тут.

Ищу новую площадку с задачами по программированию

Пробую силы в решении олимпиадных задач. Начал свои попытки с архива задач Online соревнование по программированию в МФТИ. Сама идея выполнения таких заданий показалась интересной, хоть и непривычной. Но вот эта площадка меня не устраивает, потому что на сервере код проверяется python 2.1.3, который совсем старый и забытый. Для того, чтобы у меня код прошёл проверку по задаче 027, мне пришлось модифицировать вот такой код


def search_odd_number(count_of_numbers, numbers):
    i = 0
    while i < count_of_numbers - 1:
        if numbers[i] ^ numbers[i + 1] != 0:
            break
        i += 2

    return numbers[i]

print(search_odd_number(int(input()), sorted(map(int, input().split(' ')))))

в такой:


# >>>> for python 2.1.3

from string import split

def sorted(s):
    s.sort()
    return s

def search_odd_number(count_of_numbers, numbers):
    i = 0
    while i < count_of_numbers - 1:
        if numbers[i] ^ numbers[i + 1] != 0:
            break
        i += 2

    return numbers[i]

print(search_odd_number(int(raw_input()), sorted(map(int, split(raw_input())))))

Тратить время на адаптацию кода под старый python мне не хочется, поэтому поищу новую площадку для развлечений.

Заодно открыл доступ к репозиторию с решениями (вроде бы это не запрещено) - https://bitbucket.org/grigoriytretyakov/prochallenge.

An Introduction to Interactive Programming in Python

В прошлом году я проходил курс по программированию на Python'е (An Introduction to Interactive Programming in Python). Записался на него по нескольким причинам:

  • любопытство;
  • just for fun (я надеялся, что это будет весело);
  • проверить свои знания английского "в бою";
  • научиться чему-то новому.

Любопытство

Мне было интересно, как будет проходить дистанционный курс обучения. К тому же вариант с запуском программ непосредственно в браузере меня тоже заинтересовал. Всё таки не каждый день встретишь использование python, написанного на javascript.

Just for fun

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

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

Английский

В начале весны 2012 я чётко осознал, что огромное количество необходимого и интересного мне материала никогда не будет переведено на русский язык, и для нормального понимания мне недостаточно знать ряд ключевых слов, а нужно вникать в язык серьёзно. Большое количество курсов по алгоритмам, AI, ML, ANN, NLP. Всё это хотелось посмотреть, попробовать, что-то применить, но сначала это нужно понять.

С с конца весны 2012 я активно занялся изучением английского языка. Аудиокурсы, фильмы, lingualeo. Осенью решил опробовать на практике. Результатом остался доволен. Материалы курсы понимал без больших проблем. Тут стоит сделать скидку на то, что материал давался весьма доступно и дикторы старались говорить чётко. Тем не менее первый положительный результат получен.

Научиться чему-то новому

Особых надежд на расширение своих знаний python'а за счёт прохождения этого курса я не питал. Более того, я сомневался, что узнаю что-то новое о питоне вообще. Я хотел научиться пользоваться дистанционными курсами, взаимодействовать с другими студентами, посмотреть на разработку простых игр на практике. Ещё мне понравилась концепция версионируемых исходников на облаке. Довольно интересное решение для среды разработки.

Итого

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

С Новым годом меня

Поздравлю себя с новым годом, подведу итоги и намечу куда двигаться в новом году.

Сделал

  1. Окончательно обустроился в Москве. Не могу сказать, что мне всё здесь нравится, скорее наоборот. Мне очень не нравится московский климат, а вечно серое небо вгоняет меня в уныние. Тем не менее, мне нравятся леса, на юге я привык видеть степь, тут же можно погулять по лесу. Хотя степь и побережье мне всё же роднее. Рынок труда тут сильно отличается от того, что я видел в Новочеркасске и Ростове-на-Дону. Точнее, он тут есть. Очень много компаний, много предложений и много возможностей.
  2. Стал старшим программистом в Positive Technologies. На самом деле я не ощутил каких-то значительных изменений с переходом в новую должность, потому что у меня и до повышения было своё направление работы, в котором я остался и после. Можно считать это признанием того факта, что я немного умею программировать.
  3. Довёл уровень владения английским до способности воспринимать на слух диалоги, смотреть фильмы, слушать лекции, научился бегло читать несложные тексты как на общие темы, так и по специальности. Тем не менее сложные материалы я воспринимаю довольно туго. Тут ещё очень много копать.
  4. Прошёл курс по python на coursera.org (https://class.coursera.org/interactivepython-2012-001/class/index). В общей сумме набрал 100 балов из 100. Учиться было весело и интересно. Тут есть один момент: я подписался на курс не для изучения python'a, а для тренировки английского. В какой-то момент мне захотелось опробовать свои навыки владения английским на практике. Проверить свои знания английского на том материале, с которым я неплохо знаком, оказалось неплохой идеей. Участие в обучении предполагает не только воспринимать информацию, но и выполнять упражнения, которые проверяются. Соответственно, от того, правильно ли всё воспринято, зависит правильно ли будет выполнено задание.
  5. Незаметно для себя глубже изучил свои инструменты: Python, Django, vim, bash.
  6. Отгрыз и пережевал небольшой кусочек от гранитного камня теории Computer Science. Теперь ориентируюсь в основных алгоритмах, структурах данных, O(n), и могу это как реализовать, так и обосновано использовать.

Хочу

  1. Продолжить заниматься английским языком, научиться общаться на нём как письменно, так и устно. Сдать IELTS (скорее всего, это будет в 2014).
  2. Пройти курсы по алгоритмам на coursera.org. Если курс по питону для меня был, по сути, проверкой английского языка, то тут дело обстоит несколько иначе. Я буду изучать материал, который знаю частично. Посмотрим, насколько мне это удастся. Основная цель - успешно пройти этот курс, не прибегая к материалам на русском языке.
  3. Прочесть "Скотный двор" в оригинале. На самом деле список интересующей меня литературы довольно длинный, но начинать буду с малого - с одной книги.
  4. Изучить (и применить) новый язык программирования. Пока что не решил какой, но это будет язык, парадигма которого должна отличаться от тех языков, на которых я умею программировать (в той или иной степени). Потенциальные кандидаты: erlang, lisp (clojure), Haskell, OCaml.
  5. Начать применять CoffeeScript, less (lesscss.org). Веб-разработкой я заниматься не перестал. На данный момент вообще не вижу причин это делать. Поэтому буду совершенствовать свои навыки и пополнять копилку инструментов. С помощью CoffeeScript и less надеюсь сделать свою жизнь на клиентской стороне проще, разработку быстрее, код надёжнее.
  6. Прочитать книгу Питера Норвига "Искусственный интеллект. Современный подход". Эту книгу буду читать на русском: во-первых, у меня есть бумажный вариант на русском языке, во-вторых, материал такой сложности на английском боюсь не осилить.
  7. Попробовать силы в решению олимпиадных задач по программированию. Раньше я этим не занимался, просто хочу попробовать. Читал много интересных отзывов о том, как это круто. Попробую, надеюсь, что будет интересно.
  8. Написать плагин к vim. Как пользователь этого редактора я освоился. Мне нравится экосистема, выросшая вокруг него. Теперь хочу написать на python'е плагин к нему. Посмотрим, что из этого получится.

Подсветка правой границы строки в Vim

В Vim можно вывести вертикальную черту, по которой видно границу, за которую залезать уже нельзя:


set colorcolumn=110

Нужно в тех случаях, когда в code style есть ограничения на длину строки.

Отключил комментарии

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

Если кому-то нужно со мной связаться - пишите на почту, которая есть тут.

Смена работы (и города)

1 декабря 2011 года моя жизнь в очередной раз изменилась - я официально стал московским гастрабайтером.

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

Предложения начали поступать довольно быстро (работы много, а работников мало). Одной из первых была компания Positive Technologies (их предложние я в последствии и принял).

Я не стал ждать весны, а набрав список приглашений на собеседование, поехал в Москву.

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

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

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

1 декабря я вышел на работу.

Теперь я много пишу на Python'e и совсем чуть-чуть на С++ (исчезающе мало). Разрабатываю систему скриптования для MaxPatrol. И мне это нравится.

taskforme жить не будет

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

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

Для управления своими задачами я использую телефон: календарь, будильник, органайзер, заметки. Мне этого хватает за глаза. Телефон всегда под рукой, напоминания по времени позволяют не держать в голове мелкие задачи (купить еду, оплатить хостинг, проверить сайт, позвонить другу или заказчику), заметки и qwerty-клавитура дают удобную возможность вносить записи, которые потом трансформируются в задачи (возможно, что и в issue для какого-нибудь проекта).

Поэтому taskforme развивать я не буду, потому что для меня он бесполезен.

Подсчёт уникальных значений в разных столбцах на SQL

Недавно понадобилось сделать выборку из базы данных с подсчётом уникальных значений в разных колонках. Зачем это было нужно - не скажу, потому что это внутренняя информация.

Итак, есть у меня таблица documents и таблица objects.


documents
    id - primary key
    number - string

objects
    id - primary key
    document_id - foreign key
    f_input - integer
    f_output - integer

Вот для полей f_input и f_output мне нужно было выдать количество уникальных значений для каждого документа.


select number, count(distinct f_input)

    from (
        select number, f_input
            from documents
            join objects on documents.id = objects.document_id

        union all

        select number, f_output
            from documents
            join objects on documents.id = objects.document_id
        ) as x

    group by number    
    order by number

Не знаю, лучший ли это способ, но он работает, а в данный момент мне больше и не нужно.