Как понять есть ли способности к программированию: Способности к программированию, как определить? — Хабр Q&A

Содержание

Как распознавать хороших программистов?

Это перевод заметки Саймона Саута, оставленной в ответ на вопрос How do you know when someone is a good programmer? на quora.com

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

HR-менеджер в поисках «хорошего программиста» скорее всего будет интересоваться насколько он:

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

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

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

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

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

1. Они могут программировать. Не смейтесь: мне довелось работать с несколькими людьми, получившими высшее образование, с хорошей зарплатой и должностью, но, очевидно, не способными писать даже простой код. Такой человек — мёртвый груз для команды разработчиков, и намного проще и дешевле не нанимать его, чем уволить позже.

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

Тест FizzBuzz — хорошая отправная точка, но так как многие программисты уже знают о нём, вам лучше написать собственный тест. Senior-программист из вашей команды (или консультант, если вы все еще собираете команду) может помочь вам собрать эффективный тест и множество приемлемых решений для сравнения.

2. Они хорошо пишут. И тут я подразумеваю умение излагать материал. На английском (или вашем родном языке), я не говорю про код. Есть как минимум две причины, почему это важно.

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

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

Вы не можете проверить интеллектуальные способности того, кого нанимаете напрямую (в США, а возможно и ещё где-то, это запрещено по закону), но вы можете проверить их способность писать, а умение излагать материал — это мощный индикатор интеллекта. Так что ищите что угодно, что писал когда-то кандидат — в блоге, на технических сайтах, которые я упомяну ниже и оцените качество, как ещё один показатель способностей этого человека к программированию.

3. Они вкладываются в open-source проекты. Это ярко-выраженный показатель статуса среди самих программистов. Кроме того, участие в публичных проектах проявляет сразу несколько желательных черт.

Во-первых, кандидат очевидно любит разработку софта настолько, что готов заниматься этим в свободное время, бесплатно. Это самый уникальный индикатор увлечённости.

Во-вторых, open-source проекты часто (хотя и не всегда) – технически сложные компоненты инфраструктуры, которая, технологически выражаясь, функционирует на относительно низком уровне. Поэтому работа над ними отражает реальный масштаб способностей. Переделывать веб-страницу, чтобы она быстрее загружалась, означает знать что-то о том, как работает Web;

изменять Mozilla Firefox так, чтобы он загружал веб-страницы быстрее, требует значительного уровня знаний о производительности Web.

И наконец, работа в open-source показывает, что кандидат имеет как минимум элементарные организационные навыки. Такие проекты часто нуждаются в поддержке, но не обязательно принимают ее. Так что всегда есть аспект «продажи» своих изменений. Программист, который чрезмерно груб или неорганизован, или не может выражать свои мысли, окажется изолированным от этого мира.

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

Многие open-source работы размещены на Github, так что просматривая там профиль кандидата, вы можете сделать важные выводы о его участии.

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

Именно поэтому я всегда с подозрением отношусь к «senior» разработчикам, которые всю работу делают, скажем, в С# или Java, и на их компьютере установлена только Microsoft Windows. Есть функции по-умолчанию, варианты, которые вы выбираете, если ничего не делаете. Тот, кто страстно относится к программированию, у кого есть мнение о том, что делает систему лучше и замотивирован прорабатывать сложную задачу, почти стопроцентно попробует «альтернативные» операционные системы вроде Linux, NetBSD или Haiku, или языки программирования вроде Eiffel, Haskell или Clojure, и на их сайте или в резюме будет этому доказательство.

Заметьте важное следствие: вы можете запороть свою работу как HR менеджер, используя слишком чёткие критерии для поиска работника. Программисты с достаточной степенью любопытства, попробовавшие работать на Smalltalk, оказываются хорошими работниками, несмотря на то, знание какого языка программирования требуется от кандидата. Если ваш поисковый фильтр — «PHP, Apache, Oracle и Windows 10», сможете ли вы найти таких людей?

5. Они делятся своими знаниями с другими. В какой-то степени это объединяет предыдущие четыре показателя. Программисты, которые способны и хотят обучать своих коллег, обладают уверенностью, что сами понимают предмет, способностью общаться эффективно и достаточно для того, чтобы ориентировать других делиться ценностями, которые они накопили. Такие люди могут действовать, как усиливающий фактор внутри организации, помогая новым членам команды выйти на требуемый уровень (включиться в работу), а всем остальным работникам компании понимать, что группа разработчиков может выполнять для них и что ей требуется в замен.

Как уже говорилось ранее, блог кандидата или его участие в open-source проектах могут дать хорошее представление об активности в этом вопросе.


Перевод: Наталия Басс


От редактора: Мы на Хекслете часто публикуем переводы статей. Важно помнить:

  1. Мнение автора статьи может отличаться от мнения администрации и сотрудников Хекслета.
  2. Цель перевода – показать мнение. Поэтому одна статья может визуально противоречить другой: это просто разные мнения. Мы оставляем на вашу ответственность возможность анализировать и делать выводы для себя.

Как понять, смогу ли я стать программистом — отвечают эксперты

Для начала вам нужно понять, что считать профессией программиста. Программирование давно перестало быть уделом избранных, способных мыслить байт-кодами и в уме следить за аллоцированной памятью. Сегодня в мире есть много современных языков, синтаксис которых максимально близок к простому английскому. К примеру, User. find_by(name: 'Вася').destroy в Ruby (on rails). Знания этих команд достаточно для того, чтобы писать небольшие сайты, блоги, интернет-магазины. Если вы хотите работать на этом уровне, то вам достаточно выбрать понравившийся динамический объектно-ориентированный язык (Ruby, Python) и пройти курс по нему, или прочитать книгу, их достаточно много для каждого языка. Также можно попробовать себя в фронтенд-разработке, выучить JavaScript а затем освоить фреймворки к нему.

Если вы хотите писать более сложные системы, необходимы знания абстрактной логики, их можно получить изучая высшую математику в институте (в идеале дискретную, но, на самом деле, матанализ тоже весьма неплохо развивает мозги). Можно читать книги по дискретной математике и алгоритмам (Стивен Скиена «Алгоритмы. Руководство по разработке», Томас Кормен «Алгоритмы. Построение и анализ», Род Хаггарти «Дискретная математика для программистов», Дж. Андресон «Дискретная математика и комбинаторика») и просто практиковаться в программировании. Также очень полезно было бы выучить низкоуровневый язык, например С (Керниган, Ритчи «Язык программирования С») — для общего понимания принципов работы программ.

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

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

Если говорить про простейшую разработку web сайтов, то тут не должно быть никаких сомнений, справится каждый. Если же вы хотите пойти дальше, но при этом считаете, что математика и логика это совсем не про вас, то можете попробовать игровые сайты для разработки алгоритмов:
https://www. codingame.com/
https://www.codewars.com/
На них надо решать простейшие (и не очень) алгоритмические задачи на любом понравившемся вам языке программирования. Не могу сказать, что это очень полезно для обучения реальному программированию, но если вам понравятся эти игры, то вам точно понравится заниматься серьезной разработкой.

Нужно ли образование чтобы стать программистом? — Карьера на vc.ru

Недавно с друзьями разговаривали про образование наших детей, получилось очень живое обсуждение. У меня давно сформировано свое мнение по этому поводу, так как мы постоянно расширяем команды нанимая программистов и аналитиков…

Хоть фундаментальные знания нужны, но учеба по специальности не является обязательным условиям:1) Во первых есть большие вопросы к качеству обучения во многих ВУЗах. Эта сфера настолько быстро развивается, что стек технологий по всем направлениям может меняться каждые год или два. Ну а в большинстве вузов вам будут преподавать программу, составленную пару десятилетий назад. Показательно выглядит образ 60-летней преподавательницы (возможно всю жизнь проработавшей только в ВУЗе), рассказывающей про блокчейн студенту, который с юношества торговал биткойном и пробовал писать смарт-контракты.2) во вторых, в лучшем случае только четвертая часть выпускников идут работать именно программистами, не говоря уже о тех, кто совсем покидает сферу ИТ3) в третьих очень часто встречаются программисты, которые так и не окончили ВУЗ, но при этом они крайне успешно программируют. Они могут себе это позволить, так как работодатели ценят результат, а не корочки. Из-за дефицита специалистов, в этой сфере требования к образованию не таки жесткие.4) в четвертых окончив вуз и начав работать вы уже достаточно скоро обнаружите, что обучение не закончилось — вам нужно будет учиться всегда. Прогресс идет быстрее чем человек может воспринимать. И чтобы иметь широкий кругозор, вам нужно будет изучать различные направления.5) в пятых понять реальную потребность бизнеса вы сможете только на реальных бизнес задачах. Через практические задачи человек узнает точечно о том, какую теорию выучить сейчас, чтобы это было максимально эффективно для его развития.6) ВУЗы начинают уступать (по скорости обучения в разы) онлайн образовательным площадкам, таким как Coursera, stepik, geekbrains, ШАД от Яндекса, бесплатным курсам от сообществ (например mlcourse.ai), да и банально YouTube, где наверное уже есть вообще всё что нужно.

