У программистов не было ни гита, ни джетбрейнса, ни даже ноутпад++. Первую программу автор писал в дрянном редакторе бейсика. Мы думали, что крутость программиста зависит от того, с какой скоростью он печатает. Мы думали, что крутость компьютера можно измерить тем, сколько раз на него можно будет скопировать Syphon Filter.

Время шло, росли гонорары. Индустрия породила подходы к разработке, позволяющие понять, сколько времени/сил нужно потратить на ту или иную задачу. Индустрия породила новый рынок и новые зарплаты. Возникла необходимость понять, кому именно их платить.

habrahabr.ru, 17 декабря 2017


Собеседование — это игра. Иногда игра бывает интересной и в чём-то продуктивной, иногда она превращается в фарс. Иногда оценивают прошлое, иногда — настоящее. Есть некоторое общее понимание того, что нужно спрашивать, и нет совершенно никакого материального обоснования, почему необходимо спрашивать именно это. «Потому что мы будем как Гугл», «потому что не ясно, что вообще делать», «ведь нужно что-то спрашивать».

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

Будет больно. Потому что будет правда.

Почему то, что есть сейчас это уже кое-что

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

Чтобы не умереть со скуки, буду краток. Иногда важно, чтобы «ты у меня не первый». Иногда важно, что «он всё видел, он всё знал». Почти всегда важно, чтобы «ты могёшь как мы».

В общем, это всё здорово, но это от безделья. Опыт — в резюме; общие знания проверить не получится (они почти все не осознаваемы — кандидат просто не будет знать, что рассказывать, начнёт повторять резюме), а к стэку технологий при некотором «среднем уровне» можно подготовиться теоретически, и снова оценить не удастся. Или вы просто хотите убедиться, что он не врёт?

Если с «что делал» всё ясно, «как у нас» можно быстро выяснить, то весь l’amour de trua — в оценке «всех» знаний. Тут каждый сам за себя и кто во что горазд. На выбор инквизиции инструменты с малым дамагом, типа «гугловских задачек», увесистые среднячки вроде «расскажите принцип D из SOLID», и BFG «как именно работает volatile», «как в jvm происходит сложение», «что произойдёт, если в TreeSet добавить null». В третью категорию попадают любые малоизвестные особенности систем, о которых сам недавно прочитал и пока не успел забыть.

Почему это используется? Потому что при ответе на вопрос, кандидат может раскрыться, показать реальный уровень своих знаний. А может не раскрыться. Потому что может заклинить память, не вспомнится какая-нибудь особенность, будет названо неправильное слово, авитаминоз и клонит в сон, расстался с девушкой и переживает потерю, беспокоится, потому что нравится фирма… Но тут война и каждый сам за себя — «зачем нам в компании неудачники?».

Важно ли это всё? Важно. Практично? В целом, работает. Эффективно? Скорее, иллюзорно.

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

Размышления о материи и её законах

Ничего вульгарного. Материя — не вещество. Материя это то, из чего состоит Мир. На данный момент Материя открыты вещество, энергия, информация, время и пространство; а также переходы между ними. В китайской традиции это У-Син — 5 первоэлементов и переходы.
Для нас практический смысл состоит в том, что мы можем эту самую материю пощупать. Пока мы не выделили элемент, не научились его регистрировать — не ясно, есть ли он вообще. Хороший пример — радиоволны. Нет антенн — нет волн. Плохой пример — пространство. Попробуйте его не-зарегистрировать.

В общем. Материальный элемент в нашем случае — умение выполнять операции [определённого уровня]. Ща поясню.

Советский (психо)физиолог Николай Александрович Бернштейн ввёл в науку понятие уровней организации движения. Не вдаваясь в технические подробности, всё происходит так. Сначала ставим пальцы на клавиши пианино, потом гаммы играем и всякие «пусть бегут неуклюже», а через три года уже какие-никакие мелодии. Когда консерватория окончена, и даже успел забыть, где проходил твой второй настоящий концерт — если повезло и был талант — рояль, наконец, исчезает, остаётся только музыка.

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

В программировании вместо «изменения уровня организации» принято говорить «абстрагирование». Но такой термин не отражает суть, это раз, и там нет явной линейки — два. Кажется, что термин используется неправильно, но еще нужно подумать.

Крутая особенность в том, что с верхних уровней всегда можно спуститься вниз, а с нижних очень тяжело пониматься наверх. Это свойство [разной сложности при выполнении операций определённого уровня] мы и будем использовать для ранжирования.

Очень важный момент. «Изменение уровня» это изменение закона функционирования. Убедитесь, что понимаете это. Дёргать пальцами ручку и писать этой ручкой фразу — разная деятельность, и она подчиняется разным законам.

Что за операции?

В психологии есть «человек, который изменил всё» — это Жан Пиаже. Такое влияние, какое он оказал на психологию не сделал ни Зигмунд Фройд, ни кто-либо другой. Его главное достижение было в том, что он показал развитие детей в уровневой перспективе. Он показал, что ребёнок проходит в строгой последовательности уровни от сенсомоторного до стадии формальных операций.

Жан Пиаже померил когнитивное — умственное — развитие через выполнение операций определённого уровня. Это — гениально. Гениально потому, что оказалось работающим. Представляете? Догадка о том, что существуют именно уровни развития мышления, а не просто «натолчём, и как-нибудь всё поймёт». Гениально.

Стадии Пиаже заканчиваются на 12 годах. Его теорию продолжили препарировать, мусолить и развивать другие исследователи. L.M. Commons и F. Richards показали, что уровней в два раза больше, и они могут меняться и после 30-40 лет. Об этом будет ниже, сейчас еще пример про уровни и операции.

Математика — тоже уровневая система. Есть арифметика. Там есть числа и действия над ними. Сложение, вычитание там… В школе мы это делаем сначала в яблоках (чтобы сенсомоторный уровень задействовать), а потом в настоящих числах и даже буквах как следующему уровню абстракции.

А потом появились функции и зависимость одной «буквы» от другой. Осознайте, как это круто. Насладитесь тем, что меняется уровень операций. От простого 1+1=2 мы идём к a+b=c, а потом f(x) = k*x+b. Функциям безразличны сами «буквы». Что бы в неё ни попало (как в мясорубку — мясо, помидоры, ягоды), функция будет проводить одни и те же действия (будет делать «рубку»). Причём, иногда функция будет «выключаться», так как в некоторых местах она не будет существовать (попробуйте в мясорубку зафигачить мясо с гвоздями — в какой-то момент это безобразие съест ваши нервы, но не сдвинется ни на миллиметр гвоздя).

А потом приходит матан-но-джитсу. И мы исследуем «со следующего уровня», как ведут себя функции. Нам не надо вычислять их значения, нам надо понимать, как они себя ведут… Это как пьяным идти домой, сверяясь по указателям. Не важно, как именно вы поднимаете ноги, важно, чтобы дорога сходилась к вашему дому.

Программирование — уровневая система. И её материальную базу составляют операции.

Уровни операций

Коммонс и Ричардс выделяют такие операции (сложность растёт сверху вниз):

  • сенсомоторные операции,
  • конкретные,
  • формальные,
  • абстрактные,
  • системные,
  • метасистемные,
  • парадигмальные,
  • кросс-парадигмальные.

Подробнее применительно к нам.

Блаблабла: На примере ООП типа джавы, список довольно общий, две основные линии проверки — «архитектурная» и «базовая». «Архитектурная» это как бы «внешняя сторона», как соединять сущности, укрупнять, масштабировать. «Базовая» — «внутренняя», как устроено, что быстрее, какие особенности.

Сенсомоторный уровень означает прикосновение

В архитектурном плане это умение скачать и установить IDE, компилятор, научиться всё это запускать.

В базовом — какое-никакое математическое («информатическое») мышление, умозрительное, теоретическое представление об алгоритме, о сложности вычислений. Думаю, что «задачи гугла» относятся к этому уровню.

Конкретных операций уровень

Архитектура. Освоение примитивов языка, написание элементарных хеллоуворлдов, освоение понятия функции, умение создания класса как такового — в целом, односложные операции, которые приводят к видимым результатам.

В «базе» — cтруктуры данных. Уровень погружения — их применение, отличие друг от друга, вычислительная сложность, реализация простых алгоритмов, типа сортировки.

Это еще не уровень Junior — он возникнет позже. Это уровень стажёра. Теперь можно брать «в ружьё», но само ружьё давать еще рано.

Формальных операций

Архитектура. Между элементами появляется взаимодействие. Основа формального мышления — научиться видеть примитивные связи, зависимости, функции. На этом этапе осваивают интерфейсы, общение между классами на их основе. Внутренние классы, абстрактные — в целом, более сложные особенности языка.

База. Многопоточность, ошибки, файлы, сеть — уровень внешнего использования, не надо сразу лезть в дебри.

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

Если освоил — Junior.

Абстрактных операций

Архитектура. Формирование абстрактных и независимых друг от друга модулей. Принципы SOLID. Шаблоны проектирования. Еще не понятно, что лучше, но уже понятно, как делать.

База. Это — этап начала анализа. «Почему именно так?», «Что будет быстрее?», «Как именно это работает?». Осваиваются нормы работы с языком и платформой.

Привет, Middle.

Системный уровень

Архитектура. Система — элементы, объединенные общей целью. Цель — предоставление обработанных данных пользователю, за адекватное время, с минимальной нагрузкой ресурсов. Создаётся некоторый коридор действий, «как всё работает». MVC, MVP, MVVM, Clean и другие слова — отсюда. Но важнее другое.

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

То, что рождается на этом уровне, эти яркие всполохи программерского света, назовём «системными альфа-операциями», или просто — «альфа». В джаве это было, например, добавление функциональщины, rxjava. В котле, например, extension functions.

В базе — изучает то, как организован сам язык, платформа. На jvm начинают лезть в байткод, смотрят, как всё преобразуется, перенастраивают виртуальную машину. Короче, тут начинается смак и удовольствие. На самом деле, только тут начинаешь чувствовать, что ты творец.

На этом этапе рояль начинает мешать. Пришел Senior.

Метасистемный

Это ребята другого пошиба. Обычно напрочь лишены чувства собственной важности и понтов типа «я знаю, что строки надо начинать сравнивать хешами только, если эти сравнения делаются чаще двух раз». Распознать просто — знает, как устроен стэк технологий минимум на один уровень «вниз» (иногда и «вверх»), обычно — на несколько уровней.

Рояль мешает, как родители влюбленным подросткам, пальцы перенапрягаются стучать по музыкальной зебре, лицо синеет, очки превращаются в телескопы. Так рождается музыка Баха и код чуваков, которые делают OpenBsd.

Дальше по уровням «одни черепахи». Различия стираются. Их всех огульно называют «old school». Их редко принимают на работу по объявлению. Их редко по объявлениям ищут.

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

К чему всё это?

Мы можем дорабатывать и конкретизировать всю линейку. Чтобы не пользоваться мифическими Junior, Senior, Mudakior, которые отличаются в зависимости от места работы, региона и страны. Это добавит прозрачности, облегчит поиск работы и найм.

Хотите нанимать «как раньше» — нет проблем, но теперь можно договориться. Чтобы стало ясно, к чему готовиться, как оценивать себя и других, и почему может не получиться. Просто будет понятнее, без всяких мексиканских эмигрантов.

Карфаген иллюзий при оценке уровня профессионального развития должен быть разрушен.

Важные уточнения

«Уровень» это «уровень». Его очень тяжело потерять. Но еще бывают «состояния». Переехал в другую страну, погиб близкий человек, неделю мучает бессонница — это всё уважительные причины, из-за которых «состояние» может временно снижать «уровень». «Состояние» — это когда будучи на некотором уровне развития, человек начинает больше концентрироваться на другом, обычно более низком. Когда у человека горе — его состояние падает на один-два уровня, иногда вплоть до самого низа, когда он открывает студию и втыкает в монитор, не понимая, что там написано.

Это — человек, это — бывает. Не оставайтесь к этому равнодушными.

Это — диалог, автор не выступает «самым умным» и не рассказывает другим, как жить. Ему кажется, что сотворчество более продуктивно. Кажется, что люди для того и выдумали сетевое взаимодействие, чтобы могли оцениваться, обсуждаться и дополняться Идеи, а не их авторы или авторство. Кажется, что мы стоим на пороге глобальных изменений, как в индустрии, так и в нашей жизни. Остаётся понять, какое место мы там займём.