Необходимые знания для программиста – Что должен знать и уметь программист

Содержание

что должен знать и уметь программист

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

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

  • Фундаментальные знания.

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

  • Аналитическое мышление.

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

  • Стремление быть лучше, знать больше – саморазвитие.

Без постоянного саморазвития не стать хорошим программистом. IT-сфера развивается неустанно: появляются новые языки, фреймворки и другие инструменты. Регулярное обновление своих знаний, сомнения в том, что вы знаете «как правильно» приведут вас к успеху в карьере и сделают настоящим профессионалом.

  • Любовь к программированию

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

Так, в общих чертах мы понимаем, кто такой «хороший программист». Давайте теперь разберемся, что нужно знать программисту.

Какие знания нужны программисту?

  • Английский язык.

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

  • Языки программирования.

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

  • Алгоритмы и структуры данных.

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

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

issoft.by

Что нужно уметь чтобы стать программистом. Какие знания и качества нужны? Что нужно знать программисту

Кто может стать программистом?

Что необходимо учить, чтобы овладеть этой профессией?

Эти и многие другие вопросы мы рассмотрим в этой статье. Отдельное спасибо за создание этой статьи отправляется в фонд Галины, которая задала их в конкурсе «Задай вопрос и выиграй приз».

Программист - кто это?

Поговорим немного о самой профессии программиста.

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

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

Какими чертами нужно обладать, чтобы стать программистом?

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

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

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

Каким школьным предметам стоит уделить пристальное внимание?

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

Для программиста математика и информатика - основополагающие предметы, но не единственные нужные программистам.

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

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

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

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

Вступление

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

Безусловно, чтобы стать программистом, придется проводить порой не один час за изучением определенного материала. Иногда даже перечитывать его заново, два, три раза. Несложно догадаться, что потребуется много свободного времени. От пары до 6-8 часов. Причем не только для освоения теории, но и для применения ее на практике.

Кто может стать программистом?

Стать программистом может любой человек. Человек вообще может все.

offlink.ru

Семь навыков профессионального программиста / Habr

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

Одна из проблем нашего высшего образования в том, что в вузах учат много чему, и алгоритмам, и языкам программирования, и ООП, и даже паттернам проектирования. Но я еще ни разу не встречал, чтобы в вузах учили работать работу. Лабораторки не в счет. Спихнул – и забыл! Возможно, просто не везло.

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

Итак, про семь навыков…

1. Проводит декомпозицию задачи и проектирует ее решение
Получив задачу, программист не должен сразу бежать писать код. Правильный программист 80% времени работает головой, и только 20% времени — руками. Даже создание не очень сложной программы требует анализа и проектирования: декомпозиции задачи на боле простые подзадачи и последующего синтеза общего решения из частных. Например, выбор длины переменной целого типа есть элемент проектирования.
2. Адекватно оценивает затраты на выполнение
Ответ «Для решения этой задачи мне потребуется 8 часов», — неправильный. Оценка всегда величина вероятностная. Правильный ответ, например, «от 4 (быстрее точно не смогу) до 16 часов (скорее всего, точно сделаю)». Большой разброс не должен смущать руководителя, он отражает высокий уровень неопределенности при решении программистских задач.
3. Планирует свою работу и составляет график
При составлении план-графика решения задачи, программист должен расставлять приоритеты своих работ таким образом, чтобы максимально быстро снизить имеющиеся риски, а не добиться быстрого прогресса в решении. Отложенные «мутные» подзадачи могут выявить тупик в принятом проектном решении, и все придется начинать сначала.
4. Соблюдает принятые стандарты
Ну, тут все просто. «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». (с) Стив Макконнелл.
5. Обеспечивает требуемое качество, минимизируя затраты и риски
Это, наверное, самый сложный навык. Надо научиться находить золотую середину между запрограммировал, «как получится», и написал «самый совершенный код».
6. Выполняет тестирование и отладку кода
«Откомпилировалось – отправляем в тестирование!» — подход неверный. Программист обязан найти максимум ошибок в своем коде. Он может сделать это намного эффективнее, поскольку для него программа – «прозрачный ящик». Большинство ошибок лежит на границах областей определения и изменения переменных алгоритма. Тестировщик же будет тестировать код, как «черный ящик», бомбя по площадям перебором большого количества наборов данных.
7. Анализирует найденные дефекты и отклонения от графика
Ну и последнее, как любая самоуправляемая система программист должен обеспечивать обратную связь. Обязан анализировать фактические отклонения от планов по срокам и качеству и выявлять их причины для того чтобы скорректировать свой рабочий процесс и минимизировать подобные отклонения в будущем.
Заключение

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

