Технологии программирования зависят от цели

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

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

Цель программиста – написать программу. Для этого рассмотрим, какие программы вообще бывают.

Часть 1. Бесплатные программы

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

1.1 Программы-зубочистки

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

Например. Как-то меня пригласили в компанию, где уволился программист, а им нужно было извлечь названия и телефоны из базы. Я посмотрел программу. Исходного кода нет, а данные записываются в файл неизвестного формата. Но если посмотреть этот файл в шестнадцатеричном редакторе, то видны поля для названий и телефонов. Быстро сделал программку, которая открывает файл считывает эти поля и записывает в формат csv, который затем можно открыть в Microsoft Excel.

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

1.2 Системная утилита

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

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

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

1.3 Программы Open Source

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

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

Если программист хочет принять участие в разработке Linux, то однозначно использование языка Си. Для разработки CMS WordPress обязательно использование языка PHP и СУБД MySQL. Для разработки libGDX нужно знание языка Java.

Но тут следует понимать, что навыки и умения программиста open source все-таки сильно отличаются от навыков программиста по найму. Главное отличие – это полная свобода. Никто не ставит задачи, не следит за выполнением и не наказывает за ошибки.

Часть 2. Коммерческие программы

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

2.1 Разработка программ на заказ

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

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

Далее, нужно знать офисные программы, потому что так или иначе результаты работы программы нужно будет передавать в Microsoft Word или Excel. Часто нужно будет делать конвертирование форматов файлов. То есть для полноценной работы на заказ нужно знать несколько языков программирования, несколько СУБД и кучу разнообразных знаний по интеграции программ.

И вот здесь, когда меня спрашивают: “Что лучше: Си или PHP?”, я всегда отвечаю:  “Для работы на заказ нужно и Си, и PHP и еще кучу всего”. Только получите заказ, а там начнется.

Но есть и подстава. Она заключается в том, что нужно очень тщательно делать выбор используемых библиотек. Был у меня один случай. Я писал программу на заказ. Срок три месяца. И для используемой задачи идеально подошла библиотека на C++. Я начал работу на C++, через два месяца программа была почти готова, но возникла ошибка.  Я две недели бился над этой ошибкой, но оказалось, что ошибка не в моем коде, а в библиотеке. Причем, по закону подлости, именно в том функционале, ради которого я эту библиотеку и выбрал. До сдачи проекта оставалось все две недели и я полностью с нуля переписал программу на чистом Си без всяких сторонних библиотек. Хотя для этого пришлось работать с утра до поздней ночи.

Поэтому программирование на заказ – это серьезная нагрузка на программиста.

2.2 Программы с косвенной оплатой

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

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

2.3 Программные комплексы общего назначения

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

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

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

К сожалению, нужно сказать, что далеко не всегда используются современные средства разработки. Я в свое время знал немало программистских компаний, которые уже в эпоху Windows продолжали писать программы для MS DOS. Тут объяснение простое – все привыкают и менять особо никто не хочет.

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

2.4 Программные комплексы специального назначения

Это особый вид программирования. Я сам начинал работу программистом в подобном проекте. Я начал работу в космической отрасли в корпорации “Энергия” (бывшее КБ Королева). Я писал программы для космической системы “Энергия-Буран”. Программирование для космоса отличается тем, что предъявляет максимальные требования к надежности и безопасности программ. Прежде чем начать работу, мне сначала долго объяснили как именно обеспечивается надежность, как происходит тестирование и проверка программ. Никаких сил на это не жалели, сразу после выкатывания очередной версии отделом программистов начинал свою работу отдел тестировщиков, который подвергал программы самым разнообразным проверкам. И сам я участвовал в разработке системы сквозного тестирования программ, то есть я хорошо представляю, что такое проектирование надежных программ.

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

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

Кроме того, соседний отдел занимался разработкой программ для атомной станции. Мы с ними часто общались и удивлялись, что методы надежности ПО в атомной промышленности сильно отличались от космических. В космосе не доверяли людям, взлет и посадка Бурана шли в полностью автоматическом режиме. А в атомной промышленности, наоборот, не доверяли компьютерам. Если бы Скайнет из Терминатора пробрался бы на советскую АЭС, у него не было бы шансов захватить власть. Любой оператор его бы вычислил и отрубил.

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

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

 

Комментарии 7

  • Спасибо за точное и корректное описание работы программиста.

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

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

  • Что бы писать на заказ необходим многолетний опыт , как соориентироваться новичку у которого нет опыта.Хорошо конечно когда человек после универа устраивается в серьезную корпорацию где приобретает опыт.Как ему выбрать направление после Вашего курса?Сертификат получит,опыта нет.Менять работу?Опять же нет опыта.Опыт=практика,каким образом наработать практику?Программировать для себя,придумывая себе задачи?

    • Самый простой прием в начале карьеры – писать программы на заказ бесплатно. Люди будут благодарны, а опыт реальной живой разработки – это лучший учитель.

  • Прежде чем начать программировать подумай о том, что ты МОЖЕШЬ программировать !!! Реально программист – это переводчик с человеческого на машинный язык. Не собираешься же ты изучать язык суахили, если кругом ни одного зулуса не наблюдается. Если ты себя видишь именно в качестве программиста-переводчика, то придется выучить язык заказчика, иначе ты не поймешь его… Жаргон каждой отрасти хозяйства весьма специфичен, поэтому научившись программировать для, например, финансистов, ты ничего не сможешь сделать для нефтепереработчиков-технологов, а не бухгалтеров НПЗ. Бум программистов возник с появлением “персональных” т.е. доступных по цене простому человеку. Но ведь у простого человека и запросы-то простые: ему нужно информацию сохранить, переслать, размножить и т. п. Но благодаря огромному количеству простых людей земли удовлетворение таких запросов оказалось выгодным. “С миру по нитке… голому на поллитра” – народ говорит. Но… все течет, и бум на ТАКИХ программистов спадает. Летом на фестивале в Сочи Герман Греф уже предупреждал об этом. Мораль – кроме программиста стань еще конкретным специалистом в своей области. Будь программирующим химиком, провизором, мостостроителем, нефтедобытчиком и т. п. Цены тебе тогда не будет !!!

    • > Мораль – кроме программиста стань еще конкретным специалистом в своей области.
      Общий тренд явно противоположный. Программирование все более специализируется. Универсальный программист практически никому не нужен (кроме системных приложений).
      Для крупных проектов создается группа разработчиков, куда входят специалисты разных направлений, в том числе и программисты узких специализаций.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.