Оценка уровня программиста?
=============================

 Добрый день,  
  

Каким образом можно оценить свой уровень знаний в программировании?   
  

Я достаточно молодой специалист (21 год, 6 курс, чуть меньше года работаю), работаю в довольно большом банке в отделе экваринга (банкоматы, POS-терминалы), но по сути я занимаюсь разработкой внутреннего ПО, для нашего отдела и отчасти процессинга. Пишу в основном на Perl и Java. Как хобби изучаю дома Python и опять же Java. По характеру работы мне приходится иметь дело со всевозможным многообразием языком (человек-комбайн), начиная от C/C++ и заканчивая VB в Экселе, JS, HTML, CSS. Плюс слежение за сервером, обновления, прокладка сетей. В общем куча разноплановой работы и дизайн, и верстка, и программирование.   
  
  

Сам я свои знания оцениваю как низкие, т.к. часто пользуюсь гуглом, большинство решений беру оттуда и внедряю к себе(стараясь правда понять как оно работает), встречаю довольно часто незнакомые слова и методы на Хабре, да и считаю что невозможно при всем многообразии работы разбираться во всем хорошо.  
  

С другой стороны, со всеми задачами которые мне поручают я справляюсь в срок и больших затруднений они у меня не вызывают, готовые решения в большинстве случаев строятся по тому же алгоритму что я представлял, за пол года вырос со специалиста до ведущего инженера(хотя в банке принято не менее года работы в банке и 3х лет общего стажа).   
  
  

В общем, подскажите пожалуйста какие-нибудь ресурсы для объективной оценки своих знаний и навыков, или вообще какие-нибудь методы. Хочется позднее уйти в IT компанию, но не могу даже представить по какому из направлений и на кого могу претендовать Junior|Middle. 

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

Некоторым компаниям гораздо важнее, что бы вы понимали особенности и подводные камни языка на котором вам придется писать. А есть компании в которые вы никогда не попадете если не работали с системами контроля версии и баг треккингом, будь вы даже трижды гений!  

  

Человек стоит ровно столько, сколько ему готовы платить. Я в этом убедился на собственной шкуре. Самое плохое что с вами может произойти, если вы поймете, что знаете уже очень много. В этот момент вы умрете как специалист.   

  

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

 Есть ведь матрица компетентности программиста [sijinjoseph.com/programmer-competency-matrix](http://sijinjoseph.com/programmer-competency-matrix/) 

 Нужно просто попросить прособеседовать себя к.-л. опытного программиста, а он вас скажет ваш *относительный* (относительно его опыта) уровень и вашу ценность для ентерпрайза/науки. 

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

  

Хорошего программиста определяет умение качественно решать, различного рода, задачи. Чем лучше программист, тем шире список решаемых им задач, и тем лучше качество решений, но и это все не объективно.  

  

Единственное, что могу посоветовать — поискать ответы на вопросы [такого](http://habrahabr.ru/qa/11036/) рода. 

 Позвольте и мне высказать свою точку зрения. Как правильно отметили выше, объективно оценить знания программиста по числовой шкале (хоть по 100..0-бальной), пожалуй, невозможно. Да и наверное не нужно, так как в каждой компании требуют различные знания (кто еще кроме компаний будет вас оценивать?).   

  

Тем не менее, можно выделить несколько категорий знаний, по которым можно составить более-менее объективную картину программиста. Например, сюда можно отнести:  

 — владение различными ЯП;  

 — опыт работы с каждым из них;  

 — работа в команде;  

 — участие в OpenSource-проектах;  

 — наличие собственных разработок;  

 — знание паттернов;  

 — знание алгоритмов, структур данных;  

 — знание методологий разработки;  

 — знакомство с системами контроля версий, тестирования;  

 — и т.д.  

  

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

  

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

  

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

  

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

  

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

  

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

  

А чтобы было о чем рассказать, в свободное время (оно же у вас есть?) разрабатывайте «для себя» разные программки. Ну например, напишите какой-нибудь парсер, поработайте с API различных систем (того же Яндекса), сделайте собственный таск-менеджер, придумайте сами интересную вам небольшую идею и доведите ее до конца. В каждой такой задаче можно найти много тонких моментов — оптимизация скорости алгоритма, структуры БД, применение паттернов, взаимодействие компонент, написанных на разных ЯП и т.д.   

  

Многовато текста получилось… 

 Думаю, Вам [сюда](http://www.quizful.net). 

 есть варианты типа  

<https://crowdtest.org/>  

<https://proghub.ru/>  

<https://quizful.net/> 

 «Сам я свои знания оцениваю как низкие, т.к. часто пользуюсь гуглом, большинство решений беру оттуда и внедряю к себе(стараясь правда понять как оно работает)»  

Вот это вот плохой показатель =) Я свои знания оцениваю как выше среднего, но тоже часто пользуюсь гуглом, а знаете почему? До меня такую работу уже делали, вдруг кто-то сделал ее лучше меня, почему бы этим не воспользоваться?  

Если хотите уходить, и не можете выбрать куда, идите на вакансию постарше, если не пройдете на мидла но у них будет вакансия на джуниора, они Вам ее предложат. 

 Попробуйте сходить на собеседование например в Yandex/Google/Intel (нужное подчеркнуть, в городе на буковку М.), возможно, объективно оценят, если примут и согласятся на «цифры», значит Вы нужный им специалист. А если Вы будете нужны такой вставить имя компании сюда, значит вы программист высокого уровня.  

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

 Есть некое количество компаний, которые занимаются независимым тестированием и сертификацией, где можно оценить различные скиллы, в том числе программерские, или пригодность для той или иной роли (роль это некий набор требуемых скиллов). Раньше популярным был [brainbench.com](http://brainbench.com) — там устраивали бесплатные тестирования в качестве промоушена и даже высылали сертификаты. В России получение брейнбенчевских сертификатов было национальным видом спорта. Сейчас, похоже, все только за деньги, но можете попробовать поискать какие-то стартапы, они для раскрутки тоже могут проводить бесплатное тестирование. 

 Посмотрите разработанные АПКИТ [профессиональные стандарты в области ИТ](http://www.apkit.ru/committees/education/meetings/standarts.php) для программистов, там описано какими навыками и знаниями должен обладать специалист того или иного уровня. 

 Попробуйте наоброт — сначала решить, сколько хотите зарабатывать, и потом «померяйтесь» с кем-нибудь с такой зарплатой. 

 Был заказ от фирмы оценить программистов разработали тест.  

Пока каждый желающий может пройти бесплатно.  

[aiti112.blogspot.ru](http://aiti112.blogspot.ru/)  

анкета внизу блога 

 Вот хорошая матрица компетентности [https://docs.google.com/spreadsheets/d/e/2PACX-1vS...](https://docs.google.com/spreadsheets/d/e/2PACX-1vSr58Xg4DVX2WdmAkv3hE2ITJ3fPeNUmRFe0Ekro53U-ACFrhcUkV8PlUm4ddcn53Uh-5UIezZtZZgc/pubhtml)