Я ни в коем случае не ставлю практику превыше теории, да и ВУЗы есть очень хорошие (один из них МФТИ), где преподаются современные подходы и зачастую есть самая непосредственная связь с бизнесом, а преподаватели иногда являются основателями компаний. Это те самые места куда действительно стоит поступать не смотря на большой конкурс. Это места для общения с великими преподавателями и успешными в будущем студентами. Подход подразумевающий глубокую теоретическую подготовку не менее важен. Он предполагает очень глубокое погружение в какую-то область. Специалисты такого плана часто доводят очень сложные продукты до максимальной эффективности. А начинающему лучше сначала осмотреться в ширь — увидеть, для чего нужны разные языки, и какие технологии используют различные бизнесы.

А что вы думаете по этому поводу? Отправили бы своего ребенка в ВУЗ-среднячок или не стали бы тратить время?

9393 просмотров

{ «author_name»: «Владислав Дегтярев», «author_type»: «self», «tags»: [«\u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b»,»\u0441\u0442\u0443\u0434\u0435\u043d\u0442″,»\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435″,»\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435″,»\u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442″,»\u0438\u0438″,»\u0432\u0443\u0437″,»it»,»ds»,»datascience»,»bigdata»], «comments»: 130, «likes»: 0, «favorites»: 33, «is_advertisement»: false, «subsite_label»: «hr», «id»: 186817, «is_wide»: true, «is_ugc»: true, «date»: «Sun, 13 Dec 2020 12:35:02 +0300», «is_special»: false }

{«id»:664104,»url»:»https:\/\/vc. ru\/u\/664104-vladislav-degtyarev»,»name»:»\u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0414\u0435\u0433\u0442\u044f\u0440\u0435\u0432″,»avatar»:»28ffd23d-eb62-5d72-82e2-433cc87c6577″,»karma»:0,»description»:»»,»isMe»:false,»isPlus»:false,»isVerified»:false,»isSubscribed»:false,»isNotificationsEnabled»:false,»isShowMessengerButton»:false}

{«url»:»https:\/\/booster.osnova.io\/a\/relevant?site=vc»,»place»:»entry»,»site»:»vc»,»settings»:{«modes»:{«externalLink»:{«buttonLabels»:[«\u0423\u0437\u043d\u0430\u0442\u044c»,»\u0427\u0438\u0442\u0430\u0442\u044c»,»\u041d\u0430\u0447\u0430\u0442\u044c»,»\u0417\u0430\u043a\u0430\u0437\u0430\u0442\u044c»,»\u041a\u0443\u043f\u0438\u0442\u044c»,»\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c»,»\u0421\u043a\u0430\u0447\u0430\u0442\u044c»,»\u041f\u0435\u0440\u0435\u0439\u0442\u0438″]}},»deviceList»:{«desktop»:»\u0414\u0435\u0441\u043a\u0442\u043e\u043f»,»smartphone»:»\u0421\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b»,»tablet»:»\u041f\u043b\u0430\u043d\u0448\u0435\u0442\u044b»}},»isModerator»:false}

Исследование: чтобы хорошо кодить, склонность учить языки важнее, чем математические способности

Уче­ные из Уни­вер­си­те­та Ва­шинг­то­на об­на­ру­жи­ли: для тех, кто хо­чет стать про­грам­ми­стом, та­лант к осво­е­нию ино­стран­ных язы­ков важ­нее, чем ма­те­ма­ти­че­ские спо­соб­но­сти. По­то­му что на­пи­са­ние кода пред­по­ла­га­ет изу­че­ние дру­го­го язы­ка — то есть спо­соб­ность быст­ро за­по­ми­нать но­вую лек­си­ку и грам­ма­ти­ку и по­ни­мать, как они устро­е­ны. Не ме­нее важ­ны и та­кие ко­гни­тив­ные функ­ции, как уме­ние ре­шать про­бле­мы и ис­поль­зо­ва­ние опе­ра­тив­ной па­мя­ти моз­га. На­уч­ная ра­бо­та про­фес­со­ра пси­хо­ло­гии Шан­тель Пратт и ее кол­лег, опуб­ли­ко­ван­ная 2 мар­та в жур­на­ле Sci­en­tific Re­ports, до­ступ­на в сво­бод­ном до­сту­пе.

Сте­рео­ти­пы о том, что дол­жен пред­став­лять из себя раз­ра­бот­чик и кому сто­ит идти обу­чать­ся про­грам­ми­ро­ва­нию, ча­сто сфо­ку­си­ро­ва­ны во­круг ис­клю­чи­тель­но ма­те­ма­ти­че­ских на­вы­ков. Од­на­ко та­кой взгляд не на­хо­дит на­уч­но­го под­твер­жде­ния, счи­та­ет ру­ко­во­ди­тель ис­сле­до­ва­ния Шан­тель Прат. Про­грам­ми­ро­вать слож­но, и это на­вык, ко­то­рый ста­но­вит­ся все бо­лее вос­тре­бо­ван­ным. При этом ин­фор­ма­ции о том, что нуж­но, что­бы стать хо­ро­шим спе­ци­а­ли­стом в сфе­ре IT, ка­та­стро­фи­че­ски не хва­та­ет. И это явно услож­ня­ет ре­ше­ние про­бле­мы ген­дер­но­го нера­вен­ства в ин­ду­стрии, до­бав­ля­ет Прат.

В ис­сле­до­ва­нии при­ня­ли уча­стие бо­лее 30 че­ло­век, изу­чав­ших по­пу­ляр­ный язык про­грам­ми­ро­ва­ния Python. Доб­ро­воль­цев по­про­си­ли прой­ти се­рию те­стов, что­бы оце­нить их со­бран­ность, язы­ко­вые и ма­те­ма­ти­че­ские спо­соб­но­сти. Те, кому уда­лось быст­рее осво­ить Python, так­же луч­ше спра­ви­лись с ре­ше­ни­ем ло­ги­че­ских за­дач и про­де­мон­стри­ро­ва­ли та­лант к ино­стран­ным язы­кам.

Прат объ­яс­ня­ет, что в этом от­кры­тии есть ло­ги­ка, ведь ко­динг име­ет мно­го об­ще­го с линг­ви­сти­кой: про­грам­ми­ро­ва­ние пред­став­ля­ет со­бой про­из­вод­ство зна­че­ний по­сред­ством ком­би­ни­ро­ва­ния раз­ных сим­во­лов по опре­де­лен­ным пра­ви­лам.

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

Что­бы изу­чить ней­рон­ные и ко­гни­тив­ные ха­рак­те­ри­сти­ки «пред­рас­по­ло­жен­но­сти» к про­грам­ми­ро­ва­нию, уче­ная со­бра­ла груп­пы доб­ро­воль­цев в воз­расте от 18 до 35 лет, ко­то­рые ни­ко­гда до это­го не изу­ча­ли ко­динг.

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

За­тем доб­ро­воль­цы про­шли во­семь раз­ных те­стов: один был на­прав­лен на ма­те­ма­ти­че­ские на­вы­ки, дру­гой — на язы­ко­вые спо­соб­но­сти, осталь­ные — на кон­цен­тра­цию, ре­ше­ние ло­ги­че­ских за­дач и па­мять.

Обу­че­ние Python про­хо­ди­ло он­лайн: уче­ни­ки смот­ре­ли уро­ки дли­тель­но­стью от 10 до 45 ми­нут на плат­фор­ме Codea­cad­emy. Каж­дое за­ня­тие было по­свя­ще­но од­но­му кон­цеп­ту, к при­ме­ру — усло­вию if/​​then, и за­вер­ша­лось неболь­шим те­стом на про­вер­ку изу­чен­но­го. Доб­ро­воль­цы мог­ли вос­поль­зо­вать­ся под­сказ­кой, об­ра­тить­ся к ин­фор­ма­ци­он­но­му бло­гу, где пе­ре­пи­сы­ва­лись быв­шие сту­ден­ты, или на­жать на кноп­ку с ре­ше­ни­ем за­да­чи.

Ис­сле­до­ва­те­ли сле­ди­ли за ско­ро­стью и точ­но­стью про­хож­де­ния уро­ков с по­мо­щью про­грам­мы для де­мон­стра­ции чу­жо­го экра­на.

По­сле за­вер­ше­ния обу­че­ния, участ­ни­ки сно­ва про­шли тест — на этот раз на зна­ние функ­ций и струк­ту­ры кода Python. В ка­че­стве сво­е­го фи­наль­но­го ис­пы­та­ния во­лон­те­ры долж­ны были на­пи­сать игру «Ка­мень, нож­ни­цы, бу­ма­га». Так ис­сле­до­ва­те­ли про­ве­ря­ли, на­сколь­ко хо­ро­шо уче­ни­ки мог­ли вос­поль­зо­вать­ся усво­ен­ны­ми зна­ни­я­ми.

В ито­ге вы­яс­ни­лось, что по­ка­за­те­ли «пред­рас­по­ло­жен­но­сти» к изу­че­нию язы­ков по­мог­ли пра­виль­но пред­ска­зать, на­сколь­ко успеш­но че­ло­век спра­вит­ся с уро­ка­ми про­грам­ми­ро­ва­ния. Ма­те­ма­ти­че­ские спо­соб­но­сти и гиб­кость мыш­ле­ния так­же были свя­за­ны с та­лан­том к IT, од­на­ко вли­я­ние этих фак­то­ров ока­за­лось ме­нее зна­чи­тель­ным. Бо­лее того, преды­ду­щее ис­сле­до­ва­ние Прат здесь так­же на­шло свое под­твер­жде­ние: по ак­тив­но­сти моз­га в со­сто­я­нии по­коя мож­но было по­нять, на­сколь­ко лег­ко участ­ни­ку бу­дет изу­чить но­вый язык — в дан­ном слу­чае, Python.

7 навыков успешного программиста | Rusbase

1. Умение читать чужой код

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

Почему это полезный навык? Во-первых, способность понимать чужой код – отличная возможность увидеть, что значит плохое проектирование. Анализируя чужую работу, вы понимаете, что получается, а что – нет. Более того, вы осознаете, какой код легче понимать другим разработчикам, а какой – наоборот.

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

2. Чутье на плохие проекты

Еще один важный навык – понимать, какие проекты не имеет смысла развивать. В больших компаниях всегда разрабатывается много проектов, большая часть их не доводится до конца. Есть бессмысленные проекты в плане бизнеса, есть проекты просто с плохим руководством. Конечно, это не означает, что вы должны сразу отказываться от идеи, если вы с ней не согласны. Однако если руководство не может нормально объяснить, что они будут делать с конечным результатом, возможно, на их предложение не стоит тратить свои силы.

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

3. Избегание совещаний

Фото: Medium

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

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

4. Умение пользоваться Github

Некоторые студенты информатики начали использовать GitHub чуть ли не с пеленок. Другие впервые сталкиваются с GitHub на первой работе. Для них он кажется темным лесом со странными командами и процессами. Они никогда не уверены на 100%, что делают.

Независимо от того, какую систему использует ваша компания, она превращается в большую помеху, если использовать ее неправильно. Простой push или commit могут привести к тому, что вы часами будете пытаться распутать паутину из множества бранчей и форков. В дополнение к этому, если вы забудете о команде pull и не обновите последнюю версию репозитория, вам придется решать разные конфликты слияния, что вряд ли можно назвать интересным занятием.  

Фото: Medium

5. Написание простого рабочего кода

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

Есть баланс между сложными концепциями проектирования и простым кодом. Шаблоны проектирования и объектно-ориентированное проектирование должны упрощать код в общей схеме вещей. Однако чем больше процесс абстрагируется, инкапсулируется и помещается в черный ящик, тем сложнее его отлаживать.

6. Умение говорить «нет» и расставлять приоритеты

На самом деле это касается любой должности. Но в частности кажется, что от сотрудников-технарей всегда всем что-то нужно.

Приоритезация и умение говорить «нет» – тесно связанные друг с другом навыки. Расставлять приоритеты – значит уделять время на задачи, которые окажут большое влияние на компанию. Говорить «нет» – значит избегать работу, которую должна делать другая команда.

Этому навыку довольно сложно обучиться, особенно если вы только что выпустились из университета. Вы не хотите никого расстраивать, поэтому берете на себя лишние обязательства. Тем не менее, работы всегда много, и нужно научиться говорить «нет».

7. Дизайн-мышление

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

Например, поскольку основная часть программирования – это поддержание, это значит, что зачастую приходится менять запутанный код другим. Даже простое изменение требует отслеживания каждой возможной отсылки на объект, метод и/или API. Иначе вы можете случайно сломать привязанные модули, о существовании которых не знали. Даже если вы просто меняете тип данных в базе данных.

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

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

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

Источник.


Материалы по теме:

Как выбрать язык программирования для изучения в 2019 году

Как познакомить ребенка с программированием без компьютера

Три самых популярных языка программирования в 2018 году

20 выражений из IT-сленга, которые вам нужно знать

Чтобы стать программистом, талант не обязателен?

Ещё ни один навык не превозносился настолько сильно: «Нужно иметь не только талант, но и страсть, чтобы стать хорошим программистом». Если тебе не хватает первого или второго, не важно, чего именно, ты просто не заточен под это. Глубоко укоренившиеся стереотипы не просто ошибочны, они вредят людям. В этом уверены многие успешные программисты, пишет Тони Ю (Tony You), колонку которого перевёл ain.ua.

Читать далее

В своей презентации Джейкоб Каплан-Мосс (создатель Django) однажды заявил:

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

В своем Twitter-аккаунте он называет себя «ненастоящим программистом», тем самым давая понять, что ему осточертели эти стереотипы.

Джейкоб Торнтон работал программистом в Twitter, а сейчас программирует в Medium. Он также создал Bootstrap, который получил более 80 000 звезд на Github. Так вот, Джейкоб Торнтон каждый раз говорит, что ненавидит компьютеры. Но не каждый раз при этом шутит: «Изначально собирался изучать социологию».

«Меня наняли на работу, в которой я не был компетентен даже приблизительно. Каждый день меня могли уволить. Я так тяжело работал, пытался изучить более продвинутый JavaScript, потому что не понимал, что происходит.

Момент истины наступил, когда вся команда стартапа собралась вокруг меня, распрашивая про запрос XHR. Я никогда такого не делал, я только знал, что это такое. Тогда я стал печатать и обновлять браузер, и ничего не происходило. Я повторил несколько раз. Я испугался. Сейчас они поймут, что я самозванец. И тут я понял, что забыл добавить ‘.send()’  — я добавил, обновил и всё получилось, и команда выдохнула: «О, ну круто». И все просто разбрелись по своим местам. А я сидел так 15 минут и думал: ну всё. Я в теме. Теперь меня не уволят».

Это история и близко не звучит как нечто из разряда «гениальный программист за работой». Но откуда же взялась мотивация продолжать идти по этому пути? Джейкоб ответил так: «Я очень социально мотивирован, и мои друзья фронтенд-разработчики прямым текстом скажут мне, если увидят какую-то лажу. Это круто. Я просто хочу кодить и работать с друзьями».

В Twitter он называет себя «компьютерным лузером». Его самый популярный пост описывает его так: «Худший инженер в компании, но третий по крутости». Такое отношение полностью противоречит стереотипному образу программиста.

Расмум Лердорф (создатель PHP) часто выдает спорные цитаты:

«На самом деле я ненавижу программирование, но я люблю решать проблемы».

«Есть люди, которым нравится программирование. Я не понимаю, почему им нравится программирование».

«Я не настоящий программист. Я компоную вещи до тех пор, пока всё не заработает, и я не смогу двигаться дальше. Настоящие программисты скажут: «Да, это работает, но у тебя не хватает памяти. Пожалуй, тебе стоило бы это исправить». А я просто перезапускаю Apache через каждые 10 запросов».

Дэвид Хайнемайер Хенссон (создатель Ruby on Rails) однажды сказал в одном интервью: «Забавная история. Когда я программировал на PHP или Java, я постоянно хотел чего-то другого. Я искал другой язык программирования, потом еще другой… просто что-нибудь ещё, частично чтобы не дать мне заскучать, программируя на языках, на которых я программирую. Я совершенно не был уверен, что буду работать программистом, когда писал на PHP и Java».

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

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

  • Для кого-то это дерьмовое ПО, а для кого-то фултайм-работа.
  • Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный человеку.
  • У ПО и церквей много общего — сначала мы их строим, потом мы на них молимся.

Если у всех программистов и правда так много таланта и страсти, почему тогда они так шутят? Я нашёл несколько любопытных цитат в статье на Medium, которая сильно перекликалась с моим опытом изучения программирования:

  • Всегда найдется кто-то, кто будет говорить вам, что вы всё делаете неправильно.
  • Всегда найдется кто-то, кто будет говорить вам, что вы не настоящий кодер.
  • Если вы будете переживать из-за «кредо гика», это вас постепенно убьет.

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

Поделитесь своим мнением в комментариях.

Определение технических способностей у ребёнка

1. Когда проявляются технические способности у детей.

2. Тест на определение технических способностей у ребёнка

3. Как развить технические способности ребёнка.

 

1. Когда проявляются технические способности у детей?

Технические способности часто проявляются позже, чем многие другие. У некоторых детей технические способности можно заметить ещё в старшем дошкольном и младшем школьном возрасте. Таких детей интересуют машины, роботы и механизмы гораздо больше, чем всё остальное. Однако говорить о развитых технических способностях принято гораздо позже – с 10-12 лет. У некоторых детей технические склонности становятся заметными уже в более старшем возрасте- 14-15 лет.

Итак, как определить, что у Вашего сына или дочери технические способности и что с этим делать? Пройдите короткий тест (это займёт 2 минуты).

 

2. Тест на определение технических способностей у ребёнка

1. Ребёнок явно интересуется механизмами и машинами, пытается понять, как что устроено? (Да / Нет)

2. Ребёнок предпочитает играть с машинами, роботами и конструкторами? (Да / Нет)

3. Ребёнок часто рисует технику, машины. Рисунки при этом похожи на чертежи и схемы, часто детализированы? (Да / Нет)

4. Ребёнок пытается собрать из деталей конструкторов что-то своё (не по инструкции)? (Да / Нет)

5. Ребёнок «замирает» при просмотре мультфильмов «Смешарики ПИН КОД»? (Да / Нет)

6. Ребёнку нравится читать техническую литературу, в том числе предназначенную для взрослых? (Да / Нет)

Результаты:

Больше 4 ответов «Да» – Возможно, у Вас растёт будущий технический гений.

2-3 ответов «Да» – У ребёнка явно есть технические способности.

0-1 ответ «Да» – Нельзя сказать, что у ребёнка доминируют технические способности. Скорее всего, Ваш сын или Ваша дочь сильны в чём-то другом. Правда, технические способности можно развивать.
 

3. Как развить технические способности ребёнка.

Итак, Вы обнаружили, что у ребёнка есть технические способности и явная любовь к технике. Что же с этим делать?

Прежде всего, нужно помнить, что технические способности — штука довольно сложно устроенная, и в нашем мире весьма и весьма востребованная. Помогите ребёнку!

Таким детям нужна особая среда — техническая. Как её создать?

1. Покупайте конструкторы – лучше, если они будут разными.

3. Запишите детей в технические кружки.

4. Научите ребёнка программировать.

5. Помогите ребёнку разобраться в электронике и робототехнике, научите его создавать собственные устройства и программировать их.

С первыми тремя пунктами всё понятно. А вот с последними пунктами… Если Вы сами отлично во всём этом разбираетесь – круто. Тогда без вопросов. А если нет? Или не так хорошо, как хотелось бы? Для этого есть специальные конструкторы. Например, «Эвольвектор», который сделан по принципу «от простого к сложному» и помогает разобраться в том числе в школьной программе по физике, научит программировать и поможет собрать свои первые электронные устройства и роботов.

Эвольвектор хорош своей продуманностью и последовательностью: ребёнок учится не просто делать устройства по схеме, но и понимать, почему схема именно такая, какая есть. Есть возможность поэкспериментировать – поменять какие-то компоненты, параметры и увидеть результат. Это именно то, что нужно: не просто собирать по картинке, а развитие вдумчивого понимания, что как устроено, и как делать можно и нужно, а как нельзя, и почему.

На сегодняшний день у Эвольвектора есть три направления: основы электроники, программируемые контроллеры, одноплатные компьютеры.

Наша команда искренне желает успеха Вашим детям. Именно для таких детей «Эвольвектор» работает уже четвёртый год.

Делайте открытия вместе с нами!

Как оценить навыки программирования. Обзор лучших методик …

Знаете ли вы, что стоимость найма разработчика программного обеспечения может достигать 60 тысяч долларов? Если у вас нет огромного бюджета на набор персонала, вы не можете позволить себе нанять сотрудника, чьи навыки еще не проверены, и просто надеяться на лучшее. Фактически, знание того, как оценить навыки программирования, будь то клиентская часть, серверная часть или полный стек, является фундаментальным для любого успешного процесса найма ИТ-специалистов.

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

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

Давайте посмотрим.

Как оценить навыки программирования — методы и советы

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

Портфолио

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

Работали ли они над чем-нибудь похожим на ваш проект в прошлом? Или, может быть, они смогут продемонстрировать уникальный подход к решению проблемы, с которой они справились? Ответы на эти вопросы должны дать вам хорошее первое впечатление о том, кто ваш кандидат.

GitHub

Думайте о GitHub как о расширении портфолио вашего кандидата.Обратите внимание на следующие данные в их профиле:

  • Количество репозиториев — это даст вам представление о количестве проектов с открытым исходным кодом, в которые они внесли свой вклад.
  • Количество вкладов — вы увидите, насколько они активны на GitHub (что может многое сказать о компетенциях кандидата). В частности, проверьте, сколько коммитов / запросов на вытягивание / или проблем они открыли.
  • Количество подписчиков — это показывает их место в сообществе разработчиков.
  • Когда они присоединились к GitHub — простой способ дважды проверить, соответствует ли опыт разработки программного обеспечения, заявленный вашим кандидатом в его резюме.

Помня об этом, важно, чтобы вы также знали об ограничениях GitHub.

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

Переполнение стека

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

Тесты алгоритмического программирования (не рекомендуется)

Тесты алгоритмического программирования — это популярный метод оценки уровня знаний в выбранном языке или среде. Однако мы настоятельно рекомендуем вам не полностью полагаться на них при проверке компетенций вашего кандидата. Почему нет? Потому что им не хватает контекста, и они позволяют тестировать навыки, которые в лучшем случае связаны с разработкой программного обеспечения.

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

Итак, как вы можете проверить реальные навыки вашего кандидата в разработке программного обеспечения? Выполняя рабочие образцы тестов кодирования , на чем мы специализируемся в DevSkiller.

Рабочие образцы кодирования испытаний

Тесты кодирования

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

Согласно исследованию Университета Айовы, пробные рабочие тесты также являются лучшим предиктором будущей успеваемости кандидата.

Итак, как они работают?

Эти тесты кодирования позволяют моделировать день из жизни разработчика программного обеспечения в вашей компании, давая новобранцам практическое задание, будь то проект разработки или задача DevOps по настройке системы.Им предоставляется доступ к той же среде, которую обычно используют ваши разработчики — библиотекам, фреймворкам, GitHub или Stack Overflow. Все это позволяет им получить представление о том, как может выглядеть «первый день», если они работают на вас.

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

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

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

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

Вот несколько других причин, по которым вам следует включить тест на кодирование рабочего образца в свой процесс приема на работу:
  • Они объективны .Каждый кандидат работает над одной задачей. Также тест проводится перед любым собеседованием. Это важно, потому что бессознательная предвзятость по-прежнему представляет собой огромную проблему при приеме на работу. Кодирование образцов работы помогает гарантировать, что опытным кандидатам не откажут по личным, субъективным мотивам.
  • Кандидаты не наблюдаются . Некоторые кандидаты могут оказаться в стрессе и не успеть, если их первый тест по кодированию будет проходить во время собеседования. Тесты по программированию рабочих образцов позволяют кандидату выполнить свое первое задание по программированию без присмотра.
  • Автоматизированные . С таким решением, как DevSkiller, вашим техническим интервьюерам не нужно проверять тесты вручную, и они могут быстро отфильтровать кандидатов с наивысшими баллами.
  • Они экономят время ваших кадровых и ИТ-специалистов. Целью этих тестов для разработчиков является предварительный отбор ваших кандидатов на ранних этапах приема на работу. В результате вы сможете проводить собеседования только с самыми лучшими кандидатами. Это означает, что риск вовлечения вашей HR-команды, технического директора или других старших разработчиков в неудачный набор персонала сведен к минимуму.Узнайте, как CodeValue сократила процесс набора на 50% с DevSkiller!

Интервью

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

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

Что касается целей технического собеседования, следует проверить:

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

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

Рекомендуемая литература: Как дать техническое интервью: 7 советов по техническому собеседованию

Живое кодирование

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

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

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

Рекомендуемая литература: Онлайн-собеседование по программированию и удаленное использование CodePair

Как оценить навыки программирования: резюме

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

Самый эффективный метод оценки — это выполнение рабочих примеров тестов по кодированию , которые позволяют вам проверить навыки ваших кандидатов в решении проблем, а не только их знание языка или структуры.

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

С DevSkiller вы можете персонализировать и автоматизировать тесты кодирования рабочих образцов. Если это звучит интересно, свяжитесь с нами, и давайте обсудим, чем мы можем помочь!

Кредит изображения: Фотография Кевина Ку на Unsplash

7 способов подтвердить свои навыки программирования | Автор: Шафи Ризви

1.Участвуйте в проектах с открытым кодом

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

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

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

Если вы внесли какой-либо вклад с открытым исходным кодом, это огромный плюс, чтобы доказать свой талант и верный способ произвести впечатление на интервьюера.

Вот руководство о том, как внести свой вклад в проекты с открытым исходным кодом.

2. Ответьте на вопросы о переполнении стека

Переполнение стека — лучший друг любого программиста.Всякий раз, когда программист сталкивается с проблемой при кодировании, вероятно, первое, что он делает, это находит ответ на Stack Overflow. Но было бы здорово, если бы вы могли ответить на вопросы о технологиях, которыми вы владеете, и заработать себе репутацию?

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

Вот руководство, как ответить на вопросы о переполнении стека.

3. Оценка по HackerRank, LeetCode и GeeksforGeeks

HackerRank, LeetCode и GeeksforGeeks — отличные сайты для улучшения ваших навыков программирования, решая различные типы задач. Вы можете использовать предпочитаемый вами язык программирования для решения проблем. Вы также можете выбрать свою тему для практики с желаемым уровнем сложности. Например, вы можете выбрать задачу, связанную с массивами с требуемым уровнем сложности, и приступить к решению.

В зависимости от того, как вы решите, вы получите балл. Эти оценки помогут отобразить ваш талант в решении проблем, использовании алгоритмов, структур данных и т. Д.

4. Попробуйте новые проекты

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

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

5. Написание статей

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

Было бы здорово, если бы вы могли писать статьи и на другие темы, кроме программирования. Вам не нужно писать конкретные вещи, связанные с другими полями, но вы можете написать что-то общее, добавив некоторые технические аспекты, которые покажут, что у вас есть некоторые базовые знания и в других областях. Кроме того, это способ продемонстрировать свои навыки письменного общения, чего не хватает большинству программистов.

6. Сотрудничайте с друзьями в других областях.

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

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

7. Покажите, что вы увлечены тем, чем делитесь в социальных сетях.

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

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

Как определить, хороший ли вы программист

Вы решаете проблемы с программированием. Вы выкачиваете строку за строкой кода во время спринтов Scrum. Вы мечтаете в Ruby and Go. Вы программист, разработчик программного обеспечения, инженер-программист. Это не только твоя работа, это твоя жизнь.

Но здесь, в New Relic, у нас возник простой вопрос: как узнать, действительно ли вы хороши в этом? (И, что не менее важно, как организации, занимающиеся разработкой программного обеспечения, и менеджеры по разработке программного обеспечения определяют, кто хорошо выполняет свою работу, а кто нет?)

«Нет, — говорит Мак Браунинг, технический менеджер DigitalOcean.«Лучшие инженеры, которых я знаю, постоянно сомневаются в своих способностях, и я думаю, что отчасти это и делает их великими».

Требуется смирение

На самом деле, если вы думаете, что знаете все, что нужно знать о разработке программного обеспечения, это не положительный знак. Если вы думаете, что вы молодец, что ж, вы думаете, что вы молодец, независимо от того, отражается ли это в продуктах и ​​услугах, которые вы создаете.

«Оценка разработчика больше похожа на оценку психолога, чем оценка сталелитейщика», — говорит Ли Атчисон, старший директор по стратегической архитектуре New Relic. «Это субъективная профессия с субъективными оценками и сильной потребностью в мягких навыках, чтобы быть действительно отличными». А с появлением DevOps, full-stack инженеров и подходов к гибкому программированию, которые фокусируются на том, насколько хорошо код работает в реальном мире, оценка навыков программирования становится еще более сложной.

Чрезвычайно сложно измерить качество и производительность программного обеспечения

Это не означает, что индустрия программного обеспечения не пыталась — неоднократно, но без особого успеха — придумать точные показатели производительности и навыков программиста.

В прошлом методы измерения производительности разработчиков включали измерение SLOC (исходных строк кода), которые были созданы за день, неделю или месяц. Сложность кода часто измерялась с помощью ветвей / SLOC (ветвление считалось изменением направления кода, например, в выражении if / while). Качество кода часто измерялось с использованием «Дефектов / SLOC», в то время как покрытие QA с помощью «процента затронутых SLOC» или «процента затронутых ветвей».

Более поздние попытки количественной оценки и измерения качества программирования включают отслеживание количества изменений, внесенных в проекты с открытым исходным кодом, или даже количества последователей, которые разработчик имеет на GitHub.

«Но все эти подходы, старые и новые, имели серьезные недостатки», — говорит Ли. «Они измеряли и поощряли поведение, которое часто — почти всегда — противоречило целям эффективного создания отличного программного обеспечения». Например, Ли указывает, что использование SLOC для измерения скорости программирования побуждает разработчиков писать длинные неэффективные процедуры: количество важнее качества.

Кэл Висса, старший менеджер по продукту CloudBees, указывает на статический анализ кода (также известный как анализ исходного кода) как еще один критерий качества программирования.Он, безусловно, имеет свое место и может быть полезен для определения того, насколько хорошо ваш код может обрабатывать пограничные условия, насколько легко его отлаживать и хорошо ли он документирован.

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

Образование — не лидер

То же самое и в сфере образования: обучение информатике может быть ценным, но даже самая необычная степень вряд ли является самостоятельным показателем навыков программиста.«Некоторые из лучших программистов происходят из лучших университетов; другие выходят из местных школьных программ, — отмечает Ли. «А некоторые из худших программистов пришли из лучших университетов, — добавляет он, — или из школы программирования». Фактически, некоторые из самых востребованных программистов в мире являются самоучками или имеют совершенно другое академическое образование.

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

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

Итак, еще раз: как узнать, что вы хороши? Это начинается с признания субъективности ремесла. По словам Ли, проблема многих из вышеперечисленных подходов заключается в том, что они неправильно применяются в качестве объективных показателей способности к программированию.

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

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

Вопрос 1: Действительно ли вы «понимаете» и принимаете врожденную субъективность программирования?

«Никогда и никогда не бывает единственного правильного ответа — всегда есть спектр правильности и неправильности», — говорит Ли. «Понимание этого, принятие этого и применение этого к своей работе, своей команде и продукту — это, пожалуй, самое важное, что может сделать программист, чтобы стать отличным программистом ».

Вопрос 2: Вы скромны?

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

«Синдром самозванца часто не позволяет нам распознать собственные достижения, и [хорошие] программисты определенно не защищены», — говорит Мак Браунинг.Но «в небольших количествах и в контексте, это может быть признаком того, что как инженер вы постоянно заставляете себя расти».

Вопрос 3: Используют ли ваши клиенты продукты, которые вы разрабатываете, и наслаждаются ли они ими?

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

«Если ваши клиенты [или] конечные пользователи используют ваш продукт каждый день и получают удовольствие, это лучший показатель ваших навыков разработчика», — говорит Кэл Висса.

Вопрос 4: Вы одержимо пересматриваете основы?

