@strizhechenko @cauf Ну как бы то есть вот. Я к тому, что как можно учить некое «программирование» по абстрактным описаниям, когда для каждого языка есть свои фишки, принципиально различающиеся прям в самих основах?

Перефразирую: если я хочу таки въехать в Python — что мне даст описание низкоуровневых циклов, когда в нём всё объекты?

@𝕵𝖔𝖍𝖆𝖓 ⛧ нету такого, о чём ты говоришь.
языки программирования заложники парадигм с идиомами, примитивы и абстракции которых реализуют немного различным образом, но все языки вынуждены с этим мириться и быть зажатыми в эти рамки.

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

для любителей особых изысков есть парадигма декларативного программирования или функционального — там чутка другой набор считается минимально необходимым языку и слегка иные наборы обозначены как дополнительные.

но в рамках императивной модели — хоть усрись, но основные базисные вещи должны быть, не важно натянул ли ты поверх них потом возможность объектно-ориентированного программирования или же нет. с автоматической моделью управления памятью или же с ручной. компилируемый ли у тебя язык или же нет.
аналогично похеру какой стиль ООП выбран был основным для языка: обычный или же прототипный.

все языки программирования заложники неких идиом с парадигмами программирования и всего лишь реализуют некоторые части таковых (многие из которых взаимозависимы). никакой язык ничего нового не изобрёл и не ввёл — усё возможные варианты отресёчены давным-давно и описаны во множестве работ.
Follow

@erua Расписано, как всегда, шикарно, это да 🙂

Но я не совсем понял — чего конкретно «нету такого»?

Я как бы к тому, что вот эти все «условия и циклы» по идее изучаются в подростковом возрасте за неделю-другую. Тогда как «программирование» — это уже их конкретная реализация для языка и операционки, с учетом особенностей особенностей (sic!).

Разве не так? Спросить у сервера json с постами — 4 строчки; ебаться с красивой отрисовкой наших постов — пару месяцев работы и 100 мегабайт кода (утрирую, конечно).

@𝕵𝖔𝖍𝖆𝖓 ⛧
Там должна быть видна ссылка на какой из твоих «туутов» реагировал/отвечал.
Вот ты пишешь, что типа:

> как можно учить некое «программирование» по абстрактным описаниям, когда для каждого языка есть свои фишки, принципиально различающиеся прям в самих основах?


В каких таких основах отличающиеся? Вот про основы лежащие в каждом языке тебе и ответил.

> Перефразирую: если я хочу таки въехать в Python — что мне даст описание низкоуровневых циклов, когда в нём всё объекты?


А что эти объекты делают и для чего существуют? Утрировано, объекты — это экземпляры классов, а классы существуют нескольких типов (видов) используемых для различного назначения. Но ведь они должны что-то и как-то делать — сами по себе без циклов и ветвлений, волшебных образом?

Ну и т.д. и т.п.

@erua
> Но ведь они должны что-то и как-то делать — сами по себе без циклов и ветвлений, волшебных образом?

Вроде да. Сокрытие реализации, все дела. И только по тестам можно понять, что будет быстрее, меньше памяти сожрет и т.д. Разве нет?

Я как бы не спорю, что такие понятия как циклы, условия, рекурсию и прочее — надо понимать, но ведь это что-то совсем дефолтное из школьной программы либо совсем хардкорное, если речь об алгоритмах.

Но алгоритмы ботанить надо вроде уже после того, как все фишки конкретного языка усвоишь и будешь знать, как правильно выстрелить себе в ногу??

@𝕵𝖔𝖍𝖆𝖓 ⛧ есть такая вещь, как Computer Science — именно в ней изучается вопрос алгоритмов и структур данных. а всякие парадигмы с идиомами программирования идут тоже как часть Computer Science, в рамках таковой идут и языки программирования.
но при этом классические алгоритмы и структуры данных никак не зависят от языков программирования и парадигм с идиомами программирования.
да, есть специфика и своебразность алгоритмов и структур данных в функциональном программировании, но это пока отдельная сфера академическо-эксперементальной группы вещей. не имеющей прикладного назначения и профессионального использования в промышленных или массовых программных системах.
@𝕵𝖔𝖍𝖆𝖓 ⛧ язык программирования изучается как средство реализации алгоритмов и оперирования определёнными структурами данных.
условно, во всех языках программирования сами по себе структуры данных одинаковые. уникальных структур данных у языков нет, равно как и нет каких-то уникальных алгоритмов. различаются только подходы к тому, как эти самые структуры данных или алгоритмы могут реализовываться средствами конкретного языка программирования.

потому что хеш-таблицы или двоичные деревья, очереди и стэки или списки — они везде одни и те же.
стандартные библиотеки разных языков могут предоставлять различные подвиды или типы этих стандартных структур данных, но разработка софта редко ограничивается использованием лишь стандартной библиотеки языка. и если в ней нет какого-то вида бинарных деревьев или какого-то типа хеш-таблиц, то это не значит, что нет других библиотек реализующих эти виды/типы структур средствами данного языка.

