75 Core IT

Когда я был маленький, компьютеры были большие, а программы маленькие.
Основы машинной обработки информации. (Core IT.)(Мой отец называл это кнопкодавством, и ругался, чтобы я зарабатывал этим себе на жизнь...)
Файл - именованный массив байт (это определение я учил в 1991г году, ходя по школе, и пытаясь понять: "А что же такое "файл - именованный массив байт"?").
Человек сделал так, что всё в пределе (фото, видео, чертежи..) можно оцифровать и представить в виде байтов (документов) в том или ином формате...
И не только представить, но и сохранить на вечно, как переносимый с одного оборудования, ОС, файловой системы.. на другую.. файл (последовательность чисел - хоть бумажкой..).., а потом открыть с помощью открытых форматов хранения данных (также, где-то уже известных)...
И это проклятие АДА!
Я уже не говорю про интернет - где всё на вас уже давно есть, и стереть вы это никак не можете (жена Агапова, которая разместила его объявления на всех сайтах знакомств, когда он уходил от неё)... Я, например, никогда не смотрю ничего про себя в интернете. Всё, что есть - правда... Правда, есть ещё законодательное право на забвение... Как всегда, технологии изменили мир... Приходится вести себя соответствующим образом...
Человеку, у которого всё уже давно в байтах - хочется одного - общаться лично, купить сотовый телефон попроще.. (без лишней информации), расплачиваться бумажными деньгами (материальными, натуральными.., как питаться натуральной пищей!), ходить подавать показания за воду ножками, оплачивать квартиру по квитанции в банке (получать материальную вещь, сувенир на память..)... - отдыхать! Это для него жизнь. .. Цифры он ещё нажрётся.. ... Он делает это осознанно! Как заядлому автомобилисту, хочется бросить машину и прогуляться пешком, чтобы окончательно не получить себе геморрой, поясницу и прочие проблемы. Фитнес... нужно держать себя в форме.
например, чтобы человек был образован, подкован, грамотен, умел обращаться с рисками... (хозяин сам себе, профессионал.., а не чей-то раб..), для работы на персональном компьютере (устройстве, которое претендует на роль универсального вычислительного) нужна комната книг - как минимум 3:
1) UNIX (досконально изучите, как вы собираетесь что-то делать на компьютере..)(база - ядро и пакеты системных программ - , неизменная классика обработки данных, мало меняющаяся со временем - язык общения с машиной - полноценный - через командную строку в машине можно сделать всё (не говоря о простейших программах, и пользователя зарегистрировать, и письмо отправить.., и запрос из базы данных получить.. всё это вопрос подготовки программ и настройки bash-скриптов - в пределе человеческой работы.., мною анализировано, неограниченно - то есть в пределе контролировать систему как конечный автомат состояний) - от неё только вверх, вниз или в сторону - эти фундаментальные знания у вас останутся на годы... спустя время вы подойдёте и также наберёте, почувствуете себя как дома, ну что-то прочтёте на свежий лад.. - по крайне мере, никогда не попадёте впросак!);
Например, в UNIX обычно команда по-умолчанию никакого вывода не делает. Если вы запустили заданную команду с заданными параметрами, с заданными устройствами..., и всё прошло нормально, штатно, как положено, то никакого вывода на экран вы не получите. Просто компьютер несколько потормозит, и вам снова выскочит приглашение командной строки (команда выполнена - всё ОК.) - значит, всё ОК. Вывод на пользовательскую консоль происходит только в том случае, если произошла ошибка, требуется сейчас ввод данных от пользователя в ручном режиме.. и т.д. Почему системный оператор (SysOp) смотрит на консоль? Ошибки, или необходимо ввести данные... Если же сама по себе программа должна что-то откуда-то считывать или выводить (стандартный ввод и стандартный вывод, в том числе файлы.. диагностики), например, из файлов, то это указывается и настраивается заранее (параметры командной строки, настройки конфигурационных файлов...). Сильно не пудрит мозги...! Кто чем хвалится, а системные администраторы под Slackware хвастаются размером конфигурационных файлов (плодов своего труда) на сравнимо настроенных системах - чем они короче... счёт идёт на байты (стабильно и продуктивно работающие)! Вот это соревнование...
2) аппаратная часть (то, чем вы собираетесь что-то делать на компьютере в настоящий момент времени )(вниз - устройство (принципиальная схема обработки данных этого чёрного ящика), детально что на входе, что на выходе, как с ним обращаться, справочно, что есть сейчас... - чтобы знать фундаментально матчасть - обычно, вылетит из головы как плесень радиотехнического лома со временем.. - единственно, в музее, благородство физического труда - кого сейчас интересуют электронно-вычислительные машины 1930-х годов? с позолоченными контактами.. где Bug - это был жук);
3) устройство сети (ну, то, без чего не обойтись..)(вбок - как устроена связь, 7-уровневая модель OSI подачи CD отдельно с самими протоколами передачи данных - фундаментальная вещь - и узелковое письмо, и голубиная почта, и бумажная почта работают до сих пор...);
4) книги-руководства по пакетам прикладных программ, что вы используете: программирование, Office, PhotoShop, 3D-моделирование... (собственно, что вы собираетесь делать на компьютере..)(вверх - с их форматами хранения данных - для совместимости - форматами файлов.. - это то, что вы спустя годы и будете тащить, как.., меняя всё остальное по кругу (теперь вы понимаете, почему такое внимание уделяется свободному распространению информации и открытым для всех форматам хранения данных) - "толстая периодика" - выходят регулярно, меняется мало что, многое запрограммировано..);
Периферийное оборудование - принтеры, сканеры,...
Средства ввода. Самым эффективным средством ввода данных является клавиатура. Что такое клавиатура (key-board!)? Это 104 клавиши. Когда вы дойдёте до автоматизма, вы будете (при необходимости) нажимать их и их комбинации также, как вставлять и поворачивать механический (вот он физический труд) ключ в свою входную дверь! Условный вырабатывается.. рефлекс! Практически не задумываясь, "на автомате", полностью контролируя обстановку, обращаясь с рисками... профессионально. Не даром все профессиональные компьютерные программы на все операции имеют горячие клавиши... Если что, вы сделаете это за секунды. Мышь - это курсор, который движется по пикселю туда-сюда и имеет 2 кнопки... как вам отслеживать каждый раз куда он попадёт? Чудовищная работа, при том, что вам надо сделать тоже самое... При самых графических менюшках. О других методах ввода умолчу. Она применима в обработке растровых изображений. Джойстик ушёл на авиа-тренажёры... Однажды, это был, кажется, Comtek'1995, я зачарованный ходил по стендам... и увидел как мастер настраивает компьютеры с клавиатуры. И я понял, что надо изучать клавиатуру - это профессионально...
Серверы (Bulletin Board Station - BBS - -=ABU STATION BBS=-) - представляют из себя те же компьютеры: с тем же UNIX, аппаратной частью сконцентрированной в первую очередь на мощности вычислений, хранения в памяти, на дисках,... приёму и передаче данных по сети (поэтому их удобно размещать в стойках под кондиционерами и системами пожаротушения в запертых залах..), развитыми сетевыми интерфейсами для обслуживания пользователей, и сервисными программами (демонами - Unix daemons), которые выполняют обработку данных пользователей: по сути фильтры - приём запросов, ввод информации, хранение, обработка-вычисление (по заданному программистом и настроенному системным администратором алгоритму) и выдача пользователю (или другим машинам..)... здесь даже графического интерфейса порой не надо (только для настройки и контроля) и долго работают без перезагрузки (иногда годами), сбоев в работе - это основная их функция - обслуживать. Вынесение особо ресурсоёмких вычислений, обработки массы мелких запросов от пользователей (АТС)(Теория массового обслуживания), хранение больших и общественных (разделяемых) массивов данных. Потребляют целые вереницы специального оборудования - дисковые стойки, стабилизаторы напряжения, консоли ввода и вывода и пр...
Рабочие[прораб] станции - продвинутые компьютеры, сконцентрированные на выполнении оператором (чертёжником, наборщиком, программистом, обработки растровых изображений,... по профессии) выделенных им операций - для достижения наибольшей эффективности этих работ, но в руках, как правило, одного человека-специалиста (отбойный молоток) и под его личную ответственность (автомат Калашникова - снайперская винтовка)...
Активное сетевое оборудование (коммутаторы, маршрутизаторы) - те же компьютеры, и порой не меньшей мощности, но со своим специально подготовленным UNIX (что составляет не меньшую сложность, и уникальность), аппаратной частью, сетевой частью... - сконцентрированные на приёме и отправке (маршрутизации) множества пакетов передачи данных от отправителей к получателям (АТС), со своими правилами безопасности, поддержкой беспроводных сетей (радиорояль),... вплоть до встроенных файловых серверов на рабочую группу, работающих с флешкой, подключения принтера на эту рабочую группу. В стародавние времена, используя старую PC-шку со вставленными в неё несколькими сетевыми картами и на базе Linux с соответствующим ПО, делали маршрутизатор выхода в интернет на рабочую группу...