Хорошие программисты привержены деталям и постоянно возвращаются к основам: «Они очень гордятся тем, что их код модульно протестирован, хорошо документирован, следует принципам DRY [не повторяйся] и ставит простоту выше сложности», — Кэл. говорит.Иными словами, создаете ли вы модульный и повторно используемый код, который помогает решать проблемы и предлагает ценность, выходящую за рамки исходной реализации?

Вопрос 5: Вас тоже интересуют «мягкие» качества?

По словам Ли Атчисона, многие из наиболее важных качеств, отличающих хорошего программиста от слабого, относятся к категории «мягких навыков». Ли ищет возможности и готовность разработчика к

  • Работа в команде с большим количеством людей
  • Устранение стресса, возникающего в непредсказуемых направлениях, и его изменения
  • Работайте над проблемами и находите решения, а не жаловайтесь на проблемы и избегайте их
  • Поймите, что элегантность дизайна важна, но не обязательно означает хорошие программы
Вопрос 6: Измеряете ли вы ценность, которую создает ваш код?

«Я думаю, что большинство успешных инженеров измеряют свой успех не строками кода [написанными] или фиксированными билетами, а оценкой их стоимости», — говорит Мак Браунинг.

Ценность

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

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

Так как дела?

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

Пройдите этот тест, чтобы узнать, сможете ли вы стать профессиональным программистом.

Самый частый вопрос, который мы получаем от людей, заинтересованных в посещении Coder Foundry:

«Есть ли у меня опыт, навыки, личность, талант, чтобы получить высшее образование? школу и получить отличную работу в качестве разработчика? »

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

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

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

Многие исследователи изучали, что нужно для изучения программирования.

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

Исследователи обнаружили два сюрприза (PDF):

Сюрприз №1: Отсутствие предыдущего опыта программирования не является препятствием для сделки.

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

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

Так что же имеет значение? Это подводит нас к …

Сюрприз №2: Сосредоточенность помогает вам научиться программировать больше, чем естественный ум

Еще из исследования: «Тест проводился до первой недели вводного курса программирования . .. Примерно половина из них использовала рациональная модель, которую они последовательно применяли, чтобы ответить на большинство или все вопросы …

Последовательная подгруппа имела 85% успешных результатов на экзамене по курсу, а остальные — 36% ».

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

Те, кто провалили класс, также обладали интеллектом, чтобы мыслить логически, но они применяли свои «ментальные модели» непоследовательно .

Это означает, что IQ не гарантирует хорошей карьеры программиста. Напротив, ваша способность концентрироваться и упорствовать при решении проблем с кодом является самым надежным предиктором вашего успеха в программировании.

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

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

Называется «ГРИТ»!

Анджела Дакворт, психолог-новатор и исследователь из Пенсильванского университета, определяет стойкость как «страсть и настойчивость для достижения долгосрочных целей».

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

Мы согласны с новым исследованием твердости.

Самые успешные студенты в Coder Foundry — это те, кто готовы потратить много времени на создание программных приложений, используя методы и инструменты, которые они только что изучили за несколько часов до этого.

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

Дакворт продолжает:

«Упорство подразумевает упорную работу над вызовами, поддержание усилий и интереса на протяжении многих лет, несмотря на неудачи, невзгоды и плато.

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

У вас есть выдержка? Пройди этот тест и узнай!

Эта онлайн-викторина основана на методе, который Дакворт использовал для измерения стойкости студентов.Пройдите викторину и напишите нам свой результат в Твиттере.

Если вы недовольны своей стойкостью, у меня есть хорошие новости. Страсть и решительность — не застойные черты характера. Вы можете выращивать твердость. Вы можете развить то, что нужно, чтобы стать профессиональным программистом. Узнайте больше в блоге Coder Foundry.

10 навыков, необходимых для кодирования

По сути, кодирование — это выражение и решение проблем. Вы можете сосредоточиться на его приложениях, на языках программирования, но независимо от того, как вы это практикуете, вы будете развивать эти два важных навыка, которые помогут вам во всех аспектах жизни.Помимо экзистенциальной ценности, обучение искусному программированию предложит вам множество возможностей трудоустройства, возможность создавать свой собственный график / работу из любого места, высокую заработную плату за меньшее количество рабочих часов, желание угодить клиентам, которые нуждаются / ищут вашу помощь, и многое другое. . У программистов есть больше времени для работы над своими увлечениями, побочными проектами и чувство уверенности в себе, которого нет у большинства сотрудников. Они тратят свое время на то, чтобы веб-сайты, приложения и системы работали, одновременно создавая реальные решения и улучшая опыт как для конечных пользователей, так и для работодателей.Программисты уделяют больше внимания, потому что проблемы, которые они решают, требуют постоянных, сосредоточенных усилий. Это ведет к повышению производительности во всех сферах жизни. Одно из величайших преимуществ кодирования — это постоянный переход в состояние потока, в котором время, отвлечение и разочарование исчезают, позволяя кодировщику объединиться с выполняемой задачей. По всем этим причинам повседневное или профессиональное программирование может улучшить вашу жизнь. Итак, с чего начать? Здесь мы рассмотрим десять навыков, которые нужны каждому кодеру.

1) Самостоятельность

Этот огромный. Когда вы начинаете писать код, это может вас ошеломить. Что вам нужно: фронтенд или бэкэнд? Какие языки программирования следует использовать? С чего начать? Помня, что единственный способ съесть слона — это откусить за раз, выбрать что-нибудь и начать. Существует бесконечное количество ресурсов, где вы можете научиться программировать, но вам решать, как их найти и взаимодействовать с ними. Будут моменты, когда вы захотите сдаться или попросите кого-нибудь показать вам, как что-то делать, но чем больше вы сопротивляетесь этим побуждениям и пытаетесь потерпеть неудачу в одиночку, тем больше будет ваш долгосрочный успех.Чтобы добиться успеха в программировании, вам нужно преодолеть нетерпение, разочарование, отвлечение и зависимость от внешних сил для решения технических проблем (от чего мы все все больше полагаемся). Чтобы бороться с этими препятствиями, вы можете сделать несколько вещей. Первое — это принятие на себя ответственности.

Вы в наибольшей степени влияете на то, где вы находитесь, что вы знаете, на свои способности и как их все изменить. Никогда не поздно признать это и изменить свой подход и усилия.Как только вы возьмете на себя ответственность, информация, которую вы потребляете, и то, как вы ее применяете (ваш интерес, учеба и усилия), будет определять вашу способность преодолевать свои ограничения (в данном случае не умение кодировать, а не научиться делать это). Важно иметь в виду цель. Почему ты хочешь писать код? Какую проблему вы хотите решить или какой проект вы хотите реализовать? Знание ответов на эти вопросы поможет вам сузить круг вопросов, на чем следует сосредоточить свои усилия, какие языки изучать и т. Д.Наконец, уверенность в своих силах сводится к вашему выбору. Нельзя просто слепо выполнять работу. Точно так же, как вам нужно иметь цели, на которые направлена ​​работа, вам нужно выбрать путь, который приведет вас к ним, независимо от того, что сделали другие, или оставив это на волю случая.

2) Язык

Это может показаться очевидным, но для того, чтобы писать код, вам нужно выучить хотя бы один язык программирования или сценариев. Некоторые ресурсы для новичков включают совершенно бесплатную CodeAcademy, которая помогла 24 миллионам человек начать свой опыт программирования, edX, основанный Гарвардом и Массачусетским технологическим институтом, который предлагает 60 школ и GitHub, который дает вам доступ к 500 бесплатным книгам по программированию, охватывающим 80 различных языков. .Эксперты предлагают попытаться овладеть одним языком, а не пытаться выучить немного из нескольких, точно так же, как вы бы изучали французский, итальянский или испанский, а не все три сразу. Так с какого языка начать? Это во многом связано с тем, чего вы пытаетесь достичь, но есть три, которые выделяются своими многогранными приложениями, последовательной полезностью и доступностью для новичков. Это Python, Ruby и JavaScript.

