Какое ваше самое противоречивое мнение о программировании?

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
363
0
291 877
407

Ответы 407

Миру нужно больше GOTO

GOTO часто религиозно избегают без каких-либо объяснений, кроме «мой профессор сказал мне, что GOTO - это плохо». У них есть цель, и они во многих местах значительно упростят производственный код.

Тем не менее, они не нужны в 99% кода, который вы когда-либо напишете.

Я согласен. Не обязательно, что нам нужно больше goto, но иногда программисты идут на смехотворные меры, чтобы их избежать: например, создают причудливые конструкции вроде: do {... break; ...} в то время как (ложь); имитировать goto, делая вид, что не используете его.

Ferruccio 02.01.2009 16:20

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

Kezzer 02.01.2009 16:22

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

Mark Davidson 02.01.2009 16:24

Я использовал GOTO в операторах switch, чтобы логика переходила повсюду, и у меня не было проблем с этим (не считая того факта, что я заставил FxCop жаловаться на сложность рассматриваемого метода).

Dmitri Nesteruk 02.01.2009 16:49

Я видел только 1 пример хорошего использования за последние 5 лет, так что сделайте 99 999 процентов.

Paco 02.01.2009 16:51

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

Gene Roberts 02.01.2009 18:06

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

Steve B. 02.01.2009 20:32

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

BenAlabaster 03.01.2009 02:14

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

Jesse Weigert 03.01.2009 06:39

Я слышал объяснение, что GOTO делают стек недетерминированным. Если вы попали в строку с GOTO, невозможно узнать, как вы туда попали. Значительно усложняет отладку.

dj_segfault 03.01.2009 07:05

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

Loren Pechtel 03.01.2009 08:07

Приятно видеть, что это действительно вызвало много споров!

Max 03.01.2009 12:24

Я считаю, что goto не очень читаемы. Я презираю их в SQL, так зачем мне их использовать где-нибудь еще?

Jeremy 04.01.2009 00:18

@ Джереми, вы можете сделать goto в SQL? SQL - это декларативный язык. У какого поставщика базы данных есть SQL, который знает goto?

tuinstoel 05.01.2009 01:09

@tuinstoel, MSSQL поддерживает его как минимум с 6.5. Я часто использую его для начала, транзакции фиксации / отката в хранимых процедурах.

Jeremy 05.01.2009 05:58

@ Джереми, разве вы не имеете в виду T-SQL вместо SQL?

tuinstoel 05.01.2009 13:48

Насколько мне известно на ассемблере / машинном языке, все ветвления являются формами goto. Во что скомпилирован ваш язык высокого уровня? Нет ничего плохого в случайном использовании ярлыков «низкоуровневого стиля», если все сделано правильно.

Andy Webb 05.01.2009 22:23

Continue = goto для циклов; Break = перейти к блокам; переключатель = goto безумие; Очевидно, что Goto не проблема, если использовать его с некоторой долей здравого смысла. Если вы используете объектно-ориентированный язык и используете Goto для ошибок и очистки, вы меня пугаете. RAII и его аналоги следует считать вашими друзьями.

Greg Domjan 06.01.2009 05:34

+1 за споры :). О, я знаю, что такое GOTO, я начал с BASIC, как и многие из вас. Нам нужно больше GOTO, как нам нужны имена файлов DOS 8.3, простая кодировка ASCII, файловые системы FAT 16 и 5 1/4 дюймовые дискеты.

postfuturist 07.01.2009 11:26

Только что нашел это: stackoverflow.com/questions/84556/…

Cameron MacFarland 08.01.2009 07:31

Хороший пример goto: stackoverflow.com/questions/416464/…

FryGuy 10.01.2009 02:13

Я довольно часто использовал goto в программировании на C - обычно как блок finally. У меня есть дескриптор файла, который мне нужно закрыть, память, которую мне нужно освободить, и т. д., Поэтому в момент, когда я вернусь раньше, я просто устанавливаю код возврата и перехожу к метке cleanup :.

Hamish Downer 10.01.2009 21:30

Gotos также часто используются для кодирования конечных автоматов. Вы можете использовать перечисление, оператор switch и цикл для достижения того же эффекта. Однако все, что на самом деле делает, это маскирует истинную структуру вашего потока управления (и немного замедляет работу).

T.E.D. 14.01.2009 21:05

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

MarkJ 27.01.2009 14:35

Эта ветка считается вредной. Эдсгер Дейкстра катается в могиле. :)

Darcy Casselman 23.03.2009 17:07

Согласовано. Я изо всех сил пытаюсь перевести числовой код из Фортрана в F#, потому что ему не хватает эффективной конструкции goto.

J D 05.05.2009 16:18

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

Austin 14.05.2009 20:22

Люди, которые считают gotos злом, никогда не программировали на C, а если и программировали, то делали это плохо. Gotos - это способ Лучший для обработки ошибок на простом C, и повторение цитаты Дейкстраса догматически демонстрирует только незнание. Пожалуйста, прочтите это, прежде чем жаловаться на gotos: eli.thegreenplace.net/2009/04/27/…

catphive 15.06.2009 05:41

Чтобы дополнить замечание catphive об использовании goto в C, вот обсуждение goto разработчиками ядра Linux, когда один человек перескакивает на goto и продолжает рекомендовать избегать его любой ценой: kerneltrap.org/node/553/2131

Coding With Style 04.07.2009 09:22

Собственно, обсуждение использования goto в Linux заставило меня передумать, действительно ли goto вреден для разработки. Я научился не просто доверять тому, чему ты учил :).

OnesimusUnbound 10.09.2009 18:59

Мне были нужны gotos в C, потому что он не имеет эквивалента для Java "continue loopname;"

luiscubal 15.10.2009 22:47

Однажды меня отправили домой из колледжа за то, что я сказал кому-то использовать GOTO: P

ingh.am 05.01.2010 20:25

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

Tom A 08.07.2010 08:37

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

Dennis 28.07.2010 19:05

«У них есть цель, и они могут значительно упростить производственный код во многих местах. Тем не менее, они не нужны в 99% кода, который вы когда-либо напишете». +2 Если бы я мог, сэр, это лучше не было бы написано.

Jake Petroules 17.08.2010 14:47

Извините, но я очень рад, что не видел инструкции GOTO после переноса программы QuickBasic на C#. Дайте мне перерыв в любое время.

wonea 23.09.2010 12:40

Держитесь подальше от Celko !!!!

http://www.dbdebunk.com/page/page/857309.htm

Я думаю, что гораздо разумнее использовать суррогатные первичные ключи, чем «естественные» первичные ключи.


@ocdecio: Фабиан Паскаль приводит (в главе 3 своей книги Практические вопросы управления базами данных, цитируемой в пункте 3 на странице, на которую вы ссылаетесь) в качестве одного из критериев выбора ключа ключ стабильности (он всегда существует и не меняется). Если естественный ключ не обладает таким свойством, то необходимо использовать суррогатный ключ по очевидным причинам, на которые вы намекаете в комментариях.

Вы не знаете, что он написал, и не удосужились проверить, иначе вы могли бы обнаружить, что действительно согласны с ним. Ничего противоречивым там: он говорил «не догматические, адаптировать общие принципы к обстоятельствам, и, прежде всего, думать, использовать свой мозг, а не догматический / поваренную книгу / слова-о-гуру подхода».

Да! Его идеи о иерархических структурах данных изящны с академической точки зрения и совершенно бесполезны.

Charles Bretana 02.01.2009 17:28

Что ж, мне нравится Celko, но я согласен с вами re: суррогатные первичные ключи!

Mark Brittingham 02.01.2009 18:19

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

tekiegreg 03.01.2009 19:34

У меня нет проблем с естественными ключами, которые нужно использовать для удобства, но первичные ключи должны быть неизменными. Однажды у меня была система, которая использовала SSN в качестве PK, и иногда у людей не было их (в детстве), а затем они были. Попробуй сменить ПК, какой бардак ...

Otávio Décio 03.01.2009 19:56

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

Ryan Lundy 04.01.2009 06:21

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

Marcus Downing 09.01.2009 06:08

@ocdecio: Фабиан Паскаль дает (в главе 3 своей книги, как указано в пункте 3 на странице, на которую вы ссылаетесь) в качестве одного из критериев выбора ключа ключ стабильность (он всегда существует и не меняется). Если естественный ключ не обладает таким свойством, то необходимо использовать суррогатный ключ по очевидным причинам, на которые вы намекаете. Итак, вы на самом деле согласны с ним, но думаете иначе. Ничего противоречивым там: он говорил «не догматические, адаптировать общие принципы к обстоятельствам, и, прежде всего, считать, использовать свой мозг, а не догматический / поваренную книгу / слова-о-гуру подхода».

MaD70 22.10.2009 08:50

Одна из классических ошибок - предположить, что вы получите уникальные значения только потому, что естественный ключ кандидата, такой как SSN, по определению уникален. Люди могут лгать или совершать ошибки, и тогда у вас есть шанс столкнуться, когда появится «настоящий человек».

Andy Dent 21.12.2009 06:46

Уважайте принцип единой ответственности

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

Согласитесь, но не очень спорно?

Ed Guiness 02.01.2009 17:06

это спорно, потому что некрасиво беспорядок, что большинство людей называют MVC в основном «сделать все»

Javier 02.01.2009 17:14

Действительно? На самом деле я думал, что MVC был противоположностью этого.

Leonardo Herrera 02.01.2009 17:41

Этот ответ, кажется, вызывает споры о его противоречивости. ;П

strager 03.01.2009 00:51

Я согласен RE: MVC - действительно сложно ограничить раздувание методов на контроллерах

Andrew Harry 05.01.2009 10:39

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

Pop Catalin 08.01.2009 01:04

Если вы не думаете, что это спорно, вы, вероятно, не знаете, как далеко вы можете пойти с этим. :-)

Hans-Peter Störr 11.12.2009 23:07

Если бы я был спорным, Я должен предположить, что Джон Скит не всемогущ ...

Да, видимо, это очень спорная точка зрения

Gareth 02.01.2009 17:28

BLASPHE --- !! Я имею в виду, да, я полностью согласен.

Mike Hofer 02.01.2009 21:02

Похоже, что написание книги по C# еще не означает, что вы знаете все о VB;)

ChrisA 02.01.2009 22:36

Я думаю, вы можете быть в курсе фактов о Джоне Ските. Помните: «Может ли Джон Скит задать вопрос, на который он не может ответить? Да. И он тоже может на него ответить». Он всемогущ!

Vlad Gudim 07.01.2009 16:57

Сначала я подумал, что вы сказали, что Джон Скит не импотент.

John D. Cook 11.01.2009 06:34

@Totophil: Интересный комментарий, если учесть: Джон Скит задал этот вопрос (и он опубликовал ответ ...)

James Curran 18.02.2009 18:39

На своем рабочем месте я стараюсь привить больше навыков разработки Agile / XP. Непрерывный дизайн - это то, к чему я до сих пор испытывал наибольшее сопротивление. Может, мне не стоило выражаться так: «Давайте соберем всю команду архитекторов и расстреляем их» ...;)

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

Mike Dunlavey 03.11.2009 17:38

Я много работаю в ASP.NET / VB.NET и считаю ViewState абсолютным кошмаром. Он включен по умолчанию для большинства полей и вызывает большое количество закодированных данных в начале каждой веб-страницы. Чем больше становится страница с точки зрения элементов управления на странице, тем больше становятся данные ViewState. Большинство людей не обращают на это внимания, но они создают большой набор данных, которые обычно не имеют отношения к задачам, выполняемым на странице. Вы должны вручную отключить этот параметр для всех элементов управления ASP, если они не используются. Либо так, либо есть настраиваемые элементы управления для всего.

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

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

Кстати, вы можете отредактировать голосование в этой ветке, некоторые могут сильно накалить;)

Не могли бы вы выделить свое неоднозначное мнение ... это "viewstate плохо" или что-то еще?

Ed Guiness 02.01.2009 17:07

Нет, это «ViewState включен по умолчанию, хотя я действительно не думаю, что это должно быть, но для его отключения по умолчанию требуются настраиваемые элементы управления»

Kezzer 02.01.2009 17:21

Я ожидаю, что любой, кто работал над ASP.NET, согласился бы с этим. У нас есть страница для поиска сторонней системы, на которой есть БОЛЬШИЕ раскрывающиеся списки. ViewState удвоил размер страницы уже 200 КБ.

pipTheGeek 02.01.2009 17:34

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

Mark Brittingham 02.01.2009 18:20

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

Kezzer 02.01.2009 18:29

Интересно то, что в большинстве случаев ViewState вообще не нужен!

etsuba 02.01.2009 22:55

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

Paul Mendoza 03.01.2009 22:51

Вы пробовали программировать без ViewState? Я могу обещать вам, что 5 минут с JSP вернут вас запустить во ViewState. Серьезно, ViewState - это проблема НИКОГДА, проблема в том, что разработчик использует ViewState!

Thomas Hansen 10.01.2009 23:51

@ Пол, я безумно согласен! Не кидайте на страницу столько дерьма, если у вас проблемы с ViewState - вернитесь к дизайну!

Thomas Hansen 10.01.2009 23:53

Попробуйте ASP.NET MVC, с ним приятно программировать.

Dave 14.01.2009 02:59

Вам не нужно отключать ViewState для каждого элемента управления. Вы можете сделать это в директиве @Page.

xanadont 06.01.2010 20:02

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

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

Обновлено: Просто чтобы прояснить - я не думаю, что люди должны игнорировать передовой опыт, ценные мнения и т. д. Просто люди не должны просто слепо прыгать на что-то, не задумываясь о том, ПОЧЕМУ эта «штука» так хороша, применима ли она к тому, что я делает, и КАКИЕ преимущества / недостатки это приносит?

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

Я думаю, вы переоцениваете объем управления памятью, который имеет место в современном C++. C++ теперь повсюду использует идиому RAII. Утечки памяти больше не вызывают большого беспокойства или проблемы.

Doug T. 02.01.2009 17:16

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

Javier 02.01.2009 17:16

согласен с Дугом; с помощью некоторых простых практических правил утечки памяти в основном устраняются.

Javier 02.01.2009 17:17

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

David Thornley 02.01.2009 17:54

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

glenatron 02.01.2009 18:17

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

David Thornley 02.01.2009 19:09

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

Nemanja Trifunovic 02.01.2009 20:45

Эй, как насчет того, чтобы не беспокоиться о производительности, пока она действительно не станет проблемой, а затем, когда это произойдет, профиль, Профиль ПРОФИЛЬ. Именно в этот момент можно принять решение, сокращать ли путь через минное поле. Это пустая трата денег и времени, чтобы решить, прежде чем это необходимо.

Breton 04.01.2009 13:47

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

Thomas Hansen 10.01.2009 23:54

Привет. Меня зовут Ларри. Приятно познакомиться со всеми вами. :) Я думал, что я один в этом мире, потом я нахожу всех вас, которые думают так же, как я ... Как вы увидите в МОЕМ ответе на этот вопрос. Я ОГРОМНЫЙ поклонник C / C++ и считаю, что если вы не можете правильно использовать C / C++, то не делайте этого вообще. C# НЕ требуется.

LarryF 15.01.2009 02:53

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

Captain Sensible 26.01.2009 13:41
Правильный инструмент, правильная работа. Попробуйте написать это ядро ​​или драйвер сетевой карты на C# и вернитесь к нам. Да, есть много людей, которые придерживаются того языка, который они знают, но ваш однозначный ответ слишком широк. (И это от Java-разработчика!)
Stu Thompson 29.04.2009 00:44

Если бы у нас были действительно хорошо написанные фреймворки для запуска управляемого кода, то я бы сказал, что у вас есть хороший аргумент. К сожалению, с каждым выпуском .NET framework становится все более раздутым, и правда в том, что C++ остается для разработчика единственным способом писать на достаточно высоком уровне и быть уверенным в [способности достичь] хорошей производительности.

Mark 07.07.2009 17:50

Утечки памяти невозможны в C++, если вы используете правильные методы: используйте указатели RAII / Smart вместо необработанных указателей / дескрипторов В худшем случае используйте Valgrind

blwy10 15.10.2009 14:57

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

Я полностью согласен с этим, если нужно изменить переменную в объекте вашего объекта, поэтому вы не получите таких вещей, как: a.b.c.d.e = something; но я бы предпочел использовать: a.x = something; затем a.setX (что-то); Я думаю, что a.x = что-то; на самом деле и легче читать, и красивее, чем установить / получить в том же примере.

Я не вижу причины, делая:

пусто setX (T x) { это-> х = х; }

T getX () { вернуть x; }

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

Согласовано. Геттеры и сеттеры нарушают инкапсуляцию так же сильно, как и непосредственное раскрытие объектов. В них нет никакого реального смысла (кроме, может быть, внешнего интерфейса).

Ferruccio 02.01.2009 16:37

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

Jorn 02.01.2009 16:43

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

David Thornley 02.01.2009 17:51

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

Cristián Romo 03.01.2009 18:35

Python также позволяет вам это делать.

user13876 05.01.2009 14:41

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

David Rodríguez - dribeas 05.01.2009 16:57

Но сейчас 2009 год, и кто все еще использует IDE, которая не создает геттеры и сеттеры при нажатии клавиши ...?

Arjan 22.04.2009 02:47

Дело не только в том, что я должен писать код, но и в том, что геттеры и сеттеры запутывают сам код, в 95% случаев, когда мои приложения занимают место и просто уродливы.

martiert 22.04.2009 03:20

Думаю, C# дает вам простой способ получить и то, и другое, это Java?

rball 19.05.2009 19:59

У меня было / есть такое мнение в некоторых случаях, но для меня ОЧЕНЬ важным фактом является то, что вы не можете «переопределить» общедоступную переменную. Если рассматриваемый класс окончательный, запечатанный, что угодно - круто ... И если вы в основном говорите, что расширители никогда не должны иметь возможность делать что-либо при установке / получении ... когда-либо ...

Gabriel 01.06.2009 22:48

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

Richard Berg 12.06.2009 09:53

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

Mark 07.07.2009 17:52

Вы должен используете геттеры и сеттеры при кодировании интерфейса!

Thorbjørn Ravn Andersen 23.10.2009 23:41

1. Используйте редактор, который сокращает процесс 2. Использование сеттеров и геттеров намного безопаснее, чем прямой доступ к переменной: что, если вы напишете класс с переменной внутри: counter и включите его в код (возможно, в 100 классов) и теперь вдруг решите, что счетчик не может быть отрицательным? использование сеттера может помочь решить подобные проблемы ... 3. Иногда раскрытие переменных может быть опасным; например: предоставление TOS в классе стека

Salvin Francis 15.12.2009 08:33

@Richard Berg В VB6 вы можете изменить публичное поле на свойство и наоборот, не требуя никаких изменений в коде, который его использует, даже не перекомпиляции. Это одна из немногих областей, где VB6 был IMHO лучше, чем .Net.

MarkJ 18.07.2010 01:15

@ Thorbjørn - не обязательно. Тот факт, что разработчики C# / Java решили запретить использование полей в интерфейсах, не делает это изначально плохой идеей. Прямой доступ - это доминирующая идиома в таких разнообразных языках, как C и Ruby.

Richard Berg 20.07.2010 08:09

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

Richard Berg 20.07.2010 08:10

@ Ричард Берг: Я вас не понимаю - прямой доступ является доминирующая идиома для C, но определенно не для Ruby - на самом деле, без рефлексии в Ruby нет способа сделать прямой доступ. Ruby дает вам чрезвычайно простой способ (attr_accessor :x) генерировать геттеры / сеттеры для атрибута, которые синтаксически прозрачны; то есть вы все равно будете использовать p.x и p.x = 3 вместо p.getX() и p.setX(3), но это все еще методы. «Прямая» переменная экземпляра будет @x, и вы не можете использовать с ней точечную нотацию (т. Е. p.@x не грамматичен).

Amadan 11.08.2010 05:03

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

matias 12.11.2010 00:13

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

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

Во-вторых, я считаю, что люди, не имевшие опыта отладки утечек памяти на C / C++, не могут в полной мере оценить то, что предлагает Java.

Кроме того, естественное развитие должно быть от «как я могу сделать это» до «как я могу найти библиотеку, которая это делает», а не наоборот.

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

Мнение: классы должны быть запечатаны по умолчанию в C#

Рассуждение:

Нет сомнений в том, что наследование имеет большое значение. Однако этим нужно несколько руководствоваться. Если кто-то унаследовал от базового класса совершенно неожиданным образом, это может нарушить предположения в базовой реализации. Рассмотрим два метода в базовом классе, где один вызывает другой - если оба эти метода виртуальные, то детали реализации должны быть задокументированы, иначе кто-то может вполне разумно переопределить второй метод и ожидать, что вызов первого сработает. И, конечно же, как только реализация задокументирована, ее нельзя изменить ... так что вы теряете гибкость.

C# сделал шаг в правильном направлении (относительно Java), сделав методы закрытыми по умолчанию. Однако я считаю, что следующий шаг - сделать классы запечатанным по умолчанию - был бы даже лучше. В частности, легко переопределить методы (или явно не запечатать существующие виртуальные методы, которые вы не переопределяете), так что вы получите неожиданное поведение. На самом деле это не помешает вам делать все, что вы можете сделать в настоящее время - это просто изменение По умолчанию, а не изменение доступных параметров. Тем не менее, это было бы «более безопасным» вариантом по умолчанию, так же как доступ по умолчанию в C# всегда является «наиболее приватной видимостью, доступной на данный момент».

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

Контраргумент:

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

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

duffymo 02.01.2009 16:39

Однако C# на самом деле не укоренен в C++ - он довольно сильно укоренен в Java. ИМО, конечно :)

Jon Skeet 02.01.2009 16:45

Это не спорно - это здравый смысл :)

Brian Rasmussen 02.01.2009 16:49

Я понимаю, что связь между C# и Java определенно сильнее, чем у C++, но если бы мы рисовали диаграмму наследования, они оба заявили бы, что C++ является родителем (возможно, прародителем C++).

duffymo 02.01.2009 16:55

+1 от меня. Мне очень редко приходится удалять модификатор sealed (и я делаю все запечатанным по умолчанию, если сразу не ясно, что его нельзя запечатать).

user49572 02.01.2009 17:18

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

Leonardo Herrera 02.01.2009 17:49

«Я считаю, что по умолчанию в C++ все методы делаются не виртуальными, поэтому C# вряд ли сделал шаг в правильном направлении», как это логично? я скучаю по связи. делать методы невиртуальными по умолчанию в C++ - это хорошо (imho) +1

Johannes Schaub - litb 02.01.2009 19:47

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

Chris Smith 02.01.2009 20:12

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

Steven A. Lowe 02.01.2009 21:39

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

Jay Bazuzi 03.01.2009 01:46

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

BenAlabaster 03.01.2009 01:57

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

devstuff 03.01.2009 02:04

@balabaster: Если вы сделаете это, а затем я захочу внести изменения, очень вероятно, что ваш код сломается. Как поставщик кода, я не хочу ставить клиентов в положение, когда у них хрупкий код. (Не то чтобы я на самом деле поставщик кода и т. д. Это теоретически.)

Jon Skeet 03.01.2009 02:08

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

Jeremy 04.01.2009 00:09

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

Jeff Hubbard 04.01.2009 00:10

В принципе согласен, хотя я ненавидел запечатанное по умолчанию поведение методов, когда я использовал ранний C# (на самом деле в Microsoft), потому что иногда мне хотелось перехватывать вызовы метода некоторого библиотечного класса, но я не мог просто создать подкласс, потому что они не делали методы виртуальными.

Joe 04.01.2009 07:25

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

David Rodríguez - dribeas 04.01.2009 15:47

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

Erlend 05.01.2009 12:28

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

Rob Williams 05.01.2009 23:41

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

EricSchaefer 07.01.2009 17:50

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

Jon Skeet 07.01.2009 17:54

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

JoshBerke 13.01.2009 19:15

@Josh: Да, это определенно интересная идея. Есть несколько вариантов, в которых я не хочу быть явным - например, "нелетучие" было бы глупо. Как насчет «записи» как противоположности «только для чтения» для статических переменных и переменных экземпляра? Хм...

Jon Skeet 13.01.2009 19:26

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

LBushkin 14.10.2009 02:37

Самый веский аргумент в пользу того, что классы НЕ должны быть запечатаны по умолчанию, - это то, что это отрицательно скажется на экологии программных библиотек (коммерческих и внутренних). Слишком мало людей тратят время на то, чтобы подумать о том, как их классы могут быть унаследованы - это сложно сделать правильно. Большинство будет придерживаться языка по умолчанию. Программное обеспечение меняется относительно медленно (даже если у вас есть код), и изменение наследуемости будет происходить с задержкой. Наконец, действительно ли люди будут тратить больше времени на проектирование для наследования? Или просто слепо добавить «переопределяемый», когда найдут случай, когда они решат, что им это нужно?

LBushkin 14.10.2009 02:43

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

Jon Skeet 14.10.2009 09:59

Мое противоречивое мнение состоит в том, что конструкцию «Пока» следует удалить из всех языков программирования.

Вы можете легко реплицировать, используя «Повторить» и логический флаг, и я просто не считаю, что полезно иметь две структуры. На самом деле, я думаю, что наличие в языке и «Повторить ... Пока», и «Пока .. Конечное время» сбивает с толку новых программистов.

Обновление - Дополнительные примечания

Одна из распространенных ошибок, которую допускают новые программисты при использовании While, заключается в том, что они предполагают, что код выйдет из строя, как только проверяемое условие пометит значение false. Итак - если тест «Пока» отмечает «ложь» на полпути кода, они предполагают выход из цикла «пока». Эта ошибка не так часто встречается с Repeat.

На самом деле меня не особо беспокоит, какой из двух типов циклов сохраняется, пока существует только один тип цикла. Другая причина, по которой я предпочитаю Repeat вместо While, заключается в том, что функциональность «Пока» имеет больше смысла, написанную с использованием «повторения», чем наоборот.

Второе обновление: Я предполагаю, что тот факт, что я единственный человек, который сейчас работает с отрицательной оценкой, означает, что это на самом деле противоречивое мнение. (В отличие от остальных. Ха!)

Что делать, если вы не знаете, когда условие ложно? А откуда появился Repeat? Хотя работает на английском языке «пока это условие выполняется, сделайте это»

Kezzer 02.01.2009 16:41

Вы можете заменить все конструкции на goto.

Toon Krijthe 02.01.2009 16:56

Мне не только нравится WHILE, но я бы также позаимствовал Nemerle UNLESS и поместил его в C#.

Dmitri Nesteruk 02.01.2009 17:00

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

Javier 02.01.2009 17:23

Я не видел Repeat ... До тех пор, пока BBC BASIC! VB теперь имеет Do ... Loop, Repeat ... Пока и Пока ... Wend должны быть удалены. Меня это беспокоит, когда я вижу: Do While Not ... вместо Do While ...

pipTheGeek 02.01.2009 17:47

Первый вопрос, который я обычно задаю, когда вижу цикл While, - "Будет ли он прерван во время цикла или после проверки?" Причина этого в том, что я использовал один или два языка до того, как они сразу же вышли из цикла, когда условие вернуло false.

Dalin Seivewright 02.01.2009 20:39

Это нонсенс. Ни repeat, ни while не сломаются посередине, так что ваш аргумент абсурден. В основном разработчиков нужно проинструктировать об использовании break / exit / goto для раннего выхода из цикла. Что касается условий тестирования в начале / конце, оба имеют свое применение.

Cervo 02.01.2009 21:20

Также do {statement} while (! Условие) совпадает с do {statement} до (условие), поэтому я не знаю, в чем заключается жалоба.

Cervo 02.01.2009 21:21

На самом деле, я не уверен, то же самое или нет, но я никогда не использую блоки do ... while, поэтому я думаю, что, возможно, я согласен с вами. :)

skiphoppy 03.01.2009 13:25

«Один общий ... флаги ложные» - Насколько это распространено? На каком языке? Возможно, ответ для тех, кто имеет эту идею, когда она ложна, - «RTFM!». Это просто плохое решение для поиска проблемы, которую он не может найти.

jwpfox 04.01.2009 14:19

A while с повторением - это if <not condition> then repeat until condition not a while + bool

Marco van de Voort 07.05.2009 10:47

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

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

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

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

Удалите Copy & Paste из ВСЕХ программных IDE. Скопировать и вставить код очень плохо, эту опцию следует полностью удалить. Тогда программист, будем надеяться, будет слишком ленив, чтобы повторно набирать весь код, поэтому он создает функцию и повторно использует код.

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

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

Ferruccio 02.01.2009 16:46

Я продолжаю удаление копирования и вставки. Я часто вижу, как мои коллеги копируют и вставляют 20 строк кода и просто меняют значение.

Rauhotz 02.01.2009 16:49

На мой взгляд, копирование / вставка - это моментальный красный флаг. Если код дублируется, он должен: а) быть факторизован с использованием объектно-ориентированных методов; или б) управляемая моделью / генерируемая / определяемая dsl.

Dmitri Nesteruk 02.01.2009 16:52

Я согласен, весь код, который вы видите в stackoverflow, не следует тестировать, потому что, если он протестирован, он копируется из IDE, и копирование из IDE должно быть невозможно :) Поэтому, пожалуйста, публикуйте только непроверенный код на SO!

tuinstoel 02.01.2009 17:08

@tuinstoel: Может быть, это должно быть «копировать, но не вставлять»? :)

Jon Skeet 02.01.2009 17:16

возможно, он должен просто не разрешать копирование и вставку исходного кода в одном приложении, может быть интересно написать плагин eclipse, который предотвращает это :-)

martinus 02.01.2009 17:19

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

Tim 02.01.2009 17:21

Синглтоны выглядят очень умно, когда они привязаны к WPF (все это x: Static).

Dmitri Nesteruk 02.01.2009 17:32

Итак, вы удалите все отладчики и все альтернативные системы для отладки. (если простой путь плох, то и трудный путь хуже, не так ли?) Затем при тестировании вы обнаруживаете ошибку. Что ты теперь делаешь? Отменить проект?

Charles Bretana 02.01.2009 17:34

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

martinus 02.01.2009 17:39

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

Leonardo Herrera 02.01.2009 17:40

@Jon Skeet, если возможно только копирование, я не могу вставить из SO :)

tuinstoel 02.01.2009 17:41

Правильно ... Избавьтесь от отладчиков - чтобы вы не могли видеть результаты своего кода до конца, вместо того, чтобы шагать вперед, чтобы увидеть, где именно ГДЕ возникает проблема. Я возьму отладчики за десятки «временных, промежуточных операторов отображения» ЛЮБОЙ день.

David 02.01.2009 17:44

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

David Thornley 02.01.2009 17:47

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

Charles Bretana 02.01.2009 17:53

За исключением, возможно, случайного подхода с дробовиком и БОЛЬШОЙ удачи (просто измените что-нибудь, проверьте еще раз и повторяйте, пока ошибка не исчезнет ...)

Charles Bretana 02.01.2009 17:55

И вывод значений переменных или операторов «Я здесь» в текстовый файл ЯВЛЯЕТСЯ отладчиком!

Charles Bretana 02.01.2009 17:56

«Отладчики должны быть запрещены». - и как вы находите ошибки, которые не ваши, но происходят из библиотеки / платформы?

niXar 02.01.2009 18:14

Ух ты. Это все равно, что сказать: «Если молоток не справляется, этого не стоит делать». Серьезно, как бы вы отследили перезапись памяти, происходящую вне вашего объекта, с помощью модульных тестов?

Mark Brittingham 02.01.2009 18:18

Вероятно, термин «Отладчик» просто неправильный. Мне еще предстоит увидеть инструмент, который устраняет ошибки (устраняет ошибки) в моей программе.

Simon Lehmann 02.01.2009 18:20

@simon: rm или del удалит все ошибки. Конечно, удаляет и остальную часть программы, но такова цена за безглючную программу :)

Will Mc 02.01.2009 19:49

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

Ikke 02.01.2009 20:00

Стив Макгуайр полностью использует главу 4 книги «Написание надежного кода», чтобы продвигать идею пошагового выполнения нового или измененного кода в отладчике. Хороший совет. Отладчик злоупотреблять - это отдельная история. Я тоже это видел, но не предлагаю отказаться от этого инструмента, потому что некоторые будут злоупотреблять им.

JeffK 02.01.2009 20:10

+1: определенно спорное мнение, основанное на комментариях к этому посту :)

Juliet 02.01.2009 20:47

Хммм ... Когда в 1979 году я начал писать основы на тупом терминале, у нас не было ни отладчика, ни функции копирования / вставки, но это не значит, что тогда я писал лучший код.

Kluge 02.01.2009 20:50

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

David Thornley 03.01.2009 01:29

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

BenAlabaster 03.01.2009 02:05

@balabaster, который вырезал и вставил, а не копировал и вставлял. Так что я бы позволил это ;-)

martinus 03.01.2009 02:36

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

Loren Pechtel 03.01.2009 08:01

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

Jeremy 04.01.2009 00:06

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

bruceatk 04.01.2009 05:06

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

martinus 04.01.2009 10:29

Что касается синглтонов, это может быть неправильным для таких языков, как C# или Java, но с менее строгими языками ООП, такими как Javascript или Scala, использование синглтонов в порядке. В JS каждый объект - синглтон! (и классифицируется с использованием прототипов, по крайней мере, в JS 1.x) А в Scala есть одноэлементный тип, называемый object.

Alcides 05.01.2009 01:00

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

chaos 05.01.2009 02:30

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

bruceatk 05.01.2009 03:25

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

Tom 05.01.2009 05:44

@martinus, дело не в том, что копипаст - это плохо, но в вашем примере программист должен использовать общую функцию, а не дублировать кусок кода. Таким образом, если в функции есть ошибка, вы исправите ее в одном месте. Но есть сценарии копирования и вставки, в которых вы бы не использовали общие строки функции one liners.

Jeremy 05.01.2009 05:46

Как исправить драйвер без отладчика ... Напишите юнит-тест, воспроизводящий ... Подождите.

Edouard A. 07.01.2009 17:24

Фундаментализм - это не путь вперед!

Captain Sensible 26.01.2009 13:01

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

Sergio Acosta 11.03.2009 11:57

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

Doug L. 20.09.2009 13:28

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

DevSolar 21.01.2010 18:05

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

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

Геттеры и сеттеры очень часто используются

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

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

Обновлено:

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

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

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

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

private fields + public accessors == encapsulation

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

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

There is a reason that we keep our variables private. We don't want anyone else to depend on them. We want the freedom to change their type or implementation on a whim or an impulse. Why, then, do so many programmers automatically add getters and setters to their objects, exposing their private fields as if they were public?

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

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

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

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

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

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

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

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

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

1) Фарс о бизнес-приложениях:

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

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

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

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

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

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

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

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

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

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

Однажды я увидел от коллеги следующее:

равно = a.CompareTo (b) == 0;

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

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

Jon Skeet 02.01.2009 17:03

Я говорю о методе C# IComparable.CompareTo. Не ожидайте, что два реализующих объекта IComparable равны, если метод CompareTo возвращает ноль. У них просто такой же порядок.

Rauhotz 02.01.2009 17:09

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

Jon Skeet 02.01.2009 17:12

Я бы сказал, что если у вещей нет естественного отношения равенства / порядка, лучше иметь отдельную реализацию IComparer, которая может выразить это явно. Конечно, есть непростые крайние случаи - например, 1.000 м равно 1.0 м?

Jon Skeet 02.01.2009 17:14

это хороший случай ограниченного взгляда. проверьте множество предикатов 'compare' в схеме

Javier 02.01.2009 17:21

Джон, не могли бы вы быть так любезны и указать мне строки в документации, где говорится: «a.CompareTo (b) == 0 подразумевает a.Equals (b) == true»?

Rauhotz 02.01.2009 17:22

Конечно. Документы к ICompable.Compare означают, что «a.CompareTo (b) == 0» подразумевает, что «a равно b». Документы для object.Equals означают, что "a.Equals (b)" должно возвращать истину, если a равно b. Можно утверждать, что документация слишком узкая или неполная (документация Java более осторожна в этом отношении)

Jon Skeet 02.01.2009 17:34

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

Jon Skeet 02.01.2009 17:35

Вот почему я думаю, что проще реализовать неестественный порядок (т.е. когда равенство в порядке не означает равенство между объектами) через IComparer вместо IComparable.

Jon Skeet 02.01.2009 17:36

JavaDocs, где это красиво и понятно (по сравнению с MSDN для IComparable): java.sun.com/javase/6/docs/api/java/lang/Comparable.html Он даже говорит, как документировать время, когда вы нарушаете согласованность с равными.

Jon Skeet 02.01.2009 17:40

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

David Thornley 02.01.2009 19:23

Зато 7 комментариев до этого были моими :)

Jon Skeet 02.01.2009 22:46

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

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

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

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

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

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

Меня часто кричат, когда я утверждаю, что код - это просто выражение моего замысла. Мне совсем не нравится, как многие разработчики проектируют свои системы «на лету», кодируя их.

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

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

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

Doug T. 02.01.2009 17:11

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

Daniel Paull 02.01.2009 17:19

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

David 02.01.2009 17:46

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

Daniel Paull 02.01.2009 17:50

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

JeffV 02.01.2009 20:23

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

Mike Dunlavey 02.01.2009 21:38

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

Daniel Paull 03.01.2009 03:51

Так что, если вам все равно нужно выполнить итерацию, выбор сначала разработать или сначала написать код, по сути, одно и то же.

Kendall Helmstetter Gelner 05.01.2009 07:40

@Kendall: ты шутишь, да? Возможно, вы думаете о доказательстве индукции для своего утверждения, но я надеюсь, что количество итераций для написания фрагмента кода, закрытого от изменений, невелико. В этом случае я считаю, что сначала дизайн намного эффективнее.

Daniel Paull 05.01.2009 08:05

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

quant_dev 09.07.2009 04:09

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

Вам не нужно все программировать

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

+1 вроде. Я использую свой планшет, когда мне нравится ручка и бумага, потому что иногда писать проще, чем использовать программное обеспечение.

Buddy Lindsey 02.01.2009 17:53

Вы имеете в виду «все», а не «ничего»?

Adam Bellaire 02.01.2009 20:04

Ну, он сказал: «Вам не нужно программировать», и я полностью согласен - меня никто не заставлял программировать, просто мне это нравится. Извините, но здесь нет разногласий.

Rene Saarsoo 03.01.2009 22:12

Нет-нет, мне нужно много чего программировать.

postfuturist 07.01.2009 11:49

Вам не нужно все программировать

Anil 31.03.2010 15:18

+1 для низкотехнологичных. Иногда электронная таблица Excel отлично справляется с задачей вместо кодирования дорогостоящего CRUD.

Mauricio Scheffer 09.04.2010 06:40

Код == Дизайн

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


Вот статья на тему Код как дизайн.

Мнение: Модульные тесты не нужно писать заранее, а иногда и вовсе не нужно.

Обоснование: разработчики плохо тестируют собственный код. Мы делаем. Вот почему у нас обычно есть группы тестирования или группы контроля качества.

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

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

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

Mike Dunlavey 02.01.2009 17:27

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

Gene Roberts 02.01.2009 18:00

Феникс - вы хотите уловить только то, о чем не думали, но я не согласен с вашим общим мнением. Ценность тестов в том, что они составляют спецификацию. Позже, когда я вношу «небольшие изменения» - тесты говорят мне, что я все еще в порядке.

Mark Brittingham 02.01.2009 18:13

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

Juliet 02.01.2009 20:54

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

Mike Dunlavey 02.01.2009 21:15

В моем текущем проекте я ввел предварительные модульные тесты, и качество кода резко улучшилось. Людей сначала нужно было убедить, но вскоре положительный эффект заметили и сами. Так что мой опыт говорит, что вы ошибаетесь. И PhoenixRedeemer, ты полный идиот ... как и все остальные.

Michael Borgwardt 03.01.2009 20:54

@Brazzy: Почему ваши разработчики не писали код лучше? Заметьте, мое мнение говорит, что вам «не нужно» писать тесты заранее. Я не говорю, что вам не следует этого делать, просто вам следует подумать, почему вы так пишете.

Cameron MacFarland 04.01.2009 03:33

@brazzy: Эй, полное правило дебилов! :) Я видел код, который улучшают модульные тесты, потому что они ему нужны. Я видел код, для которого не требовалось много модульных тестов, потому что у него было мало недопустимых состояний. Мой код имеет тенденцию нуждаться в случайно сгенерированных тестах из-за проблемного пространства.

Mike Dunlavey 05.01.2009 17:11

Модульные тесты также предназначены для управления изменениями. Тесты нужны не для кода, который вы пишете прямо сейчас, а для кода после следующей итерации изменений, которая потребуется. Как можно перефакторить код, если у вас нет возможности доказать, что то, что он делал до изменения, остается тем, что он делал после?

Greg Domjan 06.01.2009 05:39

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

Cameron MacFarland 06.01.2009 16:37

Все пишут модульный тест, который проверяет, что open () терпит неудачу, если файл не выходит. Никто не пишет модульный тест того, что происходит, если имя пользователя состоит из 100 символов на планшетном ПК с правым-левым языком и турецкой клавиатурой.

Martin Beckett 09.01.2009 20:42

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

Yishai 29.04.2009 22:29

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

nitecoder 11.07.2009 04:42

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

Ether 08.11.2009 02:32

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

Hans-Peter Störr 11.12.2009 23:16

Время от времени писать мусорный код - это нормально

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

Остановка программы вручную - эффективный и проверенный способ поиска проблем с производительностью.

Правдоподобно? Не для большинства. Правда? Абсолютно.

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

Станьте свидетелем всего того, что в этих сообщениях считается «злым» или «ужасным».

Программисты довольны структурой данных.

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

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

Greg Beech 02.01.2009 17:59

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

Mike Dunlavey 02.01.2009 18:07

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

Mike Dunlavey 02.01.2009 18:25

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

Mike Dunlavey 02.01.2009 18:30

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

Kendall Helmstetter Gelner 05.01.2009 08:49

@Kendall: Я никогда не видел "какой-либо" работы по анализу требований, предложению и оценке альтернативных решений, не говоря уже о "лучших". Если бы мы были врачами, мы бы знали все о лечении, но диагноз был бы «очевиден».

Mike Dunlavey 05.01.2009 16:57

Не существует универсального подхода к разработке.

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

То, что я видел, рекламируется как правильный подход в для проекта любой - до того, как о нем станет известна какая-либо информация, - это такие вещи, как использование разработки через тестирование (TDD), доменно-ориентированного дизайна (DDD), объектно-реляционного сопоставления (ORM) , Agile (заглавная буква A), объектно-ориентированная (OO) и т. д., Охватывающая все, от методологий до архитектур и компонентов. Все, конечно, с красивыми рыночными сокращениями.

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

Это не так.

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

До 1 января 1970 года истина и ложь были наоборот ...

Ой, это самая смешная вещь, которую я видел на SO за долгое время.

MusiGenesis 13.01.2009 20:24

Я понимаю, как системы * nix записывают время, и как представлены истина и ложь. Но может ли кто-нибудь объяснить мне эту шутку, я не понимаю? Спасибо.

Matt Blaine 23.02.2010 05:55

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

annakata 18.04.2010 23:30

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

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

Есть два типа оптимизации: по архитектуре и по коду. Перед написанием кода явно необходима архитектурная оптимизация. Однако термин «преждевременная оптимизация» действительно применяется к усилиям по написанию кода оптимальным, а не простым способом. Это зло.

AnthonyWJones 02.01.2009 21:48

Меня часто вызывают, чтобы исправить большие беспорядки, которые были спроектированы якобы с целью «производительности».

Mike Dunlavey 02.01.2009 22:06

@Mike: Прежде чем приложение будет разработано, необходимо некоторое понимание объемов и требований к ответам. Такие вещи нужно учитывать в изначальной архитектуре. Конечно, конкретный выбор производительности должен быть обоснован.

AnthonyWJones 02.01.2009 23:52

@Mike, как я уже сказал, все дело в контексте. Я работаю в геопространственной области, где сложность многих задач по умолчанию составляет O (n ^ 3). В этой области оптимизация является обязательной, и это должно происходить во время разработки. Анализ неэффективного кода с помощью профилировщика редко бывает полезным.

SmacL 03.01.2009 17:04

Большинство сторонников языка создают много шума.

Спорные, и одновременно аксиома. Хороший.

ChrisA 02.01.2009 22:37

Вот один, который казался мне очевидным в течение многих лет, но является проклятием для всех остальных: отключение утверждений C (или C++) с помощью NDEBUG в «релизных» сборках почти всегда является ошибкой. (Единственное исключение - когда штраф по времени или пространству неприемлем).

Обоснование: если утверждение не выполняется, ваша программа перешла в состояние, которое

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

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

«никогда не тестировался» Вы проводите предварительное тестирование с включенными утверждениями и принимаете сработавшее утверждение как прохождение теста? Странная идея. Если вы это сделаете, то я согласен с вами, но я не понимаю, почему вы это делаете.

jwpfox 03.01.2009 16:24

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

fizzer 03.01.2009 16:37

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

David Rodríguez - dribeas 05.01.2009 15:04

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

nosatalian 31.05.2009 06:07

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

Mike Dunlavey 23.03.2010 00:29

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

MarkJ 18.07.2010 01:04

Мнение: фреймворки и сторонние компоненты следует использовать только в крайнем случае.

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

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

IAdapter 03.01.2009 06:44

Рамки, да. Бесполезные накладные расходы, много раз. Сторонних компонентов, нет! Части задачи уже выполнены, протестированы и отлажены тысячами других людей!

skiphoppy 03.01.2009 14:04

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

kemiller2002 03.01.2009 20:14

Джоэл в защиту не изобретенного здесь синдрома: joelonsoftware.com/articles/fog0000000007.html

MarkJ 27.01.2009 14:58

Мнение: никогда не бывает разного кода между «отладочной» и «выпускной» сборками.

Основная причина в том, что код выпуска почти никогда не тестируется. Лучше иметь в тесте тот же код, что и в дикой природе.

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

David Thornley 03.01.2009 01:30

Единственное, чем я отличаюсь между сборками Debug / Release, - это уровень ведения журнала по умолчанию. Все остальное всегда возвращается, чтобы укусить вас.

devstuff 03.01.2009 01:45

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

Daniel Paull 03.01.2009 03:53

Опять же, я не использую их. Если вы что-то утверждаете при отладке, не должно ли это случиться и в выпуске? Используйте исключение, если оно критично, или не используйте assert (или не волнуйтесь, если assert не успевает выпустить).

Cameron MacFarland 03.01.2009 09:39

@Cameron MacFarland - хорошее замечание; код с утверждениями в режиме отладки либо не обрабатывает условие сбоя в режиме выпуска, либо имеет второй путь обработки сбоя, который работает только в режиме выпуска.

user23743 03.01.2009 15:10

Хотелось бы писать в разные приложения. ваша отладочная версия будет хорошо отлажена, а ваша версия выпуска - нет. Трагично!

Jeremy 04.01.2009 00:16

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

tuinstoel 05.01.2009 00:34

Согласовано: Исключения> Утверждения.

postfuturist 07.01.2009 11:30

Согласитесь: там есть несколько очень неприятных ошибок, которые могут нанести серьезный ущерб вашей репутации!

Captain Sensible 26.01.2009 11:09

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

MarkJ 27.01.2009 14:33

@MarkJ: Это то, что я говорю, вы должны тестировать код, который выходит за дверь, и не иметь разницы между «Release», который не тестируется, и «Debug», который тестируется, но никогда не выпускается.

Cameron MacFarland 27.01.2009 16:50

Утверждения и исключения имеют разные цели. Исключение составляют ошибки пользователя - вещи, которых «не должно происходить». Утверждения предназначены для предварительных условий - вещей, которые «НЕ МОГУТ произойти». Утверждения приводят к аварийной остановке приложения со словами: «У вас большая проблема - исправьте ее сейчас !!!»

James Curran 18.02.2009 18:28

@James: Исключения также приводят к сбою приложения. Также что происходит, когда пользователь видит ошибку утверждения? Они должны это исправить?

Cameron MacFarland 19.02.2009 09:17

Вся разработка и тестирование должны выполняться в сборке выпуска, но должна существовать сборка отладки для помощи в отладке. (Привет #ifdef!)

rpetrich 19.04.2009 21:34

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

nosatalian 31.05.2009 05:52

Объектно-ориентированного программирования не существует.

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

Cameron MacFarland 02.01.2009 17:48

@Cameron MacFarland: Статья вовсе не об этом. Он утверждает, что нет никакого различия между «ООП» и другими видами программирования, кроме риторического.

Apocalisp 02.01.2009 18:03

Почему нет ссылки на ADT, из которого, как я полагаю, возникло ООП?

epatel 02.01.2009 22:03

@Apocalisp: Вы правы, я только просмотрел статью. Теперь, когда я прочитал это как следует, он сравнил различение стилей кода с различением расы, используя аргумент капиталистических либертарианцев, которые верят в то, что ведет к рабству и убийству бедных людей.

Cameron MacFarland 03.01.2009 09:56

См я сказал вам, что это было спорным. Достаточно, чтобы в одном предложении нарисовать ad hominem с non-sequitur и соломенного человечка. Я впечатлен.

Apocalisp 03.01.2009 23:07

@Cameron, на самом деле именно либералы убивают бедных людей, говоря им, что им не нужно нести ответственность за свою жизнь, им просто нужно делать то, что им говорят «высшие» либералы. Либерализм - это эмоциональное и интеллектуальное эго.

Lance Roberts 06.01.2009 19:56

@Apocalisp: Вы легко впечатляете. «Действительные концепции достигаются путем индукции» полностью игнорирует кантовскую идею априорной концепции, которую можно было бы рассматривать как ООП и смурфов. Ограничение понятий фактами реальности само по себе является соломенным аргументом.

Cameron MacFarland 09.01.2009 17:42

«Это бесполезное различие, точно так же, как« раса »- бесполезное различие». - А по национальности, вероисповеданию, полу, роду занятий. Все это бесполезные различия, если следовать логике статьи Айн Рэнд.

Cameron MacFarland 09.01.2009 18:10

@Cameron: Вы попали в точку. Я сознательно и полностью бросаю вызов Канту, потому что его идеи бессмысленны. Думать - значит думать о чем-то.

Apocalisp 09.01.2009 18:12

«Java объектно-дезориентирована» - я

Svante 12.01.2009 20:26

Хороший ответ ... «Нет такого понятия, как ООП» ... И это легко доказать. Достаточно взглянуть на сборку, сгенерированную любым компилятором C++. Я не вижу там ООП ... :)

LarryF 15.01.2009 02:46

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

WolfmanDragon 23.05.2009 22:20

@epatel: возможно, потому, что идея о том, что ООП возникла из ADT, неверна. См. Разделы «ООП против ADT» (cs.utexas.edu/~wcook/papers/OOPvsADT/CookOOPvsADT90.pdf) и «Повторное рассмотрение абстракции данных» (cs.utexas.edu/~wcook/Drafts/2009/essay.pdf) Уильяма Р. Кука.

MaD70 06.11.2009 05:20

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

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

Given that Pi can be estimated using the function 4 * (1 - 1/3 + 1/5 - 1/7 + ...) with more terms giving greater accuracy, write a function that calculates Pi to an accuracy of 5 decimal places.

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

Given the area of a circle is given by Pi times the radius squared, write a function to calculate the area of a circle.

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

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


Редактировать:

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

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

Мнение: явное объявление переменной - отличная вещь.

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

Никто никогда не давал мне объяснения лучше, чем «ну, это экономит время, так как мне не нужно писать int i;». Уххххх ... да, конечно, но сколько времени нужно, чтобы отследить ошибку времени выполнения?

Как вы относитесь к тому, должно ли значение тип переменной быть явным или нет? (Думая о "var" в C#.)

Jon Skeet 02.01.2009 17:46

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

Mike Dunlavey 02.01.2009 17:58

Я действительно хотел написать то же самое мнение. ИМХО, это главный недостаток как Python, так и Ruby, без всяких на то причин. По крайней мере, Perl предлагает use strict.

Konrad Rudolph 02.01.2009 18:36

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

David Thornley 02.01.2009 19:08

Ага. ОДИН поиск ошибок, когда l (между k и m) становится 1 (между 0 и 2), впустую тратит время жизни на объявление переменных.

Loren Pechtel 03.01.2009 08:13

Все остальное - ненастоящий язык. Теперь это спорно.

Andrei Taranchenko 11.01.2009 02:31

Я помню, как изучал Visual Basic 6 в старшей школе. Если OPTION EXPLICIT не будет первой строкой в ​​каждом исходном файле, мы потерпим неудачу.

rlbond 21.03.2009 08:00

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

Так почему бы не использовать оба?

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

Мнение: SQL - это код. Относиться к нему как к такому

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

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

MVC для Интернета должен быть намного проще традиционного MVC.

Традиционный MVC включает в себя код, который «прослушивает» «события», так что представление может постоянно обновляться для отражения текущего состояния модели. Однако в веб-парадигме веб-сервер уже прослушивает, и запрос является событием. Следовательно, MVC для Интернета должен быть только конкретным экземпляром шаблона посредника: контроллеры, выступающие посредниками между представлениями и моделью. Если веб-фреймворк создан правильно, повторно используемое ядро, вероятно, не должно превышать 100 строк. Это ядро ​​должно реализовывать только парадигму «контроллера страниц», но должно быть расширяемым, чтобы иметь возможность поддерживать парадигму «переднего контроллера».

Ниже приведен метод, который является стержнем моей собственной инфраструктуры, успешно используемой во встроенном потребительском устройстве, изготовленном производителем сетевого оборудования из списка Fortune 100 для медиакомпании из списка Fortune 50. Мой подход был уподоблен Smalltalk бывшим программистом на Smalltalk и автором книги Oreilly о самой известной веб-среде Java; кроме того, я перенес ту же структуру на mod_python / psp.

static function sendResponse(IBareBonesController $controller) {
  $controller->setMto($controller->applyInputToModel());
  $controller->mto->applyModelToView();
}

Твоя биография устрашающая - все вымыто в 20! Вот моя собственная стяжка против MVC. stackoverflow.com/questions/371898/…

Mike Dunlavey 03.11.2009 22:00

Контроль версий: что угодно, кроме SourceSafe

Также: Эксклюзивная блокировка - это зло.

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

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

Mike Dunlavey 02.01.2009 19:40

Раньше я думал, что без файловых блокировок в SCM невозможно работать в команде. Но, поработав с Subversion в четырех компаниях (и самостоятельно развернув его в двух из них, я обнаружил, что слияние (автоматическое, если возможно, ручное, если нет), намного лучше в 99% случаев.

dj_segfault 03.01.2009 07:10

Не спорно. Никто не использовал SourceSafe по собственному желанию.

MusiGenesis 13.01.2009 20:13

@MusiGenesis: Да, это так. Они существуют.

Cameron MacFarland 14.01.2009 12:33

Моя компания все еще использует SourceSafe. Основные причины: а) общая инерция и б) разработчики боятся работать без эксклюзивных блокировок.

T.E.D. 14.01.2009 21:11

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

Cameron MacFarland 15.01.2009 03:52

@MusiGenesis: Я руководил отходом от SourceSafe в двух разных компаниях за последние 5 лет, и в обоих случаях причиной использования SourceSafe было незнание альтернатив.

Shalom Craimer 26.01.2009 09:57

SourceSafe даже не работает ни на чем на основе IIS7. Так что скоро это станет в значительной степени излишним.

Ed James 27.03.2009 18:37

Просто чтобы быть педантичным ... в то время как эксклюзивные блокировки были по умолчанию до недавнего времени, SourceSafe фактически поддерживает режим редактирования-слияния-фиксации с 1998 года.

Richard Berg 12.06.2009 10:11

@Ed - SourceSafe может работать с IIS7, если у вас установлен WebDAV. Плагин WebDAV не поставлялся с Vista, но доступен как бесплатный плагин, а также поставляется с Win2008. Тем не менее, я, как и все остальные, надеюсь, что он наконец выйдет из строя. На рынке есть гораздо лучшие инструменты (бесплатные и другие).

Richard Berg 12.06.2009 10:13

@ Ричард: Да, но никто из тех, кто использует Source Unsafe, не использует его в режиме слияния, потому что боится и т. д.

Cameron MacFarland 12.06.2009 15:18

МКС детка! Наконец-то просто убиваю это сейчас.

TJR 29.09.2009 07:04

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

Oorang 11.12.2009 05:13

@MusiGenesis мы делаем на моем рабочем месте, но мне это не особенно нравится. Мне гораздо больше нравится SVN.

ravibhagw 08.06.2010 23:55

По умолчанию массивы должны начинаться с 1, а не с 0. Это не обязательно относится к языкам системной реализации, но такие языки, как Java, поглотили больше странностей C, чем они должны были иметь. «Элемент 1» должен быть первым элементом, а не вторым, чтобы избежать путаницы.

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

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

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

По крайней мере 90% всей сравнительной критики языков программирования можно свести к следующему: «Язык A имеет функцию C, и я не знаю, как сделать C или что-то подобное на языке B, поэтому язык A лучше».

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

Ваше последнее чувство +1. Остальное, ИМХО, неверно, потому что отсчитываемые от нуля индексы очень полезны, потому что make заставляет индексы контейнера размера N быть набором целых чисел в полуоткрытом интервале [0, N [. Это имеет приятные математические / алгоритмические / практические последствия.

Konrad Rudolph 02.01.2009 18:10

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

David Thornley 02.01.2009 18:39

+1, потому что: а) я не согласен с абзацем 1, поэтому я думаю, он отвечает на вопрос, и, 2) мне нравятся другие абзацы :)

Mike Dunlavey 02.01.2009 19:23

Должны ли индексы массива начинаться с 0 или 1? Мой компромисс 0,5 был отклонен, как мне показалось, без должного рассмотрения. - Стэн Келли-Бутл

Gavin Miller 02.01.2009 20:40

Ага, +1 за последнее предложение.

user23743 02.01.2009 22:46

+1 за изучение математики, -1 за то, что Lisp - лучший (чтобы сделать хороший язык нужно больше, чем круглые скобки)

Lance Roberts 06.01.2009 19:37

в массивах smalltalk начинаются с 1

nes1983 25.01.2009 21:46

Это просто условность, и это не имеет значения.

Captain Sensible 26.01.2009 13:19

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

Aaron Digulla 27.02.2009 18:54

В чем разница между массивами на основе 0 и 1 для добавления / удаления? Обозначение Python, использующее отрицательные числа для измерения с конца, довольно изящно.

David Thornley 27.02.2009 19:54

Все переменные / свойства по умолчанию должны быть readonly / final.

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

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

  2. Аккумуляторы. Например, представьте себе случай суммирования значений в массиве или даже в списке / строке, в которой накапливается некоторая информация о чем-то другом.

    Сегодня есть более эффективные средства для достижения той же цели. Функциональные языки имеют функции высшего порядка, Python имеет понимание списков, а .NET имеет LINQ. Во всех этих случаях нет необходимости в изменяемом держателе аккумулятора / результата.

    Рассмотрим частный случай конкатенации строк. Во многих средах (.NET, Java) строки фактически неизменяемы. Зачем тогда вообще разрешать присваивание строковой переменной? Намного лучше все время использовать класс построителя (например, StringBuilder).

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

Большинство функциональных языков похожи на это; например, F# явно требует, чтобы вы объявили что-либо как «изменяемое», если вы хотите иметь возможность это изменить.

Greg Beech 02.01.2009 18:22

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

Konrad Rudolph 02.01.2009 18:39

Мне нравится бит в SICP, в котором авторы отвергают «циклические конструкции, такие как do, repeat, until, for и while» как языковой дефект.

fizzer 02.01.2009 18:54

Не согласен, но заставил задуматься. Интересно.

Steve B. 02.01.2009 20:31

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

Juliet 02.01.2009 21:04

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

AnthonyWJones 02.01.2009 23:59

@AnthonyWJones: какие затраты у неизменяемого по умолчанию?

Juliet 03.01.2009 00:25

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

BenAlabaster 03.01.2009 02:12

Что мне не нравится в неизменяемости, так это объем необходимого копирования.

TraumaPony 03.01.2009 04:17

Я подумал, что это было слишком много, когда я прочитал об этом в «Эффективная Java: пользу неизменности». Тогда при применении это имеет смысл. Приложения НАМНОГО проще создавать и поддерживать, используя неизменяемость. Единственное, что требуется, это шаблон макроса для «кодирования» методов копирования, как указывал TraumaPony.

OscarRyz 03.01.2009 06:53

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

Loren Pechtel 03.01.2009 08:11

@TraumaPony: Хорошая особенность неизменяемости заключается в том, что (почти?) Во всех случаях копирование может быть заменено простым псевдонимом. Однако этот делает требует некоторых изменений в структурах данных.

Konrad Rudolph 03.01.2009 13:38

Другой случай, который не может быть неизменным: любые итерационные вычисления или вычисления в цикле. В более общем смысле, данные, над которыми вы работаете. Насколько хорошо будет продаваться Microsoft Immutable Word?

Loren Pechtel 03.01.2009 23:02

@Princess: неизменяемый по умолчанию имеет стоимость понимания. Гораздо сложнее думать (а не рассуждать, думать о) неизменяемых по умолчанию объектах / переменных / что-то-есть-у вас.

Jeff Hubbard 04.01.2009 00:18

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

Jeremy 04.01.2009 00:20

@Loren: о вашем «другом случае»: чем он отличается от специального аккумулятора? На самом деле это просто так, и это хорошо поддерживается многими фреймворками, такими как LINQ. Обратите внимание, что при любом взаимодействии с пользователем неизменяемость редко выигрывает, поэтому использование Immutable Word, вероятно, не лучшая идея.

Konrad Rudolph 05.01.2009 00:23

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

Konrad Rudolph 05.01.2009 00:25

@Loren Pectel, я думаю, что базы данных тоже должны быть неизменными.

tuinstoel 05.01.2009 00:26

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

Lance Roberts 06.01.2009 04:55

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

Konrad Rudolph 06.01.2009 10:57

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

Greg Domjan 07.01.2009 07:16

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

tuinstoel 07.01.2009 10:29

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

postfuturist 07.01.2009 11:46

Было бы немного сложно анимировать что-либо, если бы переменные, описывающие объект для анимации, были неизменными.

Kamil Szot 07.09.2009 00:22

@ Камил: нет, совсем нет. Фактически, объекты Point в .NET находятся неизменяемы и прекрасно анимируются. Вам просто нужно создать новый объект для каждой позиции анимации - что звуки неэффективно, но на самом деле не обязательно.

Konrad Rudolph 07.09.2009 10:55

Интересно, что в Java даже переменные цикла могут быть final: for (final item: list) {...} Мне потребовалось время, чтобы это обнаружить.

Hans-Peter Störr 11.12.2009 23:18

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

Craig P. Motlin 22.10.2010 06:49

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

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

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

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

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

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

Мой один:

Длинные операторы переключения - ваши друзья. Действительно. По крайней мере, на C#.

Люди склонны избегать и отговаривать других использовать длинные операторы переключения, потому что они «неуправляемы» и «имеют плохие характеристики производительности».

Дело в том, что в C# операторы switch всегда автоматически компилируются в таблицы переходов по хешу, поэтому их использование - это Best Thing To Do ™ с точки зрения производительности, если вам нужно простое ветвление на несколько ветвей. Кроме того, если операторы case организованы и сгруппированы разумно (например, в алфавитном порядке), они вообще не являются неуправляемыми.

Определить долго. Я видел оператор переключения на 13000 строк (правда, это был C++, но все же ...)

Cameron MacFarland 02.01.2009 18:14

Что ж, (в C#), если оператор switch сгенерирован (в отличие от ручного редактирования), я не вижу ничего плохого в операторе переключения строк 13K, если честно. В любом случае он превратится в хеш-таблицу.

Tamas Czinege 02.01.2009 18:19

Конечно, если в нем 13 КБ строк, потому что в каждом предложении case много кода, это совершенно другое. Тогда его следует отремонтировать.

Tamas Czinege 02.01.2009 18:21

Вообще-то, да. Было ли это так или если, и замена всех if на switch была бы слишком многословной даже для python?

JB. 02.01.2009 19:42

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

Mike Dunlavey 02.01.2009 19:49

@Mike: если у вас есть оператор switch с тысячами случаев, вы будут заметите разницу в производительности между таблицей переходов и серией операторов if-else.

Tamas Czinege 02.01.2009 20:13

Как у вас могут быть тысячи случаев? Не представляю, есть ли у вас пример?

tuinstoel 05.01.2009 00:16

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

Tamas Czinege 05.01.2009 16:41

Отличный ответ. Полностью согласен.

Jonathan C Dickinson 29.01.2009 12:26

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

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

Но по большому счету это просто работа.

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

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

Синглтоны не зло

В реальном мире есть место для синглтонов, и методы их обхода (т. Е. Моносостояния) - это просто замаскированные синглтоны. Например, Logger - идеальный кандидат на синглтон. Кроме того, это насос сообщений. В моем текущем приложении используются распределенные вычисления, и разные объекты должны иметь возможность отправлять соответствующие сообщения. Должен быть только один насос сообщений, и каждый должен иметь к нему доступ. Альтернативой является передача объекта в мой насос сообщений везде, где это может быть необходимо, и в надежде, что новый разработчик не создаст новый объект, не задумываясь и задаваясь вопросом, почему его сообщения никуда не денутся. Важнее всего уникальность синглтона, а не его доступность. Синглтон имеет свое место в мире.

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

Craig P. Motlin 02.01.2009 21:35

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

jalf 04.01.2009 03:59

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

David Thornley 09.01.2009 17:49

Я очень рекомендую вам прочитать misko.hevery.com/2008/08/25/root-cause-of-singletons.

balu 02.02.2009 23:33

Я хотел бы добавить, что в C++ шаблон singleton чрезвычайно важен из-за фиаско статической инициализации.

rlbond 21.03.2009 08:05

Ведение журнала - единственное распространенное использование шаблона singleton, все остальные использования в основном плохие.

Emmanuel Caradec 24.08.2009 04:19

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

kurast 22.10.2009 23:35

Роб Пайк писал: «Данные преобладают. Если вы выбрали правильные структуры данных и хорошо организовали вещи, алгоритмы почти всегда будут самоочевидными. Структуры данных, а не алгоритмы, являются центральными в программировании».

И поскольку в наши дни любые серьезные данные хранятся в миллионах записей, я согласен с тем, что хорошее моделирование данных является наиболее важным навыком программирования (будь то использование rdbms или чего-то вроде sqlite, amazon simpleDB или хранилища данных google appengine).

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

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

tuinstoel 02.01.2009 18:47

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

Christopher Mahan 02.01.2009 19:03

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

Mike Dunlavey 02.01.2009 19:19

+1 Если бы я выступал перед собранием первокурсников CS, мой первый совет был бы: «Знай, данные_Структуры», Аминь, брат.

WolfmanDragon 23.05.2009 22:22

Брукс в «Мифическом человеко-месяце» заметил, что он был бы сбит с толку, если бы вы спрятали свои таблицы и показали ему свои блок-схемы, но если бы вы показали ему свои таблицы, ему не нужно было бы видеть ваши блок-схемы. Это должно дать вам представление о том, сколько лет этой идее.

David Thornley 14.10.2009 01:39

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

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

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

Juliet 02.01.2009 21:13

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

ChrisA 03.01.2009 01:21

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

finnw 17.01.2009 20:38

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

Ash 06.08.2009 18:55

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

Jeremy Friesner 06.11.2009 01:32

(Неназванные) кортежи - зло

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

  • Если это часть стратегии обфускации кода, продолжайте их использовать!

Я вижу, что люди используют кортежи только потому, что им лень давать ИМЕНА своим объектам. Затем пользователи API вынуждены обращаться к элементам в кортеже на основе бессмысленного индекса вместо полезного имени.

Я рад, что вы это квалифицировали. Слава богу, что Python 2.6 добавил именованные кортежи.

bignose 14.04.2009 07:27

Эй, это круто. Я не знал, что существует такая вещь, как именованный кортеж. Я думаю, что для tuple-perfect-storm вам следует разработать библиотеку GUI на python, которая ожидает 2-кортежи в порядке x, y и y, x в разных местах. :-)

Warren P 01.04.2010 04:18

Goto в порядке! (что спорно достаточно)
Иногда ... дайте нам выбор! Например, в BASH нет goto. Может быть, этому есть какая-то внутренняя причина, но все же. Кроме того, goto является строительным блоком языка ассемблера. Нет, если заявления для вас! :)

в bash есть перерыв; и продолжить n; вместо. imho единственная причина использовать goto - это когда у вас их нет (или нет пометки break / continue)

Johannes Schaub - litb 02.01.2009 20:04

В сборке все реализовано как goto (jump / branch). В большинстве языков есть if и некоторая форма цикла, но многим не хватает try / catch или break / continue, все из которых могут быть реализованы с помощью goto. По общему признанию, его можно использовать очень плохо, поэтому будьте осторожны :)

Cervo 02.01.2009 21:52

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

Joshua 03.01.2009 01:45

@ Джошуа, ты имеешь в виду интерпретируемые языки? Такой язык, как Basic, когда-то был интерпретируемым языком, и у него определенно был оператор goto. Сколько тебе лет?

tuinstoel 05.01.2009 00:19

@ Джошуа, я бы сказал, что это было проще. Я написал простой интерпретируемый язык (под «простым» я имею в виду «вообще ничего не делал»: D), в котором был goto. Но никаких условий.

Lucas Jones 15.02.2009 14:48

и есть операторы cmp (операторы if) в сборке - иначе вы никогда не узнаете, когда использовать jmp

warren 22.10.2009 09:16

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

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

System.Data.DataSet Rocks!

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

Обоснование: мы наклоняемся назад, чтобы выяснить единицу работы для настраиваемых объектов, LINQ to SQL, Entity Framework, и это добавляет сложности. Используйте откуда-нибудь хороший генератор кода, чтобы сгенерировать уровень данных, и Единица работы находится в коллекциях объектов (DataTable и DataSet) - никакой тайны.

Тогда вы, очевидно, никогда не использовали DataSet: P

Cameron MacFarland 04.01.2009 11:23

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

Mike Hofer 04.01.2009 13:43

По тем же соображениям LINQ to SQL, Entity Framework, NHibernate и т. д. Также являются излишними для «подавляющего большинства» операций. Кстати, вы имели в виду «подавляющее большинство» всех операций или «подавляющее большинство» мест, где я бы использовал DDD?

Mark A Johnson 09.01.2009 23:53

Использование хранимых процедур

Если вы не пишете большую процедурную функцию, состоящую из одноразовых SQL-запросов, переместите ваши хранимые процедуры базы данных в систему контроля версий.

Я согласен: вы не можете создавать версии хранимых процедур, а наличие 200+ хранимых процедур в большом проекте становится кошмаром для обслуживания. Встроенный SQL подходит для небольших проектов, но я бы предпочел использовать ORM для написания запросов за меня.

Juliet 02.01.2009 20:05

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

Mike Hofer 02.01.2009 21:01

Я согласен с управлением версиями хранимых процедур. Если вы пишете SP, вам нужно взять на себя ответственность за их версию в системе управления версиями.

casperOne 02.01.2009 22:24

Нет в базе данных ваш? Говорит администратор базы данных 1970-х годов

ChrisA 03.01.2009 01:23

Мы можем версия SP. В процессе сборки они перемещаются из системы управления версиями в базу данных.

Joshua 03.01.2009 01:44

В DB2 / 400 хранимые процедуры - это интерфейс к машинному коду в системе ... Другими словами, их трудно перенести на вызывающую систему.

Thorbjørn Ravn Andersen 23.10.2009 23:44

Я был обижен за то, что публично транслировал эти мнения, но вот что:

Хорошо написанный код на языках с динамической типизацией следует соглашениям о статической типизации.

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

  • Считается плохим стилем повторное использование переменной с разными типами (например, плохой стиль - взять переменную списка и назначить int, а затем присвоить переменной bool тем же методом). Хорошо написанный код на языках с динамической типизацией не смешивает типы.

  • Ошибка типа в языке со статической типизацией по-прежнему является ошибкой типа в языке с динамической типизацией.

  • Функции обычно предназначены для работы с одним типом данных за раз, поэтому функция, которая принимает параметр типа T, может разумно использоваться только с объектами типа T или подклассами T.

  • Функции, предназначенные для работы с множеством разных типов данных, написаны таким образом, чтобы параметры были ограничены четко определенным интерфейсом. В общих чертах, если два объекта типов A и B выполняют аналогичную функцию, но не являются подклассами друг друга, то они почти наверняка реализуют один и тот же интерфейс.

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

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

Когда я указываю, насколько странно то, что так много соглашений о статической типизации переходят в мир динамической типизации, я обычно добавляю: «Так зачем использовать языки с динамической типизацией для начала?». Непосредственный ответ - это что-то вроде возможности писать более сжатый, выразительный код, потому что динамическая типизация позволяет программистам опускать аннотации типов и явно определенные интерфейсы. Однако я думаю, что наиболее популярные языки со статической типизацией, такие как C#, Java и Delphi, громоздки по дизайну, а не из-за их систем типов.

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

Существование семейства языков ML демонстрирует, что мы можем пользоваться преимуществами статической типизации при всей краткости записи на динамически типизированном языке. На самом деле я использую REPL OCaml для специальных, одноразовых сценариев точно так же, как все остальные используют Perl или Python в качестве языка сценариев.

100% верно. Если бы только разработчики Python наконец признали это и соответствующим образом изменили свой в остальном исключительный язык. Спасибо, что разместили это.

Konrad Rudolph 09.01.2009 22:50

Но уже существует один статически типизированный Python-подобный язык. Это называется C# ;-)

zuber 05.02.2009 02:08

C# похож на Python? Может ты имел ввиду Бу;)

Juliet 05.02.2009 06:14

Если кто-то говорит, что динамическая типизация более лаконична, просто укажите на Haskell =). Я согласен со всем, кроме вашего третьего пункта. Динамический код часто принимает параметры, которые могут быть одного из двух типов. Например, функции Prototype принимают либо HTMLElements, либо строки, которые вы можете использовать $ () для поиска, чтобы получить HTMLElements. Хорошая система статической типизации позволит вам это сделать =).

Claudiu 06.05.2009 11:16

№2 верен только в том случае, если вы следуете №1, что, на мой взгляд, не нужно. Если понятно, что делает код, значит, он правильный. У меня есть код, который я часто использую, который считывает данные из файла с разделителями табуляцией и анализирует их в массив с плавающей запятой. Зачем мне нужны разные переменные для каждого шага процесса? Данные (так называется переменная) по-прежнему являются данными каждого шага.

davidtbernal 08.05.2009 05:38

Макет кода имеет значение

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

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

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

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

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

Почти все без исключения, кого я просил попробовать этот стиль (включая меня), сначала говорили: «тьфу, ненавижу!», Но через день или два сказали: «Мне это нравится - мне трудно не вернуться. и переписать все мои старые вещи таким образом! ».

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

[Редактировать]

Я, наконец, дошел до того, что начал вести блог об этом (после многих лет пребывания в фазе "смысла"): Первая часть, Часть вторая, Часть третья.

Обычно, когда все выровнено по столбцам, это создает бремя обслуживания для разработчика. То есть выравнивание типа данных и идентификатора в объявлении метода ... Line1 (int id,) line 2 (char id,) ... убедитесь, что тип данных, имя переменной и даже запятые все в столбце являются MESS

Cervo 02.01.2009 21:55

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

philsquared 03.01.2009 01:34

[... продолжение] борется с редакторами автоформатирования. На самом деле, если отключить легко, я обычно сдаюсь в таких обстоятельствах и «плыву по течению». Но я все же предпочитаю особенно многословные языки, такие как C++.

philsquared 03.01.2009 01:36

Интересно. Хотелось бы увидеть несколько примеров. У вас есть блог?

Jay Bazuzi 03.01.2009 01:37

Ну, у меня есть: levelofindirection.com (да, он пересылает в блог - каламбур предназначен было), а также organic-programming.blogspot.com. Однако вы заметите, что ни один из них не обновлялся довольно долгое время - в значительной степени из-за vconqr.com ;-) [продолжение ...]

philsquared 03.01.2009 19:59

[... продолжение] - и я не говорю о макете. Я снова буду считать, что меня подтолкнули!

philsquared 03.01.2009 19:59

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

Kendall Helmstetter Gelner 05.01.2009 07:53

@Kendall: Звучит неплохо. Однако это сложно, потому что вы должны иметь возможность указать точное форматирование каждого возможного бита кода, включая код, который недопустим на языке!

Jay Bazuzi 05.01.2009 19:25

Это довольно стандартное мнение. Или, по крайней мере, так должно быть. Если это спорно, то есть проблема.

pyon 06.08.2009 20:43
1 ТБС и эластичные язычки, или смерть. ps: @Kendall - но да, звучит неплохо :)
zanlok 02.12.2010 04:19

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

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

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

Как насчет этого:

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

Обратите внимание, что я говорю о ресурсах в целом, а не только о памяти.

Я видел утечку 50 МБ, потому что какой-то программист библиотеки подключил событие и не позаботился о его отключении.

Joshua 03.01.2009 01:49

8 ГБ ОЗУ - ничто по сравнению с повторяющейся утечкой на сервере при высокой нагрузке.

Kendall Helmstetter Gelner 05.01.2009 08:26

Я думаю, это относится к идиоме RIIA. В таком случае я должен придерживаться предложения. RIIA - это решение для всех ресурсов, GC - частичное решение только для ресурсов памяти.

David Rodríguez - dribeas 05.01.2009 17:04

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

Agnel Kurian 07.01.2009 13:58

Любой, кто ожидает, что сборка мусора будет обрабатывать все управление ресурсами, отчаянно неправильно понял сборку мусора. GC предназначен только для управления объем памяти

benjismith 22.01.2009 01:30

Я бы поставил +1, если бы вы сказали: «Сборщик мусора, потому что он доступен не для всех ресурсов; только память. Таким образом, вы можете пропускать соединения с БД». GC решил 100 проблем и представил 20 новых, так что это все еще преимущество.

Aaron Digulla 27.02.2009 18:56

Какие «100 вопросов»? Решил только один - управление памятью, и ИМХО даже то слабо.

Nemanja Trifunovic 27.02.2009 20:11

SQL можно и нужно было сделать лучше. Поскольку его первоначальная спецификация была ограничена, различные продавцы годами расширяли язык в разных направлениях. SQL, написанный для MS-SQL, отличается от SQL для Oracle, IBM, MySQL, Sybase и т. д. Другие серьезные языки (например, C++) были тщательно стандартизированы, так что C++, написанный под одним компилятором, обычно компилируется без изменений под другим. Почему нельзя было разработать и стандартизировать SQL лучше?

HTML был серьезно неудачным выбором в качестве языка отображения браузера. Мы потратили годы на расширение его с помощью CSS, XHTML, Javascript, Ajax, Flash и т. д., Чтобы сделать удобный пользовательский интерфейс, и результат все еще не так хорош, как ваше базовое приложение для Windows с толстым клиентом. Кроме того, теперь компетентному веб-программисту необходимо знать три или четыре языка, чтобы создать достойный интерфейс.

Ах, да. Венгерская нотация - это мерзость.

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

ChrisA 02.01.2009 22:40

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

David Thornley 14.10.2009 01:33

HTML-макет намного проще, чем сборка виджетов на C++

hasen 06.11.2009 09:24

Глобалы и / или синглтоны не являются злом по своей сути

Я больше знаком с системным администратором, оболочкой, Perl (и моим «настоящим» программированием), опытом работы с PHP; в прошлом году меня бросили на работу по разработке Java.

Синглтоны - это зло. Глобалы такие злые, что их даже не пускают. Тем не менее, в Java есть такие вещи, как АОП, а теперь и различные фреймворки «внедрения зависимостей» (мы использовали Google Guice). АОП меньше, но DI вещи точно дают вам что? Глобалы. Эээ, спасибо.

Я думаю, у вас есть некоторые неправильные представления о DI. Вам следует посмотреть выступления Миско Хевери «Чистый кодекс».

Craig P. Motlin 02.01.2009 21:37

Я согласен насчет глобалов. Проблема не в самой концепции глобального, а в том, какие вещи сделать глобальными. При правильном использовании глобальные переменные очень эффективны.

Gene Roberts 03.01.2009 00:15

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

Jeff Warnica 04.01.2009 08:24

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

WolfmanDragon 30.03.2009 23:21

Рекомендации библиотеки классов для реализации IDisposable неверны.

Я не слишком часто этим делюсь, но считаю, что руководство по реализации по умолчанию для IDisposable совершенно неверно.

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

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

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

Обновлено: я написал сообщение в блоге на эту тему, если кому-то интересно:

http://www.caspershouse.com/post/A-Better-Implementation-Pattern-for-IDisposable.aspx

Мне это нравится! Теперь я хочу, чтобы все объекты IDisposable во фреймворке делали это.

Jay Bazuzi 03.01.2009 01:33

Кстати, MemoryStream одноразовый, но утечка безопасна. Подумай об этом.

Joshua 03.01.2009 01:51

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

casperOne 03.01.2009 03:18

Я бы предпочел, чтобы все типы, реализующие IDisposable, были принудительно выделены стеком или какой-либо подобной концепцией.

Daniel Paull 03.01.2009 04:13

SESE (Single Entry Single Exit) не является законом

Пример:

public int foo() {
   if ( someCondition ) {
      return 0;
   }

   return -1;
}

против:

public int foo() {
   int returnValue = -1;

   if ( someCondition ) {
      returnValue = 0;
   }

   return returnValue;
}

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

Я нашел это: Single Entry Single Exit !!

tuinstoel 03.01.2009 01:47

Я предполагаю, что другими словами это «функция должна иметь только одно выражение возврата» - никогда не соглашался с этим.

Rene Saarsoo 03.01.2009 23:04

Более того, исключение - это просто еще одна точка выхода. Когда функции короткие и безопасные (-> наконец, RAII), нет необходимости следовать SESE.

Luc Hermitte 07.01.2009 17:01

Согласовано. Я съеживаюсь от более чем 100 методов loc, которые я видел, которые несут возвращаемое значение от первой строки до самого низа, просто чтобы придерживаться SESE. Когда вы найдете ответ, есть что сказать для выхода.

Rontologist 09.01.2009 22:14

Полностью согласен с этим, я собирался добавить его в этот пост, вы меня опередили;)

dbones 03.02.2009 22:38

Подождите, люди на самом деле это делают? Почему вы не можете просто искать "возврат"?

nosatalian 31.05.2009 05:54

SESE - это закон в неуправляемом коде, но в управляемом коде это не так, какой-то пост где-то здесь в SO объясняет это лучше

Jader Dias 09.07.2009 04:23

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

javamonkey79 09.07.2009 05:29

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

cmcginty 23.07.2009 03:37

Думаю, SESE - отличный пример решения в поисках проблемы

Kevin Laity 22.10.2009 04:24

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

just somebody 15.12.2009 06:35

Это имеет смысл только в том случае, если это SESRP: Single Entry, Single Return Point. Это было важно для таких языков, как BASIC, где можно было НАХОДИТЬСЯ здесь, там и где угодно. Лучшей практикой было всегда возвращаться туда, откуда вы пришли, используя GOSUB вместо GOTO. С современными языками программирования это не такая уж большая проблема ... похоже, что разумное «возвращение туда, откуда вы пришли» превратилось в ужасный «выход только из одной точки метода».

Ryan Lundy 16.12.2009 00:29

Я запускал PMD в проекте и пришел сюда, чтобы опубликовать это после того, как появился раздражающий набор точек нарушения «OnlyOneReturn».

Tom Neyland 01.12.2010 01:22

Нулевые ссылки должны быть удалены из объектно-ориентированных языков.

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

Кроме того, когда я вызываю метод, у меня нет возможности узнать, может ли этот метод возвращать пустые ссылки, если я не копаюсь в реализации. Я хотел бы, чтобы больше языков следовали модели F# для обработки нулей: F# не позволяет программистам возвращать пустые ссылки (по крайней мере, для классов, скомпилированных на F#), вместо этого он требует, чтобы программисты представляли пустые объекты с использованием типов option. Хорошая особенность этого дизайна заключается в том, как полезная информация, например, может ли функция возвращать пустые ссылки, распространяется через систему типов: функции, возвращающие тип 'a, имеют другой тип возвращаемого значения, чем функции, возвращающие 'a option.

Интересная ссылка для подтверждения вашей точки зрения: sadekdrobi.com/2008/12/22/…

Nemanja Trifunovic 02.01.2009 20:47

Неманья: Замечательная находка, жаль, что я не могу проголосовать за комментарии :)

Juliet 02.01.2009 21:20

Я бы предпочел иметь «ссылочные типы, не допускающие значения NULL» (с проверкой компилятора), чем полностью удалить NULL.

Jon Skeet 02.01.2009 21:26

Я должен согласиться с Джоном; «null» часто является допустимым состоянием и указывает на что-то совершенно отличное от нуля или пустого. Устранение этого было бы ошибкой, ИМО; но для тех случаев, когда это не подходит, было бы неплохо использовать тип объекта, не допускающий значения NULL.

Mike Hofer 02.01.2009 22:33

Исправление: ссылка, не допускающая значения NULL.

Mike Hofer 02.01.2009 22:33

Я не согласен, но затем я использую Objective-C, где nil - довольно удобная концепция.

user23743 02.01.2009 22:41

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

Dour High Arch 03.01.2009 00:24

Мне очень нравится подход Scala к этому: здесь нет нуля, и если вам нужен тот же эффект, вы должны заключить его в объект Option [T] (Some [T] или None), который заставит вас заметить и проверить его. Больше никаких случайных нулей.

Marcus Downing 09.01.2009 06:15

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

moffdub 10.01.2009 01:20

Принцесса, если вам нравится ссылка Неманья, вы можете отредактировать свой ответ и включить его

MarkJ 27.01.2009 14:47

Согласитесь с Джоном. Должна быть возможность заставить язык предписывать, что данной переменной никогда не может быть присвоено значение null.

Thorbjørn Ravn Andersen 23.10.2009 21:59

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

drawnonward 18.04.2010 04:18

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

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

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

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

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

Но нет реальной веской причины, по которой мы должны взять работу, которая должна выполняться в базе данных, и отодвинуть ее от данных и поместить ее в исходный код, возможно, на отдельном компьютере (введение сетевого трафика и снижение производительности). Это означает отказ от десятилетий работы, которая уже была проделана для повышения производительности хранимых процедур и функций, встроенных в базы данных. Аргумент, что хранимые процедуры вводят «еще один API», которым нужно управлять, надуман: конечно, это так; этот API - это фасад, который защищает вас от схемы базы данных, включая сложные детали первичных и внешних ключей, транзакций, курсоров и т. д., и предотвращает необходимость объединения SQL в исходный код.

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

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

Kendall Helmstetter Gelner 05.01.2009 08:28

Эй, тот, кто понимает истинное предназначение хранимых процедур!

Lurker Indeed 12.01.2009 21:04

Хм. Выньте данные из системы и что у вас есть? Система, которая ничего не вычисляет. Поместите неверные данные в вашу систему и что произойдет? Крушение. Аналогия: запеките свои кирпичи (создайте надежные типы данных) и смешайте свой цемент (обеспечьте соблюдение ограничений), затем спроектируйте / создайте свою систему с идеальными блоками.

Triynko 17.04.2009 06:53

PHP отстой ;-)

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

Вам нужно остерегаться объектно-одержимых программистов.

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

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

Barry Brown 02.01.2009 23:13

@ Барри! А как насчет нас, программистов на Objective-C! Это может быть и мы!

Kendall Helmstetter Gelner 05.01.2009 08:30

C++ - это мультипарадигма, и поэтому он может решить использовать любые типы, которые захочет: P

David Rodríguez - dribeas 05.01.2009 17:29

Ориентация на объект - это средство достижения цели, а не цель сама по себе.

Captain Sensible 26.01.2009 13:11

Операторы печати - допустимый способ отладки кода

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

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

Я думаю, что использование регионов в C# вполне допустимо для свертывания кода в VS. Слишком много людей пытаются сказать, что он скрывает ваш код и затрудняет поиск. Но если вы используете их правильно, они могут быть очень полезны для идентификации участков кода.

IMHO Регионы хороши для одного ... визуализации гниения кода.

Gavin Miller 03.01.2009 00:03

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

Captain Sensible 26.01.2009 18:38

Больше всего в VS мне не хватает регионов (я использую Eclipse). поэтому вместо использования регионов мы создаем Method, у которого есть вызовы методов, у которых есть вызовы методов ............. только для того, чтобы мы могли читать проклятые вещи. Регионы ХОРОШИЕ! +1

WolfmanDragon 30.03.2009 23:17

Реляционные базы данных ужасны для веб-приложений.

Например:

  • цепочки комментариев
  • облака тегов
  • поиск пользователей
  • поддержание рекордного количества просмотров
  • обеспечение отслеживания отмены / исправления
  • многошаговые мастера

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

Kendall Helmstetter Gelner 05.01.2009 08:31

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

nes1983 12.04.2009 14:02

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

MaD70 06.11.2009 03:28

Чтобы быть хорошим программистом, действительно необходимо работать во многих областях: разработка приложений, работа с системами (ядром), дизайн пользовательского интерфейса, базы данных и так далее. Есть определенные подходы, общие для всех, и определенные подходы, специфичные для одного аспекта работы. Вам нужно научиться программировать Java как кодировщик Java, а не как кодировщик C++, и наоборот. Дизайн пользовательского интерфейса действительно сложен и использует другую часть вашего мозга, чем кодирование, но реализация этого пользовательского интерфейса в коде - это еще один навык. Дело не только в том, что не существует «единого» подхода к кодированию, но и в том, что нет только одного типа кодирования.

Не очень спорно AFAIK, но ... AJAX существовал задолго до появления этого термина, и всем нужно «отпустить». Люди использовали его для самых разных вещей. Впрочем, на самом деле это никого не волновало.

Потом вдруг POW! Кто-то придумал термин, и все подхватили подножку AJAX. Внезапно люди стали экспертами в AJAX, как будто «экспертов» по ​​динамической загрузке данных раньше не было. Я считаю, что это один из основных факторов, способствующих жестокому разрушению Интернета. То и «Веб 2.0».

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

AnthonyWJones 03.01.2009 00:24

Взгляд на историю AJAX: theregister.co.uk/2008/11/27/microsoft_ignored_ajax

tuinstoel 03.01.2009 10:54

Я помню, когда это называлось DHTML: P

GhassanPL 09.01.2009 21:21

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

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

Neil N 20.02.2009 01:37

Вы должны уметь печатать, чтобы стать программистом.

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

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

См. Также: Самый грязный маленький секрет программирования

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

Nemanja Trifunovic 03.01.2009 00:17

Неманья -> "никакой разницы" ?! Я только что получил 70 слов в минуту на онлайн-тесте. Я мог видеть, как кто-то может соскрести со скоростью 20-30 слов в минуту, но если они используют два пальца, подключая их со скоростью 5 слов в минуту (да, я работал с такими людьми), это их сдерживает.

KeyserSoze 03.01.2009 01:03

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

Nemanja Trifunovic 03.01.2009 01:12

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

KeyserSoze 03.01.2009 04:01

@ Неманья Трифунович - я слышу, что вы говорите, но, с уважением, я думаю, что вы совершенно неправы. Умение печатать имеет огромное значение.

jwpfox 03.01.2009 16:43

@keysersoze: Я никогда не работал над проектами, когда скорость набора имела значение. Даже когда я пишу код с нуля и не борюсь с какими-то сумасшедшими фреймворками, хороший редактор делает навыки набора текста почти бесполезными. В vim я обычно просто набираю пару букв, прежде чем нажимать Ctrl + P.

Nemanja Trifunovic 04.01.2009 06:18

@duncan: Никаких обид, но ты чертовски неправ - без разницы :)

Nemanja Trifunovic 04.01.2009 06:19

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

Kendall Helmstetter Gelner 05.01.2009 07:48

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

Miserable Variable 07.01.2009 11:21

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

Miserable Variable 07.01.2009 11:22

Я не против иногда смотреть на клавиатуру, чтобы не напрягать глаза. Вы ДОЛЖНЫ время от времени менять свой фокус. Если вы хороший машинист, скорее всего, у вас есть очки или контактные линзы.

Andrei Taranchenko 11.01.2009 02:27

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

Manos Dilaverakis 12.01.2009 14:36

+1. Я неоднократно видел, как люди совершают кучу ошибок, потому что они смотрят на клавиатуру, а не на код на экране. Чаще всего встречаются проблемы с синтаксисом и форматированием кода, но также и настоящие ошибки, которые не обнаруживаются компилятором.

flodin 28.02.2009 13:52

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

nosatalian 31.05.2009 05:50

Я согласен здесь. Хотя думать важно, главное - смотреть на экран.

Chet 24.06.2009 03:27

Я согласен с тем, что мысль является ограничивающим фактором программирования, но кто программирует так часто, что разрабатывает программное обеспечение по мере его ввода? Пока я кодирую / печатаю, я в значительной степени уже разработал программное обеспечение ... в результате мое мышление легко совпадает с моей скоростью набора 80wpm +.

Steven Evers 21.07.2009 22:33

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

peterchen 24.09.2009 12:00

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

Hans-Peter Störr 11.12.2009 23:02

@hstoerr: Когда я впервые пошел на курсы набора текста в шестом классе, я обманул и посмотрел на свои пальцы. Я был самым быстрым в классе, звездным учеником. Только я толком не умел печатать. К счастью, в седьмом классе я снова начал печатать, и на этот раз все сделал правильно. Это единственное полезное, чему я научился в средней школе. (Ну, это и «Всегда носите свои книги в рюкзаке, чтобы они не вылетели из ваших рук и не рассыпались по коридору».)

Ryan Lundy 16.12.2009 00:17

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

Nicole 23.02.2010 00:51

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

Dennis 28.07.2010 19:02

Обычно я печатаю 4 пальцами или около того, и я проверил свою скорость набора - 90 слов в минуту.

Jake Petroules 17.08.2010 14:44

С каких это пор wpm имеет значение при программировании? Программирование требует мысли, а не просто бездумного набора текста.

pondpad 13.09.2010 19:22

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

Ryan Lundy 14.09.2010 07:22

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

Geoffrey Zheng 19.09.2010 22:35

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

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

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

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

Фактически, по моему второму пункту:

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

Программирование имеет много общего с уборкой в ​​комнате. Применяются те же принципы организации.

Alex Baranosky 04.01.2009 23:11

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

Keith Williams 06.01.2009 17:12

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

infocyde 26.06.2009 01:46

"Погуглить" - это нормально!

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

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

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

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

Если вы знаете, как программировать, вы не можете размещать кнопку в форме.

Это спорный достаточно? ;)

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

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

Для получения дополнительной информации прочтите книгу Заключенные управляют убежищем. Будьте осторожны, эта книга меня расстроила и оскорбила; это трудное чтение, если вы разработчик, заботящийся о пользовательском опыте.

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

MusiGenesis 13.01.2009 20:20

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

James McMahon 13.01.2009 22:47

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

Dave 14.01.2009 02:55

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

Sam Erwin 02.04.2009 22:43

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

Robert J. Walker 05.05.2009 22:55

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

CMPalmer 11.06.2009 18:49

Это все равно, что сказать: «Если вы знаете что-нибудь о том, как устроен автомобиль, вам не должно быть позволено проектировать интерьер». Вокруг дизайна пользовательского интерфейса существует целая дисциплина, и если вы делаете что-то только на основе своей ментальной модели какого-то воображаемого пожилого пользователя, то вы делаете это неправильно. Никто не может объяснить ментальную модель каждого. Применение обширных исследований, передовых практик, статистического анализа и пользовательского тестирования - вот способы получить желаемый результат. Программисты тоже могут изучить эту дисциплину.

Ben Reierson 18.06.2009 00:15

@Ben: нет, вы не можете объяснить ментальную модель "всяких", но совершенно точно, что ментальная модель разработчиков полностью отличается от всех остальных. Вот почему профессионал в области интерактивного дизайна изобретет человека, который лучше всего представляет типичного пользователя. Если в системе есть пользователи очень разных персон (например, в дополнение к Дорис мы можем изобрести Джеффа, администратора ИТ), тогда хороший дизайн взаимодействия будет использовать Джеффа в качестве целевой аудитории для задач, в которых он, вероятно, будет участвовать.

AnthonyWJones 18.06.2009 01:25

Дизайн взаимодействия пользователей - вот что принесло MySpace репутацию вызывающих рвоту страниц.

Kelly S. French 16.07.2009 19:18

Не используйте хранимые процедуры в своей базе данных.

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

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

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

Marcus Downing 09.01.2009 06:17

SQL - это просто еще один язык? Трудно рассуждать с таким мышлением.

Lurker Indeed 12.01.2009 21:00

SPROC исключают атаки SQL-инъекций. В MSSQL они предварительно скомпилированы (а значит, быстрее). @ Кристофер, не могли бы вы дать мне адреса созданных вами веб-сайтов? Я хочу немного заработать: P.

Jonathan C Dickinson 29.01.2009 12:51

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

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

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

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

Исключения считаются вредными.

Проверял исключения. Непроверенные исключения - это фантастика, они отлично справляются со стабилизацией вашего приложения.

Bill K 09.01.2009 20:55

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

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

Как это для споров?

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

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

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

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

Я не знаю, как спорно это мнение. То, что вы описываете, похоже, является хорошо известным шаблоном «Решение шипа» c2.com/xp/SpikeSolution.html, и это хороший шаблон.

bignose 14.04.2009 08:11

"Java отстой" - да, я знаю, что такого мнения придерживаются далеко не все :)

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

G-Man

Я думаю, вы пытаетесь сказать, что Swing - отстой (как в пользовательском интерфейсе JAVA). Бэкенды Java совсем не отстой ... если только это не спорный момент;)

rustyshelf 03.01.2009 07:47

Необязательно быть приверженцем Java, чтобы оценить такое приложение, как JEdit. У Java есть серьезные недостатки, как и у любого другого языка. Таковые из Java легче распознать.

dreftymac 03.01.2009 08:25

Я фанат C#, но восхищаюсь тем, что некоторые приложения Java выполнены очень хорошо.

Neil N 13.02.2009 23:14

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

Lawrence Dol 19.02.2009 03:44

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

Sergio Acosta 11.03.2009 11:51

Вы собираетесь винить язык программирования в «ужасных пользовательских интерфейсах»? Конечно, это вина дизайнера пользовательского интерфейса. И хотя я уверен, что у Java есть доля плохо написанного программного обеспечения, которое работает медленно и потребляет слишком много памяти, совсем нетрудно писать программы Java, которые работают эффективно и используют память только по мере необходимости. Работая над веб-сканером на основе Java, способным сканировать сотни миллионов URI, я могу это подтвердить.

Kris 31.05.2009 02:41

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

Knubo 11.11.2010 22:46

Java - отстой. Познакомьтесь с .NET, Visual Studio, и вы больше никогда не захотите писать код для Java.

Smur 23.12.2010 17:10

Две строчки кода - это слишком много.

Если у метода есть вторая строка кода, это запах кода. Рефакторинг.

Или вы можете сделать всю свою программу одной (действительно длинной) строкой кода. Это всегда весело.

Kiv 03.01.2009 05:24

БАКА !! даже в функциональном языке, таком как haskell, в функции может быть несколько строк!

hasen 03.01.2009 05:34

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

tuinstoel 03.01.2009 05:42

Меня забавляет, что в настоящее время это ответ с самым низким рейтингом; Я думаю, что мне удалось на «спорной» части.

Jay Bazuzi 03.01.2009 21:48

Это действительно спорный, так что я до.

tuinstoel 05.01.2009 00:02

Я полностью согласен, когда люди увидят свет? Я использую Perl, поэтому я не знаю, как написать функцию с более чем одной строкой кода, а также что это за «рефакторинг», о котором вы говорите? : -O

Robert Gamble 05.01.2009 07:41

Вы должны быть функциональным программистом ... но одна строка на функцию все еще немного экстремальна;)

paxos1977 14.01.2009 06:10

Извините, это чушь. -1 от меня

Friedrich 15.01.2009 11:58

Это не спорное - это бессмысленная.

Lawrence Dol 19.02.2009 03:45

Это зависит от вашего определения «линии». Для некоторых методов даже одной строки слишком много.

G B 05.06.2009 20:55

Ни один метод, который я когда-либо писал (насколько я помню), имеет всего одну строчку кода =)

Jader Dias 24.09.2009 20:20

int ScrewYou () {printf ("Это шары ... \ n"); }

Jasarien 14.10.2009 01:40

Обычно, когда я пишу фиктивный метод ПУСТОТА, просто из-за соглашений о форматировании он занимает как минимум две строки. Непустые функции обычно занимают три строки. Конечно, как сказал Кив, вы можете иметь 10 000 символов в одной строке, поэтому «строки» могут быть не лучшим показателем для подсчета размера программы.

luiscubal 15.10.2009 22:17

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

atconway 29.09.2010 18:44

@atconway: C++ не работает, потому что вы не можете сделать ничего полезного в одном операторе. Perl терпит неудачу, потому что сбивает с толку даже одну строчку. (Для всех: за этим стоит здравомыслие, но я хотел шокировать.)

Jay Bazuzi 03.10.2010 06:56

Классы должны умещаться на экране.

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

Сворачивание кода и миниатюрные шрифты обманывают.

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

Rene Saarsoo 03.01.2009 22:40

Рене: Спасибо, что не согласились со мной, не отклонив мой ответ сразу. Я чувствую непредвзятость.

Jay Bazuzi 03.01.2009 23:17

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

user13876 05.01.2009 14:12

Размер экрана сильно различается в зависимости от остроты зрения. Я держу свои экраны с разрешением 1680 × 1250 и использую Consolas 8pt. То, что я вижу на одном экране, скорее всего, на много больше, чем у парня, работающего с разрешением 640 × 480 и использующим Courier New 10pt.

Mike Hofer 06.01.2009 15:24

Сделайте так: «Емкость экрана сильно различается в зависимости от остроты зрения и настроек дисплея». :-) Еще не хватило кофе. :-)

Mike Hofer 06.01.2009 15:25

@Mike: это правда, емкость экрана варьируется. Чтобы следовать моим рекомендациям, вы должны решить, на какой экран вы хотите поместиться. В команде вы должны принять это решение вместе. Тем не менее, принцип верен: я хочу иметь возможность смотреть на весь класс и понимать его целиком, без прокрутки.

Jay Bazuzi 06.01.2009 18:40

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

Rob Williams 07.01.2009 01:53

@ Роб: спасибо, и ты прав. В некоторых языках вы можете извлечь класс и получить некоторую компактность, надеюсь, в пользу вашего кода. В других случаях (C++ я смотрю на вас!) Даже простые классы должны работать очень усердно.

Jay Bazuzi 07.01.2009 08:25

Есть ли у вас какие-то другие правила? Список классов в API должен умещаться на одном экране? Что есть в классе, что вам все равно нужно видеть, конечно, название говорит вам все о том, на что он способен! Зачем смотреть методы по списку.

Greg Domjan 07.01.2009 10:05

Некоторые другие правила, которые могут подойти: «Методы должны иметь один оператор» и «блоки должны иметь только один оператор», и «варианты переключения должны быть тривиальными» и «каждый тип« перечисления »должен упоминаться в условном выражении только один раз». :-)

Jay Bazuzi 08.01.2009 03:06

Ой. Может быть достаточно сложно разместить метод на экране, не говоря уже о целом классе (мой основной язык - Java BTW)

finnw 17.01.2009 19:45

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

Steven Evers 24.01.2009 01:31

@SnOrfus: Готов поспорить, что в этих больших классах есть кусочки автономных, универсальных, многоразовых функциональных возможностей, которые сделают COMPLETE SENSE новым классом. Вы не будете сбиты с толку при просмотре ссылки на один, потому что имя и его функциональность будут очевидны.

Jay Bazuzi 24.01.2009 21:28

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

Kelly S. French 16.07.2009 19:37

Вы говорите о классах в C++, где тело функции объявлено вне класса? тогда, может быть, ты прав ...

Amarghosh 10.09.2009 12:18

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

Jay Bazuzi 11.09.2009 00:58

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

Daniel Daranas 21.12.2009 20:28

Явный self в объявлениях методов Python - плохой выбор дизайна.

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

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

Kiv 03.01.2009 05:18

Я часто ошибочно набираю его как slef и получаю ошибки, потому что self не объявлен.

hasen 04.01.2009 06:30

Я думаю, что def в class должен подразумевать self, а другие типы методов могут использовать другое / дополнительное ключевое слово, например defstatic / static def.

Kornel 05.01.2009 18:41

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

cygil 16.03.2009 06:45

Пожалуйста, прочтите и пересмотрите свое мнение: effbot.org/pyfaq/… и artima.com/weblogs/viewpost.jsp?thread=214325 - два хороших места для начала.

WhatIsHeDoing 19.04.2009 04:50

@Daz: ссылки, которые вы дали, говорят либо о теле функции (но я говорю об объявлении аргументов), либо о семантике функций 1-го класса (что полностью ортогонально синтаксису).

Kornel 22.05.2009 04:10

Примитивные типы данных - это преждевременная оптимизация.

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

Важно не то, насколько велики типы данных, а то, для чего они используются. Если у вас есть переменная дня месяца, не имеет большого значения, подписан он или беззнаковый, или это char, short, int, long, long long, float, double или long double. Важно то, что это день месяца, а не месяц или день недели или что-то еще. См. Колонку Джоэла о том, как делать неправильные вещи неправильными; Венгерская нотация как изначально предлагалось была хорошей идеей. На практике он в основном бесполезен, потому что говорит не то.

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

David Rodríguez - dribeas 05.01.2009 16:53

По крайней мере, в Common Lisp вы можете указать типы данных позже, как только вы добьетесь правильной работы программы. Вот как CMU Common Lisp однажды победил компилятор Fortran в состязании по вычислению чисел.

David Thornley 09.01.2009 18:57

В основном это Алан Перлис: «Функции задерживают привязку: структуры данных вызывают привязку. Мораль: структурируйте данные на поздних этапах процесса программирования».

just somebody 15.12.2009 05:17

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

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

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

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

Kendall Helmstetter Gelner 05.01.2009 08:43

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

Aaron Digulla 27.02.2009 17:53

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

Mike Dunlavey 06.02.2010 18:56

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

Засорение кода блоками try / catch не является решением.

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

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

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

-

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

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

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

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

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

Kendall Helmstetter Gelner 05.01.2009 08:45

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

Einstein 05.01.2009 09:33

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

David Rodríguez - dribeas 05.01.2009 21:23

Если платформа GC не подходит для вашей конкретной ситуации, будьте благоразумны и не используйте ее. Это так просто.

Captain Sensible 22.04.2010 12:39

Избыточный HTML в файлах PHP: иногда необходимо

Избыточный Javascript в файлах PHP: запуск атаки хищника

Хотя мне сложно разобраться во всех ваших переключениях между эхоing и?> <? Php 'ing html (в конце концов, php - это всего лишь процессор для html), добавленные строки и строки javascript превращают его в совершенно неразрешимый беспорядок.

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

Причина, по которой вы постоянно переключаетесь между PHP, Javascript и HTML, заключается в том, что вы плохо разбираетесь во всех трех из них.

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

Какие? Для создания динамического веб-сайта, генерируемого на стороне сервера, вам понадобятся все три (если вы не используете другую систему). Для PHP у вас есть шаблоны, мощность сервера и т. д. Для HTML у вас есть основа фактического сайта. JS: динамически загружаемый контент, специальные функции (подсветка синтаксиса).

Dalin Seivewright 09.01.2009 23:59

Мнение: разработчики должны тестировать собственный код

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

+1. Это вопрос собственности, мы склонны больше заботиться о вещах, которыми мы владеем, чем о вещах, которыми мы не владеем. Хотите доказательств? Взгляните на автомобили вашей компании.

AnthonyWJones 03.01.2009 16:55

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

Greg Domjan 07.01.2009 10:11

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

Benjamin Confino 27.02.2009 22:34

Мне кажется, это плохие разработчики. Я бы подал это под не все ленивые разработчики хорошие разработчики.

gradbot 13.10.2009 21:25

+1 за противоречие: я собираюсь тестировать только те вещи, которые, как я думаю, проверять, и если я разработаю конкретный метод ... Я уже подумал обо всем, что может пойти не так (с моей точки зрения). Хороший тестировщик увидит другую точку зрения -> понравится вашим пользователям.

Steven Evers 14.10.2009 23:21

Веб-приложения - отстой

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


Сборка мусора - отстой

Нет, на самом деле это не так. Но это как ничто другое заставляет программистов отстой. В колледже первым языком, которым нас научили, был Visual Basic (оригинальный). После этого был еще один курс, где учителя притворился учили нас C++. Но ущерб был нанесен. На самом деле никто не знал, как использовать это эзотерическое ключевое слово delete. После тестирования наших программ мы обнаружили либо исключения неверных адресов, либо утечки памяти. Иногда мы получали и то, и другое. Среди 1% моих преподавателей, которые действительно умеют программировать, только тот, кто может управлять своей памятью самостоятельно (по крайней мере, он делает вид), и он пишет эту тираду. Остальные пишут свои программы на VB.NET, что по определению является плохим языком.


Отстойный динамический набор текста

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


Я мог бы придумать еще тирады, но это будет позже, а не сейчас.

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

Kiv 03.01.2009 05:23

C НЕ подходит для всего! это не инструмент для веб-разработки! есть хотя бы что!

hasen 03.01.2009 06:12

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

pyon 03.01.2009 06:39

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

Rene Saarsoo 03.01.2009 23:11

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

Rontologist 09.01.2009 22:12

Это 3 мнения в одном ответе, и все они дураки

finnw 17.01.2009 20:55

Никогда не принимайте решение по какой-либо проблеме до того, как тщательно ее рассмотрите. Ни один стандарт программирования НИКОГДА не оправдывает плохой подход к проблеме. Если стандарт требует написания класса, но после тщательного обдумывания вы считаете более подходящим статический метод, всегда используйте статический метод. Ваше собственное усмотрение всегда лучше, чем даже самое дальновидное мышление автора стандарта. Стандарты - это здорово, если вы работаете в команде, но правила предназначены, чтобы их нарушать (конечно, со вкусом).

C++ - один из НАИХУДНЫХ языков программирования - КОГДА-ЛИБО.

У него есть все признаки того, что разработано комитетом - он плохо выполняет какую-либо конкретную работу, а некоторые виды работы (например, ОО) выполняет ужасно. В нем есть "кухонная раковина" отчаяния, которое просто не исчезнет.

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

Это не лучший язык для изучения объектно-ориентированных концепций. Он ведет себя как «C с оболочкой класса» вместо правильного объектно-ориентированного языка.

Я мог бы продолжить, но пока оставлю все как есть. Мне никогда не нравилось программировать на C++, и хотя я «порезал зубы» на FORTRAN, я полностью любил программировать на C. Я до сих пор считаю C одним из великих «классических» языков. То, чем, на мой взгляд, НЕ является C++.

Ваше здоровье,

Обновлено: чтобы ответить на комментарии об обучении C++. Вы можете преподавать C++ двумя способами - либо обучать его как C «на стероидах» (начать с переменных, условий, циклов и т. д.), Либо обучать его как чистому «объектно-ориентированному языку» (начать с классов, методов и т. д.). Вы можете найти учебные тексты, в которых используется тот или иной из этих подходов. Я предпочитаю второй подход (сначала объектно-ориентированный), поскольку он подчеркивает возможности C++ как объектно-ориентированного языка (что было изначальным акцентом C++ в дизайне). Если вы хотите преподавать C++ «как C», то я думаю, вам следует обучать C, а не C++.

Но проблема с C++ в качестве первого языка, по моему опыту, заключается в том, что этот язык слишком БОЛЬШОЙ, чтобы преподавать за один семестр, плюс большинство «вводных» текстов пытаются охватить все. Просто невозможно охватить все темы в курсе "первого языка". Вы должны хотя бы разделить его на 2 семестра, и тогда это уже не «первый язык», ИМО.

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

Другое редактирование: (Конраду)

Я совершенно не согласен с тем, что C++ «превосходит во всех отношениях» C. Я потратил годы на кодирование программ на C для микроконтроллеров и других встраиваемых приложений. Компиляторы C для этих устройств сильно оптимизированы, часто производя код не хуже написанного вручную ассемблера. Когда вы переходите на C++, вы получаете огромные накладные расходы, накладываемые компилятором на управление языковыми функциями, которые вы не можете использовать. Во встроенных приложениях вы мало выиграете, добавив классы и тому подобное, IMO. Что вам нужно, так это жесткий, чистый код. Вы можете написать это на C++, но тогда вы действительно просто пишете C, и компиляторы C более оптимизированы для этих приложений.

Я написал движок MIDI сначала на C, а затем на C++ (по запросу производителя) для встроенного контроллера (звуковой карты). В конце концов, чтобы удовлетворить требования к производительности (тайминги MIDI и т. д.), Нам пришлось вернуться к чистому C для всего основного кода. Мы смогли использовать C++ для кода высокого уровня, и иметь классы было очень приятно, но нам нужен C, чтобы получить производительность на более низком уровне. Код C был на порядок быстрее, чем код C++, но ассемблер, кодированный вручную, был лишь немного быстрее, чем скомпилированный код C. Это было в начале 1990-х, просто чтобы правильно расставить события.

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

hasen 03.01.2009 06:08

В C++ очень сложно создавать пригодные для использования классы, но как только вы их создадите, жизнь станет очень легкой. Намного проще, чем использовать простой C. Я делаю следующее: я реализую функциональность на C, а затем оборачиваю ее с помощью классов C++.

pyon 03.01.2009 06:52

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

Debajit 03.01.2009 13:10

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

Konrad Rudolph 03.01.2009 14:57

Я думаю, что C++ - хороший пример «разработки комитетом», выполненного ВЕРНО. Это беспорядок во многих отношениях, и для многих целей это паршивые языки. Но если вы потрудитесь по-настоящему выучить его, в нем спрятан удивительно выразительный и элегантный язык. Просто обидно, что мало кто это обнаруживает.

jalf 04.01.2009 04:01

У меня есть еще одна проблема: «Вы можете обучать C++ двумя способами» - это неправильно. Очевидно, вы когда-либо использовали C++ только двумя способами, не раскрывая его истинный потенциал. Это также объясняет ваш опыт работы с микроконтроллерами: C на нет быстрее, чем (хорошо написанный) C++.

Konrad Rudolph 05.01.2009 00:17

+1: Из всех языков, с которыми я когда-либо играл, С ++ - единственный, от которого меня тошнит каждый раз, когда я к нему обращаюсь. У меня уже много лет есть книга по C++, время от времени я беру ее и говорю себе: «На самом деле не может быть так уж плохо» и читаю до тех пор, пока мои глаза не кровоточат, я добрался до страницы 47.

Robert Gamble 05.01.2009 07:18

Существует третий подход к изучению C++: его использует ускоренный C++. Он строится с самого начала (переменные, функции), но с использованием реальных элементов C++ (STL). Я рекомендую его всем, кто хочет еще раз взглянуть на C++.

David Rodríguez - dribeas 05.01.2009 14:34

@dribeas: Я ценю рекомендацию, похоже, хорошая книга. Я сомневаюсь, что когда-нибудь смогу «оценить» то, что может предложить C++, но если я когда-нибудь оправлюсь от своего предыдущего опыта, я приму вас по вашей рекомендации.

Robert Gamble 07.01.2009 09:39

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

David Thornley 09.01.2009 17:43

Просто выбросьте это там, но в тестовой игре Programming Language есть довольно много примеров того, как C++ работает быстрее C.

James McMahon 13.01.2009 22:43

«Когда вы переходите на C++, вы получаете огромные накладные расходы, накладываемые компилятором на управление языковыми функциями, которые вы не можете использовать. Во встроенных приложениях вы мало что выиграете, добавляя классы и тому подобное, IMO. Вам нужен жесткий, чистый код . " - кто сказал, что вы имеют используете классы, rtti и еще много чего?

Johannes Schaub - litb 21.01.2009 08:03

у вас нет имеют, чтобы использовать эти функции. если вы используете только подмножество C, то C++ работает так же быстро, как C., тогда вы можете выборочно выбирать те функции C++, которые нравятся ты. немного векторного сахара здесь, кое-что другое там. разве это не хорошо?

Johannes Schaub - litb 21.01.2009 08:05

и я согласен, что это почти хороший первый язык. ИМХО неразумно сначала этому учить. и хорошо, что он совместим с С. нуфф сказал :)

Johannes Schaub - litb 21.01.2009 08:06

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

Brian Postow 06.05.2009 01:38

Что касается вашего анекдота о том, что C++ на порядок медленнее, имейте в виду, что компиляторы C++ 80-х - это не то же самое, что компиляторы C++ сегодня.

davidtbernal 08.05.2009 05:33

Я согласен, что это худший язык на свете. За исключением всех остальных.

Kaz Dragon 17.06.2009 14:37

Я не согласен, что это худший язык; Я согласен, что это плохой язык; Я также согласен с тем, что это плохой родной язык. C++ мощен и имеет множество очень полезных функций. Иногда это делает C++ хорошим выбором. В C++ также есть много скрытого зла (много неопределенного поведения, которое выглядит прекрасно ...), что делает его плохим языком и, безусловно, плохим первым языком.

user21037 20.07.2009 12:45

@ david-basarab - компиляторы C++ теперь намного лучше! Я использую C++ не только для MIDI, но и для алгоритмов аудио DSP - использование шаблонов C++ делает его очень мощным для создания настраиваемых параметров времени компиляции, таких как размер и макет буфера, что позволяет выполнять автоматическую оптимизацию SSE / altivec. Преимущество C++ в настоящее время заключается не в языке, который в наши дни всегда является загадкой для шаблонов, а в том, что доступные компиляторы лучше оптимизируют функции реального времени, чем Haskell, Ada, Scheme и Scala.

jdkoftinoff 17.08.2009 05:33

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

Macke 21.08.2009 22:14

C++ подобен демократии: "Многие формы правления были испытаны и будут испытаны в этом мире греха и горя. Никто не притворяется, что демократия совершенна или всесторонне развита. Действительно, было сказано, что демократия - наихудшая форма. правительства, за исключением всех тех других форм, которые время от времени применялись ". -Сэр Уинстон Черчилль

gradbot 13.10.2009 21:11

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

ravibhagw 08.06.2010 23:48

+1 За второй язык. Сначала я выучил Java, а год спустя - немного C. Я рад, что изучил материал C низкого уровня, потому что он делает меня лучшим программистом высокого уровня, но я также рад, что мне не пришлось начинать с C.

Bart van Heukelom 09.07.2010 14:21

А как насчет Objective-C? И я полностью согласен с вами, Хантродс.

user142019 20.12.2010 17:36

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

Мне это нравится, но это спорно?

erikkallen 04.01.2009 01:53

Есть очень много плохих учений.

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

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

ravibhagw 09.06.2010 00:00

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

Это напоминает мне цитату (хотя я не могу вспомнить, кто ее сказал): «Измерение программы строками кода похоже на измерение плоскости по весу».

Cristián Romo 03.01.2009 18:48

@ Cristián: Это сказал Билл Гейтс.

Dan Dyer 11.01.2009 16:43

C (или C++) должен быть первым языком программирования

Первый язык НЕ должен быть простым, он должен настраивать ученика и готовить его к серьезной информатике. C идеально подходит для этого, он заставляет студентов думать о памяти и обо всем низкоуровневом материале, и в то же время они могут научиться структурировать свой код (у него есть функции!)

У C++ есть дополнительное преимущество: он действительно отстой :) Таким образом, студенты поймут, почему людям пришлось придумывать Java и C#.

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

IAdapter 03.01.2009 07:00

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

hasen 03.01.2009 11:18

+1: Все должны сначала изучить C, потому что программирование не для всех и не для тех, кто не понимает C.

Robert Gamble 05.01.2009 07:38

Взломайте их с помощью сырого машинного кода. Страдать!!! Курс ассемблера был самым интересным (во время занятий) в университете.

Jonathan C Dickinson 29.01.2009 12:40

Мифология. До знакомства с C я изучил сборку 2/3 CPU и ознакомился с другими. Некоторые процессоры приятно программировать из-за их ортогональных наборов инструкций, другие - неприятно, но менее идиосинкразично, чем C.C не подходит для предполагаемого использования, то есть портативной сборки.

MaD70 06.11.2009 02:05

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

MaD70 06.11.2009 02:07

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

iandisme 09.12.2009 23:50

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

Matt 19.12.2009 12:14

@Matt: ты не должен соглашаться;)

hasen 19.12.2009 12:53

Я много преподавал вводный CS. То, что я обнаружил, было наиболее полезным - это сначала несколько недель на симуляторе десятичной машины, чтобы настроить базовую мысленную структуру адресов, памяти, инструкций и пошагового выполнения. Потом мы сделали Basic (извините), затем Pascal. Мне нравится C (и C++), но учить этому новичков - ад, потому что есть слишком много тонких способов запутать студентов, например, разница между указателями и ссылками на массивы и вложенными типами. Сказать «тонуть или плавать» неприемлемо - они платят за обучение.

Mike Dunlavey 08.03.2010 17:18

Случайная подборка афоризмов Кука ...

  • Второй язык - самый сложный для изучения.

  • Самая сложная для изучения ОС - это ваша вторая ОС, особенно если вашей первой был мэйнфрейм IBM.

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

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

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

  • Ни одна ОС никогда не будет стабильной, если не будет использовать аппаратное управление памятью.

  • Системное программирование низкого уровня намного проще, чем программирование приложений.

  • Программист, у которого есть любимый язык, просто играет.

  • Напишите руководство пользователя ПЕРВЫМ!

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

  • (Кредо подрядчика): Скажите им, что им нужно. Дайте им то, что они хотят. Убедитесь, что чек снят.

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

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

  • Вы можете немного повозиться с небольшими фрагментами кода в начале, чтобы опробовать некоторые идеи, но, как правило, никто не начинает всерьез программировать, пока вы не ЗНАЕТЕ, как вся программа или приложение будет размещено, и вы ЗНАЕТЕ, что все это будет работать ТОЧНО, как рекламируется. Для большинства проектов с некоторой степенью сложности Как правило, я трачу от 60 до 70 процентов времени только на просачивание идей.

  • Поймите, что программирование имеет мало общего с языком и полностью связано с алгоритмом. Все эти изящные придурки с запоминающимися аббревиатурами, которые люди придумывали за эти годы это просто разные способы снятия шкуры с реализации cat. Когда вы снимаете все OOPiness, RADology, Methodology 37 и Best Practice 42, вам все равно придется иметь дело с основными строительными блоками:

    • задания
    • условные
    • итерации
    • поток управления
    • Ввод / вывод

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

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

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

IAdapter 03.01.2009 07:04

И становится все проще и легче, не так ли?

cookre 03.01.2009 09:13

«вы наконец понимаете, что все языки программирования одинаковы» - вы часто слышите это от людей, которые программировали только на C#, C++, разновидностях VB, Java и, возможно, Python. Затем вы наконец изучаете Haskell, Ocaml, Erlang, Prolog и Lisp и чувствуете себя идиотом из-за того, что так много пропустили.

Juliet 04.01.2009 06:30

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

cookre 05.01.2009 00:17

@cookre: попробуйте использовать алгоритмы, разработанные для выражения на императивном языке программирования (PL) с чисто ленивым функциональным PL, таким как Haskell, или в логике (ограничений) PL, такой как Prolog (и производные), или в PL, разработанном для отказоустойчивости и массивный параллелизм, такой как Erlang, и вы обнаружите, что различия в семантике - это все, что действительно имеет значение.

MaD70 06.11.2009 02:34

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

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

user13876 05.01.2009 14:42

У меня есть степень бакалавра. на английском. Скорее всего, я для этого лучше программист. Это то, что ты имеешь в виду?

postfuturist 10.01.2009 03:41

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

Captain Sensible 22.04.2010 12:43

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

Bill the Lizard 22.04.2010 16:14

Лучшие программисты отслеживают весь свой код в отладчике и тестируют все пути.

Ну ... OP сказал спорно!

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

Jay Bazuzi 03.01.2009 20:41

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

Stefan Steinegger 16.11.2009 14:41

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

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

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


Некоторые цифры, подтверждающие это утверждение:

From the Editor

IEEE Software, November/December 2001

Quantifying Soft Factors

by Steve McConnell

...

Limited Importance of Process Maturity

... In comparing medium-size projects (100,000 lines of code), the one with the worst process will require 1.43 times as much effort as the one with the best process, all other things being equal. In other words, the maximum influence of process maturity on a project’s productivity is 1.43. ...

... What Clark doesn’t emphasize is that for a program of 100,000 lines of code, several human-oriented factors influence productivity more than process does. ...

... The seniority-oriented factors alone (AEXP, LTEX, PEXP) exert an influence of 3.02. The seven personnel-oriented factors collectively (ACAP, AEXP, LTEX, PCAP, PCON, PEXP, and SITE §) exert a staggering influence range of 25.8! This simple fact accounts for much of the reason that non-process-oriented organizations such as Microsoft, Amazon.com, and other entrepreneurial powerhouses can experience industry-leading productivity while seemingly shortchanging process. ...

The Bottom Line

... It turns out that trading process sophistication for staff continuity, business domain experience, private offices, and other human-oriented factors is a sound economic tradeoff. Of course, the best organizations achieve high motivation and process sophistication at the same time, and that is the key challenge for any leading software organization.

§ Прочтите статью для объяснения этих сокращений.

Похоже, вы видите, что процесс используется для компенсации плохих программистов, а не для повышения квалификации великих разработчиков. Вот почему в Agile Manifest сказано: «Люди и взаимодействие важнее процессов и инструментов». Вместо того, чтобы добавлять процесс для плохих программистов, добавляйте его, когда количество программистов вырастет.

Jay Bazuzi 03.01.2009 20:40

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

rustyshelf 04.01.2009 13:59

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

Alex Baranosky 04.01.2009 23:22

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

Kendall Helmstetter Gelner 05.01.2009 08:09

Я не мог с тобой больше согласиться! Споры, которые я вел с другими программистами по поводу их строгого соблюдения процессов, могут составить книгу размером с «Войну и мир». Однако это включает как «хорошие», так и плохие процессы.

user13876 05.01.2009 14:14

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

Juliet 09.01.2009 05:37

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

MarkJ 27.01.2009 14:56

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

Tim Williscroft 02.02.2009 05:00
  • Кса Ли: на самом деле имеет несколько заслуживающих внимания и законных точек зрения, если вы можете отфильтровать все оскорбления и рационально оценивать утверждения без согласия (или несогласия), основываясь исключительно на личности, стоящей за утверждениями. Он и другие пресловутые «тролли», которые критиковали языки или инструменты, которые я использую (d) на регулярной основе, повторяют многие мои «противоречивые» точки зрения.

  • [Генераторы документации] (http: //en.wikipedia.or / wiki / Comparison_of_documentation_generators): ... вид, в котором создатель придумал собственный синтаксис, специально созданный для документирования исходного кода (включая, но не ограничиваясь, JavaDoc), совершенно излишни и пустая трата времени, потому что:

    • 1) Они недостаточно используются людьми, которые должны использовать их больше всего; а также
    • 2) Все эти мини-языки документации все они можно легко заменить на YAML.

Замените язык разметки на YAML ... вы, должно быть, сошли с ума. Голосование за хорошую полемику.

Rene Saarsoo 03.01.2009 23:47

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

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

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

brian d foy 03.01.2009 08:11

Мое неоднозначное мнение по этому поводу: любой, кто описывает технологию как «зло», является злом. Узоры не убивают людей, люди убивают людей.

dreftymac 03.01.2009 08:11

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

Jay Bazuzi 03.01.2009 20:37

«Языки ООП со статической типизацией не могут избежать наследования» - OCaml - это язык ООП со статической типизацией, но он также поддерживает структурную типизацию ((en.wikipedia.org/wiki/Structural_type_system), что более или менее является «утиной типизацией для статических языков». роль наследования.

Juliet 04.01.2009 06:46

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

David Rodríguez - dribeas 05.01.2009 21:28

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

fbonnet 15.01.2009 12:03

Исправляйте каждый обнаруженный дефект. Не только дефекты «серьезности 1»; все дефекты.

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

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

на самом деле не «спорный» - это установившаяся практика везде я работал

warren 22.10.2009 08:22

Диплом по информатике не учит - и не должен - научить вас быть программистом.

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

Если вы хотите быть программистом, изучите Java. Если вы хотите стать компьютерным ученым, выучите как минимум три почти совершенно разных языка. например (ассемблер, c, lisp, ruby, smalltalk)

Первый не вызывает споров, по крайней мере, в области CS.

wds 03.01.2009 22:06

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

Starkii 05.01.2009 04:44

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

Lance Roberts 06.01.2009 04:58

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

hasen 07.01.2009 05:12

Можете ли вы переместить свой второй ответ в другой пост, чтобы его можно было оценить отдельно?

Greg Domjan 07.01.2009 09:57

@ Грег: Готово. Спасибо за предложение.

Starkii 08.01.2009 23:41

Я согласен с «не следует», но не с «не должен». Где еще в академических кругах вы должны научиться программировать? В программном обеспечении нет аналога инженерным дисциплинам (механика, электрика, гражданское строительство и т. д.).

MusiGenesis 13.01.2009 20:12

@MusiGenesis: В моем местном общественном колледже есть степень «младшего специалиста по прикладным наукам» по направлению «Компьютерное программирование». (Washtenaw Community College) Вот куда я пошел бы, чтобы стать программистом. Важно не путать информатику с программистом. Они НЕТ одно и то же

Starkii 16.01.2009 07:07

@MusiGenesis: На самом деле я только что получил степень в области инженерии (программное обеспечение). Я, конечно, не компьютерный ученый, и я не хочу им быть.

ajlane 09.03.2009 15:43

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

Lucas Lindström 06.05.2009 01:02

Я не согласен с тем, что CS не учит вас быть программистом. Он ДЕЛАЕТ и ДОЛЖЕН делать это - кстати, обучая нескольким языкам, а не только одному - но это еще не ВСЕ, что он должен делать. Степени CS также должны научить вас как можно большему количеству различных областей CS, например, базовое программирование, функциональные языки, базы данных, криптография, AI, языковая инженерия (например, компиляторы / синтаксический анализ), архитектура и математические области, такие как компьютерная графика и различные алгоритмы. .

DisgruntledGoat 10.05.2009 04:04

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

ravibhagw 08.06.2010 23:46

Я не согласен. Степень CS учит вас, как часто решать проблемы с использованием C / C++ (низкоуровневые языки), она учит вас дизайну алгоритмов, теории, лежащей в основе ОС, общим алгоритмам, используемым повсюду - все это применимо, если вы хотите кодировать. Другими словами, вы получаете основы - основу, которую вы можете построить, изучая больше языков. Знание Java не делает вас программистом, на самом деле, это самая нелепая вещь, которую я слышал некоторое время.

sarsnake 01.12.2010 00:12

Веб-сервисы - отстой, и это не путь в будущее. Они до смешного неэффективны и не гарантируют заказанную доставку. Web-сервисы НИКОГДА не должны использоваться в системе, где пишутся как клиент, так и сервер. Они в основном полезны для приложений типа mash-up micky mouse. Их ни в коем случае нельзя использовать для любого вида связи с установлением соединения.

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

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

Juliet 04.01.2009 06:55

@Juliet: что в "Web-сервисах НИКОГДА нельзя использовать в системе где пишутся и клиент, и сервер", вы не понимаете? Понятно, что в вашей ситуации вы не контролируете обе части системы, поэтому ваш риторический вопрос неуместен.

MaD70 06.11.2009 04:21

Мое противоречивое мнение: объектно-ориентированное программирование - это самое худшее, что когда-либо случалось в области разработки программного обеспечения.

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

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

Затем, поскольку никто не знает, что на самом деле означает ООП, мы тратим огромное количество времени на мелкие споры о том, является ли язык X или Y «действительно ООП» или нет, какие причудливые особенности культового языка карго являются абсолютно «существенными» для того, чтобы язык считался "действительно ООП".

Вместо того, чтобы требовать, чтобы тот или иной язык был "по-настоящему умен", мы должны посмотреть, какие языковые особенности демонстрируются экспериментально, чтобы фактически повысил продуктивность, вместо того, чтобы пытаться превратить его в какой-то воображаемый идеальный язык или действительно заставлять наши программы, чтобы соответствовать некоему платоническому идеалу «действительно объектно-ориентированной программы».

Вместо того, чтобы настаивать на том, чтобы наши программы соответствовали некоему платоническому идеалу «действительно объектно-ориентированного», как насчет того, чтобы сосредоточиться на соблюдении хороших инженерных принципов, сделать наш код легким для чтения и понимания и использовать возможности языка, которые являются продуктивными и полезными? независимо от того, достаточно ли они "ООП".

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

Jay Bazuzi 03.01.2009 20:35

Идиома «Истинно XYZ» обычно является случаем ошибки «Не истинный шотландец». Что касается остального, вы читали xahlee.org/Periodic_dosage_dir/t2/oop.html? Кроме того, это очень похоже на сообщение perlmonks, вы писали об этом раньше?

dreftymac 03.01.2009 22:21

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

Breton 04.01.2009 01:39

Я ни разу не слышал, чтобы кто-нибудь говорил о словосочетании «действительно объектно-ориентированный» за последние 10 лет, которые я занимаюсь программированием. Никогда. Ни разу. Вы на самом деле цитируете какого-нибудь неприятного менеджера?

Juliet 04.01.2009 07:05

Любой, кто начал с java или C++, а затем попробовал lua, или javascript, или какой-либо другой язык, в котором нет какой-либо произвольной функции java. Любой, кто укоренился в мире Java и считает, что одиночные игры - ужасная идея. Любой, кто читал книгу GoF и думал, что это будущее

Breton 05.01.2009 02:06

Почти, ИМХО. Я думаю, что ООП - идеальный способ справиться с некоторыми аспектами программирования, но это не то, чем оно задумывалось: это не замена каждой методологии и / или фрагменту кода, с которым вы когда-либо сталкивались; Он не застрахован от того, чтобы зайти слишком далеко; Это не ваш хозяин; Незаменимый.

jTresidder 08.01.2009 01:04

Вы имеете опыт работы с VB6 и никогда не принимали ООП?

Chad 24.05.2009 09:48

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

Breton 26.05.2009 06:22

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

Breton 26.05.2009 06:25

Я ненавижу, когда новички читают мне лекции о величии ООП, когда я программирую на ООП-языках с середины 80-х. Они полностью слепы к недостаткам ООП, они не знают, что «ООП» - это плохо определенная концепция, и, что хуже всего, они игнорируют целый мир вариантов w.r.t. парадигмы программирования.

MaD70 06.11.2009 03:55

+1 Хотел бы я проголосовать больше. Это поле изобилует подножками, гуру, «правильным мышлением», а иногда и хорошими идеями, воплощенными в религии. Для инженера-механика / электрика (вроде меня) это так странно. Я полагаю, что если что-то правда, то этому есть научная причина. Я также считаю, что изобретательность - это хорошо. Очень мало этого в этой области.

Mike Dunlavey 18.02.2010 17:59

Диаграммы UML сильно переоценены

Конечно, есть полезные диаграммы, например. диаграмма классов для составного паттерна, но многие диаграммы UML не имеют абсолютно никакого значения.

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

Я действительно не думаю, что это должно вызывать споры, но это так. Люди видят пример из другого места в коде, из Интернета или из какой-то старой книги «Изучите себя Advanced Power SQLJava # BeansServer за 3,14159 минут» от 1999 года, и они думают, что что-то знают, и копируют это в свой код. Они не просматривают пример, чтобы выяснить, что делает каждая строка. Они не думают о дизайне своей программы и не смотрят, есть ли более организованный или более естественный способ сделать то же самое. Они не пытаются поддерживать свои навыки в актуальном состоянии, чтобы узнать, что они используют идеи и методы, устаревшие в последний год предыдущего тысячелетия. Похоже, у них нет опыта, чтобы понять, что то, что они копируют, создавало ужасающее бремя обслуживания для программистов в течение многих лет и что их можно избежать, если немного подумать.

Фактически, они, кажется, даже не осознают, что может быть более одного способа что-то сделать.

Я родом из мира Perl, где один из лозунгов гласит: «Есть более чем один способ сделать это». (TMTOWTDI) Люди, бегло взглянувшие на Perl, списали его на «только для записи» или «нечитаемый», в основном потому, что они просмотрели дрянной код, написанный людьми с мышлением, которое я описал выше. Эти люди не задумывались о дизайне, поддержке, организации, сокращении дублирования кода, связях, связности, инкапсуляции и т. д. Они пишут чушь. Эти люди умеют программировать на всех языках, и простые для изучения языки со множеством способов делать что-то дают им много веревки и оружия, чтобы стрелять и повеситься. Одновременно.

Но если вы задержитесь в мире Perl дольше, чем беглый взгляд, и понаблюдаете за тем, что делают давние участники сообщества, вы увидите замечательную вещь: хорошие программисты Perl тратят некоторое время на поиски способа Лучший, чтобы что-то сделать. . Когда они называют новый модуль, они спрашивают предложения и отсылают свои идеи от людей. Они раздают свой код, чтобы его посмотрели, раскритиковали и изменили. Если им нужно сделать что-то неприятное, они минимально инкапсулируют это в модуль для более организованного использования. Несколько реализаций одной и той же идеи могут остаться на некоторое время, но они конкурируют за долю ума и долю рынка, и они конкурируют, пытаясь выполнять свою работу наилучшим образом, и большая часть этого заключается в том, чтобы сделать себя легко обслуживаемыми. Действительно хорошие программисты Perl, кажется, рассказывают считатьжесткий о том, что они делают, и ищут лучший способ делать что-то, а не просто ухватываются за первую идею, которая проносится в их мозгу.

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

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

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

Variable_Names_With_Bloody_Underscores

или даже хуже

CAPITALIZED_VARIABLE_NAMES_WITH_BLOODY_UNDERSCORES

должны быть уничтожены во всем мире ... с предубеждениями! CamelCapsAreJustFine. (Без учета глобальных констант)

Заявления GOTO предназначены для разработчиков младше 11 лет.

Любой язык, не поддерживающий указатели, не достоин названия

.Net = .Bloat Лучший пример усилий Microsoft по разработке веб-сайтов (Expressionless Web 2) - лучший из когда-либо написанных примеров медленного раздутого cr @ pw @ re. (попробуйте вместо этого веб-студию)

Ответ: Хорошо, позвольте мне немного заняться проблемой Underscore. Из предоставленной вами ссылки C:

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

-Возьмем например NetworkABCKey. Обратите внимание, как перепутаны C из ABC и K из ключа. Некоторые люди не возражают против этого, а другие просто ненавидят это, поэтому вы найдете разные политики в разном коде, поэтому никогда не знаете, как что-то называть.

Я попадаю в первую категорию. Я ОЧЕНЬ тщательно выбираю имена, и если вы не можете сразу понять, что K принадлежит Key, то английский, вероятно, не ваш первый язык.

  • C Имена функций

    • В проекте C++ должно быть очень мало функций C.
    • Для функций C используйте соглашение GNU о всех строчных буквах с '_' в качестве разделителя слов.

Обоснование

* It makes C functions very different from any C++ related names. 

Пример

int some_bloody_function () { }

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

C был принят в качестве стандарта де-факто не потому, что он дружественен, а потому, что он широко распространен. Я могу написать 100 строк кода C за 20 с помощью синтаксически понятного языка высокого уровня.

Это облегчает чтение программы, и, как мы все знаем, пересмотр кода через год или более означает повсеместное следование цепочке навигации.

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

Есть ли оправдание вашей позиции?

Jay Bazuzi 03.01.2009 20:33

Итак, вы не видите значения в использовании стиля (camelCase vs CamelCase vs ALL_CAPS), чтобы указать, относится ли ссылка к классу, переменной, константе или чему-то еще? Я не могу согласиться. Похоже, вы могли не знать об идее соглашений об именах. например возможность.com/Cpp/CppCodingStandard.html#names

jwpfox 04.01.2009 14:44

Анализ требований, спецификация, дизайн и документация почти никогда не уместятся в «шаблоне». Вам в 100% случаев будет лучше, если вы начнете с пустого документа и начнете печатать, имея в виду: «Я объясню это таким образом, что если бы я был мертв, и кто-то другой прочитал бы этот документ, они бы знали все, что Я знаю, вижу и понимаю сейчас », а затем организовываю оттуда, позволяя заголовкам разделов и тому подобному развиваться естественным образом и соответствовать задаче, которую вы определяете, вместо того, чтобы быть ограниченным представлением какого-либо бизнеса или школы о том, как должен выглядеть ваш документ. Если вам нужно создать диаграмму, а не использовать чью-то формальную и непонятную систему, вам часто лучше просто нарисовать диаграмму, которая имеет смысл, с четкой легендой, которая на самом деле указывает систему, которую вы пытаетесь указать, и передает информацию. что разработчик на другом конце (часто вы, спустя несколько лет) должен получить.

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

Единственный раз, когда шаблоны для такого рода документов имеют смысл, - это когда у вас есть большое количество задач, которые очень похожи по своей природе, различаются только деталями. «Напишите программу, разрешающую одноразовый удаленный доступ для входа в систему через этот банк модемов, управляя связью терминального соединения с C-Kermit», «Создавайте исторический тренд и прогнозируемый отчет об использовании емкости», «Используйте эту библиотеку, чтобы предоставить всем отчетам возможность отправки по факсу »,« Исправить этот код для проблемы 2000 года »и« Добавить триггеры базы данных в эту таблицу, чтобы заполнить программный продукт, предоставленный нам сторонним поставщиком »- все нет можно описать одним и тем же шаблоном, что бы ни думали люди. И, к сведению, требования и методы построения диаграмм, которым мои одноклассники пытались научить меня и моих одноклассников, нельзя было использовать для определения простой калькуляционной программы (и все это знали).

Картинка нет стоит тысячи слов.

Некоторые картинки могут стоить тысячи слов. Большинство из них - нет. Этот банальный старый афоризм по большей части не соответствует действительности и является жалким оправданием для многих ленивых менеджеров, которые не хотели читать тщательно составленные отчеты и документацию, чтобы сказать: «Мне нужно, чтобы вы показали мне диаграмму».

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

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

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

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

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

AnthonyWJones 03.01.2009 16:46

Некоторые слова стоят тысячи картинок. (А как насчет звуков, музыки, запахов и т. д.?)

moala 12.08.2009 05:49

Да, но битовая карта размером 32 000 байт - это тысяча слов. По крайней мере, пока вы не перейдете на 64-битный процессор.

Kelly S. French 06.11.2009 20:10

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

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

Мои 5 центов

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

так что не критикуйте !!!!!!!!

Создайте свой собственный код, как хочет ТЫ.

В рабочем мире невозможно переписать код «так, как вы этого хотите», вы должны иметь дело с тем, что там есть, независимо от того, кто это написал. Остальная часть вашего поста непонятна.

jwpfox 04.01.2009 14:26

Я с вами категорически не согласен: мол, не изобретайте велосипед!

Luis Filipe 17.08.2009 18:22

Я полностью согласен, что это самое спорное утверждение.

nate c 25.11.2010 01:24

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

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

"сбои должны вывести систему из строя" - вы определенно не справляетесь с этим! Вся моя система должна умереть НИКОГДА из-за неисправности компонента один

warren 22.10.2009 09:12

Это нормально быть Морт

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

Я согласен с оговоркой (и я поворачиваюсь и смотрю в сторону нескольких команд в Редмонде, штат Вашингтон), что Морта часто несправедливо оценивают и не всегда хорошо понимают.

Gabriel 01.06.2009 23:10

Я с тобой, Уэйн, хотя, чтобы оставаться в индустрии, я думаю, нам всем время от времени нужно уходить от Элвиса и Эйнштейна. И нам нужно прилагать усилия и вне работы. Некоторое время я почивал на лаврах (женился, переехал, у меня были другие дела), и я вижу, как технологии выходят за рамки меня, и теперь я должен играть в догонялки. Технологии развиваются слишком быстро, чтобы не вкладывать лишних усилий. Я снова учусь и занимаюсь побочными проектами, и мне весело. Но меня возмущают люди, которые работают по 14 часов в день. Они расцветут куда-нибудь, а потом увянут. Равновесие - это ключ, но дни, когда мы будем исключительно Морт, сочтены.

infocyde 26.06.2009 01:36

Java - не самое лучшее. Просто потому, что на нем есть наклейка «Предприятие», еще не значит, что он хорош. И не делает это быстро. Это также не ответ на все вопросы.

Кроме того, ROR - это еще не все, как его взламывают в Blogsphere.

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

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

hasen 29.01.2009 14:28

Мнение: большая часть кода дрянная, потому что программисты ХОТЯТ, чтобы это было.

Косвенно мы взращивали культуру крайнего творчества. Дело не в том, что я не думаю, что в решении проблем есть творческие элементы - они есть - просто это даже отдаленно не то же самое, что что-то вроде рисования (см. Знаменитое эссе Пола Грэма «Хакеры и художники»).

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

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

Но грустная часть, спорная часть всего этого заключается в том, что нет абсолютно НИКАКОЙ причины, чтобы так было, кроме того, что исторически культура была направлена ​​на большую свободу и меньшую организацию, поэтому мы остались такими (и, вероятно, получили много худший). Разработка программного обеспечения - это шутка, но это шутка, потому что программисты хотят, чтобы это было так (но ни за что не признают, что это правда, «заговор со стороны руководства» - лучшая причина для большинства людей).

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

Павел.

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

dreftymac 04.01.2009 07:42

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

jwpfox 04.01.2009 14:31

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

Paul W Homer 04.01.2009 20:35

Престижность за указание на это. На самом деле небрежность и героизм в разработке программного обеспечения НЕ очевидны. Это результат культуры (разработки ПО) 60-х / 70-х годов.

Thorsten79 05.01.2009 15:39

«Если бы мы строили дома так, как будто строим программное обеспечение, первый дятел был бы концом человечества». - не знаю, кто это сказал, но он все равно прав;)

Aaron Digulla 02.03.2009 17:14

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

MaD70 06.11.2009 05:50

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

MaD70 06.11.2009 06:05

Умный программист опасен

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

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

David Rodríguez - dribeas 05.01.2009 16:55

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

Captain Sensible 26.01.2009 12:56

+1 Хорошие программисты знают свои ограничения - если это настолько умно, что вы можете понять это только когда пишете, ну, наверное, сейчас это неправильно, и вы никогда не поймете этого через 6 месяцев, когда это нужно будет изменить.

MarkJ 27.01.2009 14:51

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

Robert J. Walker 05.05.2009 22:53

Роберт, отличная цитата: Кстати, это от Брайана Кернигана, а не "неизвестно".

MarkJ 01.06.2009 22:28

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

У нас есть разработчики и (ужас) архитекторы, которые не могут связно писать. Когда их документы проверяют, они говорят что-то вроде «о, не беспокойтесь о грамматических или орфографических ошибках - это не важно». Затем они задаются вопросом, почему их запутанные мусорные документы становятся запутанным ошибочным кодом.

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

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

John D. Cook 11.01.2009 06:40

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

Captain Sensible 26.01.2009 13:08

Дело не только в грамматике и правописании. Можно написать что-то, что имеет правильную грамматику и орфографию, но почти невозможно понять другим (точно так же, как вы можете написать программу, которая компилируется и запускается, но при этом невозможно понять код). Очень важно уметь ясно выражать свои мысли в письменной форме. В течение последних шести лет я преподавал курс comp-sci, включающий написание проектной документации, и обнаружил, что очень немногие из моих студентов обладают этой способностью. И, кажется, с каждым годом становится все хуже.

Kris 31.05.2009 03:57

@John D Cook Плохая грамматика чаще всего мешает общению. Эти правила не были изобретены без причины (нужно проверить, нет ли грамматических ошибок в этих комментариях).

quant_dev 09.07.2009 04:08

«Если разработчик не может написать а четкий, лаконичный и грамматический комментарий s ...» Намеренная ирония?

user359040 25.06.2010 17:18

Не перестает меня удивлять, как часто я вставляю это: english.stackexchange.com

Barrie Reader 09.12.2010 17:37

Осознание того, что иногда достаточно хорошо, достаточно хорошо, это серьезный скачок в вашей ценности как программиста.

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

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

ИМХО-наверное около 60% и более

Это не спорно; это факт!

icelava 07.01.2009 16:31

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

Captain Sensible 26.01.2009 13:37

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

John MacIntyre 26.01.2009 21:11

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

Mike Dunlavey 08.03.2010 17:10

Мнение: Предупреждений компилятора быть не должно, только ошибки. Или иначе сформулировал Вы всегда должны компилировать свой код с помощью -Werror.

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

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

Bill K 09.01.2009 21:02

Это означало бы, что мне пришлось бы выбросить свой компилятор C#. У меня есть 2 (AFAIK, нефиксируемые) предупреждения о ссылках на среду (которые действительно установлены правильно), которые, похоже, ничего не ломают. Если только -Werror просто подавляет предупреждения и не превращает их в ошибки> _>

Dalin Seivewright 09.01.2009 23:53

Наконец, кто-то не согласен. В противном случае это не было бы спорным мнением, не так ли?

JesperE 10.01.2009 01:35

Разве ваш компилятор C# не позволяет отключать предупреждения? Если вы знаете, что они не исправимы и «безопасны», почему компилятор должен постоянно предупреждать? И да, -Werror превращает все предупреждения в ошибки.

JesperE 10.01.2009 01:37

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

Aaron Digulla 27.02.2009 19:00

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

nosatalian 31.05.2009 06:40

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

JesperE 31.05.2009 23:15

Большинство профессиональных программистов - отстой

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

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

4GL в целом имеют многословный и неоднозначный синтаксис. Хотя предполагается, что 4GL позволяет «нетехническим людям» писать программы, вам все равно нужны «технические» люди, чтобы писать и поддерживать их.

Программы 4GL в целом труднее писать, труднее читать и труднее оптимизировать.

По возможности следует избегать использования 4GL.

«нетехнические люди» никогда не хотят писать код, но некоторые люди никогда этого не поймут.

IAdapter 06.01.2009 03:03

"труднее оптимизировать, чем ..." что?

Mike Dunlavey 30.10.2009 18:01

Мнение интересное, но, может быть, и резкое.

Mike Dunlavey 30.10.2009 18:02

Все 4GL - отстой. Не большинство. 100%.

Warren P 01.04.2010 04:24

Не комментируйте свой код

Комментарии - это не код, и поэтому, когда что-то меняется, очень легко не изменять комментарий, объясняющий код. Вместо этого я предпочитаю рефакторинг кода до такой степени, что нет причин для комментариев. Пример:

if (data == null)  // First time on the page

к:

bool firstTimeOnPage = data == null;
if (firstTimeOnPage)

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

Widget.GetData(); // only way to grab data, TODO: extract interface or wrapper

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

dreftymac 04.01.2009 07:52

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

rball 06.01.2009 20:11

Ики. Не объявляйте переменную, если вы собираетесь использовать ее только один раз. Ваше предложение не намного лучше, чем "int i, this_is_a_counter;". Если вы вынуждены использовать дополнительный код Добавлять, чтобы избавиться от комментариев, вы усложнили задачу!

Brian 13.01.2009 01:21

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

James McMahon 13.01.2009 23:00

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

Captain Sensible 26.01.2009 13:05

Почему одноразовые переменные - это плохо? Они объясняют, что вы делаете, они ничего не стоят (если у вас есть наполовину приличный компилятор), и вы можете легко использовать их снова для того же самого. Без firstTimeOnPage я бы, скорее всего, поставил условие if (data == null) где-нибудь еще.

erikkallen 19.05.2009 13:59

-1: Комментарии хорошие. Комментарии - краеугольный камень кода. Я бы предпочел потратить 10 секунд на чтение однострочного комментария, чем потратить два часа, пытаясь понять, что делает действительно сложный код.

tsilb 17.10.2009 11:17

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

rball 19.10.2009 19:48

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

Thorbjørn Ravn Andersen 23.10.2009 22:15

@rball: Я согласен и не согласен, в зависимости от того, насколько декларативным или предметно-ориентированным является язык. У вас где-то есть функциональная спецификация, хотя бы в голове. Если язык достаточно декларативен, чтобы напрямую кодировать функциональную спецификацию, то в комментариях нет необходимости. Обычно это не так, поэтому цель комментариев IMO - выразить соответствие между реализацией и функциональной спецификацией в той степени, в которой сам код не может. Таким образом, когда спецификация меняется, как всегда, вы знаете, какой код изменить.

Mike Dunlavey 12.03.2010 20:38

Пишите абстракцию только в том случае, если позже она сэкономит в 3 раза больше времени.

Я иногда вижу, как люди пишут все эти сумасшедшие абстракции, и думаю: «Почему?»

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

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

JesperE 27.02.2009 23:01

Плохие программисты не зависят от языка

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

Да, вот почему это спорно :)

Christian C. Salvadó 05.01.2009 20:00

Мое неоднозначное мнение? Java не отстой, но API Java - отстой. Почему библиотеки Java настаивают на том, чтобы усложнять выполнение простых задач? И почему вместо исправления API они создают фреймворки, помогающие управлять стандартным кодом? Это мнение может относиться к любому языку, который требует 10 или более строк кода для чтения строки из файла.

Архитекторы, которые не пишут код, бесполезны.

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

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

Архитекторы, использующие код делать, хуже тех, кто этого не делает. т.е. их продуктивность отрицательная.

finnw 17.01.2009 19:46

Не используйте наследование, если не можете объяснить, зачем оно вам нужно.

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

David Rodríguez - dribeas 05.01.2009 19:35

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

theschmitzer 09.01.2009 18:47

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

fbonnet 15.01.2009 11:50

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

Wes P 29.01.2009 23:37

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

Ryan Lundy 16.05.2009 06:12

Или, как сказали Саттер и Александреску в C++ Coding Standards: наследуйте интерфейс, а не реализацию.

blwy10 15.10.2009 14:15

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

Oorang 11.12.2009 05:10

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

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

Конечно, если нет редактора, который предоставляет эту функциональность для вашего языка, или если задача достаточно проста, чтобы выбить время, необходимое для загрузки более тяжелого редактора, никто не скажет вам, что Eclipse и плагины 90 правильный инструмент. Но, пожалуйста, не говорите мне, что способность H-J-K-L по-своему, как в 1999 году, действительно экономит вам больше времени, чем нажатие на побег каждый раз, когда вам нужна сигнатура метода ... даже если вы чувствуете себя менее «хакером», делая это.

Мысли?

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

vincent 05.01.2009 04:08

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

Kendall Helmstetter Gelner 05.01.2009 08:40

@vincent: Вы никогда не используете массивные библиотеки (.NET Framework / Windows API и т. д.)?

erikkallen 05.01.2009 14:49

Раньше я использовал Django и RoR. Оба поощряют сплоченность и небольшие файлы. В то же время я помогаю новичку с VB.net, и я должен сказать, что VS впечатляет и, безусловно, влияет на сам стиль кода; но завершение кода должно быть палкой о двух концах. (Кстати, я затмение НЕНАВИДЕТЬ)

vincent 06.01.2009 01:18

VS имеет очень быстрое завершение @Kendall: это не мешает мне печатать. Половину времени я пишу Con.Wr [Down] (для Console.WriteLine (. Это на 10 нажатий клавиш меньше. @Vincent, я согласен, Eclipse необходимо улучшить автозавершение кода.

Jonathan C Dickinson 29.01.2009 12:34

Я работаю только с одним другим разработчиком над проектом с 240 тыс. Строк кода и почти тысячей файлов. Мы не могли жить без автозавершения кода.

Matthew Iselin 04.08.2009 03:47

Вам не нужна база данных всегда.

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

--
bmb

Верно, но Sqlite тоже очень портативен. Я не собираюсь начинать с плоских файлов, если есть изменения, их нужно переместить в Sqlite.

tuinstoel 04.01.2009 01:37

Есть и другие преимущества БД. Общий доступ по сети для программы клиент / сервер. Легкий доступ и манипулирование данными (хотя в этом помогают такие технологии, как LINQ).

Cameron MacFarland 04.01.2009 11:26

База данных дает тысячи преимуществ и причин, по которым они нам нужны чаще всего. Но не всегда.

bmb 04.01.2009 18:58

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

hasen 15.02.2009 22:42

Вы говорите, что проще сделать что-то неправильно с базой данных, чем правильно без нее?

bmb 16.02.2009 03:52

Я на 100% убежден, что разработчики чрезмерно используют базы данных. Костыль, который убивает.

Stu Thompson 30.03.2009 15:40

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

tuinstoel 25.09.2009 13:40

tuinstoel, не вините файлы XML в отсутствии или плохо спроектированном уровне доступа к данным.

bmb 25.09.2009 20:53

@bmb, Даже рефакторинг "просто" слоя доступа к данным может потребовать много работы. И это совершенно ненужная работа.

tuinstoel 26.09.2009 11:27

Пагинация никогда не бывает тем, чего хочет пользователь

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

[Обновлено: пояснение, основанное на комментариях]

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

Я бы предпочел один из следующих вариантов:

  1. Позвольте мне поискать ответы (способ сузить круг вопросов, которые мне нужны на основе реальных критериев).

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

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

--
bmb

Google делает нумерацию страниц, Google очень популярен.

tuinstoel 04.01.2009 01:31

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

bmb 04.01.2009 01:47

возможно, вам стоит привести конкретный пример того, что разбито на страницы, но этого не следует делать. например, как бы вы «сузили» ответы на этот вопрос?

hasen 04.01.2009 22:58

@bmb: Куда это помещает эту ветку? @tuinstoel: Я утверждаю, что никто никогда (т.е. около 0,1% всех просмотров страниц, вероятно, намного больше для поиска изображений) не использовал больше, чем первая страница результатов. Пагинация сделана правильно.

Konrad Rudolph 04.01.2009 23:37

@Konrad Rudolph, Один раз в два раза в год я ищу свое имя, я использую все результаты страницы (я не знаменит). Наверное, это единственный раз, когда я использую все страницы.

tuinstoel 04.01.2009 23:45

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

Travis 29.04.2009 00:54

@tuinstoel Google делает много чего, но не готовит рыбу. То, что Google выполняет разбиение на страницы, не влияет на его популярность. Пагинация - устаревшая модель книжных времен. Скоро он исчезнет в пользу ajax-подобных обновлений, например, используемых Google Reader.

Elzo Valugi 23.06.2009 13:01

Я очень, очень ненавижу 10 результатов по умолчанию от Google. Я увеличиваю его до 100 в каждом браузере, который использую. Я бы, наверное, поставил его на 1000, если бы был вариант (и он все еще был быстрым)

nos 14.07.2009 23:55

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

Kelly S. French 16.07.2009 19:14

В конце концов, разбиение на страницы не очень интересно. Что важнее, так это вопрос: подсчитываете ли вы все результаты поиска и показываете ли они точное количество, или вы просто предоставляете оценку? Google показывает только приблизительную оценку, показав, что только приблизительная оценка дает большие преимущества в производительности. Ajax как обновления не меняет этого.

tuinstoel 05.08.2009 22:19

«Кому вы помогаете, отдавая по 20 за раз? Сервер? Это важнее, чем ваш пользователь?» Если только 1% пользователей действительно нуждаются в этой функции, то сервер и, следовательно, остальные 99% пользователей.

Brian Ortiz 09.10.2009 02:38

Ortzinator, я бы согласился с вами, если бы я думал, что это действительно 99%. Но так как мой (спорно) утверждение состоит в том, что разбиение на страницы «никогда», что пользователь хочет, то я думаю, что помогает сервер никому не помогает. Однако пользователям, которым не нужны все результаты, не обязательно их получать. Тогда все будут счастливы.

bmb 10.10.2009 01:18

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

Larry Lustig 14.10.2009 22:15

Так что насчет наборов результатов, которые имеют тысячи или миллионы результатов? Что, если их всего несколько сотен, но на каждой есть множество деталей? Возврат более 100 КБ нарушает лучшие практики Интернета, и такие наборы результатов могут привести к загрузке сервера огромный.

tsilb 17.10.2009 10:38

tsilb, а затем «позволить пользователю сузить круг вопросов, которые им нужны, исходя из реальных критериев». Дело здесь не в том, что подмножества всегда плохи, а в том, что разбиение на страницы - это не метод подмножества, который кому-то помогает. И огромные серверные нагрузки? Бу-у-у. Вы создали свое приложение, чтобы сделать сервер счастливым? Или ваши пользователи?

bmb 17.10.2009 19:04

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

Thorbjørn Ravn Andersen 23.10.2009 21:54

Thorbjørn Ravn Andersen, это немного помогает, но все равно будет утомительно, если вы захотите использовать функцию поиска в браузере.

bmb 24.10.2009 02:01

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

Ключевое понятие - «в здравом уме». Я бы стеснялся этой идеи, если бы она была запущена для Grand Poo-Bah, но я понимаю, что Линус Торвальдс горячо с ней согласен :-)

Mike Dunlavey 30.10.2009 18:07

Используйте вывод типов везде и везде, где это возможно.

Редактировать:

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

http://blogs.msdn.com/jaredpar/archive/2008/09/09/when-to-use-type-inference.aspx

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

Jon Skeet 04.01.2009 03:45

@Jon, добавил ссылку в блоге на причины, по которым я так себя чувствую.

JaredPar 04.01.2009 03:57

Джаред, ваше сообщение в блоге посвящено объявлению локальной переменной с помощью var, но ваш заголовок гораздо более общий. Просьба уточнить.

Jay Bazuzi 04.01.2009 23:31

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

JaredPar 05.01.2009 23:41

C++ - хороший язык

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

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

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

В C++ есть много возможностей, которых я отчаянно скучаю при программировании на C# или других «современных» языках. В нем есть чему поучиться C# и другим современным языкам.

Он не слепо сосредоточен на ООП, а вместо этого исследовал и впервые применил универсальное программирование. Он позволяет удивительно выразительно метапрограммировать во время компиляции, создавая чрезвычайно эффективный и надежный чистый код а также. Практически за десять лет до того, как C# получил LINQ или лямбда-выражения, потребовались уроки функционального программирования.

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

Детерминированное уничтожение переменных позволяет использовать RAII, чрезвычайно мощный небольшой трюк, который делает блоки try / finally и блоки using в C# избыточными.

И хотя некоторые люди обвиняют его в том, что это «дизайн комитетом», я бы сказал, что да, и это на самом деле неплохо в данном случае. Посмотрите библиотеку классов Java. Сколько классов снова устарело? Сколько не следует использовать? Сколько дублируют функциональность друг друга? Сколько из них плохо спроектировано?

Стандартная библиотека C++ намного меньше, но в целом она на удивление хорошо спроектирована, и, за исключением одной или двух мелких бородавок (например, vector<bool>), ее дизайн все еще очень хорош. Когда функция добавляется в C++ или его стандартную библиотеку, она подвергается тщательной проверке. Разве Java не могла извлечь из этого пользу? .NET тоже, хотя он моложе и был несколько лучше спроектирован с самого начала, по-прежнему накапливает хорошую горстку классов, которые не синхронизированы с реальностью или были плохо спроектированы с самого начала.

У C++ много сильных сторон, с которыми не может сравниться ни один другой язык. Это хороший язык

правда дат. Моя главная проблема заключается в том, что каждая сторонняя библиотека имеет свой собственный строковый класс. Я трачу слишком много времени на преобразование CString в std :: string в WxString в char *. Не каждый может просто использовать std :: string или const char *.

Doug T. 14.01.2009 17:43

Неправда. «У C++ много сильных сторон, с которыми не может сравниться ни один другой язык. Это хороший язык». У КАЖДОГО языка есть сильные стороны, которым язык больше не может соответствовать (даже LOLCODE, это очень весело).

Jonathan C Dickinson 29.01.2009 12:36

Возможно. Но сильные стороны C++ полезны немного чаще. Сообщите мне, когда выбранный вами язык поддерживает метапрограммирование во время компиляции или RAII.

jalf 29.01.2009 15:01

Степень в области компьютерных наук или другой области ИТ делает вас более разносторонним программистом.

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

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

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

Я не удивлюсь, если этот ответ будет отклонен.

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

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

"степень в области компьютерных наук или другой области ИТ ДЕЙСТВИТЕЛЬНО делает вас более разносторонним" ... "понимаете, что все это не имеет значения в конце, если вы можете хорошо работать вместе" <- звучит немного непоследовательно -противоречиво.

dreftymac 04.01.2009 07:48

Это относится к тому факту, что у другого парня есть ученая степень. Странно, но получив квалификацию, можно перестать сравнивать себя с другими.

Maltrap 04.01.2009 13:41

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

jwpfox 04.01.2009 14:35

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

Kendall Helmstetter Gelner 05.01.2009 08:41

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

agnieszka 05.01.2009 15:42

Диплом в ЛЮБОЙ области (кроме, может быть, постмодернистской литературной критики) делает вас более разносторонним программистом, особенно если это математика, естественные науки или инженерия. Степени в области компьютерных наук и ИТ, как правило, имеют невероятно узкую область применения и фокус.

MusiGenesis 13.01.2009 20:18

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

Steven Evers 24.01.2009 01:20

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

Lucas Lindström 06.05.2009 01:11

«То, что у вас есть, он может уловить в одно мгновение» - Не обязательно. Способность писать хороший код обычно приходит с опытом, хотя некоторые люди быстро усваивают его, а некоторые никогда не достигают этого. Парень со степенью CS наверняка сможет мгновенно подобрать языки и API, которые вы используете, но нет никакой гарантии, что он когда-нибудь станет хорошим программистом. И он определенно не станет одним из них в одночасье, если он им не станет сейчас.

Mark Baker 17.08.2009 16:41

Я узнал гораздо больше из библиотеки моего колледжа, чем на самих уроках.

gradbot 13.10.2009 21:13

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

Random 20.05.2010 19:35

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

ravibhagw 08.06.2010 23:53

Новые веб-проекты не должны использовать Java.

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

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

Вы имели в виду «Новые веб-проекты, которые стоит рассмотреть нет»?

dreftymac 04.01.2009 07:46

Мне это не кажется спорным.

finnw 17.01.2009 21:09

УХ ТЫ! Некоторые люди в этой ветке действительно имеют экстремистские взгляды! ;-)

Captain Sensible 26.01.2009 13:44

Это абсолютно не противоречива. Возможно, вы хотите сказать Новые веб-проекты не следует рассматривают возможность использования Java

flybywire 10.11.2009 15:24

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

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

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

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

И поэтому бозо-бит для некоторых нужно перевернуть :-D

icelava 07.01.2009 16:32

Постоянно тестируйте

Вы должны написать тесты, и вы должны написать их ПЕРВЫМ. Написание тестов меняет способ написания кода. Это заставляет вас задуматься о том, что вы хотите от него на самом деле, прежде чем вы просто начнете писать что-то, что делает все, кроме того, что вы хотите.

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

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

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

OMG, как кто-то проголосовал против этого. Удивительно, я бы + 1000, если бы мог

user34537 04.01.2009 10:54

Иногда наблюдение за тем, как весь ваш тест становится зеленым, дает вам ЛОЖНУЮ уверенность, в то время как ваш код не работает там, где ваш тест не ожидал.

Cameron MacFarland 04.01.2009 11:29

@ acidzombie24, вы должны голосовать за него, если считаете его спорным, а не тогда, когда вы с ним согласны.

tuinstoel 04.01.2009 14:45

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

PJ Davis 06.01.2009 03:26

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

pero 06.01.2009 22:03

Вы набираете "оскорбительные" голоса ... предлагаю удалить ненормативную лексику.

Marc Gravell 15.05.2009 17:59

Ваша задача - лишить себя работы.

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

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

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

Один, который я мечтал некоторое время:

Данные - это система.

Процессы и программное обеспечение созданы для данных, а не наоборот.

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

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

Успешное программное обеспечение / системы / процессы, кажется, обладают острым, если не фанатичным, вниманием к тому, «где» находятся данные в любой данный момент.

Эй, мне это очень нравится! Спасибо, что поделился.

Jas Panesar 12.01.2009 16:08

Это интересная идея, но я думаю, это зависит от того, какую программу вы пишете. Человек пяти миров. joelonsoftware.com/articles/FiveWorlds.html

MarkJ 27.01.2009 14:52

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

mrdenny 04.02.2009 04:43

Система также, кажется, сбивается с пути, если данные отсутствуют.

Jas Panesar 04.02.2009 18:55

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

Aaron Digulla 27.02.2009 12:28

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

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

jwpfox 05.01.2009 06:48

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

Eric Mills 07.01.2009 18:11

+1. Почему отрицательные голоса? Может быть, выполнение такой работы, которая требует такого уровня проверки, лишает возможности увидеть, что существует более одного вида среды программирования? Нет менеджера, на которого можно было бы положиться, когда ваши алгоритмы интерпретатора мировоззрения ненадежны.

jTresidder 08.01.2009 00:43

Я мог сосчитать по пальцам, сколько программистов, которым я доверял бы в такой среде - слишком много ковбоев.

Evan 08.01.2009 10:48

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

Captain Sensible 26.01.2009 13:52

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

Stu Thompson 28.04.2009 23:59

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

Luis Filipe 17.08.2009 18:25

Я бы даже не хотел находиться в такой среде. На секунду забывая о доверии или суждениях, в любом проекте с более чем одним разработчиком вы столкнетесь с проблемами параллелизма. Мы оба хорошо кодировали, но наши обновления противоречили. . . в производстве. И вы действительно думаете, что QA перед выпуском бесполезны? У любого важного или значительного проекта есть причины. Некоторые неважные, незначительные проекты с 1 или 2 разработчиками и знающей базой пользователей (например, некоторые игры) могут практиковать и практикуют это, но это исключения, а не правило.

Ethel Evans 22.12.2010 04:12

Код без комментариев - это проклятие человечества.

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

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

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

Jay Bazuzi 05.01.2009 18:44

Если вы не можете понять код БЕЗ комментариев, вы также не можете понять его с помощью.

Aaron Digulla 02.03.2009 17:14

Проголосовали вверх, потому что это, безусловно, является спорным; Я не согласен с вами :-) Я на стороне, которая говорит: «Не комментируйте плохой код, переписывайте его, чтобы он был понятен». Если ваше оправдание для комментариев состоит в том, чтобы визуально разбить код, это гораздо лучше сделать с помощью отдельных хорошо названных функций с пробелами между ними.

bignose 14.04.2009 08:15

Жесткое кодирование - это хорошо!

Действительно, более эффективно и во многих случаях проще в обслуживании!

Сколько раз я видел константы, помещенные в файлы параметров, на самом деле, как часто вы меняете точку замерзания воды или скорость света?

Для программ на C просто закодируйте эти типы значений в заголовочный файл, для java - в статический класс и т. д.

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

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

Q - «как часто будет меняться точка замерзания воды» A - Каждый раз, когда вы меняете высоту (атмосферное давление), плотность соли или ... (предположения начинаются с этих трех букв по причинам)

jwpfox 06.01.2009 09:17

скорость света зависит от среды, через которую он проходит

Ferruccio 07.01.2009 10:46

Предположение, что константа не изменится (как в этом посте, обозначено ответами), ИМЕННО проблема и причина, по которой вы никогда не должны жестко кодировать.

Bill K 09.01.2009 21:01

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

Утверждения - это плохо? Или вы просто не доверяете одному человеку делать согласования? Я бы сказал, что «один человек ничего не может одобрить». Значимое одобрение означает, что каждый должен иметь возможность играть черным мячом, и одобрение должно осуществляться на основе консенсуса заинтересованных сторон. Тогда все виноваты, когда он терпит неудачу, а он все равно будет. :-) Как это для пробивного?

Warren P 01.04.2010 04:15

Самое худшее в рекурсии - это рекурсия.

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

Chad 24.05.2009 09:43

Рекурсия, n. См. Рекурсию.

David Thornley 14.10.2009 01:39

Если вы так думаете, вам следует проверить это.

Craig McQueen 21.12.2010 14:37

Шаблоны проектирования - это проявление дизайна на языке программирования каменного века.

У них есть цель. С их помощью создается много хорошего программного обеспечения. Но тот факт, что возникла необходимость систематизировать эти «рецепты» психологических абстракций о том, как работает / должен работать ваш код, говорит о нехватке языков программирования, достаточно выразительных, чтобы справиться с этой абстракцией за нас.

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

Я согласен с вашим общим мнением. Попробуйте рассматривать их как временные наблюдения. См., Например, blog.plover.com/prog/design-patterns.html.

JB. 07.01.2009 16:24

Для хорошего программиста язык - не проблема.

Это может быть не очень controvertial, но я слышал много о ныть от других программистов, как «почему не все они используют Дельфи?», «C# отстой», «я изменяю бы компании, если они заставили меня использовать Java» и т.д. .
Я считаю, что хороший программист гибок и может писать хорошие программы на любом языке программирования, который ему, возможно, придется выучить в своей жизни.

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

Jon Skeet 06.01.2009 11:55

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

agnieszka 07.01.2009 15:19

Полностью согласен. Я ненавижу те религиозные языковые войны: /

driAn 07.01.2009 17:31

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

Cameron MacFarland 08.01.2009 07:35

Я могу согласиться с этим. Настоящая правда в том, что для каждой работы есть свой инструмент. Иногда этим инструментом может быть Perl. Иногда это может быть vbScript, иногда Java, иногда C#, а иногда даже C++ ... Хороший разработчик знает, КАКОЙ инструмент подходит для работы.

LarryF 15.01.2009 02:57

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

Aaron Digulla 27.02.2009 17:55

«Хороший плотник может рубить дерево молотком ...» (я уверен: плотники гораздо более осведомлены, чем программисты.)

MaD70 06.11.2009 03:13

Персоналу, не занимающемуся разработкой, нельзя разрешать управлять персоналом, занимающимся разработкой.

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

Лучше персонал, не занимающийся разработкой, с управленческими навыками, чем персонал разработчиков без управленческих навыков.

tuinstoel 05.01.2009 18:44

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

finnw 17.01.2009 21:10

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

Chris 22.01.2009 20:24

Сравнения на уровне C слабые. Более реалистичным было бы: «Вы бы наняли неподготовленного механика для управления механикой?» Ну да. Я не говорю, что люди, не являющиеся разработчиками, лучше управляют разработчиками или что возможности управления и развития взаимоисключают, а скорее способность управлять сотрудником значительно важнее способности выполнять работу сотрудника.

Stu Thompson 29.04.2009 00:25

VB отстой
Хотя в целом это не вызывает особых споров, когда вы работаете в VB-доме, это

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

ChrisA 07.01.2009 17:15

... хотя многие программисты VB - отстой. Как и многие программисты на C#.

ChrisA 07.01.2009 17:16

VB не отстой. Люди, которые используют VB, такие как VBA, отстой.

Chris 08.01.2009 06:30

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

P Daddy 09.01.2009 16:57

Отстой не язык, а множество программистов, которые (раньше) программировали на VB.

Captain Sensible 26.01.2009 13:39

Созданная документация почти всегда бесполезна.

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

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

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

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

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

Во всяком случае, я так это вижу.

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

Zooba 14.01.2009 05:38

Мне нравится не только JavaDoc. Я люблю это.

Captain Sensible 26.01.2009 13:42

Методы расширения - дело рук дьявола

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

Основными причинами их расширяемости являются повышенная читаемость, улучшенная объектно-ориентированность и способность лучше связывать вызовы методов.

Боюсь, я должен отличаться, я на самом деле считаю, что они однозначно снижают удобочитаемость и объектно-ориентированность в силу того факта, что они по своей сути являются ложью. Если вам нужен служебный метод, который действует на объект, напишите служебный метод, который действует на этот объект, не лгите мне. Когда я вижу aString.SortMeBackwardsUsingKlingonSortOrder, тогда строка должна иметь этот метод, потому что он говорит мне что-то о строковом объекте, а не о классе AnnoyingNerdReferences.StringUtilities.

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

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

Я все еще не определился, но, похоже, у методов расширения есть настоящее практическое применение.

Captain Sensible 26.01.2009 18:22

Не беспокойтесь слишком много о том, какой язык изучать, используйте тяжеловесы отрасли, такие как C# или Python. Такие языки, как Ruby, доставляют удовольствие в спальне, но не подходят для работы на корточках. Такие языки, как C# и Java, могут обрабатывать как небольшие, так и очень большие программные проекты. Если кто-то говорит обратное, то вы говорите о скриптовом языке. Период!

Перед тем, как начать проект, подумайте, сколько поддержки и примеров кода доступно в сети. Опять же, выбор такого языка, как Ruby, который имеет очень мало примеров кода в Интернете по сравнению, например, с Java, вызовет у вас горе только тогда, когда вы столкнетесь с проблемой.

Вы не можете опубликовать сообщение на форуме и ожидать ответа, пока начальник спрашивает вас, как у вас дела с кодированием. Что ты скажешь? «Я жду, что кто-нибудь поможет мне на этом форуме»

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

Овладейте одним или будьте в порядке с жребием.

Этот в основном связан с сетью, но ...

Используйте таблицы для макетов веб-страниц

Если бы я разрабатывал гигантский сайт, которому нужно было снизить производительность, я мог бы подумать об этом, но ничто не дает мне более простого способа получить единообразный вид в браузере, чем таблицы. Большинство приложений, которые я разрабатываю, рассчитаны примерно на 100–1000 пользователей и максимально 100 одновременно. Дополнительное раздувание таблиц никоим образом не убивает мой сервер.

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

Ólafur Waage 07.01.2009 14:13

И вы думаете, что это делают div и css? Я не.

rball 07.01.2009 23:53

Я всегда стараюсь создать макет, избегающий таблиц, и всегда терплю неудачу. Макеты на основе Div просто не обладают гибкостью таблицы. +1

Marcus Downing 09.01.2009 07:15

Маркус: Ты шутишь? Используйте таблицы для того, для чего они предназначены - табличные данные.

Tom 04.04.2009 16:47

Я начинаю верить в использование CSS-фреймворков, таких как blueprint и 960. Они, кажется, дают мне единообразие, а также упрощают создание макета. Кажется, это удовлетворяет мои потребности, так что я в восторге.

rball 11.01.2010 21:48

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

А что насчет теоремы Гёделя о полноте?

Vlad Gudim 07.01.2009 17:01

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

too much php 08.01.2009 00:27

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

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

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

Бывают времена и места, когда это полезно.

кодирование не печатает

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

Если вы долго стучите по клавиатуре, значит, что-то не так.

Следствие: количество строк кода, написанных за день, не является линейным измерением производительности программиста, поскольку программист, который пишет 100 строк в день, скорее всего, лучший программист, чем тот, который пишет 20, но тот, кто пишет 5000, безусловно, является лучшим программистом. Программист Плохо

Очень с этим согласен. Вы видели ту недавнюю ветку, в которой казалось, что если вы не умеете печатать касанием со скоростью 80wpm, вы не настоящий программист? Полная чушь, хотя людям, кажется, нравится такая «продуктивность», основанная на тестостероне.

ChrisA 07.01.2009 20:53

@ChrisA: Я действительно прочитал эту ветку и вернулся, чтобы написать этот ответ. Во время кодирования я люблю расставлять точки над i и, так сказать, перечеркивать мои t.

Miserable Variable 08.01.2009 09:05

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

Sylverdrag 08.06.2010 09:46

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

Обычно «требования» предъявляют просто несколько менеджеров.

Слово 'зло' - это слово, которым злоупотребляют и злоупотребляют на Stackoverflow и других форумах.

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

Я думаю, что это злое мнение злого человека, стремящегося творить зло.

Captain Sensible 26.01.2009 13:43

Другими словами: «зло» есть зло.

Daniel Daranas 21.12.2009 20:31

«У людей, которые его используют, слишком мало воображения». ..и злы. :)

mlvljr 02.04.2010 13:11

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

Я происхожу из общей культуры, в которой разработчики владеют «всем, от веб-страницы до хранимой процедуры». Таким образом, чтобы реализовать функцию в системе / приложении, они должны подготовить схемы таблиц базы данных, записать сохраненные процедуры, сопоставить код доступа к данным, реализовать бизнес-логику и методы веб-службы, а также интерфейсы веб-страниц.

И угадай что? У всех свои собственный способ делать вещи! Каждый борьба должен изучить ASP.NET AJAX и Telerik или Infragistic suites, Enterprise Library или другие платформы для повышения производительности и уровня данных и персистентности, Aspect-ориентированные платформы, журналирование и кэширование блоков приложений, особенности DB2 или Oracle. И угадай что? Все используют чертовски долго, чтобы научиться делать все правильно! А это значит, что за это время будет совершено множество ошибок, а в результате - множество дефектов и узких мест в производительности! И чертовски больше времени, чтобы их исправить! На каждом уровне! Каждый участвует в каждом проекте Visual Studio. Никто не специализируется на решении и оптимизации одной проблемы / области технологии. Слишком много поваров портят суп. Все повара приводят к радиоактивной слизи.

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

XHTML - это зло. Написать HTML

В любом случае вам придется установить тип MIME на text / html, так зачем обманывать себя, полагая, что вы действительно пишете XML? Кто бы ни загрузил вашу страницу, он поверит, что это HTML, поэтому сделайте это HTML.

И при этом не стесняйтесь и не закрывайте свой <li>, в этом нет необходимости. Не закрывайте тег html, файл все равно закончился. Это действительный HTML, и его можно отлично проанализировать.

Это создаст более читаемый, менее шаблонный код, и вы ничего не потеряете. Парсеры HTML работают хорошо!

А когда закончите, переходите к HTML5. Это лучше.

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

Matthew Crumley 08.01.2009 01:27

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

Konrad Rudolph 08.01.2009 23:27

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

Dalin Seivewright 09.01.2009 23:47

Реляционные базы данных - пустая трата времени. Вместо этого используйте объектные базы данных!

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

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

Что еще более важно, вам категорически запрещается придумывать интеллектуальные алгоритмы поиска, потому что каждый проклятый обход базы данных обходится вам примерно в 11 мс. Это слишком много. Представьте, что вы знаете этот алгоритм суперграфа, который в свое время ответит на конкретный вопрос, который может даже не быть выражен в SQL!. Но даже если ваш алгоритм линейен, а интересные алгоритмы не линейны, забудьте о его объединении с реляционной базой данных, так как перечисление большой таблицы займет у вас часы!

Сравните это с SandstoneDb или Gemstone для Smalltalk! Если вы занимаетесь Java, попробуйте db4o.

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

Ничего себе, что это спорно! Удивлен, что другие администраторы баз данных вас не возмутили;)

Meff 11.01.2009 23:36

Даже важнее, чем производительность: разработка с oo-базами данных происходит намного быстрее!

wilth 07.04.2009 12:02

«Неквалифицированный и неосведомленный об этом: как трудности в признании собственной некомпетентности приводят к завышенным самооценкам», Джастин Крюгер и Дэвид Даннинг, Корнельский университет, Журнал личности и социальной психологии, 1999, Vol. 77, № 6., 121–1134. К счастью, это излечимо (я свидетельство): «… Как это ни парадоксально, улучшение навыков участников и, таким образом, повышение их метакогнитивной компетентности помогло им осознать ограниченность своих способностей».

MaD70 06.11.2009 04:42

Код является дизайн

Отладчики - это костыль.

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

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

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

Перед тем, как нажать «Опубликовать ответ», я быстро проверил в Google эту точную фразу. Оказалось, что я не единственный, кто придерживался этого мнения или использовал эту фразу. Я обратился к долгое обсуждение этого самого вопроса на форуме программного обеспечения Fog Creek, который цитировал различных светил, включая Линуса Торвальдса, как известных сторонников.

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

Artelius 16.01.2010 10:41

-1 Нет ничего плохого в том, чтобы использовать костыль, когда у вас сломана нога - почему должно быть что-то плохое в использовании костыля, когда ваш код сломан?

Kramii 08.04.2010 15:18

Hibernate бесполезен и опасен для разработчиков.

Мое противоречивое мнение по этому поводу: Есть больше разработчиков, которые не понимают Hibernate, чем тех, кто понимает.

Stefan Steinegger 16.11.2009 19:32

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

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

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

Дать согласие. Новые кроссовки не заставят бегуна бегать быстрее.

Captain Sensible 26.01.2009 13:09

Слишком много программистов пишут слишком много кода.

Уолли (от Дилберта) должен быть примером для всех нас! ;-)

Captain Sensible 26.01.2009 18:36

Этот не совсем о программировании, потому что html / css не являются языками программирования.

Таблицы подходят для макета

css и div не могут делать все, избавьтесь от хлопот и используйте простую таблицу, а затем используйте css поверх нее.

Раньше я так думал, пока не углубился в CSS, чтобы посмотреть, смогу ли я доказать свою неправоту. Я это сделал, и он помог мне найти работу, которая требовала макетов без таблиц из соображений доступности. У вас есть примеры того, что вы не можете делать?

JamesEggers 10.01.2009 02:06

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

hasen 10.01.2009 15:10

проголосовали за, потому что я не могу решить, согласиться или не согласиться; действительно спорный

iandisme 09.12.2009 23:36

90 процентов программистов - чертовски плохие программисты, и практически у всех из нас нет абсолютно никаких инструментов для оценки нашего текущего уровня способностей (хотя в целом мы можем оглянуться назад и понять, насколько плохо мы ИСПОЛЬЗОВАЛИ, чтобы отстать)

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

А) не в этом ли вопрос, и

Б) Большинство «Ответов» в этой теме подтверждают эту точку зрения.

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

en.wikipedia.org/wiki/Sturgeon's_law относится ко всему, даже программистам.
Cameron MacFarland 14.01.2009 02:18

Я согласен, к сожалению, почти 90% плохих программистов думают, что они попадают в категорию 10% программистов, которые не отстой.

Captain Sensible 26.01.2009 13:25

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

Bill K 26.01.2009 20:18

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

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

Похоже, это идет вразрез с хорошей корпоративной практикой с тупыми объектами сущностей и более толстым слоем сервисов (который требует много вопросов). Хммм, мысли?

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

paxos1977 14.01.2009 06:27

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

Hassan Syed 11.04.2010 07:05

Мы разработчики программного обеспечения, а не разработчики C / C# / C++ / PHP / Perl / Python / Java / ....

После того, как вы познакомились с несколькими языками, выбрать новый и поработать на нем продуктивно - небольшая задача. То есть не надо бояться новых языков. Конечно, есть большая разница между продуктивностью и владением языком. Но это не повод уклоняться от языка, которого вы никогда не видели. Меня беспокоит, когда люди говорят: «Я разработчик PHP». или когда в предложении о работе написано «Java-разработчик». После нескольких лет опыта работы в качестве разработчика новые языки и API-интерфейсы действительно не должны пугать, и переход от того, чтобы никогда не видеть язык, к продуктивной работе с ним, не займет много времени. Я знаю, что это спорно, но это мое мнение.

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

paxos1977 14.01.2009 06:23

Тем не менее, хаки цепляются за свой язык, как дедушка за зачесывание.

paxos1977 14.01.2009 06:24

Тот, кто называет себя Java-разработчиком (замените его языком по выбору), означает, что он / она является экспертом в «платформе», а не только в языке. Но было бы глупо говорить, что я программист на "платформе Java". Язык - это лишь небольшая часть платформы.

Captain Sensible 26.01.2009 13:56

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

MaD70 06.11.2009 04:28

Два мозга думают лучше, чем один

Я твердо верю, что парное программирование является фактором номер один, когда дело доходит до повышения качества кода и производительности программирования. К сожалению, это также вызывает споры у руководства, которое считает, что «больше рук => больше кода => $$$!»

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

paxos1977 14.01.2009 06:18

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

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

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

Вы просто не можете отлаживать нетривиальное веб-приложение с помощью операторов печати. Раз в десять, если вы не исправили весь код в своем приложении.

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

Вы не можете разрабатывать веб-приложения без Firebug

Точно так же, как только вы использовали Firebug (или очень близкий к нему аналог), вы смотрите на любого, кто пытается разработать веб-приложения, со смесью жалости и ужаса. В частности, с Firebug, показывающим вычисленные стили, если вы помните, что НЕ использовали его и часами беспорядочно меняли различные биты CSS и добавляли "! Important" в слишком многих местах, чтобы было смешно, вы получите никогда не возвращайся.

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

Click Upvote 09.01.2009 21:03

точно - и до того, как вы использовали firebug, держу пари, вы тоже не понимали, что он вам нужен :) серьезно, попробуйте, а затем скажите, что

reefnet_alex 10.01.2009 00:06

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

Aaron Digulla 03.03.2009 17:59

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

reefnet_alex 12.03.2009 16:02

2) live server! = Dev machine: есть некоторые ошибки, которые вы увидите только на своем живом (или точной копии вашего живого) сервера

reefnet_alex 12.03.2009 16:04

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

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

Предварительный дизайн - не начинайте писать код просто потому, что вам интересно писать код

Я видел ТАКОЕ много приложений, которые плохо спроектированы, потому что разработчик был так взволнован, чтобы получить код, что они просто открыли белую страницу и начали писать код. Я понимаю, что в течение жизненного цикла разработки все меняется. Однако сложно работать с приложениями, которые имеют несколько разных макетов и методологий разработки от формы к форме, от метода к методу.

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

Избегайте вмятин.

Используйте ранние возвраты, продолжения или перерывы.

вместо:

if (passed != NULL)
{
   for(x in list)
   {
      if (peter)
      {
          print "peter";
          more code.
          ..
          ..
      }
      else
      {
          print "no peter?!"
      }
   }
}

делать:

if (pPassed==NULL)
    return false;

for(x in list)
{
   if (!peter)
   {
       print "no peter?!"
       continue;
   }

   print "peter";
   more code.
   ..
   ..
}

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

P Daddy 10.01.2009 02:19

Не любите ли мы «код канверна»? :) Однако я должен согласиться. На самом деле я работал над «кодом пещеры», а не над ВСЕЙ СТРАНИЦЕЙ, состоящей только из закрывающих фигурных скобок .... И это было на мониторе 1920x1600 (или как там точное разрешение).

LarryF 14.01.2009 03:36

Вы должны проверить «Спартанское программирование» - это похоже на похожий стиль.

Keith 09.03.2009 13:45

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

Kris 31.05.2009 03:48

Не забывайте скобки для «если»! используйте foreach! используйте (условие? valueIfTrue: valueIfFalse) Если вы не понимаете, поисковая система, учиться!

moala 12.08.2009 05:45

Мне не нравится продолжение здесь.

Loren Pechtel 18.10.2009 08:30

Это обман старшего ответа stackoverflow.com/questions/406760/…

Ether 08.11.2009 23:12

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

Никого не волнует, проверяет ли ваш веб-сайт, является ли он строгим XHTML, соответствует ли он стандартам или имеет значок W3C.

Это может принести вам несколько одобрений от других веб-разработчиков, но остальные люди, просматривающие ваш сайт, могут наплевать, проверили вы свой код или нет. Подавляющее большинство пользователей Интернета используют IE или Firefox, и поскольку оба этих браузера прощают нестандартный, нестрогий, недействительный HTML, вам действительно не нужно об этом беспокоиться. Если вы создали сайт для автомобильного дилера, механика, радиостанции, церкви или местного малого бизнеса, сколько людей в любой из целевых демографических групп этих предприятий, по вашему мнению, заботятся о правильном HTML? Рискну предположить, что это довольно близко к 0.

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

Позвольте мне установить этот замечательный кусок OSS, который я нашел. Похоже, он должен делать именно то, что я хочу! Ой, подождите, сначала мне нужно установить этот другой оконный менеджер. ОК. Затем мне нужно получить этот инструмент командной строки и добавить его в свой путь. Теперь мне нужны самые свежие среды выполнения для X, Y и Z. Теперь мне нужно убедиться, что у меня запущены эти процессы. хорошо, отлично ... все настроено. Теперь позвольте мне изучить совершенно новый набор команд для его использования. Круто, кто-то создал для него графический интерфейс. Думаю, мне не нужно учить эти команды. Подождите, мне нужна эта библиотека, чтобы заставить работать графический интерфейс. Надо скачать это сейчас. хорошо, теперь он работает ... черт, я не могу понять этот ужасный интерфейс.

звучит знакомо? OSS изобилует сложностями ради усложнения, сложными установками, для выполнения которых нужно быть экспертом, и инструментами, с которыми большинство людей все равно не знает, что делать. Так много проектов уходят на второй план, другие настолько нишевые, что очень немногие люди будут их использовать, а некоторые из достойных (FlowPlayer, OSCommerce и т. д.) Имеют настолько смехотворно чрезмерно сложный и раздутый исходный код, что это лишает возможности редактировать источник. Вы можете отредактировать исходный код ... если сможете выяснить, какой из 400 файлов содержит код, который требует модификации. У вас действительно проблемы, когда вы узнаете, что их все 400.

Хотел бы я проголосовать за то, чтобы сделать вас Богом. Действительно, это потрясающий материал.

Jonathan C Dickinson 15.01.2009 10:54

С другой стороны, лучшие пакеты OSS - это огромные множители силы. Это хорошо спроектированные, ухоженные, у которых есть большие сообщества пользователей и разработчиков (и настоящие опубликованные книги). Некоторыми примерами из них являются Rhino (интерпретатор Javascript), Xerces (синтаксический анализатор XML), Restlet (веб-службы REST) ​​и jQuery (разработка графического интерфейса пользователя Javascript). Другие действительно отстой, например Axis 1.x.

Jim Ferrans 19.05.2009 06:34

Программы чтения с экрана и другие инструменты обеспечения доступности работают лучше, если HTML соответствует стандартам. Что касается OSS ... ваши рассуждения глубоко ошибочны в применении вашего собственного негативного опыта ко всем работам OSS. Конечно, изменение проектов OSS может быть трудным (невозможным для многих), но я потерял счет библиотекам OSS, которые использовал, чтобы сэкономить массу работы над различными проектами. Если большинство OSS бесполезны, то только потому, что их очень много. Есть много очень полезных OSS.

Kris 31.05.2009 04:17

В любом случае, все WWW - отстой, так что для первого пункта мне все равно. +100 за секунду.

MaD70 06.11.2009 02:41

да здравствует sudo apt-get install

hasen 06.11.2009 09:22

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

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

Daniel Daranas 10.01.2009 03:28

Хм. Итак, к какому классу должен входить метод cut? meat, vegetable, knife, scissors, kitchen_table, workbench ...?

Svante 12.01.2009 19:47

Без дополнительной информации я бы сказал, что нож разрезает режущий объект: Knife.cut (ICuttable something). Конечно, если у вас есть только один режущий объект, например мясо, и много вещей, которые режут мясо, тогда вам понадобится Meat.cutWith (ICutter something).

moffdub 17.01.2009 03:54

Я, наверное, за это поджарюсь, но:

Делать невидимые символы синтаксически значимыми в Python было плохой идеей

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

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

mcrute 10.01.2009 19:31

Я думаю, что плохая идея становится более очевидной, когда вы думаете о нелепом ограничении lambda в Python.

Svante 12.01.2009 19:49

Сколько раз у меня происходил сбой скрипта python, потому что я вставлял пустую строку в свой код в цикл for, а в пустой строке не было достаточно пробелов ... Заставляет меня не помещать в код пустые строки .

Cameron MacFarland 14.01.2009 02:13

Я не согласен с вами, но +1, потому что является спорным

hasen 24.01.2009 08:23

То же самое было и с исходной командой make в Unix. Действия должны быть на одной табуляции; если вместо этого вы использовали пробелы, действие выглядело как синтаксическая ошибка. Фу!

Jim Ferrans 19.05.2009 06:26

История повторяется. Мы не извлекли уроки из форматирования вывода Fortran или файлов make, так почему же удивляться, что кто-то подумал, что это хорошая идея для python? Это будет не в последний раз.

Kelly S. French 16.07.2009 19:28

@mcrute: если вам нужно создать специальный инструмент только для работы с языком, для меня это проблема.

Paul Nathan 29.07.2009 20:58

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

fengb 16.12.2009 03:33

@Paul Nathan: если вам нужно создать специальный инструмент для написания кода с хорошим отступом на языке фигурных скобок, это звучит для меня проблемой.

Beni Cherniavsky-Paskin 31.12.2009 18:56

Мнение: Продолжительность работы в области разработки не всегда означает то же, что и опыт.

Многие профессии смотрят на «годы опыта» на языке. Да, 5 лет изучения C# могут иметь смысл, поскольку вы можете научиться новым трюкам, а также многим другим. Однако, если вы работаете в компании и поддерживаете одну и ту же кодовую базу в течение нескольких лет, я чувствую, что вы не получаете достаточной степени подверженности различным ситуациям как человек, который работает над разными ситуациями и потребностями клиентов.

Однажды я взял интервью у человека, который гордился своим 10-летним опытом программирования и работал с VB5, 6 и VB.Net ... все это время в одной компании. После дополнительных исследований я обнаружил, что, хотя он работал со всеми этими версиями VB, он только обновлял и постоянно поддерживал свое исходное приложение VB5. Никогда не изменяйте архитектуру и позволяйте мастерам обновления делать свое дело. Я брал интервью у людей, которые проработали всего 2 года в этой сфере, но работали над несколькими проектами, у которых больше «опыта», чем у него.

1. Вы не должны постоянно следовать веб-стандартам.

2. Комментировать код не нужно.

Пока это понятно постороннему.

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

Если вы программист, то, скорее всего, вы плохо разбираетесь в веб-дизайне / разработке.

Этот веб-сайт - феноменальный ресурс для программистов, но совершенно ужасное место, куда можно прийти, если вам нужна помощь XHTML / CSS. Даже хорошие веб-разработчики здесь раздают ссылки на ресурсы, которые были хороши в 90-х!

Конечно, XHTML и CSS просты в освоении. Однако вы не просто изучаете язык! Вы учитесь его хорошо использовать, и очень немногие дизайнеры и разработчики могут это делать, не говоря уже о программистах. Мне потребовались годы, чтобы стать способным дизайнером, и даже больше, чтобы стать хорошим разработчиком. Я мог программировать на HTML с 10 лет, но это не значило, что я был хорош. Теперь я способный дизайнер в таких программах, как Photoshop и Illustrator, я прекрасно могу написать хороший веб-сайт в Блокноте и могу писать базовые скрипты на нескольких языках. Мало того, я хорошо разбираюсь в методах поисковой оптимизации и могу легко сказать вам, где большинство людей ошибаются (подсказка: получите хороший контент!).

Кроме того, это место - ужасный ресурс для советов по веб-стандартам. Вы НЕ должны просто писать код для работы в разных браузерах. Вы должны ВСЕГДА следовать стандарту, чтобы обеспечить соответствие вашего кода требованиям завтрашнего дня. Чаще всего исправления, которые вы используете на своих веб-сайтах, перестают работать при следующем обновлении браузера. Не только это, но и хорошие браузеры в любом случае следуют стандартам. Наконец, IE разрешили разрушить Интернет потому, что ВЫ допустили это, написав свои веб-сайты для IE! Если вы собираетесь продолжать делать это для Firefox, мы снова проиграем!

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

Если вы новичок в веб-дизайне / разработке, не беспокойтесь об этом месте (там полно программистов, а не веб-разработчиков). Обратитесь в хорошее сообщество веб-дизайнеров / разработчиков, например SitePoint.

Также подходит для дизайна графического интерфейса. Особенно с новыми технологиями, такими как WPF, которые делают дизайн графического интерфейса более похожим на веб-дизайн с использованием файлов CSS, определяющих стили для интерфейса.

Cameron MacFarland 14.01.2009 02:11

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

Juliet 04.02.2009 03:35

Иногда прыгать на подножку - нормально

Я устал от людей, проявляющих «дедушкин синдром» («Вы, дети, и ваша новомодная разработка через тестирование. Большая технология Каждый, появившаяся за последнее десятилетие, - отстой. В свое время мы писали код настоящий!» ... вы понимаете идея).

Иногда популярные вещи популярны не просто так.

Не достаточно спорный. Для того, чтобы быть спорным, заменить иногда всегда.

Coding With Style 05.07.2009 02:11

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

Mike Dunlavey 06.02.2010 19:14

@Mike Dunlavey - Я согласен на 100%. Но нечестно отказываться от идеи на этом основании (что многие люди делают).

Jason Baker 06.02.2010 19:34

... поговорим о старом коде, как насчет этого: //SYSUT2 DD UNIT=(TAPE1600,,DEFER),VOL=SER=SPROOOF,LABEL=(1,NL),DISP=(,K‌​EEP) выкручивается, вставая при нажатии клавиш.

Mike Dunlavey 06.02.2010 20:48

Из женщин получаются лучшие программисты, чем из мужчин.

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

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

Cameron MacFarland 14.01.2009 02:04

Хорошие программисты испытывают сильную эмоциональную привязанность к своему коду, потому что они увлечены созданием лучших решений, которые могут. Это почти олицетворяет лучшее, чем они могут быть ... отсюда и привязанность к эго. Это одновременно слепит путь к лучшим решениям и является ключевым фактором для улучшения. ИМХО; в основном хорошо!

John MacIntyre 22.01.2009 22:24

Я также не видел корреляции между полом и владением кодом. (Хотя и только две точки данных.) Хотите расширить свой ответ?

Stu Thompson 29.04.2009 00:11

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

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

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

Хороший программист не делает из вас хорошего дизайнера интерфейсов.

А следование всем мировым правилам интерфейса только поможет. Если это возможно даже по-человечески ... Кажется, есть своеобразное пристрастие к тому, чтобы делать вещи «милыми» и «умными».

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

Разделение забот - зло :)

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

Я встречал слишком много случаев разлуки только ради разлуки. Не следует забывать вторую половину утверждения Дейкстры «Минимальное сцепление, максимальное сцепление». :)

Рад обсудить это дальше.

+1 для цитаты Дейкстры ... но я не согласен с вами ... так +1 для спорного мнения ... все в меру.

paxos1977 14.01.2009 06:16

2 пробела.

Без обсуждения. Просто так должно быть ;-)

Как насчет компромисса? Вы добавляете пространство, а я отказываюсь от него, и все счастливы? ;-)

Captain Sensible 26.01.2009 18:25

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

Juliet 04.02.2009 03:39

Трехмерный интервал - самый уродливый отступ, который я когда-либо видел. Это просто не вписывается в мой счастливый 2 ^ n мир. 2 как раз для тех, кто хочет писать код с отступом от 20 и более, т.е. для тех, чье приложение состоит из одного класса монстров. Или функция монстра.

Sebastian Mach 19.03.2009 18:20

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

Они начинают учить C, Java, VB (отвратительно) людей, не разбирающихся в аппаратном обеспечении и фундаментальных принципах работы компьютеров. Сначала нужно научить МАШИНА по книгам, таким как Архитектура компьютерной системы Морриса Мано, а затем научить концепция инструктирования машины для решения проблем вместо того, чтобы травить семантику и синтаксис одного языка программирования.

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

Их снова учат использовать некоторые продукты, а не фундаментальные идеи.

Подумайте об этом, если бы вас учили только тому, что 2x2 равно 4, а не концепции умножения?

Или если бы вас сейчас учили измерять длину шеста, наклоненного к какой-либо составной стене вашей школы, но не теорема Пифагора

Программисты считают свой (собственный, немного ограниченный, глупый) язык программирования священной религией.

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

Также забавно и еще одно подтверждение: по определению вопроса «дайте мне неоднозначное мнение», любое противоречивое мнение НЕ должно претендовать на отрицательные голоса - на самом деле наоборот: чем спорнее, тем лучше. Но как реагируют наши программисты: как собаки Павлова, голосование отрицательно по не понравившимся мнениям.

PS: Я поддержал некоторых других за справедливость.

P.S .: Я не имею привычки слюну на Stackoverflow ... хорошо, это сайт для извращенцев, но это не порно.

MaD70 06.11.2009 04:50

Инженеры-программисты не должны работать с ребятами из информатики

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

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

paxos1977 14.01.2009 06:12

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

paxos1977 14.01.2009 06:13

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

chaos 29.04.2009 23:06

Ковбойские программисты делают больше.

Я провожу жизнь в атмосфере стартапа. Без программистов Cowboy мы бы потратили бесконечные циклы на то, чтобы все было сделано «правильно».

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

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

Хорошему Ковбою всегда мешает процесс, каким бы гибким он ни был.

Если бы они реорганизовались там, где это уместно, я бы, наверное, не называл их ковбоями ...

Jon Skeet 13.01.2009 02:03

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

JD Conley 13.01.2009 04:08

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

Cameron MacFarland 14.01.2009 01:59

Кэмерон: Я думаю, вам нужна новая профессия. Похоже, твоя работа - отстой. :)

JD Conley 17.01.2009 05:03

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

Cameron MacFarland 23.01.2009 01:47

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

Cameron MacFarland 23.01.2009 01:54

@Cameron: Да, несправедливо обвинять только ковбоев. Винить их менеджеров.

Daniel Daranas 29.10.2009 20:20

Мы называем их «программистами-ниндзя», потому что они ничего не могут сделать. (Как ниндзя)

Faruz 01.11.2009 15:19

ИСПОЛЬЗОВАНИЕ шаблонов проектирования и документации

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

Переменные-члены никогда не следует объявлять закрытыми (в java)

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

Классы никогда не должны объявляться окончательными (в java)

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

Java Beans - ужасная идея.

Соглашение о java bean-компонентах - объявление всех членов закрытыми, а затем написание методов get () и set () для каждого члена - вынуждает программистов писать шаблонный, подверженный ошибкам, утомительный и длинный код, в котором код не требуется. Просто сделайте общедоступные переменные-члены общедоступными! Поверьте, что вы сможете изменить это позже, если вам нужно будет изменить реализацию (подсказка: в 99% случаев вы никогда этого не сделаете).

Защищенные переменные-члены настолько ошибочны! Это нарушает инкапсуляцию и приводит к СЕРЬЕЗНЫМ проблемам. Только методы следует объявлять защищенными.

Captain Sensible 26.01.2009 18:27

Ассемблер - лучший первый язык программирования.

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

paxos1977 14.01.2009 06:14

Я выучил сборку Mostek 6502 в 12 лет, и это был мой второй язык программирования (первый был неструктурированным Basic - чистая чушь). Это было легко с книгой и несколькими компьютерными журналами (с длинным списком исходного кода). K&R C вызывает у меня отвращение даже сегодня.

MaD70 06.11.2009 04:09

Код как дизайн: три эссе Джека У. Ривза

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

Гарантированно уволят вас практически везде.

Ленивые программисты - лучшие программисты

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

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

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

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

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

Captain Sensible 26.01.2009 13:16

@Diego, tnx, изменил его, чтобы он стал более подходящим.

Jonathan C Dickinson 26.01.2009 17:46

@Diego: Я не согласен! Термин «ленивый» применительно к программистам - это то, что я слышал и использовал много раз раньше. (Думаю, я впервые прочитал об этом в статье Ларри Уолла). Это почетный знак!

Shalom Craimer 29.01.2009 10:47

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

Adrian Zanescu 30.01.2009 16:25

Мне нравится говорить: «Я не ленив, я работоспособен».

Tracy Probst 02.03.2009 21:28

Я согласен с тем, что вы пытаетесь сказать, но не согласен с вашим определением ленивости. Ленивый программист не смотрит вперед; они будут копировать и вставлять блок кода между 4 различными функциями, если это проще всего сделать в то время.

DisgruntledGoat 10.05.2009 04:38

ленивый / умный программист ... Программисты должны быть умными, чтобы быть разумными программистами, так что это само собой разумеющееся. Ленивый программист выбирает самый короткий / легкий путь к решению проблемы. И речь идет не о 400-кратном копировании / вставке одного и того же фрагмента кода, а о поиске способа избежать 400-кратного копирования одного и того же кода. Таким образом, код можно легко изменить в одном месте! Ленивый программист любит изменять код только один раз;) Ленивый программист также знает, что код, вероятно, будет изменен несколько раз. А ленивый программист просто ненавидит дважды находить 400 фрагментов кода.

Zuu 15.06.2009 15:33

Хотя я согласен с вашим объяснением «Ленивый», на самом деле это не лучшее слово для описания этого. Ленивый - невосприимчивый к работе или физическим нагрузкам; Я знаю ленивого программиста, который слишком ленив, чтобы создать bat-файл для автоматизации простой задачи, которую он постоянно набирает. Если бы он просто потратил немного времени на создание нескольких файлов летучих мышей, это повысило бы его продуктивность. Оказывается, он хороший разработчик, но мог бы быть еще лучше.

gradbot 13.10.2009 21:23

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

Elizabeth Buckwalter 22.10.2009 22:33

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

ravibhagw 08.06.2010 23:54

-1. Я ОЧЕНЬ ленив + я никогда не писал инструментов для автоматизации, потому что никогда не видел в них ценности. Разработка инструментов - это одноразовая огромная дополнительная работа, которую не сможет выполнить ни один настоящий ленивый человек.

Blub 14.07.2010 21:12

+1 для Седьмого Элемента / Зуу. Ленивые программисты = много кода. Умные программисты = меньше + лучший код.

Exa 23.08.2010 13:26

Tcl / Tk - лучшая комбинация языка GUI / инструментария когда-либо

Он может не иметь конкретных виджетов и быть менее красивым, чем новые дети в блоке, но его модель элегантна и настолько проста в использовании, что можно создавать рабочие графические интерфейсы быстрее вводя команды в интерактивном режиме, чем с помощью конструктора визуального интерфейса. Его выразительная сила непревзойденна: другие решения (Gtk, Java, .NET, MFC ...) обычно требуют от десяти до ста LOC, чтобы получить тот же результат, что и однострочный Tcl / Tk. И все это без ущерба для читабельности или стабильности.

pack [label .l -text "Hello world!"] [button .b -text "Quit" -command exit]

О мой бог, что спорный! :П

Aaron Powell 18.01.2009 13:55

Я бы сказал, что WPF дает возможность использовать Tcl / Tk за свои деньги.

Cameron MacFarland 23.01.2009 01:41

Предлагаю взглянуть на pygtk или Groovy Swingbuilder. Обе концепции более мощные, чем странный синтаксис Tcl, и достигают того же результата с современным набором виджетов и небольшим кодом. И если вы хотите увидеть что-то действительно крутое, подберите «восторженные черты характера».

Aaron Digulla 02.03.2009 17:20

WPF должен был называться WTF. Потому что ручная настройка XML - это моя идея для хорошего времяпрепровождения RAD.

Warren P 01.04.2010 04:13

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

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

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

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

(Это должно было быть спорным, помнишь?)

Менеджеры все знают

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

И еще одно, которое следует из первого:

Никогда не бывает времени делать это правильно, но всегда есть время сделать это снова

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

И тот, который пришел в голову сегодня, когда пытался настроить маршрутизатор только с веб-интерфейсом:

Веб-интерфейсы для лохов

Интерфейс командной строки в предыдущей версии прошивки был очень хорош. Эта версия имеет веб-интерфейс, который пытается скрыть всю сложность сети от невежественных ИТ-дроидов и даже не может правильно настроить VLAN.

согласен со вторым утверждением.

Blub 14.07.2010 21:18

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

d-_-b 17.07.2010 06:04

Хороший разработчик должен знать больше, чем просто программировать.

Это не значит, что я не согласен, но мне нравится видеть больше объяснений или примеров.

tuinstoel 22.01.2009 21:12

Напишите свою спецификацию, когда закончите кодирование. (если вообще)

Во многих проектах, в которых я принимал участие, в самом начале было потрачено много усилий на написание «спецификации» в Microsoft Word. Этот процесс завершился встречей для «подписания», когда крупные игроки приняли участие в проекте, и после этой встречи никто больше никогда не смотрел этот документ. Эти документы - пустая трата времени и не отражают, как на самом деле создано программное обеспечение. Это не означает, что в дизайне приложений нет других ценных артефактов. Обычно они содержатся на учетных карточках, снимках досок, салфетках для коктейлей и других подобных носителях, которые обеспечивают своего рода временную шкалу для дизайна приложения. Обычно это настоящие характеристики приложения. Если вы собираетесь написать документ Word (а я особо не говорю, что вам следует), сделайте это в конце проекта. По крайней мере, он будет точно представлять, что было сделано в коде, и может помочь кому-то в будущем, например, команде QA или разработчикам следующей версии.

«никто никогда больше не смотрел этот документ» Неправда. Когда я приступил к новой работе, мне дали папку с «спецификациями» и посоветовали прочитать ее в качестве моей первой задачи. Затем я начал спрашивать, «где эта функция», и ответил: «Я не знал, что это было в спецификации». Папка со спецификациями была передана всем новым сотрудникам.

Cameron MacFarland 23.01.2009 01:36

Да, со мной такое тоже случалось - несколько раз. Я исправился.

Andrew Cowenhoven 30.01.2009 17:13

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

Jason Baker 06.02.2010 19:38

При разработке кода рекомендуется помнить об оптимизации.

Когда я говорю это, люди всегда отвечают: «преждевременная оптимизация - корень всех зол».

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

Хьюго

Это очень похоже на мой образ мышления: оптимизируйте архитектуру / дизайн, а не реализацию.

Jon Skeet 17.01.2009 17:15

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

Возможно, это больше говорит о том, как stackoverflow генерирует консенсус, чем что-либо еще. Может, мне следовало начать снизу. :-)

Там определенно смесь противоречивых и нет. Ищите те, у которых много комментариев :)

Jon Skeet 18.01.2009 13:03

ха-ха, знаете что, я отмечу вас, чтобы люди читали это, просматривая эти. Я согласен с вами на 100%

user34537 26.01.2009 10:21

хотя на странице 2 много споров :)

Juliet 04.02.2009 03:58

VB 6 можно использовать как во благо, так и во зло. Это была среда быстрой разработки приложений во времена чрезмерно сложного кодирования.

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

Еще не проверял на наличие противоречий, но может быть:

Лучшая строка кода - та, которую вы никогда не писали.

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

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

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

Проблема решена, да?

Неправильный.

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

Мое непопулярное мнение таково:

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

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

Вы должны легко ответить на вопрос «какие части моего приложения на самом деле зависят от библиотеки XYZ?»

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

Я видел, как разработчики включали библиотеки объемом 10 или 20 МБ, вводя в проект тысячи зависимых классов, просто чтобы исключить несколько десятков строк простого пользовательского кода.

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

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

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

Pyrolistical 24.03.2009 01:02

Есть несколько (очень мало) законных применений goto (особенно в C, как замена для обработки исключений).

Инверсия управления не устраняет зависимости, но, несомненно, отлично справляется с их сокрытием.

Объекты никогда не должны быть в недействительном состоянии

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

MyClass c = new MyClass(); // Object in invalid state. Doesn't have an ID.
c.setId(12345); // Now object is valid.

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

Конструкторы и методы мутатора должны атомарно переводить объект из одного допустимого состояния в другое. Это намного лучше:

MyClass c = new MyClass(12345); // Object starts out valid. Stays valid.

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

Полностью согласен! И я очень расстраиваюсь, когда вижу, что подобные концепции становятся настолько популярными. +1

John MacIntyre 22.01.2009 17:33

По моему опыту, недопустимые состояния приводят к исключениям.

Cameron MacFarland 23.01.2009 01:25

@Cameron, вы говорите, что у вас должна быть возможность инициализировать конструктором по умолчанию, затем установить каждое свойство, затем установить проверку на недопустимое состояние в каждом сеттере и выбросить исключение? Если да, то как вы можете справиться с ситуацией, когда 2 свойства должны быть синхронизированы, чтобы быть действительными?

John MacIntyre 23.01.2009 18:24

Вот почему я ненавижу ORM-фреймворки, хотя они мне нужны постоянно.

pyon 01.02.2009 09:09

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

benjismith 02.02.2009 19:46

Понятия не имею. Если был несомненен, то все основные рамки для Java (в частности, Spring и Hibernate) не требует от меня нарушить правила, чтобы использовать свой код.

benjismith 04.02.2009 18:33

@John: Если два свойства должны быть синхронизированы, они, очевидно, связаны и должны редактироваться вместе в методе: SetBothProperties (a, b)

Lennaert 30.03.2009 18:32

К сожалению, сериализация требует существования конструкторов с нулевым аргументом.

tuinstoel 16.08.2009 08:57

RAII - получение ресурса - это создание экземпляра. FTW

George Godik 03.12.2009 03:10

Иногда достаточно иметь защищенные конструкторы с нулевым аргументом. Это может немного помочь.

Hans-Peter Störr 11.12.2009 23:21

Это напоминает мне структуры в программировании Windows API. Я никогда не мог понять, какие поля мне нужно установить, чтобы иметь действительный экземпляр структуры, например STARTUPINFO. Очень неприятно.

dacris 19.07.2010 12:58

Я никогда раньше не слышал об этом в явной форме. Это гениально просто - мне это нравится.

riwalk 07.10.2010 22:21

Иногда уместно проглотить исключение.

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

Я всегда придерживался «правила», так как не делаю следующего, вместо того, чтобы «не повышать ставку пользователю»: try {evil ();} catch (Exception e) {// swallow}

Stu Thompson 29.04.2009 00:17

Не пишите код, удаляйте код!

Как однажды сказал мне умный учитель: «Не пишите код, писать код - плохо, удалять код - хорошо. А если вам нужно писать код - пишите небольшой код ...»

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

Слепой вслед за слепым.

WolfmanDragon 23.05.2009 22:12

Генерация кода - это плохо

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

C# AutoProperties - это шаг в правильном направлении, но для хороших DTO с параметрами Fields, Properties и Constructor вам по-прежнему требуется много избыточности.

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

MaD70 06.11.2009 02:45

Хорошая производительность VS Элегантный дизайн

Они не исключают друг друга, но я терпеть не могу чрезмерно спроектированные структуры / фреймворки классов, которые совершенно не имеют представления о производительности. Мне не нужна строка new This (new That (new Whatever ())); создать объект, который скажет мне, что сейчас 5 часов утра, кстати, до дня рождения Обамы осталось 217 дней, а до выходных осталось 2 дня. Я только хотел знать, открыт ли тренажерный зал.

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

По иронии судьбы, чтение большого количества данных часто требует интенсивной работы ЦП нет, потому что ЦП намного быстрее дисков :)

Jon Skeet 26.01.2009 10:18

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

Jeremy Edwards 27.01.2009 07:54

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

Если это так, это начинается со меня

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

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

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

Captain Sensible 26.01.2009 17:20

Пожалуйста, отправьте свое пятилетнее резюме моему персоналу отдела кадров. ;)

Eddie Parker 27.01.2009 06:36

Объясните x = 4 * 7 5-летнему ребенку.

Cameron MacFarland 06.02.2009 17:35

это довольно спорное мнение - так почему downvote? Я в замешательстве

Simon_Weaver 10.02.2009 13:02

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

Robert Massaioli 26.05.2009 07:30

Я начал, когда мне было 4 года, так что +1.

Coding With Style 04.07.2009 11:59

Программирование может выполняется 5-летним ребенком. Программирование Хорошо требует опыта, самодисциплины и самокритики, а не черт характера, присущих среднестатистическому пятилетнему ребенку (или многим профессионалам).

DevSolar 16.10.2009 13:05

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

Tim 09.12.2009 22:54

Я начал программировать, когда мне было 1. Я использовал 1-битный поток, чтобы сказать маме сменить памперсы. это было {предположить}.

Behrooz 14.12.2009 23:17

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

Легко и просто :-)

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

Captain Sensible 26.01.2009 17:15

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

Captain Sensible 22.04.2010 12:31

Microsoft Windows - лучшая платформа для разработки программного обеспечения.

Рассуждение: Microsoft балует своих разработчиков отличными и дешевыми инструментами разработки, платформа и ее API хорошо документированы, платформа развивается стремительными темпами, что создает множество возможностей для разработчиков, ОС имеет большую базу пользователей, что важно для очевидной коммерческой деятельности. Причина в том, что существует большое сообщество разработчиков Windows, меня еще не уволили за то, что я выбрал Microsoft.

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

Bernard Igiri 04.02.2009 18:44

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

Aaron Digulla 02.03.2009 12:04

Microsoft Windows - лучшая платформа для разработки настольных приложений. Это не спорно. Это худшая платформа для разработки чего-либо низкого уровня, например файловых систем или кода ядра. Для веб-приложений в целом тоже хуже.

nosatalian 31.05.2009 06:34

Единственная платформа, которая «балует» своего разработчика «отличными и дешевыми инструментами разработки», - это Apple с Xcode. Конечно - VisualStudio Express бесплатен. Но VS нет. Инструменты Linux так же бесплатны, как и инструменты Mac OS X, но их сложнее настроить просто потому, что вы не просто копируете Xcode в папку приложений и начинаете работу.

warren 22.10.2009 08:59

У меня никогда не было такого опыта с окнами. Я перешел на Linux, и мне это понравилось.

Shawn Buckley 19.01.2010 03:07

Большинство разработчиков понятия не имеют

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

В любом случае ... Я рад, что начинаются такие инициативы, как stackoverflow. Разработчикам полезно задаться вопросом. Есть ли способ лучше? Я правильно это делаю? Возможно, я мог бы использовать эту технику, чтобы ускорить процесс и т. д.

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

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

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

Bernard Igiri 04.02.2009 18:42

Социальные навыки важнее технических навыков

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

+1 Я не могу с этим согласиться. Создание программного обеспечения - это скорее социальная деятельность, чем техническая.

JuanZe 14.10.2009 01:34

Разработка программного обеспечения - это ОЧЕНЬ небольшая часть компьютерных наук.

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

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

++ Я бы хотел, чтобы это работало в обоих направлениях. Я думаю, что программисты могут многому научиться у CS, а я, знать, CS мог бы многому научиться у SE, например, что на самом деле имеет значение в реальном мире.

Mike Dunlavey 24.10.2009 01:19

Исходные файлы ТАК 20 века.

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

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

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

По сути, я хочу сказать, что в современных языках не имеет значения, в какой файл (ы) вы помещаете свои классы или в каком порядке вы определяете членов класса, так почему мы все еще вынуждены использовать эти архаичные практики? Помните, когда появился Gmail, и Google сказал: «ищите, а не сортируйте»? Хорошо, почему нельзя применить ту же философию к языкам программирования?

Сохраненный код процедуры, такой как T-SQL или PL / SQL, не сохраняется в файлах.

tuinstoel 27.01.2009 22:29

Основная проблема в том, что картинка стоит 1000 расплывчатых слов, в то время как вы можете быть очень конкретными в тексте. Но я согласен с тем, что нам действительно нужен режим «разработки с высоты птичьего полета», в котором вы можете составить грубую схему и позволить IDE заполнить 99% пробелов значениями по умолчанию.

Aaron Digulla 02.03.2009 17:22

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

Jeremy Wall 14.06.2009 06:41

+1 за действительно классную идею. -1 не очень спорно. Мне нравится идея, возможно, увидеть объявления методов в трехмерном пространстве с вызовами других методов, показанными с использованием линий / цвета / чего-то. Возможно, это будет беспорядок, возможно, это упростит понимание общего кода? Не знаю, какая часть этого smalltalk делает то, что было предложено выше.

Ray 17.07.2009 16:55

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

Ilari Kajaste 13.10.2009 17:18

ДА! Я скучаю по Visual Age for Java каждый день, когда попадаю в Eclipse. У VAJ не было исходных файлов, просто какой-то бинарный репозиторий: S

JuanZe 14.10.2009 01:26

Бу! В настоящее время я работаю над проектом, вся разработка которого ведется в одной из ваших волшебных IDE. Проблема с абстрагированием деталей в том, что они должны быть где-то определены. Чем более непонятно (по мнению разработчика IDE), тем сложнее найти детали. И если деталь вызывает ошибку или ошибку компилятора, вы можете поискать в среде IDE, где находится эта деталь. Возможно, когда-нибудь удастся получить одну из этих волшебных IDE, но не без Моцарта из области HCI и без огромной привязки к поставщику.

thebretness 26.02.2010 03:39

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

thebretness 26.02.2010 03:40

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

Все это знают, но практика почему-то все еще сохраняется!

Вы понимаете, что тема ветки - "разногласия"? Насколько противоречиво ваше утверждение?

Captain Sensible 27.01.2009 17:22

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

Noel Walters 27.01.2009 21:05

Я не верю, что какой-либо вопрос, связанный с оптимизацией, должен быть заполнен скандированием неверно цитируемой фразы «Преждевременная оптимизация - корень всех зол», потому что код, оптимизированный для обфускации, делает кодирование увлекательным

Никогда не реализуйте что-либо как синглтон.

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

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

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

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

Lawrence Dol 06.02.2009 12:54

Преждевременная оптимизация - это НЕТ корень всего зла! Отсутствие правильного планирования - корень всех зол.

Помните старую морскую пилу

Proper Planning Prevents P*ss Poor Performance!

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

один пример:

Слишком часто я наблюдаю, как одноранговые узлы часами пишут сложные Sprocs или массивные запросы LINQ, которые возвращают неинтуитивные анонимные типы ради «производительности».

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

«Не вызывайте виртуальные методы из конструкторов». Это только иногда PITA, но только потому, что в C# я не могу решить, в какой точке конструктора вызывать конструктор моего базового класса. Почему нет? Платформа .NET позволяет это, так по какой же причине C# этого не допускает?

Проклятие!

«Все должно быть сделано как можно проще, но не проще». - Эйнштейн.

Хорошо, что это спорно, цитируя Эйнштейна :)

tuinstoel 04.04.2009 15:29

Вот мой:

«Вам не нужен (текстовый) синтаксис для выражения объектов и их поведения».

Присоединяюсь к идеям Джонатана Эдвардса и его проекта Subtext - http://alarmingdevelopment.org/

Джонатан Эдвардс? Хорошо, я получаю класс: "Человек". Кому-нибудь здесь нужен класс "Человек"? Этот класс Person прошел довольно резко, что-то связано с сундуком. У класса Person также есть метод Validate (), он хочет, чтобы я его проверил. Вы всегда должны проверять уроки вокруг вас каждый день!

Peter Morris 09.02.2009 00:21

Пользователи не идиоты - вы такие.

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

Я говорю: если кто-то делает глупость, я упускаю важный факт.

Aaron Digulla 02.03.2009 17:23

Хотя иногда я виноват в этом, я должен согласиться.

Neil Aitken 09.03.2009 13:41

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

Это так же спорно, как чашка кофе.

Andrew not the Saint 14.10.2009 07:19

@Andrew из NZSG. Как и многие из предложенных здесь предложений, во время моей прошлой работы это было «спорным», потому что чаще всего программные проекты разрабатывались без учета этого. Если что-то происходит, в большинстве случаев, и я не согласен с этим, я квалифицироваться свое собственное мнение, как несколько «спорным», несмотря на то, что, очевидно, что я прав.

Daniel Daranas 14.10.2009 11:45

@Andrew: Давным-давно я однажды позвонил в компанию по поводу объявления о вакансии Java-разработчика. Они спросили меня: «Ты знаешь Java?» Да. "Не могли бы вы написать приложение для бухгалтерского учета?" Эээ, одна? Нет. Рядом со мной финансовый консультант, да. «Понятно. Спасибо за проявленный интерес». Какого черта?

Amadan 11.08.2010 03:17

«Программисты рождаются, а не создаются».

Я верю в Дзен Python

Это, эээ, люди должны комментировать свой код? Кажется, здесь все довольно неоднозначно ...

Код сообщает мне только что на самом деле это делает; не то что было должен сделать

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

Люди жалуются на удаление «goto» из языка. Я думаю, что любой условный переход сильно переоценен, а «если», «while», «переключатель» и цикл общего назначения «for» сильно переоценены и должны использоваться с особой осторожностью.

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

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

Ясно, что это непрактично для многих проектов и алгоритмов (например, для контуров управления потоком), но мне нравится настаивать на этом.

-Рик

Оценки для меня, а не для вас

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

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

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

Например -

I think a feature will probably take me around 5 days. There's a small chance of an issue that would make it take 30 days.

If the estimates are just for planning then we'll all work to 5 days, and account for the small chance of an issue should it arise.

However - if meeting that estimate is required as a promise of delivery what estimate do you think gets given?

Если бонус или безопасность работы разработчика зависят от выполнения оценки, как вы думаете, они дают наиболее точное предположение или то, что, по их мнению, они наиболее точно встретят?

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

+1 "вы хотите получить оценку для среднего или худшего случая?" "средний случай" "тогда не рассматривайте эту оценку как жесткий предел" да!

OJW 07.12.2009 01:07

Большинство программистов бесполезны в программировании

(Вы сказали "спорный")

Я сидел в своем офисе дома, обдумывая какую-то проблему с программированием, и в итоге я посмотрел на свою копию «Complete Spectrum ROM Disassembly» на моей книжной полке и подумал:

«Сколько программистов сегодня могут написать код, используемый в ПЗУ Спектрума?»

Spectrum, для тех, кто с ним не знаком, имел базовый язык программирования, который мог выполнять простую 2D-графику (линии, кривые), файловый ввод-вывод определенного вида и вычисления с плавающей запятой, включая трансцендентные функции, все в 16K кода Z80 (8-битный процессор <5Mhz без FPU или целочисленного умножения). У большинства сегодняшних выпускников возникли бы проблемы с написанием такой небольшой программы «Hello World».

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

Там, где я сейчас работаю, есть семь программистов, включая меня. Из них я единственный, кто всегда в курсе, читая блоги, книги, этот сайт и т. д. И занимаясь программированием «для развлечения» дома (моя жена постоянно этим удивляется). Есть еще один программист, который хочет писать хорошо структурированный код (что интересно, он много работал с помощью Delphi) и рефакторинг плохого кода. Остальные, ну, не очень хороши. Благодаря этому, вы могли бы описать их как программистов «грубой силы» - они будут заставлять неприемлемые решения, пока они не сработают каким-то образом (например, с использованием массивов C# с повторяющимся массивом. Resize для динамического добавления элементов вместо использования списка).

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

Итак, 5 программистов из 7 - мусор.

Skizz

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

Steve 13.03.2009 07:48

Драйверы BIOS и оборудования, вероятно, содержат много ассемблера. Многие встроенные системы являются только ассемблерами (или примитивными компиляторами C, если вам повезет). Сколько программистов могло бы написать эквивалент базового интерпретатора Spectrum даже при высоком уровне объектно-ориентированного программирования.

Skizz 13.03.2009 12:35

Автоматические обновления приводят к снижению качества и безопасности программного обеспечения

Идея

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

Реальность

Продукты должны быть доставлены в установленные сроки, часто за счет QA. Затем выпускается программное обеспечение с множеством ошибок и дыр в безопасности, чтобы уложиться в срок, зная, что «Автоматическое обновление» может быть использовано для исправления всех проблем позже.

Программа, которая действительно заставила меня подумать об этом, - это VS2K5. Сначала это было здорово, но по мере установки обновлений программное обеспечение постепенно ухудшается. Самым большим нарушением была потеря макросов - я потратил много времени на создание набора полезных макросов VBA для автоматизации части кода, который я пишу, - но, по-видимому, была дыра в безопасности, и вместо ее исправления макросистема была отключена. У Bang есть действительно полезная функция: запись нажатий клавиш и их многократное воспроизведение.

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

Skizz

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

Skizz 11.03.2009 16:46

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

Nate C-K 07.01.2010 22:02

Я бы сказал, что верно и обратное, общая безопасность и стабильность улучшились в более свежем программном обеспечении MS.

Nate C-K 08.01.2010 01:08

Ничего страшного, если ты не знаешь. Но вы уволены, если не можете даже погуглить.

Интернет - это инструмент. Если ты учишься на этом, это не делает тебя глупее.

Есть разница между программистом и разработчиком. Пример: программист пишет логику нумерации страниц, разработчик интегрирует нумерацию страниц на странице.

Заказчик не всегда прав.

В большинстве случаев, с которыми я имею дело, заказчик - это владелец продукта, он же «бизнес». Слишком часто разработчики просто кодируют и не пытаются обеспечить заинтересованность в продукте. Существует слишком большое заблуждение, что ИТ-отдел - это «компания внутри компании», что представляет собой полный мусор.

Я чувствую, что моя роль заключается в том, чтобы помогать бизнесу выражать свои идеи - при взаимном понимании того, что я заинтересован в понимании бизнеса, чтобы я мог предоставить наилучший возможный опыт. И этот путь подразумевает, что будут времена, когда владелец продукта будет просить о чем-то, что, по его мнению, станет следующей революцией в вычислительной технике, заставляя кого-то либо согласиться с этим фактом, либо объяснять более вероятную причину, почему никто не делает что-то определенное способ. Это взаимовыгодно, потому что владелец продукта понимает мысль, которая воплощается в продукте, а команда разработчиков понимает, что они делают больше, чем просто создают код.

Это фактически начало вести нас по пути повышения производительности выросла. Как? Поскольку коммуникация улучшилась из-за разногласий по обе стороны стола, более вероятно, что мы объединимся раньше в процессе и придем к взаимовыгодному решению по определению продукта.

это один из тех ответов, на которые я хотел бы дать +100

DanSingerman 03.09.2009 18:37

вздох .. это правда! могу я купить тебе пива?

Alex Nolasco 22.01.2010 08:05

Я могу жить без замыканий.

Похоже, в настоящее время все и их мать хотят, чтобы замыкания присутствовали на языке, потому что это величайшее изобретение со времен нарезанного хлеба. И я думаю, что это просто очередной ажиотаж.

Я думал в том же духе до того, как начал использовать LINQ, и в этот момент я стал полным новообращенным.

Jon Skeet 16.03.2009 09:18

Я согласился, прежде чем использовать их с многопоточностью в C#. Доступ к локальным переменным предыдущего потока чрезвычайно полезен и значительно упрощает синтаксис.

Steve 04.04.2009 16:52

Возможно обезопасить ваше приложение.

Каждый раз, когда кто-то задает вопрос о том, как предотвратить пиратское использование пользователями своего приложения или защитить его от хакеров, ответ - это невозможно. Бред какой то. Если вы действительно в это верите, тогда оставьте свои двери незапертыми (или просто снимите их из дома!). И не беспокойтесь о том, чтобы пойти к врачу. Вы смертны - попытка вылечить болезнь - это лишь откладывание неизбежного.

Тот факт, что кто-то мощь может пиратствовать ваше приложение или взломать вашу систему, не означает, что вы не должны пытаться увеличить уменьшать количество людей, которые это сделают. На самом деле вы делаете так, чтобы для взлома требовалось больше работы, чем хочет сделать злоумышленник / пират.

Точно так же, как засов и ADT в вашем доме будут защищать грабителей, разумные меры по борьбе с пиратством и безопасности будут держать вас подальше от хакеров и пиратов. Конечно, чем более заманчивым будет для них взлом, тем больше безопасности вам потребуется.

Невозможно сделать приложение на 100% безопасным, потому что, в конце концов, приложения представляют собой просто набор битов на устройстве хранения, которые можно копировать и изменять. Шифрование - это не защита от копирования. Это компромисс между неизбежным пиратом и временем для развития защиты.

Skizz 18.03.2009 17:55

@Skizz: Я хочу сказать, что невозможность стопроцентной безопасности не является поводом отказываться от «достаточной» безопасности. Вы можете сделать так, чтобы ваше приложение не стоило пиратства / взлома, точно так же, как вы можете сделать так, чтобы в ваш дом не было взлома.

Jon B 18.03.2009 18:43

Конфиги логгеров - пустая трата времени. Зачем они нужны, если для этого нужно изучить новый синтаксис, особенно тот, который молча дает сбой? Не поймите меня неправильно, я люблю хорошую лесозаготовку. Мне нравится наследование регистратора и добавление средств форматирования к обработчикам регистраторов. Но зачем это делать в конфигурационном файле?

Вы хотите внести изменения в код ведения журнала без перекомпиляции? Почему? Если вы поместите код ведения журнала в отдельный класс, файл или что угодно, какая разница?

Вы хотите распространять настраиваемый журнал с вашим продуктом среди клиентов? Разве это не дает слишком много информации?

Больше всего расстраивает то, что популярные утилиты, написанные на популярном языке, как правило, пишут хорошие API в формате, который определяет язык. Напишите утилиту ведения журнала Java, и я знаю, что вы сгенерировали javadocs, и я знаю, как ориентироваться. Напишите доменный язык для конфигурации вашего регистратора и что у нас есть? Может быть, есть документация, но где она, черт возьми? Вы сами решаете, как это организовать, а мне просто неинтересно следовать вашей мысли.

«Вы хотите внести изменения в код ведения журнала без перекомпиляции? Почему?» Все время. У меня есть развернутый сервер, на котором нет причин регистрировать мельчайшие подробности при обслуживании производственного трафика, но я должен иметь возможность включить ведение журнала, когда что-то пойдет не так. Возможно, вы просто не работаете с тем типом приложений, для которого это необходимо, но это не лишняя функция.

Kai 26.04.2009 01:48

Справедливо. На самом деле это сценарий, с которым у меня есть некоторый опыт ... но разница в том, что время компиляции в тех случаях, с которыми я имею дело, составляет <2 мин. Я знаю, что мне нужно перезапустить сервер, если я изменю конфигурацию журнала ... перекомпиляция не кажется мне такой большой проблемой в свете этого.

David Berger 26.04.2009 02:34

Держите вашу бизнес-логику подальше от БД. Или, как минимум, держите его очень стройным. Позвольте БД делать то, для чего она предназначена. Позвольте коду делать то, для чего он предназначен. Период.

If you're a one man show (basically, arrogant & egotistical, not listening to the wisdom of others just because you're in control), do as you wish. I don't believe you're that way since you're asking to begin with. But I've met a few when it comes to this subject and felt the need to specify.

If you work with DBA's but do your own DB work, keep clearly defined partitions between your business objects, the gateway between them and the DB, and the DB itself.

If you work with DBA's and aren't allowed to do your DB work (either by policy or because they're premadonnas), you're very close to being a fool placing your reliance on them to get anything done by putting code-dependant business logic in your DB entities (sprocs, functions, etc.).

If you're a DBA, make developers keep their DB entities clean & lean.

Я держу пальцы скрещенными, мне не нужно работать с вами или поддерживать ваши остатки. Работа одного актера должна быть стимулом к ​​тому, чтобы работать как можно лучше, потому что без других разработчиков, которые будут проверять вашу работу, вы уже предрасположены к написанию странного и странного кода.

STW 22.04.2009 00:19

Что касается базы данных: если ваша база данных - это просто ведро, в котором что-то хранится, я согласен, что бизнес-логике нет места (SQLite - отличная БД для этих систем), однако, если вы храните бизнес-данные в базе данных, в конечном итоге ответственность БД за достоверность его содержимого. Это верно как никогда, чем в случаях, когда база данных используется или обслуживается несколькими клиентами.

STW 22.04.2009 00:20

LOL ... говоря "делай, как хочешь", я не говорил, что делаю так. Я больше указывал на тех, кто считает себя островом и никого не должен слушать. По сути, высокомерные и эгоистичные разработчики, которые считают, что их крэк, не воняют. Я встречал нескольких. Мои извинения за то, что я не прояснил. Я отредактирую свое заявление после этого комментария.

TheHolyTerrah 22.04.2009 18:41

И извините, но я не согласен с вашим последним утверждением. БД не должна проверять данные, выходящие за рамки теории хранения данных в реляционных базах данных. Это «может», но в конечном итоге это зависит от тех, кто помещает туда данные. Большинство корпоративных организаций не позволяют своим разработчикам быть администраторами баз данных. Администраторы баз данных следят за тем, чтобы все работало должным образом в соответствии со стандартами, и ничего не знают о бизнесе, стоящем за данными.

TheHolyTerrah 22.04.2009 18:43

В таких случаях бизнес-логика должна преимущественно храниться там, где она может контролироваться теми, кто знает бизнес-логику: перед DAL и вне базы данных.

TheHolyTerrah 22.04.2009 18:43

@Bodosky: Если целостность данных распространяется в каждом приложении, которое обращается к данным, я желаю удачи вашим клиентам / работодателю. БД Архитектор обязательно должна хорошо знать свой бизнес, а БД Администратор - нет.

MaD70 06.11.2009 05:05

Согласовано. Однако большинству предприятий повезет, если архитектор будет против администратора. Почему? Потому что предприятие просто не ослабит кошельков настолько, чтобы заплатить этим людям столько, сколько они стоят, чтобы держать их у себя достаточно долго, чтобы иметь личную заинтересованность и тем самым сблизиться с бизнесом. Таким образом, они получают администраторов БД, которые не так заинтересованы в бизнесе, как в принципах РСУБД.

TheHolyTerrah 11.11.2009 20:19

В магазине Oracle нет ничего необычного в том, что большие части приложения находятся внутри БД. PL / SQL - действительно хороший язык для выражения бизнес-логики.

Erich Kitzmueller 18.11.2009 23:34

На самом деле я Oracle n00b (сейчас чуть больше года). И я обнаружил, что PL / SQL во многом отличается от SQL Server. Так что моя парадигма в отношении вашего комментария постепенно меняется. По крайней мере, в том, что касается Oracle. Однако даже в магазине, в котором я сейчас нахожусь, есть минимальный BL, и все это находится в пакетах. Мне было бы очень любопытно посмотреть, как на производительность влияют десятки миллионов транзакций в день.

TheHolyTerrah 27.11.2009 19:22

MS Access * - это настоящий инструмент разработки, и профессиональные программисты могут без всякого стыда использовать его.

Тот факт, что конкретная платформа является магнитом для взломщиков, и секретарши, считающие себя программистами, не должны портить саму платформу. У каждой платформы есть свои преимущества и недостатки.

Программисты, которые сетуют на определенные платформы или инструменты или принижают их как «игрушки», с большей вероятностью будут гораздо менее осведомлены о своем ремесле, чем их эго убедило их в этом. Для меня явный признак излишней самоуверенности - слышать, как программист критикует любую среду, которую он лично не использовал достаточно широко, чтобы хорошо знать ее.

* Вставьте сюда практически любой недобросовестный инструмент (VB, PHP и т. д.).

Я согласен по доверенности ... бывший коллега манипулировал производственной системой с поддержкой Access и преобразовал ее в высокоэффективную систему, которая идеально подходила для его нужд. Хотя с появлением других настольных платформ БД, таких как SQL Compact (он же SQL Compact Edition, он же SQL Mobile), Access становится скорее случайным помощником разработчика, чем его инструментом. Это что-то вроде зубочистки - разработчики могут использовать ее, а может быть, даже профессионально (верните мне мой компакт-диск!) ...

STW 22.04.2009 00:14

Я действительно не могу согласиться с PHP, по крайней мере, в дни, когда еще не было asp.net. PHP был серьезным конкурентом классическому ASP, и только после того, как появился ASP.NET и был выпущен IIS 6, PHP начал терять свою функциональность. На мой взгляд, LAMP уничтожил IIS / asp, и, судя по преобладанию серверов Apache, работающих в сети, я бы сказал, что Интернет более или менее согласится.

STW 22.04.2009 00:16

Я получил один комментарий "согласен" и один "не согласен". Я должен, по крайней мере, получить за это голос, поскольку ОП хотел спорные мнения. знак равно

JohnFx 22.04.2009 00:55

disagree.i решил не использовать его, когда мне было 11 лет, потому что autonumber s..ks.

Behrooz 14.12.2009 22:50

Хорошо, я согласен, но им действительно следует стандартизировать SQL. Его хрень работать с конкретными запросами доступа.

JL. 04.04.2010 20:14

@JL: Насколько мне известно, Access SQL - это надмножество ANSI SQL. Таким образом, вам НЕ ОБЯЗАТЕЛЬНО использовать SQL для Access.

JohnFx 04.04.2010 21:09

Весь исходный код и комментарии должны быть написаны на английском языке.

Написание исходного кода и / или комментариев на языках, отличных от английского, снижает возможность повторного использования и затрудняет отладку, если вы не понимаете язык, на котором они написаны.

То же самое касается таблиц, представлений и столбцов SQL, особенно когда используются сокращения. Если они не сокращены, я мог бы перевести имя таблицы / столбца онлайн, но если они сокращены, все, что я могу сделать, это ВЫБРАТЬ и попытаться расшифровать результаты.

Если английский - это основной язык, где бы вы ни работали, я думаю. В противном случае это просто глупо. Это предложение кажется бессмысленным.

Coding With Style 05.07.2009 02:10

Когда вы кодируете ABAP в SAP-системах, всегда забавно читать комментарии на немецком языке, которые никто из немецкоязычных регионов никогда не поймет. (Я носитель немецкого языка, так что это вдвойне забавно)

capfu 23.07.2009 04:52

Все комментарии на английском - это здорово - если вы говорите по-английски, то и сопровождающие тоже. Я носитель английского языка, но иногда использую другие языки только потому, что могу. Если бы я писал код для приложения, которое будет использоваться и в конечном итоге поддерживаться, скажем, во Франции - я бы ожидал, что комментарии будут на французском языке.

warren 22.10.2009 07:57

Использование нескольких языков в коде затрудняет чтение, поскольку вам приходится переключаться между двумя языками в уме. Только английский (с родными терминами, если необходимо, в скобках).

Thorbjørn Ravn Andersen 23.10.2009 23:46

Это не спорный, это просто идиотизм, когда вы знаете, что кусок кода никогда не оставит неофициальный говорящий по-английски страны. Я прекрасно знаю, что мой английский - отстой, и не хочу навязывать его своим соотечественникам-программистам. Конечно, если я цитирую документацию на английском языке, я не перевожу ее.

MaD70 06.11.2009 03:00

Это имеет смысл только для приложений с открытым исходным кодом, в которых вы ожидаете (или надеетесь) получить помощь множества людей со всего мира. В противном случае просто используйте тот язык, который вам больше всего подходит.

hasen 08.03.2010 18:16

Вы, ребята, возможно, не хотите, чтобы ваш код покинул вашу страну, но никто из нас не видит будущего. Наша ERP-система наполовину написана на голландском языке, а половина на английском, потому что голландская компания купила американскую компанию и объединила два разных продукта в один. Откуда мне знать, что означает gbkmut?

Scott 08.03.2010 19:03

Если вы работаете на клиента, и у этого клиента есть набор условий, которые он использует в своей торговле, то ваш код будет их использовать. Если этот клиент не использует английский язык, вам придется переводить его на английский и с английского. Это, вероятно, приведет к ошибкам и недоразумениям. Да, это отстой, добавление норвежских (в моем случае) доменных имен в код, и на некоторое время у вас кружится голова, но, по крайней мере, вы находитесь на той же странице, что и ваш клиент.

Knubo 11.11.2010 22:55

Включить множественное оформление заказа Если мы достаточно улучшим дисциплину разработчиков, мы получим гораздо больше эффективности от этого параметра за счет автоматического слияния системы управления версиями.

Если у вас достаточно дисциплины, вам не нужен контроль версий. Но ни у кого не может быть такой дисциплины.

GoatRider 04.04.2009 17:06

Основная возможность системы управления версиями - вернуться к более раннему состоянию проекта. Текущий средний или крупный программный проект не может работать без него. Хотя включение опции множественного оформления заказа - это лишь моя предпочтительная небольшая настройка.

sesame 09.04.2009 09:23

Задача программирования - это только развлечение, пока это невозможно, то есть до тех пор, пока вы не убедите себя, что сможете успешно ее решить.

Полагаю, поэтому многие из моих проектов заканчиваются наполовину в папке с названием «to_be_continued».

Мое неоднозначное мнение: Объектно-ориентированное программирование сильно переоценено [и рассматривается как серебряная пуля], когда на самом деле это просто инструмент Другой в наборе инструментов, не более того!

Разработчики злоупотребляют базами данных

Слишком часто разработчики хранят данные в СУБД, которые должны быть в коде или в файле (файлах). Я видел таблицу с одним столбцом и одной строкой, в которой хранился «системный пароль» (отдельно от пользовательской таблицы). Я видел константы, хранящиеся в базах данных. Я видел базы данных, которые заставили бы плакать взрослого программиста.

Кодировщики-нарушители испытывают некоторый мистический трепет перед СУБД - база данных может делать все, что угодно, но они не знают, как это работает. Администраторы баз данных практикуют черное искусство. Это также допускает передачу ответственности: "База данных слишком медленная","База данных сделала это" и другие отговорки являются обычным явлением.

Оставленные без внимания, эти кодировщики продолжают разрабатывать базы данных внутри баз данных, системы внутри систем. (У этого антипаттерна есть название, но я забыл, что это такое.)

Полагаю, вы говорите о дизайне базы данных EAV (Entity Attribute Value), который был проклятием моей жизни уже около года :)

spooner 11.01.2010 00:59

Большинство вопросов о программировании на собеседовании бессмысленны. Особенно те, которые придумали программисты.

Это обычный случай, по крайней мере, согласно моему опыту и опыту моих друзей, когда надутый программист, спрашивает вас о какой-то хитрости, которую он неделями искал в гугле. Самое смешное в том, что вы приходите домой и через минуту гуглите. Как будто они часто пытаются избить вас своим сложное оружие вместо того, чтобы проверять, будете ли вы всесторонним и прагматичным командным игроком, с которым можно работать.

Подобная глупость, ИМО, возникает, когда вас просят предоставить очень доступные основы, например: «Ой, подождите, позвольте мне посмотреть, можете ли вы псевдокодировать этот алгоритм insert_name_here на листе бумаги (sic!)». Действительно ли мне нужно помнить об этом при подаче заявления на работу в сфере программирования высокого уровня? Должен ли я эффективно решать задачи или головоломки?

+1 полностью согласен, также обычно во время собеседования они проверяют, являетесь ли вы тем ученым-ракетчиком, который им нужен. Задавать вам всевозможные грубые вопросы. Когда мы получаем работу, вы понимаете, что на самом деле они искали обезьяну-программиста, которая не должна слишком вовлекаться в бизнес-решения. Я знаю, что это не всегда так, но обычно работа, которую вы в конечном итоге делаете, очень проста по сравнению с процессом собеседования, когда можно подумать, что они ищут кого-то, кто разработает органическое ракетное топливо.

JL. 04.04.2010 20:13

Плохие IDE делают язык программирования слабым

Хорошие IDE для программирования действительно упрощают работу с определенными языками и делают ее более контролируемой. Я был немного избалован своей профессиональной карьерой, компании, в которых я работал, всегда имели последнюю готовую к использованию Visual Studio.

Около 8 месяцев я делал много какао рядом с моей работой, и редактор Xcode делает работу с этим языком слишком сложной. Трудно найти перегрузки, а общий способ обработки открытых файлов просто делает ваш экран действительно беспорядочным, очень быстрым. Это действительно обидно, потому что какао - крутой и мощный язык для работы.

Конечно, убежденные фанаты Xcode проголосуют против моего сообщения, но есть так много IDE, которые действительно намного лучше.

Люди, переключающиеся на ИТ, которым просто не следует

Это копия моего сообщения в блоге, сделанного в прошлом году.


Мой опыт в основном касается голландского рынка, но он также может применяться к любому другому рынку.

Мы (поскольку я объединяю всех инженеров-программистов вместе) в настоящее время находимся на рынке, который может нам очень понравиться. Компании отчаянно пытаются заполучить инженеров-программистов (отныне SE) любой ценой. Если вы смените работу сейчас, вы можете требовать практически все, что захотите. В Нидерландах сейчас есть тенденция даже давать в аренду 2 машины с работой, просто чтобы вы работали на них. Насколько это странно? Как я буду водить 2 машины одновременно ??

Конечно, для нас это звучит очень хорошо, но это также создает очень нездоровую ситуацию.

Например: Если вы в настоящее время работаете в быстрорастущей компании и пытаетесь привлечь больше сотрудников, чтобы наконец начать серьезную разработку программного обеспечения с нуля, никого не найти, не предлагая заоблачных зарплат. Очень сложно найти качественных сотрудников. Многих привлекает наша работа из-за хорошей заработной платы, но это также означает, что на наш рынок приходит много людей без должного увлечения.

Страсть, да, думаю, это правильное слово. Когда у вас есть страсть к своей работе, она не остановится в 17:00. Вы будете обновлять все свои RSS-каналы разработки всю ночь. Вы будете искать в Интернете новейшие технологии, которые могут быть интересны для использования на работе. И вы будете начинать около дюжины новых «многообещающих» проектов в месяц, просто чтобы посмотреть, сможете ли вы освоить эту новейшую технологию, о которой только что прочитали пару недель назад (и найти полезный способ ее реального использования).

Без этой страсти рынок мог бы выглядеть очень хорошо (из-за машин, денег и, конечно же, горячих девушек, которых мы привлекаем), но я не думаю, что он будет так интересен, как, скажем, пожарный или летчик-истребитель. .

Может показаться, что я пытаюсь защитить свою работу здесь, и отчасти это правда. Но я также пытаюсь защитить себя от людей, с которыми не хочу работать. Я хочу вести горячие дискуссии о том, о чем читаю. Я хочу иметь возможность спарринговаться с людьми, у которых такая же «страсть» к работе, как и у меня. Мне нужны коллеги, которые работают со мной по правильным причинам.

Где те люди, которых я ищу !!

Какао - это не язык - это API en.wikipedia.org/wiki/Cocoa_(API) в Objective-C

warren 22.10.2009 09:08

Есть только 2 типа людей, которые используют C (/ C++): те, кто не знает другого языка, и те, кому лень учить новый.

Я работал с парнем, который занимался C / C++ в течение 15 лет, и категорически отказался изучать что-либо еще. Он считал детской игрушкой все, кроме C / C++, включая любые управляемые платформы .NET или Java и любые связанные с Интернетом технологии. Поэтому единственное, что он мог программировать, - это настольные приложения Win32. И он очень ясно дал понять, что не собирается изучать ничего нового и будет заниматься C / C++ до выхода на пенсию.

WebMatrix 21.04.2009 18:52

И те, кто считает, что C++ - лучший способ, несмотря на знание Java и C#.

luiscubal 11.07.2009 04:28

Учеба разрушает творчество *

* «Руины» означает «потенциально руины».

Конечно, нужно учиться! Каждому необходимо изучить материал, прежде чем он сможет его использовать - однако все те замечательные идеи, которые у вас были о том, как реализовать определенную стратегию для конкретной области бизнеса, могут быть легко брошены в этот глубокий мозг - пустоту нашего мозга, если мы не будем осторожны .

По мере того, как вы изучаете новые вещи и приобретаете новые навыки, вы также ограничиваете свое мышление этими новыми вещами и навыками, поскольку они, очевидно, являются «способом сделать это». Будучи людьми, мы склонны прислушиваться к авторитетам - будь то учитель, консультант, сотрудник или даже сайт / форум, который вам нравится. Мы должны ВСЕГДА осознавать этот «недостаток» в том, как работает наш ум. Слушайте, что говорят другие люди, но не принимайте то, что они говорят, как должное. Всегда критически относитесь к каждой новой информации, которую вы получаете.

Вместо того чтобы думать: «Ого, это умно. Я буду использовать это с этого момента», мы должны думать «Ого, это умно. Теперь, как я могу использовать это в моем личном наборе навыков и идей».

Комментировать плохо

Когда коду требуются комментарии для объяснения того, что он делает, код слишком сложен. Я стараюсь всегда писать код, который не требует пояснений и не требует большого количества комментариев.

Я собирался проголосовать против, но потом понял, что это ПРЕДПОЛАГАЕТСЯ спорным, и проголосовал за.

GoatRider 04.04.2009 16:52

Я не думаю, что хороший код заменяет комментарии больше, чем комментарии заменяют хороший код. Вы должны сделать и то, и другое. Кроме того, в наши дни есть приличная вероятность, что ваши комментарии вполне могут быть источником документации (и IntelliSense), так что вам лучше привыкнуть к добавлению этих комментариев!

Tim Long 17.05.2009 08:55

Я не знаю, если это действительно спорный, но как об этом: Имена методов и функций - лучший комментарий, который может иметь ваш код; если вы заметили, что пишете комментарий, превратите комментируемый фрагмент кода в функцию / метод.

Это имеет приятный побочный эффект, заставляя вас хорошо разложить вашу программу, позволяет избежать комментариев, которые могут быстро не синхронизироваться с реальностью, дает вам то, что вы можете найти в кодовой базе, и оставляет ваш код свежим лимонным запахом.

Это можно зайти слишком далеко. Часто есть тонкое экономическое обоснование для конкретного метода или стратегии внедрения, которое вы не можете передать без нескольких строк комментариев.

Tom Leys 29.05.2009 01:49

Совершенно верно, но это скорее практическое правило, чем жесткое. В конце концов, указание на тонкости - это то, для чего лучше всего использовать комментарии.

Keith Gaughan 29.05.2009 14:08

HTML 5 + JavaScript станет наиболее часто используемой платформой для программирования пользовательского интерфейса будущего. Flash, Silverlight, Java-апплеты и т. д. Умрут тихой смертью.

Я так не думаю, но очень надеюсь на это!

Zifre 17.05.2009 18:00

Так считает даже генеральный директор Opera news.zdnet.co.uk/software/0,1000000121,39655473,00.htm

HashName 26.05.2009 07:52

Думаю, что смерть флешки будет шумной. :-)

Warren P 01.04.2010 04:24

Я бы не стал проливать слезы на Silverlight, activeX - еще один, который должен умереть!

JL. 04.04.2010 20:09

Программирование находится в зачаточном состоянии.

Несмотря на то, что языки программирования и методологии очень быстро развиваются в течение многих лет, нам еще предстоит пройти долгий путь. Признаки очевидны:

  1. Языковая документация беспорядочно распространяется по Интернету (здесь помогает stackoverflow).

  2. Языки не могут развиваться синтаксически без нарушения предыдущих версий.

  3. Отладка по-прежнему часто выполняется с помощью printf.

  4. Языковые библиотеки или другие формы крупномасштабного повторного использования кода все еще довольно редки.

Очевидно, что все это улучшается, но было бы неплохо, если бы мы все согласились, что это начало, а не конец =).

Я upvoted это, хотя я считаю, что это совершенно бесспорный для всех, кто знает минимум о методологии программирования и истории. Впереди долгий путь, отсюда и множество оскорбительных шуток о способностях программистов по сравнению с архитекторами, пилотами самолетов и т. д.

Konrad Rudolph 12.04.2009 00:18

На самом деле многие скажут обратное. Все, что интересно делать с языками программирования, было сделано в 60-х годах с помощью Lisp. Мы просто ждем людей, чтобы понять это - свидетель растущей популярности Python / Java закрытий и т.д. Так что это является спорным.

nosatalian 31.05.2009 06:37

Отладка printf фактически упоминается в комментарии с более высоким рейтингом в этой ветке как хорошая идея

OJW 07.12.2009 01:10

Никто не заботится о вашем коде

Если вы не работаете над проектом государственной проверки безопасности и не занимаетесь финансами, скорее всего, никого не волнует, над чем вы работаете за пределами своей компании / клиентской базы. Никто не перехватывает пакеты или не пытается взломать вашу машину, чтобы прочитать ваш исходный код. Это не означает, что мы должны легкомысленно относиться к безопасности, потому что, безусловно, есть ряд людей, которые просто хотят нанести общий ущерб и разрушить вашу тяжелую работу или получить доступ к хранимой информации, которая может быть у вашей компании, такой как данные кредитной карты или идентификационные данные в масса. Однако я думаю, что людей слишком беспокоит то, что другие люди получат доступ к вашему исходному коду и воспримут ваши идеи.

Хммм, в общем, вы объединили «не относитесь к себе так серьезно, никто другой» с «ценной не реализация, а идея».

STW 22.04.2009 01:01

... и я забываю "зачем запирать дверь, если кто-то хочет взломать, это еще одна вещь, которую нужно заменить"

STW 22.04.2009 01:02

Я не согласен с вашей оценкой. Если следовать вашей аналогии, это больше похоже на мысль, что кто-то хочет ворваться в ваш дом, чтобы украсть какие-то бревна или сфотографировать вашу коллекцию моделей кораблей, которые вы кропотливо построили, потому что готовые корабли могут быть ценными на открытом рынке. Если они потрудятся взломать, они бы предпочли просто взять ваши деньги или телевизор. В моем третьем предложении ясно сказано, что я считаю, что безопасность по-прежнему важна, но по другим причинам.

brokenbeatnik 22.04.2009 19:30

На создание хорошо документированного кода уходит меньше времени, чем на плохо документированный.

Когда я говорю хорошо задокументированы, я имею в виду комментарии, которые ясно передают ваше намерение на каждом этапе. Да, на ввод комментариев требуется время. И да, ваши коллеги должны быть достаточно умными, чтобы понять, что вы намеревались, просто прочитав ваши описательные функции и имена переменных и прокладывая себе путь через все ваши исполняемые операторы. Но на это у них уходит больше времени, чем если бы вы только что объяснили свои намерения, и четкая документация особенно полезна, когда логика кода оказывается неправильной. Не то чтобы код ваш когда-либо был неправильным ...

Я твердо уверен, что если вы отсчитываете время от момента начала проекта до момента поставки бездефектного продукта, написание хорошо документированного кода займет меньше времени. Во-первых, необходимость четко объяснять, что вы делаете, заставляет вас обдумать это ясно, и если вы не можете написать четкое и краткое объяснение того, что выполняет ваш код, то, вероятно, он плохо спроектирован. И по другой чисто эгоистичной причине, хорошо документированный и хорошо структурированный код намного легче передать кому-то другому для поддержки - таким образом, первоначальному автору предоставляется свобода для создания следующей большой вещи. Мне редко, если вообще когда-либо, приходится прекращать то, что я делаю, чтобы объяснить, как должен работать мой код, потому что это очевидно для всех, кто может читать по-английски (даже если они не умеют читать C / C++ / C# и т. д.). И еще одна причина в том, что, честно говоря, у меня просто не очень хорошая память! Я не могу вспомнить, что я ел вчера на завтрак, не говоря уже о том, о чем я думал, когда писал код месяц или год назад. Возможно, ваша память намного лучше, чем моя, но поскольку я документирую свои намерения, я могу быстро продолжить с того места, на котором остановился, и внести изменения без необходимости сначала выяснять, о чем я думал, когда писал это.

Вот почему я хорошо документирую - не потому, что я чувствую благородное призвание создавать красивый код, пригодный для отображения, и не потому, что я пурист, а просто потому, что это позволяет мне выпускать качественное программное обеспечение за меньшее время.

Это действительно требует меньше времени, но также требует больше навыков, но так обстоит дело со всеми языками, устными или письменными. Слова не имеют значения по наследству, скорее они имеют значения, которые люди ассоциируют с ними. Если бы я прокомментировал, что «коровы ретромингент», подавляющее большинство людей не поняли бы, что я имел в виду, тогда как высказывание «когда корова мочится, уходит назад» дало бы лучшее понимание. Я комментирую быстрее, набирая быстрее :-D

STW 22.04.2009 00:59

... и приношу свои извинения за этот комментарий, но этот термин - одна из немногих вещей, которые я выучил в колледже, поэтому я должен ухватиться за возможность использовать его. Пора мне пережевывать.

STW 22.04.2009 01:00

... что "разъяснение идей" не должно быть исключительной ответственностью разработчика ... и да, xkcd заставил меня использовать эту конкретную фразу ...

Часто нам вручают проекты, которые указаны в «коде», специфичном для псевдо-мета-сортировки, если вы хотите это так называть. Часто есть менеджеры по продукту, которые составляют начальные требования для проекта и выполняют около 0% базовой логической проверки.

Я не говорю, что технический подход не должен разрабатываться архитектором или что конкретная реализация не должна входить в сферу ответственности разработчика, а скорее, что менеджер продукта должен требовать, чтобы их требования логически осуществимы.

Лично я был вовлечен в слишком много «простых» проектов, которые сталкиваются с небольшим смещением объема туда и сюда, а затем наталкиваются на «небольшое» изменение или добавление функции, которые противоречат предыдущим требованиям - явно или неявно. В таких случаях человеку, запрашивающему практически невозможные изменения, очень легко прийти в ярость из-за того, что разработчики не могут воплотить свою мечту в реальность.

Хороший программист ненавидит кодирование

Подобно «Хороший программист - ленивый программист» и «Чем меньше кода, тем лучше». Но следуя этой философии, мне удалось написать приложения, которые в противном случае могли бы использовать в несколько раз больше кода (и занимать в несколько раз больше времени на разработку). Короче: подумайте, прежде чем писать код. Большинство частей моих собственных программ, которые в конечном итоге вызывают проблемы, были частями, которые мне действительно нравились кодировать, и, следовательно, в них было слишком много кода, и поэтому они были написаны плохо. Прямо как этот абзац.

Хороший программист - дизайнер

Я обнаружил, что в программировании используются те же концепции, что и в дизайне (например, те же концепции дизайна, что и в искусстве). Я не уверен, что большинство других программистов находят то же самое правдой; возможно, дело в правом полушарии / левом полушарии. Слишком много программ уродливы, от их кода до пользовательского интерфейса командной строки и графического пользовательского интерфейса, и ясно, что разработчики этих программ на самом деле не были дизайнерами.

Хотя в данном случае корреляция может не подразумевать причинно-следственную связь, я заметил, что по мере того, как я становился лучше в дизайне, я становился лучше в кодировании. Один и тот же процесс создания соответствовать и хорошо чувстовать можно и нужно использовать в обоих местах. Если код не хорошо чувстовать, это вызовет проблемы, потому что либо а) он неправильный, либо б) вы предположите, что он работает таким образом, который «кажется правильным» позже, и тогда он снова будет неправильным.

Искусство и код не находятся на противоположных концах спектра; код может быть использован в искусстве и сам по себе может быть формой искусства.

Отказ от ответственности: к сожалению, не весь мой код красив или "правильный".

Однозначно согласен! Создание красивых приложений требует красивого кода.

Matt 19.12.2009 12:31

Только только что это увидел: согласился на 100%. Уродливый код гораздо чаще содержит ошибки. Для хорошего кодирования необходимо ценить элегантность и красоту.

Keith Williams 09.04.2010 21:13

Инструменты, методология, шаблоны, рамки и т. д. Не заменят должным образом обученного программиста.

Мне надоело иметь дело с людьми (в основном менеджерами), которые думают, что новейший инструмент, методология, шаблон или фреймворк - это серебряная пуля, которая избавит от необходимости нанимать опытных разработчиков для написания своего программного обеспечения. Хотя, как консультант, зарабатывающий на жизнь спасением рискованных проектов, я не должен жаловаться.

Я буду вторым «Не жаловаться». Те, кто управляет на основе идеалистической целесообразности и чувствует хорошие инструменты, всегда попадают в подобные неприятности. К сожалению, я заметил, что независимо от того, сколько раз вы представляете реальность, вам нужны хорошие люди. Счетчики бобов всегда стараются найти дешевый / легкий выход. В конце концов, им всегда приходится откладывать деньги. Они либо понимают, что сделать это правильно с первого раза, либо соглашаются, чтобы это правильно сделал кто-то, кто меняет премию. Иногда намного превышает затраты на то, чтобы сделать это правильно с первого раза.

Axxmasterr 27.07.2009 21:05

«else» вредно.

Что вы предлагаете в качестве альтернативы?

Matt Grande 05.06.2009 23:27

Серия if () s, каждая из которых полностью перечисляет ситуацию, в которой она возникает. Остальное, конечно, только неявно заявляет; читатель должен поддерживать состояние в своей голове, и существует довольно низкий предел, прежде чем люди будут ошеломлены и начнут ошибаться. Другой способ - использовать if (), которые устанавливают переменную состояния, а затем включают это состояние.

user82238 06.06.2009 11:44

Другая проблема здесь - это чтение кода сверху вниз. Множественные elses, особенно с фрагментами кода любого размера, требуют от читателя перемещаться вверх и вниз по коду, сопоставляя elses с if. Я считаю, что гораздо лучше иметь чисто линейный поток кода.

user82238 06.06.2009 11:46

Рассмотрим --if (a) a = false; else print ("x"); - и --if (a) a = false; if (! a) print ("x"); - Это не одно и то же. Что касается проблем с пониманием кода, я считаю, что правильные отступы решают большинство проблем.

luiscubal 11.07.2009 04:30

+1 .. интересный момент .. В университете меня учили - всегда - писать оператор else явно, чтобы улучшить тестируемость (пропущенное предложение else следует рассматривать как выполнение пустого оператора при анализе пути кода), но я согласен с этим для удобства чтения иногда действительно может быть лучше провести рефакторинг.

Wouter van Nifterick 12.07.2009 04:10

@ Ваутер ван Нифтерик: Однако я должен критиковать и эту точку зрения. Если оператор if имеет оператор return, вы можете просто написать код вне if.

luiscubal 17.07.2009 21:40

-1, иначе можно управлять ходом программы - извините за каламбур, но как еще вы собираетесь это делать?

JL. 04.04.2010 20:07

См. Второй комментарий. Что касается вашей точки зрения о потоке программы, все, что вы указали, - это то, для чего еще следует использовать. Это никоим образом не указывает на то, вредно это или нет. GOTO также предназначен для управления ходом выполнения программы. В нем есть свое место (бесконечные циклы), но помимо этого чрезмерное использование вредно.

user82238 04.04.2010 21:09

Что Закон Деметры, рассматриваемый в контексте агрегации и композиции, является анти-шаблоном.

Как это может быть спорным, если большинство из нас не понимали, что вы имели в виду. :-)

Warren P 01.04.2010 04:11

Я считаю, что слишком много людей принимают программные решения и не должны беспокоиться о реализации.

Если вы хотите написать хорошее программное обеспечение, отойдите от компьютера

Идите и общайтесь с конечными пользователями и людьми, которые хотят и нуждаются в программном обеспечении. Только по ним вы поймете, что нужно вашему программному обеспечению и как оно должно это делать.

  • Спросите их, что их любят и ненавидят в существующих процессах.
  • Спросите их о будущем их процессов, к чему они будут стремиться.
  • Пообщайтесь и посмотрите, что они используют сейчас, и выясните, как они используют. Вы должны соответствовать их ожиданиям в отношении использования. Посмотрите, что еще они часто используют, особенно если это им нравится и они могут использовать это эффективно. Сопоставьте это.

Конечному пользователю наплевать, насколько элегантен ваш код или на каком языке он написан. Если он работает для них и им нравится его использовать, вы выигрываете. Если это не сделает их жизнь легче и лучше - они это ненавидят, вы проиграете.

Пройдите милю на их месте - а затем напишите свой код.

Отличный ответ - я всегда стараюсь это делать ... но иногда нужно защищать пользователей от их собственных идей. Потому что, например, В программном обеспечении для бизнеса (финансовом) я всегда сталкиваюсь с некоторыми пользователями, склонными к «творческой бухгалтерии». Хе-хе.

capfu 23.07.2009 04:58

Вот почему мне нравится быть экспертом в предметной области. Всю свою карьеру я работал вместе с людьми, которые используют программное обеспечение того типа, который я пишу.

Jeanne Pindar 17.10.2009 21:42

@Jeanne: То же самое - мой главный проект основан на том, чем я зарабатываю на жизнь. Я много говорю сам с собой.

CAD bloke 18.10.2009 14:40

Никогда не позволяйте передовым практикам или шаблонной одержимости рабством.

Это должны быть руководящие принципы, а не законы, высеченные на камне.

И мне очень нравятся шаблоны, и в книге GoF это тоже более или менее сказано, что нужно пролистывать, обеспечивая общий жаргон. Не евангелие с мячом и цепью.

Кодирование - это искусство

Некоторые люди думают, что кодирование - это искусство, а другие думают, что программирование - это наука.

Фракция «науки» утверждает, что, поскольку целью является получение оптимального кода для ситуации, кодирование - это наука изучения того, как получить этот оптимальный код.

Фракция «искусства» утверждает, что есть много способов получить оптимальный код для ситуации, этот процесс полон субъективности, и что мудрый выбор, основанный на ваших собственных навыках и опыте, - это искусство.

Разработчики электроники всегда будут говорить вам, что проектирование электронных схем - «неточная наука». Я думаю, что с построением компьютерных программ верно обратное - это настоящее искусство. Я думаю, что это отчасти потому, что я не знаю, откуда пришли мои способности к программированию. Сижу за клавиатурой и «так и бывает». Я не следую никаким правилам или процессам, когда пишу код, поэтому это искусство. Но все, что я напишу, должно быть абсолютно правильным, иначе это не сработает. Следовательно, это точное искусство.

Tim Long 17.05.2009 08:46

Если это не родной, это не совсем программирование

По определению программа - это объект, запускаемый компьютером. Он напрямую общается с ЦП и ОС. Код, который не взаимодействует напрямую с ЦП и ОС, а вместо этого запускается какой-либо другой программой, которая взаимодействует напрямую с ЦП и ОС, не является программой; это сценарий.

Это было просто здравым смыслом, совершенно бесспорным, еще до появления Java. Неожиданно появился язык сценариев с достаточно большим набором функций для выполнения задач, которые ранее были исключительно областью программ. В ответ Microsoft разработала платформу .NET и несколько языков сценариев для работы на ней, и ей удалось еще больше замутить воду, постепенно сокращая поддержку истинного программирования среди своих инструментов разработки в пользу сценариев .NET.

Несмотря на то, что он может выполнять множество вещей, для которых вам раньше приходилось писать программы, управляемый код любого разнообразия по-прежнему является сценарием, а не программированием, и «программы», написанные на нем, делают и всегда будут иметь общие характеристики производительности сценариев: они запускаются медленнее и использует гораздо больше оперативной памяти, чем настоящая (родная) программа для выполнения той же задачи.

Люди, называющие это программированием, оказывают всем медвежью услугу, упрощая определение. Это приводит к снижению качества по всем направлениям. Если вы попытаетесь сделать программирование настолько простым, что это сможет сделать любой идиот, в итоге вы получите множество идиотов, которые думают, что они могут программировать.

Для меня это звучит как аргументированная чепуха. Предположим, я компилирую программу, которая удовлетворяет вашему определению ... но затем запускаю ее в VMWare или что-то в этом роде. Это делает его «скриптом», потому что он работает виртуально? Конечно нет. Точно так же, если вы отвергаете Java как «не программирующую», изменится ли ваше мнение, если в какой-то момент кто-нибудь представит «Java CPU» (если такие вещи еще не существуют)? Да, есть много аргументов в пользу того, чтобы не пытаться слишком «заглупить» программирование, но то, как вы это говорите, заходит слишком далеко с много.

Jon Skeet 03.05.2009 11:47

При всем уважении к вам и вашему очевидному интеллекту, я не могу согласиться. ВМ - это просто абстракция оборудования. Программа по-прежнему может работать непосредственно на оборудовании и взаимодействовать с ним. Напротив, если бы кто-то построил процессор Java, вы все равно не смогли бы написать для него ОС или драйверы устройств на Java. (Без указателей и т. д.)

Mason Wheeler 03.05.2009 16:55

Таким образом, он должен иметь возможность выполнять более, чем просто Java, но он все равно сможет выполнять код Java изначально. Станут ли все «непрограммисты» в мире, пишущие сейчас на Java, программистами, по вашему мнению? Извините, я все еще не могу рассматривать это как разумное или полезное разграничение.

Jon Skeet 16.05.2009 00:47

Вы также можете попытаться убедить википедистов, которые, безусловно, включают сценарии как программы, даже не говоря уже о том, является ли Java сценарием или нет: en.wikipedia.org/wiki/Computer_program

Jon Skeet 16.05.2009 00:51

Кажется, я помню, что UCSD Pascal компилировался в p-код, который затем интерпретировался, но Pascal определенно всегда считался языком программирования, а не языком сценариев. У коллектива, в котором я был, также было что-то, что они называли микродвигателем Pascal, который мог выполнять p-код нативно. Таким образом, различие несколько произвольно и не поддается определению.

Tim Long 17.05.2009 08:42

Ну и дела, программист на Delphi, высмеивающий код, работающий на фреймворке! Какой сюрприз! Самообман, элитарное дерьмо.

Ash 06.08.2009 18:33

У Delphi тоже есть фреймворк. Это называется VCL. Разница в том, что это нативный код, который обычно добавляет несколько сотен килобайт в ваше приложение, в отличие от .NET, который добавляет несколько сотен мегабайт зависимостей.

Mason Wheeler 06.08.2009 18:42

Кроме того, как насчет машин Берроуза, на ассемблере которых изначально использовался COBOL?

warren 23.10.2009 08:25

www.ajile.com. Аппаратный ЦП изначально запускает Java в реальном времени с прямым доступом к оборудованию.

Tim Williscroft 09.04.2010 07:46

Иногда можно использовать регулярные выражения для извлечения чего-либо из HTML. Серьезно, возиться с тупым парсером или использовать быстрое регулярное выражение вроде /<a href = "([^"]+)">/? Это не идеально, но ваше программное обеспечение будет работать намного быстрее, и вы, вероятно, можете использовать еще одно регулярное выражение, чтобы убедиться, что полученное совпадение действительно похоже на URL-адрес. Конечно, он хакерский и, вероятно, не работает в некоторых крайних случаях, но его достаточно для большинства случаев использования.

Основываясь на огромном томе «Как использовать регулярное выражение для получения HTML?» вопросы, которые публикуются здесь почти ежедневно, и тот факт, что ответ каждый - «Используйте анализатор HTML», это должно быть достаточно спорным.

Очистка и рефакторинг очень важны в (командной) разработке.

Большая часть работы по развитию команды связана с менеджментом. Если вы используете трекер ошибок, он полезен только в том случае, если кто-то находит время, чтобы закрыть / структурировать вещи и снизить количество заявок. Если вы используете систему управления исходным кодом, кому-то нужно довольно часто здесь очищать и реструктурировать репозиторий. Если вы программируете, то должны быть люди, заботящиеся о рефакторинге ленивых вещей, созданных другими. Это часть большинства аспектов, с которыми некоторые сталкиваются при разработке программного обеспечения.

Все согласны с необходимостью такого управления. И это всегда первое, что пропускают!

+1 - но это не спорный, вы даже отметили, что все согласны :)

Steven Evers 19.06.2009 22:21

Дело не в инструментах, а в тебе

Когда разработчики пытаются сделать что-то новое, например создание UML-диаграмм, диаграмм любого типа или управления проектами, они в первую очередь ищут идеальный инструмент для решения проблемы. После бесконечных поисков в поисках неподходящего инструмента их мотивация иссякает. Все, что осталось, - это жалобы на отсутствие полезного программного обеспечения. Это понимание того, что план, который нужно было организовать, умер из-за отсутствия программного обеспечения.

Что ж, это только вы занимаетесь организацией. Если вы привыкли организовывать, вы можете делать это с помощью программного обеспечения или без него (и большинство из них обходятся без него). Если вы не привыкли организовывать, никто не сможет вам помочь.

Так что «отсутствие правильного программного обеспечения» - это простейшее оправдание того, что мы вообще не организованы.

Я думаю, что это правда, несмотря на то, что люди с этим согласны (разберитесь). Я превращаю себя в отраву, говоря людям, что для настройки производительности вам не нужен инструмент, на самом деле вы можете добиться большего без него.

Mike Dunlavey 31.10.2009 20:42
  1. Хорошая архитектура выращивается, а не проектируется.

  2. Менеджеры должны следить за тем, чтобы члены их команды всегда работали ниже в соответствии с их современным уровнем развития, каким бы ни был этот уровень. Когда люди работают в своей зоне комфорта, они создают более качественный код.

Но если вы никогда не попытаетесь сделать что-то другое, вы никогда не расширите свою зону комфорта. Я обнаружил, что выход из моей «зоны комфорта» доставляет удовольствие (хотя, конечно, не продуктивно, иногда требуется является).

luiscubal 11.07.2009 04:14

switch-case не является объектно-ориентированным программированием

Я часто вижу множество конструкций switch-case или ужасно больших if-else. Это просто знак того, что вы не помещаете состояние туда, где оно принадлежит, и не используете реальную и эффективную конструкцию switch-case, которая уже существует: поиск метода / vtable

Чтобы быть действительно спорным:

Ты ничего не знаешь!

или другими словами:

Я знаю, что ничего не знаю.

(это можно перефразировать по-разному, но я думаю, вы это поняли.)

Начиная с компьютеров / разработки, ИМХО, каждый должен пройти три этапа:

Новичок: ничего не знает (это факт)

Промежуточный: думает, что что-то знает / очень много (/ все) (это тщеславие)

Профессионал: знает, что ничего не знает (потому что, как программист, большую часть времени вы должны работать над вещами, которых никогда раньше не делали). В этом нет ничего плохого: я люблю все время знакомиться с новым.

Я думаю, что как программист вы должны уметь учиться - или лучше: учиться учиться (потому что помните: вы ничего не знаете!;)).

Странная логика, я согласен, будь скромным и учись, но сказать, что ты ничего не знаешь, было бы глупо.

JL. 04.04.2010 20:04

Иногда вам нужно денормализовать свои базы данных.

Мнение, которое не устраивает большинство программистов, но иногда приходится жертвовать такими вещами, как норамлизация, ради производительности.

Аппаратные средства дешевы - логика стоит целое состояние.

Steven Evers 19.06.2009 22:18

Следствие: в большинстве случаев производительность ниже 5NF.

just somebody 15.12.2009 05:23

Плата за программу - это, как правило, одно из худших способов использования мужского времени.

Во-первых, вы соревнуетесь с элбонийцами, которые работают четверть в день. Вам нужно убедить своего работодателя в том, что вы предлагаете то, чего не могут предложить эльбонийцы, и что это стоит достойного заработка. По мере того как элбонийцы получают все больше и больше заграничных дел, реальное преимущество становится все меньше, и руководство это знает.

Во-вторых, вы тратите время на решение чужих проблем. Это время, которое вы можете потратить на продвижение своих интересов или работу над проблемами, которые действительно вас интересуют. И если вы думаете, что спасаете мир, работая над проблемами других мужчин, то почему бы вам просто не заставить эльбонцев сделать это за вас?

И наконец, великие инновации в программном обеспечении (visicalc, Napster, Pascal и т. д.) Были созданы не фермами кабин. Их создавали один-два человека без предоплаты. Вы не можете насильно воссоздать это. Это просто волшебство, которое иногда случается, когда у грамотного программиста действительно хорошая идея.

Софта хватает. Разработчиков программного обеспечения достаточно. Вам не обязательно быть нанимаемым. Сохраните свои таланты, свое время, свои волосы, свой брак. Пусть кто-нибудь другой продаст свою душу клавиатуре. Если вы хотите программировать, хорошо. Но не делайте этого ради денег.

> «И наконец, великие инновации в программном обеспечении (visicalc, Napster, Pascal и т. д.)» - так много примеров обратного, что я даже не стану начинать. Bell labs - это всего лишь одно место. Но если я хорошо читаю между строк, то соглашусь с вами: вам нужна новая работа.

Steven Evers 19.06.2009 22:17

+1. спорная, но интересная точка зрения (по крайней мере, 2 комментатора выше, похоже, не согласны). Если вы спросите меня, Ян сделает несколько хороших замечаний.

Wouter van Nifterick 12.07.2009 04:15

Отражению нет места в производственном коде

Отражение нарушает статический анализ, включая инструменты рефакторинга и проверку статического типа. Отражение также разрушает обычные предположения разработчиков о коде. Например: добавление метода к классу (который не затеняет какой-либо другой метод в классе) никогда не должно иметь никакого эффекта, но когда используется отражение, какой-то другой фрагмент кода может «обнаружить» новый метод и решить назови это. Фактически определить, существует ли такой код, трудно.

Я считаю, что использовать рефлексию и тесты и в генераторах кода - это нормально.

Да, это означает, что я стараюсь избегать фреймворков, использующих отражение. (жаль, что в Java отсутствует надлежащая поддержка метапрограммирования во время компиляции)

Разве это не отрицает возможность разработки приложения, поддерживающего сторонние плагины?

Steven Evers 19.06.2009 22:13

Вы правы, я должен был быть более ясным. Когда я сказал «отражение», я имел в виду java.lang.reflect. Для плагинов вам просто нужны Class.forName () и Class.newInstance (). Я по-прежнему считаю последнее «неприятным запахом» (им злоупотребляют), но если вы внедряете систему со сторонними плагинами, то это лучший способ сделать это.

Laurence Gonsalves 20.06.2009 05:14

Разработчик никогда не должен тестировать собственное программное обеспечение

Разработка и тестирование - две диаметрально противоположные дисциплины. Развитие - это строительство, а тестирование - это снос. Эффективное тестирование требует особого мышления и подхода, при котором вы пытаетесь выявить ошибки разработчиков, найти дыры в их предположениях и изъяны в их логике. Большинство людей, в том числе и я, просто не в состоянии подвергнуть себя и свой собственный код такому вниманию и по-прежнему оставаться объективными.

Вы включаете в это модульное тестирование? Вы не видите ценности в модульном тестировании? Если так, то я не согласен. Я согласен с тем, что разработчик не должен быть тестировщиком Только своего ПО (конечно, там, где это возможно).

Jon Skeet 29.05.2009 10:12

Джон, я говорю с точки зрения, что да, они ДОЛЖНЫ проводить модульное тестирование, но нет, они НЕ должны быть единственными тестировщиками своего кода. Как вы правильно заметили, если они единственные, у них нет особого выбора. Этот вопрос действительно вызвал ваше самое противоречивое мнение, поэтому я думаю, что мое прямо там. Другой ключевой момент заключается в том, что фраза «нам не нужны никакие вонючие тестировщики», потому что «разработчики или кто-то другой может это сделать - тоже совершенно неправильно.

Bruce McLeod 29.05.2009 17:44

Я предлагаю вам перефразировать правило так: «никогда не должны нести ОТВЕТСТВЕННОСТЬ за тестирование собственного программного обеспечения», поскольку ваша текущая формулировка может означать, что вам вообще не разрешено тестировать свои программы.

Thorbjørn Ravn Andersen 23.10.2009 22:17

Многие разработчики не очень хорошо понимают, где что-то размещать, что приводит к беспорядочной организации исходного кода на уровне файлов, классов и методов. Кроме того, значительный процент таких разработчиков по сути глух к вопросам организации кода. Попытки научить, уговорить, запугать или пристыдить их, чтобы они сохранили свой код в чистоте, тщетны.

В любом достаточно успешном проекте, как правило, есть разработчик, обладающий здравым смыслом организации, который незаметно использует метлу для кодовой базы, чтобы сдерживать энтропию.

Мое противоречивое мнение, вероятно, состоит в том, что Джон Кармак (ID Software, Quake и т. д.) Не очень хороший программист.

Не поймите меня неправильно, на мой взгляд, он очень умная программист, но после того, как я заметил строку "#define private public" в исходном коде Quake, я не мог не подумать, что он парень, который выполняет свою работу независимо от того, что, но по моему определению не очень хороший программист :) Это мнение вызвало у меня много жарких дискуссий;)

Если это правда, то я склонен согласиться. Выглядит довольно плохо.

spender 24.06.2009 02:41

Я не знаю многих программ, которые оптимизированы для такого рода производительности, имеют дело с графикой, звуком и всем остальным, (некоторые) платформенно-независимыми, которые по-прежнему являются эта конюшня как doom и quake и все, что создается программным обеспечением id. Действительно. Я желаю, чтобы каждое программное обеспечение было сделано именно так. Даже удобство использования отличное.

Stefan Steinegger 16.11.2009 19:24

Программное обеспечение - это не инженерная дисциплина.

Мы никогда не должны были позволять компьютерам ускользать из математического факультета.

Паттерны проектирования - это плохо.

Собственно, шаблоны дизайна не.

Вы можете написать плохой код и похоронить его под грудой шаблонов. Используйте синглтоны как глобальные переменные, а состояния как goto. Что бы ни.

Шаблон проектирования - стандартное решение конкретной проблемы, но требует, чтобы вы сначала поняли суть проблемы. Если вы этого не сделаете, шаблоны проектирования станут частью проблемы для следующего разработчика.

Самый простой подход - лучший подход

Программисты любят решать предполагаемые или предполагаемые требования, которые повышают уровень сложности решения.

«Я предполагаю, что этот блок кода будет узким местом в производительности, поэтому я добавлю весь этот дополнительный код, чтобы смягчить эту проблему».

«Я предполагаю, что пользователь захочет сделать X, поэтому я добавлю эту действительно интересную дополнительную функцию».

«Если я заставлю свой код решить этот ненужный сценарий, это будет хорошей возможностью использовать эту новую технологию, которую я хотел опробовать».

На самом деле самое простое решение, отвечающее требованиям, лучше всего. Это также дает вам максимальную гибкость в принятии решения в новом направлении, если и когда возникают новые требования или проблемы.

Да, лучший способ сравнить реализации - по количеству строк. Люди не будут повторно использовать ваш код, если он не короче одной страницы.

AareP 13.06.2009 20:03

++ Я не думаю, что это спорно в каком-то смысле - все согласны с этим. Но в другом смысле, это спорно - потому что немногие люди следуют за ним.

Mike Dunlavey 14.10.2009 02:52

Видимо мой - это В Haskell есть переменные. Это и «тривиально» (по крайней мере, восемь пользователей SO) (хотя никто, кажется, не может прийти к единому мнению, какой тривиальный ответ правильный), и плохой вопрос, который даже нужно задавать (по крайней мере пять проголосовавших против и четыре проголосовавших за закрытие). Это). Да, и я (а также ученые-вычислители и математики) ошибаюсь, хотя никто не может дать мне подробного объяснения того, почему.

Хотя я уважаю математику, я бы не согласился. Это не переменные. Это контанты. Переменные должны быть ... ну ... переменными. Я считал, что в Haskell нет переменных, потому что «x = x + 1» невозможно. Вы используете функции, вы не В самом деле меняете значение x. ОДНАКО, в этом сообщении упоминается IORef, так что, возможно, в Haskell делает есть переменные ...

luiscubal 11.07.2009 04:18

Ну, давай ответь на вопрос, который я связал, показывая, почему в определении «double x = x * 2» «x» является константой.

cjs 15.07.2009 22:04

"double x = x * 2" не имеет смысла ни на каком языке. Даже К.

luiscubal 17.07.2009 21:44

Это уравнение, в котором говорится, что левая и правая части эквивалентны (т. Е. «Двойная 3» означает то же, что и «3 * 2»), и это не только имеет идеальный смысл в математике, но и является совершенно правильным кодом Haskell.

cjs 05.08.2009 15:22

Итак, haskell - это однократное присваивание в пределах определенной области видимости, и вы можете «изменить» значение x, только повторно введя новую внутреннюю область видимости, что на самом деле делает «double x = x * 2», верно? Он вообще не меняет значение x, он просто перегружает идентификатор x новым (временным) значением в определенной области.

Warren P 01.04.2010 04:04

Вы никогда не будете использовать достаточное количество языков просто потому, что каждый язык лучше всего подходит только для небольшого класса проблем, а смешивать языки слишком сложно.

Примеры домашних животных: Java следует использовать только тогда, когда спецификация очень хорошо продумана (из-за множества взаимозависимостей, означающих ад рефакторинга) и при работе с конкретными концепциями. Perl следует использовать только для обработки текста. C следует использовать только тогда, когда скорость важнее всего, включая гибкость и безопасность. Пары ключ-значение следует использовать для одномерных данных, CSV для двумерных данных, XML для иерархических данных и БД для чего-либо более сложного.

Я считаю, что фраза «Давайте перепишем прошлое и попытаемся исправить эту ошибку, сделав вид, что ничего не работает» - это ценная мантра отладки в безвыходных ситуациях:

https://stackoverflow.com/questions/978904/do-you-use-the-orwellian-past-rewriting-debugging-philosophy-closed

Повторное использование программного обеспечения - самый важный способ оптимизации разработки программного обеспечения.

Каким-то образом повторное использование программного обеспечения какое-то время казалось модным, но потеряло свое очарование, когда многие компании обнаружили, что просто написание презентаций PowerPoint с лозунгами повторного использования на самом деле не помогает. Они рассудили, что повторное использование программного обеспечения просто недостаточно хорошо и не может оправдать их мечты. Похоже, что это уже не в моде - его заменили многие новички в управлении проектами (например, Agile).

Дело в том, что любой действительно хороший разработчик сам выполняет какое-то повторное использование программного обеспечения. Я бы сказал Любой разработчик, не занимающийся повторным использованием программного обеспечения, - плохой разработчик!

Я на собственном опыте убедился, насколько повторное использование программного обеспечения может обеспечить производительность и стабильность в разработке. Но, конечно, набора PowerPoints и нерешительных признаний руководства недостаточно, чтобы полностью раскрыть потенциал компании.

Я привел ссылку на свою очень старую статью о повторном использовании программного обеспечения (см. Заголовок). Первоначально он был написан на немецком языке, а затем переведен - извините, пожалуйста, если это не так хорошо написано.

Одна из проблем с повторным использованием программного обеспечения заключается в том, что оно требует продвинутых навыков чтения и адаптации, что непросто. Кроме того, использование библиотек в качестве зависимостей может стать кошмаром, если эти библиотеки нестабильны.

luiscubal 11.07.2009 04:21

Да, многим программистам сложно читать на более высоком уровне ;-) Ваше второе замечание - хорошее. Конечно, повторное использование не обходится без ценника. Не то, что думают некоторые компании, что должна быть просто директива о повторном использовании. Это также причина того, почему многие разочаровались в повторном использовании. Что-то даром не работает и в IT!

Juergen 11.07.2009 17:29

Используя Stored Proc, легко поддерживать и меньше развертыватьпротивИспользование ORM - это объектно ориентированный способ, поэтому это хорошо

Я слышал это во многих своих проектах, когда когда-либо появляются такие утверждения, всегда сложно уладить это.

Я не заметил особого объектно-ориентированного подхода в большинстве случаев использования ORM - нужно поддерживать только три уровня (не так много) абстракции.

Dafydd Rees 20.11.2009 18:22

Emacs лучше

Собственно, лучше vi или vim.

David Thornley 14.10.2009 01:27

Только для тех, у кого есть материал в их файле .emacs (который они понимают).

Thorbjørn Ravn Andersen 23.10.2009 22:03

как пользователь vim я должен поставить +1 к этому.

just somebody 15.12.2009 06:28

Что забавно, за последние полтора года я полюбил vi больше.

Reverend Gonzo 11.11.2010 08:20

Меня не волнует, насколько мощным является язык программирования, если его синтаксис не интуитивно понятен, и я не могу отложить его на какое-то время и вернуться к нему без особых усилий для обновления деталей. Я бы предпочел, чтобы сам язык был интуитивно понятным, чем загадочным, но мощным для создания DSL. Компьютерный язык - это пользовательский интерфейс для ME, и я хочу, чтобы он был разработан с учетом интуитивной простоты использования, как и любой другой пользовательский интерфейс.

Понимание того, «что» делать, по крайней мере так же важно, как и знание того, «как» это делать, и почти всегда гораздо важнее, чем знание «лучшего» способа решения проблемы. Знание предметной области часто имеет решающее значение для написания хорошего программного обеспечения.

Ой, я прочитал вопрос раньше, а затем все ответы, и мой вопрос мне показался подходящим. Я просто снова перечитал первоначальный вопрос и не уверен, что он действительно отвечает на него. Удалите его, если нет, и извините за шум.

Bill Hallahan 09.07.2009 03:51

Можно использовать короткие имена переменных

Но не для индексов во вложенных циклах.

Не для индексов во вложенных циклах? Почему? Их легко отличить, когда определение приближается к употреблению. Что ж, я могу думать только о i и j как о плохом выборе, потому что они выглядят так похоже.

Frunsi 15.12.2009 03:30

Потому что легко забыть, какая переменная какому циклу принадлежит.

quant_dev 16.12.2009 10:36

Дефекты и запросы на улучшение одинаковы

Если вы не разрабатываете программное обеспечение по контракту с фиксированной ценой, не должно быть никакой разницы в определении приоритетов вашего невыполненного задания между «ошибками» и «улучшениями» и запросами «новых функций». OK - возможно, это не спорное, но я работал на предприятии ИТ-проекты, где эдикт был то, что «все открытые ошибки должны быть исправлены в следующей версии», даже если это не оставляло времени для разработчиков наиболее желательных новых функций. Таким образом, проблема, с которой столкнулся 1% пользователей, в 1% случаев имела приоритет над новой функцией, может быть немедленно полезна для 90% пользователей. Мне нравится вести весь свой невыполненный проект, оценивать каждый элемент и передавать его сообществу пользователей для определения приоритетов - с элементами, не классифицируемыми как «дефект», «улучшение» и т. д.

Разработка программного обеспечения - это искусство.

почти в случаях все комментарии злые: http://gooddeveloper.wordpress.com/

Вы должны комментировать почему, а не что и как.

reinierpost 17.09.2009 22:41

Рекурсия - это весело.

Да, я знаю, что это может быть неэффективное использование пространства стека и все такое прочее. Но иногда рекурсивный алгоритм настолько хорош и чист по сравнению с его итеративным аналогом. Я всегда немного радуюсь, когда могу где-нибудь скрыть рекурсивную функцию.

«Неэффективное использование пространства стека» - только на дрянных языках. См. en.wikipedia.org/wiki/Tail_recursion

Juliet 14.10.2009 20:51

Вот что здорово быть программистом - дешевые острые ощущения :-) По крайней мере, инженеры-электрики умеют нюхать канифольный дым.

Mike Dunlavey 03.11.2009 22:12

@ Джульетта: Только дерьмовые языки? Значит, все языки, в которых нет хвостовой рекурсии, - дерьмо? Пощади меня.

Stu Thompson 06.11.2009 09:29

Исключения следует использовать только в действительно исключительных случаях.

Похоже, использование исключений стало повсеместным явлением в проектах, над которыми я недавно работал.

Вот пример:

У нас есть фильтры, которые перехватывают веб-запросы. Фильтр вызывает средство проверки, и задача средства проверки - проверить, имеет ли запрос определенные входные параметры, и проверить параметры. Вы устанавливаете поля для проверки, и абстрактный класс проверяет, не являются ли параметры пустыми, а затем вызывает метод screen (), реализованный вашим конкретным классом, для выполнения более расширенной проверки:

public boolean processScreener(HttpServletRequest req, HttpServletResponse resp, FilterConfig filterConfig) throws Exception{           
            // 
            if (!checkFieldExistence(req)){
                    return false;
            }
            return screen(req,resp,filterConfig);
    }

Этот метод checkFieldExistance (req) никогда возвращает false. Он возвращает истину, если ни одно из полей не отсутствует, и выдает исключение, если поле отсутствует.

Я знаю, что это плохой дизайн, но отчасти проблема в том, что некоторые архитекторы считают, что вам нужно генерировать исключение каждый раз, когда вы сталкиваетесь с чем-то неожиданным.

Кроме того, я знаю, что сигнатура checkFieldExistance (req) делает генерирует исключение, это почти все наши методы делают, поэтому мне не приходило в голову, что метод может генерировать исключение вместо того, чтобы возвращать false. Только пока я не копался в коде, я это заметил.

И не забывайте о накладных расходах, связанных с генерированием исключения. Бросок / ловля может быть довольно безвредным с точки зрения производительности для одной операции, но начните зацикливаться на нем и ... блин. Я говорю по собственному опыту.

Tullo_x86 19.09.2009 01:53

Программисты, которые целыми днями отвечают на вопросы о Stackoverflow, вероятно, не выполняют ту работу, за которую им платят.

Является ли это спорно? Думаю, нет! -1!

Philippe Grondier 09.09.2009 11:37

последняя часть весьма спорна

Egg 21.09.2009 18:32

Я использую отговорку: «Я трачу свое время на профессиональное развитие» на том основании, что я учусь чему-то полезному как разработчик. Босс соглашается.

amischiefr 26.10.2009 18:40

Мне сейчас ни за что не платят, как и у Хасена Дж.

Behrooz 14.12.2009 21:59

Я согласен, но в свою защиту я наткнулся на стену и мне нужна передышка, прежде чем снова заняться проблемой.

ravibhagw 08.06.2010 23:56

Мой друг любит использовать отговорку: «Я компилирую».

Dave 18.08.2010 12:45

ХАХА! Скажите это репутации монстров!

Smur 23.12.2010 17:04

Удалить классы. Количество классов (методов классов) в .NET Framework неявно обрабатывает исключение. С тупым работать сложно.

Не используйте ключевые слова для базовых типов, если в языке есть фактический тип. В C# это будет относиться к bool (Boolean), int (Int32), float (Single), long (Int64). int, bool и т. д. не являются фактическими частями языка, а скорее просто «ярлыками» или «псевдонимами» для фактического типа. Не используйте то, чего не существует! И, на мой взгляд, Int16, Int32, Int64, Boolean и т. д. Имеют гораздо больше смысла, чем 'short', 'long', 'int'.

int, bool и т. д., Безусловно, находятся часть языка C#. Они прямо там в спецификации! Они могут не быть частью базовой платформы, но определенно являются частью языка C#.
Jon Skeet 29.07.2009 09:22

Думаю, я имел в виду платформу. * оглядывается * Спасибо за разъяснения!

David Anderson 29.07.2009 10:08

Я вообще придерживаюсь довольно противоречивых, сильных и громких мнений, поэтому вот лишь несколько из них:

«Потому что мы - подразделение / партнер / специалист Microsoft» никогда не является допустимым аргументом.

Компания, в которой я сейчас работаю, позиционирует себя, прежде всего, как специалист по Microsoft. Таким образом, вышеупомянутый аргумент довольно часто встречается, и я еще не видел контекста, в котором он действителен.

Я не понимаю, почему это причина для продвижения технологий и продуктов Microsoft во всех возможных сферах, превыше всего удовлетворенности клиентов и сотрудников и общей прагматики.

Это лишь краеугольный камень моей глубокой ненависти к политике в программном бизнесе.

MOSS (Microsoft Office Sharepoint Server) - это кусок дерьма.

Вроде как вторит первое мнение, но я честно считаю, что MOSS в том виде, в каком он есть, следует убрать с рынка. Лицензирование и установка стоит бесчисленные миллиарды долларов, вызывает у них рвоту по поводу веб-стандартов и в целом делает разработчиков очень недовольными. Мне еще предстоит увидеть проект MOSS, который в целом дал бы положительный результат.

Однако время от времени к нам обращается заказчик и просит решение MOSS.

MOSS = Microsoft Office SharePoint Server?

tuinstoel 02.08.2009 17:01

Как человек, которому иногда приходится программировать для Sharepoint, я заявляю, что ваше второе мнение вовсе не противоречиво.

Chris Cudmore 18.11.2009 23:36

Я согласен на 250% со всем. Говорите, что думаете. Многие люди так смотрят на вещи!

JL. 23.03.2010 07:24

Linq2Sql не так уж и плох

Я наткнулся на множество постов, содержащих хлам Linq2Sql. Я знаю, что это не идеально, но что?

Лично я считаю, что у него есть свои недостатки, но в целом он может быть отличным вариантом для создания прототипов или для разработки небольших и средних приложений. Когда я думаю, сколько времени это спасло меня от написания скучного кода DAL, я не могу жаловаться, особенно учитывая альтернативы, которые у нас были не так давно.

Операторы "больше" (>,> =) должны быть исключены

Некоторое время я пробовал кодировать с предпочтением меньше чем больше, чем больше, и это застряло! Я не хочу возвращаться назад, и я действительно чувствую, что в данном случае каждый должен поступать по-своему.

Рассмотрим общепринятое математическое обозначение диапазона: 0 <= i <10

Теперь это легко аппроксимировать в коде, и вы привыкнете видеть идиому, в которой переменная повторяется в середине, соединенная &&:

if (0 <= i && i < 10)
    return true;
else
    return false;

Когда вы привыкнете к этому шаблону, вы никогда не будете смотреть на глупость как на

if ( ! (i < 0 || i >= 9))
    return true;

снова так же.

С длинными последовательностями отношений стало немного легче работать, потому что операнды имеют тенденцию к неубывающему порядку.

Кроме того, предпочтение operator< закреплено в стандартах C++. В некоторых случаях operator= определяется в терминах этого! (как !(a<b || b<a))

Крик, нет. Если я хочу, чтобы код генерировал исключение, когда строка превышает определенную длину (например), я бы предпочел далеко использовать if (text.Length > 30) { throw new ... }, чем if (!(text.Length <= 30)) { throw new ... }.

Jon Skeet 29.07.2009 20:11
if (30 < text.Length) throw .... - еще один вариант. На самом деле, я предпочитаю (!(text.Length <= 30)), потому что он хорошо сочетается с assert(text.Length <= 30). Подумайте, когда усложняются несколько условий. Сохранение логики проверки ошибок в этом смысле «положительного утверждения» помогает уменьшить логические ошибки. Я знаю, что в первый раз это выглядит немного странно. Это спорно, и я не толкать его на других. Но попробуйте непредвзято, и вам может понравиться больше. Или нет. :-)
Marsh Ray 29.07.2009 20:57

Чтобы быть педантичным, if (text.Length > 30) эквивалентен if (30 <= text.Length), потому что сравнение идет от эксклюзивный до инклюзивный

warren 22.10.2009 08:25

s / эквивалентно / не эквивалентно / я думаю, что вы имели в виду. В любом случае, я никогда не говорил, что эти двое были или не эквивалентны.

Marsh Ray 22.10.2009 19:00

Почему бы просто не вернуть свое if-условие?

GManNickG 12.01.2010 00:42

Я бы сделал, если бы это было действительно то, что нужно. Возможно, мой пример был слишком банальным. Представьте себе что-то более интересное и полезное в телах if / else.

Marsh Ray 12.01.2010 06:51

Это зависит от языка, но в C++ 3 > getAirplane() выдает ошибку компилятора, но getAirplane() < 3 может не зависеть от того, какие конструкторы определены для вашего класса Airplane.

thebretness 26.02.2010 04:00

Функциональное программирование НЕ является более интуитивным и простым в освоении, чем императивное программирование.

В функциональном программировании есть много хороших вещей, но я часто слышу, как функциональные программисты говорят, что легче понять функциональное программирование, чем императивное программирование для людей без опыта программирования. Из того, что я видел, наоборот, люди находят тривиальные проблемы трудными для решения, потому что они не знают, как управлять своими временными результатами и повторно использовать их, когда вы попадаете в мир без состояния.

Спорный? Функциональное программирование - отстой. Это спорно. Однако «функциональное программирование - это сложно». Это тавтология.

Warren P 01.04.2010 04:22

Отчасти это сложно потому, что мы повреждены (предварительно подключены) для нашего итеративного процедурного программирования. Возможно, новичку легче усвоить функциональное программирование, чем процедурное. Есть ли какие-нибудь исследования по этому поводу?

Warren P 01.04.2010 04:23

Микрософт не так плох, как многие говорят.

Всегда следует использовать массивы с отсчетом от 1 вместо массивов с отсчетом от 0. Массивы на основе 0 неестественны, ненужны и подвержены ошибкам.

Когда я считаю яблоки, сотрудников или виджеты, я начинаю с единицы, а не с нуля. Я учу своих детей тому же. Нет такой вещи, как 0-е ​​яблоко, 0-й сотрудник или 0-й виджет. Использование 1 в качестве основы для массива гораздо более интуитивно понятно и менее подвержено ошибкам. Забудьте про плюс-один-минус-один-ад (как мы это называли). Массивы на основе 0 - это неестественная конструкция, изобретенная информатикой - они не отражают реальность, а компьютерные программы должны отражать реальность в максимально возможной степени.

Фактически, массивы, начинающиеся с 0, основаны на реальной адресации указателей, которая связана с расположением памяти.

Paul Nathan 04.08.2009 03:12

Подскажите, пожалуйста, первая минута часа? Я всегда забываю ...

Jon Skeet 04.08.2009 03:35

@ Пол: Согласен! И это совершенно абстрактно и никакого отношения к счету не имеет. @Jon: Первая минута - это одна, когда мы доходим до нее, мы отсчитываем первую минуту. Точно так же, как ваш первый день рождения отмечает ваш первый год жизни. Нет ничего 0-го.

Jack Straw 04.08.2009 03:58

+1 @Jack, это идеальный вид спорный взгляд программирования. Как бы сильно мой внутренний программист не хотел это признавать, вы действительно правы. Это даже побудило Джона Скита вступить в полемику.

Ash 06.08.2009 18:26

Я полностью не согласен с этим мнением, поэтому поддерживаю его.

Theran 24.08.2009 07:54

Это смещение по сравнению с указателем, столб против ограждения по сравнению с сегментом забора. Столбы хорошо подходят для открытых диапазонов, а сегменты - для закрытых диапазонов.

Samuel Danielson 09.09.2009 02:38

Джон скит спит с подушкой под ружьем

Egg 21.09.2009 19:40

0 на основе массивов (по крайней мере для меня) очень естественно, и в самом деле, натуральные числа начинаются с 0. +1 к этому, является veeeeery спорным.

Lucas Gabriel Sánchez 14.10.2009 16:22

Кто сказал, что вам нужно использовать элемент 0, если он не подходит для домена? Вам что не хватает памяти, что вы не можете потратить впустую один элемент?

Jeanne Pindar 16.10.2009 14:44

@Jeanne: Если вы не используете 0-й элемент, по сути, он основан на единице :).

Jack Straw 16.10.2009 20:44

Я истолковал ваш пост так, что компиляторы по умолчанию должны использовать массивы на основе единицы.

Jeanne Pindar 18.10.2009 01:25

+1 У меня часто возникают проблемы в реальных жизненных ситуациях, потому что я так привык считать с нуля.

helpermethod 11.05.2010 17:03

Разработка на .NET - это не программирование. Это просто сшивание чужого кода.

Исходя из опыта программирования, когда вы должны были знать оборудование и где это все еще является жизненно важным требованием в моей отрасли, я рассматриваю языки высокого уровня как простую сборку чужой работы. В этом нет ничего плохого, но разве это «программирование»?

MS сделала монетку, выполнив тяжелую работу и представив «разработчикам» синтаксис символьных инструкций. Кажется, теперь я знаю все больше и больше разработчиков, которые кажутся ограниченными существованием или отсутствием класса для выполнения работы.

Мое мнение исходит из того, что, чтобы быть программистом, вы должны уметь программировать на самом низком уровне, который позволяет ваша платформа. Поэтому, если вы программируете .NET, вам нужно иметь возможность сунуть голову под капот и выработать решение, а не полагаться на кого-то другого, создающего для вас класс. Это просто лень и не квалифицируется как «разработка» в моей книге.

Заявлено, но не аргументировано. -1

Jay 15.08.2009 10:51

Добавил повод к мнению.

user34411 17.08.2009 02:44

Вы можете разбираться в сборке, но понимаете, как работает оборудование? Как электроны попадают в разные ворота, как изготавливаются схемы? Все дело в выборе того, чего вы хотите достичь, и уровня абстракции, необходимого для этого.

Eric 24.08.2009 07:56

Я бы не сказал, что утверждение о том, что некоторые разработчики, которые программируют с использованием .NET (может быть, даже много, может быть даже большинство) просто сшивают, обязательно противоречиво. Черт возьми, я бы, наверное, с тобой согласился. Распространяя это на все, как вы это сделали! Теперь, это спорно! Есть много очень умных инженеров, которые программируют с помощью .NET. Кроме того, я не согласен с тем, что вам нужно иметь возможность программировать на самом нижнем уровне платформы. Вам нужно знать достаточно, чтобы понимать факторы, влияющие на ваше приложение.

Phil 25.09.2009 00:46

Это просто смешно. Позвольте мне возразить: низкоуровневое программирование - это не программирование. Это просто сшивание инструкций процессора вместе.

reinierpost 04.12.2009 23:11

Case and Point - ведущие разработчики Microsoft предпочитают старые методы кодирования - shar.es/aE0Qj

user34411 07.12.2009 03:02

@ Джерард нет, голосование "против" означает, что вы не согласны. Это то, что я делаю со всеми ответами, продвигающими C++, и ответами C понижающими.

user142019 20.12.2010 18:00

Я бы предпочел быть действительно квалифицированным / опытным в более старой технологии, которая позволяет мне эффективно решать проблемы реального мира, в отличие от новых «модных» технологий, которые все еще находятся на стадии подросткового возраста.

Когда появляется много новых технологий, я узнаю о них достаточно, чтобы решить, нужны ли они мне прямо сейчас.

Если нет, я откладываю их в сторону, пока грубые края не будут устранены «первопроходцами», а затем проверяю их снова каждые несколько месяцев / лет.

В каком смысле это неоднозначное мнение?

Ikke 09.09.2009 11:25

@Ikke, почему? Неужели это делает меня динозавром, который не может быть на связи, боится перемен и цепляется за устаревшие и устаревшие технологии? (Я потерял счет тому, сколько проектов, над которыми я работал, используют новые технологии, потому что «они классные» и решат все наши проблемы.)

Ash 10.09.2009 14:05

Я всегда прав.

Или назовите это дизайном путем обсуждения. Но если я что-то предлагаю, вам лучше продемонстрировать, почему я ошибаюсь, и предложить альтернативу, которую вы можете защитить.

Конечно, это работает, только если я разумный. К счастью для вас, я. :)

Это хорошее отношение. Я научился доверять своим инстинктам, а не полагаться на чужой опыт. Мы можем сделать это по-вашему, но сначала вы должны убедить меня, что это хорошая идея.

Dan Dyer 31.08.2009 18:38

Почему это остается мне моим боссом? ;)

Lucas Gabriel Sánchez 14.10.2009 16:20

Проблемы с удобством использования никогда не возникают по вине пользователя.

Я не могу сосчитать, как часто возникала проблема, когда какой-то пользователь делал что-то, что все в команде считали «просто глупостью». Такие фразы, как "зачем кому-то это делать?" или "почему он просто не делает XYZ" обычно всплывает.

Несмотря на то, что многие устали слышать, как я говорю это: если реальный пользователь попытался сделать что-то, что либо не сработало, либо что-то пошло не так, либо привело к неожиданному поведению, тогда это может быть чья угодно вина, но нет - пользователь!

Обратите внимание, что я не имею в виду людей, которые намеренно злоупотребляют программой. Я имею в виду предполагаемую целевую группу программного обеспечения.

Agile - отстой.

Этот WordPress ЯВЛЯЕТСЯ CMS (технически, следовательно, действительно).

https://stackoverflow.com/questions/105648/wordpress-is-it-a-cms

Не совсем так, это CMS, ориентированная на ведение блога. Like MySpace - это социальная сеть, ориентированная на музыку. И оба они ужасны.

user142019 20.12.2010 17:55

«Жемчуг программирования» Джона Бентли больше не является полезным фолиантом.

http://tinyurl.com/nom56r

Интересное мнение. Думаю, в деталях я согласен, но с точки зрения общего отношения, я думаю, мы можем извлечь из этого урок. Я думаю, что мы, программисты, склонны бегать по каналам, а Джон проявляет изобретательность и ставит под сомнение принятую «мудрость». (Не говоря уже о веселье.)

Mike Dunlavey 14.10.2009 02:41

будучи чрезвычайно знакомым с синтаксисом C, перенесенным на многие языки. И любой, кто думает, что это нацелено на аспирантов, не в духе - я знаю только человека один, который читал это в аспирантуре. Почти все Я знаю, кто прочитал это и / или владеет копией, сделал это либо до окончания колледжа, либо потому, что они перешли на разработку из другой области, либо потому, что просто хотели.

warren 23.10.2009 08:20

Delphi - это весело

Да, я знаю, что он устарел, но Delphi был и остается очень интересным инструментом для разработки.

Мы по-прежнему пишем на Delphi для нашего бизнеса. Много профессионалов Delphi :)

Tom A 10.10.2009 23:25

Delphi - это не просто развлечение, это лучший способ создавать приложения для Windows. Если вы хотите сказать что-то спорное, устаревшее немного поможет вам голос. Устарело? Ага. Юникод. Скоро появится кроссплатформенная версия. 64 бит скоро появится. Больше разработчиков в Embarcadero создают и совершенствуют, чем когда-либо в истории Delphi. Ага. Устаревший. BLEAH!

Warren P 01.04.2010 04:21

Я думаю, что Java должна была поддерживать специфичные для системы функции через тонкие оболочки собственных библиотек.

Другими словами, я думаю, что решение Sun потребовать, чтобы Java поддерживала только переносимые функции, было большой ошибкой с точки зрения почти всех.

Миллион лет спустя появился SWT и решил основную проблему написания портативного пользовательского интерфейса с родными виджетами, но к тому времени Microsoft была вынуждена внедрить Java в C#, и было написано множество C++, которые в противном случае можно было бы сделать на цивилизованной Java. Теперь мир работает на смеси C#, VB, Java, C++, Ruby, Python и Perl. Все программы на Java по-прежнему выглядят и действуют странно, за исключением программ SWT.

Если бы Java вышла с тонкими оболочками для собственных библиотек, люди могли бы написать SWT-эквивалент полностью на Java, и мы могли бы, по мере развития событий, создавать переносимые, очевидно, нативные приложения на Java. Я полностью сторонник переносимых приложений, но было бы лучше, если бы эта переносимость была достигнута на открытом рынке библиотек пользовательского интерфейса промежуточного программного обеспечения (и других функций), а не путем простого сокращения меню пользователя до ненужного или подделки пользовательского интерфейса с помощью Swing.

Я полагаю, Sun думала, что ISV пострадают из-за ограничений Java, и тогда все новые приложения для ПК в мире волшебным образом будут работать на Suns. Хорошая попытка. Они закончили тем, что не получили приложения И не получили взлета языка, пока мы не смогли использовать его только для логического серверного кода.

Если бы все было по-другому, возможно, локальное приложение не было бы мертвым.

Языки более низкого уровня не подходят для большинства задач.

Программисты никогда не должны касаться Word (или PowerPoint)

Если вы не разрабатываете слово или инструмент для обработки документов, вам не следует прикасаться к текстовому процессору, который испускает только двоичные капли, и в этом отношении:

Сгенерированные файлы XML находятся двоичные капли

Программисты должны писать текстовые документы. Документы, которые пишет программист, должны отражать только намерение, а не форматирование. Он должен производиться с помощью цепочки инструментов программирования: редактор, контроль версий, утилиты поиска, система сборки и тому подобное. Когда у вас уже есть эта цепочка инструментов и вы знаете, как ее использовать, любой другой инструмент для создания документов - это ужасная трата времени и усилий.

Когда есть необходимость создать документ для непрограммистов, следует использовать облегченный язык разметки, такой как reStructuredText (если вы пишете простой текстовый файл, вы, вероятно, все равно пишете свою собственную облегченную разметку) и генерируете HTML, PDF , S5 и др. Из него.

Программное обеспечение - отстой из-за отсутствия разнообразия. Не обижайтесь на какую-либо расу, но все работает хорошо, когда профессия состоит из разных рас и обоих полов. Просто посмотрите на чрезмерное использование невозобновляемой энергии. Все идет отлично, потому что вносят свой вклад каждый, а не только "стереотипный парень".

Я согласен с тем, что программирование - это привилегированная работа белых воротничков, которая привлекает привилегированных людей, и что это клуб старых мальчиков. Но на самом деле это сказывается только на качестве жизни на рабочем месте (НЕТ, я не хочу говорить об аниме на работе), а не на качестве программного обеспечения.

temp2290 14.10.2009 01:30

Вау ... Я не знаю, где вы работаете (и нет, не то, что «вы люди»). Последние несколько мест, где я работал, разноплановые и определенно не привилегированное положение. Может быть, если вы программист на COBOL из 60-х ...

Joseph Ferris 29.10.2009 22:14

Вы должны знать C, чтобы называть себя программистом!

Совершенно не согласен. C - это не все, что нужно для программирования. До него было много языков, а после него много языков, которые лучше подходят для различных ситуаций, чем C. Кроме того, программирование - это аналитическое решение проблем, а не просто написание кода на определенном языке.

Jasarien 14.10.2009 01:36

Как и Ясариен, я полностью не согласен. C - это другой язык, это НЕ язык.

Lucas Gabriel Sánchez 14.10.2009 16:19

На самом деле C - это в значительной степени САМЫЙ язык для некоторых задач, хотя, конечно, не для всех. В Интернете есть много документации и руководств, особенно по низкоуровневым материалам, которые труднее понять без знания C.

luiscubal 15.10.2009 22:15

C использует больше людей, чем любой другой язык, и он используется в большем количестве проектов, чем любой другой язык.

Rob 30.10.2009 15:37

согласовано. Интересно, можете ли вы назвать себя программистом, если знаете D, а не C? (D ничего не скрывает от вас, как C).

user34537 24.12.2009 12:05

Зависит от того, что вы хотите сделать. Приложения с графическим интерфейсом Windows высокого уровня не должны разрабатываться на C, программирование ICU низкого уровня требуется.

Petah 15.10.2010 06:50

Сборка мусора переоценена

Многие считают внедрение сборки мусора в Java одним из самых больших улучшений по сравнению с C++. Я считаю введение в лучшем случае очень незначительным, хорошо написанный код C++ выполняет все управление памятью в нужных местах (с помощью таких методов, как RAII), поэтому нет необходимости в сборщике мусора.

Сторонники сборки мусора страдают нездоровой одержимостью одним конкретным ресурсом, когда RAII охватывает их все.

Integer Poet 15.03.2010 22:49

Ленивые программисты - отстой. GC - для ленивых программистов. Вывод: вы совершенно правы, Андерс Руне Йенсен.

user142019 20.12.2010 17:58

C должен умереть.

Добровольное программирование на C, когда доступен другой язык (например, D), должно наказываться за пренебрежение.

Не согласен. Если C - это язык, на котором вам удобнее, и он подходит для этой задачи, то C - это язык, на котором вам будет лучше всего развиваться. Если вы уже хорошо владеете C, тогда зачем тратить время на изучение D (как вы это выразились), смогли бы вы выполнить задачу в соответствии с приемлемым стандартом, используя C?

Jasarien 14.10.2009 01:38

Ответ очень прост: вам и другим людям навсегда придется убирать то, что D помогает вам предотвратить в вашем коде C, если только вы не принадлежите к верхним 0,5% программистов на C, которые никогда не допускают таких ошибок. (может быть 0,05%, я не уверен). Конечно, есть инструменты для C, которые также помогают предотвратить такие ошибки. Проблема в том, что нельзя рассчитывать на то, что их использовали другие люди.

reinierpost 14.10.2009 17:47

QA можно проводить хорошо, в течение длительного времени, без изучения всех форм тестирования.

Кажется, что у многих мест есть «подход», «как мы это делаем». Похоже, что это неявно исключает другие подходы.

Это серьезная проблема в долгосрочной перспективе, потому что основная функция QA - регистрировать ошибки и исправлять их.

Вы не сможете сделать это хорошо, если не найдете как можно больше ошибок. Когда вы исключаете методологии, например, будучи слишком зависимыми от черного ящика, вы начинаете игнорировать целые классы обнаруживаемых ошибок кодирования. Это означает, что вы косвенно делаете целые классы ошибок кодирования неисправимыми, за исключением случаев, когда кто-то другой натыкается на это.

Основная проблема часто кажется менеджментом + персоналом. Менеджеры с этой проблемой, кажется, имеют узкое представление об информатике и / или ценностных предложениях своей команды. Они склонны создавать команды, отражающие их подход и белый список методов тестирования.

Я не говорю, что вы можете или должны делать все постоянно. Посмотрим правде в глаза, некоторые методы тестирования для данного продукта просто будут пустой тратой времени. И некоторые методологии более полезны на определенных уровнях зрелости продукта. Но я думаю, что испытывающим организациям не хватает способности бросать вызов самим себе, чтобы узнать что-то новое и применить это к своей общей производительности.

Вот гипотетический разговор, который подводит итог:

Me: You tested that startup script for 10 years, and you managed to learn NOTHING about shell scripts and how they work?!

Tester: Yes.

Me: Permissions?

Tester: The installer does that

Me: Platform, release-specific dependencies?

Tester: We file bugs for that

Me: Error handling?

Tester: when errors happen to customer support sends us some info.

Me: Okay...(starts thinking about writing post in stackoverflow...)

Детальные проекты - пустая трата времени, и если они нужны инженеру для достойной работы, то их не стоит использовать!

Хорошо, вот пара идей:

1) старая идея разработки водопад, когда вы якобы делали весь свой дизайн заранее, в результате чего получали некоторые прославленные чрезвычайно подробные диаграммы классов, диаграммы последовательностей и т. д. И т. Д., Была пустой тратой времени. Как я однажды сказал коллеге, я закончу с дизайном, как только код будет готов. Я думаю, что это отчасти признание того, что agile - это то, что код - это дизайн, и что любой достойный разработчик постоянно занимается рефакторингом. Это, конечно, делает смехотворной идею о том, что ваши диаграммы классов устарели - они всегда будут такими.

2) менеджмент часто думает, что вы можете с пользой взять плохого инженера и использовать его как «обезьяну кода» - другими словами, они не особенно талантливы, но черт возьми, вы не можете использовать их для написания кода. Ну нет! Если вам нужно потратить столько времени на написание подробных спецификаций, что вы в основном указываете код, тогда будет быстрее написать его самостоятельно. Вы не экономите время. Если разработчик недостаточно умен, чтобы использовать собственное воображение и суждение, его не стоит использовать. (Обратите внимание, я не говорю о младших инженерах, способных учиться. Многие «старшие инженеры» попадают в эту категорию.)

++ Я сравниваю составление спецификации с вождением машины ночью в тумане. Вы можете видеть только так далеко вперед, и увеличение яркости света не помогает. Предоставление информации просто ограничено. Стоит получить как можно больше, но на самом деле вам нужно уметь адаптироваться, когда по мере вашего продвижения станет доступным больше информации.

Mike Dunlavey 24.10.2009 01:04

... Мне однажды вручили такой дизайн. Документ дизайна был толщиной около 2 дюймов на бумаге и предполагал, что на проявку уйдет 18 мм. Я уговорил их написать генератор кода. конечный источник был толщиной 1/2 дюйма, толщиной 4 мм и отличной производительностью.

Mike Dunlavey 24.10.2009 01:07

... Вот почему я верю в прототипирование, быстрое или нет. Когда я разрабатываю какой-то новый продукт, мне нравится иметь возможность сделать как минимум 3 одноразовые версии, потому что так я могу заглядывать глубже в туман. Хороший пост!

Mike Dunlavey 30.10.2009 17:50

Спасибо, Майк, и согласен с тем, что вы говорите - непрактично ожидать, что у вас будет возможность получить весь дизайн сразу - вам нужно `` что-то попробовать '', а затем переработать его, когда вы узнаете больше о требованиях и обоих как лучше всего его реализовать, а часто и как лучше всего использовать технологии, которые вы используете.

Phil 30.10.2009 22:39

При создании модульных тестов для уровня доступа к данным данные следует извлекать непосредственно из БД, а не из имитирующих объектов.

Учтите следующее:

void IList<Customer> GetCustomers()
{
  List<Customer> res = new List<Customer>();

  DbCommand cmd = // initialize command
  IDataReader r = cmd.ExecuteQuery();

  while(r.read())
  {
     Customer c = ReadFiledsIntoCustomer(r);
     res.Add(c);
  }

  return res;
}

В модульном тесте для GetCustomers должен ли вызов cmd.ExecuteQuery () действительно обращаться к БД или его поведение должно быть высмеянным?

Я считаю, что вы не должны имитировать фактический вызов БД, если верно следующее:

  1. Есть тестовый сервер и схема.
  2. Схема стабильна (то есть вы не ожидаете серьезных изменений в ней)
  3. DAL не имеет интеллектуальной логики: запросы строятся тривиально (конфигурация / сохраненные процедуры) и логика десириализации проста.

По моему опыту, большое преимущество этого подхода заключается в том, что вы можете взаимодействовать с БД на ранней стадии, испытывая «ощущения», а не только «внешний вид». Впоследствии это избавит вас от многих головных болей и является лучшим способом ознакомиться со схемой.

Многие могут возразить, что как только поток выполнения пересекает границы процесса, он начинает считаться модульным тестом. Я согласен, что у него есть свои недостатки, особенно когда БД недоступна, а затем вы не можете запустить UT.

Однако я считаю, что во многих случаях это должно быть допустимым.

Блокнот - отличный текстовый редактор. (И иногда Wordpad для разрывов строк, отличных от Windows)

  • Редактировать файлы конфигурации
  • Просмотр файлов журнала
  • Разработка

Я знаю людей, которые действительно верят в это! Однако они будут использовать IDE для разработки, но продолжат использовать Блокнот для всего остального!

Это справедливо, Блокнот хорош в том, что он делает, и то, что он делает, - это редактирование простого текста. Однако, когда вы редактируете файлы конфигурации, вам нужно что-то, что немного лучше справляется с отступами, возможно, некоторая подсветка синтаксиса. С файлами журнала поиск по регулярным выражениям неоценим.

Jasarien 14.10.2009 01:28

да, и именно поэтому я использую отличный редактор EditPlus www.editplus.com !!

Dal 22.10.2009 19:48

Вот почему я использую только текстовую панель! www.textpad.com замечательно для старых скулеров!

crosenblum 04.01.2010 23:01

Все менеджеры проектов должны иметь задачи по кодированию.

В командах, в которых я работал, где менеджер проекта был на самом деле программистом, который понимал технические проблемы кода достаточно хорошо, чтобы выполнять задачи кодирования, принимаемые решения не имели коммуникативного разрыва, что часто случается в командах, в которых менеджер проекта не участвует. в коде.

вы: «босс, код, который вы только что зарегистрировали, не соответствует норме. Пожалуйста, приведите его в соответствие со стандартом, или мне придется отказаться от него». он: "о том повышении, которое вы хотели ..."

just somebody 15.12.2009 04:24

Проекты разработки обречены на провал, если команде программистов не будет предоставлено полное право принимать все решения, связанные с используемой технологией.

Мое самое противоречивое мнение о программировании заключается в том, что поиск проблем с производительностью - это не измерение, это захват.

Если вы охотитесь за слонами в комнате (в отличие от мышей), нужно ли вам знать, насколько они велики? НЕТ! Все, что вам нужно сделать, это посмотреть. Их очень легко найти! Необязательно предварительно их измерять.

Идея измерения была общепринятой, по крайней мере, с момента публикации статьи о гпроф. (Сьюзан Л. Грэм и др., 1982 г.) *, когда все это время прямо у нас под носом был очень простой и прямой способ найти код, который стоит оптимизировать.

В качестве небольшого примера, вот как это работает. Предположим, вы берете 5 случайных выборок из стека вызовов и случайно видите конкретную инструкцию в 3 из 5 выборок. О чем тебе это говорит?

.............   .............   .............   .............   .............
.............   .............   .............   .............   .............
Foo: call Bar   .............   .............   Foo: call Bar   .............
.............   Foo: call Bar   .............   .............   .............
.............   .............   .............   Foo: call Bar   .............
.............   .............   .............   .............   .............
                .............                                   .............

Он сообщает вам, что программа тратит 60% своего времени выполнение работы, требуемой этой инструкцией. Удаление удаляет те 60%:

...\...../...   ...\...../...   .............   ...\...../...   .............
....\.../....   ....\.../....   .............   ....\.../....   .............
Foo: \a/l Bar   .....\./.....   .............   Foo: \a/l Bar   .............
......X......   Foo: cXll Bar   .............   ......X......   .............
...../.\.....   ...../.\.....   .............   Foo: /a\l Bar   .............
..../...\....   ..../...\....   .............   ..../...\....   .............
   /     \      .../.....\...                      /     \      .............

Грубо.

Если вы можете удалить инструкцию (или вызвать ее намного реже), это примерно в 2,5 раза быстрее. (Обратите внимание - рекурсия не имеет значения - если слон беременен, он не меньше.) Затем вы можете повторять процесс, пока действительно не приблизитесь к оптимуму.

  • Это не требовало точности измерения, времени работы, подсчета вызовов, графиков, сотен выборок, любой из типичных профилей.

Некоторые люди используют это, когда у них возникают проблемы с производительностью, и они не понимают, в чем дело.

Большинство людей никогда о нем не слышали, а когда слышат о нем, думают, что это просто низший способ отбора проб. Но это совсем другое, потому что он выявляет проблемы, давая стоимость сайты звонков (а также инструкции терминала) в процентах от настенные часы. Большинство профилировщиков (не все), используют ли они выборку или инструменты, этого не делают. Вместо этого они дают множество сводных измерений, которые, в лучшем случае, указывают на возможное местонахождение проблем. Вот более подробный обзор различий.

* Фактически в этой статье утверждалось, что цель гпроф состояла в том, чтобы «помочь пользователю оценить альтернативные реализации абстракций». Он не претендовал на то, чтобы помочь пользователю найти код, требующий альтернативной реализации, на более тонком уровне, чем функции.


Мой второй наиболее спорным мнение это, или это может быть, если бы это было не так трудно понять.

Я могу добавить еще один тип реакции: «Это отличный метод, но почему бы не использовать один из инструментов, который его автоматизирует?»

Crashworks 03.11.2009 08:31

@Crash: Счастливого Хэллоуина! Вы правы, это еще одна реакция, которую я получаю, и, конечно же, ответ: «Могли бы, если бы они были». Я не хочу многого: 1) делать снимки стека и сохранить, 2) ранжировать операторы (не функции) по инклюзивному времени (т.е.% образцов, содержащих их), 3) позволять вам выбирать репрезентативные снимки стека и изучать их.

Mike Dunlavey 03.11.2009 16:49

... Я построил его давным-давно, чтобы он работал под DOS. Он не выполнял (3), но имел «вид бабочки» между операторами (не функциями). Реальная ценность заключалась в том, что он сосредоточил бы мое внимание на дорогостоящих сайтах вызовов, а затем я брал образцы вручную, пока один из них не обнаруживался под отладчиком, и тогда я действительно мог посмотреть, что происходит, потому что просто зная местоположение было недостаточно.

Mike Dunlavey 03.11.2009 16:53

... в качестве недавнего примера, это приложение C# требует времени на запуск. Полдюжины снимков стека показывают, что примерно половина времени тратится на поиск строк в ресурсе и их преобразование в строковые объекты, чтобы их можно было интернационализировать. То, что образец стека сам по себе не показывает, - это то, как часто строка оказывается чем-то, что вы никогда не захотите интернационализировать, что в данном случае в большинстве случаев. Простое обнаружение медленной функции или просмотр чисел после прогона никогда не выявят этого.

Mike Dunlavey 03.11.2009 16:59

@Crash: На самом деле есть инструмент под названием RotateRight / Zoom, который близок к тому, чтобы сделать это, как я считаю правильным. Он принимает и сохраняет стекшоты. Вы можете вручную контролировать, когда он сэмплирует. Он имеет вид бабочки, который может работать на уровне операторов. Это дает вам общее время в процентах, то есть долю отсчетов, содержащих строку.

Mike Dunlavey 12.12.2009 07:27

Люди с низким порогом скуки могут нажать Ctrl+C через одну секунду, что может не быть репрезентативным примером программы в целом.

Andrew Grimm 11.02.2010 05:17

@ Andrew-Grimm: Устранение проблемы сэкономит%. Выберите%. 20%, 50%, 90%, 10%? Как бы то ни было, это (по крайней мере) вероятность того, что каждый ^C увидит это. Один из способов - взять 20 образцов - это покажет 20 * x% / 100. Другой способ - просто брать образцы, пока что-то не появится более одного раза. Гарантированно большой.

Mike Dunlavey 15.02.2010 23:00

... один выборки недостаточно пока не вы знаете, что существует большая (высокий процент) проблема. В пределе, если вы знаете, что существует бесконечный цикл, достаточно одного образца, чтобы увидеть его. В общем, вы не знаете, поэтому возьмите несколько образцов.

Mike Dunlavey 16.02.2010 00:26

Если все, что вас интересует, это «достаточно ли места в этой комнате», то вам определенно нужно знать, насколько велики слоны. Измерение и захват хорошо сочетаются друг с другом - вам не нужно ограничивать себя использованием только одного метода.

Jon Skeet 22.03.2010 22:53

@Jon: Это просто метафора, которую я использую, чтобы понять, что если что-то занимает слишком много времени, stackshots могут найти проблему с точностью местоположения, но не обязательно с точностью измерения времени. Я видел один профилировщик, который делает это (Zoom), но не видел их всех. В основном я фанат ортогонального мышления о настройке производительности - ожидая больших факторов ускорения, которые обычно представляют собой строки кода в середине стека, делающие то, чего вы не осознавали.

Mike Dunlavey 22.03.2010 23:42

@Jon ... и есть центральный феномен, о котором я никогда не слышал в SO (увеличение), и это путь к большому ускорению. Если есть серия проблем, составляющих 50%, 25%, 12,5%, 6,25% времени, каждый раз, когда вы исправляете самую большую из них, остальные становятся вдвое больше (поэтому их легче найти). Если какой-либо из них по пути не может определить ваш профилировщик, вы застряли и не получаете полного ускорения.

Mike Dunlavey 23.03.2010 00:00

@Mike: Совершенно верно. Большинство профилировщиков, которые я использовал, имеют показывали цифры как «процент времени, затраченного на метод», заметьте - тоже с необработанными цифрами, но они не так полезны. Но да, можно найти большие ускорения. Недавно нашел в Noda Time :)

Jon Skeet 23.03.2010 00:53

@Jon: Верно. Что мне нравится в Zoom, так это то, что он дает вам% времени (настенные часы) на уровне строки кода, он игнорирует рекурсию (ура!) И имеет вид бабочки, хотя это бабочка на уровне функций, а не на уровне строки. Но, тем не менее, эти вещи милые и полезные, но когда мне нужно провести серьезную настройку, тот факт, что вы можете видеть все переменные и вы можете читать Зачем из отдельных образцов стека, это то, что для меня делает вся разница для ручного метода. Ваше здоровье.

Mike Dunlavey 23.03.2010 02:01

Нет разницы между разработчиком программного обеспечения, кодером, программистом, архитектором ...

Я проработал в отрасли более 10 дрожжей и до сих пор считаю совершенно идиотским пытаться различать эти «роли». Вы пишете код? Вы разработчик. Вы тратите весь день на рисование причудливых диаграмм UML. Ты ... ну ... я понятия не имею, кто ты, ты, наверное, просто пытаешься кого-то впечатлить. (Да, я знаю UML).

  • Скоро будем программировать на мир без базы данных.

  • АОП и внедрение зависимостей - это GOTO 21 век.

  • Создание программного обеспечения - это социальная Мероприятия, не технический.

  • У Джоэла есть блог.

Процитируем покойного Э. В. Дийсктру:

Программирование - одна из самых сложных областей прикладной математики; Более бедным математикам лучше оставаться чистыми математиками.

Компьютерные науки - это не больше компьютеров, чем астрономия - телескопы.

Я не понимаю, как можно претендовать на звание настоящего программиста, не имея возможности решать довольно простые математические задачи, такие как Вот этот. Обезьяна CRUD - возможно, но не программист.

Настоящий программист любит open-source как родственную душу и любит Microsoft как грязную, но удовлетворяющую проститутку.

Ха-ха очень смешно. Хороший :)

JL. 04.04.2010 19:10

«Программисты должны заниматься программированием на стороне, иначе они никогда не будут так хороши, как те, кто это делает».

Как сказал кполлок, представьте, что вы говорите это для врачей или солдат ...

Главное не столько в том, программируют ли они, сколько в том, думают ли они об этом. Вычислительная техника - это интеллектуальное упражнение, вам не обязательно писать код, чтобы думать о проблемах, которые делают вас лучше как программиста.

Не похоже, чтобы Эйнштейн играл с частицами и волнами, когда он не занимался исследованиями.

Верно. Я часто думаю о проблемах программирования в постели, лежа на моем боковая сторона.

Mike Dunlavey 14.10.2009 20:11

@Mike Я все время думал об ассемблере в постели. Но спасибо, что указали на опечатку;)

Calyth 14.10.2009 20:25

Программистам следует любой ценой избегать сокрытия метода посредством наследования.

По моему опыту, практически каждое место, где я когда-либо видел, как унаследованный метод скрытия используется, вызывает проблемы. Скрытие метода приводит к тому, что объекты ведут себя по-разному при доступе через ссылку на базовый тип по сравнению со ссылкой на производный тип - как правило, это плохо. Хотя многие программисты формально не знают об этом, наиболее интуитивно ожидают, что объекты будут придерживаться Принцип замены Лискова. Когда объекты нарушают это ожидание, многие из предположений, присущих объектно-ориентированным системам, могут начать терять свою актуальность. Самые вопиющие случаи, которые я видел, - это когда скрытый метод изменяет состояние экземпляра объекта. В этих случаях поведение объекта может изменяться незаметным образом, что затрудняет отладку и диагностику.

Хорошо, поэтому могут быть некоторые нечастые случаи, когда скрытие метода действительно полезно и выгодно - например, имитация ковариантности возвращаемого типа методов на языках, которые его не поддерживают. Но в подавляющем большинстве случаев, когда разработчики используют метод сокрытия, это происходит либо по незнанию (или случайно), либо как способ обойти какую-то проблему, которая, вероятно, заслуживает более тщательного рассмотрения. В общем, я видел полезные случаи сокрытия метода (не говоря уже о том, что других нет), когда метод без побочных эффектов, который возвращает некоторую информацию, скрыт тем, который вычисляет что-то более применимое к контексту вызова.

Такие языки, как C#, немного улучшили ситуацию, потребовав ключевое слово new для методов, скрывающих метод базового класса - по крайней мере, помогая избежать непроизвольного использования скрытия метода. Но я считаю, что многие люди до сих пор путают значение new со значением override - особенно потому, что в простых сценариях их поведение может казаться идентичным. Было бы неплохо, если бы такие инструменты, как FxCop, действительно имели встроенные правила для выявления потенциально неправильного использования скрытия методов.

Между прочим, метод сокрытия посредством наследования не следует путать с другими видами сокрытия - например, посредством вложения - который, как я считаю, является допустимой и полезной конструкцией с меньшим количеством потенциальных проблем.

Спорный, а? Я считаю, что потоки C++ используют << и >>. Я ненавижу это. Они операторы смены. Такая перегрузка - плохая практика. Это заставляет меня убить того, кто придумал это и подумал, что это хорошая идея. GRRR.

Анонимные функции - отстой.

Я обучаю себя jQuery, и, хотя это элегантная и чрезвычайно полезная технология, большинство людей, кажется, рассматривают ее как своего рода соревнование в максимальном увеличении числа пользователей анонимных функций.

Именование функций и процедур (наряду с именами переменных) - это величайшая выразительная способность, которую мы имеем в программировании. Передача функций в виде данных - отличный метод, но делать их анонимными и, следовательно, не самодокументированными - это ошибка. Это упущенный шанс выразить смысл кода.

Хотя я не использовал jQuery, я не согласен с общим принципом. Возможность выражать (скажем) проекцию или фильтр прямо там, где вы это используете вместо того, чтобы вводить отдельную функцию, является одной из самых приятных функций в C# 2 и 3. (Лучше в 3, чем в 2, поскольку лямбда-выражения более аккуратны, чем анонимные методы).

Jon Skeet 15.10.2009 00:23

@Jon: Ну, я думаю, это официально делает мое мнение противоречивым. Я все еще не согласен. Приятно иметь возможность выражать функциональность таким образом, но во всех случаях, кроме самых тривиальных, это существенно снижает удобочитаемость кода. Если бы вы могли назвать функцию на месте, это помогло бы с проблемой выражения вашей цели, но это все равно не устранило бы проблему фактического чтения функций, вложенных в список параметров других функций, которые, в свою очередь, часто вложены в другую список параметров функций.

Larry Lustig 15.10.2009 00:36

Вы можете называть встроенные функции в JavaScript, если хотите. Просто укажите имя между «функцией» и аргументами: var s = function square (a) {return a * a; };

Mark Bessey 24.10.2009 01:27

Если не стоит тестировать, не стоит строить

Никогда не меняйте то, что не сломано.

Что, если он работает, но его невозможно осмотреть, уродливо, сложно понять и, скорее всего, сломается, если что-то еще изменится?

simon 19.10.2009 13:14

Это точная причина, почему я отправил это как «спорный».

Varma 20.10.2009 09:06

«Безжалостно рефакторинг». Манифест XP. Но только если у вас есть комплексные модульные тесты ...

Engineer 17.09.2010 19:43

Я бы сказал, что мое самое противоречивое мнение о программировании состоит в том, что я искренне верю, что вам не следует так сильно беспокоиться о выбросе кода и его переписывании. Слишком часто люди думают, что если вы что-то записываете, то изменение этого означает, что вы сделали что-то не так. Но мой мозг работает так, чтобы заставить что-то очень простое работать и медленно обновлять код, при этом гарантируя, что код и тест продолжают работать вместе. Это может закончиться фактическим созданием классов, методов, дополнительных параметров и т. д., Я хорошо знаю, что это исчезнет через несколько часов. Но я делаю это, потому что хочу делать лишь маленькие шаги к своей цели. В конце концов, я не думаю, что трачу больше времени на использование этой техники, чем на программистов, которые смотрят в экран, пытаясь заранее определить лучший дизайн, прежде чем писать строку кода.

Преимущество, которое я получаю, заключается в том, что мне не приходится постоянно иметь дело с программным обеспечением, которое больше не работает, потому что я как-то сломал его и пытаюсь выяснить, что перестало работать и почему.

Скопируйте / вставьте ЯВЛЯЕТСЯ в корень всего зла.

Если вы когда-либо позволяли кому-либо с rentacoder.com прикоснуться к вашему проекту, и он, и ваш бизнес совершенно бесполезны.

Не спорно, это констатация факта.

mynameiscoffey 19.05.2010 05:25

Объектно-ориентированное программирование слишком часто используется

Иногда лучший ответ - простой ответ.

Для наиболее компетентных и опытных разработчиков объектно-ориентированного программирования классы отделяются от корневого класса только после того, как становится очевидным, что управлять сложностью становится все труднее. Как ни странно (или не так уж и странно), часто именно в этот момент становится очевидным, что нужно просто выделить какие. И пока вы не выйдете из корневого класса, вы будете программировать находятся процедурно (по крайней мере, в контексте этого класса). Преждевременное увеличение количества классов в процессе разработки - это то, чем занимаются новички в объектно ориентированном стиле.

Engineer 17.09.2010 19:38

Если вы не читали справочную страницу, вы не настоящий программист.

У меня есть два:

Паттерны проектирования иногда являются способом плохого программиста написать плохой код - менталитет «когда есть молоток - весь мир похож на гвоздь». Если есть что-то, что мне неприятно слышать, так это то, что два разработчика создают дизайн по шаблонам: «Мы должны использовать команду с фасадом ...».

Не существует такого понятия, как «преждевременная оптимизация».. Вам следует профилировать и оптимизировать свой код, прежде чем вы дойдете до того момента, когда это станет слишком болезненно.

Преждевременная оптимизация действительно существует, и это очень большая проблема. За очень немногими исключениями, ваша цель - выполнить функцию в соответствии с бизнес-требованиями. Заставьте это работать, сделайте это правильно, а затем сделайте это быстрее. Оптимизация без понимания всего профиля приложения - все равно что выкидывать деньги из окна. Дай мне знать, где ты работаешь, потому что я буду внизу с сетью, чтобы кое-что поймать. ;-)

Joseph Ferris 29.10.2009 22:09

Вы правы - но только в некоторых случаях ... Я видел, как карта «преждевременной оптимизации» использовалась слишком много времени, чтобы создать плохой, очень трудно улучшить поток приложений. Если вы можете написать лучше с первого раза, почему бы не сделать это?

Dror Helper 29.10.2009 23:30

Я считаю, что лучшее правило - всегда делать вещи как можно проще. Оптимизировать простой код намного проще, чем упрощать оптимизированный код.

thesmart 04.11.2009 05:25

"Комментарии - это ложь"

Комментарии не появляются, и ими легко пренебречь. Лучше выразить намерение с помощью четкого, отредактированного кода, проиллюстрированного модульными тестами. (Модульные тесты написаны TDD, конечно ...)

Мы не пишем комментарии, потому что они многословны и неясны, что на самом деле происходит в коде. Если чувствуете необходимость прокомментировать - выясните, что неясно в коде, и рефакторируйте / напишите более понятные тесты, пока в комментариях не будет необходимости ...

... кое-что, что я узнал из экстремального программирования (при условии, конечно, что вы установили командные нормы для очистки кода ...)

Код объясняет только «как» что-то делается, а не «почему». Действительно важно различать эти два понятия. Иногда необходимо принимать решения, и причина этого решения должна оставаться в силе. Я считаю важным найти золотую середину. Толпа «без комментариев» такая же сектантская, как и толпа «комментируй все».

Joseph Ferris 29.10.2009 22:07

Вы правы насчет этого: «Код объясняет только то,« как »что-то делается». Если я хочу знать, что он делает, я найду написанный TDD тест, который охватывает это. Если есть загадка относительно того, что он делает, и это достаточно важно, я вставляю обрыв (например, бросаю новое исключение RuntimeException («вот оно»)) и запускаю все приемочные тесты, чтобы увидеть, в каких сценариях нужно запустить этот путь кода.

Dafydd Rees 29.10.2009 22:28

Вот почему я сказал, что комментарии - это зло в моем сообщении stackoverflow.com/questions/406760/… Я горжусь, что мой ответ - самый серьезный ответ, за который проголосовали против :)

user34537 20.11.2009 15:09

Если вы хотите знать, почему что-то работает, просто введите ошибку, например. выбросить новое исключение RuntimeException («ЗДЕСЬ»); в него и запустите функциональные тесты. Прочтите названия неудачных тестов на уровне системы - вот почему вам нужен этот фрагмент кода.

Dafydd Rees 20.11.2009 18:24

Нет, это еще кое-что. Хорошие комментарии объясняют, почему функция работает ТАК, как она работает, а не почему она существует, а это, в конечном счете, просто что.

Integer Poet 15.03.2010 22:42

Программирование: это весело работа.

Мне кажется, что я вижу две обобщенные группы разработчиков. Тем, кому это не нравится, но они компетентны и с хорошими деньгами. Другая группа, которая любит это до некоторой степени жутко. Вроде бы их жизнь.

Я просто считаю, что это хорошо оплачиваемая работа, которая обычно бывает интересной и веселой. Есть много возможностей узнавать что-то новое каждую минуту каждого дня. Я не могу придумать другую работу, которую предпочел бы. Но это все еще работа. Будут идти на компромиссы, и то, что вы производите, не всегда будет таким хорошим, как могло бы быть.

Учитывая, что мои друзья были бы на пляже, пили пиво или играли с моими детьми.

Для всего вам нужно всего 3-5 языков. C - определенное. Возможно сборка, но вы должны это знать и уметь пользоваться. Может быть, javascript и / или Java, если вы пишете код для Интернета. Язык оболочки, такой как bash, и один HLL, например Lisp, который может быть полезен. Все остальное отвлекает.

Копирование / вставка не является антипаттерном, это фактически помогает не создавать дополнительных ошибок.

Мое практическое правило - печатать только то, что нельзя скопировать / вставить. Если вы создаете аналогичный метод, класс или файл - скопируйте существующий и измените то, что нужно. (Я не говорю о дублировании кода, который должен был быть помещен в один метод).

Обычно я даже не набираю имена переменных - либо копирую, вставляя их, либо использую автозаполнение IDE. Если нужен какой-то метод DAO - копирование аналогичного и изменение того, что нужно (даже если будет изменено 90%). Некоторым это может показаться крайней ленью или недостатком знаний, но мне почти никогда не приходится сталкиваться с проблемами, вызванными моей ошибкой в ​​написании чего-то тривиального, и их обычно трудно обнаружить (если они не обнаружены на уровне компиляции).

Всякий раз, когда я отхожу от своего правила копирования-вставки и начинаю печатать что-то, я всегда что-то опечатываю (это просто статистика, никто не может написать идеальный текст с места в карьер), а затем трачу больше времени, пытаясь выяснить, где.

Если вы думаете, что код для компиляции - большая проблема ... (качает головой)

Integer Poet 15.03.2010 22:40

Есть только один шаблон проектирования: инкапсуляция.

Например:

  • Заводской метод: вы инкапсулировали создание объекта
  • Стратегия: вы инкапсулировали разные изменяемые алгоритмы
  • Итератор: вы инкапсулировали способ последовательного доступа к элементам в коллекции.

неправильный. единственный шаблон проектирования - «вынуть повторяющийся код и поместить его во внешнюю функцию / метод / объект».

hasen 14.11.2009 00:31

Современный C++ - прекрасный язык.

Я сказал это. Многие люди действительно ненавидят C++, но, честно говоря, я считаю, что современный C++ с программированием в стиле STL / Boost большую часть времени является очень выразительным, элегантным и невероятно производительным языком.

Я думаю, что большинство людей, ненавидящих C++, основывают это на неудачном опыте использования объектно-ориентированного программирования. C++ не очень хорошо справляется с объектно-ориентированной архитектурой, потому что полиморфизм часто зависит от объектов, выделенных в куче, а C++ не имеет автоматической сборки мусора.

Но C++ действительно выделяется, когда речь идет об общих библиотеках и методах функционального программирования, которые позволяют создавать невероятно большие, легко обслуживаемые системы. Многие люди говорят, что C++ пытается делать все, но в итоге ничего не делает. Я бы, наверное, согласился, что он не делает объектно-ориентированного программирования так же хорошо, как другие языки, но он выполняет универсальное программирование и функциональное программирование лучше, чем любой другой основной язык на основе C. (C++ 0x только еще больше подчеркнет эту истину.)

Я также ценю то, что C++ позволяет мне при необходимости получать низкоуровневую информацию и обеспечивает полный доступ к операционной системе.

Плюс RAII. Шутки в сторону. Мне очень не хватает деструкторов, когда я программирую на других языках, основанных на C. (И нет, сборка мусора не делает деструкторы бесполезными.)

Мне очень не нравятся компиляторы C++. У них ужасные сообщения об ошибках.

thesmart 04.11.2009 05:21

«любой основной язык на основе C» будет включать C# и Scala, оба из которых сейчас достаточно хороши для функционального программирования. Вам стоит взглянуть на них еще раз, если вы еще не пробовали последние версии.

finnw 11.02.2010 20:04

Делать программное обеспечение настраиваемым - плохая идея.

Настраиваемое программное обеспечение позволяет конечному пользователю (или администратору и т. д.) Выбирать слишком много параметров, которые, возможно, не все были протестированы вместе (или, скорее, если их больше, чем очень небольшое количество, я могу гарантировать, что они не были протестированы).

Поэтому я думаю, что программное обеспечение, конфигурация которого жестко запрограммирована (но не обязательно избегает констант и т. д.) Для ПРОСТО РАБОТЫ, является хорошей идеей. Используйте разумные настройки по умолчанию и НЕ ДОПУСКАЙТЕ ИХ ИЗМЕНЕНИЕ.

Хорошим примером этого является количество параметров конфигурации в Google Chrome - однако, вероятно, их все еще слишком много :)

Согласовано. Примите дизайнерское решение за пользователя и придерживайтесь его.

thesmart 04.11.2009 05:20

Создание программного обеспечения - плохая идея.

user142019 20.12.2010 17:53

Тернарные операторы - отстой. Они являются воплощением ленивого программирования задниц.

user->isLoggedIn() ? user->update() : user->askLogin();

Это так легко ошибиться. Небольшое изменение в ревизии №2:

user->isLoggedIn() && user->isNotNew(time()) ? user->update() : user->askLogin();

Ах да, еще одно «небольшое изменение».

user->isLoggedIn() && user->isNotNew(time()) ? user->update() 
    : user->noCredentials() ? user->askSignup
        : user->askLogin();

Вот дерьмо, а как насчет того ДРУГОГО случая?

user->isLoggedIn() && user->isNotNew(time()) && !user->isBanned() ? user->update() 
    : user->noCredentials() || !user->isBanned() ? user->askSignup()
        : user->askLogin();

НЕТ НЕТ НЕТ НЕТ. Просто сохраните нам изменение кода. Прекратите быть чертовски ленивым:

if (user->isLoggedIn()) {
    user->update()
} else {
    user->askLogin();
}

Потому что, если вы сделаете это правильно с первого раза, это избавит нас от необходимости снова и снова конвертировать ваши дерьмовые тернари:

if (user->isLoggedIn() && user->isNotNew(time()) && !user->isBanned()) {
    user->update()
} else {
    if (user->noCredentials() || !user->isBanned()) {
        user->askSignup();
    } else {
        user->askLogin();
    }
}

Это будет проблемой использования неправильной парадигмы для того, что вы пытаетесь сделать. Если хочешь ветвиться, используй чертов if. Если вы хотите напечатать немного отличающийся текст (скажите «Мистер» или «Миссис» в приветствии), используйте условный оператор

3Doubloons 26.11.2009 09:31

используйте их для назначения, а не для разветвления. это хорошая замена if (c) { x=a; } else { x=b; }, который становится x=c?a:b;, но ни для чего другого!

Frunsi 15.12.2009 03:48

Неа. Мне жаль. Я полностью согласен с OP в том, что тернарный оператор - отстой, потому что вы даете безымянному / безликому разработчику возможность сделать код намного более трудным для чтения. И это вдобавок к тому факту, что, как он говорит, это в любом случае дублированная языковая функция. Вполне нормально быть впечатленным подобными вещами, когда ты учишься в колледже. Как профессионал, вы являетесь частью большой машины разработки, которая полагается на удобочитаемость.

Engineer 17.09.2010 19:34

Библиотека C++ STL настолько универсальна, что никому не подходит.

«The» и «библиотека STL» не относятся к этому предложению. Удалить их.

user142019 20.12.2010 17:51

JavaScript - это «запутанный» язык, но, Боже, помоги мне, мне он нравится.

У меня определенно есть отношения Любви / Ненависти к JavaScript

Neil N 09.12.2009 20:04

+1, я точно знаю, что вы имеете в виду. Это может быть интересно использовать. Я ненавижу утечки памяти.

JL. 04.04.2010 19:04

С эстетической точки зрения, это куча собачьих извержений. Однако не могу отрицать, что он выполняет свою работу.

Engineer 17.09.2010 19:28

Программное обеспечение с открытым исходным кодом в конечном итоге стоит дороже

Для обычных бизнес-компаний Open Source выглядит бесплатным, но имеет скрытые затраты.

Если принять во внимание несоответствие качества, вариативное удобство использования и UI / UX, трудности взаимодействия и стандартов, увеличенную конфигурацию, связанную с этим повышенную потребность в обучении и поддержке, общая стоимость владения для Open Source намного выше, чем у коммерческих предложений.

Технически подкованные программисты берут освобождение от открытого исходного кода и работают с ним; они «понимают» и могут принять и настроить в соответствии со своими целями. С другой стороны, предприятия, которые в основном не являются техническими, но которым требуется программное обеспечение для управления своими офисами, сетями и веб-сайтами, рискуют столкнуться с болью и большими расходами с точки зрения потерянного времени, производительности и (в конечном итоге) поддержки. сборы и / или стоимость отказа от эксперимента в целом.

Большая часть экономии за счет OSS достигается за счет возможности исправлять ошибки в сторонних инструментах. Дело не только в лицензионных сборах.

finnw 11.02.2010 20:02

Вы опровергли свое утверждение о противоречиях здесь, просто указав, что не каждый инструмент лучше всего подходит для каждой работы. Вам нужно меньше разума и больше догмы. Вместо этого скажите нам, что SQL Server промышленно развит, а MySQL - просто игрушка. Stack Overflow требуется больше просмотров страниц, а вы не помогаете.

Integer Poet 15.03.2010 22:35

Какого черта ?? Кто упомянул базы данных SQL? Просмотры страниц? Этот комментарий сбивает с толку.

Gordon Mackie JoanMiro 16.03.2010 00:35

Размер имеет значение! Украшайте свой код, чтобы он выглядел больше.

По-видимому, является спорным, что IDE должны проверить, чтобы увидеть, могут ли они связать код они создают, прежде чем тратить время компиляции

Но я считаю, что мне не следует компилировать миллион строк кода только для того, чтобы понять, что Windows заблокировала файл, который я пытаюсь создать, потому что у другого программиста есть странная проблема с потоками, которая требует от него задержки выгрузки DLL. в течение 3 минут после того, как их нельзя использовать.

Вы просите язык со знанием платформ и деталей реализации. Они так не работают.

Integer Poet 15.03.2010 22:33

Нет, я прошу IDE со знанием платформ и деталей реализации. Но спасибо за полемику! Я не понимал, что этот вопрос был окончательно удален.

Peter Turner 16.03.2010 00:33

Microsoft должна прекратить поддерживать что-либо, имеющее отношение к Visual Basic.

Я говорю об этом, начиная с Visual Basic 1.0.

MetalMikester 12.11.2009 15:27

Microsoft следует остановиться. Период.

just somebody 15.12.2009 05:10

Полностью согласен, а почему именно VB.net? любой разработчик VB.net может перейти на C#. Я знаю, потому что раньше был разработчиком VB6.

JL. 04.04.2010 19:02

Это вообще спорный вопрос? : D

Engineer 17.09.2010 19:26

Универсальный язык символьных инструкций для начинающих с визуальной точки зрения. Блин, майкрософт еще только новичок, н00б.

user142019 20.12.2010 17:50

Используйте модульные тесты как последнее средство для проверки кода.

Если вы хотите убедиться в правильности кода, я предпочитаю модульному тестированию следующие методы:

  1. Проверка типа
  2. Утверждения
  3. Тривиально проверяемый код

Для всего остального есть модульные тесты.

0. Перечитайте свой код. Кажется тривиальным, но часто может лучше всего находить ошибки.

Matt Hamsmith 24.11.2009 20:26

Энтузиасты модульных тестов слишком часто позиционируют свои аргументы как защиту от слабой типизации и позднего связывания, как будто дисциплинированный инженер выбирает только один подход к надежности.

Integer Poet 15.03.2010 22:31

Я очень неоднозначно отношусь к модульным тестам. Мое личное мнение таково, что фанатики, которые хотят 100% покрытия кода для своих модульных тестов, тратят много времени и денег. Но и они не совсем бесполезны, так что я согласен с утверждением.

Captain Sensible 22.04.2010 12:33

Я в значительной степени был вынужден к такому выводу из-за очень плотного графика. Я согласен с тем, что юнит-тесты подходят не для всего. Но при этом, чем более критичен фрагмент кода, тем разумнее вы должны писать для него тесты в любом случае.

Engineer 17.09.2010 19:26

Процедурное программирование - это весело. ООП - это скучно.

питоническое программирование - это весело (процедурное + функциональное)

hasen 14.11.2009 00:28

-1, категорически не согласен. Вы получаете огромное удовлетворение от завершения курса, который так сильно очищает ваш код и добавляет гораздо больше возможностей вашему проекту.

Sam152 18.11.2009 17:19

@ Sam152, вы должны проголосовать +1. Вы согласны с тем, что это «спорное мнение программирования?»

Peter 20.11.2009 00:06

Это, безусловно, спорный. Я предпочитаю программировать на C++, а не на C.

Noctis Skytower 15.12.2009 03:32

+1. Несколько лет назад я прошел через фазу «Я ненавижу ООП», хотя сейчас я в основном перестал.

finnw 11.02.2010 19:59

C++ - это не ООП. Это просто C с пространствами имен и функциями в структурах для ленивых программистов.

user142019 20.12.2010 17:49

Java - это КОБОЛ нашего поколения.

Все учатся его кодировать. Есть код для этого, работающий в крупных компаниях, которые будут пытаться поддерживать его в рабочем состоянии в течение десятилетий. Все презирают его по сравнению со всеми остальными вариантами, но все равно вынуждены использовать его, потому что он оплачивает счета.

COBOL по-прежнему остается COBOL нашего поколения. Может быть, через три поколения Java станет COBOL ... Но тогда будет и C#.

Kobi 15.11.2009 10:13

Я бы сказал, что PHP - это КОБОЛ нашего поколения. У него есть важное общее свойство - он был разработан для программирования людьми, которые не были штатными программистами. В отличие от Java и C#, которые сильно заимствованы из C++.

finnw 11.02.2010 19:57

«XML и HTML - это« язык ассемблера »в Интернете. Зачем до сих пор его взламывают?

Кажется довольно очевидным, что очень немногие разработчики в наши дни изучают / кодируют на языке ассемблера по той причине, что он примитивен и уводит вас далеко от проблемы, которую вы должны решить на высоком уровне. Поэтому мы изобрели языки высокого уровня, чтобы инкапсулировать сущности этого уровня, чтобы повысить нашу продуктивность с помощью языковых элементов, с которыми мы можем связать больше на более высоком уровне. Точно так же, как мы можем сделать с компьютером больше, чем просто его материнская плата или процессор.

Мне кажется, что в Интернете разработчики все еще читают / пишут и взламывают HTML, CSS, XMl, схемы и т. д.

Я считаю их эквивалентом «языка ассемблера» Интернета или его субстратов. Должны ли мы с этим покончить? Конечно, нам нужно иногда его взламывать, когда что-то идет не так. Но, конечно, это исключение. Я утверждаю, что мы заменяем низкоуровневый язык ассемблера на машинном уровне его эквивалентом на веб-уровне.

Это все равно что сказать, Python - это сборка Django, не используйте ее!

hasen 14.11.2009 00:27

Вы хотите изобрести новый язык более высокого уровня, чем XHTML?

Noctis Skytower 15.12.2009 03:30

Человеческий мозг - это главный ключ ко всем замкам.

В этом мире нет ничего, что могло бы двигаться быстрее вашего мозга. Поверьте, это не философски, а практично. Что касается мнений, то они как


1) Никогда не выходите за пределы, указанные в языке программирования. Простым примером могут быть указатели в C и C++. Не используйте их неправильно, так как вы можете получить ЧЕРТОВАЯ ОШИБКА СЕГМЕНТАЦИИ.

2) Всегда следуйте стандартам кодирования, да, то, что вы читаете, правильно, стандарты кодирования много делают для вашей программы, В конце концов, ваша программа написана для того, чтобы ее выполняла машина, но чтобы ее понял другой мозг. :)

Ассемблер не умер

В моей работе (системы защиты от копирования) программирование на ассемблере имеет важное значение, я работал со многими системами защиты от копирования hll, и только ассемблер дает вам реальную возможность использовать все возможности, скрытые в коде (например, мутация кода, вещи низкого уровня).

Также многие оптимизации кода возможны только с помощью программирования на ассемблере, посмотрите на источники любых видеокодеков, исходники написаны на ассемблере и оптимизированы для использования любых кодов операций MMX / SSE / SSE2, многие игровые движки используют оптимизированные для ассемблера процедуры, даже ядро ​​Windows имеет Подпрограммы, оптимизированные для SSE:

NTDLL.RtlMoveMemory

.text:7C902CD8                 push    ebp
.text:7C902CD9                 mov     ebp, esp
.text:7C902CDB                 push    esi
.text:7C902CDC                 push    edi
.text:7C902CDD                 push    ebx
.text:7C902CDE                 mov     esi, [ebp+0Ch]
.text:7C902CE1                 mov     edi, [ebp+8]
.text:7C902CE4                 mov     ecx, [ebp+10h]
.text:7C902CE7                 mov     eax, [esi]
.text:7C902CE9                 cld
.text:7C902CEA                 mov     edx, ecx
.text:7C902CEC                 and     ecx, 3Fh
.text:7C902CEF                 shr     edx, 6
.text:7C902CF2                 jz      loc_7C902EF2
.text:7C902CF8                 dec     edx
.text:7C902CF9                 jz      loc_7C902E77
.text:7C902CFF                 prefetchnta byte ptr [esi-80h]
.text:7C902D03                 dec     edx
.text:7C902D04                 jz      loc_7C902E03
.text:7C902D0A                 prefetchnta byte ptr [esi-40h]
.text:7C902D0E                 dec     edx
.text:7C902D0F                 jz      short loc_7C902D8F
.text:7C902D11
.text:7C902D11 loc_7C902D11:                           ; CODE XREF: .text:7C902D8Dj
.text:7C902D11                 prefetchnta byte ptr [esi+100h]
.text:7C902D18                 mov     eax, [esi]
.text:7C902D1A                 mov     ebx, [esi+4]
.text:7C902D1D                 movnti  [edi], eax
.text:7C902D20                 movnti  [edi+4], ebx
.text:7C902D24                 mov     eax, [esi+8]
.text:7C902D27                 mov     ebx, [esi+0Ch]
.text:7C902D2A                 movnti  [edi+8], eax
.text:7C902D2E                 movnti  [edi+0Ch], ebx
.text:7C902D32                 mov     eax, [esi+10h]
.text:7C902D35                 mov     ebx, [esi+14h]
.text:7C902D38                 movnti  [edi+10h], eax

Поэтому, если вы в следующий раз услышите, что ассемблер мертв, подумайте о последнем просмотренном вами фильме или игре, в которую вы играли (и ее защите от копирования, хех).

Ассемблер также важен для взлома защиты от копирования: D

Peter 20.11.2009 00:03

Подождите, защита от копирования, значит, вам не нравится моя медиатека iTunes, не так ли?

user142019 20.12.2010 17:47

Программирование - это ни искусство, ни наука. Это инженерная дисциплина.

Это не искусство: программирование обязательно требует творчества. Это не делает это искусством. Код разработан и написан для правильной работы, а не для эмоционального возбуждения. За исключением пробелов, изменение кода по эстетическим причинам нарушает ваш код. Код может быть красивым, но искусство не является его основной целью.

Это не наука: наука и технология неразделимы, но программирование относится к категории технологий. Программирование - это не систематическое изучение и наблюдение; это дизайн и реализация.

Это инженерная дисциплина: программисты проектируют и создают вещи. Хорошие программисты создают функциональные возможности. Они понимают компромиссы различных вариантов реализации и выбирают тот, который подходит для решаемой ими проблемы.


Я уверен, что есть те, кто хотел бы разбирать слова, расширяя определения искусства и науки, чтобы включить программирование или ограничение инженерии только на механические машины или оборудование. Проверьте словарь. Также «Искусство компьютерного программирования» - это другое использование искусства, которое означает навык или ремесло, как в «искусстве разговора». Продукт программирования - это не искусство.

Ни Visual Basic, ни C# не превосходят друг друга. Они почти одинаковы, за исключением синтаксиса и форматирования.

Теперь ... Они не всегда были так похожи друг на друга. Так что вам нужно бороться с тем, что многие из нас когда-то узнали.

Jon Adams 14.11.2009 01:39

Не совсем программирование, но я терпеть не могу только макеты css только ради этого. Это непродуктивно, неприятно и превращает обслуживание в кошмар с плавающими и полями, когда изменение положения отдельного элемента может вывести из строя всю страницу.

Это определенно не популярное мнение, но я закончил с макетом таблицы за 20 минут, в то время как гуру css часами настраивают высоту строки, поля, отступы и поплавки, просто чтобы сделать что-то столь же простое, как вертикальное центрирование абзаца.

Тот, кто часами пишет margin: 0 auto;, чертовски плохой css-дизайнер ... Тем не менее, таблицы - это таблицы, а таблицы хранят данные. Не дизайн.

F.P 18.11.2009 17:18

Вот почему есть 3 разных способа использования стилей. Для повторного использования и объема потребностей.

awright18 04.03.2010 04:32

Я думаю, нам следует отойти от «С». Это слишком старое! Но старая собака все равно лает громче !!

Вероятно, это все еще один из лучших языков для написания операционной системы при условии, что (1) вы начинаете с нуля, (2) вы хотите, чтобы он был быстрым, но у вас нет времени писать его на ассемблере, и (3) хотите работать над сопровождением и редактированием операционных систем, написанных на C.

Noctis Skytower 15.12.2009 03:25

Одно слово: нет. Ой, подождите, это были три слова.

user142019 20.12.2010 17:46

Инструкции Макросы, Препроцессор и Аннотации - зло.

Один синтаксис и язык для каждого файла, пожалуйста!

// не применяется к файлам Make или макросам редактора, которые вставляют реальный код.

Все согласны с тем, что препроцессор - это зло ... кроме людей, которых никогда не найти на Stack Overflow. Им это нравится.

Integer Poet 15.03.2010 22:26

Как насчет этого: C - зло. А C++ еще хуже. Однако C - неизбежное зло, а C++ - ненужное.

Warren P 01.04.2010 04:05

Писать подробные спецификации бесполезно.
Писать правильные программы довольно сложно, но компиляторы, отладчики, модульные тесты, тестеры и т. д. Позволяют обнаруживать и устранять большинство ошибок. С другой стороны, когда вы пишете спецификации со сравнимым уровнем детализации, как программа (например, псевдокод, UML), вы в основном сами по себе. Считайте, что вам повезло, если у вас есть инструмент, который поможет вам получить правильный синтаксис.

Обширные спецификации, скорее всего, изобилуют ошибками.
Вероятность того, что автор сделал это правильно с первой попытки, примерно такой же, как вероятность того, что такая же большая программа не содержит ошибок, даже не будучи протестированной. Рецензирование устраняет некоторые ошибки, как и рецензирование кода.

Это спорно лишь в той степени, что вы ожидаете спецификации походить на готовый продукт. Если вместо этого цель состоит в том, чтобы заставить вас обдумать возникающие проблемы, тогда спецификации работают отлично. Это особенно верно, если готовый продукт не отстой, не похож на спецификацию, а вы оглядываетесь назад и понимаете, что смогли эффективно изменить свое мнение, потому что вы прошли через упражнение по написанию спецификации. Примечание: это работает, только если в вашей команде только умные люди.

Integer Poet 15.03.2010 22:25

Логические переменные следует использовать только для логической логики. Во всех остальных случаях используйте перечисления.


Логические переменные используются для хранения данных, которые могут принимать только два возможных значения. Часто упускаются из виду проблемы, возникающие при их использовании:

  • Программисты часто не могут правильно определить, когда некоторые данные должны иметь только два возможных значения.
  • Люди, которые инструктируют программистов, что делать, например менеджеры программ или те, кто пишет спецификации, которым следуют программисты, часто также не могут правильно определить это.
  • Даже если часть данных правильно определена как имеющая только два возможных состояния, эта гарантия может не действовать в будущем.

В этих случаях использование логических переменных приводит к путанице в коде, чего часто можно избежать с помощью перечислений.

Пример

Допустим, программист пишет программное обеспечение для автосалона, который продает только легковые и грузовые автомобили. Программист разрабатывает детальную модель бизнес-требований к своему программному обеспечению. Зная, что единственными продаваемыми типами транспортных средств являются легковые и грузовые автомобили, он правильно определяет, что он может использовать логическую переменную внутри класса Vehicle, чтобы указать, является ли транспортное средство автомобилем или грузовиком.

class Vehicle {
 bool isTruck;
 ...
}

Программное обеспечение написано так, что, когда isTruck истинно, транспортное средство является грузовиком, а когда isTruck ложно, транспортное средство является автомобилем. Это простая проверка, выполняемая много раз по всему коду.

Все работает без проблем, пока однажды автосалон не купит другой автосалон, который также продает мотоциклы. Программист должен обновить программное обеспечение, чтобы оно работало правильно, учитывая, что бизнес дилера изменился. Теперь необходимо определить, является ли транспортное средство автомобилем, грузовиком или мотоциклом, в трех возможных состояниях.

Как это реализовать программисту? isTruck - это логическая переменная, поэтому она может содержать только два состояния. Он мог бы изменить его с логического на какой-либо другой тип, который допускает множество состояний, но это нарушит существующую логику и, возможно, не будет иметь обратной совместимости. С точки зрения программиста, самое простое решение - добавить новую переменную, чтобы показать, является ли транспортное средство мотоциклом.

class Vehicle {
 bool isTruck;
 bool isMotorcycle;
 ...
}

Код изменен таким образом, что, когда значение isTruck истинно, транспортное средство является грузовиком, когда значение isMotorcycle истинно, транспортным средством является мотоцикл, а когда они оба ложны, транспортное средство является автомобилем.

Проблемы

У этого решения есть две большие проблемы:

  • Программист хочет выразить тип транспортного средства, что является одной идеей, но решение использует для этого две переменные. Тем, кто не знаком с кодом, будет труднее понять семантику этих переменных, чем если бы программист использовал только одну переменную, полностью определяющую тип.
  • Решение этой проблемы с мотоциклом путем добавления нового логического значения не облегчает программисту работу с такими ситуациями, которые произойдут в будущем. Если дилерский центр начнет продавать автобусы, программисту придется повторить все эти шаги снова, добавив еще одно логическое значение.

Разработчик не виноват в том, что бизнес-требования к его программному обеспечению изменились, потребовав от него пересмотра существующего кода. Но использование логических переменных в первую очередь сделало его код менее гибким и сложным для модификации для удовлетворения неизвестных будущих требований (менее «ориентированных на будущее»). Когда он внес изменения самым быстрым способом, код стало труднее читать. В конечном итоге использование логической переменной было преждевременной оптимизацией.

Решение

Использование перечисления в первую очередь могло бы предотвратить эти проблемы.

enum EVehicleType { Truck, Car }

class Vehicle {
 EVehicleType type;
 ...
}

Чтобы приспособить мотоциклы в этом случае, все, что программисту нужно сделать, это добавить Motorcycle к EVehicleType и добавить новую логику для работы с мотоциклетными чемоданами. Добавлять новые переменные не нужно. Существующую логику нарушать нельзя. А тот, кто не знаком с кодом, может легко понять, как хранится тип автомобиля.

Клифф Примечания

Не используйте тип, который может хранить только два разных состояния, если вы не уверены, что двух состояний всегда будет достаточно. Используйте перечисление, если есть какие-либо возможные условия, при которых в будущем потребуется более двух состояний, даже если логическое значение удовлетворяет существующим требованиям.

Я предполагаю, что это не очень спорным.

Ikke 25.11.2009 00:15

Аргумент сам по себе не является спорным, но попробуйте написать такой код и посмотрите, возражает ли ваша команда. Я готов поспорить, что 9 из 10 команд попытаются отговорить вас от логических значений.

David 19.02.2010 06:18

Конечно, ребята из ООП в углу пробормотали бы что-то вроде «класс Truck расширяет / реализует транспортное средство, класс Car расширяет / реализует транспортное средство ...»

Ivan Vrtarić 12.03.2010 13:09

Я работал над проектом, который использовал набор логических значений, чтобы попытаться различать модели принтера. Это было ... отвратительно. Никто бы не захотел делать это после того, как увидел это в действии. Но вот вам несколько противоречий: в языках, которые это позволяют, вполне разумно использовать логическое значение для одного из трех значений: true, false и not know.

Integer Poet 15.03.2010 22:19

Спасибо. Никогда не думал об этом. Думаю, мне следует лучше взглянуть на перечисления.

Sylverdrag 08.06.2010 10:01

Просто чтобы прояснить мне ситуацию. Что мне использовать: _Bool isGirl; или enum { boy, girl }; typedef unsigned gender;?

user142019 20.12.2010 17:43

Один класс на файл

Какая разница? Я предпочитаю целые программы, содержащиеся в одном файле, а не миллион разных файлов.

Лучше одно пространство имен для каждого файла.

Behrooz 14.12.2009 21:16

1 ФАЙЛ НА ОБЛАКО, НА ПЛАНЕТУ!

JL. 23.03.2010 07:16

Один символ на файл. døh. ЛОГИКА!

user142019 20.12.2010 17:44

Ничего страшного, если ты не знаешь. Но вы уволены, если не можете даже погуглить.

Интернет - это инструмент. Если ты учишься на этом, это не делает тебя глупее.

Это должно быть правилом на любом посту, имеющем хоть какое-то отношение к работе с компьютером. Не только для программистов.

awright18 04.03.2010 04:28

Не стесняйтесь, бросьте исключение. Исключения - вполне допустимый способ сигнализировать об ошибке, и они намного яснее, чем любая система кода возврата. «Исключительно» не имеет ничего общего с тем, как часто это может происходить, а все связано с тем, что класс считает нормальными условиями выполнения. Выбрасывать исключение при делении на ноль нормально, независимо от того, как часто это может происходить. Если проблема вероятна, защитите свой код, чтобы метод не вызывался с неверными аргументами.

Написание этого самостоятельно может быть правильным вариантом.

По моему опыту, использование стороннего кода для решения проблемы вызывает слишком много энтузиазма. Вариант решения проблемы самим по себе обычно не приходит в голову. Хотя не поймите меня неправильно, я не призываю никогда не использовать библиотеки. Я говорю: среди возможных фреймворков и модулей, которые вы планируете использовать, добавьте возможность реализации решения самостоятельно.

Но зачем вам писать собственную версию?

  • Не изобретайте велосипед. Но если вам нужен только кусок дерева, действительно ли вам нужно целое колесо телеги? Другими словами, вам действительно нужен openCV, чтобы перевернуть изображение по оси?
  • Компромисс. Обычно вам приходится идти на компромиссы в отношении вашего дизайна, чтобы иметь возможность использовать определенную библиотеку. Стоит ли количество изменений, которые вы должны внести, получить функциональность, которую вы получите?
  • Обучение. Вы должны научиться использовать эти новые фреймворки и модули. Сколько времени это займет у вас? Это того стоит? Будет ли учиться дольше, чем внедрять?
  • Расходы. Не все бесплатно. Хотя сюда входит и ваше время. Подумайте, сколько времени это программное обеспечение, которое вы собираетесь использовать, сэкономит вам, и стоит ли оно своей цены? (Также помните, что вам нужно потратить время, чтобы изучить это)
  • Вы программист, а не ... человек, который просто складывает вещи воедино (извините, не мог придумать ничего остроумного).

Последний пункт спорен.

Использование регулярных выражений для синтаксического анализа HTML во многих случаях нормально

Каждый раз, когда кто-то публикует вопрос о переполнении стека с вопросом, как добиться некоторых манипуляций с HTML с помощью регулярного выражения, первым ответом будет «Регулярное выражение - недостаточный инструмент для синтаксического анализа HTML, поэтому не делайте этого». Если спрашивающий пытался создать веб-браузер, это был бы полезный ответ. Однако обычно спрашивающий хочет сделать что-то вроде добавления тега rel ко всем ссылкам на определенный домен, обычно в том случае, когда можно сделать определенные предположения о стиле входящей разметки, что вполне разумно сделать с регулярное выражение.

Хранение XML в CLOB в реляционной базе данных часто является ужасной уловкой. Это не только ужасно с точки зрения производительности, но и перекладывает ответственность за правильное управление структурой данных с архитектора базы данных на программиста приложений.

Программное обеспечение похоже на туалетную бумагу. Чем меньше вы тратите на это, тем больше это заноза в заднице.

То есть аутсорсинг редко бывает хорошей идеей.

Я всегда считал, что это правда, но до недавнего времени я не знал, насколько это серьезно. Я недавно «поддерживал» (читай: «исправлял») некоторый сторонний код, и это огромный беспорядок. Это легко обходится нашей компании дороже, чем разница, если бы она была разработана собственными силами.

Люди, не относящиеся к вашему бизнесу, по своей сути будут меньше знать о вашей бизнес-модели и, следовательно, не будут так хорошо программировать любую систему, которая работает в вашем бизнесе. Кроме того, они знают, что им не придется его поддерживать, поэтому нет никакого стимула делать что-либо, кроме как наполовину.

@ iandisme - Наверное, ты не удосужился рассказать этим ребятам, чем ты занимаешься? Другой момент, почему вы подписали такой контракт, где они просто разворачивают какое-то дерьмо и убегают? Вы должны были заключить долгосрочный контракт с разработчиками, специалистами по сопровождению и техподдержке. Как заказчик, контроль качества был в ваших руках.

Pradeep 18.12.2010 11:51

@ Седьмой элемент - не обвиняйте Индию в том, что кто-то другой не справился с его офшорным проектом и качеством.

Pradeep 18.12.2010 11:55

@Pradeep - Я не имел никакого отношения к заключению контракта. В любом случае, ваша точка зрения дополняет мое первоначальное утверждение: сделать это правильно с первого раза было бы дороже, но оно того стоит.

iandisme 20.12.2010 23:25

Интранет-фреймворки, такие как SharePoint, заставляют меня думать, что весь корпоративный мир - это один гигантский страус с головой в песок

Я говорю не только о MOSS, я работал с некоторыми другими продуктами CORPORATE INTRANET, и абсолютно ни один из них не является отличным, но SharePoint (MOSS), безусловно, худший.

  • Большинству этих систем нелегко преодолеть разрыв между Интранетом и Интернетом. Итак, как удаленный работник, вы вынуждены подключиться к VPN. Внешние клиенты просто не могут позволить себе роскошь получить вашу внутреннюю информацию из первых рук. Конечно, это можно исправить ценой $$$.
  • Возможности поиска всегда жалкие. Многие отделы просто не знают об информации.
  • Информационные фрагменты, люди начинают бойкотировать рабочие процессы или возвращаются к электронной почте
  • Разработка SharePoint - самая болезненная форма разработки на планете. Ничто так не отстой, как SharePoint. Я видел, как несколько разработчиков задумывались о том, чтобы бросить ИТ после того, как проработали более года в MOSS.
  • Независимо от того, как разработчики ненавидят MOSS, независимо от того, сколько времени уходит на развертывание самых простых проектов, независимо от того, насколько новичками выглядят результаты, и независимо от того, насколько непостижимым и фрагментированным является контент:

ВСЕ ПРОДОЛЖАЮТ ИСПОЛЬЗОВАТЬ И ПОКУПАТЬ SHAREPOINT, И МЕНЕДЖЕРЫ ОЧЕНЬ ТРУДНО ПЫТАЮТСЯ ПРЕДОСТАВЛЯТЬ ЕГО НЕ САТАНЫ.

Микроформаты

Использование классов CSS, изначально предназначенных для визуального макета, теперь назначается как для визуальных, так и для контекстных данных - это хитрость, много двусмысленности. Не говорю, что функциональности не должно быть, но исправьте чертов базовый язык. HTML не был взломан для создания XML - вместо этого появился язык XML. Теперь у нас есть эти нетерпеливые ребята из скриптов, которые взламывают HTML и CSS, чтобы делать то, для чего он не предназначен, это все еще нормально, но я бы хотел, чтобы они оставили эти вещи при себе и не сделали из этого стандарта. Просто к какой-то бойне!

Ваше мнение о программировании не кажется мне очень спорным. Фактически, я даже не могу понять, каково ваше мнение о программировании.

Windows programmer 15.12.2009 03:28

Я согласен с вашими нападками на sharepoint. В моих отношениях со зверем возникает большая путаница в том, что он может и должен делать. Я предполагаю, что это происходит из офисного мира, где люди злоупотребляют, говорят, преуспевают и имеют доступ к нечестивым вещам, которые должны выполняться программистами, создающими настоящие приложения. В моей работе шуточная шутка о способностях шарпойнта заключается в том, что он может «мыть вашу машину» или «косить лужайку», или что он обладает бесконечными сверхспособностями.

awright18 04.03.2010 04:25

Я согласен, что это не спорный. Как разработчик MOSS я могу только сделать вывод, что SP был написан лучшей командой обезьян с синдромом Дауна в Microsoft.

Jacobs Data Solutions 02.04.2010 00:10

Что вызывает споры, так это то, что большинство бизнес-пользователей считают MOSS идеальным универсальным решением для интрасети, но, честно говоря, это куча собачьего дерьма под капотом.

JL. 04.04.2010 18:54

Ассоциативные массивы / хеш-карты / хеш-таблицы (+ как бы они ни назывались на вашем любимом языке) - лучшее, что есть после нарезанного хлеба!

Конечно, они обеспечивают быстрый переход от ключа к значению. Но они также упрощают создание структурированных данных на лету. В языках сценариев это часто единственный (или, по крайней мере, наиболее используемый) способ представления структурированных данных.

ИМХО они были очень важным фактором успеха многих языков сценариев.

И даже в C++ std :: map и std :: tr1 :: unordered_map помогли мне быстрее писать код.

Это не спорно вообще! (См. Дискуссию о JSON и XML).

s4y 19.12.2010 00:00

C++ - это язык-убийца будущего ...

... динамических языков.

никто не владеет им, имеет растущий набор функций, таких как программирование во время компиляции (мета-) или вывод типов, обратные вызовы без накладных расходов на вызовы функций, не обеспечивает применения единого подхода (мультипарадигма). POSIX и ECMAScript регулярные выражения. несколько возвращаемых значений. у вас может быть именованные аргументы. и т. д. и т. д.

в программировании дела идут очень медленно. JavaScript потребовалось 10 лет, чтобы сдвинуться с мертвой точки (в основном из-за производительности), и большинство людей, которые программируют на нем, до сих пор его не понимают (классы на JS? давай!). Я бы сказал, что C++ действительно начнет сиять через 15-20 лет. мне кажется, что у C++ (языка, а также поставщиков компиляторов) достаточно времени и критической массы программистов, которые сегодня пишут на динамических языках, чтобы сойтись.

C++ должен стать более удобным для программистов (ошибки компилятора, сгенерированные из шаблонов или время компиляции при их наличии), и программисты должны понимать, что статическая типизация - это благо (она уже выполняется, см. Другой ответ здесь, в котором утверждается, что это хорошо код, написанный на языке с динамической типизацией, пишется так, как если бы язык был статически типизирован).

C++ засасывает яйца C а также Objective-C. Это грандиозный провал.

user142019 20.12.2010 17:41

Системы реляционных баз данных будут - лучшая вещь с тех пор, как нарезанный хлеб ...

... когда мы (надеюсь) получим их, то есть. Базы данных SQL - отстой, это не смешно.

Что меня забавляет (если грустно), так это сертифицированные администраторы баз данных, который считает систему баз данных SQL реляционной. О многом говорит о качестве указанной сертификации.

Смущенный? Прочтите книги К. Дж. Дейта.

редактировать

Почему он называется Реляционный и что означает это слово?

В наши дни программист (или сертифицированный администратор базы данных, подмигивание) с сильным (черт возьми, любой) математическим опытом является скорее исключением, чем обычным случаем (я также являюсь примером общего случая). SQL с его столы, столбцы и ряды, а также шутка под названием Entity / Relationship Modeling только добавляют оскорбления к травме. Неудивительно, что заблуждение о том, что системы баз данных Реляционный называются так из-за некоторых Отношения (внешних ключей?) Между Сущности (таблицами), настолько распространено.

Фактически, Реляционный происходит от концепции отношений математический и как таковой тесно связан с теорией множеств и функциями (в математическом, а не в смысле программирования).

[http://en.wikipedia.org/wiki/Finitary_relationpting[2]:

In mathematics (more specifically, in set theory and logic), a relation is a property that assigns truth values to combinations (k-tuples) of k individuals. Typically, the property describes a possible connection between the components of a k-tuple. For a given set of k-tuples, a truth value is assigned to each k-tuple according to whether the property does or does not hold.

An example of a ternary relation (i.e., between three individuals) is: "X was-introduced-to Y by Z", where (X,Y,Z) is a 3-tuple of persons; for example, "Beatrice Wood was introduced to Henri-Pierre Roché by Marcel Duchamp" is true, while "Karl Marx was introduced to Friedrich Engels by Queen Victoria" is false.

Википедия совершенно ясно дает понять: в СУБД SQL таким тройным отношением будет «Таблица», а не «иностранный ключ» (я беру на себя смелость переименовать «столбцы» отношения: X = who, Y = к, Z = по):

CREATE TABLE introduction (
  who INDIVIDUAL NOT NULL
, to INDIVIDUAL NOT NULL
, by INDIVIDUAL NOT NULL
, PRIMARY KEY (who, to, by)
);

Кроме того, он будет содержать (среди прочего, возможно) этот "строка":

INSERT INTO introduction (
  who
, to
, by
) VALUES (
  'Beatrice Wood'
, 'Henri-Pierre Roché'
, 'Marcel Duchamp'
);

но не этот:

INSERT INTO introduction (
  who
, to
, by
) VALUES (
  'Karl Marx'
, 'Friedrich Engels'
, 'Queen Victoria'
);

Словарь реляционной базы данных:

relation (mathematics) Given sets s1, s2, ..., sn, not necessarily distinct, r is a relation on those sets if and only if it's a set of n-tuples each of which has its first element from s1, its second element from s2, and so on. (Equivalently, r is a subset of the Cartesian product s1 x s2 x ... x sn.)

Set si is the ith domain of r (i = 1, ..., n). Note: There are several important logical differences between relations in mathematics and their relational model counterparts. Here are some of them:

  • Mathematical relations have a left-to-right ordering to their attributes.
  • Actually, mathematical relations have, at best, only a very rudimentary concept of attributes anyway. Certainly their attributes aren't named, other than by their ordinal position.
  • As a consequence, mathematical relations don't really have either a heading or a type in the relational model sense.
  • Mathematical relations are usually either binary or, just occasionally, unary. By contrast, relations in the relational model are of degree n, where n can be any nonnegative integer.
  • Relational operators such as JOIN, EXTEND, and the rest were first defined in the context of the relational model specifically; the mathematical theory of relations includes few such operators.

And so on (the foregoing isn't meant to be an exhaustive list).

Согласны ли вы, что сегодняшние RDMS служба поддержки - это реляционная модель, однако разработчики схем редко ее реализуют?

Jé Queue 15.12.2009 08:38

Вы задаете сложный вопрос, но считаете ли вы, что DB2 & | Системы Oracle, которые не поддерживают истинную модель связьal?

Jé Queue 16.12.2009 02:09

да. Системы баз данных SQL - это всего лишь системы баз данных SQL, а не системы реляционных баз данных.

just somebody 16.12.2009 02:43

Вы имеете в виду объектные базы данных, когда говорите о реляционных базах данных? То есть db4o и др.? На мой взгляд, система реляционных баз данных - это системы, в которых вы моделируете отношения между сущностями, также известные как внешние ключи и каскады обновления / удаления. К сожалению, в большинстве случаев эти объекты представляют собой плоские двумерные таблицы в СУБД ...

Michael Stum 16.12.2009 03:11

@Michael Stum: нет, см. Развернутый ответ и извините, если он не очень внятный. Здесь уже далеко за полночь, а я почти закончил со второй бутылкой вина.

just somebody 16.12.2009 04:55

@ Просто кто-нибудь, все по-прежнему хорошо, вам следует задать здесь еще один вопрос, чтобы обсудить его дальше. то есть Oracle может по-прежнему поддерживать модель, которую вы описали выше, классическую модель RELATION (не реляционную). (Отсутствие) Существование можно проверить, и это можно использовать в заданных запросах минус / пересечение / & c. Да, SQL используется для объединения всего этого. Не все схемы написаны с внешними ключами в таблицах.

Jé Queue 16.12.2009 07:49

Разработка - это 80% дизайна и 20% кодирования.

Я считаю, что разработчики должны тратить 80% времени на детальное проектирование того, что они собираются построить, и только 20% времени на кодирование того, что они разработали. Это приведет к созданию кода с почти нулевым количеством ошибок и значительной экономии на цикле тестирования-исправления-повторного тестирования.

Раннее начало работы с металлом (или IDE) похоже на преждевременную оптимизацию, которая, как известно, является корнем всех зол. Продуманный предварительный дизайн (я не обязательно говорю об огромном проектном документе, простые рисунки на белой доске тоже подойдут) принесет гораздо лучшие результаты, чем просто кодирование и исправление.

Простота против оптимальности

Я считаю, что очень сложно написать простой и оптимальный код.

80% ошибок вносятся еще на стадии проектирования.
Остальные 80% вводятся на этапе кодирования.

(Это мнение было вдохновлено чтением ответа Димы Маленко. «Разработка - это 80% дизайна и 20% кодирования», да. «Это приведет к созданию кода с почти нулевым количеством ошибок», нет.)

Лучшие практики - нет.

маленький код всегда лучше, но тогда сложный ?: вместо if-else заставил меня понять, что иногда большой код более читабелен.

Python делает все, что делают другие языки программирования, за половину времени разработки ... и Google тоже !!! Если вы не согласны, посмотрите Незагруженная ласточка.

Подождите, это факт. Можно ли это по-прежнему считать ответом на этот вопрос?

Что ж, на самом деле Python все еще нуждается в нескольких модулях C для некоторых функций.

Tor Valamo 27.12.2009 10:48

Незагруженная ласточка не готова к работе в прайм-тайм, за исключением определенных мест внутри Google, а "от 2 до 10 раз" быстрее, чем интерпретируемый питон, не приближается к скорости реального нативного кода для большинства рабочих нагрузок, которые не выполняются. веб-стропальщик. Если «все» означает «чушь в сети, которую я считаю программированием», то да, Python может это сделать. И я люблю питона. Но я также считаю, что производительность такая же быстрая, как и родная, как черепаха. Да, и не забывайте о глобальной блокировке интерпретатора (GIL).

Warren P 01.04.2010 04:07

Нижний CamelCase - это глупо и бессмысленно

Использование нижнего camelCase делает имя / идентификатор («имя», используемое с этого момента) похожим на двухчастную вещь. Однако верхний регистр CamelCase дает четкое указание на то, что все слова принадлежат друг другу.

Венгерская нотация отличается ... потому что первая часть имени является индикатором типа и поэтому имеет отдельное значение от остальной части имени.

Кто-то может возразить, что нижний camelCase следует использовать для функций / процедур, особенно внутри классов. Это популярно в Java и объектно-ориентированном PHP. Однако нет причин делать это, чтобы указать, что они являются методами класса, поскольку К ОНИ ДОСТУПНЫ становится более чем очевидным, что это всего лишь методы.

Некоторые примеры кода:

# Java
myobj.objMethod() 
# doesn't the dot and parens indicate that objMethod is a method of myobj?

# PHP
$myobj->objMethod() 
# doesn't the pointer and parens indicate that objMethod is a method of myobj?

Верхний CamelCase полезен для имен классов и других статических имен. Весь нестатический контент следует распознавать по способу доступа к нему, а не по формату имени (!)

Вот мой пример однородного кода, где поведение имени обозначается другими вещами, а не их именами ... (также я предпочитаю подчеркивание для разделения слов в именах).

# Java
my_obj = new MyObj() # Clearly a class, since it's upper CamelCase
my_obj.obj_method() # Clearly a method, since it's executed
my_obj.obj_var # Clearly an attribute, since it's referenced

# PHP
$my_obj = new MyObj()
$my_obj->obj_method()
$my_obj->obj_var
MyObj::MyStaticMethod()

# Python
MyObj = MyClass # copies the reference of the class to a new name
my_obj = MyObj() # Clearly a class, being instantiated
my_obj.obj_method() # Clearly a method, since it's executed
my_obj.obj_var # clearly an attribute, since it's referenced
my_obj.obj_method # Also, an attribute, but holding the instance method.
my_method = myobj.obj_method # Instance method
my_method() # Same as myobj.obj_method()
MyClassMethod = MyObj.obj_method # Attribute holding the class method
MyClassMethod(myobj) # Same as myobj.obj_method()
MyClassMethod(MyObj) # Same as calling MyObj.obj_method() as a static classmethod

Итак, мое полностью obсубъективное мнение о camelCase.

подчеркивания отстой. За исключением того, как я их использую, а именно, чтобы пометить метод как «что-то отстойное, и вам определенно не следует использовать, даже если он общедоступен».

Warren P 01.04.2010 04:25

Зависит от языка программирования.

user142019 20.12.2010 17:39

во всяком случае, язык программирования - наименее важная переменная в этом

Tor Valamo 22.12.2010 04:23

Программистам нужно разговаривать с клиентами

Некоторые программисты считают, что им не обязательно разговаривать с клиентами. Для вашей компании это верный способ написать что-то абсолютно гениальное, что никто не может понять, для чего это и как это было предназначено для использования.

Вы не можете ожидать, что менеджеры по продукту и бизнес-аналитики будут принимать все решения. Фактически, программисты должны принимать 990 из 1000 (часто небольших) решений, связанных с созданием модуля или функции, иначе продукт просто никогда не будет выпущен! Поэтому убедитесь, что вы принимаете правильные решения. Понимайте своих клиентов, работайте с ними, наблюдайте, как они используют ваше программное обеспечение.

Если вы собираетесь писать лучший код, вы хотите, чтобы люди использовали его. Заинтересуйтесь своей пользовательской базой и учитесь у «тупых идиотов». Не бойтесь, они действительно полюбят вас за это.

Строгое соблюдение стандартов препятствует простоте.

MVC переоценен для веб-сайтов. В основном это просто VC, иногда M.

Как насчет того, чтобы этот MVC переоценен, точка.

Warren P 01.04.2010 04:18

Другие вопросы по теме