что должны делать программисты
Правила «идеального программиста»
1. Старайся стремиться к профессионализму
Сначала стоило бы разобраться с термином «профессионализм». Обычно под профессионалом принято считать человека, который знает свою предметную область намного лучше, чем его окружение. Но это не единственный критерий по которому надо определять профессионализм. Наравне с этим качеством идет и тот факт, что настоящий профессионал не боится брать на себя ответственность за проделанную работу и отвечать за нее на протяжении всего процесса эксплуатации, будь-то куска кода, модуль, проект или иной результат его работы. Так что термин профессионал, для вас должен раскрываться как «ответственный знаток конкретной предметной области». Все хорошо, но под предметной областью можно подразумевать в принципе что угодно, не вдаваясь подробности. Мы же ударимся в конкретику и перечислим необходимый минимум для разработчика:
Алгоритмы и структуры данных. В подавляющем большинстве случаев, рядовой разработчик не сталкивается с прямой надобностью использовать алгоритмы их в том виде, в котором они изложены в учебных пособиях, но их присутствие практически в каждой строчке кода в том или ином виде — бесспорна. Банальное грамотное оперирование командами if и else закладывает в Ваш фундамент профессионализма кирпичик базового познания.
Паттерны проектирования. Зачем разрабатывать «Велосиный костыльпед» для решения уже решенных задач? Знание данной области чем-то схожи с алгоритмами, за исключением принципов и уровня их использования.
Принципы проектирования. Под этими словами я подразумеваю совокупность методологий разработки, способов ее ведения и умение описать свой кода в виде диаграмм, блок-схем и документации.
По моему личному мнению, сформированному благодаря различным источникам, этот минимум идет на протяжении нескольких десятилетий, практически без изменений.
2. Научись говорить НЕТ
Этот совет кажется незначительным, на пути к становлению теми кем мы хотим казаться для большинства рекрутеров, но это в корень неверно. Яркий пример, который, как кажется, знаком каждому. Середина недели, к Вам подходит ваш начальник и неоднозначно намекает на то, что такой-то функционал должен появиться в Вашем приложении уже к концу недели. По неопытности, в начале пути, многие из нас безукоризненно ответили бы «Будет готово», параллельно планируя на какое время перенести поход в стоматологию и каким кофе запастись. Данный ответ является ошибочным по ряду причин:
У вас общие цели, но разные обязанности. Руководители, как и программисты — люди у которых есть свои обязанности с которыми (надеюсь) они умеют справляться. И также у них есть общие цели, в данном случае — добавление нового функционала, хотя порой они могут различаться в реализации, поэтому необходимо уметь приходить к оптимальному результату. Но это же «имя высокопоставленного начальника», как мне вступать с ним в полемику? Повторюсь, у вас общая цели, а для этого жизненно необходимы переговоры, а не слепо катить камень в гору. Увлекаться тоже не надо и вопросы «А зачем?», «А это точно?» будут довольно излишними для достижения общей цели. Эти вопросы должны всегда быть вне зоны вашей компетенции. Исключением будет являться, только тот случай, когда вы вплотную общаетесь с заказчиками и уверены в необходимости этих вопросов.
Вы не успели взвесить все нюансы. Этот момент касается в большинстве случаев — импульсивных людей, которые соглашаются на любой «кипишь». Это роковая ошибка, может стать для вас клеймом с надписью «А помнишь ты не …?», которое является результатом согласия, которое вы дали без задней мысли, которое более того будет обоснованным.
Как по мне, выходом из данной ситуации будет разговор с «торгами», в процессе которого, вы должны объяснить нюансы своей работы и возможные последствия такого указания (обычно это грязь в коде, что в будущем очень сильно скажется на сроках добавления нового функционала, не полная реализация всего, что было запрошено) и дать время на более детальное рассмотрение задания, чтобы вынести свой вердикт по времени его исполнения. Эта цифра навряд ли останется такой, какой вы ее озвучили, но точно даст руководителю более детальную картину происходящего, после чего и начнутся сами «торги».
3. Научись говорить ДА
Во-первых, это большая ответственность, сказать да. Во-вторых, как и в предыдущем примере, при принятии решения необходимо время. Обычно перед выбором ответа, я задаю себе следующие вопросы:
Это зависит от другого человека?
Первые 2 вопроса нужны для определения важности дела по матрице Эйзенхауэра, что позволяет разбить положительный ответ разные временные рамки, в противном случае пробрести аргументы для отрицательного ответа и определения новых рамок посредством переговоров. Третий вопрос позволяет мне добавить в конечный ответ обещание либо с конечной целью (в случае с отсутствием зависимости), либо с обещанием действия для достижения этой цели. В любом случае говорить да легче, чем нет, но этот ответ должен быть с чётким пониманием и готовностью взять на себя ответственность, чтобы при следующем общении у собеседника не возникло сомнений в надежности этих обещаний.
4. Умей справляться с давлением
Данный навык можно было бы покрыть одной фразой, которая является фундаментом — не допускайте ситуаций, создающих давление. Но, к сожалению, мы живем в реальном мире с реальными людьми и их проблемами. В подавляющем большинстве случаев давление будет оказываться, в форме времени исполнения и взятия обещаний. Пример: по непредвиденным обстоятельствам, несколько человек, с которыми вы работали, перевели на другой проект, но при этом «темп Вашей работы упасть не должен». Конечно, в данном случае, о профессионализме человека, поставившего вас перед этим малоприятным фактом, речи идти не может, но как у профессионала, у вас есть следующие навыки:
Дисциплинированность и неизменность своего поведения в напряженных ситуациях. Слезами горю не поможешь и вы должны это понимать как никто другой. В лучшем случае, на проект придется выделять чуть больше времени, чем планировалось, в худшем — полностью менять исходные инструменты, архитектуру и т.д. В любом случае сохраняем спокойствие и трезвость ума.
Умение контролировать свои обязательства. Помимо текущей задачи, скорее всего, у вас имеются и ряд других. Конечно, в критических ситуациях стоило бы пересмотреть приоритеты и сообщить об этом всем причастным, но для этого должна быть очень веская причина. Также стоит довериться своим собственным правилам, которые определяются индивидуально. Это может быть как и обычная физическая активность (подтягивания, бег), так и специфические методики по типу ведения документации проекта через PHPdocumentor. В любом случае у вас есть хорошая предметная база с фаворитами, которые помогут в таких ситуациях.
5. Цени время
Время — то, чего всегда не хватает в нашей профессии. Мы привыкли работать с раннего утра, до поздней ночи, с середины дня, до вечера и еще множество комбинаций из различных временных диапазонов. Проблема этого факта в то, что она напрочь убивает все вышеперечисленные советы, если вы не имеете четко спланированного распорядка дня, то будет сложно соблюдать обещания. Если нет распорядка дня или хотя бы наметки на него, то вы постоянно будете находиться под давлением от выработанного стресса или других проблем, в подавляющем большинстве вызванных от отсутствия тайм-менеджмента. И последнее, вы банально будете ценить не только свое время, но и время своих коллег, если они будут знать, когда можно обратиться к Вам за советом или собрать пятиминутку.
Данные рекомендации явным образом не являются «правдой в первой инстанции», но являются результатом собственных наблюдений и опыта, которые были испробованы на практике. Этот список стоило бы расширить и конкретизировать, но за этим я предлагаю обратиться к вышеупомянутой книге «Идеальный программист», в которой каждый из нас сможет почерпнуть для себя много нового или давно забытого старого.
Что должен знать и уметь хороший программист на самом старте карьеры
Программисты – это люди, которые создают программы или, как говорят на профессиональном языке, разрабатывают. Браузеры, аудио- и видеопроигрыватели, антивирус, торрент-клиент и многое другое создано программистами.
Расскажем о том, что должен уметь программист, какие навыки обязательны, а какие можно освоить дополнительно.
Базовые знания
Любая профессия начинается с изучения фундаментальных основ. Что должен знать программист на старте – дискретную математику, теорию вероятности, математическую статистику, линейную алгебру, функции и т. д.
На основе полученных знаний можно изучать любой язык программирования и совершенствовать в нем.
Второе обязательный навык – умение искать в интернете необходимую информацию. Программист не может знать все обо всем, но он знает, где можно это найти.
Также обязателен английский язык уровня Intermediate и выше. Большинство информации (книги или статьи топовых разработчиков) выходит на английском языке без перевода. В дальнейшей карьере также придется общаться с клиентами на иностранном языке.
Расширенные навыки
Начинающие студенты часто задаются вопросом – какие еще навыки нужны программисту, кроме базовых?
Где изучать
Второй вопрос, который сразу возникает у начинающих – куда пойти учиться на программиста? На самом деле вариантов много. Это может быть специализированный вуз, индивидуальные занятия или самостоятельное изучение.
Если студент выбирает путь самостоятельного изучения, то ему потребуется гораздо больше времени стать разработчиком.
В качестве вуза студент может выбрать онлайн-университет, который преподает курсы программирования с нуля. Ученику не нужно регулярно ездить на занятия и тратить время на дорогу. Он может выбрать удобную для себя форму обучения – например, в свободное время слушать лекции и сдавать практические занятия. Диплом в онлайн-университетах приравнен к обычным вузам.
Один из вариантов изучения онлайн–курсы на сайте https://checkroi.ru/. Веб-сайт предоставляет огромный список разных учебных материалов.
На какого программиста пойти учиться – выбор за студентом. Он вправе выбрать область, которая для него наиболее интересна. Программирование творческий процесс: если работа не интересна, то и результата не будет.
Сфера применения
При возникновении вопроса у начинающего программиста – какое образование выбрать, сначала стоит определиться с областью программирования.
На 2020-2021 года актуальные темы:
Существует и другие области, в которых также востребованы программисты – контейнеризация, DevOps, QA engineer и др.
Уровень зарплат
Стоимость услуг программиста варьируется в зависимости выбранной сферы и профессиональных навыков. Например, начинающий разработчик мобильных приложений в среднем получает на руки до 70-80 тысяч рублей, а опытный – 200-300 тысяч.
Поэтому на вопрос какая зарплата у программиста – нельзя дать четкий ответ. Также учитывается и компания, которая наняла сотрудника. Apple платит на порядок больше, чем небольшая компания.
Резюмируем
В статье рассмотрели, какие знания нужны для программиста, чтобы стать высококвалифицированным специалистом в своей области. Перечислили основные тренды на сегодняшний день, в которых идет высокий спрос и хороший уровень зарплат.
Работа программиста
Именно представители этой профессии создают историю технологий. Как? Что нужно для такой работы? Что должен знать начинающий программист, чтобы создать продукт, подобный YouTube или Google?
Работа такого специалиста — это комбинация чисто технических действий с разными языками программирования и творческой работы по оптимизации функционала итогового программного продукта. Специалист занимается проектированием, созданием алгоритма программы, написанием ее кода, проверкой на работоспособность.
Необходимые профессиональные умения и знания
Всему перечисленному можно научиться. Да, развиваться нужно постоянно, но базовый навык кодирования можно развить до совершенства всего за несколько лет учебы по качественно проработанной образовательной программе.
Другой вопрос, что нужно знать чтобы поступить на программиста. Здесь невозможно за 2−5 лет вырасти в профессионала, если подойти к профильному образованию с минимальным набором школьных знаний. Желая опередить соперников, со старта карьеры получить преимущество, каждый программист (будущий) должен приступать к освоению профессии с отличной базой:
Что должен знать программист для работы на перспективу (карьера, зарплата, репутация)? Нужно глубокое понимание архитектуры программной среды, где предстоит работать, принципов кодирования, знание простейших методов создания программ.
Знать нужно очень много: стандарты программирования, концепцию проектирования задач, методологию тестирования ресурсов. Чем глубже студент погружается в основы математики (анализ, графы), тем сильнее его позиции, шире арсенал применяемых инструментов.
Дополнительные навыки делающие конкурентоспособным на рынке труда
Какие навыки помогут быстрее завоевать рынок престижных вакансий?
Что должен знать новичок
Работа программиста — это безостановочная эволюция знаний. Теоретическая и практическая платформа формируется во время обучения, но на этом процесс становления не заканчивается — различные знания надо обновлять с углублением в узкие направления. Но значит ли это, что стартовать с минимальным набором знаний, умений навыков нельзя? Новичку для хорошего резюме достаточно:
Всем нужен английский язык и понимание принципов логики. Многое определяет выбранное направление работы. Веб-программисту важно умение писать программы и понимание архитектуры разных платформ. Системным программистам необходимо освоить API ОС.
Необходимые знания для поступления
Что надо для получения высокого образования по программистскому профилю? Чтобы быть зачисленным в колледж или вуз «Синергия» окончания курсов или работы с репетиторами не потребуется. Нужны хорошие оценки по математике, физике, информатике. Очень ценно знание английского языка.
Чем же занимаются программисты, и как объяснить это остальным?
Наверное, у каждого программиста возникала ситуация, когда совершенно не знакомые с IT люди просили его объяснить, в чём же состоит суть его профессии. Так уж сложилось, что у большинства людей понятие «программист» ассоциируется либо с замкнутым гиком в очках и свитере, либо с неким гениальным красноглазым подростком-хакером — но при этом никто не знает, чем именно он занимается.
Как рассказать им об этом, не пугая страшными терминами и фрагментами кода?
Под катом я воспроизведу такой рассказ, а также развенчаю несколько мифов о программировании.
— Чем занимаются программисты? Это не так-то просто рассказать… Ответьте мне для начала: как в двух словах можно описать, например, суть профессии хирурга?
— Хирург проводит операции.
— Да, отличное описание! Ну а, скажем, футболиста?
— Играет в футбол!
— Угу, а хирург «занимается хирургией». А если без однокоренных слов?
— Пинает мяч?
— Вот это точно. А что же делает программист, кроме как «разрабатывает программы»?
— …
— Программист пишет код. Исходный код своей программы, составленный на каком-то специальном языке программирования. Точнее говоря, сначала он продумывает структуры своих данных, потом составляет алгоритмы для работы с этими структурами — ну а затем уже представляет это в виде кода.
— Что ещё за «структуры данных»? Разве он не управляет компьютером, не нажимает кнопки?
— Эх.
Миф №1: программист работает с компьютерами
Попробуйте донести до людей, что программисту для написания кода, в общем-то, совсем не нужен компьютер. Он нужен лишь для проверки корректности кода, для его тестирования — но писать сам код и составлять схемы алгоритмов вполне можно и на бумаге (хотя на экране монитора, конечно, это делать удобнее). Разработчик же просто записывает на этой бумаге набор каких-то инструкций, команд или конкретных данных (числа, текст). А кто этот набор исполняет — компьютер, телефон или особо умный робот, не так уж и важно. Программист работает с данными, а не с машинами.
— Ну как, понятно?
— То есть, программист просто сообщает машине, что бы он хотел сделать — а она это исполняет?
— Ну да, примерно.
— Так же, как начальник отдаёт распоряжения подчинённым?
— Вроде того.
— А если машина захочет исполнить это как-то по-другому?
— В смысле?
— Ну, что-то ей не понравится. Или просто исполнять не захочет.
— Так, давайте уясним раз и навсегда, что.
Миф №2: машина умеет думать
Почему-то немалое число людей реально считает, будто компьютер обладает каким-то интеллектом. На самом деле — это просто набор железок, которые думать не умеют. Они умеют лишь хранить числовые данные. Размагничен какой-то участок такой железки — значит, это ноль. Намагничен — единица. Плюс, ещё они могут складывать и вычитать эти единицы, образуя более сложные числа (о двоичной системе счисления лучше не стоит упоминать). Больше компьютер сам ничего делать не умеет, только хранить числа и оперировать ими. Это бездумный болван, который лишь выполняет команды программиста.
— В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
— То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
— Когда ты крутишь педали на велосипеде — понимает ли он, что ему сейчас нужно поехать вперёд?
— Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
— Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
— Каким образом?
— У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства — числом 61.
— Поэтому машина и может понимать текст, который мы ей сообщаем?
— Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
— Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
— Верно. Сложные структуры представляются в виде более простых, которые и «понимает» машина.
Скажите мне, из чего состоит жилой дом?
— Ну… Из этажей.
— А из чего состоят этажи? И так далее.
— Этажи — из стен. А стены — из кирпичей. А кирпичи…
— Вот числа для компьютера — это то же, что и кирпичи для дома. Символы — это стены. Отдельные предложения — этажи. А книги — целые дома! Но у программистов есть преимущество перед строителями.
— Какое?
— Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст — то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
— То есть, программист может использовать всё более и более сложные структуры данных?
— Да. Поэтому первая из составляющих его работы — представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь — причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
— Хех! Выходит, что он строит резиновые дома из съёмных панелей!
— Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить — но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
— Программист придумывает алгоритм на каждое действие?
— Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
— И здесь ему на помощь приходит язык программирования?
— Не совсем.
Миф №3: язык программирования нужен для составления алгоритмов
Нет, язык — это всего лишь инструмент. Как гитара для музыканта. Само по себе умение играть на гитаре вовсе не гарантирует славы — потому что люди, как правило, восхищаются самой музыкой, а не умением быстро и чётко дёргать струны. С другой стороны, вряд ли кто придёт посмотреть на плохого гитариста, какую бы замечательную композицию он не исполнял. Также и с ЯП: знание его синтаксиса и связанных с ним нюансов очень важно, равно как и умение писать красивый и ясный код. Однако, если человек не умеет составлять алгоритмы и структуры данных — то он не может называться хорошим программистом.
Компьютер не понимает язык программирования напрямую. Как и ранее, он представляет каждую команду языка в виде набора «простейших» команд (сохранить число, обнулить число, прибавить к нему единицу), которые он способен исполнить. «Понимает» язык программист, а машина его лишь исполняет. По сути, любой язык программирования — это набор команд, служащих для общения с нею.
— Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
— То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
— Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
— А составь какой-нибудь прямо сейчас!
— Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
— Ну, просто пробежал от первой до 875-й, только и всего.
— Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись — сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
— Как?
— Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
— Во вторую. А дальше что?
— То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
— 750 плюс 125… Так это же и есть 875!
— Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
— И ты можешь записать его на бумаге?
— Конечно. Где там моя ручка?
— Ну как, алгоритм ясен?
— Хм… Да, и впрямь ясен.
— Сейчас он записан в виде, уже слегка похожем на реальный программный код.
— А в чём отличия?
— В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом — всё то же самое.
— И ты занимаешься этим изо дня в день?
— В основном.
— И тебе не скучно?
— Ничуть!
Миф №4: программирование — это скучно
Конечно, разработка вполне может наскучить, если заниматься только рутинными и однообразными делами. Например, составлением очень простых алгоритмов, но в большом количестве. Или монотонным поиском ошибок в чужом коде. Но это же касается и любой другой работы — рутина везде убивает творческий процесс. А творчества в программировании немало, написание кода похоже на написание художественной книги. Только, в отличие от большинства писателей, программист сначала сам создаёт свой собственный мир (структуры данных) — а уже потом наполняет его сюжетом (алгоритмами).
Временами это действительно чистое творчество, где разработчик сам устанавливает собственные правила. Несмотря на то, что в мире данных и алгоритмов всё строго и логично, в нём присутствует своя красота. Любой программист может привести десятки примеров очень красивого кода, и ещё больше примеров уродливого. Программисты, как и все люди, тоже ошибаются: если где-то в исходном коде допущена ошибка, то задуманные алгоритмы могут работать неправильно. Поэтому код часто превращается в некий детектив — в котором идёт поиск очередного коварного бага, мешающего исполнению алгоритма, или нарушающего структуру данных…
— В шутку можно сказать, что в итоге получается какой-то детектив в выдуманном мире, выраженный с помощью языка программирования.
— А убийца в этом детективе — дворецкий?
— Ага, нулевой указатель. Бывает так, что весь отдел день-другой ловит особо назойливый баг, и каждый программист из отдела берёт на себя какой-то участок кода. Получается целое расследование, с наказанием виновных и награждением сопричастных…
— Хм, а это и впрямь интересно звучит!
— Вот видишь.
— А, скажем, я могу хоть немного научиться программированию?
— Да, конечно! Я знаю один сайт специально для этого.