Программирование:

Целочисленное программирование...
Вначале был assembler... Ой, то есть нет. Вначале были машинные коды. Потом подумали, а не записать ли некоторые коды проще и уже не в машинном представлении, а языком, чтобы это было понятнее человеку, и из них уже собирать программу, например, MOV - переместить значение одной ячейки памяти в другую... Так и назвали, Assembler (сборка). Потом заметили, что некоторые последовательности команд на ассемблере повторяются очень уж часто. Так родилось процедурное программирование и языки более высокого уровня. Последовательность команд на ассемблере загоняли в отдельный загончик, называли процедурой, вызывали с параметрами (как уж отслеживали результаты и ход выполнения - это уже другой вопрос), которая по окончании возвращала управление основной (вызывающей) программе. Функция - это разновидность процедуры, но уже возвращающая некий параметр - true/false/8/3,14/АРБУЗ...
Собственно С - является языком процедурного программирования.
Потом некие дяди подумали, хорошо... Но мы часто оперируем с одними и теми же объектами и процедурами, связанными с обработкой их данных... Так не объединить ли в едином объекте содержащиеся в нём сведения и методы для работы с ними (так возникло объектно-ориентированное программирование - где описание объекта на бумаге называется класс - на жаргоне ругательно называемое "ООП"). Классы имеют и содержащиеся в них данные - переменные различных типов, массивы, флаги состояния, иные классы..., и методы для их обработки (процедуры и функции). Экземпляр класса в памяти - называется объект. Многие классы являются простейшими, но есть и более высокоразвитые классы (всё как в природе..), чтобы каждый раз не выписывать для более высокоразвитого класса все его унаследованные вещи от более низко развитых классов, придумали наследование классов... а также наследование от нескольких классов. В общем, там возникает проблема, если один и тот же метод наследуется сразу от нескольких классов. Поздравляю, вы создали новую вселенную!

