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

ОБНОВЛЕНИЕ 2020 ГОДА: Я составил курс по Java, который знакомит с концепциями, которые я описал в этих статьях, но с большей глубиной и ясностью. Если вам нравятся мои тексты, думаю, вам понравятся мои видеолекции:

Рабочий класс Java: руководство по объектно-ориентированному программированию и архитектуре программного обеспечения для новичков Udemy Link | Ссылка Skillshare с бесплатной пробной версией

СОДЕРЖАНИЕ

1. Что такое программа? - набор инструкций, выполняемых системой обработки информации.

2. Проблемная область - Как разработать программу / приложение

3. Хранение информации - Как моделировать информацию (данные) в системе обработки информации.

4. Логика и ошибки - два (основных) типа логики в системе обработки информации; как правильно обрабатывать ошибки

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

6. Проверка программ с помощью тестов - объяснение теории, практики и преимуществ тестирования вашего программного обеспечения и применения разработки через тестирование

Что такое программа (буквально)?

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

Информация

По общему признанию, из трех терминов информация является наиболее общей, и поэтому ее труднее всего дать конкретному определению. Возьмем, к примеру, следующие фрагменты информации, которые передаются вам с помощью английского языка, арабских цифр и математического оператора «+»:

(x) - «Предполагая, что арифметика с основанием 10, 1 + 1 равно 2»

(y) - «Земля вращается вокруг Солнца»

Исходя из приведенных выше примеров, я считаю, что информация обычно обладает следующими качествами:

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

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

Например, я смотрю на свои руки и замечаю, что у меня их две (по крайней мере, на данный момент). По соглашению я бы обозначил количество рук, которыми обладаю, арабской цифрой «2». Однако, если бы древний римлянин посмотрел на свои руки, он по соглашению мог бы прийти к «Я-Я» как к подходящей абстракции для представления того же количества. Я должен отметить, что мое соглашение об использовании «2» по сравнению с древнеримским, использующим «II», по сравнению с компьютером, использующим «10» (что эквивалентно 2 в двоичной системе; это система счета с основанием 2), не означает, что моя конвенция превосходит или точнее.

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

Примечание: когда мы говорим ВКЛ и ВЫКЛ или 0 и 1, правда в современных компьютерах, это абстракция различных диапазонов напряжений в цифровых схемах. Как вы уже понимаете, тогда проще говорить о нулях и единицах.

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

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

Обработка

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

Система

Будь то животное или машина, система обработки информации (по крайней мере, одна, которая полезна для нас, людей), похоже, имеет набор требований, необходимых для функционирования:

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

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

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

Что такое Программа (образно)?

В предыдущем разделе я определил «программу» как «набор инструкций, передаваемых системе обработки информации». Хотя это определение и его объяснение были задуманы как точные с философской и отчасти технической точки зрения, не нужно понимать его полностью, чтобы писать полезные программы (по крайней мере, если вы начинаете с языков «высокого уровня», таких как Джава).

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

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

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

Служба поддержки

Присоединяйтесь к сообществу мудрыйАсс:
https://www.instagram.com/wiseassbrand/
https://www.facebook.com/wiseassblog/
https: // twitter.com/wiseass301
http://wiseassblog.com/
https://www.linkedin.com/in/ryan-kay-808388114

Если вы что-то узнали, подумайте о пожертвовании:
https://www.paypal.me/ryanmkay