Рубрики: Development, ActionScript 2.0, ActionScript 3.0, Flash, Flex, Stories
Стратегии развития: карьера наемного специалиста
Пост о том, как строить профессиональную деятельность для достижения своих целей.
Вообще-то я хотел поговорить об этом в виде доклада тире квадратной комнаты круглого стола на ITSea, но пришлось срочно вернуться домой, так что пишу так.
Я не считаю себя большим профессионалом в вопросах карьеры. Пост основан на моем 5-ти летнем опыте работы в качестве наемного разработчика в офисе и призван не столько дать окончательные ответы на все вопросы, сколько поднять тему карьеры в наших умах.
Целевая аудитория
Программисты и универсальные разработчики под Flash Platform.
Цели
Счастье, слава и богатство ©
Некоторые составные части:
- Любимая работа
- Ценят на работе
- Хорошие деньги
- Возможность выбирать график/место работы
- Возможность выбирать город/страну пребывания
- Возможность сменить место работы без ущерба для всего перечисленного
Пути достижения целей
- Создание успешного стартапа
- Успешный фрилансер
- Карьера наемного специалиста
Карьера наемного специалиста
Как её начать?
- Получить начальные знания во Flash разработке самому
- Сделать несколько работ (баннеров/мини-игр)
- Поступить на работу (возможно, на неполную неделю)
Как повышать свою ценность как специалиста?
- Тусоваться на ITSea и FPUG-ах
- Регулярно оставлять комментарии на flash-ripper.com
- Участвовать во всех Flash-холиварах на habrahabr.ru
- Развивать ключевые навыки и умения
Умение думать
Общение письменное и устное
- Вежливость
- Умение внимательно слушать/читать
- Умение излагать свои мысли
- Ясно, без слов-паразитов, “Ээээ…” и профессионализмов
- Без грамматических ошибок, бесчисленных многоточий и т.д.
Производительность
- Свести к минимуму время, которое тратится на посторонние вопросы в течение рабочего дня
- Социальные сети
- Новостные ресурсы
- … вы сами знаете
- Регулярность перерывов
- Сделать все как можно раньше, даже если сроки еще позволяют работать расслабленно. Все мы знаем, что разработка ПО и дизайн в этом плане очень коварны.
- Для души - периодическое построение статистики по SVN – statsvn (если это актуально)
Качество
- При любой возможности улучшайте код, с которым вы сталкиваетесь.
- Выделение специального времени на рефакторинг неэффективно, да и на моем опыте попросту не работает
- Даже если вы правите код своего коллеги – не стесняйтесь его улучшать, возможные небольшие конфликты из-за этого лишь прояснят для вас обоих принятые в команде Coding Conventions и логику кода
- Не демонстрируйте функциональность до достижения определенного уровня качества.
- Ошибки быстрее находить и чинить самому
- Ошибки и неточности лучше находить самому - Если коллега/менеджер периодически видит низкое качество вашей работы, не стоит ожидать лестных отзывов как в конце года, так и при получении рекомендаций для следующего места работы
- Качество во многом определяет вашу стоимость на рынке. Гарантия качества – вот за что работодатель готов заплатить в несколько раз больше.
Работа в команде
- Качественное проектирование и документация общих компонент
- Своевременное оповещение о затрагивающих коллег изменениях в проекте
- Своевременное признание своих ошибок
Взаимодействие с руководством
- Постепенное осознание смежных частей проекта
- Постепенный переход на постановку задач самому себе
Оценка сроков
- Лучше признаться, что вы не знаете, сколько времени займет задача, чем взять срок “с потолка”
- Если оценка по времени все же необходима – потратить некоторое время на разбиение сложной задачи на подзадачи, изучение и проектирование решения. На основе этого уже можно дать более реальную оценку
Ключевые навыки и умения: выводы
Требований к разработчику очень много. Ясно, что не нужно удовлетворять им всем для того, чтобы построить успешную карьеру, однако если кандидат пишет неряшливые e-mail-ы, при личной встрече оставляет неприятное впечатление или не может разобраться в тестовом задании - шансы у него малы.
Как правильно продавать себя работодателям?
Хотел бы я знать
И все же опишу свой опыт в этой области.
При поступлении на работу
Тут уже многое сказано. Портфолио, первое впечатление, отзывы с предыдущих мест работы и т.д.
При найме сотрудника с относительно большой зарплатой менеджеры по персоналу изучают все данные в Сети, которые есть о вас. Именно поэтому важно иметь собственный блог/сайт - он будет в резюме и на первых местах в поисковой выдаче и предсказуемо представит вас:
- Ваше мение письменно излагать мысли
- Ваш профессиональный уровень
В общем, лучше чтобы HR-ы читали ваши глубокомысленные посты чем грустно смотрели на учетные записи на многочисленных форумах в выдаче Google ![]()
В процессе работы
Продавать себя нужно постоянно, а не только при поступлении на работу. У нас в компании повышение оплаты происходит не чаще раза в год, а ощущение ценности сотрудника для компании складывается в течении всего года.
Проще всего получить повышение, продемонстрировав вакансии/приглашения на работу с бОльшей зарплатой. Однако это не всегда возможно
В этом случае можно самому предложить свои услуги профильным компаниям - не все реальные вакансии лежат в сети.
Обязательства перед текущим работодателем
Выполнение своих гласных и негласных обязательств перед работодателем - обязательное условие карьерного роста. Если разработчик оставит проект недоделанным и/или без документации, это не пройдет бесследно.
Новый день, новые баги
Представьте, что у вас есть класс, который создается и иницализируется в MXML, например:
- <fx:Declarations>
- <local:SampleClass stringProp="Sample string" functionProp="{getStyle}"/>
- </fx:Declarations>
Если включить опцию -keep-generated-actionscript, то станет видно, что stringProp инициализируется, а functionProp - нет.
Когда я делал тестовый проект для занесения этого бага в Adobe JIRA, у меня отвалился компилятор
Так что получилось два бага в одном.
P.S: Может, пора на Android? ![]()
Порция свежих багов. Просьба проголосовать :)
https://bugs.adobe.com/jira/browse/SDK-26587 RTE in Tree
https://bugs.adobe.com/jira/browse/SDK-26586 RTE in Group
P.S: Уже подумываю об использовании супероружия против багов - визитной карточки Tomas-a Krcha. Или поберечь пока? ![]()
Увы, "будущее Flash-платформы"
Увы, “будущее Flash-платформы”
12 мая на факультете Вычислительной Математики и Кибернетики МГУ в Москве на концеренцию “Будущее Flash-платформы” собрались:
- Около 100 человек слушателей (в основном студенты-программисты)
- Чешский евангелист Adobe Том Крчха
- Артемий Малков
- Антон Волков
- Валерий Песецкий
- Сергей Язловецкий
- я и порядочное количество других специалистов
- Рост не приехал, хоть и обещал, редиска


Том и Артемий Малков
Программа мероприятия была достойная. Однако пост не об этом.
Что не так с будущим?
Том презентовал нам Flash Catalyst.
Многие уже в курсе, что это среда разработки на базе Eclipse, что-то среднее между Flash IDE и Flash Builder - она позволяет:- Импортировать дизайн из графических редакторов
- Объединять отдельные элементы/текстовые поля/картинки в компоненты (напр. в scroll bar)
- Добавлять состояния (в терминах Flex SDK), редактировать их, анимировать переходы между состояниями
- Добавлять базовые действия (напр. переход в другое состояние)
- Эмулировать реальные данные
Flash Catalyst ориентирован на дизайнеров. Основные способы использования - создание прототипов, сайтов-визиток и прочих немудреных флешек а также подготовка дизайн-макета к передаче программисту во Flash Builder.
Один из лейтмотивов Flash Catalyst - “вам не нужно писать ни строчки кода".
Также Том рассказал что тебе Flash Builder умеет генерить getters/setters и получил еще больше мастеров для привязывания его к различным back-end-ам.
Но ведь это замечательно?
Это было бы замечательно, если бы у Flash-платформы не было такого количества более существенных проблем.
- В проектах ActionScript Compiler (ASC), Flash Builder / Flex Builder, Flash Player, Flex SDK на 14 мая 2010 существует 5195 ошибок, которые были закрыты с резолюциями Deffered (не будем чинить) и Can not fix.
- Ввод символов локальных алфавитов на Linux не работал несколько лет. Недавно его починили, но в новых бетах плеера он опять сломался.
- В тех же проектах существует около 250-ти открытых ошибок с количеством проголосовавших за них 5 и более человек
- Разработчики испытывают постоянные проблемы с Flash Builder:
- plug-in версия при некоторых условиях зависает на установке так, что приходится переустанавливать операционную систему
- profiler иногда инициализируется по 2 минуты
- на больших проектах набор кода превращается в пошаговую стратегию со временем отклика 2 секунды
- периодически слетает настройка распложения View на экране
- Adobe Coding Conventions не описывают MXML
- Flash Builder имеет очень слабую настройку автоформатирования, не соответствующую Coding Conventions. И это к четвертой-то версии!
- Только в Flash Builder 4 появились мало-мальские возможности генерации кода, которые мало пригодны для реального использования: все обработчики событий почему-то объявляются protected и это нельзя изменить, getters/setters не умеют работать с [Bindable] и сами шаблоны генерации настроить нельзя.
- Проект не может использовать интегрированную собственную логику сборки, например через Ant - в то время как ни один серьезный проект не может собираться с помощью “copy non-embedded assets”
- …
Выводы
Мне не нужен Flash Catalyst. Я не знаю ни одного человека, которому он был бы нужен. Мне не известны люди, пользующиеся Design Mode. Мне не известно о фактах применения всех этих мастеров привязывания к базам данных.
Зато я знаю 30 человек, которым нужна нормальная генерация кода, нормальные Coding Conventions, нормальное автоформатирование, быстрая починка багов в Flex SDK. Ну хоть иконку для <s:Button> добавьте!
Adobe, ты тратишь свои силы не туда!
Два часа назад на Creative Future - Realaxy


