Как читать код без всякой борьбы - PullRequest
11 голосов
/ 30 июля 2009

Я новичок в профессиональном развитии. Я имею в виду, что у меня всего 5 месяцев опыта профессионального развития. До этого я изучал это сам или в университете. Поэтому я просматривал вопросы и нашел здесь вопрос о качестве кода. И я получил вопрос, связанный с этим сам. Как улучшить мои навыки понимания кода / чтения? Также это улучшит качество кода, который я напишу? Есть ли лучшая нотация кода, чем венгерская? И есть ли действительно хорошие книги по шаблонам проектирования C ++ (или язык не имеет значения?)? Спасибо заранее, отвечая на эти вопросы и помогая мне улучшить:)

P.S. - Также я забыл сказать вам, что я работаю с языками C ++ и C #.

Ответы [ 14 ]

18 голосов
/ 30 июля 2009

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

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

На самом деле название венгерской нотации само по себе является шуткой:

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

С Как написать не поддерживаемый код

"Венгерская нотация является тактической ядерное оружие исходного кода методы запутывания; используй это! Из-за абсолютный объем исходного кода При этой идиоме ничто не может убить инженера по обслуживанию быстрее чем хорошо спланированная венгерская нотация атака. "

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

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

- Линус Торвальдс

РЕДАКТИРОВАТЬ:

Взято из комментария Тобиаса Лангнера.

«О различиях между Apss Hungarian и Systems Hungarian см. Джоэл о программном обеспечении ».

У Joel on Software есть советы о том, как читать код других людей под названием Чтение кода похоже на чтение Талмуда .

12 голосов
/ 30 июля 2009

Как мне увеличить мой код навыки понимания / чтения?

Читать читать читать. Учись на своих ошибках. Просмотрите ответы на SO и в других местах. Когда вы можете вспомнить кусок кода, который вы написали, и говорите: «Ага! Я должен был вместо этого сделать xyz!» тогда ты учишься. Прочитайте хорошую книгу на своем языке, выйдите за рамки основ и поймите более продвинутые концепции.

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

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

Также это улучшит качество кода Я напишу?

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

Есть ли лучшая запись кода, чем Венгерский?

Это зависит. Обычно я избегаю их и использую описательные имена. Единственное исключение, в котором я могу использовать нотации венгерского типа, относится к элементам пользовательского интерфейса, таким как элементы управления Windows Forms или ASP.NET, например: использование btn в качестве префикса для кнопки «Отправить» ( btnSubmit ), txt для TextBox ( txtFirstName ) и т. Д., Но оно отличается от проекта к проекту в зависимости от подхода и используемых шаблонов.

Что касается элементов пользовательского интерфейса, некоторые люди предпочитают хранить элементы в алфавитном порядке и могут добавлять тип элемента управления в конце, поэтому предыдущие примеры становятся submitButton и firstNameTextBox соответственно. В Windows Forms многие люди называют формы как frmMain, который является венгерским, в то время как другие предпочитают называть его на основе имени приложения или цели формы, такой как MainForm, ReportForm и т. Д.

РЕДАКТИРОВАТЬ: не забудьте проверить разницу между Apps Hungarian и Systems Hungarian , как упомянуто @Tobias Langner в комментарии к предыдущему ответу.

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

Соглашения об именах и многое другое можно найти в Руководстве по проектированию .NET Framework. Существует книга , а некоторые из них на MSDN .

И есть ли действительно хорошие книги для Шаблоны проектирования C ++ (или язык не имеет значения?)?

Шаблоны проектирования должны быть применимы к любому языку. Как только вы поймете концепцию и обоснование полезности этого шаблона, вы сможете применить его на своем языке. Конечно, не подходите ко всему с позиции «написано в камне»; цель - шаблон, реализация может незначительно отличаться для разных языков в зависимости от доступных вам языковых функций. Взять, к примеру, шаблон Decorator и посмотреть, как методы расширения C # позволяют реализовать его иначе, чем без него .

Дизайн шаблона книги:

Head First Design Patterns - хорошее введение для начинающих, использующее Java, но код доступен для C ++ и C # для загрузки (см. Раздел «Код книги и загрузки» на сайте книги )

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения - классическая банда из четырех человек (GOF)

Шаблоны архитектуры корпоративных приложений - Мартин Фаулер

Если вы ищете лучшие практики для качественного кодирования в C ++ и C #, тогда ищите книги « Effective C ++ » и « More Effective C ++ » (Скотт Мейерс) и книги " Effective C # " и " More Effective C # " (Билл Вагнер). Они не будут держать вас за руку, поэтому вы должны понимать язык в целом. В серии «Эффективно» есть и другие книги, поэтому обязательно посмотрите, что доступно для ваших языков.

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

РЕДАКТИРОВАТЬ: добавил больше деталей в вопросе венгерской нотации.

10 голосов
/ 30 июля 2009

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

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

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

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

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

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

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

6 голосов
/ 30 июля 2009

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

6 голосов
/ 30 июля 2009

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

3 голосов
/ 30 июля 2009

Как мне увеличить мой код навыки понимания / чтения?

Чтение кода похоже на танец самостоятельно. Вам нужен партнер, и я предлагаю отладчик.

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

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

3 голосов
/ 30 июля 2009

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

Кажется, что первоначальная цель нотации состояла в том, чтобы закодировать информацию о типе, которая не была сразу очевидна - не то, является ли переменная int (iFoo), но что такое вид типа int - такое как расстояние в сантиметрах (см-фу). Таким образом, если вы видите «cmFoo = mBar», вы можете сказать, что это неправильно, потому что, хотя оба являются целыми числами, один - это метры, а другой - сантиметры, и, следовательно, логика оператора неверна, даже хотя синтаксис в порядке. (Конечно, я лично предпочитаю использовать классы так, чтобы это утверждение даже не скомпилировалось или сделало бы преобразование за вас).

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

Каждый должен прочитать эту статью - Создание неправильного кода выглядит неправильно

3 голосов
/ 30 июля 2009

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

2 голосов
/ 30 июля 2009

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

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

1 голос
/ 30 июля 2009

Я сейчас читаю Head First Design Patterns, и это очень полезно. Он представляет информацию в новом виде, который легко понять. Приятно видеть, что у них есть версия C # для скачивания.

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