habr.com

Что нужно, чтобы стать программистом и хорошо зарабатывать?

От автора: работа программистом может стать вашим счастливым билетом в жизнь. Это сложная дорога, требующая огромного количества потраченных усилий и времени на изучение языка HTML, CSS, Java, PHP и прочих технических штук, но, черт возьми, игра стоит свеч. Продолжайте чтение статьи, если вас не пугают трудности на пути к звездам, и вы четко хотите понять, что нужно, чтобы стать программистом.

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

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

С чего начать?

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

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

Развиваться в этой тематике можно, выбрав один из 4 представленных ниже путей:

Самостоятельно стать программистом (самообразование).

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

Причем многие из них находятся в бесплатном доступе, поэтому если вы на тематических форумах уже успели всех достать сообщениями: «Хочу стать программистом, с чего начать? А где взять деньги? Я же с нуля!», то вот, пожалуйста ответ. Скачивайте бесплатные курсы, обучайтесь, применяйте полученные знания на практике, зарабатывайте.

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

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

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее
Получить высшее образование в университете.

Этот путь будет самым долгим. За сколько можно стать программистом в университете? Лет 5, не меньше. Нельзя сказать, что у вас будет большое преимущество в знаниях, ведь половину образовательной программы разбавят ненужными предметами вроде физкультуры, философии и прочих наук, с преподавателями которых явно не поговоришь на языке HTML или Java.

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

Стать крутым программистом с помощью ментора.

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

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

Какие знания необходимы?

Знания, которые необходимо получить, зависят от того, на чем вы хотите специализироваться. Каким программистом лучше стать — решать только вам. У каждого человека свои цели и предпочтения. Если говорить о том, что надо, чтобы стать программистом в самом начале, то советую определиться с подходящим языком программирования (PHP, Java, Python, Ruby и т. д.). Критериями выбора могут стать следующие 3 параметра:

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

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

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

Как получить первый практический опыт?

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

Не нужно ждать, пока закончится последняя страница новой мега полезной книги, которая сделает вас гуру программирования. Увидели задание? Тут же выполняйте, потом усложняйте, экспериментируйте. Задача: прокачать ключевые навыки в программировании до уровня автоматизма. Бои выигрывает не тот, кто много знает, а тот, кто может удачно применить свои знания на поле битвы.

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть

webformyself.com

23 необходимых навыка, которые позволят любому программисту всегда оставаться востребованным | Статья

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

Допустим, вы подумываете о поиске новой работы или планируете изменить сферу деятельности. Размышляете о том, в какой компании вы хотите работать. Будет ли это стартап, компания среднего размера, международная корпорация и т.д. Остановитесь: такой подход к поиску работы совершенно неправилен. 

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

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

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

От контроля версий до использования абстракций

1. Правильное понимание взаимосвязей между циклом разработки ПО и отраслью бизнеса, в которой занята данная компания

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

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

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

Итак, необходимо научиться реализовывать в первую очередь те фичи, которые важны для бизнеса компании. Чтобы этого добиться, проще всего спросить начальника или коллег-маркетологов из отдела продаж: «Что нужно в первую очередь реализовать на уровне программы, чтобы она максимально отвечала интересам компании?».

2. Контроль версий

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

Если вы не пользуетесь subversion (svn), git или подобной системой контроля исходников (версий), то не можете считать себя компетентным программистом и должны максимально оперативно освоить такую систему. И точка. Без контроля версий вы не сможете работать в команде, отслеживать историю разработки, возвращаться к предыдущим версиям, управлять сразу несколькими версиями, уверенно заниматься рефакторингом, либо уверенно исправлять баги. 

3.  Модульное тестирование

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

4. Автоматизация при помощи Jenkins, Maven и/или Ant или подобных инструментов; что такое «непрерывная интеграция»

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

