Сердечно благодарю за благосклонное прочтение вчерашней статьи про русский язык и программирование. Я был слишком непонятен, но не был обруган. Спешу исправиться.
Чужой язык терминов (!) навязывает нам чужое понимание предметной области. Русский язык позволяет построить свое, ясное и точное понимание - в том числе, англизированного языка Си. (Речь пойдёт о терминах (!), не о переводе Си на русский.)
Книга "Матрёшка Си. Слойная система языка программы" представляет весь язык программирования на одной странице и потом коротко и ясно его описывает.
В это смысле Слойная система подобна Периодической системе Менделеева (ПСМ). Как и ПСМ, это не самая очевидная и простая вещь, но она лучше беспорядочной кучи сведений. Как и ПСМ, она исправляет ошибочные представления и восполняет очевидные пробелы. И как ПСМ, позволяет развивать научную мысль в смежных областях.
Таким развитием является речевая модель программы, также представленная в книге. Бессодержательное слово "алгоритм" (выдуманный синоним "программы") заменяется настоящим и действенным словом "речь". Модель показывает, как надо писать программу, как кодировать её и как разбирать на машинные команды.
Речевая модель и Cлойная система позволяют избавиться от пережитков машинного подхода в программировании, при котором происходит нездоровая сосредоточенность на сложностях устройства машины и машинных языков. Это состояние свойственно 50-м годам XX века, когда машины и языки были сложными, а программы - простыми.
Сейчас положение строго обратное. Программы - сложны, а языки - просты и вторичны. Но устаревший машинный подход стремится сделать простое сложным, потому что так привычнее и выгоднее по деньгам (да, это оскал капитализма, товарищи). Это можно сравнить с научным убеждением, что Земля вращается вокруг Солнца, при том, что большинство уверено в обратном. Они же не слепые, вон Солнце - оно двигается, и святая римская церковь так учит… Но Земля действительно вращается. Предшествующее описание и понимание языка Си было неполным, о чём и говорит обсуждаемая книга.
Книга обращена к подготовленному читателю, который сможет и поможет вынести обоснованное суждение - все-таки вертится, или нет.
Ещё раз призываю неравнодушных товарищей проследовать по ссылке внизу и внести свой вклад словом и/или делом. Ну и конечно, приветствуется ваше мнение в обсуждении ниже.
Комментарии
Напоминает одну рекламу: я не люблю кошачьих - нет, ты просто не умеешь их готовить.
Вкусно приготовленные malloc() и free() - настоящий праздник для ума. Не в смысле применения, а в смысле понимания красоты языка. А вот то, что в Яве все как поки повторяют "автоматическая уборка мусора", но даже не понимают, про что речь - вот это не дело.
особенно вкусен malloc, когда он вызывается много раз, при различных условиях, он тогда вызывает мощнейшую отрыжку в виде "memory leak". а иногда возникает непреодолимое желание поюзать еще раз уже отфрииеннный указатель, и тогда вместо отрыжки случается смерть. и это одна из серьезных обсуждаемых в узких кругах проблем языка c. собственно, так как понимающие люди чего-то там обсуждают про меморилиик и гарбажколлекторы, то и решения они какие-то придумывают, и реализуют (в Яве той же). ну а уж потом непонимающие начинают связывать меморилики с автогарбажколлекторами (ниче, что я на русском?) уже не понимая, про что речь.
я вот не понимаю, чем вам красиво malloc() и free() в прекрасном С и некрасиво GetMem() / FreeMem() в беспонтовом ObjectPascal? как это помогает "оценить красоту языка"?
Давайте как нибудь приведём отдельный батл Си vs Pascal. Мне надо будет подготовится, площадка думаю не АШ, а хабр.
Вы серьезно? Тролль или придурок?
По-моему, вы переутомились. Я не могу быть троллем в своей статье. Обзывать автора тоже как-то перебор. Могут ведь и забанить.
Да их нечего готовить. Я этим не ради красоты кода, или самоутверждения занимаюсь. Мне главное - как я быстро напишу, сколько времени у меня на отладку уйдет. А ошибка в malloc и free может здорово усложнить жизнь. И отсрочить оплату труда ;)
ООП и современные языки сильно упростило профессию. И даже больше, позволяет писать весьма объемные проекты, не сильно заморачиваясь с архитектурой, ведь в ООП исправить - просто. Ты не думаешь о коде, ты думаешь о результате. В Си же, я думал именно что о коде.
Плюсы также имеют malloc(), а без Си и Плюсов невозможно полностью понять, как работает Ява или ПХП. Так что программируют пжл на Яве, но правильно понимайте основы.
Знать как это работает, и постоянно думать об этом - не одно и тоже.
По моим наблюдениям, стиль программирование вырабатывается первым, хорошо освоенным языком, на котором начинаешь думать, все остальные изученные языки будут "подгоняться" под первый, например, мой первый язык С/С++, когда я начинаю писать на С#, уши сишника не спрячешь, поэтому задача решается выработанным стилем (читай язык программирования) и теми наработками и приемами, которые накопились за время практики решения задач. Поэтому Ваше утверждение "Потом надо выбрать подходящий язык и понять его.", лично меня шокирует, тк если нет ограничений по языку, то я буду решать задачу не на наиболее удобном для решения задачи языке, а на наиболее удобном мне, тк это освободит меня от усилий по изучения другого языка, да и толком изучить его в приемлемые сроки не получится, скорее постановщик задачи будет подбирать программиста на выбранном им языке, чем требовать доучиваться новому языку. Хотя всякое бывает, Я за 2 недели начал писать на шарпе (было такое требование от заказчика), но все равно, я писал на С++ используя синтаксис и возможности шарпа.
Вы сводите широкое понятие "программирование" к более узкому понятию "кодирования". Навыки кодирования действительно чувствительны к выбору и смене языка.
а что такое "программирование" в Вашем понимании? и чем оно отличается от "кодирования". :-).
Программирование - поиск и описание решения.
Кодирование - запись найденного и кратко описанного решения на языке программы, например, Си.
Обратите внимание, как забавно получается, когда эти понятия отождествляют. Программу с кодом и без решения лучше сразу переписать, чем немножко подправить. А отождествляют их почти всегда.
Вот это поворот (С) Вы уж определитесь.
если она не связана- то и нафига городить "си" на русском? а если есть необходимость городить русскую матрешку Си- то получается, что связано решение-то задачи с языком. а то вчера связана, сегодня нет. детсад какой-то.
Не уверен, что вы правильно поняли мою мысль. Я подчеркнул в начале, что никакого русского Си я не предлагаю.
Вы можете написать программу шахматы и на Си, и на Питоне? Значит, решение не зависит от языка. Код будет отличаться, возможно, быстродействие, но ходы будут одинаковы.
Не стоит обновлять свой пост без явного указания об этом.
Спасибо
Если вы преподаёте молодёжи языки программирования, то у вас всё плохо. Очень плохо.
Впрочем, это нормально. Вы не знаете истории, и плохо уже - вот это.
У языка С ( а равно, его предшественнике B, про который вообще никто ничего, кроме специалистов, не знает), была одна очень важная задача.
На ту пору, новые аппаратные системы кто только не лепил. Это мог быть intel с его гиперкубом (всего-то какие-то сраные 16 i286 по ребрам куба (и один куб внутри) и iapx432(tm)), какие-нибудь ребята с VLIW, и какой-нибудь сраный National Semiconducter, про который сейчас вообще никто не вспомнит.
И Multics, тудыть его в качель. но он был!. - первая система с разделением времени. и Unix, as an opposite to Multics cretinisms.
С. Си был хорошо тем, что соскочить на него, с ассемблера было легко, потому что он максимально был близок к исходной архитектуре. Была масса превентивных мер - типа приведеня типов, так чтобы исходный код был пригодно компилируем. И это работало!!! С был первым переносимым языком, потому что с его помощью можно было принести пользу на новое железо.
И очень быстро.
Могли бы вы оказать мне услугу и сообщить 3-5 словами, что именно я должен знать, чтобы не было так очень плохо. Чур не говорить "историю", меня расстраивают отдельные периоды, вроде Английской и Французской революции.
Я думаю, что основная польза языка Си для современного студента в том, что он является полноправным начальником языков семейства Си. Это не связано с программированием PDP-11 (хотели скрыть эти сведения?) или другой архитектуры, и не с ассемблером, а именно с новым подходом к программированию, который, начиная с Си, стал повсеместным.
уровни абстракции - это не слои? Да и книги толстые, из-за больших "детских" шрифтов. А так, концепция ООП укладывается в пару страниц.
А язык - важен. То что делается на С не всегда можно сделать на С# и наоборот. Даже в обучающих целях.
Что такое "составной образ" ?
Вот для таких вопросов и есть Ма3. В словаре ищем "образ", в образе ищем "составной".
А на хоть что-то более сложное эта ваша система переносится? Хотя бы на С++?
Всецело солидарен с автором, хотя последний раз что-то писал на Си лет 20 назад.
Значение на каком языке написаны операторы не имеют значение от слова совсем. Попытка придумать свой язык на русском полный бред. Язык силен не тем что на нем можно что то написать, а тем что можно воспользоваться готовыми модулями и библиотеками написанные другими. Не кто в мире писать на вашем языке не будет. И вообще в большинстве случаев пишешь не языке, а под апи. А там вообще выбора особо нет.
Спасибо за прочтение статьи. Мой язык - Си. Русский язык нужен для его описания, правильного понимания и преподавания, а не переписывания.
Все равно, пока квантовые компы(ну или гибриды) прочно не войдут в нашу жизнь, от ассемблеров ты никуда не денешься, а изучить ассемблер дано не только лишь всем, мало кто может это сделать..)))
Самое простое это и есть ассемблер,
А вот сложность в том что бы изучить конкретный процессор саму машину (его архитектуру) , без этого на асме не напишешь. Переход на 286 и 386 , от 086 явно показывает что...
Видеокарты ускорители...то же вроде асм.
А интересные комментарии встречаются, гы гы гы,. Но есть те кто суть не понял...
Давненько я не брала в руки шашек... Гы гы гы
Самое интересное это кванти и ИИ.
Последний раз программировал когда ещё были 586... ( Плисы, контроллеры , risk, и и же..)
Странно что никто не начал с фоннеймана( архитектура) и неначал обсуждать какие ещё варианты были и есть и может будут - вот тут можно и русский применить
А Вы "переведите" С на русский, заменив ключевые слова - и всё как в 1С получится, люди будут рады . Правда, нечто подобное уже пробовали - "ершол" был в 80-х, пытались на нём советским школьникам мозги портить.
Алгол же еще был! и Диспак!
Откройте уже для себя лисп - вот где рай для лингвиста. Язык С и знание аппаратной части отлично друг друга дополняют. То, что вы называете устаревшим "машинным подходом" - это существенная часть языка и не надо пытаться от неё избавиться.
Хотите избавить начинающих программистов от ненужных им пока сложностей - делайте как все нормальные преподаватели, возьмите паскаль или питон.
А Солнце вертится вокруг Земли, "every fool can see".
Язык Си был создан при написании программной игры (Space Travel) в 1969 как прикладной язык. В 1972 он был использован для переписывания ОС Unix и стал считаться машинным и системным, но это побочное и неверно понятое назначение. Отсюда нежелание объяснять Си просто, хотя именно простота - его главное достижение. Поэтому он стал родоначальником семейства Си языков - самых востребованных среди всех.
Паскаль и питон по сравнении с Си - неуклюжи и малораспространены.
Вы бы из лабы выходили бы иногда))
Java EE отлично применяется для бизнеса.
Я не видел особого распространения Си для web. Да и под виндовые проложения тот еще гемморой на си писать.
По распостраненности, по поддержки сообществом python и java стабильно лидируют.
Привет велико-британцам! )) Ява - язык семейства Си, отсюда его красота и богатство.
Питон менее распространен, чем другой потомок Си - ПХП. Но у него есть свои сильные стороны, о которых я, к сожалению, знаю только по наслышке.
Как вы их так лихо объединили?
также вы зачем-то предлагаете менять именно синтаксис, хотя, и php и Java имеют не очень сходных синтаксис, и особенности. Строгая типизация, например.
Ничего я не объединял. И Java, и PHP - языки семейства Си.
Спрошу вас на полном серьёзе: почему вы решили, что я хочу что-то изменить в синтаксисе каких-то языков? Какое именно место в статье, пусть и косвенно, навело на эту мысль?
вот это поворот (С). с чего это? неужели языки по семействам раскладываются на основе того, begin end, { } или DO ENDDO у них для выделения блоков используется?
Си- компилируемый, статически типизированный, общего назначения. Java - типизированный объектно-ориентированный без статических переменных, указателей нормальных нет. PHP- вообще интерпретируемый c динамической типизацией.
Си- уклюжий, а питон- неуклюжий? вот это поворот (С). Есть альтернативное мнение- что причина распространения Си заключается только в том, что его куцего по выразительности языка для него очень просто реализовать компилятор, а для всяких встроенных контроллеров этого простого куцего компилятора хватает. Поэтому именно из-за микроконтроллеров Си до сих пор и живет. А для чего-то более толстого спецом на Си нагродили два плюса. и на этом С++ винда была писана. а так как она давненько стала основной ОСью по массовости, то если ты хочешь писать софт под винду- то тебе придется контачить с кодом, писанным на Си++, ну так и нечего геморроить себе всякие врапперы и прокладки между интерфейсами, проще писать под виндой на Си++. Была бы винда писана на паскале- то сейчас интел-компайлер использовал бы в качестве основного языка паскаль, а про С/С++ знал бы тот же круг, что и про кобол и лисп- увлеченных динозавров, не более.
Язык Си - образцово красив и крут. Поэтому он стал образцом для всех успешных промышленных языков. Это так.
Вы на нём вызов функции по адресу 0 напишете без подглядывания? И так везде.
Между прочим, совсем небольшого изменения синтаксиса (команда POKE) достаточно, чтобы полностью избавиться от точек с запятой. И это сделано, например, в языке NedoLang. Обращаю ваше внимание, речь не об использовании форматирования текста, форматирование при этом не важно. Просто язык Си разработали через одно место (даже чисто левый контекст для авторов был пустым звуком) и форсировали как стандарт. Молиться там не на что.
Функция по адресу 0 - этот blkpntr? Нет, я не вызывал пока. Попробую))
это я так понимаю, для Фортрана и для Кобола он стал образцом? да?
Обратите внимание: интел выпускает свои оптимизирующие офигенские компиляторы с поддержкой всех своих суперпупер инструкций для двух языков: C++/Fortran. Причина? а потому что C++ это компилятор ядра винды, а Фортран- это компилятор для математических расчетов, с которого математики не слезают и слезать не хотят. почему не хотят? а потому что у них куча библиотек написана давным давно на фортране, и переписывать этот функционал заново им тупо влом. А кобол живет до сих пор по той причине, что куча банковского софта писана на коболе, работает до сих пор, а переписывать его никто не рискует- слишком дорогие будут ошибки, а то, что есть- выполняет свои функции и приносит реальные прибыли- зачем это ломать?
Си образцово красив и крут? да ладно. почему же при его красоте и крутости его удел на сегодня- встраиваемые системы, и все? Почему все с него бегут куда угодно при первой возможности? почему на Си пишут только бородатые железячники? Почему разрабы тяжелого софта сидят на С++? Только не повторяйте мне, что c++ выгоден кому-то с точки зрения денег и какие-то злыдни продают кому-то ООП. (хочу купить немножко ООПа. где продавцы!? ауууу!!! компиляторы бесплатны. IDE- бесплатны). Вся образцовость и крутость Си заключается в том, что именно его использовали 70 лет назад для создания ядра unix в Bell Labs. Просто инженеры электронщики как смогли сколотили себе какой-то язычок для упрощения своего тогдашнего ассемблера, и на этом "первоблинкомовом" языке слепили ядро операционки. А язык слепили для того, чтобы ускорить разработку на ассемблере. специально делали так, чтобы язык был максимально приближен к железу и к ассемблерным операциям, которые на тот момент были у них под рукой. "++" == "inc"; "--" == "dec". "*" = "addr". "+=" == "add" (а вы говорите, что зря рассказывают про си вместе с ассемблером). Томсон сначала ассемблер завернул в обертку языка B (был же ассемблер- А, значит, у нас следующая буква- Б!). А Риччи потом немножко оптимизировал получившееся поделие, чтобы оно генерило чуть покомпактнее код (их тогдашние ЦПУ в подметки не годились современным PIC с 2кб ОЗУ), и назвал его следующей буквой алфавита- "С". Проектирование компиляторов? не не слышали. такого еще никто никогда не произносил. это через 40 лет только придумают. а пока- как умеем, так и проектируем. И вот этот костыль и инвалид (си) стал стандартом просто потому что оказался на нужном месте в нужное время.
Вероятно, именно в силу красоты и крутости его запрещено использовать при разработке ответственных систем военного назначения для армии США. На Аде и Модуле можно, а на Си/С++- нельзя.
Ну паскаль не промышленный язык, а вот то что питон не распространен - тут я поржал :)
Первая версия Photoshop написана на Паскале (диалект с = вместо :=). Основные командеры - тоже.
Совершенно очевидно, что a,b,c: pointer to byte выглядит нагляднее, чем unsigned char *a, *b, *c. Просто есть лобби (в данном случае против Европы).
да нету никакого лобби. есть инерция. куча легаси на c/c++, и эту кучу надо толкать в перед. и проще ее толкать мелкими кусочками на с/с++, чем переписывать сразу все на что-то другое, тем более, что в текущем виде при всех недостатках и проблемах с/с++ это не только и не столько язык. это язык + стандарт + стандартизированные библиотеки ну и + "прежних ошибок груз"- то есть куча всяких утилитарных библиотек, типа IMKL той же самой! есть какая-никакая переносимость и какая-никакая стабильность. хотя бы и в косяках, но стабильность.
На pascale, помимо коммерческого фотошопа, еще коммерческий AltiumDesigner, и килотонны всякого локального софта в куче мелких и средних контор. Все-таки делфи для создания пользовательского виндового софта- недостижимый до сих пор почему-то идеал по удобству и скорости разработки. и это очень даже промышленный софт. только не "ширпотребный".
Задача программирования это как из исходных данных получить требуемый результат и путь от начала до конца не важен. Важен результат. Сам же путь будет зависеть от способностей и усидчивости писателя, а так же его пониманием результатов.
А почему не начать с арифметики заменив французские больше, меньше?
Кому и какая от этого польза?
Всем и большая. Лучше понимать будут про плюс и минус.
Так это был не стёб? Тогда на что заменить?
Перспективный чат детектед! Сим повелеваю - внести запись в реестр самых обсуждаемых за последние 4 часа.
Нанимаешь таких вот утырков, а в результате ... да всем насрать на чем вы кодите, делайте это грамотно
Страницы