Sunday, February 3, 2013

План на 2013 год

Вот такой план на 2013 год.

1. По традиции, сделать Секретный Мегапроект.
2. Собрать некий "джентльменский набор" платформ/технологий/практик для деланья собственных проектов. Речь идёт про веб-приложения. Я хочу делать интересные штуки и видеть как они живут.
3. Продолжать изучать Java. Изучать Spring и кучу других библиотек/фреймворков. Основная цель - изучить платформу до такого состояния, чтобы 80% задач не вызывали вопросов. Особенно интересуют Apache CXF, spring data jpa, spring security и spring integration.
4. Продолжать изучать .NET. Изучить асинхронные фичи (стыдно, но даже не пробовал - только презентацию видел).
5. Изучить SQL. Получить общее понимание языка и окружающей его инфраструктуры (например - транзакции, уровни их изоляции).
6. Очень хочется заиметь опыт построения какой-то распределённой масштабирующейся системы с очередями и всяким таким прочим. Явно увидеть наличие смысла у распределённости и увидеть, что масштабирование работает.
7. Продолжить изучать web. Научиться делать более-менее сносный "программистский" дизайн руками, сразу в виде кода. Продолжать изучать Angular JS. Научиться реализовывать long polling на .NET и Java. Научиться делать активный UI (приложение не обязано ждать, пока пользователь нажмёт кнопку, чтобы что-то произошло. Например - чат). Изучить способы интеграции с Facebook, Twitter, Google+. Научиться показывать кнопочки типа "100500 человек любят ваш сайт". Изучить google analytics и способы её применения для веб-приложений (не для "тупо" сайтов).
8. Разобраться с легальным аспектом получения денег с пользователей.
9. Сделать интеграцию как минимум с одной платёжной системой. Запустить как минимум 1 проект с платной подпиской, каким мы чудовищным он не был.
10. Продолжать битьё головой об стену на тему написания компилятора.
11. Похудеть до стабильных < 75 кг.
12. Научиться ездить manual как минимум на 10 метров.
13. Разобраться с git - изучить branches, merging, tags, sub modules.
14. Пощупать ruby on rails. Просто чтобы знать что это и насколько оно отличается от Django.
15. Научиться оформлять тесты на NUnit/JUnit таким образом, чтобы с одной стороны их можно было отлаживать, а с другой, избегать длины больше 30 строк.
16. Научиться писать кодогенерирующие плагины для Maven.
17. Научиться использовать AspectJ для реализации cross-cutting concerns.

Итоги 2012 года

Итоги 2012 года

1. Сделать Секретный Мегапроект. По состоянию на сегодня фактически изучить полученный прототип, допилить, решить что делать дальше.
Ну тут как всегда. Всё круто, всё в процессе.

2. Изучить веб (именно HTML, CSS, JavaScript, JQuery, Backbone, KnockoutJS и т.д.)
С вебом было очень много экспериментов. В результате проникся сильной любовью к Twitter Bootstrap и Angular JS. Многочисленные читатели моего блога вероятно знают о моей сильнейшей ненависти к вебу. Вот эти самые Bootstrap и Angular дали мне понять как это вообще должно делаться, чтобы не было так печальное. Bootstrap замечателен не тем, что можно построить интересный UI практически нахаляву, а тем, что за ним скрывается вполне явная структура со вполне явными правилами. Он позволил мне лучше понять как вообще писать HTML и CSS. Angular JS в свою очередь это самая сильная иллюстрация того, что на JS можно написать читабельный код. Наибольшее впечатление произвёл их подход с dependency injection: "или делаешь DI, или вообще работать не будет". По состоянию на сегодня - могу сделать одностраничный вебсайт и при этом он не развалится в кратчайшие сроки. Если кто-то из читающих хочет изучить front-end разработку для веб, но при этом либо страшно, либо есть негативный опыт, очень советую попробовать связку Bootstrap + Angular JS.

3. Продолжать изучать .NET: ASP.NET MVC, Entity Framework (ну и хлам вроде Ninject, AutoMapper, и т.д)
Более-менее умею ASP .NET MVC. Умею Entity Framework через "design-first". Очень хочу поэкспериментировать с code first. Повезло с проектом на работе - изучил WCF и LINQ2SQL. По состоянию на сегодня могу сделать веб-сервис/веб-сайт, красиво оформить в плане билд/деплоймент скриптов на MSBuild, с явными конфигурациями и маппингом на конфигурации Teamcity. Продолжнаю безумно любить Teamcity.

4. Продолжать изучать Java: GWT, Android, NHibernate, Spring, AspectJ ну и нечто, что эксперты называют словами "это тебе не C++". Ну и ещё всякие ModelMapper, Log4j, Maven, ANTLR и т.д.
Продолжаю безумно любить Java. Убогость языка с запасом компенсируют хитрые средства вроде AspectJ, а окончательно добивет Maven. Есть большой прогресс со Spring. А именно - с spring mvc, spring data jpa, spring data neo4j, spring integration.

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

6. Полюбить JUnit/NUnit, постоянно его использовать.
Тут на меня наконец-то сошло озарение. С помощью JUnit/NUnit можно решать вот такие задачи:
а. Есть какая-то библиотека. Если раньше я делал набор хеллоу ворлд программок, сейчас я просто делаю проект, в котором ничего кроме тестов нет. Тесты показывают какой сценарий использования приводит к каким результатам.
б. Есть задача написать какую-то логику, за которую я не могу ручаться, просто потому что сложно. Покрытие тестами помогает получить минимальные гарантии.
в. Есть какой-то сервис, нужно убедиться, что какие-то основные сценарии работают.

7. Научиться использовать Git
К сожалению, так и остался на уровне pull/commit/push. Честно говоря, не так сильно напрягает. Всё ещё думаю, что обязан разобраться с branches, tags, sub modules.

8. Выучить очередную порцию слов вроде MVC, MVP, MVVM
С этим как-то не срослось. Я отлично понимаю о чём тут идёт речь, какие проблемы есть, могут быть, и как их стоит (не стоит) решать, но вот эта магическая разница между MVC и MVP всё ещё мне неподвластна.

9. Вспомнить Django/Python, изучить Ruby/Rails, сравнить
Замечательно вспомнил Django в некотором тренировочном проекте. Честно говоря, в последнее время любовь к этому всему всё слабее. В моём нынешнем понимании, "трендовое хипстерское веб-приложение" - это как минимум шаблонизация на стороне клиента, поэтому, не смотря на всю их прелесть, шаблоны Django имеют не так много смысла. С другой стороны я всё сильнее люблю строгую статическую типизацию, что понижает мой рейтинг Python. Стоит, наверное, потратить пару недель на обзор RoR, но скорее всего дальше обзора не пойдёт.

10. Изучить какие-нибудь NoSql кроме neo4j/spring-data-neo4j. Их там несколько основных, наверное - все?
Я так подумал - рановато. Это всё, конечно, очень интересно, но с другой стороны я глубоко не эксперт в SQL, поэтому не смогу сделать адекватных оценок. Забил. Планирую изучить SQL.

11. Похудеть до стабильных < 75 кг
Тут, как всегда, не получилось.

Были так же некоторые другие интересные моменты.

1. Много думал и экспериментировал с дизайном всяких сервисов, структурированием логики и всяким таким прочим. Более-менее стал понимать как применять ООП на практике. Были робкие попытки разобраться с разницей между Anemic и Rich domain models, но как-то так же робко и закончились.

2. Побывал наконец-то в Америке. Ел гамбургеры.