Вчера, играл с друзьями в пинг-понг (как именуют его тут, в стране заходящего солнца). И вот слово за слово, завязался разговор о текущих багах и потихоньку все погрузилось в глючность реализации JNI (java native interfaces) для какого-то Linux и ошибки в C++ коде, которые вызывается через C прослойку через JNI и т.п.
Где-то после минут десяти у меня начал активно проявляться комплекс неполноценности. Хотя это абсолютно не моя техническая область, но тем не менее, она была и не слишком ихняя. При этом люди меня повергли в ужас, количество разнообразной технической информации о java, c++, по ходу был зацеплен unicode (и его виды utf-8 и utf-16), а так реализация виртуальных машин, их оптимизация, задеты темы языков ruby on rails и чего-то еще.
В общем, после игры в теннис, я чеща голову ушел думать… Что ж блин я такое пропустил в своем интеллектуальном развитии? Почему же, я какой-то прям таки недоразвитый?
Одна правда мысль в голову таки пришла. Достаточно много времени я потратил на развитие своих бизнес знаний и умений. И хотя они не так хорошо формализованы, тем не менее они присутствуют где-то в голове.
Но тем не менее, это не до конца ответило на возникшие вопросы. Так что я ненашутку задумался. И вот к какому выводу я пришел. Возможно это конечно особенность программирования под мобильные платформы. Но вот примерно тот процентаж (не точный, а просто ощущение), которое играют знания в решении задачи
— знание платформы — 30%
— умение создавать нормальную архитектуру — 20%
— умение решать проблемы 20%
— понимание логики программы — 20%
— знания языка программирования — 10%
Так уж получилось, что по крайней мне, для мобильных платформ, знание языка очень-очень низкий приоритет по сравнению с остальными знаниями.
Я как-то фактически не побывал снаружи от мобильных разработок. Как оно вообще во вне? Такие же приоритеты или что-то по другому?
Я сам из большого j2ee enterprise, я бы сказал так:
— умение создавать нормальную архитектуру — 50%
— знание платформы — 25%
— знания языка программирования — 25%
В большой системе фундамент важен как ничто иное, к сожалению мало людей реально могут и умеют строить системы. Отсюда и заваленые проекты и сожранные бюджеты 🙂
поддерживаю, коллега. с одной поправкой — не только создавать, но и понимать архитектуру. legacy системы в «большом» j2ee enterprice не редкость, а я бы сказал почти правило. и поддерживать, и обновлять, и рефакторить приходится много. а без понимания архитектуры, и главное без желания понимать, работа с legacy решительно невозможна.
Ага. Интересно. Как я и подозревал, больше сдвиг на архитектуру, так как системы больше.
Виктор,
IMHO в своих 5-ти характеристиках вы мешаете котлеты с мухами — язык прграммирования, архитектура+платформа и умение БЫСТРО решать проблемы — это все из 3х разных областей.
А вообще с вами согласен по поводу того, что мобильные разработки замкнуты в себе — те кто в них глубоко погружается, в результате часто «отстает» по технологиям уровня enterprise и взрослого web-а.
В замен же приобретает довольно специфичные (и дорогостоящие!) навыки и знания.
P.S. Не могли бы вы связаться со мной по е-майл — есть вопросик по поводу вашей деятельности.
В основном я мешаю в кучу, не из-за того, что люблю котлеты с мухами, а потом что, для работы требуются знания из разных направлений.
Фактически все, что я описал перпендикулярные друг другу знания.
То есть можно понимать архитектуру и и не знать языков программированию. Или уметь решать сложные задачи, но не знать платформы.
Да, проблем мобильного мира, что он действительно находится в стороне и от desktop development’а и от web’а.
На почту сейчас напишу.
что же касается Ваших коллег, Виктор, то как показывает практика, тематика профессональных разговоров касается последнего и максимум предпоследнего проекта. если в их проекте много JNI на Linux платформе, то это отнюдь не показатель того, что Вы тупой — это просто ребятам «повезло». по большому счету JNI есть зло в 90% случаев, но уж если приходиться с ним работать, то по неволи выучишь особенности реализации JVM, и прочие описанные фишки.
времена героев, знавших все три языка программирования, прошли. хорошо это или плохо, каждому судить для себя, такова жизнь. и даже времена экспертов, как мы обсуждали в параллельном треде прошли. проходит эпоха гиков, программирование становиться все более «поточным» и люди все больше приходят за деньгами. мне иногда бывает с ними сложно — они не совсем понятны для меня, но такова жизнь.
Та, в общем, я это понимаю. Поэтому и вылилось в обсуждение типа, кто на что делает упор, вместо того, чтобы пытаться кого-то догнать и перегнать.
Просто забавно, что знания в мобильных платформах очень специфичные.
Согласен с Вадимом — впихнули невпихуемое 🙂
Согласен с Антоном — все фломастеры области d IT разные
Добавлю. Невозможно оценить систему, являясь ее частью. Поэтому нельзя распределить факторы, влияющие на результат проекта, указав «ощущения».
Лучше разделите все компетенции на 3 составляющие — знания, умения, навыки (3 столбца). В каждой компетенции определите, является она крайне необходимой, полезной или желательной для данной области (проекта) — это мера влияния компетенции. И укажите, что из 3 составляющих в какой мере влияет. В некоторых компетенциях навыки могут не влиять (ставим прочерк), а в некоторых — бывают опят и навыки без солидных знаний (в основном гуманитарные компетенции).
В результате вы можете составить картину идеального специалиста для данной области/проекта. Потом вместо идеала подставьте себя, и подчеркните то, чего вам не хватает. Лучше, если это будет определено каким-то формальным методом — опросом коллег, тестированием.
И только после этого можно создать подобие распределения, и наметить те компетенции, которые именно вам именно в этой области нужно подтянуть.
Вы думаете, оно того стоит? 😉
А в чем отличие умений от навыков?
Скажем так, продолжать подтягивать я собираюсь на самом деле бизнес составляющую.
А из всего остального просто хочется выбрать наиболее важные и критические, чтобы их не терять. А по поводу мелочи и шушары — можно не напрягаться.
Вы будете заниматься бизнесом (получая опыт и навыки), или только накапливать знания в этом направлении?
Если будете продолжать 90% времени заниматься разработкой, то первый вариант мне представляется мало реальным :(.
Умения (компетенции, скилы, skills) — это области компетенции в определенной сфере человеческой деятельности (например, мелкий торговый бизнес, разработка ПО по спецификации), которые с одной стороны требуются для успешного выполнения этой деятельности компанией (или предпринимателем), с другой стороны, выражаются в знаниях, опыте и навыках конкретного человека, участвующего в этой деятельности.
Если проще, то МОГУ (умение) = знаю КАК (знание), делал раньше (опыт) и ПОВТОРЮ многократно (навык). Иногда можно к повторению добавить условие «без ошибок».
Если нет одной из составляющих, умение становится неполным, и желательно подтянуть недостающую составляющую. Иначе кому-то другому прийдется выполнять часть работ.
А мне кажется что для любой платформы этот процентаж сильно меняется в завимости от того, какую роль вам приходится исполнять, т.е. от формулировки задачи. Если проблему за вас уже решил менеджер или тим-лид, то вам важность навыков в решении проблем и построении архитектуры уже не нужна, вам нужно закодить то, что вам на словах уже описали, проверить нет ли каких-то подводных камней, которые не учел тим-лид и проверить потом код:) Другое если задача стоит общая, специальных знаний платформы вам самому не хватает, но вы тим-лид и примерно знаете куда бы вы сами копали и как бы реализовывали таск, если бы вам пришлось кодить самому. Тогда вы просто объясняете свое решение подчиненному и тот копает, а вам потом просто предоставляет отчет, с выжимкой спец.знаний и собственно решением, чтобы вы могли проверить. Я например бывало давал таски подчиненным, не имея спец.знаний, а приобретал их уже потом, просматривая код решения и получая от подчиненного либо ссылки на нужные статьи, либо ссылки в мануалах, на нужные параграфы (т.е. поручал подчиненному и поиск необходимой спец. информации, а не только реализацию решения).
В общем-то да, действительно зависит от задач. Я имел в основном ввиду либо team lead, либо senior developer.
ну в таком случае в веб-разработке мне нужно просто как можно глубже разбираться собственно в процессах работы веб-сервера и клиентов, быть в курсе всех новшеств (не обязательно знать их и иметь их опыт, но иметь хороший опыт ковыряния в чужих сорсах, чтобы при необходимости быстро разобраться в чужой либе).
Так же крайне важно стало, как в былые времена, когда компьютеры еще не были такими шустрыми, для увеличения конкурентноспособности продукта, уметь писать рациональный и компактный код, но при этом не жертвовать скоростью разработки, т.е. находить компромисс между излишним ООП и постоянно принимать решать, какую задачу лучше реализовать на сервере, а какую, на клиенте. Это фактически все. Знание языка — дело наживное и довольно быстро наживное, если будет практика.
хотя… html-верстка в веб все же стоит несколько отдельно. Так или иначе верстать хорошо умеют не многие. Часто для этого берут специальных верстальщиков, который отлично знают все тонкости браузеров и умеют реализовывать верстку наиболее оптимально. К сожалению не все верстальщики на столько хороши, а вот джаваскриптеры, актив-скриптеры и т.д. и те кто совмещает это с серверной разработкой и подавно не обладают достаточным набором знаний. Даже я не могу похвастаться отличными знаниями в этой области, хотя мой запас знаний и достаточно обьемный, но я уверен, что найдется еще не один десяток приемов, или триксов, которых я не знаю. А найти классного верстальщика все таки задача не из простых. По крайней мере у нас. Хотя бы потому что у них специфичная задача, как и у дизайнеров, они нужны далеко не на всех этапах разработки и их сложно нагрузить фулл-тайм. Потому для маленького бизнеса держать на ставке дизайнера еще могут, как необходимость, а вот чтобы верстать пытаются брать или девелоперов с таки набором знаний, либо (что было бы еще лучше, но встречается вообще очень редко) дизайнера-верстальщика.
Да в любой задачи если копнуться — будет тоже самое как и в верстке.
Ясно, что слепить сайтик на 5 страниц — дело не хитрое.
Но вот, когда надо сделать архитектуру для нового Amazon, тут уже алгоритмами «на коленке» не обойдешься и тогда берут спецов, которые планомерно и аккуратно все проектируют. И запас знаний у них должен быть гораздо больше, чем у студента делающего свою первую страницу.
Выскажу свое мнение.
Считаю что в первую очередь важно умение принимать решения. И это в первую очередь касаеться не руководителей, а самих разработчиков.
> — знание платформы — 30%
Я так понял что имелось в виду знание особенностей платформы.
> — умение создавать нормальную архитектуру — 20%
50%. Часто забывают что нормальная архитектура должна имеет встроенные механизмы тестирования(дебаг, профилирование, тестовые сценарии).
> — умение решать проблемы 20%
Важнее умение не создавать проблемы.
> — понимание логики программы — 20%
Логика работы программы должна быть прозрачной и понятной изначально. Для этого есть полный комплекс решений.
> — знания языка программирования — 10%
Я так понял что имелось в виду знание особенностей языка программирования.
Виктор, а можно узнать — где лежат деньги в мобильных приложениях? В смысле, за что готов платить покупатель владельцу бизнеса, за что готов платить владелец бизнеса разработчику? Какие приложения, какой круг задач?
Меня не интересуют коммерческие тайны, а только совет по профессиональной переподготовке. Надо менять курс, осваивать новые области, вот и собираю информацию. Опять же, IPhone какой-то появился — может быть, будет новая ниша 🙂
Если удобнее в личку — я готов.
Говоря честно — я не знаю, точнее я не уверен. Знал бы точно, уже был в этой области.
Как мне кажется, деньги в мобильных приложениях есть в корпоративном рынке. Но туда сложно выйти.
Так же деньги лежат в контенте (но это не имеет отношения к мобильным разработкам). Это скорее к созданию чего-то что пользуют мобильные программы.
>Опять же, IPhone
Если вас это интересует с технической стороны.
Я бы делал ставку на WinMobile и iPhone. Остальное понемножку, как мне кажется, будет сдуваться.
Все предыдущие комменты больше говорят о преверженности товарищей к водопаду. Сам работаю в ajile поэтому выставлю такое ИМХО:
— знание платформы — 10%
— умение создавать нормальную архитектуру — 20%
— умение решать проблемы 40%
— понимание логики программы — 20%
— знания языка программирования — 10%
Все это естественно исходит из того, что человек со светлой головой и нормальной коммуникацией. Ставить себя под рамки 1-й платформы, 1-го языка не есть хорошо. А по сути давать проценты уже чушь, все должно быть в комплексе и гармонии. Понимаю, что немного противоречю, но вот как то все так получается.
Кстати по поводу
>> — умение решать проблемы 20%
> Важнее умение не создавать проблемы.
Мне кажется имелось в виду умение решать проблемы заказчика.
Да, я имел в виду решать проблемы заказчика. То есть когда ставят не слишком типовую задачу и надо придумать разумное решение.
>Ставить себя под рамки 1-й платформы, 1-го языка не есть хорошо.
Ну, это достаточно сложная тема.
Вероятнее всего в web или desktop это легко исполнить.
А например, если у вас проект под Nokia телефон. То, вас уже ставят в рамки одной платформы (Symbian) и одного языка (C++).
Это уже именно ваша специфика)