когда человек учится программировать в плане разработки софта/программ, то обучение сводится именно к умению оперировать алгоритмами и структурами данных. а с помощью какого языка программирования человек выполняет эти действия — реализует алгоритм или делает структуру данных — это уже вопрос определяющийся всего лишь факторами доступности и уместности.

есть проблематика задачи и аспекты предметной области из которой она. характер решения задачи в плане алгоритмов и структур данных определяется требованиям с ограничениями. неразрывно связанными с проблематикой и применимостью решения задачи в предметной области.

одно дело подобрать алгоритм для сортировки трёх колод по 52 карты и совсем другое отсортировать номера телефона из справочника жёлтые страницы крупного города. и дело не в том, что сравнивать телефонные номера между собой проще, чем одинаковые игральные карты различающиеся лишь мастью. количество элементов подлежащих упорядочиванию различается на несколько порядков. это одна из лабораторных работ у студентов — посмотреть как от числа элементов зависит скорость работы того или иного алгоритма сортировки. что в случае 52×3 можно выбрать почти любой алгоритм, а для справочника телефонных номеров с сотнями тысяч записей — уже хорошо видна разница между подходами к упорядочиванию.

@erua Дык, телефоны-то в БД будут валяться, и маленький Бобби Пейджс кагбэ намекает, что вся «сортировка» там — это что-то типа SELECT че-те-надо? ;-)

P.S. Ну и тупо sorted() в зеленом змии, конечно?

@𝕵𝖔𝖍𝖆𝖓 ⛧ т.е. когда тебе приходит Comma Separated Values (CSV) файл, то будет пихать в СУБД, чтобы отсортировать и потому выгружать оттуда в упорядоченном виде? :)

понимание того, как асимптотическая сложность алгоритмов сказывается при росте объёма данных и влияет на впечатление пользователя от UX/UI — это полезно.

иначе говоря, тебя никто не агитирует разбираться в самих алгоритмах — ковыряться в них. от тебя требуется уметь использовать — уметь в многокритериальный анализ, осуществлять выбор.

@erua Ну так ведь зеленый змей умеет это в виде results = [t.age for t in mylist if t.person_id == 10], практически одно и то же (в плане того, что в одну строчку и вся магия под капотом)? И сложность можно измерить только тестами?

@𝕵𝖔𝖍𝖆𝖓 ⛧ ту сложность, которая O(n), O(log n), O(n×log n), O(n²)? лишь тестами?
а на каких наборах? ну ведь у алгоритма с ожидаемым O(log n) бывают случаи, когда работает как O(n), а бывают и такие, когда O(n²) — так называемые худшие и лучшие.
у других алгоритмов стабильность другая, но в среднем они O(n×log n), зато нету худших случаев, т.е. не деградируют в зависимости от характера расположения чисел в сортируемом наборе (множестве).

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

@erua Ну епт. Я ж не погромист, в конце концов. Для меня логично — посчитать хеши для всех записей, типа неизбежная операция по чтению. Сравнивать хеши в зависимости от того, какя выборка нужна. Перепроверять по реальным данным найденное, чтобы не попасть на коллизии.

Но это как бы максимум, что я знаю про поиск по бд, даже если это CSV, который мы считали в структуру.

Если у меня 100500 15-мегабайтных файлов — это вроде хороший подход. Если 100500 номеров телефонов, которые надо бы привести изначально к стандартному формату — плохой.

Что будет делать Зеленый в случае, если я натравлю его на то или другое — я могу только догадываться.

ГДЕ мне тут поможет знание абстрактных алгоритмов, если я не в курсе, как он будет делать выборку??

@erua
О! Вот пример из реальной жизни. У меня есть каталог из 20 000 шрифтов. Названных черти как. Мне надо распарсить каждый, создать папочку с его названием (надо парсить файл), все варианты начертания — в одну папочку. Можно велосипедить на зеленом, можно штатными средствами венды на PowerShell. Сцуко, медленно и если ошибка, то хз, где и почему.

И знания, как писать алгоритнымы на ассемблере/в псевдокоде/на паскале тут вообще не помогут...

@𝕵𝖔𝖍𝖆𝖓 ⛧ так в подмену уходишь. тебе не говорят, что надо знать как писать алгоритмы на тех или иных языках.

говорилось о том, что надо знать как выбирать алгоритмы и структуры данных для использования. причём не важно где расположенные — в стандартной библиотеке конкретного языка или в широко распространенных сторонних библиотеках.

а описанная тобой задача одноразовая и всем пофигу отработает она за пять минут или же за два часа, то и к программированию с разработкой софта это никаким боком не относится — это автоматизация задач системного администрирования.

есть:
Колисниченко Д. — «Командная строка Linux и автоматизация рутинных задач»
Агравал А. — «Автоматизация предприятия с помощью Python»
и т.д. и т.п.

@erua
> Там должна быть видна ссылка на какой из твоих «туутов» реагировал/отвечал.

У меня ветка предела достигла 😉

Sign in to participate in the conversation
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.