Есть необходимость в одно рыло написать программу, которая не маленькая и достаточно сложная, чтобы я смог сразу умом охватить весь набор классов и их взаимосвязей, и начать писать код.Собственно весь мой предыдущий опыт быдлокодинга был таков, что когда мне надо было что-то накодить, я просто садился и писал код, начиная с какого-то куска, который мне больше нравился.В данном случае понимаю, что сначала надо всё же желательно весьма детально спроектировать структуры данных и взаимоотношения классов. Как это принято у профессионалов принято делать? Я вижу такие варианты:1. Написать в блокноте псевдокод - алгоритм вычислений и потока данных. Этот способ имеет недостаток, что словами сложно описать структуру данных, что во что входит. Хотя для описание задачи, в которой главное не данные, а алгоритм, это отличный способ.2. Нарисовать какие-то произвольные блок-схемы из круглешков и стрелочек или диаграммы UML на листочке/в поверпоинте. На листочке сложно будет что-то править. Да и в поверпоинте заебешься рисовать. Ну и не сказал бы, что большая диаграмма UML или ей подобная является легко читаемой.3. Не поддаваться желанию проектировать, а сразу кодить. Находишь класс, который 100% должен быть в программе, и у которого мало вариаций реализации, и кодишь его. А потом просто нанизываешь всё остальное на этот класс, скручивая по ниточке в клубок, начиная от наиболее очевидных, ясных, интересных и железно необходимых мест, до мутных, не ясных, не очевидных, многовариантных и скучных мест. Недостаток очевиден: на каком-то этапе можешь понять, что всё не то, и весь код выбрасывается.4. Пишешь всю программу интерфейсами классов, на этом этапе продумываешь все связи и поток данных, не думая о конкретных реализациях методов и минимально касаясь каких-либо алгоритмов. После того как все интерфейсы написаны и связаны, просто пишешь их реализации, где-то сразу полноценные, где-то заглушки, и на этот хребет постепенно насаживаешь мясо. Сейчас выбрал такой метод (с тремя предыдущими методами я на днях долго кряхтел-кряхтел по этой задаче, но в итоге обосрался) . Основной недостаток, который сразу вижу: чем проще и понятнее получаются связи интерфейсов классов, тем менее оптимальными будут вычисления (т.к. куча лишних аргументов, копирований, лишние вычисления, не оптимальная их последовательность и т.п.). Конечно, преждевременная оптимизация - зло, но есть риск, что потом с полученного скелета уже не соскачить и придётся мириться с неоптимальностью.Хотел бы услышать каких-то советов, напутствий, предостережений от опытных людей по теме. Писать буду на C#.
>>1394519 (OP)Твой подход имеет право на жизнь, так что скорее всего получится. Ещё можешь юзать Class Diagram, если в VS работаешь.
Посоны, правильно ли я понимаю, что тут разный подход.Вся это функционально- пропозишоновская хуета идет снизу и синтезирует типы, пока не дойдет до нужного уровня абстракции. А вся эта ооп поебень наоборот идет сверху и отсекает всё ненужное, пока не останутся нужные обстракции.
>>1394722тоесть при функционально-пропозишоновской хуете идет доказательство существования пипа, а при ооп идет интуитивный человекозависимый подход, выливающийся в экзостив тестирование
>>1394722тоесть при функционально-пропозишоновской хуете идет доказательство существования пипа, а при ооп идет интуитивный человекозависимый подход, выливающийся в экзостив тестирование
>>1394724Функциональное программирование - сугубо для мамкиных теоретиков, претендующих на илитарность. На практических задачах код ФП будет раз этак в 100 медленнее нормального кода, либо будет нечинаем и кишить багами, но скорее всего и то, и другое вместе пруф https://habr.com/ru/post/317348/ Любая достаточно сложная программа пишется в стиле ООП. Сложной считается программа, написание которой занимает 5 и более рабочих макако-дней. При этом микро функции, не вылазящие из под капота, но критичные к производители, пишут на C или ассемблере.
Я в более или менее крупных задачах попеременно пилю сверху вниз и снизу вверх, в середине соединяю. Сначала, например, разделяю задачи на большие модули, которые логически энивей разнесены, и сомнений в этом нет. Потом в каждом модуле определяю элементарные операции, которые так или иначе понадобятся (коннекторы к либам, типы данных), пилю их. Потом исходя из того, что получилось внизу, немножко уточняю уровень модулей, начинаю прописывать интерфейсы между ними. Потом объединяю низкоуровневые компоненты в более крупные, запиливаю забытые новые. И так далее.При таком подходе самая дрисня получается в середине, но контролировать это гораздо проще, чем в чистых проходах сверху вниз (тогда, как заметил анон выше, получаются дичайше неоптимальные вычисления на низком уровне) и снизу вверх (тогда на верхнем уровне получается мешанина). Кроме того, рефакторить это тоже довольно легко - связанность сравнима с нижним уровнем, но при этом невелик риск что-то поломать.
>>1394865Не слушай этого пидораса. 5 дней у него большая прога, блять. На ассемблере он оптимизирует, лол. ФП у него бажное, ага. Пусть нахуй идет.
>>1394865>На практических задачах код ФП будет раз этак в 100 медленнее нормального кодаДоказать можешь? Многие ФП языки намного быстрее чем императивные. Вы пишите проги на питонах, руби, пхп, джавах и прочем, и не говорите что они медленные. Большинство ФП языков не медленней джавы, а некоторые на уровне языка Си.Если бы изучал алгоритмы, то знал бы что правильные алгоритмы дают прирост производительности в тысячи раз, а использование Си вместо скажем Хаскеля только в 2-4 раза. Правильно написанный код намного важнее скокрости языка. Если тебе и подобным дать самый быстрый язык, ты все равно ничего толкового не напишешь, потому что квалификации нет.>>1394865>либо будет нечинаем и кишить багамиТвой код на любом языке будет такой. Потому что у тебя нет правильного мышления, математического, логического, абстрактного, инженерного. В твоих фразах нет причинно-следственных связей, каша какая то. ФП код понятнее любой императивной лапши (ООП, процедурка), потому что он пишется как выражения в математике. Всем понятны математические выражения, их легко читать, легко понимать, легко писать, легко о них рассуждать. Рассуждать об императивной лапше человеку несвойственно. Потому что императивное мышление ближе к машине. Там где императивность там длинные ветви инструкций, изменяемое состояние которое нельзя отследить, и множество ошибок.Вот выражение на картинке. Оно хоть и выглядит страшно, но легко понимается если немного изучить тему. Его легко читать, все символы имеют четкое значение. Его лекго понять и решить, нужно просто подставить нужные значения и операции вместо букв и знаков. В нем нет хранимого и изменяемого состояния, не нужно держать в голове какая переменная где изменяется.
>>1395860У пистона есть невыносимая легкость вкатывания, гигантское количество готовых либ для абсолютно любых задач, которые легко найти, поставить в два клика и вкурить по исходникам за пять минут, даже если нет доков.У си есть скорость рантайма, в точности равная теоретически возможной из-за машинноориентированности, есть прозачность работы без выполнения всякой странной хуйни, о которой ты понятия не имеешь.У джавы есть кроссплатформенность, рантаймы хоть в смарткарте, хоть в суперкомпьютере на какой-нибудь странной платформе.Даже у пхп есть легаси, это нихуевый импульс к жизнеспособности.А что есть у ФП? Haskell с глючным и тормозным GHC, который даже под вендой работает через жопу, не говоря уж об экзотических платформах или микроконтроллерах. Нет либ. Нет IDE. Нет доков, которые внятно объяснили бы, что под капотом, а не расписывали преимущества зигохистоморфных препроморфизмов. Даже адекватных евангелистов нет, только петушки, которые пытаются кормить своими монадическими испражнениями нормальных людей, которые хотят решить задачу, а не решать задачу.Lisp? С теми же проблемами плюс зоопарком стандартов, уебищным синтаксисом и минимально приемлемой производительностью только на гипотетической машине, которую никогда не построят?Scala, которая была создана, чтобы решить проблемы джаваблядков, но в итоге сохранила их все и добавила новых от себя?ФП блестяще справляется в единственной нише - специальной олимпиаде. Когда ты сначала придумываешь, как написать, чтобы все охуели, ну а потом находишь задачу, которую бы приблизительно мог решать подобный высер. Поскольку получающиеся задачи чаще всего оторваны от реальности полностью, а в некоторых случаях код оказывается и вовсе неприменимым на практике, ФПшники могут выжить только где такой подход считается допустимым - то есть либо в университетах, либо в хипстерских стартапах в начале существования.
>>1395914>У пистона есть невыносимая легкость вкатыванияНе правда. Он легкий только в начале. В нем очень много понятий. Посмотри книги Лутца, "Изучаем Python" занимает почти 1300 страниц! Почти любой функциональный язык намного проще. В нем просто нет столько понятий.
>>1395914>У си есть скорость рантайма, в точности равная теоретически возможной из-за машинноориентированностиЭто все чепуха. Ты врядли сможешь использовать это на полную мощность, потому что не представляешь как писать эффективный код. Эффективный алгоритм на JS будет быстрее твоего кода на Си. Почитай книгу Кормена по алгоитмам, там есть доказательства этому.Можно написать такой же по скорости код на OCaml к примеру, но он будет короче, понятней, и нем не будет возможности прострелить себе ногу как в Си. Скорость и удобство написания кода важнее скорости исполнения, потому что скорость исполнения можно достичь правильным решением задачи, а если язык кривой и неудобный, то этого уже не исправишь.
>>1395914>У джавы есть кроссплатформенность, рантаймы хоть в смарткарте, хоть в суперкомпьютере на какой-нибудь странной платформе.Представь себе все ФП языки кроссплатформенные.
>>1395914>А что есть у ФП? Haskell с глючным и тормозным GHC, который даже под вендой работает через жопу, не говоря уж об экзотических платформах или микроконтроллерах.На виндах не сидим. Программисты используют платформы пригодные и предназначенные для программирования. В винде криво реализованы стандарты Си (POSIX), поэтому писать на ней код мучение. И я не уверен, что GHC плохо работает на винде. Скорее всего у тебя руки такие.>>1395914>Нет либ. Нет IDE. Нет доков, которые внятно объяснили бы, что под капотом, а не расписывали преимущества зигохистоморфных препроморфизмов.Это все оправдания неосиляторов. Все есть, кто хочет находит.>>1395914>Даже адекватных евангелистов нет, только петушки, которые пытаются кормить своими монадическими испражнениями нормальных людей, которые хотят решить задачу, а не решать задачу.Ну это уже за гранью. Тебе никто ничем не обязан. Никто не будет тебе насильно рассказывать почему круто использовать Эрланг. Это уже сто раз рассказано. Кто хочет найдет.
>>1395914>Lisp? С теми же проблемами плюс зоопарком стандартов, уебищным синтаксисом и минимально приемлемой производительностью только на гипотетической машине, которую никогда не построят?Это чепуху я уже прокомментировал. Некоторые реализации близки к Си. Это в десятки раз быстрее питона, который ты нахваливаешь. Ты пишешь на медленном языке, и называешь Лиспы, которые быстрее в несколько раз непроизводительными? Лол.
>>1395914>ФП блестяще справляется в единственной нише - специальной олимпиаде. Когда ты сначала придумываешь, как написать, чтобы все охуели, ну а потом находишь задачу, которую бы приблизительно мог решать подобный высер. Поскольку получающиеся задачи чаще всего оторваны от реальности полностью, а в некоторых случаях код оказывается и вовсе неприменимым на практике, ФПшники могут выжить только где такой подход считается допустимым - то есть либо в университетах, либо в хипстерских стартапах в начале существования. Думаю тебе не нужно изучать программирование. Если ты не понимаешь, не хочешь и не можешь понять что такое ФП, то ты и других тем не поймешь. Если что есть теория алгоритмов, Машина Тьюринга, Лямбда-исчисление, - это слова оттуда. Любой человек думающий головой подтвердит, что Лямбда-исчисление намного проще и понятней, и намного мощнее Машины Тьюринга. Лямбда-исчисление это основа ФП, а Машина Тьюринга основа императивного программирования.
>>1395860>Большинство ФП языков не медленней джавы, а некоторые на уровне языка Си.Если в Си писать в стиле ФП, то да. Но так на Си никто не пишет.ФП не предназначен для современных компьютеров. Выделение памяти, явно избыточное порождение новых кусков данных целиком, даже если они вовсе не изменились в результате выполнения функции - всё это ОЧЕНЬ дорогие операции. За последние полвека скорость вычислений ЦП увеличилась в миллион раз. А скорость доступа к оперативной памяти - только в 1000 раз.
>>1395929Лямбда исчисление красиво теоретически, но машина Тьюринга это то, как работает реальный компьютер. Это то, как думает человек в повседневности. Это то, как хранятся любые данные в физическом мире. Пока код пишет и исполняет не святой дух, лямбда-исчисление останется абстракцией для доказательства теорем, а не основой программирования. Ты серьезно считаешь нумералы Черча естественным способом представления чисел? Даже у блядских римлян было более продвинутое представление, это уровень папуасов с палочками. ФПшник это папуас, строящий аэродром из веток, увидев пролетающий авиалайнер. Удобно думать, что груда веток решит все твои проблемы и приблизит тебя к белому человеку без необходимости въебывать как он. Но в реальном мире аэродром из веток не заработает, и авиалайнер не прилетит. Хотя папуасам похуй, они уже ни в чем не нуждаются, и решение задачи не так уж важно, как писалось выше.
>>1396095>Лямбда исчисление красиво теоретически, но машина Тьюринга это то, как работает реальный компьютер.Зато математика работает по другому. Для того чтобы писать код не нужно знать как работает компьютер, для исполнения кода не процессоре есть интерпретаторы и компиляторы. Только идиот будет писать не на понятном для человека языка, а на языке компьютера. Специально для этого придумали трансляторы.
>>1396105>понятном для человека языкаМатематика с последней победы Путина стала априорным знанием? Или по какой причине логика одного языка (математического) выставляется более очевидной, чем логика другого языка (вычисления)?
>>1395938>скорость исполнения можно достичь правильным решением задачиОпять же, в твоем манямирке разработчик долбоеб и делает ошибку в алгоритме. А в реальности однажды наступает момент, когда из кода выжато все, что можно. Боттлнеки переписаны на асме, все параллельные вычисления идут на всех доступных ядрах и обмазаны векторными инструкциями, окружение ОС пропатчено, чтобы дать несколько лишних микросекунд на блок... Какой нахуй алгоритм, он был оптимизирован так давно, что ты успел забыть об этом. Ты дрочишь профайлер, пытаешься ублажить бранч предиктор перестановкой джампов, колдуешь над кэшем, но все равно твои данные обсчитываются два дня, а генерятся за день, и приходится покупать новое железо за сотни денег. Но тут приходит функциональный петух, который копирует массив при каждом добавлении элемента, и говорит, что важен только алгоритм.
>>1395940Заведи хачкель на android, а я посмотрю. Ах да, можно же сделать порт, кококо попенсорс. Отлично, вместо своей работы я буду заниматься разбором кода какого-то борщехлеба. Так вот, это нихуя не кроссплатформенность. Кроссплатформенность это когда я могу за полчаса настроить все окружение по гайду и запустить код с минимальными изменениями. В Java/Python/C это есть.
>>1395951И ты еще меня обвиняешь в проблемах с логикой. Еще раз: есть быстрые языки, есть простые языки, есть языки с хорошим комьюнити и множеством либ. Ингода несколько пунктов объединяются в одном языке. А иногда ни одного, как во всех функциональных.
>>1396095>Это то, как думает человек в повседневности.Нет, это не так. Ты не соображаешь в этом ничего. Человек привык к декларативности. Говоришь ему вычисли корень из числа, и он все понимает и делает. А процессор такого не понимает. Ему нужны инструкции, возьми число, положи в регистр, сделай с ним что то, переложи в другой регистр, и так далее. Тупые инструкции. Так люди не мыслят. Если ты так мыслишь, то у тебя сломанный мозг. Математику изучай лучше.
>>1396095>Это то, как хранятся любые данные в физическом мире.Чиво? Что ты написал вообще. Как данные связаны с императивными инструкциями? Я же говорю что ты не в теме вообще. Это сразу видно.
>>1395950Ты можешь высрать кучу говна и назвать всех, кто отказывается ее есть, неосиляторами. Но от этого говно не станет менее вонючим. Есть общепринятые критерии качества языка, и есть простой тест на их прохождение - количество юзеров. ФП его не проходит даже если все его языки считать одним целым.
>>1396095>лямбда-исчисление останется абстракцией для доказательства теоремПредставь себе все вокруг абстрация. И компьютер, и процессор, и внутри процессоры десятки, если не сотни и тысячи абстраций. Без абстракций его бы не смогли создать. Или он был бы одноразовым, потому что невозможно было бы его производить массово, изменять его архитектуру, и так далее.Математика это абстрация, Машина Тьюринга тоже абстрация, ассемблер это абстракция инструкций процессора, компилятор абстрация, языки высокогоуровня это абстрации, программы это абстрации, которые содержат другие абстрации.Так что вся твоя критика не стоит и выеденного яйца. Абстрации предназначены для решения задач. А ты называешь их проблемой. Это нонсенс. У тебя полное отсутствие абстрактного мышления, которое обязательно для инженера, программиста, математика.
>>1396114>Говоришь ему вычисли корень из числа, и он все понимает и делаетОбернул инструкцию в абстрагирующее имя и после этого инструкция перестает таковой являться - так что ли? "Ты не в теме" - это как минимум - признак профана, как правило - шарлатана.
>>1396114Ты лукавишь. Если ты вычисляешь корень из маленького числа, то ты просто вспомнишь его и ответишь сразу. Это мемоизация, которую хейтят в ФП за хранение состояния. Для большого числа ты будешь считать в столбик, это итерация. Декоаративности тут ее больше, чем в разделении на процедуры. И никто в здравом уме не будет считать корень рекурсивно, до этого даже додуматься сложно.
>>1396095>Ты серьезно считаешь нумералы Черча естественным способом представления чисел?Если что кодировки единственный способ представлять данные в виде других данных. Кодировки Чёрча один из способов, есть и другие. Чёрч с помощью нескольких символов придумал как реализовывать любые алгоритмы. С помощью его кодировки можно спокойно написать любой язык программирования, потом написать его компилятор на нем же самом. И никто не будет знать, что примитивы реализовано с помощью кодировки Чёрча. Абстрации для того и нужны, чтобы скрывать не важное. Программисту не нужно знать как реализованы примитивы в языке, это нужно только тому кто пишет языки.
>>1396095>ФПшник это папуас, строящий аэродром из веток, увидев пролетающий авиалайнер.По моему ты просто обиженный тролль. Никто в промышленном коде не использует кодировки Чёрча, нет таких требований. Хотя может и используют. Их используют для реализации языков программирования, для обучения, потому что это хороший пример грамотных абстракций. В ФП языках есть такие высокоуровневые абстрации, которых нет в императивных языках. Хватит писать ерунду.
>>1396079>Если в Си писать в стиле ФП, то да.OCaml, ML, Лиспы, - они на уровне Си, некоторые алгоритмы на них даже быстрее чем на Си работают. Снова пишут для особо одаренного, что хороший программист на JS напишет программу быстрее чем твоя на Си, потому что ты даже не представляешь как писать правильные алгоритмы, и как писать эффективный код.>>1396079>ФП не предназначен для современных компьютеров.Школьник, хватит писать ерунду. Ты вообще не понимаешь о чем рассуждаешь. Компилятор Хаскеля позволяет реализовывать то, что на императивных языках написать невозможно. Он быстрее большинства императивных языков. И тут ты такой пришел и начинаешь твердить что ФП языки не подходят. Ты смешон.
>>1396115Если ты в функциональном угаре забыл, что такое машина Тьюринга, то напомню, что ее основной частью яаляется лента с данными. Это естественное представление данных как последовательности однородных элементов - букв или цифр на бумаге, звуков в речи, байтов на блине диска. А в чистом лямбда-исчислении данные это избыточные и неудобные конструкции из фактически элементов кода, костыли, появившиеся от недостатка выразительности аксиоматики. Как жесты в языке глухонемых. Здоровый человек может передавать даннын непосредственно руками, но ему удобнее написать их на бумажке. А инвалид вынужден использовать жесты, как лямбдодрочер вынужден использовать нумералы. И да, нумералы придумал Витгенштейн, а гомосек не может изобрести ничего хорошего.
>>1396079>Выделение памяти, явно избыточное порождение новых кусков данных целиком, даже если они вовсе не изменились в результате выполнения функции - всё это ОЧЕНЬ дорогие операции.Чиво? Откуда тебе знать что дорого, а что нет, ты же не знаешь даже как программы исполняются. Хватит писать свои выдумки.
>>1396122Только в твоем манямирке не нужно. Почитай Джоэля Спольски про протекаюшие абстракции. Когда петух вроде тебя юзает реальный инструмент так, как будто он идеальный, то получается катастрофа. Хороший программист не тот, кто умеет абстрагироваться, а тот, кто умеет не всегда абстрагироваться.
>>1396123А в императивных языках есть важная абстракция, которая называется "состояние". В реальной жизни тоже она есть, а в ФП внезапно либо ее нет, либо ее стремятся уничтожить. И чья парадигма сосет?
>>1396079>За последние полвека скорость вычислений ЦП увеличилась в миллион раз.Доказать сможешь? Скорость вычислений зависит не только от процессора, но и от эффективности алгоритмов. Предположим язык медленнее чем Си в 4 раза, можно написать алгоритм, который будет эффективней в 10 000 раз, и он будет проще, не нужно ручное управления памятью (в Си утечки памяти всегда), намног сложнее допустить ошибку, код пишется быстрее в 10 раз. Итого пока ты будешь дрочить на свой Си, другой программист напишет на Окамле в 2 раза быстее, и код не будет медленнее, а если даже будет на немного, то это можно будет нивелировать купив за несколько баксов еще один виртуальный сервер.Твои тексты выглядят смешно, вообще не в тему. Изучи тему лучше. Чтобы не писать ерунду.
>>1396128>Снова пишут для особо одаренногоТы лучше ответь на пост про производительность выше, а не повторяй свой аутотренинг.
>>1396141Напиши мне алгоритм, который отсортирует массив из миллиона элементов быстрее, чем за пятьсот тысяч сравнений, лол. Между тем алгоритм, который сделает это в 10000 раз медленнее тебе даже школьник напишет.
>>1396109>Математика с последней победы Путина стала априорным знанием? Или по какой причине логика одного языка (математического) выставляется более очевидной, чем логика другого языка (вычисления)?Что это?>>1396110Петух тут только один. И он кукарекает что люди мыслят как процессор. Ты же никогда не напишешь код, который уже нельзя оптимизировать. Это как ты выразился, только в твоем манямирке существует. Умник, даже компилятор Си до сих пор успешно оптимизируют, ему сколько там уже 40, 50, 60 лет? А тут петух прибегает и кричит что все уже оптимизировал, и ФП языки теперь у него боттлнек. Иди кукарекай в другом месте.
>>1396152>Ты же никогда не напишешь код, который уже нельзя оптимизировать.Ох уж эти проекции умственно неполноценного говнокодера.
>>1396112Нахрен мне нужно это поделие андроид. Андроид это худшее что я видел из ОС. Если надо будет, то настрою. И чего вдруг сразу Хаскел. Мне нравятся другие языки. Питухон же медленный, боттлнек ёпта. Или императивные языки не становятся боттлнеком даже если медленнее хаскеля в 10 раз?
>>1396113>ще раз: есть быстрые языки, есть простые языки, есть языки с хорошим комьюнити и множеством либ.Неужели, а то я не знал. ФП языки и простые, и быстрые, и с множеством либ, и с хорошим комьюнити. Нет в ФП компьюнити таких желчных пустословов как ты.
>>1396152Какой компилятор-то? Если gcc, то неудивительно, учитывая, что у его мейнтейнеров много общего с борщехлебами, хотя язык другой.А тот же icc оптимизируют только под новое железо, там много лет уже выжато все что можно из процесоора. И такое в куче предметных областей - тот же TCP стек nix, например, не меняетя десятилетиями, скажешь, производительность интернета это не важно?Но с точки зрения петуха-прикладника, безусловно, можно пилить свои тормозящие абстрактные проекты и не бояться, что пекарня не запустится из-за переполнения стека. Ротому что, слава богу, пока ОС и прошивки пишут на нормальных языках.
>>1396156Хорошо, ты не любишь андроид. У тебя же есть мобильный телефон? Запусти хаскелль на своем телефоне. За месяц справишься, убогий?
>>1396117>Есть общепринятые критерии качества языка, и есть простой тест на их прохождение - количество юзеров.И снова ты не прав. Где много юзеров, там много новичков, дебилов, неосиляторов, троллей, и прочего сброда. Мало юзеров потому что только профессионалы. На ФП языках пишут люди с большим опытом, 5-10-20 лет программирования, они знают несколько языков, наелись дерьма с императивщиной, с ООП головного мозга, все это дерьмо видели изнутри. Поэтому их мало. Профи всегда мало. А что на питоне, на Си, на джаве, - школота, все кому не лень, вон весь двач этим забит, все форумы в интернете. Диллетанты 95%.Так что твой критерий не работает. Как в прочем все твои абсурдные теории.
Эх, давно я в зекаче не бывал, это полыхание борщехлеба как бальзам на душу. Оставьте мне его на утро посраться, посоны, а то ж не выдержит и порвется от таких страстей.
>>1396119>Обернул инструкцию в абстрагирующее имя и после этого инструкция перестает таковой являться - так что ли? Поздравляю, до тебя наконец дошло. Когда ты записываешь памятку что нужно сходить к врачу, ты не пишешь нужно выйти на улицу, сесть в машину/автобус/метро, доехать до такой то улицы, там пройти туда то, в больнице подняться на такой то этаж, и так далее. Ты пишешь просто сходить к такому то врачу, или даже просто сходить в больницу. Это декларативная записать. Она говорить что делать, а не как. ФП языки как и математика используют такой же принцип.
>>1396120>Ты лукавишь. Если ты вычисляешь корень из маленького числа, то ты просто вспомнишь его и ответишь сразу.Нет, я просто посмотрю ответ, или вычислю на калькуляторе. Но это показывает то, что люди используют в основном только декларативные знания. Человеку не нужно говорить возьми калькулятор, или напиши алгоритм вычисления корня, ему говоришь что, а не как. А процессору нужно говорить как это делать. Он не понимает декларативных знаний. Для того чтобы понимал придумали высокоуровневые языки.
>>1396120>Это мемоизация, которую хейтят в ФП за хранение состояния. Для большого числа ты будешь считать в столбик, это итерация. Декоаративности тут ее больше, чем в разделении на процедуры. И никто в здравом уме не будет считать корень рекурсивно, до этого даже додуматься сложно.Ты даже не осознаешь что несешь. Никто из людей не задумывается как вычисляется корень. Они не думают этими инструкциями. А ведь есть алгоритмы для этого. Просто так вычисление корня не рождается, нужно его найти. Они не задумываются над алгоритмом потому что мыслят декларативно. Чтобы мыслить императивно (инструкциями) нужно держать в голове их состояние. Так никто не делает. Все математические вычисления происходят декларативно. Подставил значения в формулу и все. Не нужны инструкции как при вычислении на процессоре.
>>1396175Твой пример с калькулятором очень показателен. ФПшник без либ и окружения с быстрыми императивными языками под капотом превращается в долбоеба, не умеющего в столбик, когда нет калькулятора. Ты можешь хуесосить императивщиков, но соль в том, что даже целая школа альтернативно одаренных сосницких не заменит один калькулятор.
>>1396130Ты невменяемый. Я почти сразу сделал вывод, что у тебя нет способностей к математике, к инженерии, нет абстрактного и алгоритмического мышления. Угловатое мышление. Может ты тролль конечно, это было бы лучше для тебя. Потому что если действительно так рассуждаешь, то мне тебя жаль.Счастливо оставаться наедине со своим невежеством. Больше отвечать на твои посты не хочется.
>>1396195Ты так подробно рассказал обо мне, давай я теперь опишу тебя. Ты студент технического вуза второго пошиба. Учишься на втором или третьем курсе, на прикладной или вычислительной математике. У вас есть залетный препод с кафедры матлогики, он рассказывает охуительные истории о лямбда-исчислении и теории категорий, а ты смотришь ему в рот и мечтаешь быть таким как он. Ты считаешь одногруппников ограниченными и бездарными, хотя сам даже не лучший в потоке. Ты презираешь их за то, что они уже зарабатывают деньги решением приземленных задач, но сам зарабатывал пока только репетиторством. Тебя считают странным. На твоем гитхабе форки чужих проектов без единого изменения, плюс несколько твоих лаб. Ты на полном серьезе считаешь, что идеализм приведет тебя к величию. Ты часто возмущен тем, что мир не такой, каким должен быть, но ничего не делаешь для его изменения. В глубине души ты понимаешь, что ты ничтожество, и поэтому так болезненно воспринимаешь эту дискуссию.
inb4 да чё ты там проектировать собрался, норм пацаны поддерживают, правят и расширяют существующую кодовую базу с говнохитектурой по госту наебизнеса, ты так только к хорошей структуре программ привыкнешь и коллегам по работе будешь качеством совместно высираемого продукта мозги морочить вместо того, чтобы работать; нахуй это сдалось ни им, ни начальнику, ни, в конечном итоге, тебе
>>1394519 (OP)> каких-то советов, напутствий, предостереженийВсе равно переделывать будешь. Хоть зарисуйся схемами и диаграммами.
>>1396329Архитектура модуля - это внутри модуля структуры данных и методы классов (все, кроме private). Архитектура программы - то же, но на уровне модулей.
>>1396341Где это написано? Что структуры данных? Ну есть структуры данных, где архитектура, что это такое?
закину дядю бобакак по мне, местами оче даже ничегоначинать с интерфейсов и других абстракций - хорошая идея. откладывай конкретные реализации как можно дольше и не забывай про тесты
>>1396341>методы классов (все, кроме private)Очередное ООП головного мозга что ли? Я пишу на языке без классов.
>>1396362>Поставил тебе класс чтобы ты мог писать с классами. Нет уж спасибо, сам пиши на классах. Писать на языке с классами это как красить траву в армии. Я такими извращениями не занимаюсь.
>>1396370Классы != наследование, полиморфизм, виртуальные деструкторы и прочая педерастия.Структура - это хороший и достаточный класс.Еще нормальные дженерики которые везде говно и нигде не нормальны - и будет норм язык.
>>1396350Для тебя ещё не забаненный хаскеллепетух можешь использовать функции, процедуры или что-там у тебя. Суть не поменяется.
>>1396347>>1396530Говно нелепое. Аргумент - достаточно сравнить ПЛОХОЙ и ХОРОШИЙ код и убедиться что ПЛОХОЙ код гораздо понятнее и вообще лучше по всем статьям.
>>1396570>достаточно сравнить ПЛОХОЙ и ХОРОШИЙ код и убедиться что ПЛОХОЙ код гораздо понятнее и вообще лучше по всем статьямЧиво? Для начала расскажи что в твоем понимании плохой и хороший код, а также что в твоем понимании понятный код. Кто сказал что понятный для тебя код будет понятным для других? Может ты диллетант, для которого только говнокод понятный.
>>1396574>>1396595Бля, дауничи, в смысле примеры кода которые приводятся в книге.>Может ты диллетант, для которого только говнокод понятный. Может ты внушаемый ебанашка для которого понятнее говнокод разосранный в стиле ебанашки Боба. Вот только когда нужно в нем разобраться и слегка поменять начинают подкашиваться коленки и от каждого изменения внезапно все идет по пизде.Слова мудрости от иностранных коллег:No, I realize that's what Uncle Bob wants you to think, and at one point when I was naive and inexperienced I thought he was right. With experience comes understanding that this approach is just fundamentally wrong and harmful. It's snakeoil. SOLID and those kinds of things makes your code much worse, in the vast majority of cases.Uncle Bob and his ilk are snakeoil salesmen telling you to code in ways that causes 10 lines of scaffolding for every line of code that actually does something. Worse, this scaffolding gets in the way of actually modifying the code you care about. You can't just make something work differently anymore because you already split it up into forty different classes and the new behavior you want doesn't fit into that model of the world, so now a simple change becomes a huge refactor of the entire codebase (into another forty classes that will be just as unsuitable a year from now).In retrospect, now that I'm wiser, it makes perfect sense that this approach is idiotic. Why would you start by introducing barriers and restrictions ("split things into nouns and verbs") at the moment in time when you are the most ignorant about how your program should work (in the beginning). Clearly the smart approach is to keep things simple and avoid any abstraction or architecture that isn't provably necessary. That keeps your options open so that you don't have to embark on a massive adventure just to make some minor changes.The only way to win this game is to not play. Architecture can't harm you if it's not there. Just don't put that kind of crap in there unless you absolutely have to. This happens sometimes, you really do need abstractions, but the big lie of OOP is that you should start by introducing them right from the get go, when you have no clue about what they will actually need to do.EDIT: BTW, you may want to watch this: https://www.youtube.com/watch?v=IRTfhkiAqPw for a few easy-to-digest examples of why the OOP style just sucks. This is even more true for bigger examples, but it's understandable that the examples are going to have to be small.NB Видео просто огонь must watch для каждой малолетней внушаемой ебанашки. Ух как у solid-блядей то от него печет, как в котле у сотоны.
>>1396652Кстати, ЛП легко выразимо средствами ФП (про это вся глава 4.4 в SICP), а вот обратно - хуй там плавал.
>>1396630Лоу приорити, режим в доте 2, в котором ты долбжен сделать 3 победы, если плохо себя вёл в нормальном матчмейкинге.
>>1396661Кстати, насчёт игор - пример говнокода, может, известный, ноhttps://github.com/raxod502/TerrariaClonehttps://github.com/raxod502/TerrariaClone/issues/2 а ведь всё равно в продакшине! Покайтесь и начните блять уже пилить свою говногодноту, ленивые вы тупые уёбки.
Может, ты не знаешь, что такое хорошая архитектура кода, анон, но бгмеозкость плохой архитектуры это не отменяет.
>>1396665> Note that it uses if without else or return, drastically slowing it downНо где же тогда замеры подтверждающие это? Вангую что заявление высосано из хуя, как и все остальные измышления об архитектуре-архитектурке.
>>1394519 (OP)Очень интересный вопрос, задал ты. Я сам про это думал. У меня есть следующие мысли.Во-первых, сразу всю архитектуру изначально создать не выйдет. Она, на самом деле, продукт эволюции.Архитектура ПО - это результат того, что сводятся концы с концами. С одной стороны - наши возможности.Т.е. сами базовые алгоритмы, опорные винтики, которые делают всю работу. А с другой стороны - потребности пользователя.В смысле - тех людей (возможно программистов), которые будут использовать этот код. Им надо, чтобы всё было бы аккуратно, понятно, удобно, и прочее.Я обычно создаю ПО итеративным способом. Сначала начинаю с этих вот опорных винтиков. Пишу их код, что они делают над кое-какими нашими предметами, над которыми идёт работа. При этом, я не думаю насчёт всех этих винтиков сразу. Просто некий кусочек функциональности. И при этом, держу в голове, представляю умозрительно те вещи, с которыми придётся иметь дело. Я могу при этом ошибаться.Вот. Затем, получив кусочек функциональности, я как-то оформляю его архитектурно.Затем, я беру ещё один кусочек функциональности, реализую его. Тоже архитектурно оформляю.И вот, начиная с нижестоящих кусочков, образуется архитектура. Я над ней тоже начинаю думать.И соображения на том уровне, могут привести к изменению в составе кусочков, например.В общем, всё сначала идёт снизу, потом высокоуровневые архитектурные размышления, потом опять обратная связь вниз, и так далее. Итерации за итерациями.Ещё впридачу, я отделяю самые существенные вопросы (которые больше всех значат, и играют роль) от второстепенных. Я прорабатываю в первую очередь эти существенные вопросы.
>>1394519 (OP)Нужна помощь в понимании темы диплома, которая звучит следующим образом : " ПО для автоматизации процесса доступа к информации через web-сайт для ЧП "Карасик" ". Ткните, хотя бы в какую сторону смотреть.
>>1400255Так проблема не в построении хоть какой-то архитектуры или вылизывании путем многократного переписывания, а в том, как проектировать изначально эффективно, чтобы как можно больше кода написать с первого раза.
>>1395942Я хз что они тут несут. Пхп сейчас активно яву впитывает - её подходы и решения. Такое не скажешь про язык, который на одном легаси живёт.
>>1400287А это нереально, порой.Ну можно как-то сконструировать архитектуру изначально, но всё равно обычно модифицировать приходится.Да и версии софта не случайно существуют. Тут как раз торчат уши итеративной природы разработки софта. Впрочем, у нас итеративно не только софт развивается. Буквально всё вокруг улучшается таким образом. Техника, автомобили, авиация, корабли, здания, технологии. Везде сначала создается простая версия продукта, а потом, по опыту эксплуатации, и с появлением новых технологий, она перерабатывается в новую, улучшенную версию.
>>1401621Грамотная архитектура способствует легкости модифицирования.При кривой архитектуре проще переписать заново, чем допиливать то, что есть.
Я начинаю писать код на ООП языке в функциональном стиле, чтобы было самому понятно, чтобы всё было проще и короче для начала. Объекты и структуры используются только для группирования данных. Получается очень простой и лаконичный код, в котором даже дауну понятно, что и зачем делается.Затем, когда я убеждаюсь в работоспособности кода, я, чтобы всё, было как у людей, переписываю всё в стиле ООП, распихивая функции в методы классов, привязывая операции с данными к тому классу, который их содержит. И получается трёхкратно раздутая лапша.Это у всех так или я просто не умею в ООП?
>>1394519 (OP)Начни с декомпозиции задачи на подзадачи.Когда сделаешь это, решай все остальное.Ты начал не с того конца.
>>1406439Это работает на простых учебных примерах. В реальных нестандартизованных задачах, когда у тебя в изначальной постановке всё со всем связано, всё от всего зависит, ты хер с наскоку разберёшь, что как делить. По сущностям? По функционалу? Делать ли объекты типа среда, контекст, интерактор? Делать ли евенты для классов? Делать ли супер-объекты?
>>1406480>Это работает на простых учебных примерах.Это ты мне с моими 20-ю годами профессионального опыта рассказываешь? Спасибо, учту.>В реальных нестандартизованных задачах, когда у тебя в изначальной постановке всё со всем связано, всё от всего зависит, ты хер с наскоку разберёшь, что как делить.Поэтому большие пацаны не пытаются разбираться с наскоку. Поэтому большим пацанам платят деньги, что они по 8 часов в день планормено решают реальные задачи.>Делать ли объекты типа среда, контекст, интерактор? Делать ли евенты для классов? Делать ли супер-объекты?Тебе говорят - разбей задачи на минимально разумные, тебе какие-то ивенты для классов мерещатся.Это уровень быдлокодера - когда руки чешутся начать писать код.
Пусть есть форма, с которой связаны данные. Класс данных может обновить состояние формы. Класс формы может обновить состояние класса данных. При этом данные не статичны и могут меняться не только этой формой.Как правильно это реализовать?Вариант 1Класс формы имеет метод void Update(DataKeeper данные), в котором меняет данные данные.Класс данных имеет такой же метод void Update(Form форма), который может менять данные формы.Вроде так плохо, потому что лучше пусть только сам класс может менять свои данные.Вариант 2Класс данных имеет метод, скажем, void BeUpdatedFrom(Form форма), в котором он по данным формы меняет себя. Аналогичный метод имеет форма: void BeUpdatedFrom(DataKeeper данные).Вроде логично, но многословно, и я такого никогда не видел.Вариант 3Аналогичен варианту 1, но метод класса формы Update(DataKeeper данные) меняет состояние формы. Хотя формально из названия метода вроде как ожидаешь другого. Короче хер поймёшь кто кого меняет. Может они оба друг друга меняют.Как правильно это делается в каноническом ООП? надеюсь, что костыль в виде аж третьего класса посредника (типа Controller, Environment и т.п.) не будет правильным ответом
>>1415012>При этом данные не статичны и могут меняться не только этой формой.А кем еще?Почему ты вообще думаешь в терминах формы и класса данных?
>>1415022>Почему ты вообще думаешь в терминах формы и класса данных?Просто пример, при реализации которого в очередной раз задался этим вопросом. Показалось так понятнее объяснить, вопрос на самом деле общего характера.>А кем еще?Не важно, другими программами, другими пользователями, самим пользователем через другой интерфейс (например, форма показывает список файлов в папке, но может их создавать и удалять, но это же можно делать и через проводник винды).
>>1415031>>А кем еще?>Не важноВажно.В первую очередь, ты должен отдавать себе отчет - а действительно ли они могут меняться?С какой стати, например, два юзера меняют одни и те же данные?И каков протокол сохранения тогда?Некоторые, например, лочат данные, которые один взял менять.В общем, я поэтому и спросил - почему про эту задачу ты думаешь в терминах формы и какого-то там класса.Сперва реши, каковы правила работы с данными. Пока, вижу, у тебя с этим проблемы.Говорю совершенно без подъебки
>>1415041Ок, формы - не удачный пример. Задам вопрос иначе.Вот есть какой-нибудь симурятор. В нём есть объект автомобиль и объект автозаправка. Автомобиль может заправляться на заправке. Заправка может заправлять автомобили. Количество топлива на заправке при этом снижается, а в авто увеличивается. Как это реализовать.Вариант 1.gasStation.Fuel(Car car) - метод уменьшает количество топлива на заправке И увеличивает в авто.Вариант 2.car.Fuel(GasStation gasStation) или car.BeFueled(GasStationgasStation)- метод уменьшает количество топлива на заправке И увеличивает в авто.Вариант 3.environment.ProcessRefueling(GasStation source, Car destination).
>>1415257>Папка.NameЭто сумбур из разных языков.Вместо вливания в единое комьюнити программистов на устоявшихся мировых концепциях языков, образуем узкое беспомощное сообщество.
>>1415284>пукВ прошлом году разговаривал с один типом из фирмы и говорит у них есть отдела который обслуживает европу. Конечно по деньгам выйгрвают, то и их тяжело сменить из-за синтаксиса языка.Да и делалось это для того чтобы любого васяна можно было усадить за программирование
>>1415292>любого васяна можно было усадить за программирование100 непрофильных вкатывальщиков-джуниоров не заменят даже одного мидла. А возиться с этим зоопарком программирующих МарьяПетровн - себе дороже.Любое программирование васянами - убыточно, не эффективно и вредит делу.Я пробовал у себя на работе мотивировать сотрудников писать код, хоть на вба, хоть на питоне, хоть на шарпе. Всё объяснял и показывал. Посылал на курсы, давал время на самообучение. Показывал, как то, что они делали две недели, можно сделать за 1 час кодинга и 1 сек запуска макроса. Сотрудники были разных возрастных групп, все с техническим ВО, есть кандидаты наук. У меня в подчинении была дюжина таких потенциальных программистов. Длилась активная фаза эпопеи больше года.По факту - тотальный неуспех. Либо просто нежелание, отсутствие веры в успех. Смирение с невозможностью обучиться новому. Дело даже не только в программирование, которое наверное и правда сложно. Вот ты показываешь битый час статистические функции в екселе, просишь человека свести и проанализировать табличные данные. У него даже получается всё на тестовых примерах. Даёшь реальную задачу, смотришь иногда в его экран. Он для вида попытается. А потом продолжает, как раньше фильтрами выделять и выписывать данные. И это 35 лет мужику. А что говорить про 40+ тетенек? Были люди, которые очень увлеклись программированием, очень старались, но не получалось. Топчатся на уровне хелловорд++ уже третий год, всё время пытаясь. Скачут с языка на язык. Вот даже мини игру по туториалу закодили. Но в работе всё равно применить не способны. Бывает, у человека что-то получается, есть способности, и ему начинается казаться, что он уже программист. Как результат, задача, которая руками решается день, у него оказывается не выполнена и через две недели, при этом он сидит на работе каждый день по 12-14 часов, даже дома что-то программирует, не сдаётся, а толку нет. Если у человека что-то однажды успешно получилось, он окрыляетсыя, и начинает пытаться написать универсальное решение, которое само будет решать производственные задачи в самом общем виде. Были и случаи лютого говнокода на вба, который был написан настолько непотимально, что считался раза в два дольше, чем выполнение задачи руками.Каждый должен заниматься своим делом, делать то, что умеешь и хорошо получается.
>>1415322> все с техническим ВО, есть кандидаты наукНу что ты хотел от людей которые в вуз идут только потому что так мама сказала?
>>1415322>Даёшь реальную задачу, смотришь иногда в его экран. Он для вида попытается. А потом продолжает, как раньше фильтрами выделять и выписывать данные.правильно делает, все потому, что он понимает, что истина тут>Бывает, у человека что-то получается, есть способности, и ему начинается казаться, что он уже программист. Как результат, задача, которая руками решается день, у него оказывается не выполнена и через две неделиа не тут>Показывал, как то, что они делали две недели, можно сделать за 1 час кодинга и 1 сек запуска макросапотому что это не 1 час кодинга, а много сотен часов обучения и практики, после которых следует этот час кодингаесли это не их специальность им проще даже не пытаться вникать в эту байду а сделать ручками