Digital Book. Книга вторая
Шрифт:
Конечно можно данные прочитать из xml документа, это называется парсинг (парсер – инструмент для чтения данных), когда вы вытаскиваете данные из закодированных таким образом источников, и тогда эти данные уже можно положить в таблицу, но это опять несколько логических операций: 1) запустить парсер, 2) пропустить через парсер файл, 3) получить набор данных после распознавания, 4) передать данные в базу данных, 5) сохранить изменения в базе данных (commit). Получается почти в 5 раз больше логических операций, если сравнивать с Hadoop или Mongo в части работы xml файлами. Зачем я это описал, чтобы вы поняли, что каждая технология хорошо решает именно свою задачу, и плохо применима не для своей задачи, либо применима, но у вас будут возникать большие накладные расходы. Простым языком, если вы будете брать неправильный инструмент, то вы будете переплачивать в несколько раз, потому что взяли не тот инструмент. Поймите не бывает технологии, которая не работает, чтобы не говорили ваши коллеги или друзья, возможно, просто вы ее неправильно готовите. Не бывает плохой или хорошей технологии. Я часто сталкиваются, что начинают ругать какую-нибудь CRM
Пирамида технологий
Итак, давайте разберем из чего состоит любая технология и попробуем построить дерево технологий или пирамиду. Пирамида мне больше нравится, сразу же ассоциация с всевидящим оком, скрытыми знаниями и т.д.
Давайте посмотрим на этот рисунок. Будем читать его справа налево. Каждая технология управляет ресурсами, сама напрямую или через другую технологию. Что такое ресурсы? возьмем ваш обычный телефон, в нем есть память, где хранятся данные, и процессор, который производит вычисления, например что-то складывает или вычитает. Фактически ваш телефон, это маленький компьютер. Если мы возьмем любое устройство, то оно плюс / минус одинаковое:
1. Есть память, для хранения данных
2. Есть процессор для выполнения всяких команд
3. Есть интерфейсы ввода и вывода, чтобы принимать команды и показывать результат их выполнения.
Вот так все просто:). Так работает элементарная машина, робот и т.д. Все остальное это бантики. Получается технология, по сути, дает команды процессору, обработать какие-то данные и результат куда-то вывести. Играете вы в игру, или пишите диссертацию, вы всегда посылаете команды по обработке данных. Даже сейчас набирая этот текст в google docs, я посылаю команды на сервере google docs, чтобы он сохранил этот текст для вас. Все было бы еще проще, если бы можно было бы машине сказать на человеческом языке, чтобы она выполнила команду. Но, к сожалению, она не понимает человеческий язык, а понимает, только специальный машинный язык. Почему так? потому что внутри любая машина состоит из транзисторов и диодов, по которым идут электрические сигналы. Вспоминаем уроки физики в школе:). Транзистор – это просто полупроводниковый радиоэлемент, который нужен для управления током в сети. Такие элементы могут пропускать ток, могут сохранять в себе заряд, а когда их много, то все вместе они могут генерить много интересных значений. Я помню, как на уроке физике в университете мы собрали генератор случайных чисел из транзисторов, кажется их было 9 или 10. Тогда я понял, что все “случайное” оказывается совсем не случайным, а просто запрограммированной логикой. Вы просто подаете напряжение (1) или выключаете его (0), и тем самым управляете логикой через череду значений, которые принимает транзисторы. Отсюда привязка к бинарной логике, тем самым ноликам и единицам, с помощью, которых кодируются сигналы в машинах. Потому что эти сигналы, по сути, означают подать напряжение или его выключить.
Сейчас любая такая логика в машине настраивается с помощью транзисторов. В современном процессоре их (транзисторов) миллиарды или триллионы, для сравнения в первом процессоре Intel было 2300 транзисторов, и если с помощью десятка можно было сделать генератор случайных чисел, то что же можно было бы сделать с двумя тысячами. Сейчас Intel увеличила плотность транзисторов в процессоре, усложнив его архитектуру.
Как вы понимаете, что процессору нужно очень быстро давать команды, и чем быстрее команды даются, тем больший потенциал и скорость он показывает, чтобы переключать все эти транзисторы. Это свойство процессора называется тактовая частота. Чем она выше, чем больше циклов работы выполняет ваш процессор. В одном тактовом цикле обычно выполняется 1 простейшая команда. Например, процессор с тактовой частотой 3,2 Ггц выполняет 3,2 млрд
Для этого появился специальный инструмент и язык Assembler, который переводил программу в машинный язык. Он кодирует все сигналы в 0 и 1, чтобы ваша машина могла понять, чего вы от нее хотите. Раньше все программы писались на assembler’e. У каждого процессора свой диалект assembler’a, как у жителей разных стран. Программа написанная на assembler’e для одного процессора совершенно не совместима с другим процессором, потому что у него как вы понимаете другое количество транзисторов. Поэтому она не будет просто работать или запускаться. Это, кстати, и означает совместимость программ, когда ваши итишники говорят, вам что эта версия несовместима с версией вашего оборудования и нужно потратить тонну денег на миграцию, то это означает, что программа на ваших процессорах просто не запуститься и нужно ее фактически переписать. Все это было круто, но оказалось, что писать на ассемблере очень сложно, хотя и эффективно. Вы можете напрямую управлять памятью вашего устройства, порядком обработки команд и т.д.
Вот, например, код, который выполняет простую задачу – складывает 2 числа и если значение равно 0, то выводит на экран сообщение. Как вы видите, тут не одна строчка и все довольно непонятно, больше напоминает какой-то марсианский язык. Даже не каждый итишник сможет разобраться, что тут написано. Поэтому программисты пошли дальше и придумал языки высокого уровня. Они так и называются, Языки Высокого Уровня.
Языки программирования
Они гораздо проще для понимания программистом, но менее эффективны для машины, если их сравнивать с языком нижнего уровня (ассемблером), команды которого машина понимает быстрее. Языки высокого уровня появились, как виток эволюции наследуя все что было раньше изобретено и сделано. Это нормально, что каждый день появляется что-то новое. Такие языки появились около полвека назад.
В мире сейчас 5 крупнейших высоких языков программирования:
1) Си (C) был придумал почти 50 лет назад, Денисом Ритчи, сотрудником компании Bell Labs. Сейчас больше пишут на C++, который появился в начале 80х годов, когда другой сотрудник фирмы Bell Labs Бьерн Страуструп решил усовершенствовать язык.
2) Пайтон (Python), – правильно читать пАйтон, а не пИтон, как многие говорят. Создал его Гвидо ван Россум (как вы догадались, он из голандии и да, его создали тоже в лаборатории). Наверное, это первый язык программирования, в который была заложена философия разработки. Вот краткие тезисы философии: “Красивое лучше, чем уродливое”, “Простое лучше, чем сложное”, “Практичность, важнее безупречности”, “Сейчас лучше, чем никогда” и т.д. Очень похоже на agile принципы. Согласитесь, есть что-то общее.
3) Джава (Java), – или Ява (в честь кофе), называют по – разному. Появился он в 95м году в легендарной компании Sun Microsystems, которая делала оч крутые сервера и процессоры для них. Ну можно сказать, что лучшие в мире, но она не пережила свой век. Ее купила компания Oracle. У меня в университете был курс “Архитектура процессоров Sun Microsystems”, поверьте, они были оч крутые лет 20 назад. Язык Java чем интересен, что у него нет привязки к конкретному процессору, поэтому он называется кроссплатформенным. То есть написанный код на Java довольно легко мигрирует с одной машины на другую. Изначально язык назывался Oak (Дуб) и создавался Джеймсом Гослингом для программирования бытовых устройств (как вы понимаете, у которых много разных процессоров и поэтому язык должен был изначально решать проблему универсальности применения). Поэтому он и называется Ява, в честь кофе. Чтобы получить те самые 0 и 1, программный код Java транслируется в машинный, с помощью специальной программный JVM (Java Virtual Machine – виртуальная машина Явы). Это был принципиальный важный компонент, который лег в основу работы многих технологий. Например блокчейна.
4) Перл (Perl), вообще это не перл (то есть смешная шутка), мало кто знает, но это акроним от Practical Extraction and Report Language («практический язык для извлечения данных и составления отчётов»), в шутку создатели называли его Pathologically Eclectic Rubbish Lister («патологически эклектичный перечислитель мусора»). Символ его верблюд, типа как выносливое животное, но не очень красивое. С этой мыслей, язык создавался для обработки текста, а сейчас пошел дальше. Познакомился я с ним в 2010м году, когда пытался анализировать текстовые строки с помощью регулярных выражений. Это такие заклинания и команды, которые помогают машине работать с текстом. Создал его парень, по имени Ларри Уолл в 87 году. Небольшой оффтоп. Ларри прославился тем, что несколько раз побеждал на интересном турнире программистов, назывался он Международный конкурс запутывания кода на Си – International Obfuscated C Code Contest). Задача конкурса была тестирование компиляторов, тех самых программ, которые переводят программный код в машинный, при этом само тестирование выполнялось так, чтобы код был максимально запутанным. Это нужно было для того, чтобы проверить, как машина ведет в себя в условиях спутанности и нечеткости постановки. Сам процесс запутывания назывался “обфускация”. Теперь вы знаете модное слово – Обфускация. “Не надо мне тут разводить, обфускацию!”, сможете сказать, на каком-нибудь совещании и ваши коллеги вопросительно посмотрят на вас:). В результате обфускации код превращался вот такие вот красивые картинки, которые вы возможно видели на просторах интернета, когда из программного кода делают всякие рисунки: