Принцип современных систем программирования

11. Принципы функционирования систем программирования. Функции текстовых редакторов в системах программирования. Компилятор как составная часть системы программирования.

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

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

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

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

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

Читайте также:  Assembler программирование микроконтроллеров avr

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

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

Компилятор как составная часть системы программирования

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

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

Сейчас, работая с системой программирования, пользователь, как правило, име­ет дело только с ее интерфейсной частью, которую обычно представляет тексто­вый редактор с расширенными функциями. Запуск модуля компилятора и вся его работа происходят автоматически и скрытно от пользователя — разработ­чик видит только конечные результаты выполнения компилятора. Хотя многие современные системы программирования сохранили прежнюю возможность не­посредственного взаимодействия разработчика с компилятором (это и Makefile, и так называемый «интерфейс командной строки»), но пользуется этими средст­вами только узкий круг профессионалов. Большинство пользователей систем программирования сейчас редко непосредственно сталкиваются с компилято­рами.

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

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

Компоновщик. Назначение и функции компоновщика.

Источник

10 базовых принципов программирования

Каждый может написать код, скажете вы. А хороший код? Вот здесь начинаются трудности. Мы все слышали эти страшные истории про невероятные цепочки из if-else, программы, которые падают при изменении всего лишь одной переменной, непонятные методы и так далее.

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

1. KISS

Принцип «простоты» (“keep it simple, stupid” principle) особенно важен для проектов средней сложности. Если вы думаете, что упростили достаточно, упростите код еще на один уровень, но не забывайте начинать с малого, чтобы не создать целую гору проблем.

10 Basic Programming Principles Every Programmer Must Follow programming principle programming

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

«Совершенство достигнуто не тогда, когда нечего добавить, а тогда, когда нечего отнять.»

2. DRY

Принцип „отсутствия повторов” (“don’t repeat yourself” principle) имеет решающее значение при написании чистого и легко изменяемого кода. При написании кода следует избегать дублирования данных и логики. Если вы заметили, что один и тот же фрагмент кода написан снова и снова, принцип был нарушен.

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

3. Open/Closed

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

4. Принцип единой ответственности

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

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

6. Разделение интересов

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

10 Basic Programming Principles Every Programmer Must Follow programming principle mvc pattern

Известным примером данного принципа является парадигма model-view-controller (MVC), которая разделяет программу на три различные области: данные («модель»), логика и то, что видит конечный пользователь. Например, код, который обрабатывает загрузку и сохранение данных в базе данных, не должен отвечать за то, как отображать эти данные в Интернете. Данный принцип упрощает техническое обслуживание. И в будущем, если вам когда-нибудь понадобится переписать весь код, вы можете сделать это, не беспокоясь о том, как же данные будут сохранены или как будет обработана логика.

7. YAGNI

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

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

8. Избежание преждевременной оптимизации

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

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

9. Рефакторинг, рефакторинг и ещё раз рефакторинг

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

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

10 Basic Programming Principles Every Programmer Must Follow programming principle coding

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

10. Чистый код > Умный код

Говоря о чистом коде, оставьте где-то далеко своё этот „умный” код. Под умным кодом подразумевается тип кода, который больше похож на загадку, чем на решение, и существует только для того, чтобы показать, насколько вы умны. На самом деле, никого это не волнует.

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

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

Что делает программиста эффективным?

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

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

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

Источник

Оцените статью