К извечному вопросу: любители табуляции зарабатывают меньше, чем сторонники пробелов

Возврат к списку

19.06.2017     
Аналитик системы вопросов и ответов о программировании Stack Overflow Дэвид Робинсон сопоставил данные об уровне зарплат программистов с данными о предпочитаемой технике форматирования кода и обнаружил, что любители пробелов зарабатывают больше, чем сторонники табуляции.
 
Большинство программистов для удобочитаемости кода используют форматирование отступами, что позволяет выделить в коде отдельные блоки. При этом одни разработчики создают отступ несколькими пробелами, а другие – табуляцией. Главной проблемой такого подхода является то, что при работе над одним проектом нескольких человек, использующих разные отступы, форматирование сбивается и код становится трудночитаемым. 
 
Дэвид Робертсон воспользовался данными опроса разработчиков за 2017 год, проведенного  Stack Overflow. Из 28 657 разработчиков, обозначивших себя профессиональными программистами, 40,7% используют табуляцию, а 41,8% форматируют код с помощью пробелов. Оставшиеся 17,5% ответили, что используют оба метода форматирования.

При этом из 12 426 опрошенных предоставили свои данные о годовой зарплате, что позволило сопоставить данные о доходах с предпочитаемой техникой форматирования кода. Выяснилось, что программисты, использующие пробелы получают в среднем больше, чем любители табуляции. хотя имеют не большой разрыв в зарплате. Те разработчики, которые используют оба метода форматирования, в среднем зарабатывают столько же, сколько и те, кто пользуется только табуляцией.
 
Помимо общего сопоставления, аналитик также распределил данные по странам. Оказалось, что меньше всего разрыв в зарплате заметен в Европе (Германия), а самый значительный – наблюдается в Индии. 
 
По итогам анализа данных, Робинсон выделил несколько ключевых признаков, связанных с уровнем дохода профессионального программиста: пробелы или табуляция, страна, опыт программирования, сфера работы и язык программирования, уровень образования, участие в проектах с открытым исходным кодом, программирование как хобби и размер компании. Как считает исследователь, в среднем пробелы вместо табуляции связаны с повышенной на 8,6% зарплатой. По подсчетам Робинсона, такая прибавка в зарплате эквивалентна дополнительным 2,4 года программирования, хотя корреляция не обязательно указывает на причинно-следственную связь. 
 
Ранее разработчик из Google Фелипе Хоффа выяснил по итогам анализа более миллиарда файлов из 400 тыс. репозиториев на GitHub, что форматирование кода с помощью пробелов в общем случае используется чаще, чем форматирование с помощью табуляции. 


Вы используете табуляцию или пробел для отступа?


Табуляцию (65.69%, 67 голосов.)
65.69%
Пробел (6.86%, 7 голосов.)
6.86%
Оба варианта (27.45%, 28 голосов.)
27.45%

Комментарии
1. Ivan Khorkov (vano-ekt) 866 19.06.17 13:45 Сейчас в теме
любители Alt+Shift+F опять в анализ не попали? :)
Gureev; Waanneek; TreeDogNight; madonov; grachev1c; +5 Ответить 2
2. Алексей 1 (AlX0id) 19.06.17 14:41 Сейчас в теме
(1)
Они анализ проводили, в то время как остальное форматировали код )
TreeDogNight; +1 Ответить
3. Николай Больсунов (boln) 922 19.06.17 14:43 Сейчас в теме
Мало у нас холиваров на пустом месте - так вот, пожалте, еще один холивар на тарелочке.
user595120_rybolovlev_ms; turrrrist; TreeDogNight; корум; +4 Ответить
4. Сергей Ожерельев (Поручик) 3561 19.06.17 15:08 Сейчас в теме
Зарплата больше, потому что затраты времени на форматирование больше - поставить четыре пробела - это четыре раза нажать space, а если tab - то только два раза.
щас выдерну из клавиатуры tab и потребую прибавку к зарплате.
TreeDogNight; SunShinne; ipoloskov; abadonna83; +4 Ответить
5. Доржи Цыденов (support) 4469 19.06.17 15:27 Сейчас в теме
6. DUH Technolover (DJDUH) 16 19.06.17 15:35 Сейчас в теме
(0) из разряда: " ты какой рукой подтираешь (_!_) " - такой у тебя характер?