5. Понимание софтверной архитектуры и паттернов проектирования

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

6. Чтение и написание документации (вики-источники, т.д.)

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

7. Понимание масштабируемости и воспроизводимости

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

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

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

8. Оценка (время и бюджет) и планирование

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

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

9. Понимание того, когда следует и не следует оптимизировать

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

10. Agile-разработка

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

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

11. Рефакторинг

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

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

12. Миграция

Необходимо понимать концепцию миграции и принципы ее реализации. Например, как организовать миграцию пользователей с версии 1 на версию 2? Как выполнить миграцию изменений из среды разработки в среду тестирования? Как перевести базу кода из одной технологии в другую?

13. Умение описывать API и пользоваться другими API

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

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

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

Также обратите внимание на разделы об архитектуре и рефакторинге выше, а также на раздел об абстрагировании ниже.

14. Написание повторно используемого кода (как правило, объектно-ориентированного)

Если в вашей программе есть пятьдесят всплывающих диалоговых окон — сколько отдельных компонентов вам потребуется написать для их реализации? Правильный ответ — один или, как максимум, два. Но мне доводилось сталкиваться с бесчисленными софтверными проектами, разработчики которых не умеют повторно использовать компоненты. Чем лучше выполнен проект, тем меньше в нем кода и тем проще его поддерживать. Соответствие этому пункту хорошо проверяется следующим вопросом. Так, если я попрошу вас изменить высоту и ширину всех кнопок в приложении, сколько времени вам на это потребуется? Минута? Час? Неделя? Месяц? Год?

15. Наличие профессиональной сети, на которую можно положиться

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

16. Система отслеживания ошибок и организации рабочих потоков — например, Jira

Вы должны уверенно обращаться как минимум с одной системой выявления и отслеживания ошибок, например, с Jira. Существует и много других таких систем. Умейте пользоваться такой системой и применяйте ее ежедневно. Учитесь быть администратором, конфигурировать информационные панели, отчеты и т.д., чтобы такая система была максимально эффективной. Индикатор — Excel или совместно используемый документ Google не является системой отслеживания ошибок.

17. Понимание «достаточности» на аппаратном уровне

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

18. «Достаточные знания» о технологиях и инструментах, которыми пользуются другие программисты

Если вы беретесь за молоток, то всё вокруг начинает напоминать гвозди. Например, если вы знаете Flash/ActionScript, то можете полагать, что эти технологии во всех возможных случаях выигрывают у HTML/JavaScript (или наоборот). Подобные мнения никогда не являются абсолютно истинными — все зависит от ситуации. Поэтому либо подружитесь с инструментами, применяемыми другими разработчиками, либо, как минимум «знайте врага в лицо». Не обладая элементарными знаниями об альтернативных инструментах разработки, люди зачастую просто порют глупости.

19. «Достаточные знания» обо всем стеке

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

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

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

20. Понимание того, что на реализацию каждой фичи требуется время

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

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

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

Вышеприведенная формулировка уместна при поступлении любого запроса на реализацию новой возможности. Кстати, еще лучше было бы переключиться на методологию Agile. Еще один универсальный ответ — «это слишком серьезное требование для версии n», где n равно как минимум +1 от актуальной версии. Можете просто заявить о фактической невыполнимости требования, но сделать это аккуратно, например: «это отличная функция для версии 4, но сейчас мы работаем над версией 1». 

21. Использование абстракций

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

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

Если программа правильно спроектирована, то в ней не должно быть никаких деталей, жестко завязанных на использование Oracle, за исключением тонкого уровня абстрагирования. И этот уровень должен легко заменяться на аналогичный слой кода, специфичный для Microsoft, чтобы все остальное «просто работало». Этот же принцип касается рассмотренного выше гипотетического «API для воспроизведения видео».

22. Умение избавляться от предупреждений компилятора или сообщений об

dev.by

Теоретический минимум для программиста - Магия слов и чисел — ЖЖ

? LiveJournal
  • Find more
    • Communities
    • RSS Reader
  • Shop
  • Help
Login
  • Login
  • CREATE BLOG Join
  • English (en)
    • English (en)
    • Русский (ru)
    • Українська (uk)
    • Français (fr)
    • Português (pt)
    • español (es)
    • Deutsch (de)
    • Italiano (it)
    • Беларуская (be)

