Мое IT-резюме



Иногда бывает полезно периодически подводить черту и резюмировать свои знания, и опыт. Этим сегодня и займусь. Итак, IT-резюме:
Программирование
1. Perl - это был первый мой язык программирования, с которого я начинал. Почему Perl - очень просто, тогда я был заядлым линуксоидом, а Perl был одним из главных инструментов написания скриптов. Да, был Bash и я на нем тоже писал, но, пожалуй, куда быстрее написать краткий и ясный скрипт на Perl, чем что-то аналогичное на Bash. Самое крупное, что мне довелось на нем написать - систему сбора привязок port-mac-ip-vlan для провайдера (SNMP-мониторинг сети). Это уже был не скрипт, а полноценное приложение размером около 1000 строк кода. Вряд ли когда-то еще я буду на нем писать.
2. C++ - классика программирования. Познал его уже в институте. Преподавали нам его хорошо (спасибо Торчинскому), и мне было интересно разбирать этот ассемблер на стероидах. Самое крупное, что писал на нем - приложение для моделирования электромагнитной системы для асинхронных двигателей (мой научный проект, с которым я побывал на конференциях в МЭИ, КГЭУ, ТГУ), проект размером ~2000 кода. Были еще парочка приложений, для баз данных и расчета производственного плана, но они не столь существенны. О С++ вспоминаю с чувством внутреннего благоговения, т.к. именно на нем я постиг понимание адресации памяти, методы оптимизации кода и множество полезных в программировании приемов. За большую часть этого знания выражаю свою благодарность Скотту Мейерсу, автору книги “Наиболее эффективное использование С++”. В связи со спецификой языка, мне вряд ли доведется на нем еще когда-либо писать, но если доведется - будет приятно вспомнить старое и доброе ;-)
3. Visual Basic - да, бывает, случается такое с программистами и они пишут на Visual Basic. Сложного ничего не писал, кроме маленького обучающего комплекса (я тогда учился еще в 11 классе), по математике. Возможно о нем не следовало и вспоминать, но именно на VB я освоил парадигму объектного программирования. Писать на нем мне точно уже не придется.
4. PHP - доводилось писать и на нем. Причем доводилось писать довольно много: самопальную CMS и движок для интернет-каталога электроники Siemens и множество наколенных сайтиков. Имеются знания по CMS Joomla, и phpbased framwork  YII, а так же опыт работы с шаблонизатором Smarty. По мере взросления в качестве программиста приходило понимание плохих сторон языка: больше всего бесило отсутствие стандартизации в параметрах функций и отсутствие поддержки UTF. Опыт я получил, но писать более на нем не буду, за исключением всевозможных web-заглушек, для которых PHP почти идеально подходит.
5. Ruby - красиво, кратко и элегантно. По-моему мнению это лучшая концепция динамического языка, не лишенного изящности. В отличии от Python, является полноценным объектным языком, т.е. имеются приватные и публичные методы, а не соглашения. И в отличии от Python не имеет проблем, связанных с двумя концепциями классов. Кроме того, в Ruby очень активно используются метосимволы, что помогает при последующем чтении кода. На Ruby пишу сейчас - язык в стадии постижения. Но стоит заметить, что я использую не “голый” Ruby, а Ruby on Rails. Имеется один текущий крупный проект на ROR.
6. Java - современная классика программирования. Основной мой инструмент на текущий момент. Работаю во всех основных Java-направлениях: JavaSE, JavaEE, JavaME. Текущие рабочие проекты пишу на Java. Помимо широкого спектра методологий и паттернов программирования, реализованных в языке, крайне ценю обилие готовых библиотек. Изучал Netbeans-платформу (с точки зрения разработчика), есть опыт работы с Jersey(JAX-RS).
7. SQL - на SQL активно писал во времена работы с PHP. Но с биллинговыми системами мне пока что не доводилось работать, поэтому сложность SQL запросов, которые доводилось составлять оцениваю на 3 из 5-ти. После появления ORM стал по возможности пользоваться им - это и проще, и проблем с миграцией и масштабированием меньше.
8. HTML/CSS/JS - стандартное сочетание для веб-разработок. Года 2-3 назад активно работал с версткой. Принципы и все базовые навыки верстки знаю, но постоянной практики не имею.
Это не полный список языков, на которых мне доводилось и доводится писать. Был опыт программирования на Pascal, Python, AWK( да, и на нем тоже можно программировать). Вообще, текущий выбор инструментов объясняю так: для небольших web-сервисов идеально подходит Ruby on Rails: очень высокая скорость разработки. Да, Ruby не блещет производительностью, поэтому нужно выбирать, где его можно и нужно использовать. Второе применение Ruby - быстрый запуск сервисов в условиях конкурентной борьбы, когда важно быть  первыми. А когда вы первые на рынке, то можно уже начать думать про оптимизацию производительности и, возможно, переход на что-то более эффективное, например, Java. Java - это стандартное решение для enterprise систем, проверенное временем.
Системное администрирование
Кто-то считает, что совмещать программирование и системное администрирование - это плохо. Но по-моему, все зависит от того, чем человек будет заниматься в будущем. Одно дело, если он лишь решает поставленные задачи по реализации функций в проекте, другое - когда он проектирует архитектуру и занимается построением комплексных решений. Мне же администрирование было интересно как неотъемлемая часть IT-индустрии. В школе для меня не было большого отличия, занимаюсь я администрированием или программирую - я просто постигал искусство IT и решал комплексные задачи. Вот мой текущий багаж знаний из этой сферы:
1. Знание Linux-дистрибутивов RedHat и Ubuntu. На самом деле мне довелось поработать еще под Fedora, CentOS и даже под OpenBSD. В качестве серверного дистрибутива предпочитаю Ubuntu.
2. Знание серверной части СУБД MySQL, оптимизация базы данных на серверном уровне, настройка репликации, установка базы данных на raw-партицию.
3. Управление парком серверов при помощи Puppet
4. Мониторинг серверов средствами Zabbix. Есть опыт внедрения Zabbix-agent в прошивку сетевого оборудования.
5. Резервное копирование средствами Bacula
6. Виртуализация KVM и паравиртуализация OpenVZ
7. Настройка фаерволов, роутинг сетевого трафика
8. Работа с RAID-массивами, тонкая настройка дисковых массивов на максимальную производительность IO
9. Настройка сетевого хранилища на GlusterFS
10. Развертывание баннерной системы на основе OpenX
11. Использование Piwik для сбора данных о посещаемости сайтов
10. Прочее: Apache2, Tomcat, AXIS2, MongoDB, PostgreSQL, NGINX...
Сейчас я уже не занимаюсь самостоятельно администрированием, но накопленный опыт помогает оценивать проекты комплексно: анализ производительности, поиск узких мест, подбор решений.
Инструментарий
Для задач применяю две IDE: Eclipse и Netbeans. Eclipse - веб-разработка и enterprise-сервисы, а  Netbeans у меня под JavaMe. MySQL Workbench использовал для проектирования баз данных для MySQL.
При программировании на Java очень люблю использовать систему валидации кода PMD. Она не идеальна, но на крупных проектах позволяет повысить производительность кода, улучшить его качество, а иногда, устроить нагоняй “копипастерам”.
Применяю SVN и Mercurial для контроля версионности проектов. Отдаю предпочтение Mercurial.
Обладаю хорошим опытом управления проектами при помощи RedMine.
В качестве операционной системы использую Ubuntu. Это не фанатизм (я бы с радостью работал на Win7, но там отсутствует нужный инструментарий для разработки), а разумная необходимость. Обожаю мозаичный менеджер Awesome - чертовски повышает производительность труда.
Накопленный опыт
1. Проектирование и разработка систем обслуживания и контроля сетевой инфраструктуры (работал у провайдера)
2. Создания  отказоустойчивых распределенных сетевых хранилищ на GlusterFS
3. Управление командой разработчиков
4. Проектирование REST API интерфейсов

1 комментарий:

Отправить комментарий