[personal profile] bowhill
По мотивам двух тем. Недавно был интересный разговор о том, нужно ли обучать С и C++.1 В программировании С обучать нужно, а С++ — нет. Более того, именно в обучении С++ будет просто вреден. И при необходимости человек должен учить его сам, уже хорошо разбираясь в методиках и проблематике. Потому что программирование — это инженерная дисциплина.

В нашей практике C и C++ часто идут через слеш, в то время как это очень разные языки. И примерно с тем же смыслом можно писать через слеш С и 1С. Некоторые люди называют С переносимым ассемблером. Возможно и есть где-то такие ассемблеры, в которых размер данных не определён, однако нормой это всё же не является.

С — это минималистический язык. И это не просто учебный инструмент, а практический. Что в нём есть? Структуры управления, функции, арифметика указателей (указатели, массивы, структуры), есть небольшой набор базовых типов. И всё. В С нет не только операторов ввода/вывода, которые есть в Фортране и Бейсике, не только строк, не только файлов, но и работы с динамической памятью. Это те части, которые реализуются не в языке, а другими средствами, в другом месте и уровне — во фреймворках ( библиотеках). Которые могут быть в стандартах, но не в языке.

И здесь необходимо вернуться к тому, что программирование — инженерная дисциплина. Конечно, это занятие и для одного человека состоит из множества внутренних ролей: разработчик, кодер, тестировщик, аналитик и других. Но эти роли различаются не только функциональностью. Кодер ещё может быть землекопом, а разработчик уже должен быть инженером. А для инженера принципиально понимать методологию этого занятия. Инженер сопоставляет, систематизирует и интегрирует разные элементы, ему важно понимать не только как, не только чем, но и где именно что делается. В каком месте системы надо что-то делать, а в каком — нет. Понимание и построение оптимальной и сбалансированной системы разнородных элементов — одна из принципиальных частей мастерства инженера. И всему этому надо учиться, не только эпюрам и языку изложения.

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

B если посмотреть на C++, то это и будет такое зрелище, помимо фундаментальных проблем ООП.2 По принципам известного стихотворения Барто: «драмкружок, кружок по фото, хоркружок — мне петь охота, за кружок по рисованью, тоже все голосовали». То есть тащим всё, до чего дотянулись руки и фантазия.

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

Можно сказать, что люди вроде Страуструпа или Столлмана не имеют инженерной культуры, то есть являются по сути совхозными изобретателями-рационализаторами, при этом, в отличие от знаменитого Полесова — вполне трудолюбивыми. Но результаты такого постмодерна не только в том, что серьёзный темп индустрии был потерян и рассеян, но и культура была утрачена. Одна из главных задач С++ и других современных техник — чтобы любой неграмотный землекоп мог заниматься программированием, т.е. решение кадровой проблемы. Но, к сожалению, землекоп и решения строит на своём уровне, не растёт в инженера. А именно для этого требуется обучение.

---
1. «Много ли ученику языков программирования надо?» https://beldmit.dreamwidth.org/924021.html (2020.09.06)
2. «Модифицированная задача Кая или пара слов об ООП» https://bowhill.dreamwidth.org/196149.html (2016.10.09)

Date: 2020-09-15 02:00 am (UTC)
From: [personal profile] a2is
Страуструп - шизофреник.

Тексты на C++ очень трудно читаются. Видишь одно - а там на самом деле совсем другое.

Profile

Max Mikheenkov

March 2026

S M T W T F S
1 234567
89 1011121314
15161718192021
22232425262728
293031    

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 13th, 2026 01:01 pm
Powered by Dreamwidth Studios