За что программист получает деньги?
=====================================

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

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

Также еще интересует, что значит поддержка кода, за которую разработчики берут неплохую сумму, если код написан хорошо зачем его поддерживать ? Я понимаю когда заказчик вдруг придумал: "А вот хочу чтобы еще и вот это умело!", - тогда понятно, но если ничего не делаешь с кодом за, что брать деньги разве это честно?   

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

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

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

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

  
  

А если оперуполномоченный МУРа сидит и читает материалы дела - то засчитывать ему это как рабочее время или как прогул?  

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

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

  
  

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

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

 Насчёт поддержки здесь вот какая штука. Вот сдал исполнитель вам заказ. И тут же загрузил себя другими. Или наоборот - слинял на пляже валяться. А тут вам вдруг приспичило. Вот вам два варианта развития событий:  
1. ваши хотелки будут задвинуты в самый конец очереди/отпуска, если вообще не сразу выкинуты из головы
2. всё остальное будет отодвинуто/заморожено, а вами займутся немедленно, с наивысшим приоритетом

  

Почему-то мне кажется, что при "поддержке" программиста в течении какого-то срока после сдачи заказа вероятность второго варианта будет намного выше :) Хотя, конечно, все эти вещи надо оговаривать явно. Вам же их не навязывают? 

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

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

  

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

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

  

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

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

[Кирилл Кривицкий](http://toster.ru/user/KrivitskiyKirill): Дополню: что бы что то реализовать нужно сначала придумать как именно это реализовать. Составить список конкретных задач, детализировать используемые алгоритмы и структуры данных, итд. Это работа которую в любом случае придется сделать, просто можно поручить её профессионалам - тимлидеру, pm, итд - и получить на выходе продукт быстрее, качественнее, но дороже - а можно отдать на откуп самому разработчику. Но в любом случае это значительный объем необходимой работы, который никто не будет делать бесплатно 

 имхо - почасовая оплата - это неправильно. Есть задача - есть цена решения этой задачи - есть срок для этой задачи. Решу я ее за 2 часа или за 2 суток - мое дело, главное в срок и качественно. 

 Взяться за правку кода - это все равно, что начать разматывать клубок. Одно дело если там весь скрипт или программа в 10 строк. Скорость работы большая, быстро понял что и где не так и поправил (но это тоже не факт, смотря какие 10 строк:) ). А если у Вас программа или самописный движок у сайта и что-то поломалось....как найти в чем проблема не зная, что там за код? Да, есть условные "маяки", как у автомеханика, например. Стучит на ходу где-то справа, а при повороте? Хм...только на кочках, тогда понятно куда копать.   

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

По поводу поддержки. Например, при выборе хостинга, Вы обращаете внимание на то, как работает тех. поддержка, 24/7 или по будням с 9 до 18 да еще и в отличном часовом поясе. Услуги данной тех. поддержки включены в тариф и Вы за нее платите, не зависимо от того пользуетесь или нет. НО! В любой момент, случись беда, Вы туда позвоните/напишете и за Вашу проблему возьмутся. Так и тут. Вы платите ежемесячно за уверенность в том, что в нужный момент человек бросит свои дела и будет решать Вашу проблему.  

Может не совсем внятно изложил мысль, но надеюсь понятно))) 

 явление, когда берет деньги, и "разбирается", нормальное в случае постоянки: есть некая ставка, зависит от скиллов - накопленого опыта и общей сообразительности - и есть любые чаяния заказчика, которые прогер исполняет. Обычно больше ставка - исполняет быстрее - потому что скиллы. Там нормально, что он разбирается в рабочее время.  
  

В случае же, когда дается ТЗ на фрилансе и прогер берется сделать за N часов, соглашаться, что 0.5 N ушло на изучение задачи нельзя. Однако для себя ставьте 1,5-2 N к срокам, озвучиваемым программистами и постоянно контролируйте.  
  

Поддержка - обычно смесь 1 и 2 пунктов, некая плата за уверенность, что когда что-то нужно будет исправить, прогер не исчезнет. Она должна быть в пределах 0,25-0,5 стоимости вникания в задачу нового прогера 

 Поддержка продукта - программирование, связанное с тем, что  

1) в продукте в любом случае будут баги, будут проблемы, их нужно чинить  

2) заказчик всегда захочет версию 2.0 с новыми фичами и прибамбасами  

3) меняется железо, меняется операционная система. То, что работало в win95 может не работать в WinXP, то что работает в java6, может не работать в java8, и таких моментов океаны.  
  

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

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

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

 Как-то 10 лет назад (в студенческие годы) я обслуживал компьютерный клуб. Когда пришло время платить (всего 3000 рублей) работодатель меня спросил: "За, что мне тебе платить деньги? Ты не сидел в клубе, как предыдущий программист".  

Как я узнал до меня работал чел. который сидел от открытия до закрытия каждый день там..  

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

Я ему ответил в тот день: "В клубе все компьютеры работают? " Он ответил: "Да". И я сказал: "Вот за это вы мне и платите". И он заплатил. Правда мне это разговор не понравился и я уволился тут же. 

 Очень просто.  

Разработка включает:  

анализ архитектуры, выявление требований, анализ рисков, планирование, построение архитектуры, проектирование, конструирование, тестирование (в т.ч. альфа-тестирование, бета-тестирование), развёртывание.  

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

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

Когда вам всё это объявят по пунктам, вы заплатите значительно дороже :) 

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