Долгосрочные, неправильные предположения программирования [закрыто]


281

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

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

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

Будь откровенен; какое твёрдое убеждение у тебя было, и сколько примерно ты придерживался этого предположения? Это может быть алгоритм, язык, концепция программирования, тестирование или что-то еще о программировании, языках программирования или информатике.


Ответы:


545

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

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

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


68
Это точно! Это проблема этого возраста. Информация также обескураживает. У меня было это откровение несколько недель назад, когда я чувствовал себя полным неудачником во всем, что я делал (не в первый раз) в отношении исследований. Парни, которые публикуют свои статьи в IEEE Transactions, не обязательно обладают теми же навыками, что и парни, которые работают в Google, хвастаются в StackOverflow, являются отличными профессорами или пишут отличные блоги по программированию. Конечно, лучшие парни экспоненциально круче нас, но они не знают всего, что вы знаете, чего вы не знаете. Так что оставайся крутым.
JBASKO

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

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

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

4
+1 Хорошо, что я это прочитал. Я думал, что я был единственным.
Рэнделл

308

Чтобы люди знали, чего они хотят.

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

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

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

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


9
Или измените то, что они хотят, увидев, что они хотели ранее. Людям нравится менять свое мнение. Я знаю, потому что я человек.
Дж. Полфер

13
Вы давали им то, что они просили, а не то, что они хотели.
Брент Бэйсли

47
Почему скучные бесспорные без ответа так чрезмерно голосуют ?!
nes1983

39
Вот это да. Похоже, кто-то нуждается в объятии.
bzlm

24
Боже мой, люди жалуются, репутация stackoverflow не соревнование. Подтвердите, если вам понравился ответ, не отрицайте, потому что вы ревнуете, что не опубликовали его первым.
Дмитрий Фарков

292

Что я знаю, где проблема производительности без профилирования


10
Я думаю, что именно поэтому преждевременная оптимизация так распространена.
Хао Вуй Лим

10
+1 Вау, кто-то включил ответ, который не был тривиальным или не по теме.
Марк Роджерс

3
У меня есть несколько планшетов, которые должны помочь с преждевременной оптимизацией ...
AndyM

232

Что у меня должна быть только одна точка выхода из функции / метода.


91
Отличная реализация; выходите так часто, как это необходимо. Нужно выйти из функции, как только нет смысла продолжать в ней дальше. Это может снизить сложность и улучшить читаемость, например, избегая глубоко вложенных условных выражений, когда они являются предварительными условиями, необходимыми для правильной работы метода. В современных языках с управлением памятью и конструкциями ресурсов, такими как использование / finally, продолжение до конца метода догматически не имеет смысла.
Трийнко

24
Кстати, кто это придумал? Это как легенда городского программирования.
Брэд

49
Люди, которые должны отлаживать чужой код, придумали это.
gatorfax

23
Я думаю, что эта распространенная, но ошибочная идея основана на недоразумении. Когда вы выходите из функции, вы всегда должны возвращаться к одной и той же точке. Это было важное правило в таких языках, как BASIC, которое не обеспечивало его: правило означало, например, что вы должны использовать GOSUB вместо GOTO. В таких языках, как C # или Java, которые вызывают методы, это происходит автоматически. Но поскольку он автоматический, я думаю, что он превратился из логической «только одна точка возврата» в бессмысленную «только одну точку выхода».
Райан Ланди

35
Из языков, таких как C, где вам нужно вручную высвобождать ресурсы. Несколько точек выхода были хорошим шансом для утечки ресурсов. ИМО не имеет смысла в языках с исключениями, так как вы часто больше не знаете точек выхода или находитесь в середине утверждения. - В этих языках все, что остается, это «структура для удобочитаемости».
peterchen

228

Это непрограммисты понимают, о чем я говорю.


243
понимать / заботиться ..
nickf

8
У меня все еще есть это время от времени ... Я думал, что по крайней мере моя жена начала бы понимать правильно: P
workmad3

3
О, дорогой, я боюсь, что еще не научился этому!
Thatismatt

3
да, иногда я забываю свою аудиторию и в конечном итоге нахожу кучку людей с пустыми взглядами на своем лице, и мне приятно, когда люди проявляют интерес
Petey B

3
Это мое самое большое разочарование в профессии.
Андрес Яан Так

219

Это безошибочное программное обеспечение было возможно.


35
+1, хотя НАСА почти справилось с этим
Патрик Макдональд

55
Да, но «почти» обошлось в несколько миллионов долларов :)
Джем

15
@Triynko ваше «возможно» и @ «возможно» @ JaredPar не то же самое. Теория и практика могут быть одинаковыми в теории, но на практике они очень разные.
Вильгельмтель

13
@ Джозеф, отчасти проблема в том, что люди думают, что программы Hello World не содержат ошибок. Они не. Большинство из них не проверяют наличие ошибок в printf, например, или в учетной записи для других неудачных попыток ввода-вывода.
JaredPar

9
@RussellH, нет. Вы не смогли указать возвращаемое значение, и полученный процесс вернет случайную мусорную память.
JaredPar

199

Частные переменные-члены были частными для экземпляра, а не для класса.


192
Я придерживался этого предположения до ... только сейчас.
TheMissingLINQ

9
@ebrown Я обычно нахожу это полезным только при написании метода equals ()
Дейв Уэбб

12
Они в рубине.
Майк Кучера

17
Это так нормально для меня, что этот ответ не имел смысла первые несколько раз, когда я его читал. Теперь я хочу выучить Ruby, чтобы он мог сбить меня с толку. :)
jmucchiello

16
@Kiewic Если у вас есть закрытая переменная-член myVar внутри вашего класса, вы можете ссылаться на other.myVar непосредственно в своем коде, если other является экземпляром этого класса. Я предполагал, потому что это было «личное», вы должны были использовать other.getMyVar () даже внутри класса.
Дэйв Уэбб

166

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


53
Искренний или нет, это заставило меня сильно смеяться в конце долгого рабочего дня. : P
Оливье Трембле

5
++ для хорошего смеха. Похоже, что мой (нетехнический) муж придумал бы.
Джесс

11
+1! Я думал, что печатание утки включало также печатание. Или утки. Или оба.
SqlACID

162

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


32
Это, друг мой, должно звучать так: «Чтобы вы могли полностью понять проблему». Но это так верно. И, очевидно, сложная концепция, чтобы понять или даже принять.
KarlP

4
Вы не можете понять проблему «полностью», но, безусловно, вы ДОЛЖНЫ понять проблему (в некоторой степени), прежде чем начать разработку. bit.ly/kLXgL
OscarRyz

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

158

Умные люди всегда умнее меня.

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

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

Мораль истории: никогда не стоит недооценивать то, что вы можете принести на стол.


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

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

1
Вот эта старая вещь «делай другим» снова… Я придумываю новую фразу: «Техническое приобретение» - состояние превосходства, потому что ты знаешь кое-что, и совершаешь ошибку, позволяя всем остальным это знать. @seealso: умница.
Corlettk

1
Отличное наблюдение - моя версия более негативна: «Каждый делает глупость время от времени». В некоторой степени относится к "не переворачивай бит бозо".
peterchen

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

131

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


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

2
Полностью. Я перешел от «Этого никогда не случится» к «Этого никогда не случится, кроме как на этой работе», к «У каждого места плохой код».
Райан Ланди

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

3
@corlettk: Вы имеете в виду, что кодирование обезьян - это норма, нет? Учтите, что хакинг - это искусство, искусство высокого уровня, которого я очень далек от достижения.
Хазен

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

113

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

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

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


26
Развязанный = истинная абстракция. Абстракция сама по себе ... преждевременная оптимизация.
Джаред Апдайк

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

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

Я полностью согласен с Джаредом ... если вам удалось добраться до "простого и развязанного", вы достигли настоящей абстракции. Как можно отделить вещи, если вы не абстрагировали их в интерфейсы, фабрики и т.д ...? Как это может быть просто, если вы не удалите все «если type = this, то сделайте это, или если тип будет таким, то сделайте что-нибудь еще код»?
Ричард Энтони Хейн

Тоже самое. Я думаю, что я узнал об абстракции до того, как сделал много спагетти-кода. Они должны были научить, как добиться цели, даже если код спагетти, а затем рассказать нам о ОО и абстракции.
hasen

103

Это женщины считают программистов сексуальными ...


70
Подожди секунду???
Чагдаш Текин

4
хе хе хе .. окей, я искал что-то, чтобы сохранить свою улыбку до конца дня. Я думаю, что нашел это !!! :)
OscarRyz

17
«Ох, детка! Да, скажи« если »- брось мне несколько исключений ... Да, ты знаешь, как я этого хочу»: P
cwap

5
Какой? Программисты богаты? Когда это произошло?
Филипп Навара

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

100

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


37
Продавать программное обеспечение? Это так 1999 год.
bzlm

Многие сайты на основе подписки теперь Adays ...
CGP

11
Microsoft, конечно, делает убийство в этом.
Билл Мартин

должен любить этот, так правда.
доктор зло

18
Желаю, чтобы улучшение качества / производительности нашего программного обеспечения считалось функцией
Том Лейс

82

Что все языки (в основном) созданы равными.

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

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


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

7
Но если два языка программирования завершены по Тьюрингу, то в чем разница? Вы можете написать любую программу на любом языке! ;)
Билл Ящерица

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

13
BrainFu ** такой же полный, как и питон.
Хазен

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

81

То, что большое соотношение комментарий / код - это хорошо.

Мне потребовалось некоторое время, чтобы понять, что код должен самодокументироваться. Конечно, комментарии здесь и там полезны, если код не может быть прояснен или если есть важная причина, почему что-то делается. Но, в общем, лучше потратить время на комментарии, переименовывая переменные. Это чище, яснее, и комментарии не «не синхронизированы» с кодом.


1
Я согласен в фактическом коде ... за исключением комментариев Javadoc (или эквивалент).
Corlettk

11
+1, даже не
заводите

Чтобы добавить к этому, выражение assert () лучше, чем документирование предусловия / постусловия. Контракты кода .NET 4 также могут автоматически превращаться в документацию!
Роберт Фрейзер

66

Это программирование невозможно.

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

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

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


7
Аминь! Но, эй, не провозглашать этот вид с крыш. Мы не хотим, чтобы все знали, что программирование - это весело, не так ли? ;); P
Петер Перхач

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

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

4
@ Олафур: Почему вы хотите, чтобы вопрос был вики, а не ваш ответ?
gnovice

2
Это точно отражает мой опыт. Я хотел бы начать раньше: P
Skilldrick

65

«On Error Resume Next» была какая-то обработка ошибок


6
Я чувствую, что вы ... но в vbscript (особенно в asp) это была ЕДИНСТВЕННАЯ опция "обработки ошибок" в сочетании с разумной проверкой, действительно ли произошла ошибка, и достаточным количеством молитв.
плоская линия

2
Да ... это какой-то ... просто вид, от которого мы рады уйти
Мэтью Уайтед

6
Хорошо?! но это. Вы начинаете свой блок обработки ошибок с On Error Resume Next, попробуйте что-нибудь, а затем If (err.number <> 0) then
jpinto3912

Разве это не единственный vbscript, эквивалентный try catch?
Джеймс

-1: это своего рода обработка ошибок. Это просто не так элегантно.
JohnFx

64

Это программное обеспечение программирования требует прочной основы в высшей математике.

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

Десять лет спустя, и я только однажды должен был сделать то, что не мог восьмиклассник


5
Очень верно. В большинстве случаев вам не нужно быть экспертом по математике. Единственный раз, когда мне действительно нужно было знать какую-либо сложную математику, это когда я занимался 3D-программированием как хобби. Фактически, именно 3D-программирование в старшей школе вдохновило меня уделять больше внимания в триггерных и предварительных классах. Кроме этого, очень простая математика - это обычно все, что вам нужно.
Стив Уортэм

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

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

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

6
Я думаю, что концепции функционального программирования гораздо легче понять, если у вас есть прочная основа в математике, просто потому, что вас не пугает синтаксис. Это выглядит знакомо. Я сделал ошибку, используя простые математические функции, чтобы продемонстрировать новые для C # концепции функционального программирования. Некоторые люди сразу заявляли, что это слишком сложно.
Ричард Энтони Хейн

63

Это оптимизация == переписывание на ассемблере.

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


8
Peek и Poke ваши друзья :)
Мэтью Уайтед

4
Извращенец! Скажи это судье!
Шалом Креймер

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

@scraimer: Необычно увидеть тебя здесь, я бы никогда этого не ожидал ;-)
Роберт С. Барнс

@ Мэтью - «Пик и Пок - твои друзья :)»: ** ЧРЕЗВЫЧАЙНО завидую, что я не написал это первым.
FastAl

63
  • Это руководители компании заботятся о качестве кода.
  • Чем меньше строк, тем лучше.

2
им все равно, но вы должны сочетать навыки художника с навыками работника. Каждая часть алгоритма тоже не может быть произведением искусства. Некоторые из них будут пухлыми, поэтому используйте «менее используемые». Помните старое правило 80/20. 80% программы используется в 20% случаев. Так что сфокусируйте 80% на 20% кода и сделайте эту РЕАЛЬНУЮ ЧАСТЬ ИСКУССТВА! : OP
BerggreenDK

71
меньше строк, тем лучше! Отчасти я не люблю Java как язык, потому что выполнение чего-либо занимает так много строк кода. Чем меньше строк кода, тем легче изменить ваш код.
Клавдиу

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

2
За исключением случаев, когда люди берутся за менталитет «чем меньше строк, тем лучше» с глубокими связанными вызовами методов 7, так что когда один из них выбрасывает нулевой указатель, вы не представляете, что это было. Или они объединяют столько действий в одну строку, что длина 150 символов, и выполняют 4 операции. Это усложняет чтение и отладку, но не ускоряет и не использует меньше памяти во время выполнения.
Трампас Кирк

17
Если ваша строка заканчивается))))) и вы не пишете Lisp, у вас слишком мало строк.

58

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


1
Это единственный ответ, который я поддержу, хотя это CW, поэтому это не имеет значения ...
Дэн Розенстарк

4
В некоторых системах IIRC еще в 60-х, а возможно, в 70-х годах использовалась только одна цифра, поскольку она использовала меньше памяти. Я даже видел бумажные формы, где были напечатаны «196_» и «197_».
немного

3
Я все еще вижу формы с 200_, и, вероятно, некоторые из них теперь напечатаны с 201_.
Мача

5
Печальная часть ... Unix получит второй раунд в 2038 году
Эван Плейс,

4
@ Билли Только потому, что архитектура машины меняется, не означает, что формат данных изменится. Хранение 2-значных разрешений в формате int создаст байтовый (8-битный) формат даты, и, тем не менее, это затронет тонны 32-битных машин с аппаратной архитектурой в 2k. Это еще один пример того, почему вы не позволяете аппаратным специалистам низкого уровня указывать форматы данных. Они копают щепотку с осознанием того, что в отдаленном будущем запланирован SNAFU.
Эван Плейс

57

Что-нибудь кроме вставки / пузырчатой ​​сортировки было просто темной магией.


Ха-ха, мне нравится этот, так как он попадает близко к дому. Сортировать быстрее, чем n-квадрат времени ?? Unpossible!
Росс

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

74
Я ИССЛЕДОВАТЕЛЬ в алгоритмах сортировки! И они все еще чувствуют себя как темная магия.
SPWorley

14
Однажды в моей программе была строка кода, которая была длинной и сложной, и мне не хотелось разбивать ее или объяснять (это была какая-то сложная формула освещения), поэтому я поместил все это в одну строку и #define ' это DARK_MAGICK, и единственным комментарием было предупреждение против попыток разгадать тайны темной магии
Алекс

2
Богосорт - самый загадочный из всех.
Алекс Бердсли

50

Этот XML будет действительно совместимым и удобочитаемым форматом данных.


7
XML не панацея, но я бы не хотел возвращаться к тем дням, когда я регулярно видел приложения, пытающиеся сжать реляционные данные в отдельные файлы CSV.
Тони Эджкомб

4
это совместимый синтаксис, без сомнения об этом. Просто этот синтаксис часто является наименее важным аспектом любого решения.
Саймон Гиббс

2
+1, вы можете добавить маленький и быстрый в список желаний тоже.
MarkJ

1
Верно, но улучшение по сравнению с CSV и фиксированной длиной, где без документации вы ввернуты.
Пит

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

48

Этот C ++ был как-то лучше, чем все остальные языки.

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

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


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

@JP: я доволен своим выбором слов :)
Binary Worrier

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

7
Я всегда предполагал, что C ++ хуже, чем обычный ANSI C, просто потому, что проблемы, с которыми я сталкивался, программисты на C ++ намного сложнее, чем те проблемы, с которыми я сталкивался, программисты на C.
Носредна

1
На самом деле, язык, который лучше всех остальных, это Common Lisp. C ++ неплох, хотя.
Дэвид Торнли

47

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


24
Я думаю, что это называется жизнью.
День Робина

9
хммм ... пришло время выручить эту компанию. ..
jpinto3912

8
@ jpinto3912: Нет. Потому что следующая компания тоже станет частью жизни (см. предыдущий комментарий).
Треб

42

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

Дизайнерские узоры ощущались как волшебство; Вы могли бы сделать действительно аккуратные вещи. Позже я обнаружил функциональное программирование (через Mozart / Oz, OCaml, позже Scala, Haskell и Clojure), и затем я понял, что многие шаблоны были просто шаблонными или дополнительной сложностью, потому что язык не был достаточно выразительным.

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


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

4
Неверно, как получается иметь первоклассные вещи вместо того, чтобы ограничивать возможности программиста, как в случае функций более высокого порядка. Лиспс - прекрасный пример этого.
egaga

38

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


114
Производители жестких дисков до сих пор не завоевали популярность ...
Майкл Майерс

10
@mmyers Я думаю, вы имеете в виду маркетологов жестких дисков, верно? Или диски на самом деле построены так?
Instantsoup

16
Эй, прекрати ненавидеть Киби. MeBi и KiBi, по крайней мере, однозначно.
bzlm

21
Кило означает 1000, Мега означает 1000000, Гига означает 1000000000. Это неправильно, а производители дисков, а не производители накопителей.
Марк Рэнсом

39
Никто не собирается это делать? Шутки в сторону? Хорошо, я сделаю это ... xkcd.com/394
Эрик Форбс

36

Это условие проверяет как:

if (condition1 && condition2 && condition3)

выполняются в неуказанном порядке ...


15
На каком языке? Такие языки, как C / C ++, Java и Python, гарантируют, что условия оцениваются слева направо, и что оценка останавливается на первом условии, которое возвращает false. Это часть спецификации языка. Я предполагаю, что большинство других языков дают такую ​​же гарантию.
Клинт Миллер

44
@Clint: Да, следовательно "это оказалось неправильно".
bzlm

да, это круто это делает запись вещей наподобие if (myList! = null && myList.Count> = 0) {do stuff ();} намного проще
Зак

4
на самом деле, это зависит от языка и & оценит все условия (не ярлык). И я видел, как многие люди используют And (&) в VB вместо AndAlso (&&)
Лукас

2
, , , На самом деле, это также приведет к сбою в VB.net, если вы не воспользуетесь комментарием AndAlso re Lucas
Binary Worrier

35

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


Но он не может быть таким уродливым, как парное программирование :-) за исключением, может быть, вашего кода
Egg

33
Это все зависит от другого человека. =)
JohnFx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.