Python, разработанный в 80-х годах, считается одним из самых простых для изучения языков программирования.Он бесплатный, с открытым исходным кодом и чаще всего классифицируется как язык сценариев (то есть не требует явного этапа компиляции). Сегодня это один из самых распространенных языков программирования, который используется такими компаниями, как Google, Yahoo! и НАСА. Ruby — аналогичный доступный для новичков, чрезвычайно распространенный язык сценариев. Это динамический объектно-ориентированный язык сценариев, используемый для разработки веб-сайтов и мобильных приложений. Ruby был разработан Юкихиро Мацумото, чтобы быть простым, логичным и не требующим глубоких знаний команд.Ruby on Rails помог расширить его полезность для Интернета и используется для создания инфраструктуры для Twitter, Groupon и GitHub. Он также часто используется для внутренней разработки. JavaScript (не Java) чаще всего используется в качестве языка сценариев на стороне клиента для интерфейсной разработки. Это наиболее часто используемый язык программирования для создания веб-сайтов и игр для использования в Интернете, большая часть его синтаксиса заимствована из языка программирования C. JavaScript универсален, работает на всех платформах и находится в вашем браузере (установка не требуется). Все, что вы хотите создать в Интернете, потребует некоторых знаний JavaScript.

3) Логика

Были ли вы магистром геометрии в средней школе? Доказательства любви? Жить, чтобы оценить факты и прийти к полезным выводам для решения проблем? У вас может быть скелет в одном из самых важных навыков для программистов. Есть причина, по которой так много людей, изучающих математику и физику, становятся программистами. Выяснение того, какая ошибка / ошибка / неправильная строка кода привела к проблеме в проекте, частично интуитивно понятно, но часто является логическим упражнением.Так как же развить свои логические навыки? Относитесь к ним как к мышцам и тренируйте их. Существуют такие инструменты, как Dcoder, которые ставят перед вами задачи / проблемы, которые развивают ваши рассуждения. Другой способ развить логические навыки — это условное мышление, что по сути означает, если то, то то. Например, если вы подниметесь на гору более чем на полпути, у вас пойдет кровь из носа. Если вы останетесь ниже половины точки, вы этого не сделаете. В программировании этот стиль мышления используется для проверки переменных на соответствие значениям и упорядочивания действий в зависимости от того, какие условия выполняются.Это можно понять так:

if (условие оценивается как True):
, тогда эти действия выполняются только для «True».
else:
в противном случае выполняются только для «False».

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

4) Внимание к деталям

Многие программисты и кодировщики не ходят в школу, чтобы изучить свое ремесло. Есть разные способы измерения способностей к программированию, но ничто не может заменить усилия, которые человек прилагает самостоятельно. Это одна из немногих областей в мире, где упорный труд самоучки может привести к прибыльной и востребованной карьере. То, что вам не НУЖНО учить или обладать необходимыми способностями, будет смягчено тем, насколько внимательно вы сможете уделять внимание деталям.Понимание взаимосвязанности команд, общая осведомленность и языковая точность — все это чрезвычайно важные части набора инструментов кодера. Один из способов сделать это — через организацию. Вместо того, чтобы ломать себе голову каждый раз, когда вы упускаете из виду важную деталь, составьте план игры, на основе которого вы сможете оценивать, пересматривать и улучшать свою работу. Может быть, прогуливаясь по написанному вами коду, или пообещав перечитать соответствующую информацию в разное время дня, работая с перерывами. Что бы ни сработало для вас, просто убедитесь, что у вас есть система, выходящая за рамки: «Я буду обращать внимание на мелочи.«Планирование своего времени ведет к более продуктивной и эффективной работе.

Повышение внимания к деталям во многом связано с пониманием того, что искать. С этой целью составьте списки. Когда вы узнаете что-то, что, как вы знаете, будет полезно снова и снова, запишите это. Когда у вас есть работа, исследования, новые навыки или языки, которые нужно сделать или выучить, перечислите, чего вы хотите достичь и как вы это делаете. Когда вы добьетесь чего-то в списке, поставьте рядом с ним галочку (не зачеркивайте, возможно, вам придется вернуться к этому). Еще один способ улучшить свое предвидение — это придерживаться расписания. Возможно, вы не будете такими острыми после обильной еды или первым делом утром. Лучше всего вы поймете, когда будете наиболее внимательны, но примите это к сведению и выполняйте программирование или кодирование, когда вы на вершине своей игры. Еще один проверенный временем способ улучшить концентрацию внимания — это медитация. Даже сосредоточение на дыхании 10-20 минут в день принесет дивиденды на всю оставшуюся жизнь. Еще один удивительный способ улучшить концентрацию внимания? Упражнение.По крайней мере, 30 минут в день приводят к заметному улучшению концентрации внимания. Самое главное, будьте нежны с собой. Развивайте чувство, когда нужно идти вперед, несмотря на желание сломать, но также делайте короткие перерывы, когда чувствуете себя немотивированным или испытываете проблемы с вниманием к деталям. Тогда, когда вы вернетесь, вы будете свежее и сможете лучше использовать свои усилия.

5) Признание глупости

Это также может быть «понимание того, как думают компьютеры. «Нам всем говорили не делать предположений, но исходить из здравого смысла от имени компьютера во время программирования или кодирования — это рецепт катастрофы. Компьютеры глупы и безжалостны. Их сила в их вычислительной мощности, а не в независимой или творческой мысли. Они будут делать именно то, что им велят, даже когда может показаться очевидным аккуратное изменение инструкций или отказ от повторения одних и тех же снова и снова. Такие люди, как Билл Гейтс и Стивен Хокинг, предупреждали об искусственном интеллекте, ведущем к апокалипсису.Ник Бостром, студент, изучающий суперинтеллект и директор Института будущего человечества в Оксфордском университете, изложил, как искусственный интеллект может разрушить мир в соответствии с инструкциями по увеличению количества скрепок в мире. Если этот ИИ смог изобрести технологии и построить производственные предприятия… смотрите. «Как мог ИИ сделать так, чтобы скрепок было как можно больше?» — спросил Бостром. «Единственное, что он мог бы сделать, — это убедиться, что люди не отключили его, потому что тогда скрепок будет меньше. Так что он может сразу избавиться от людей, потому что они могут представлять угрозу. Кроме того, вам понадобится как можно больше ресурсов, потому что их можно использовать для изготовления скрепок. Как, например, атомы в человеческих телах ». Поэтому, когда вы пишете код, убедитесь, что вы вводите именно то, что вы ожидаете получить, ни больше, ни меньше. Программа не может вносить коррективы или улучшения, о которых не было сказано заранее.

Одним из величайших достижений в программировании стало создание алгоритмов, которые заставляют компьютеры мыслить более независимыми, блестящими и продуктивными способами.Изучите такие алгоритмы, как Quicksort, Compression Huffman, быстрое преобразование Фурье и метод Монте-Карло, чтобы понять, что я имею в виду. Все это помогло разработать главную цель программистов: заставить компьютеры делать больше тяжелой работы с помощью искусственного интеллекта, но делать это таким образом, чтобы это было полезно, целенаправленно и не приводило к уничтожению нашего вида. Поэтому, когда вы пишете код, старайтесь думать так, как это делает компьютер, и уделяйте внимание деталям, чтобы точно указать, что вы хотите, не оставляя ничего на волю случая или адаптации.Вам не нужно указывать ВСЕ, некоторые вычисления будут произведены автоматически, чтобы вы могли свободно управлять программой. Но чрезвычайно важно поддерживать такой образ мышления, при котором вы не доверяете тому, над чем работаете, чтобы делать то, о чем прямо не было сказано.

6) Абстрактное мышление

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

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

7) Терпение

В ужасно жаркие дни у вас есть выбор: бунтовать против жары, пыхтения, пыхтения и позволять волнению перегреть вас еще больше. Или вы можете ему уступить. Примите тот факт, что вы готовите на солнце, представьте, как вы таетесь о тротуар, стирая в уме разлуку с жаром.Кодирование чрезвычайно сложно. Ничего из того, что вы читали здесь или где-то еще, не следует интерпретировать иначе. На всех этапах, но особенно в начале, вы должны ожидать крайнего разочарования. Однако ваша способность противостоять этому разочарованию и преодолевать его, не позволяя ему разочаровывать вас, будет служить вам во всем, что вы делаете. Рассматривайте свое разочарование как инструмент развития терпения. Когда вы пишете код, вы, вероятно, пройдете через этот опыт: вы что-то напишете. Вы в этом очень уверены.Вы дважды и трижды проверяете его, но он все равно не работает. Вы не представляете, почему это не работает, что вы сделали не так, как это исправить и т. Д. Это может быть сокрушительный груз. Вы можете чувствовать себя бесполезным или, как будто никогда не добьетесь успеха, не только в этом проекте, но и в жизни. Обретите утешение в том факте, что бесчисленное количество людей чувствовали это до вас. Важно то, как вы справляетесь с этим чувством. Если вы верите в свою способность преодолевать, находить новый маршрут или даже начинать с нуля и совершенствоваться, вы можете и будете (или, по крайней мере, у вас будет лучший шанс, чем у тех, кто полностью сдастся).

