Здравствуйте, AlexRK, Вы писали:
ARK>Я бы не сказал, что руст уже мейнстрим. Ну и, в любом случае, рассуждать о смерти структурного программирования, мягко говоря, преждевременно.
Вообще, уже давно не говорят про такое понятие, как структурное программирование. Говорят об императивщине. О функциональщине. О декларативщине. Про оопвщину. И про кучу других парадигм, более специализированных и не таких явных и популярных. А реально всегда идет смесь всех этих подходов. Ибо ни один из подходов не является серебряной пулей, когда то хорош один, когда то другой. Ну и пересматриваются бест практики в каждой парадигме. Но именно термина "структурного" программирования в современном мире давно нет. Ближе всего к этому императивный подход. Но бест практики императивного подхода сейчас совсем другие, совсем не такие, какие были в момент разработки паскаля.
Здравствуйте, LaptevVV, Вы писали:
LVV>На работе будет 90% рутины, и дай Бог, 10% инетереса. LVV>Поэтому студень должен знать свое будущее — писание кода для совершенно рутинных задач. LVV>А кому инитересно — пусть на кафедре остаются интересные задачи решать...
На деле рутину можно и нужно автоматизировать. Вот у меня тоже рутина. Страшнейшая. Только я в рамках этой рутины написал движок. У меня постоянно меняются требования — я написал простенький DSL на основе которого делается кодогенерация. И рутинные задачи стараюсь делать так, чтобы получилось платформа, и чтобы дальше эти рутинные задачи щелкались как орешки. Более того, когда я свой движок сделаю достаточно хорошим и он устаканится, когда появится понимание что реально нужно, на этом движке буду писать не я, а совсем другие люди. Которые потом будут помнить особенности этого движка лучше, чем я сам, хоть я и был автором .
Рутина тоже автоматизируется!
Угу, много букв. А в жизни надо то с регистром, то без регистра, то считая разные представления одним символом, то не считая. Даже с русским языком всё плохо, кто-то "нормализует" галочку над Й в отдельный символ, а кто-то её потом так и рисует справа.
MTD>Не понял, как так? Оно же по определению, ну того
Оно, конечно, того. Потому в стандартной библиотеке не впёрлось. Но в отдельной здоровенной либе кучу до сих пор встречавшихся авторам вариантов почему бы и не заимплементить. Для извращенцев, которым от компьютера нужны не вычисления, а свистелки.
MTD>На лабах в институте? Безусловно.
Для вычислений. Можно вспомнить семантику слова "компьютер". А для планктона сморфоны есть, им тот C# без надобности.
MTD>Слушай, ну сморозил ты глупость, зачем же усугублять? Например, данные выгружать/загружать нужно практически любой программе, а для этого надо работать с директориями.
Для этого надо работать с файлами, директории обходить никуда не нужно. В самом няшном варианте откроется диалоговое окно, пользователь там походит, чо надо выберет или создаст — и всё пучком.
MTD>С точки зрения мизантропа, да. Пользователя надо мучить, пусть вообще сам все данные с клавиатуры вводит (vvedite chislo: _) и когда они посчитались архинужной утилитой frexp, которая как раз на лабе пригодилась, записывает с экрана все в свой блокнот (resultat raboti: 100500).
Двоечник так и сделает. А кто ходил на лабы и слушал учителя — запустит ./a.out < input.txt > output.txt, такое даже в винде давно уже есть. А файлы уже текстовым редактором попишет почитает.
Здравствуйте, cures, Вы писали:
C>Угу, много букв.
Не осилил? Ну так отдыхай, чего так волнуешься?
C>А в жизни надо то с регистром, то без регистра, то считая разные представления одним символом, то не считая. Даже с русским языком всё плохо, кто-то "нормализует" галочку над Й в отдельный символ, а кто-то её потом так и рисует справа.
Да, надо и все это регламентируется, что противоречит твоему голословному утверждению.
C>Оно, конечно, того. Потому в стандартной библиотеке не впёрлось.
Тебе может и не вперлось, а 99,9% людей это необходимо, так как программа сама в себе никому не интересна.
C>Но в отдельной здоровенной либе кучу до сих пор встречавшихся авторам вариантов почему бы и не заимплементить. Для извращенцев, которым от компьютера нужны не вычисления, а свистелки.
Элементарно вывести информацию на языке пользователя свистелки? А ты жжешь, умничка.
C>Для вычислений. Можно вспомнить семантику слова "компьютер". А для планктона сморфоны есть, им тот C# без надобности.
Ты видимо не в курсе, но компьютер только как калькулятор не используют уже лет 50.
C>Для этого надо работать с файлами, директории обходить никуда не нужно.
Ты бы не позорил себя так — времена CP/M не поддерживающей иерархии файлов давно прошли, ты стало быть застрял в том времени?
MTD>>С точки зрения мизантропа, да. Пользователя надо мучить, пусть вообще сам все данные с клавиатуры вводит (vvedite chislo: _) и когда они посчитались архинужной утилитой frexp, которая как раз на лабе пригодилась, записывает с экрана все в свой блокнот (resultat raboti: 100500).
C>Двоечник так и сделает. А кто ходил на лабы и слушал учителя — запустит ./a.out < input.txt > output.txt, такое даже в винде давно уже есть. А файлы уже текстовым редактором попишет почитает.
Какая разница двоечник или отличник, главное что диагноз я поставил правильно, а ты спорить не стал, стало быть согласился — описываемое тобой уровень студенческих лаб.
Я на практике циклов с постусловием почти не встречал. Для гарантированного выполнения 1-й итерации чаще встречал другую конструкцию — уловие цикла это флаг, который инициализируется перед циклов в true и меняется в цикле. Но и такая конструкция очень редко встречалась.
Здравствуйте, AlexRK, Вы писали:
C>>Их много. В Golang тоже нет, как и в Rust. C>>Тогда как в типичных курсах по структурному программированию на это отводят аж несколько лекций. ARK>Я бы не сказал, что руст уже мейнстрим. Ну и, в любом случае, рассуждать о смерти структурного программирования, мягко говоря, преждевременно.
Ещё про Ruby забыл, там тоже нет.
СП как самостоятельная дисциплина — уже сдохло. Оно просто не покрывает потребностей современного программирования, потому никто на нём на останавливается и не возводит на пьедестал.
Здравствуйте, Cyberax, Вы писали:
C>Ещё про Ruby забыл, там тоже нет.
В руби есть цикл с постусловием.
C>СП как самостоятельная дисциплина — уже сдохло. Оно просто не покрывает потребностей современного программирования, потому никто на нём на останавливается и не возводит на пьедестал.
СП является базой и составной частью современного императивного программирования. Лично я уверен, что называть это словом "сдохло" — просто неверно. Сдохло гото, а СП "жалеет всех живых".
Здравствуйте, AlexRK, Вы писали:
C>>Ещё про Ruby забыл, там тоже нет. ARK>В руби есть цикл с постусловием.
Нету. Предлагается использовать "break if" в конце цикла.
C>>СП как самостоятельная дисциплина — уже сдохло. Оно просто не покрывает потребностей современного программирования, потому никто на нём на останавливается и не возводит на пьедестал. ARK>СП является базой и составной частью современного императивного программирования.
Одной из, и далеко уже не главной. Но таки почему-то это ставится во главу угла во многих вузах и школах. Как если бы отдельно изучали: "Сложение как основа математики", со специальными учебниками.
Здравствуйте, Cyberax, Вы писали:
C>>>Ещё про Ruby забыл, там тоже нет. ARK>>В руби есть цикл с постусловием. C>Нету. Предлагается использовать "break if" в конце цикла.
https://en.wikipedia.org/wiki/Do_while_loop#Ruby
ARK>>СП является базой и составной частью современного императивного программирования. C>Одной из, и далеко уже не главной. Но таки почему-то это ставится во главу угла во многих вузах и школах. Как если бы отдельно изучали: "Сложение как основа математики", со специальными учебниками.
Даже не знаю, что же может быть главнее базовых примитивов — последовательностей, ветвлений, циклов. Тем более, что это естественные для человеческого мышления вещи, в отличие от комбинирования функций.
MTD>>Слушай, ну сморозил ты глупость, зачем же усугублять? Например, данные выгружать/загружать нужно практически любой программе, а для этого надо работать с директориями.
C>Для этого надо работать с файлами, директории обходить никуда не нужно. В самом няшном варианте откроется диалоговое окно, пользователь там походит, чо надо выберет или создаст — и всё пучком.
Да ё-моё, обход директорий требуется делать чуть ли не в каждой программе вообще. Уж точно, если программа кучу данных обрабатывает.
Абсолютно стандартная ситуация на работе: поступили кучи данных в файлах, их надо как-то обработать и закинуть в другие кучи файлов.
Здравствуйте, Michael7, Вы писали:
M>Да ё-моё, обход директорий требуется делать чуть ли не в каждой программе вообще. Уж точно, если программа кучу данных обрабатывает. M>Абсолютно стандартная ситуация на работе: поступили кучи данных в файлах, их надо как-то обработать и закинуть в другие кучи файлов.
Что за кучи? Если файлы между собой никак не связаны и обрабатываются по отдельности, то что мешает вести список этих файлов при поступлении, из которого их потом выбирать? Это удобнее и надёжнее, чем в параллель и накладывать файлы в директории (разные директории — зачем?) и вычитывать их для обработки.
Ну а если взаимосвязаны и открывать надо вместе, то надо заранее знать, кто из них есть who. Тогда снова ничего не надо обходить, у каждого своё заранее известное имя.
Использовать директории в качестве списков обрабатываемых файлов плохо, они для этого не приспособлены. В винде — начинает дико тормозить при большом количестве файлов в папке, а в юниксе в своё время специально делали подпапки по первой букве имени (terminfo), так как тормозило даже не при обходе, а при обращении по известному имени к файлу из туго забитого каталога.
Единственное разумное, что приходит в голову — это утилиты типа ls, ctags, git. Но это довольно редкий кейс, практически системные утилиты, ну или средства разработки. Их пишут специально обученные люди, которые смогут подобрать подходящий язык.
Здравствуйте, AlexRK, Вы писали:
ARK>Сдохло гото, а СП "жалеет всех живых".
Где это гото, интересно, сдохло? В C/C++ без него толком не организуешь то же СП, или придётся накручивать безумные костыли для выхода или пропуска шага не самого внутреннего цикла. В фортране и паскале здравствует как и раньше, в диезе вполне себе наличествует. В жабе ждёт своего часа (reserved keyword), но жаба — не для скорости. Вот в хипсторских поделках типа пистона его и правда нет, ну так чем бы дитё ни тешилось. В функциональных языках ему неоткуда взяться, парадигма другая, но сколько на них приложений разрабатывается?
Другой вопрос, что некоторые особо упоротые хипсторы, дорвавшиеся до руководства, хейтят его в своих конторах, так злых Буратин никто никогда не отменит.
Здравствуйте, cures, Вы писали:
C>Где это гото, интересно, сдохло?
Да почти везде. Заменено как раз структурным программированием. Некоторые его еще применяют, но почти любой код с гото можно переписать без него.
C>В C/C++ без него толком не организуешь то же СП, или придётся накручивать безумные костыли для выхода или пропуска шага не самого внутреннего цикла.
Это говнокод.
C>В фортране и паскале здравствует как и раньше, в диезе вполне себе наличествует.
Гото много где есть, только смысла в нем нет.
C>В жабе ждёт своего часа (reserved keyword)
Здравствуйте, AleksandrN, Вы писали:
AN>Здравствуйте, pestis, Вы писали:
P>>Зачем нужно осваивать устарелое структурное программирование если во всей индустрии от него давно отказались?
AN>Структурное программирование состоит из подпрограмм и 3-х управляющих конструкций — последовательность, ветвление, цикл. Уверен, что от этого уже все отказались? Чем заменили?
В душе не представляю что ты называешь "последовательность", а от остального нормальные люди давно отказались. Ветвление сперва заменили на полиморфизм, на чистом ООП if вообще почти не используется, а потом изобрели паттерн матчинг. Циклы сперва заменили на итераторы, а потом на функциональное api для работы с коллекциями. Это уже настолько мейнстрим, что даже в Java есть стримы, а паттерн матчинг вот-вот добавят.
Здравствуйте, landerhigh, Вы писали:
L>В смысле "все есть список, а кто не все — тоже список"?
В смысле что списки, деревья, графы и прочие структуры нагляднее выглядят на лиспе, чем на си, где студент больше воюет с указателями, чем занимается алгоритмом.
Здравствуйте, pestis, Вы писали:
P>В душе не представляю что ты называешь "последовательность"
Последовательность выполнения операторов. Чтобы "Console.Write("a"); Console.Write("b");" гарантированно вывело "ab". Ну, это как раз то, для чего в хаскеле ввели уродливые костыли.
P>Ветвление сперва заменили на полиморфизм, на чистом ООП if вообще почти не используется
Который суть тот же if.
P>Циклы сперва заменили на итераторы, а потом на функциональное api для работы с коллекциями
Можете показать какой-нибудь более-менее крупный проект, в котором нет циклов, а есть одни итераторы и функциональное api для работы с коллекциями?
P>Это уже настолько мейнстрим, что даже в Java есть стримы, а паттерн матчинг вот-вот добавят.
Только вот базовые вещи — ифы и циклы — никто не отменял и не убирал.
Здравствуйте, cures, Вы писали:
M>>Да ё-моё, обход директорий требуется делать чуть ли не в каждой программе вообще. Уж точно, если программа кучу данных обрабатывает. M>>Абсолютно стандартная ситуация на работе: поступили кучи данных в файлах, их надо как-то обработать и закинуть в другие кучи файлов.
C>Что за кучи? Если файлы между собой никак не связаны и обрабатываются по отдельности, то что мешает вести список этих файлов при поступлении, из которого их потом выбирать? Это удобнее и надёжнее, чем в параллель и накладывать файлы в директории (разные директории — зачем?) и вычитывать их для обработки.
Чтобы вести список файлов надо откуда-то узнать, что за файлы лежат, а узнать можно как раз с помощью обхода.
У меня такое ощущение, что вы просто не сталкивались с реальным документооборотом.
Потому что можно как угодно теоретически правильно все спроектировать, а на практике повылезает такое... И отговариваться, что "у меня все правильно, это они идиоты" нельзя, так как нужно, чтобы работало, а кто виноват дело второстепенное. Из того, что я надолго запомнил, хотя было уже лет 15 назад. Не с директориями было связано, но делали базу данных для одной организации и там решили для простоты в качестве первичного ключа в одной из таблиц использовать номер документа, причем по-определению этот номер должен был быть уникальным и казалось, что он и в самом деле уникальный. (Вообще-то в нормальных книгах по БД рекомендуют никогда так не делать, но мы не знали). Догадываетесь, что произошло на практике? Ага, ну теоретически номер и в самом деле был уникальным и возник скандал в руководстве организации, когда мы выявили разные документы с одинаковым номером. Но базу пришлось переделывать.
На практике гораздо проще обходить директории и не придумывать лишнего.
C>Ну а если взаимосвязаны и открывать надо вместе, то надо заранее знать, кто из них есть who. Тогда снова ничего не надо обходить, у каждого своё заранее известное имя.
А если не известно? Если эти файлы поступают из внешних источников и там может быть что угодно? Хотя бы присылают по почте файлы в зазипованных архивах, в том числе с каталогом.
C>Использовать директории в качестве списков обрабатываемых файлов плохо, они для этого не приспособлены. В винде — начинает дико тормозить при большом количестве файлов в папке, а в юниксе в своё время специально делали подпапки по первой букве имени (terminfo), так как тормозило даже не при обходе, а при обращении по известному имени к файлу из туго забитого каталога.
Естественно не надо пихать тысячи файлов в один каталог. Правда насчет юникса замечу, что xfs или ext4 спокойно переносит кучи файлов в каталоге.