Jump to content
Sign in to follow this  
1nterrupt

Программирование для новичков

Recommended Posts

Всем привет! Итак, начнем. Что такое язык программирования? 

Определение 1. Язык программирования - это знаковая система для планирования поведения компьютера.

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

Когда мы говорим "совокупность соглашений", мы подразумеваем совокупность референтов. 

Определение 3. Референт - предмет или явление окружающей действительности, с которым соотносится данная языковая единица. 

С помощью языка программирования формируются сообщения для компьютера. Эти сообщения должны быть понятны компьютеру. Скажем так, любой компьютер состоит из логических схем, которые находятся в одному из двух состояний - "логический ноль" и "логическая единица". За логические 0 и 1 принимаем следующий референт. Представьте себе обычный выключатель света в вашем сортире. Когда вы нажимаете на него и свет загорается, то выключатель переходит в состояние "1", или "истина". Когда вы нажимаете и обратно выключаете свет, то выключатель переходит в состояние "0", или "ложь". Вот и все. 

В технике 0 и 1 - это состояния электрических схем. С помощью нулей и единичек можно представить практически любую информацию. Это форма, с помощью которой представляется информация. 

Информация всегда связана с материальным объектом (например, бумагой, магнитной лентой) или физическим процессом (непример, электрическим током, звуковой или электромагнитной волной и так далее), которые являются её носителями. Информация связывается с носителями посредством изменения их определенных свойств. Изменение свойств материального объекта или физического процесса называется сигналом (слово "сигнал" образовано от английского sign, что значит "знак"). Сигнал является способом воспроизведения информации. Соответственно, информация получается как регистрация сигнала. 

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

Информация влияет "несиловым" способом, когда относительно слабые физические сигналы, который несут информацию, осуществляют сильное влияние на управляемые процессы. Это влияние не связано с энергетикой сигналов. То есть, с помощь маленького компьютера можно управлять огромной машиной, размером с 9-ти этажное здание. При этом не нужно будет, чтобы управляющие сигналы имели очень большую энергетику. Управление состоит лишь в том, что на приводах замыкаются ключи электрической схемы на вполне определенное время. И двигатели машины совершают столько оборотов, сколько нужно, чтобы механизм перешел в новое положение. А потом ключи на схеме, которые подключают эти движки к цепи с большой энергетикой, необходимой для их работы, размыкаются. То есть, компьютер как управляющая система, может работать от встроенной батареи питания и просто управлять защелками, которые включают электромоторы в электрическую цепь и выключают во временном пространстве. Это можно изобразить графически. Распределение задач во временном пространстве можно представить с помощью циклограммы (диаграмма Ганта). На рисунке ниже представлено несколько процессов во временном пространстве (дни февраля от первого числа до 21 числа). И эти процессы выполняются последовательно, один за другим. Хотя это совсем не обязательно, они могут выполняться параллельно: например, одновременно три двигателя могут осуществлять вращение на 30, 45 и 80 градусов, причем если они вращаются с одинаковой скоростью, то закончат вращение в разное время (на 30 градусов быстрее при той же скорости обернуть, чем на 45 или 80).

Gantt_diagram2.png

 

Определение 4. Таким образом, язык программирования — это правила образования знаков (синтаксис) и согласованные с ними правила образования денотатов (семантика).

SemioticsSituation.png

компоненты знаковой ситуации

 

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

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

Основу любого языка составляет алфавит - упорядоченная совокупность всех знаков языка. Количество знаков, из которых состоит алфавит, иногда называют его мощностью. Например, алфавит Морзе состоит из двух знаков - точки и тире (· , -). Соответственно, мощность этого алфавита составляет 2. Украинский язык состоит из 33 знаков. Соответственно, его мощность равняется 33. Если мы возьмем две буквы этого алфавита и склеим в определенном порядке, используя, возможно, их повторно, то можно получить слово. Например, возьмем букву "М" и букву "А". Склеим их определенным образом, используя буквы повторно, и получим слово "МАМА". Слово (или слово еще называют цепочой из знаков) "МАМА" состоит из 4 букв, значит, мощность этой цепочки равняется card('МАМА')=4. Мощность в математике записывается с помощью card(). Операция склейки символов называется конкатенацией. 

Определение 5. Лексама (token) - это минимальные отдельные слова, фразы, символы, которые имеют отношение к референту (определенной последовательности нулей и единичек, или совокупности состояний электрической схемы, с помощью которых закодирована информация). 

Лексемы состоят из идентификаторов, ключевых слов, литералов и операторов. 

Определение 6. Синтаксис языка - это набор правил и ограничений, которые используются при комбинировании лексем.

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

Определение 7. Идентификатор - имя переменной, метода или объекта. Он состоит из комбинации букв и цифр с помощью конкатенации (склейки). 

Некоторые имена встроены в язык и поэтому зарезервированы от использования. Например, слова 'true', 'float', 'import', 'class' и другие обозначают уже встроенные в язык программирования имена, за которыми закреплены определенные инструкции (последовательности нулей и единичек, представляющей какую-то информацию). Это - ключевые слова в языке программирования. 

Определение 8. Литерал - это числа или строки, представляющей постоянные значения.

Например, если говорить о логическом типе данных, то в языке поддерживаются два литерала true и false, представляющие соответственно значения логической 1 или 0. Таким образом, true и false - ключевые слова. Строковый же литерал - это ноль и более символов, заключенных в двойные или одиночные скобки: 'Hello World!' или "Hello World!". 

Определение 9. Операции (operators) - это символы или идентификаторы, которые представляют способ оценки или манипуляции комбинациями выражений.

Например, если мы напишем D=5, то присвоим переменной D значение 5. Знак присваивания аналогичен знаку равенства "=". Есть ли смысл одному строковому выражению присваивать другое? Например, Ivan="Durak". При вызове идентификатора Ivan мы получим присвоенное ему значение Durak. 

Определение 10. Переменная - это имя, которое присваивается ячейке памяти компьютера, которая хранит определенные данные.

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

 

 

Share this post


Link to post
Share on other sites

Определение 12. Константы представляют собой переменные, которые сохраняют свои значения на всем протяжении выполнения программы.

Например, константой является число пи (3,14...). 

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

С помощью модификаторов private, protected и public обеспечивается многоуровневый доступ к переменным и методам (функциям). Они позволяют скрывать атрибуты объекта и детали разработки от общего доступа. Все познается в сравнении, как говорится. В языке JavaScript, например, в отличие от Java, переменные и функции просто объявляются локально и глобально. То есть переменная может быть объявлена внутри функции и тогда может быть использована только внутри нее. С вызовом такой функции создается эта переменная, после её выполнения - переменная уничтожается. А можно объявить переменную вне функции и тогда она будет доступна в других функциях. 

Определение 13. Всякая программа, написанная на языке Java, представляет собой один или несколько классов.

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

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

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

Все действия в программе производятся с помощью методов обработки информации, коротко говорят просто метод (method). Методы используются в объектно-ориентированных языках вместо функций, применяемых в процедурных языках. Методы различаются по именам и параметрам. Один из методов обязательно должен называться main, с него начинается выполнение программы. Как и положено функции, метод всегда выдает в результате (чаще говорят возвращает (returns)) только одно значение, тип которого обязательно указывается перед именем метода. Метод может и не возвращать никакого значения, играя роль процедуры. Так и есть в нашем случае. Тогда вместо типа возвращаемого значения записывается слово void.

Методы обработки информации, используемые объектом, описываются процедурами и функциями. Они называются методами класса (class methods). Сложные объекты могут содержать несколько десятков методов, а значит, несколько десятков процедур и функций. Методы класса активно используют поля класса, но кроме них могут создавать и свои локальные переменные, необходимые для работы метода.

Кроме полей и методов в классе можно описать и вложенные классы (nested classes), и вложенные интерфейсы, в которые, в свою очередь, можно вложить классы и интерфейсы. Мы можем создать сложную "матрешку" вложенных классов. Поля, методы и вложенные классы первого уровня называются членами класса (class members).

После того как описание класса закончено, можно создавать конкретные объекты, называемые экземплярами (instances) описанного класса. Создание экземпляров производится в три этапа. Сначала объявляются ссылки на объекты: записывается имя класса и после пробела через запятую перечисляются экземпляры класса, точнее, ссылки на них. Затем операцией new определяются сами объекты, под них выделяется оперативная память, ссылка получает адрес этого участка в качестве своего значения. На третьем этапе происходит инициализация объектов, задаются начальные значения. Этот этап, как правило, совмещается со вторым, именно для этого в операции new повторяется имя класса со скобками.

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

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

Определение 13. Имена (names) переменных, классов, методов и других объектов могут быть простыми (общее название - идентификаторы (identifiers)) и составными (qualified names). Идентификаторы в Java составляются из так называемых букв Java (Java letters) и арабских цифр 0-9, причем первым символом идентификатора не может быть цифра. 