Самые зоркие увидят потрясающий список рефакторингов, сделанный, по словам Ивана Дембицкого, всего лишь за две недели. Впечатляет!
Чудовищно медленный Profiler в новом Flash Builder 4
Завел соответсвующий баг в Adobe JIRA, если кто-то еще пользуется профайлером - поддержите, пожалуйста ![]()
Как много аргументов может быть у функции?
Коллеги не раз жаловались мне на мой класс UploadAction, единственный метод которого имел следующий вид:
- public function start(fileStorage:FileStorage, directoryPath:String = "",
- typeFilter:Array = null, nativeFiles:Array = null,
- singleFile:Boolean = false,
- defaultResize:int = UploadFileData.RESIZE_NONE,
- toUploadedFileSet:Boolean = false, autoClose:Boolean = false):void
Вызовы иногда выглядели удручающе:
- action.start(fileStorage, null, null, null, false, UploadFileData.RESIZE_NONE, true);
Я разводил руками - что тут поделаешь? Очень умный метод просто. И вот недавно в книге Объектно ориентированное конструирование программных систем я прочитал замечательный принцип:
Определение: операнд и опция
Аргумент является операндом, если он представляет объект, с которым оперирует программа.
Аргемент является опцией, если он задает режим выполнения операции.Принцип операндов
Аргументы методов должны быть только операндами, но не опциями.
Яркий пример применения подобного метода - drawing API Graphics в ActionScript 3.0 - там, например, цвет, прозрачность и толщина не являются аргументами метода drawRect().
Так что UploadAction я переделываю ![]()
Приложение под цвет кофточки
Flex 4 предоставляет нам возможность легко изменять цветовую гамму всего приложения. Flash Player предоставляет доступ к веб-камере. Так почему-бы не попробовать раскрасить Flex-приложение на основе картинки с камеры? ![]()
Об использовании метафор
Очень понравилось в книге Объектно-ориентированное конструирование программных систем:
Все используют метафоры - аналогии - для обсуждения и обучения техническим проблемам.
…
Хорошо или плохо применять метафоры? Это может быть очень хорошо или очень плохо - все зависит от целей, для которых они используются.
…
Если мы начнем воспринимать метафоры в их повседневном смысле и начнем на этом основании делать выводы, то мы можем столкнуться с серьезными проблемами. Псевдосиллогизм ("Доказательство по аналогии") в форме:
A походит на B
B имеет свойство p
------------------
Ergo: A имеет свойство p
обычно порочен.
Flex-модули в AIR
Проблема
Для нас это значит, что:
- Просто так загрузить модули в debug-режиме из папки вне bin-debug Вашего проекта нельзя. Также нельзя загружать модули по абсолютным путям (причем даже из bin-debug).
- Просто так загрузить модули в AIR-приложение с какого-либо сервера нельзя.
VerifyError: Error #1014: Class mx.modules::Module could not be found. at flash.display::MovieClip/nextFrame() at mx.core::FlexModuleFactory/deferredNextFrame()
Решение
Существует обход этого запрета. Достаточно предварительно загрузить .swf-файл через URLLoader, а затем загружать модуль не по ссылке, а как ByteArray:
- moduleInfo.load(null, null, byteArray);
P.S
Аналогичная проблема существует для стилей, там это решается через monkey-patching StyleManagerImpl.
:: Следующие >>






