Как читать код без какой-либо борьбы

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

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

Ответ 1

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

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

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

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

От Как записать неподдающийся код код

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

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

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

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

EDIT:

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

"Для различий между Apss Hungarian и Systems Hungarian см. Joel on Software".

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

Ответ 2

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

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

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

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

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

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

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

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

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

EDIT: не забудьте проверить разницу между Apps Hungarian и Systems Hungarian, как упоминалось @Tobias Langner в комментарии к более раннему ответу.

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

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

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

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

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

Head First Design Patterns - хороший вводный ввод с использованием Java, но код доступен для С++ и С# в качестве загрузки (см. "код книги и загрузки" на на сайте книги)

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

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Я нашел эту статью о Joel on Software, которая очень актуальна для обсуждения венгерской нотации.

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

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

Всегда будет борьба с чтением кода, если вы не Джон Скотт. Это не означает, что это большая проблема, скорее, если вы не можете есть, спать, дышать на этом языке программирования, для переваривания кода всегда потребуется немного времени. Глядя на код других людей, безусловно, является хорошим предложением помочь в некотором роде, но помните, что существует множество различных соглашений о кодировании, и некоторые из них могут быть более принудительными, чем другие, например. имена интерфейсов начинаются с I, чтобы дать простой пример. Итак, я думаю, что я говорю, что даже с Visual Studio и Resharper все еще есть небольшая работа, чтобы понять несколько строк кода, так как я еще не могу выписать предложения на С#.

Ответ 13

1) Просветите себя. Прочтите соответствующую литературу. 2) Запись кода 3) Читать код 4) Прочтите соответствующие блоги. Посетите http://hanselminutes.com. Он программист из Microsoft. Несмотря на то, что вы не программируете на стек microsoft, хорошо читать. Там есть подкаст, который отвечает на этот вопрос.

Ответ 14

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

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

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