Ответ
7. Николай Больсунов (boln) 922 19.06.17 15:42 Сейчас в теме
(6) Старый анекдот вспомнился.

Студент спрашивает профессора:
- Профессор, вы, когда спите, бороду прячете под одеяло или снаружи оставляете?
- Знаете, голубчик, не задумывался...
Через неделю профессор останавливает студента в коридоре:
- Ну ты и сволочь! Неделю заснуть не могу: так не удобно и так тоже не удобно!
8. Perlamutor Perlamutor (PerlAmutor) 19.06.17 15:45 Сейчас в теме
Всегда использовал автозамену символа табуляции на 4 пробела в других языках, но 1С в этом плане меня расстроила - она не умеет убирать 4 пробела клавишей backspace в отличие от других IDE... Поэтому по принуждению использую табуляции...
biz-intel; +1 Ответить
9. Nikolay D (nikolayD) 7 19.06.17 15:53 Сейчас в теме
Опрос в новости был "заказан" пробельщиками. :)

Табуляцию (41.67%, 5 голосов.)
41.67%
Пробел (0.00%, 0 голосов.)
Оба варианта (58.33%, 7 голосов.)
Наши побеждают :)

В плане 1С, мне кажется, актуально "как учили", "так принято".
По моему, в Делфе и паскале я юзал пробелы, а как в 1С ушёл, так почти только табуляцией, а так и тем и тем.
10. Алексей Роза (DoctorRoza) 19.06.17 16:29 Сейчас в теме
(1) В анализ попали те, кто любит Alt+Ctrl+I (кто в теме - респект!)
11. Сергей Ожерельев (Поручик) 3561 19.06.17 16:49 Сейчас в теме
Я всегда использовал табуляцию. Тупок.... Пробельшикам анафема и гореть в аду без покаяния.

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

…Насчитывают до одиннадцати тысяч фанатиков, которые в течение этого времени пошли на казнь, лишь бы не разбивать яйца с острого конца. Были напечатаны сотни огромных томов, посвящённых этой полемике, но книги Тупоконечников давно запрещены, и вся партия лишена законом права занимать государственные должности.
TreeDogNight; manuel; nihfalck; Waanneek; SunShinne; +5 Ответить 1
12. Damir (twiny) 5 19.06.17 17:33 Сейчас в теме
а они учитывали, что это может быть эхо старых RADов и прочих сред разработки?
например, начинал в свое время с TP7, так там вроде даже ТАБ не работал, нужно было пробелы ставить
13. kav kav (alexkmbk) 16 19.06.17 18:14 Сейчас в теме
(11) А вот история с тем сколько пальцев использовать для крестного знамения, вполне реальная и весьма печальная.
корум; boln; +2 Ответить 1
14. Sergey Andreev (starik-2005) 979 19.06.17 20:50 Сейчас в теме
(12)
начинал в свое время с TP7, так там вроде даже ТАБ не работал
Работал. Но я там больше на asm'е писал.
15. Сергей Ожерельев (Поручик) 3561 19.06.17 23:50 Сейчас в теме
(13) Ну в конце концов во многом благодаря борьбе русских тупоконечников и остроконечников двоеперстников и троеперстников было положено освоение Урала, Сибири. Если помните, у нас те реформы всё-таки не привели к масштабной мясорубке, в отличие от одного европейского островного государства. Ну и царям у нас головы прилюдно не рубили.
16. Виталий Петров (vipetrov2) 20.06.17 07:05 Сейчас в теме
"Индусский код" явно приносит больше дохода, особенно в Индии.
17. Iwan Nemchinov (Waanneek) 17 20.06.17 09:52 Сейчас в теме
В 1с я считаю только таб! за пробелы руки по выдергивать охото.. а некоторые еще и совсем не ставят ничего...
Встречал все 3 примера и последний к сожалению не так уж и редко как хотелось бы:

Если Истина Тогда
 пробел = "я использую проблелы";
 пробел_пробел = "это так удобно..";
 пробел_пробел_пробел = "читать..";
КонецЕсли;
...Показать Скрыть


Если Истина Тогда
	Таб			= "я использую Таб";
	Таб_Таб		= "это так удобно..";
	Таб_Таб_Таб	= "читать!";
КонецЕсли;
...Показать Скрыть


Если Истина Тогда
НеФорматирую="я не использую ни Таб ни пробелы";
НеФорматирую_НеФорматирую="это так удобно..";
НеФорматирую_НеФорматирую_НеФорматирую="читать!";
КонецЕсли;
...Показать Скрыть
TreeDogNight; KazanKokos; +2 Ответить 2
18. Nikolay D (nikolayD) 7 20.06.17 10:16 Сейчас в теме
(17)
Если Истина Тогда
 пробел = "я использую проблелы";
 пробел_пробел = "это так удобно..";
 пробел_пробел_пробел = "читать..";
КонецЕсли;
...Показать Скрыть
Для меня и первый и второй вариант норм читаются. Вот когда мониторы были не 1920х, а 640х.... и у тебя цикл массивом попирает и ничего в ширину не влазит.... то уж лучше пробелы... а с мониками как сейчас и в 1С, то да исключительно табуляция...
19. Iwan Nemchinov (Waanneek) 17 20.06.17 10:20 Сейчас в теме
(18) первый вариант быстро становится не норм, когда строк становится несколько тысяч в одном модуле и имена переменных имеют разную длину.
20. Sergey Andreev (starik-2005) 979 20.06.17 11:07 Сейчас в теме
(15)
Ну и царям у нас головы прилюдно не рубили.
Возможно, зря...
21. Nikolay D (nikolayD) 7 20.06.17 12:59 Сейчас в теме
(19)
первый вариант быстро становится не норм, когда строк становится несколько тысяч в одном модуле и имена переменных имеют разную длину.

Ну, начнём с того, что такого я вообще почти не читал:
Если Истина Тогда
    Таб            = "я использую Таб";
    Таб_Таб        = "это так удобно..";
    Таб_Таб_Таб    = "читать!";
КонецЕсли;
...Показать Скрыть

Обычно вот так норма (хотя у Вас и красиво):
Если Истина Тогда
    Таб = "я использую Таб";
    Таб_Таб = "это так удобно..";
    Таб_Таб_Таб = "читать!";
КонецЕсли;
...Показать Скрыть
Вам тяжело, не значит, что другим так же, привыкаешь ко всему (главное что разбивка есть).... из раздражающего либо без форматирования, либо:
Если Истина Тогда
     Таб = "я использую Таб";
      Таб_Таб = "это так удобно..";
    Таб_Таб_Таб = "читать!";
КонецЕсли;
...Показать Скрыть
22. rjhev korum (корум) 305 20.06.17 13:16 Сейчас в теме
(21)
Ну, начнём с того, что такого я вообще почти не читал:

Если Истина Тогда
    Таб            = "я использую Таб";
    Таб_Таб        = "это так удобно..";
    Таб_Таб_Таб    = "читать!";
КонецЕсли;
...Показать Скрыть

Привет, человек, не пользовавшийся телепаном на семёрке :)
23. Николай Больсунов (boln) 922 20.06.17 14:00 Сейчас в теме
(17)
а некоторые еще и совсем не ставят ничего...
Угу. На всех уровнях Если...Тогда... - ни одного отступа слева. "Повбывав бы...". Хорошо, есть клавиша форматирования.
Waanneek; +1 Ответить
24. Iwan Nemchinov (Waanneek) 17 20.06.17 14:06 Сейчас в теме
(21)
Ну, начнём с того, что такого я вообще почти не читал:

Странно, везде где довелось работать, такое табулирование считается признаком хорошего тона, даже в снегопате настраивается по Ctrl+= чтоб знаки присвоения были на одном уровне. Знаю еще что в SublimText такое выравнивание применяется, функция редактора. В исходном коде на различных языках тоже встречал (C#, java, python).

Обычно вот так норма (хотя у Вас и красиво):

Такой вариант очень часто применяется когда небольшие блоки, буквально несколько строчек.
25. Nikolay D (nikolayD) 7 20.06.17 14:17 Сейчас в теме
(22) Привет. Я на 7-ке ооочень мало прогил :))) Я тогда сисадминил и "баловался" 1С. Из достижений в 7,7 у меня отчёт, который делался до меня за час, а у меня, после переписи делался за 5 минут. На этом почти всё, не считая нескольких печатных форм.

(24)
Странно, везде где довелось работать, такое табулирование считается признаком хорошего тона
Видимо в самой 1С об этом не слыхали, откройте их код, я учился на нём :)
даже в снегопате
Даже снегопатом не все пользуются, я, например :)
26. Валерий К (klinval) 201 20.06.17 17:40 Сейчас в теме
(24)
Странно, везде где довелось работать, такое табулирование считается признаком хорошего тона, даже в снегопате настраивается по Ctrl+= чтоб знаки присвоения были на одном уровне.

Вот что пишет Стив Макконнелл в книге "Совершенный код"
Не выравнивайте правые части выражений присваивания В первом издании этой книги я рекомендовал выравнивать правые части выражений, содержащие присваивания

//Тут у него пример похожий на наш:
Если Истина Тогда
    Таб				= "я использую Таб";
    Таб_Таб			= "это так удобно..";
    Таб_Таб_Таб		= "читать!";
КонецЕсли;
...Показать Скрыть


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

//Тут у него пример похожий на наш:
Если Истина Тогда
	Таб = "я использую Таб";
	Таб_Таб = "это так удобно..";
	Таб_Таб_Таб = "читать!";
КонецЕсли;
...Показать Скрыть


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

А по большому счету я бы никого ни заставлял ни поругал бы ни за один из выше написанных вариантов. Главное, чтобы не так:
Если Истина Тогда
  Таб = "я использую Таб";
Таб_Таб = "это так удобно..";
        Таб_Таб_Таб = "читать!";
КонецЕсли;
...Показать Скрыть
nikolayD; ipoloskov; +2 Ответить 1
27. Антон Костин (WalterMort) 158 20.06.17 17:51 Сейчас в теме
Было бы странно, если бы любители венгерской нотации, кастомизации воркфрэймов и прочих медитаций зарабатывали меньше, чем салаги, только осваивающие среды в дефолтном режиме. Мелковат аналитик пошел...
28. Николай Больсунов (boln) 922 20.06.17 18:11 Сейчас в теме
(26)
//Тут у него пример похожий на наш:
Если Истина Тогда
    Таб                = "я использую Таб";
    Таб_Таб            = "это так удобно..";
    Таб_Таб_Таб        = "читать!";
КонецЕсли;

Скрыть
...Показать Скрыть
Если только в этом неудобство, то выравнивание можно автоматизировать. Я уже больше 10 лет назад делал такой выравниватель для 1С на Delphi. И в EDT тоже.

Вообще рубка по поводу этого выравнивания уже здесь идет:
http://forum.infostart.ru/forum9/topic173250/
29. Валерий К (klinval) 201 21.06.17 09:34 Сейчас в теме
(28) Автоматизация предполагает запуск какой-то внешнего скрипта, который на новой платформе могут рухнуть, запускаются секунду. Плюс в указанной вами ветке форума вычитал справедливый аргумент:
присвоение удобно искать по строке "ИмяРеквизита =", поиск просто по "ИмяРеквизита" найдёт все места использования реквизита, а не случаи его инициализации

Лично я не против обоих вариантов. На текущий момент в платформе нельзя это выравнивание сделать "из под коробки" и нельзя найти по "ИмяРеквизита =" все совпадения без учета табов и пробелов (например "ИмяРеквизита <тут 10 пробелов, которые инфостарт обрезал> ="). Поэтому сейчас я предпочту вариант без выравнивания!
30. Николай Больсунов (boln) 922 21.06.17 09:43 Сейчас в теме
(29) Никакого скрипта. Выделение - копирование в буфер - выравнивание - вставка из буфера. Абсолютно безболезненно.

А в Вашем посте новая платформа - это что: EDT или просто новая версия V8?
31. rjhev korum (корум) 305 21.06.17 10:31 Сейчас в теме
(29) поиск просто по "ИмяРеквизита" найдёт все места использования реквизита, а не случаи его инициализации
... и заодно покажет, где "ИмяРеквизита" передаётся в процедуры/функции, в которых ИмяРеквизита может быть переприсвоено.
32. Валерий К (klinval) 201 21.06.17 10:31 Сейчас в теме
(30)
Никакого скрипта. Выделение - копирование в буфер - выравнивание - вставка из буфера. Абсолютно безболезненно.

Если никакого скрипта (т.е. ручное копирование во внешнюю программу, потом ручная вставка) то это это потерянное время программиста. В указанной вами ссылке всё делается, как я понял через скрипты, которые запускаются секунду по нажатию Ctrl+Alt+F.
А в Вашем посте новая платформа - это что: EDT или просто новая версия V8?

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

Если даже вы мне докажете, что будет работать на любом релизе платформы, в любом случае (скрипты и не скрипты) - время потерянно и не решён вопрос поиска по "ИмяРеквизита =".

Но опять таки повторюсь уже в 3 раз за 3 сообщения: я не против обоих вариантов! Вот только для варианта с выравниванием знака "=" не хватает встроенных механизмов платформы. Поэтому я считаю пока есть смысл не придерживаться этого варианта.
33. Валерий К (klinval) 201 21.06.17 10:41 Сейчас в теме
(31)
поиск просто по "ИмяРеквизита" найдёт все места использования реквизита, а не случаи его инициализации
... и заодно покажет, где "ИмяРеквизита" передаётся в процедуры/функции, в которых ИмяРеквизита может быть переприсвоено.

... а может вообще ни разу не найтись, т.к. "ИмяРеквизита" - это реквизит формы и в какую-то процедуру общего модуля передаётся форма и там уже меняется "ИмяРеквизита"

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


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

Поэтому я предлагаю закончить "войну", тем более я с ваш способ форматирования не отвергал. Просто я считаю, что с текущими возможностями платформы не рационально тратить на него время.
34. Николай Больсунов (boln) 922 21.06.17 11:32 Сейчас в теме
(32)
Если никакого скрипта (т.е. ручное копирование во внешнюю программу, потом ручная вставка) то это это потерянное время программиста.
Сделать лишнюю пару Ctrl-C/Ctrl-V никому не влом, делаем в работе десятки раз. Программа запускается как exe-шник и садится в трей. Вот, если угодно:
https://www.youtube.com/watch?v=R8WB-Y24w_A&feature=youtu.be

Если даже вы мне докажете, что будет работать на любом релизе платформы, в любом случае (скрипты и не скрипты) - время потерянно и не решён вопрос поиска по "ИмяРеквизита =".
Тут и доказывать не надо, копипаст есть на любом релизе. Что касается поиска, то я такой цели и не ставил. Это просто игрушка, Снегопату это ни разу не конкурент.

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