Определение 14. Составное имя (qualified name) - это несколько идентификаторов, разделенных точками, без пробелов, например, имя System.out.println .

 

 

 

Share this post


Link to post
Share on other sites
class HelloWorld{
 public static void main(String[] args){
 System.out.println("Hello World!");
 }
} 

 

В нашей простейшей программе только один метод, а значит, имя его main. Метод может и не возвращать никакого значения, играя роль процедуры. Так и есть в нашем случае. Тогда вместо типа возвращаемого значения записывается слово void, как это и сделано в примере. После имени метода в скобках через запятую перечисляются параметры (parameters) метода. Для каждого параметра указывается его тип и, через пробел, имя. У метода main() только один параметр, его тип - массив, состоящий из строк символов. Строка символов - это встроенный в Java API тип String, а квадратные скобки - признак массива. Имя параметра может быть произвольным, в примере выбрано имя args. Перед типом возвращаемого методом значения могут быть записаны модификаторы (modifiers). В примере их два: слово public означает, что этот метод доступен отовсюду; слово static обеспечивает возможность вызова метода main() в самом начале выполнения программы. Модификаторы, вообще говоря, необязательны, но для метода main() они необходимы. Все, что содержит метод, тело метода (method body), записывается в фигурных скобках. Единственное действие, которое выполняет метод main() в нашем примере, заключается в вызове другого метода со сложным именем System.out.println и передаче ему на обработку одного аргумента - текстовой константы "Hello World!". Текстовые константы записываются в кавычках, которые являются только ограничителями и не входят в текст. Составное имя System.out.println означает, что в классе System, входящем в Java API, определяется переменная с именем out, содержащая экземпляр одного из классов Java API, класса PrintStream, в котором есть метод println(). Действие метода println() заключается в выводе заданного ему аргумента в выходной поток, связанный обычно с выводом на экран текстового терминала, в окно MS-DOS.

Share this post


Link to post
Share on other sites

Итак, программа написана в каком-либо текстовом редакторе, например в Блокноте (Notepad), emacs или vi. Теперь ее надо сохранить в файле в текстовом, но не в графическом формате. Имя файла должно в точности совпадать с именем класса, содержащего метод main(). Данное правило очень желательно выполнять. При этом система исполнения Java будет быстро находить метод main() для начала работы, просто отыскивая класс, совпадающий с именем файла. Расширение имени файла должно быть java.

В нашем примере сохраним программу в файле с именем HelloWorld.java Затем вызовем компилятор, передавая ему имя файла в качестве аргумента:

javac HelloWorld.java

Компилятор создаст файл с байт-кодами, даст ему имя HelloWorld.class и запишет этот файл в текущий каталог.

Осталось вызвать интерпретатор байт-кодов, передав ему в качестве аргумента имя класса (а не файла!):

java HelloWorld

 

 

Share this post


Link to post
Share on other sites

Все типы исходных данных, встроенные в язык Java, делятся на две группы: примитивные типы (primitive types) и ссылочные типы (reference types).

0_gl1-2.jpg

Ссылочные типы включают массивы (arrays), классы (classes) и интерфейсы (interfaces). Примитивных типов всего восемь. К ним относятся логический (иногда говорят булев) тип, называемый boolean, и семь числовых (numeric) типов. Числовые типы делятся на целые (integral) и вещественные (floating-point). Целых типов пять: byte, short, int, long, char. Символы можно применять везде, где используется тип int, поэтому JLS причисляет тип char к целым типам. Вещественных типов всего два: float и double. 

4092629d910d4128a7220ed8e5ddd689.png

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

 

Share this post


Link to post
Share on other sites

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

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

Для исключения ошибок необходимо, чтобы отправитель и адресат пользовались:

  • oдинаковыми правилами разложения сообщения на составляющие (предмет синтаксиса);
  • согласованными правилами, придающими сообщению смысл (предмет семантики);
  • согласованными целевыми установками (предмет прагматики).

Вас интересует как выучить команды и использовать их в процессе программирования без заучивания структур, порядков и так далее. В этом посте я привел много таких непонятных словечек. И явно не сказал: как именно строить конструкции, высказывания из команд в компиляторах... Так вот, заучите пока что это. Погуглите по написанному выше и хорошо разберитесь. И можете к синтаксису переходить, учится использовать встроенные (зарезервированные) имена. Они используются по определенным жестким правилам в определенном порядке. Наверное, порядок является в программировании практически самым важным делом, а смысл - теоретическим. 

Но не качайте пока что сборку сервера. Сначала наберите хотя бы минимальный багаж знаний. Попрактикуйтесь с классами, экземплярами, объектами, методами и так далее. Хорошенько попрактикуйтесь. И не пытайтесь сразу все понять. Нужно двигаться постепенно, от простого к сложному. Внесите для начала порядок в свою жизнь. Скачайте Excel, в нем с помощью циклограммы (диаграммы Ганта) распределите повторяемые каждый день задачи. И найдите время часик-второй для изучения программирования. Не нужно загружаться сразу информацией, которая потом сплетется в клубок и начинать заново будет просто невыносимо скучно. Нужно порциями, постепенно узнавать. Вдохновляться в меру, но не перегореть. Лучше с помощью книги по Java, коих в интернете огромное количество. 

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

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

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

 

 

Share this post


Link to post
Share on other sites

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

Prn5i.jpg

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

Нам нужно научится мыслить системно. Система - это эквивалент понятия математической модели и задается парой множеств A и В (где А - множество входов, В - множество выходов) и отношением произведения * на A x B, формализующим связь (зависимость) между входами и выходами. Более наглядным есть представление в виде черного ящика. 

pHQHNbPTkPdrmjWHvZibY7ROfafb435iB8ZCCeTT

Здесь вроде все понятно: X(t) - это входные воздействия во времени t; аналогичная ситуация с Y(t). Но прибавляется также f(t), что значит влияние внешней среды на внутреннее состояние системы. Представьте систему как ракету, летящую по траектории. Понятно, что чем быстрее летит ракета - тем больше аэродинамическая нагрузка на корпус ракеты. Чтобы прочувствовать это, попросите водителя машины разогнаться до 200 км/час и высуньте голову в окно. Вашу голову мгновенно снесет воздушным потоком. А ракеты летают гораздо быстрее. Ну и воздушный поток всегда стремится отклонить ракету с заданной траектории. Если ракета отклоняется, то это называется возмущением в системе. Плюс сила Кореолиса также вызывает возмущение в системе, поскольку планета постоянно вращается относительно летящей в воздухе ракеты. Плюс в атмосфере есть аэрозоли - взвешенные в воздухе частички, которые тяжелее воздуха и ракета на них постоянно налетает - возникают также динамические возмущения, поскольку среда неоднородная по плотности в пространстве и ракета в разных точках пространства подвергается разным сопротивлениям среды. Это как плыть в бассейне, где местами жидкость становится более вязкой, как кисель, и в этих местах плыть сложнее. Такое же свойство "киселя" имеет гравитационное поле, в котором двигаются тела, что отсылает нас к калибровочной теории, теории Нётер - ракету постоянно тянет к земле, поскольку массивные тела искривляют пространство. И так далее. С возмущениями, сообщенными системе влиянием среды, все понятно. 

Вернемся к системам. Соединение систем также является системой. Например, последовательное соединение систем S1 ⊂ A1 x B1,   

S2 ⊂ A2 x B2