sharpc.livejournal.com

Семь вещей, которые нужно знать начинающему программисту / GeekBrains corporate blog / Habr

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

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


Загляните под капот


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

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

Точно так же говорит Роберт Дуглас, вице-президент отдела удовлетворенности клиентов Platform.sh: «Когда я начинал программировать, были вещи, которые я действительно не понимал. Три примера таких вещей — файловые системы, сеть и то, как данные хранятся в памяти. Это значит, что я не обязательно понимал цели некоторых программ, с которыми сталкивался».

Знайте инструменты командной строки


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

Ветеран с двадцатилетним опытом, пожелавший остаться анонимным, сказал: «Иногда вы оказываетесь перед машиной с ограниченным набором инструментов и задачей, которую надо сделать прямо сейчас. Знайте командную строку, как пять пальцев; инструменты, такие как find, comm, diff, vi/vim, sed, awk; умейте писать небольшие скрипты прямо в командной строке, чтобы найти файл, который надо подправить прямо сейчас, потому что продакшн сломан, а Джо, который полез своими ручонками не туда, — в отпуске на Фиджи».

Балл, использовавший инструменты Microsoft, а теперь перебирающийся на Linux, соглашается: «Я узнал о командной строке и утилитах *nix все, что возможно. Я могу вспомнить код, который писал год назад, и как я проводил дни или недели, работая над тем, что решается однострочником на grep+awk».

Дебаггер — ваш друг


Как разработчик, вы проведете кучу времени, отлавливая баги. Дейв Вэйрон, биотехнолог-программист в Novartis, выделяет преимущества дебаггера, несмотря на затраты времени на его освоение.
«Учитесь пользоваться дебаггером!», — говорит он. «Потратьте день-два на его настройку. Если вы не видите ожидаемого результата, просто отладьте его: установите точки останова и аккуратно продвигайтесь по коду, особенно по коду сторонних библиотек. Это лишит вас дней разочарования, более того: вы научитесь новому, просто читая чей-то код».

Научитесь писать тесты


Некоторые разработчики уверены в критической важности модульного тестирования, которое подразумевает написание небольших тестов, проверяющих, делает ли код то, что задумал разработчик. Среди этих людей — Ричард Хэндлофф, разработчик баз данных в Strategic Power Systems. Он пишет: «Думаю, что лучший совет, который я могу дать начинающему разработчику — научиться писать хорошие тесты как можно раньше».

Планируйте самообучение


С быстрым изменением технологий меняются системы, языки и инструменты, используемые программистами.

Адам Вульф, мобильный разработчик и основатель Milestone Made, предполагает, что новые разработчики должны быть готовы к изменениям и быть на гребне волны. «Прямо сейчас я хочу сказать, что вы должны быть готовы осваивать новый стек технологий примерно каждые четыре года. Хорошие базовые знания всегда будут актуальны, но инструменты и технологии, которые вы будете использовать каждый день, будут меняться не реже, чем с названной частотой».

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

Кооперируйтесь


Несмотря на то, что обычно разработчики работают обособленно, им приходится взаимодействовать с другими людьми. Бен Миллер, CTO Sinclair Digital Ventures, подчеркнул важность готовности к командной работе для вашей карьеры: «Большие проекты — это куча движущихся деталей, собранных вместе, и то, как они соединяются и разделяют проблемы, создаст невероятные инженерные сложности, если вы не будете осторожны», пишет он.
«Прежде чем браться за улучшение одного алгоритма, соберитесь с командой и убедитесь, что нет способа разделить проблему на всех, сделав ее проще. Разработка — командная игра!».

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

Анонимный источник, разделяющий мнение о важности командной игры, говорит: «Соберитесь и делайте что говорят, даже если это вас утомляет. Но осторожно: вы рискуете застрять так надолго».

Разрабатывайте для себя вне работы


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

Перевел: Андрей Никифоров
___

Полезные материалы для начинающих разработчиков от образовательного IT-портала GeekBrains:
Запись вебинара "Все, что вы хотели знать о профессии программиста"
Бесплатный онлайн-курс для начинающих "Основы программирования"

habr.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *