Какие наиболее спорное программирование мнение?

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

Идея этого вопроса исходила из потока комментариев из моего ответа на "Что есть пять вещей, которые вы ненавидите ваш любимый язык?" вопрос. Я утверждал, что классы на С# должны быть опечатаны по умолчанию - я не буду ставить свои аргументы в вопросе, но я мог бы написать более полное объяснение в качестве ответа на этот вопрос. Я был удивлен жаром обсуждения в комментариях (25 комментариев в настоящее время).

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

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

Ответы

Ответ 1

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

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

(Примечание: я не говорю, что хорошие программисты не делают ничего, кроме программирования, но они делают больше, чем программу от 9 до 5)

Ответ 2

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

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

EDIT: Просто чтобы уточнить - я не думаю, что люди должны игнорировать передовые методы, ценные мнения и т.д. Просто чтобы люди не просто слепо прыгали на что-то, не думая о том, ПОЧЕМУ эта "вещь" настолько велика, что она применима к тому, что я и какие преимущества/недостатки он приносит?

Ответ 3

Большинство комментариев в коде на самом деле являются пагубной формой дублирования кода.

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

Я думаю, что в конечном итоге многие люди просто затушивают их, особенно те монстры из цветочных коробок.

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

С другой стороны, многие курсы учат, что комментарии очень важны, чем сам код, что приводит к тому, что следующая строка добавляет один к invoiceTotal для комментариев.

Ответ 4

"Googling it" в порядке!

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

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

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

(хотя, если вы получаете ответы от галлюцинаторных говорящих лягушек, вы, вероятно, должны получить какую-то помощь)

Ответ 5

XML сильно переоценен

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

Мои 5 центов

Ответ 6

Не все программисты созданы равными

Довольно часто менеджеры считают, что DeveloperA == DeveloperB просто потому, что они имеют одинаковый уровень опыта и так далее. На самом деле производительность одного разработчика может быть в 10 раз или даже в 100 раз больше, чем у другого разработчика.

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

Ответ 7

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

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

Для другого, я считаю, что люди, которые не имели опыта в отладке утечек памяти в C/С++, не могут полностью оценить, что Java приносит в таблицу.

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

Ответ 8

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

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

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

Ответ 9

Производительность имеет значение.

Ответ 10

Операторы печати являются допустимым способом отладки кода

Я считаю, что отлично отлаживать ваш код, помещая его System.out.println (или любой другой оператор печати работает для вашего языка). Часто это может быть быстрее, чем отладка, и вы можете сравнивать печатные результаты с другими прогонами приложения.

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

Ответ 11

Ваша задача - отключить работу.

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

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

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

Ответ 12

1) Бизнес-приложения фарс:

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

Возьмите любую регулярную Java или .NET ORM или любую предположительно современную среду MVC для тех, кто делает "магию" для решения утомительных простых задач. Вы в конечном итоге пишете огромное количество уродливого шаблона XML, который трудно проверить и быстро записать. У вас есть обширные API-интерфейсы, в которых половина из них предназначена для интеграции работы других API-интерфейсов, интерфейсов, которые невозможно перерабатывать, и абстрактных классов, которые необходимы только для преодоления негибкости Java и С#. Нам просто не нужна большая часть этого.

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

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

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

2) Требуемый n-летный опыт:

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

3) Общая учебная программа по "информатике":

Большинство степеней информатики и программного обеспечения являются быками. Если ваш первый язык программирования - Java или С#, то вы делаете что-то неправильно. Если вы не получите несколько курсов, полных алгебры и математики, это неправильно. Если вы не вникаете в функциональное программирование, это неполное. Если вы не можете применить инварианты цикла к тривиальному циклу, вы не стоите своей соли как предполагаемого компьютерного ученого. Если вы получаете опыт работы с x и y языками и ориентацией объектов, он заполнен s ***. Настоящий ученый-компьютер видит язык с точки зрения понятий и синтаксисов, которые он использует, и рассматривает методологии программирования как один из многих, и имеет такое хорошее понимание основополагающих философий как выбора новых языков, методов проектирования, так и языков спецификации быть тривиальным.

Ответ 13

Getters и Setters сильно злоупотребляются

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

Я не сторонник публичных полей, но против создания getter/setter (или Property) для каждого из них, а затем утверждая, что это означает инкапсуляция или скрытие информации... ha!

UPDATE:

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

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

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

Многие думают:

private fields + public accessors == encapsulation

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

Наконец, позвольте мне процитировать Дядя Боб в этом разделе (взято из главы 6 "Чистого кода" ):

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

Ответ 15

Мнение: SQL - это код. Рассматривайте это как таковое

То есть, как и ваш С#, Java или другой любимый язык объектов/процедур, создайте стиль форматирования, который является читабельным и поддерживаемым.

Я ненавижу, когда вижу неаккуратный SQL-код с форматированием. Если вы кричите, когда видите страницу с двумя фигурами фигурных скобок на странице, почему или почему вы не кричите, когда видите свободный форматированный SQL или SQL, который скрывает или смущает условие JOIN?

Ответ 16

Считываемость - это самый важный аспект вашего кода.

Более того, чем правильность. Если он читается, его легко исправить. Это также легко оптимизировать, легко изменить, легко понять. И, надеюсь, другие разработчики могут чему-то научиться и у него.

Ответ 17

Если вы разработчик, вы должны иметь возможность писать код

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

Учитывая, что Pi можно оценить, используя функцию 4 * (1 - 1/3 + 1/5 - 1/7 +...) с большим количеством членов, дающих большую точность, напишите функцию, которая вычисляет Pi с точностью до 5 знаков после запятой.

Это проблема, которая должна заставлять вас думать, но не должна быть вне досягаемости опытного разработчика (на нее можно ответить примерно на 10 строк С#). Однако многие из наших (предположительно предварительно отобранных агентством) кандидатов не могли даже начать отвечать на них или даже объяснить, как они могут ответить на него. Поэтому через некоторое время я начал задавать более простые вопросы вроде:

Учитывая, что площадь круга задается Pi раз радиус квадрата, напишите функцию, чтобы вычислить площадь круга.

Удивительно, но более половины кандидатов не могли написать эту функцию на любом языке (я могу читать самые популярные языки, поэтому я позволяю им использовать любой язык по своему выбору, включая псевдокод). У нас были "разработчики С#", которые не могли записать эту функцию в С#.

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


Edit:

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

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

Ответ 18

Использование венгерской нотации должно быть наказано смертью.

Это должно быть достаточно противоречивым;)

Ответ 19

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

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

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

Ответ 20

Меньше кода лучше, чем больше!

Если пользователи говорят "что это?", и ваша работа остается невидимой, все делается правильно. Слава можно найти в другом месте.

Ответ 21

PHP отстой; -)

Доказательство находится в пудинге.

Ответ 22

Тестирование устройств не поможет вам написать хороший код

Единственная причина для модульных тестов - убедиться, что код, который уже работает, не прерывается. Сначала писать тесты или писать код на тесты - это смешно. Если вы напишете тесты перед кодом, вы даже не узнаете, что такое край. У вас может быть код, который проходит тесты, но все еще не выполняется в непредвиденных обстоятельствах.

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

На самом деле, я обобщу это еще дальше,

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

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

Ответ 23

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

Я думаю, что метод должен быть создан везде, где вы можете его назвать.

Ответ 24

Хорошо писать код мусора раз в то время

Иногда быстрый и грязный кусок кода мусора - это все, что необходимо для выполнения конкретной задачи. Шаблоны, ORM, SRP, что угодно... Бросьте консоль или веб-приложение, напишите встроенный sql (чувствует себя хорошо) и выполните требование.

Ответ 25

Код == Дизайн

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


Вот статья на тему Code as Design.

Ответ 26

Разработка программного обеспечения - это просто работа

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

Но в великой схеме вещей это просто работа.

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

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

Ответ 27

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

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

Ответ 28

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

Ответ 29

Архитекторы/дизайнеры программного обеспечения переоценены

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

Как это противоречиво?

Изменить (уточнить): Я думаю, что большинство архитекторов программного обеспечения делают замечательных аналитиков бизнеса (разговаривают с клиентами, пишут требования, тесты и т.д.), я просто думаю, что им не место в разработке программного обеспечения, на высоком уровне или в противном случае.

Ответ 30

В разработке не существует подхода "один размер подходит всем"

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

Вещи, которые я видел, рекламируются как правильный подход для любого проекта - до того, как любая информация известна об этом - это такие вещи, как использование Test Driven Development (TDD), Domain Driven Design (DDD), Object-Relational Mapping (ORM), Agile (капитал A), Ориентация объектов (OO) и т.д. И т.д., Охватывающие все: от методологий до архитектурных компонентов. Все с хорошими товарными акронимами, конечно.

Люди даже, кажется, доходят до того, что помещают значки в свои блоги, такие как "I'm Test Driven" или аналогичные, как если бы их строгое соблюдение единого подхода, независимо от того, какие детали проекта были на самом деле хороши.

Это не так.

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