Насколько ваш стиль должен /должен соответствовать вашему умению на языке? [закрыто]

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

  • Интервью, в котором были проанализированы мои навыки Perl. Я всегда использую C-стиль для циклов и использую карту примерно раз в каждых 10 000 строк кода, поэтому мне почти всегда приходится ссылаться на нее перед ее использованием. Хотя я могу интерпретировать код других, используя это, это не мой стиль, и по причинам, связанным с читабельностью и легкостью перехода между языками. Я, по крайней мере, понял, что для этого я заманил.
  • Этот ответ на мой вопрос, в котором продолжался ответчик для рефакторинга и пуленепробиваемого моего крошечного сценария. Я признаю, что был немного оскорблен, и я немного раздражался этим, хотя я могу понять, как это может быть полезно для привычки.

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

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

6 голосов | спросил Jeff Ferland 3 +04002011-10-03T21:51:54+04:00312011bEurope/MoscowMon, 03 Oct 2011 21:51:54 +0400 2011, 21:51:54

5 ответов


15

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

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

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

Причина для изучения правильного языкового стиля:

  • Интеграция с существующим кодом лучше
  • Избегайте ошибок, которые не очевидны.
  • Разрешить другим пользователям легко понять ваш код
    • Вы всегда можете это обработать, но чтение кода, который отличается от того, что вы ожидаете, намного сложнее, чем читать его в стиле, который вы ожидаете.
ответил Martin York 3 +04002011-10-03T22:21:49+04:00312011bEurope/MoscowMon, 03 Oct 2011 22:21:49 +0400 2011, 22:21:49
14
  

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

Да, да. Хорошие программисты на Perl хорошо знают Perl и эффективно используют его.

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

my @selectedThings
for (my $i = 0; $i <= $#things; ++$i) {
  my $t = $thing[$i]
  if ($t ... ) {
    @selectedThings.push $t
  }
}

чем:

my @selectedThings = @things.grep { ... }

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

Существует огромная разница в стоимости разработки и поддержки 25 000 линейных приложений, чем 5000-линейное приложение, даже если они делают точно то же самое.

  

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

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

  

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

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

ответил kevin cline 4 +04002011-10-04T01:25:57+04:00312011bEurope/MoscowTue, 04 Oct 2011 01:25:57 +0400 2011, 01:25:57
6

1) Подобно ikegami, я трачу немного времени на SO, отвечая на вопросы Perl, и один из моих общих советов: «Не используйте C-style for в Perl, вместо этого используйте версию для итерации списка, потому что сложнее ее испортить ». Если вы напишете for my $i (1 .. 10), вы не ошибетесь, чтобы получить граничные условия, а также быстрее писать и требовать меньше мысли, чем эквивалент C-стиля. Если бы я был интервьюером и видел, что вы пишете for (my $i = 1; $i <= 10; $i++), я бы поставил под вопрос, насколько хорошо вы знаете Perl, и вы пишете Perl напрямую, или если вы думали в C, а затем переводили его в Perl.

Если я увидел, что вы пишете for (my $i = 1; $i <= 10; $i++) { $data = $some_array[$i];... } вместо for my $data (@some_array) { ... }, с другой стороны, тогда я бы сделал вывод, что вы, несомненно, не знаете хорошо знаете Perl, и интервью будет очень хорошо в моем сознании, предполагая, что это было для опытного Perl позиция. (Если только $i не будет использоваться для чего-то другого, кроме как только последовательная индексация в @some_array, но даже тогда я бы предпочел for (..) over for (;;))

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

2) Что касается связанного ответа, ваш код там выглядит хорошо для меня в целом. Главное, что я задаю, это префикс & при последнем вызове функции. Вам это не нужно (если вы не пишете Perl 4, и в этом случае у вас есть проблемы far ), и в наши дни это обычно обескураживает, потому что у него есть побочные эффекты, которые не сразу очевидны , Определенные бонусные баллы за использование strict, three-arg open, лексические дескрипторы файлов и модули CPAN.

В большей части вашего второго вопроса я часто переписываю код людей, чтобы очистить его и показать (по крайней мере некоторые элементы, я пытаюсь сопоставить его с кажущимся уровнем навыков), как бы я это сделал. Это не значит, что он не является оригинальным автором; это попытка помочь и воспитывать сверх непосредственного вопроса. Обычно это тоже весело. Но, возможно, самое главное, простой факт заключается в том, что Perl имеет проблему с изображением. Есть много людей (* cough * Job * cough *), которые считают, что «нет такого понятия, как хороший стиль Perl», и я чувствую, что важно опровергнуть эту веру, продемонстрировав хорошо написанный, поддерживаемый Perl кода, когда появляется такая возможность.

ответил Dave Sherohman 4 +04002011-10-04T15:11:29+04:00312011bEurope/MoscowTue, 04 Oct 2011 15:11:29 +0400 2011, 15:11:29
3

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

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

ответил JeffO 3 +04002011-10-03T22:15:45+04:00312011bEurope/MoscowMon, 03 Oct 2011 22:15:45 +0400 2011, 22:15:45
1
  

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

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

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

ответил Caleb 4 +04002011-10-04T18:52:51+04:00312011bEurope/MoscowTue, 04 Oct 2011 18:52:51 +0400 2011, 18:52:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132