является отношением S ⊂ A1 x B2   таким, что (a1, b2∈ S, если существуют b1 ∈ B1 и a2 ∈ A2 , которые удовлетворяют условиям

(a1, b1) ∈ S1,  

(a1, b2∈ R,

(a2, b2) ∈ S2,

где R ⊂ A1 x B2 - отношение, которое определяет связь между a1 и b2. Можно определить какие угодно сложные системы, исходя из простых. В самом простом случае может быть A1=B2 , а R - отношение тождества (a1, b2R ,  если a1=b2.

Чтобы понять о чем идет речь, стоит заглянуть в книгу Мальцева - Алгебраические системы (djvu). 

Цитата

Система - совокупность взаимосвязанных элементов (объектов, отношений), которые есть одно целое.

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

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

Обозначим соответственно через X(t) и Y(t) количества жертв и хищников в момент времени t. Предположим, что норма рождаемости жертв xb и норма естественной смертности xd являются константами и xb>xd. Следовательно, при отсутствии хищников популяция жертв будет расти со скоростью (xb-xd) x(t). Будем считать, что число случаев, когда хищник убивает жертву, зависит от вероятности их встречи и пропорционально произведению x(t) × y(t). Таким образом, популяция жертв описывается дифференциальным уравнением

x'(t)=αx(t) + βx(t) y(t),

где α = x- x> 0,  также β<0.

Чтобы вывести уравнение популяции хищников предположим, что при отсутствии жертв хищников по естественным причинам убывает пропорционально y(t). В то же время в результате встреч с жертвами число хищников увеличивается, что ведет к уравнению

y'(t) = δy(t) + ψx(t) y(t),

где δ<0 и ψ>0.

Такая модель называется моделью Вальтера-Лотки, придуманной в 1925 году. 

Вообще существует мнение, что около 75 % всех расчетных математических задач приходится на решение линейных алгебраических уравнений (источник мысли: Валях Е. Последовательно-параллельные вычисления. – М.: Мир, 1985.). Поэтому общую алгебру (djvu) нужно последовательно изучать. 

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

Цитата

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

 

Share this post


Link to post
Share on other sites

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

  • основанная на теории множеств реляционная алгебра;
  • основанное на математической логике реляционное исчисление.

Я писал раньше тут на форуме, что неплохо было бы к программированию и алгебраическую топологию, алгебраическую геометрию поизучать. Но Володя Vlemon удалил тот комментарий. Хотя гомологическая алгебра применяется в рамках топологического анализа данных. Можно поковырять, кому интересно, вводную статью:

https://www.math.upenn.edu/~ghrist/preprints/HAD.pdf

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

То есть, к чему я вообще веду... Математическое моделирование, система, являются основами. Даже если взять те же классы в ла2, для их балансировки относительно друг друга нужно моделировать. Вы можете дать скилл одной профессии и она станет господствующей на полях брани. Чтобы этого не произошло,  нужно уравновешивать, например, повышением защиты оппонентов профессии или повышением скорости, силы, хп и так далее. Поэтому вообще самому созданию игры Lineage 2 предшествовало математическое моделирование. Где маги имеют больший каст, чем бьют лукари, но малую защиту, а луки еще критуют. Вероятность крита также выполняет балансирующую роль. Т.е. все заключено в величины, числа. 

 

 

 

Share this post


Link to post
Share on other sites

Ну и завершить окончательно сей пост думаю ссылкой на гомотопическую теорию типов:

https://hott.github.io/book/nightly/hott-ebook-1244-gaef5fa0.pdf

Есть такой афоризм... Он достаточно распространен... "Тяжело в обучении, легко в бою". Обучаться тяжело, конечно. Но лучше сокрушиться и окунуться в эту проблематику. Ведь не все ограничивается кодом. На коде ведь что-то пишется. И это "что-то" представляет из себя систему, модель. Ты не можешь в одной строчке написать одно выражение, а в другой строчке написать несвязанное с первым другое. Какой смысл будет писать их в одном месте? Читать коды - это как читать книги, где авторы на языке программирования рассказывают о чем-либо. Потом эти рассказы транслируются в двоичный код и компьютер живет по сценариям, описанным в рассказе. 

Поэтому, программист мыслит моделями, системами. Часто применяют словосочетание "системное мышление", которое обычно поставляется вместе с общей теорией систем (ОТС). 

Share this post


Link to post
Share on other sites

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

 

 

Share this post


Link to post
Share on other sites

И еще очень важную ремарку сделаю по сказанному. Я только что гуглил зачем физика нужна программисту, чтобы найти годную статью и вставить ссылку сюда. Не нашел толком ничего толкового. Черт возьми, физика - это наглядный пример как явления описываются математическими моделями. К примеру, если ты хочешь чтобы твоя сеть была такой быстрой, как у криптовалюты TON (миллионы транзакций в секунду), в отличие от Bitcoin (7 транзакций в секунду), нужно моделировать и рассчитывать. Вот зачем это нужно. За кодом кроется модель, которая может быть эффективной в рамках требований, а может быть неэффективной. 

Вся физика - это модели, системы. Это тренажер, на котором можно мощно прокачатся. 

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

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

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

Share this post


Link to post
Share on other sites

Тьфу,блин. Мы еще не рассматривали никаких физических моделей.. Чет повело, тупанул. Жалко что функция редактирования не доступна с момента регистрации. Но в целом правильно. Перепрыгивание с одного состояния на другое без выяснения сути этого процесса - это физика состояний. Тема процессов мало раскрыта на самом деле. Может процессы важны. А все в основании какой-нить эфир, представляемый эвклидовым пространством. Но это уже вопросы теоретической физики... Хороший повод поискать ответ на этот вопрос. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...