Внимание к деталям идет рука об руку с выделением времени на то, чтобы раскрыть их смысл. «Детали имеют значение, — сказал Стив Джобс. «Стоит подождать, чтобы сделать это правильно». Признайте, что когда вы боретесь, то, с чем вы имеете дело, неудобно, но не невыносимо. Будет очень полезно повторять это про себя, пока это не укоренится. Позвольте боли, которую вы чувствуете от разочарования, подтолкнуть вас к поиску решений. Решения редко приходят из отчаяния или самого быстрого и безумного подхода.Большая часть терпения заключается в разговоре с самим собой. Когда вы слышите голос: «Ты никогда этого не сделаешь, это невозможно, просто сдавайся», будьте готовы противостоять ему более решительным, мягким и добрым голосом, который представляет вашу более глубокую и настойчивую сущность. Один из лучших способов развить терпение — это чтение или любая продолжительная деятельность, требующая сосредоточения. Чем дольше вы сможете заниматься одним делом, несмотря на искушение бросить курить или заняться другим, тем лучше будет ваша способность преодолевать разочарование от программирования.

8) Сильная память

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

Когда дело доходит до долговременной памяти, вам помогут бесконечные руководства, веб-сайты и инструменты, которые помогут вам вспомнить важную информацию. По мере развития ваших способностей (и желания выполнять проекты быстрее) вам будет полезно запоминать больше информации, но не о чем сразу беспокоиться. Однако, когда дело касается кратковременной памяти, вам нужно делать все возможное, чтобы развивать и улучшать свои природные способности.Кодировщикам необходимо знать сразу много разных частей информации и знать, как все они будут реагировать друг на друга. Знание и способность визуализировать дизайн, поток данных, алгоритмы, структуры данных и то, как они влияют друг на друга, отличает вас от обычного кодера. Сначала может показаться, что вы жонглируете селедкой, а вокруг вас прыгают хищные дельфины, но это становится легче. Здесь память и поток совпадают. Чем больше вы можете потерять себя в проекте, тем меньше будет похоже на борьбу за запоминание различных аспектов работы.В этом также могут помочь техники медитации и упражнения на память.

9) Научный метод

Проблемы / задачи кодирования могут показаться бесконечными, пугающими и невозможными для начала. Вот где использование научных методов для преодоления препятствий и самих проектов может оказаться чрезвычайно полезным. На большинстве должностей вы разрабатываете и изучаете множество способов решения проблем в течение первого года или около того, а затем применяете их с этого момента, иногда также разрабатывая новые решения.Но в программировании значительная часть вашего времени будет потрачена на разработку решений проблем, которые никогда не решались (по крайней мере, не так, как вы с ними сталкиваетесь). У вас не будет информации о том, как их решать, вам придется использовать метод проб и ошибок. Будет чрезвычайно полезно рассматривать кодирование как исследование или эксперимент. Это также поможет вам с точки зрения сроков. Поскольку вы делаете что-то новое, вы честно можете рассчитывать на свободу действий, потому что неясно, сколько времени потребуется, чтобы должным образом решить проблему.Выполнение этих шагов поможет вам в любом проекте, над которым вы работаете.

Начните с гипотезы. Как вы думаете, чего достигнет программа, которую вы пишете? Или как вы думаете, как выглядит программа, которая может решить конкретную проблему? Затем вы намечаете, как вы будете писать код — на бумаге или в уме. Затем вы взломаете его и посмотрите, что у вас получилось. Далее следует сравнение того, что вы создали, и элемента управления или того, что программа должна была делать.Этому также способствует показ программы другим и получение их отзывов о том, что вы сделали. Соответствует ли созданная вами программа вашим ожиданиям? Выполняет ли он свою функцию? Наконец, вы начинаете отладку или приближаете программу к идеалу, который вы себе представляли.

10) Общение и сочувствие

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

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

c ++ — есть ли не субъективный способ измерения навыков программирования для соответствия тестам по программированию?

Прежде чем начать читать:

Я не знал, следует ли мне опубликовать это здесь или на рабочем месте, но поскольку мой вопрос больше касается части «языка программирования», я подумал, что здесь она лучше подойдет. Мои извинения, если это не так.

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


Примерно несколько часов назад меня попросили пройти промежуточный тест C ++ при приеме на работу. Оказалось, что этот тест мне не подходит для программистов среднего уровня.

Хотя я явно не считаю себя опытным программистом на C ++, я тоже не считаю себя абсолютным новичком. Я уже несколько лет практикую C ++, а также другие языки программирования и более концептуальные вещи, такие как алгоритмы и шаблоны проектирования. Если бы я назвал себя программистом, я бы сказал, что:

  1. Я не специалист ни в одном языке, но пока я знаю достаточно вещей, чтобы справиться с каждым проектом, который мне дали.
  2. Если было что-то, чего я не знал, я узнал это «на лету» и мог продолжить проект, над которым работал.
  3. Имею опыт работы на C ++.

Тем не менее, этот промежуточный тест задавал мне очень конкретные вопросы, такие как влияние перегрузки оператора new или строковые манипуляции с strtok , memmove и так далее. Я знаю, что эти вещи могут быть полезны, но даже в бизнес-контексте мне никогда не приходилось делать такие вещи.Мне пришлось делать другие конкретные вещи, но, к сожалению, это не входило в задаваемые вопросы.

(В моем контексте приложение предназначено для разработки JavaScript с очень сильным алгоритмическим измерением, но поскольку я никогда не использовал JavaScript, они протестировали меня на C ++, так как я собираюсь больше работать над частью алгоритма. Так что на самом деле они не тестирование меня в конкретном контексте, который оправдал бы конкретные вопросы).

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

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

Как можно эффективно измерить свои навыки программирования на языке, чтобы пройти эти тесты? Что на самом деле пытаются измерить эти тесты и что я могу улучшить, чтобы улучшить их (и, возможно, получить работу…)?

Знание языка, а не математика, предопределяют навыки программирования

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

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

Последний исследователь находится на небольшой выборке, 36 человек, но результаты интересны. Однако есть некоторые вещи, которые не совсем соответствуют действительности:

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

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

Языком программирования, выбранным для исследования, был Python, и отчасти причина этого в том, что он больше похож на естественный язык с использованием отступов, а не фигурных скобок для группировки операторов и слов, а не символов. Испытуемые не имели опыта программирования, и им было предложено пройти уроки Codecademy.Об их обучении судили по скорости обучения на основе результатов модульного тестирования, субъективно оцененной игры и результатов теста с множественным выбором. В качестве предикторов использовались тест на знание современного языка, навыки счета и некоторые показатели общих когнитивных способностей. Помимо этих «традиционных» тестов, был включен подход ЭЭГ, чтобы добавить в исследование некоторые нейропсихометрические параметры:

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

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

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

Итак, должны ли мы отбросить наши давние предрассудки и признать тот факт, что языковые способности важнее?

Я думаю, что ответ отрицательный, и необходимы дополнительные исследования. Первое, что явно не совсем правильно, — это использование математических навыков в качестве меры математических способностей.Умение выполнять арифметику — это не то же самое, что умение работать с символами.

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

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

Возможно, знание языка поможет вам выучить в целом, а не только язык программирования.

Ясно одно — нам нужно больше исследований в этой области, и возникает вопрос, почему они не проводятся?

Дополнительная информация

Связь способности к естественному языку с индивидуальными различиями в изучении языков программирования

Статьи по теме

Помогает ли математика программированию или программирование помогает математике?

Глубокое обучение

Вычислительное мышление для детей

Настоящая причина научиться программировать — Сила

Что делает программиста

Программирование — вызов на всю жизнь

Обучайте понятиям, а не просто код

Чтобы получать информацию о новых статьях на I Programmer, подпишитесь на нашу еженедельную рассылку новостей, подпишитесь на RSS-канал и подпишитесь на нас в Twitter, Facebook или Linkedin.

Комментарии


Добавление комментариев или просмотр существующих комментариев с помощью Disqus

или отправьте свой комментарий по адресу: [email protected]