Как известно, каждый программист ставит на ночь на прикроватную тумбочку два стакана: один с водой - если захочет пить (свершилась истина/true - значения отличные от 0), второй (ложь/false - 0) - без воды, если пить не захочет - и тот, и другой исход вероятны к свершению...

Искусство программиста...
Из опыта программирования известно, что оптимизация по форме (это скорее вопрос к уже выработанной ранее культуре написания исходных кодов конкретным программистом - какие ошибки он допускает, что он использует и т.д.) - то есть внешнего вида и прочих улучшений программы, хоть и имеет своё место, но не приносит в результате особого выигрыша в производительности... кардинальный выигрыш в производительности даёт смена (модификация, модернизация) самого алгоритма работы программы, который может быть написан на бумажке и договорён между людьми...
В современных программах до 95% (и чем более развит их интерфейс, тем более) их кода уходит на обработку исключений из работы алгоритма программы и связанных с ними действий (какое окно куда с чем показывать и т.п. в какой файл что записывать, какое SMS с извещением кому отправлять по почте..): если пользователь нажал не на ту кнопку в тот момент времени, если курсор мыши в этот момент оказался за рамками меню.., если в численное поле пользователь вводит текстовые данные, не те данные дали в конкретном очередном пакете по протоколу передачи данных по сети, некорректное содержание сохранённого ранее файла, защита от перегрузки памяти, переполнение стека вследствие действий пользователя и пр... - в общем, сплошная борьба с человеческими ошибками на фоне всё большего "упрощения" и повышения привлекательности программного интерфейса для конечного пользователя. Сколько ошибок может допустить система, с точки зрения "пользователя", если число "2" будет введено путём одновременного переключения двух физических ключей (переключателей) в электрической цепи (не считая жуков)(по типу того, как это было организовано в электронно-вычислительных машинах 1930-х годов?) в систему? И сколько, если это будет сделано с помощью современного интуитивно понятного интерфейса? Поэтому, работа современного программиста делится по сути на два этапа: объять всё и описать сам алгоритм (как было бы, если бы программа выполнялась) работы программы (как он хочет), заткнуть все дыры, предусмотреть все непредвиденные обстоятельства, которые только могут случиться на этом пути... У кого грамотно получается то (образование) и то (возможность ничего не упустить - на крайний случай - debugging - отладка, пошаговая трассировка со значениями переменных и окружения хода выполнения программы на различных типах данных..)...
Программа построенная по принципу конечного автомата - как раз позволяет избежать ошибок, поскольку в каждый момент времени занимает одно из состояний заранее определённых программистом под свою ответственность... (как светофор или стрелка на железной дороге.).
Поэтому, чем более грамотен, культурен.. пользователь, тем меньше (в отличии от ребёнка) ему требуется рюшечек, вспомогашек.. в работе программы (книжки с картинками), больше его непосредственно содержания и тем проще, производительнее при том же использовании ресурсов и безопаснее программа (я люблю, например, вообще простую механику.. - арифмометр... (там, где изобретателям удалось реализовать проект без применения... (хотя, формами они по опыту, конечно, владеют в совершенстве - если спросишь, знают) и без потери смысла.) - вот совершенство, рождается элегантность, вдумчивость, разборчивость, чувство вкуса... - на таких примерах учатся дети). Честный человек вряд ли когда-либо подхватит вирус в интернете...
Именно этим, кстати, вызван эффект накопления программного обеспечения, в отличии от семечек, арбузов и дынь - притяжение знания некий куст программ...

Pascal - учебник по программированию - ставит мозги - что такое программа, что такое функция, что такое передача параметров..., как задекларировать (объявить) вначале переменные с их правильными типами, чтобы не устраивать чехарду потом... - культура написания программ. Жестоко, жестоко, жестоко... ТрупоПаскаль. ТурбоПлакаль 7.0 (for DOS). Потом читать приятно, удобно,... внятно, на каком бы языке вы не писали. Тяжело в учении...
C - основная рабочая лошадка системного программирования. Собственно С состоит из стандарта языка (как русский, только чётко описан и стандартизирован) и библиотек, которые используются конкретно для каждой аппаратной платформы. Вследствие чего исходный код на С может быть с соответствующими библиотеками откомпилирован под любую платформу. Даже существуют флаги: На какой платформе исходный код написан, На какой компилируется в исполняемые коды процессора, Для исполнения на какой предназначен. Можете поставить сервер компиляции на одной платформе, сидеть программировать под другой, пользователь будет исполнять под третьей... Просто.
Стандарт С - непререкаем.
Исходные коды светятся с годами (как Linux...).
Библиотеки могут меняться...
С могуч тем, что он даёт практически полную свободу грамотному программисту с системой - можно строки обрабатывать по частям как наборы чисел, одну и ту же вещь сделать разными способами и т.д. Всё, что может данная конкретная машина.
В связи с этим получаются хорошо документированные и высокопроизводительные приложения для конкретных систем. Легко в бою...

Стек FIFO (First Input First Output) - это очередь в магазин (ваше взаимодействие с другими людьми).
Стек FILO (First Input Last Output) - это список ваших текущих дел ("Каждый учёный сам копает Себе свою Яму." - ваш собственный круг дел).

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

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

Java - попытка сделать на основе языка С (близко к его стандарту), используя библиотеки конкретной фирмы (Sun->Oracle->?) среду для разработки и запуска "кроссплатформенных программ". На самом деле откомпилированных в свой байт-код (а не коды оригинального процессора), который только и выполняется этой Java-машиной.
Программисту на С с него перейти легко, масса готовых кросс-платформенных библиотек (окошки, менюшки, рюшки, работа с файлом..) под рукой (половина вашей программы..), всё можно сделать только каким-то одним образом, выполняется везде... что хорошо для быстрой разработки прикладных программ.
Минусы: привязка к набору библиотек конкретной коммерческой фирмы (а если с ней что-то случиться?), более медленная скорость выполнения программ, поскольку байт-код каждый раз по оператору надо переводить в код того процессора (системы) на котором в данный момент всё выполняется, поэтому о быстрых системных программах можете под этой средой забыть, а также, вообще, интенсивно работающих с оборудованием - дисками, графикой и т.д., постоянная потребность таскать в дистрибутиве эту Java-машину и устанавливать её, обновлять (кто-то даже называет её своей машиной, прячет под конец и пр...), как только у этой фирмы что-то изменилось в этих библиотеках, необходимо перечитывать все инструкции от языка, поскольку язык и библиотеки связаны между собой неразрывно, и всеобщее заблуждение, что одна и та же программа (код) может с равной степенью выполняться на разных устройствах - ведь все они предназначены для разных задач, а следовательно, в основном, и для разного программного инструментария, тем более уж прикладного... Порой, мне Java напоминает *резерватив, постоянно толкаемый между пользователем и процессором... Несмотря, на моё увлечение ею в юности. Легко, быстро, комфортно, всё вроде правильно...

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

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

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

LiveJournal -
Facebook - заметки на полях у Цукерберга
Instagram - фото
SoundCloud - музыка
Youtube - видео каналы
Twitter - сарафанное радио
...


Рецензии