Как стать автором
Обновить

Комментарии 171

Я компьютер изучал с бейсика и ассемблера. И концепция указателя самое понятное что есть в компьютере. Указатель -- это адрес в памяти. А по адресам записаны байтики. Компьютер же не может работать сразу непосредствнено с именованной переменной. Что тут непонятного?

Те, кто начинал с бейсика (без ассемблера и операторов peek/poke) или с современных языков с GC (тут ниже товарищ, кажется, жаждет,чтобы учили сразу с Питона) вполне могут этого и не знать. А так-то, конечно, ваше объяснение куда прозрачней того, что в статье)

Я начал с С++. Учил сам по какой-то случайной книжке издательства Питер. До этого из опыта программирования - калькулятор в консоли на Паскаль. Всё.

Так вот указатели я понял минут за 5. Я так и не понял нафига под них выделили целую главу. Это самая тупая вещь в истории, как она у кого-то вообще может вызывать проблемы?

Это вам так повезло, что вы указатели поняли минут за 5. У большинства студентов такой суперспособности нет.
  1. Всё лежит в памяти компьютера

  2. Память (для простоты) представляем как кучку пронумерованных ячеек

  3. Указатель хранит номер ячейки в которую нужно посмотреть, чтобы найти интересующие нас данные

  4. См. пункт 1 и понимаем, что указатель тоже лежит в памяти

  5. Соответственно указатель на указатель - хранит номер ячейки с другим указателем.

  6. Повторяем пункты 4 и 5 до нужного уровня вложенности указателей.

Как только эту простейшую схему объяснить, добавить в эту схему арифметику с указателями уже не составит труда.

Объяснить всякие тонкости с выравниванием, NULL, виртуальной и физической памятью, страничной адресацией и пр. и пр. за 5 минут не получится, но саму концепцию указателей буквально за 5 минут можно рассказать ведь)

Как только эту простейшую схему объяснить,

В этой схеме не хватает главного — зачем это надо, и что с этим делать.

С этим можно много чего делать) Но это всё никак не относится к самой концепции указателя.

Условно, указатель может указывать вообще не в память, а в пин микроконтроллера, который замаплен в память) Но это ваще никак не относится к указателю как концепции)

Когда не понимаешь зачем что-то надо, то мозг сопротивляется этой бесполезной, на данный момент, информации.
Если же начать с задачи/проблемы ("Нам надо найти в тысяче ячеек, расположенных подряд, определённое число. Как это сделать?"), то всё идёт гораздо легче.

Если же начать с задачи/проблемы ("Нам надо найти в тысяче ячеек, расположенных подряд, определённое число. Как это сделать?"), то всё идёт гораздо легче.

И вот эта явная задача на массив якобы даёт понимание указателей?

Если бы вы придумали свой вариант, то написали бы в своём комментарии, так?
Новичок знает массив, знает как формируется адрес для доступа к любому элементу. Так пусть теперь пробежится по массиву указателем как альтернатива.
Далее усложняем уже связанным списком, например.

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

Что тут непонятного?

Ничего непонятного в этом нет. Обычно, сложно понять что происходит в синтаксисе программы с ними. Особенно когда скобки в скобках, а ещё там-же берётся адрес и приведение типа… Мозг сломать можно с непривычки.

Наименование переменной в коде тоже своего рода указатель, только не в виде физического адреса. Alias, так сказать

За курсовые на Хабре теперь зачет дают или автомат сразу?

Почему? Нет, это наше желание.

А это уже не первый раз. Препод говорит, что если напишете пост на Хабре и он выйдет из песочницы — то будет какой-то зачет лабы или чего-то такого
Но тут, хотя бы, собственные мысли. А в тот раз была куча переводных статей и даже с одинаковыми КДПВ.

Как всегда, слышал звон… :-) Ситуации уже разобрали. Кстати, сейчас никаких сессий и зачетов не идёт, только семестр начался. И любая самостоятельная студенческая статья всегда имеет равные с другими шансы выйти на Хабр.

Как всегда
Ага-ага, ну да, ну да ))

Тут выглядит скорее "чтобы разобраться – надо объяснить кому-нибудь". Imho, достойное поведение, только ресурс выбран неудачный.

может, у вас такое есть. с таким не сталкивались

А меня мой преподаватель по ГИСам, кстати, сам толкал перетащить курсовую в статью на хабре. Но увы, уже после зачета. Так что думаю, вполне могут быть и такие прогрессивные

Я теперь понимаю, почему язык C для начинающих подходит лучше, чем Паскаль:


  1. Операция выделения памяти отделена от указателя.
  2. Передача аргументов по ссылке делается явным образом через указатели.

В Си нет ссылок.

Именно поэтому я и написал, что передача делается явно через указатели.

Что значит явно через указатели?

typedef unit8_t *pType;

myFunc(pType myData){...

От того, что вы объявили алиас, указатель не перестал быть указателем.

Ну так указатель в Паскале тоже не перестаёт быть указателем. Только записан точно так же.

Я так понимаю, товарищ имеет в виду, что нет var-аргументов, как в Паскале (или передаваемых по ссылке, как в c++), и получение адреса переменной всегда надо выполнять явно.

Но и тут есть исключение – массивы.

Насчёт var согласен. Не могу сказать хорошо это или нет. В Паскале к этому привык, в С/C++ наоборот - привык что только через ссылку.

var нравится, но это совсем немного, но всё же другой стиль разработки.

В C++ всё опять усложнилось – можно передать указатель на переменную, а можно ссылку на неё. Казалось бы, одно и то же, но есть нюанс...

Мне в этом плане нравится C#, где ключевое слово ref надо указывать и в сигнатуре функции, и при её вызове.

А кстати да, но, откровенно говоря, ссылки в С++ - это отдельный мир со своими правилами, такого в Паскале нет, может и к лучшему.

ничего, в следующем семестре узнаете, что бывает 3 вид памяти))

Это где в 2023 Паскаль дают?

ВУЗы РФ, в 2027 они узнают про python.

Меня очень бесил в 2002 преподаватель, который заставлял для 8086 писать на ассемблере, хотя c++ уже использовался два десятилетия для этих целей.

А почему это, 2023 году, нельзя использовать для обучения ЯП, специально разработанный для обучения? Где и в каком месте этот язык "устарел"?

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

Может быть не надо использовать замшелый и покрытый плесенью Borland Pascal для DOS, или свистелки типа ABC Pascal, а взять Паскаль здорового человека - FreePascal? С этим я соглашусь. В остальном - Паскаль гораздо более подходит для обучения, чем предлагаемый ниже питон. В том числе и в 2023 году

Авторам статьи - успехов! Порекомендую книги Андрея Столярова "Программирование: Введение в профессию" в трех томах. Первая книга как раз посвящена Паскалю, и там хорошо раскрыта тема указателей.

Python, как это ни странно, тоже строго типизированный язык. Просто типизация динамическая, а не статическая, и нет прямого доступа к памяти.

Питон - интерпретируемый язык, ниша применения его вполне определенная, и это - не обучение

Не более интерпритируемый чем ruby или джава. Вот bash действительно можно назвать интерпретируемым, если только и в него jit уже не встроили

А то что в джаве jit и уже давно вы тоже не слышали? Так то с 1999 года

Просто типизация динамическая, а не статическая

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

Спасибо!

А чем Борланд паскаль плох? Он не запускается на современных машинах?

Там упоминается именно Borland Pascal для DOS. Запустить сейчас что-то досовское уже становится нетривиальной задачей.

Тем более что есть вполне себе современный и кросплатформный FreePascal и у него даже есть консольная IDE с таким же интерфейсом как у TP/BP.

Да даже если и запускается...


Вот самое то на современном мониторе работать в текстовом режиме 80 на 50! (А те кто не умеют этот режим включать — будут работать 80 на 25).


Опять же, жалкие 64 килобайта на массив. Мне их не хватало даже в школьных олимпиадах.

Да, понимаю. До публикации были строки, но после модерации пропали, извините. Я думаю это из-за того, что в списке языков на хабре не было Паскаля. Учтем это в будущих статьях.

Delphi там есть.

А чем книга «Алгоритмы + структуры данных = программы» Н. Вирта для изучения указателей в Паскале плоха?

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

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

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

Потому что Pascal настолько древний, что разбирать там, как мне видится, уже особо нечего (особенно, если говорить об уровне института, где он обычно для галочки).

Поясните, пожалуйста, всё же - почему паскаль "настолько древний"? Что в нем устарело?

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

Хотя, щяс же такого паскаля уже нет, есть только дельфи?

В досовском борланд паскале тоже классы и наследование есть (начиная с Turbo Pascal 5.5, 1989 год). А более ранний - это видимо из периода перфокарт, я сомневаюсь что ему в этом веке учили.

А ведь точно, были ))
Как-то это мимо меня прошло в школе. Помню, что ООП я начал изучать уже на Борланд С++

Если не ошибаюсь, ООП есть и во FreePascal

Конечно, если учесть хронологию появления реализаций Паскаля как Turbo Pascal -> Turbo Pascal with objects -> Delphi -> FreePascal

phi?

Конечно - функциональщина - как раз то, что необходимо знать первокурснику. И да, вы помоему путаете функциональное программирование с процедурным

вы помоему путаете функциональное программирование с процедурным
Вполне вероятно)

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

На нём нет практически коммерческих разработок. Устроится на работу программистом паскаля, если не невозможно, то очень сложно (какой-нибудь НИИ на задворках вселенной).

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

А зачем учить тому, что будет не нужно? И почему нельзя учить сразу на современном языке?

Столбиком умножать/делить тоже не нужно? Таблица умножения?

Разница между паскалем и с — не настолько трагична, как между «столбиком и калькулятор».

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

//скрипит мозгами, пытается вспомнить, путается в показаниях

Зачем нужно взятие адреса, когда можно читать из потока?

В сях вроде как нет потоков, они в плюсах только появились.

Ммм, ладно. Потоки есть. Но без указателей вы их не прочитаете, емнип.

Да, но без прямой адресации, функциям передается указатель на то — в куда передавать данные из потока. Более низкий уровень не требуется

Вот именно! std::cin - это C++, но никак не С

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

Ладно… Паскаль я последний раз щупал так давно, что нет смысла о нем спорить. Самоотвод)

Да я тоже его давно не трогал, меня вон в соседнем треде натыкали носом в enum'ы. Но у меня до сих пор флешбеки от того, как я пересаживался с этого самого паскаля на си, и это напоминало переезд в Австралию, где каждый булыжник пытается тебя убить.

О да. Особенно учитывая, что С это было про системное программирование и наворотить там делов было элементарно
Системное оно или нет, больше зависело от того, пересаживался ли ты на С на работе или в институте, но первым неприятным сюрпризом на сях было то, что в отличии от паскаля, никто не предупреждал ни о выходе за пределы массива, ни о переполнении переменных и так далее :)
Я тогда в школе учился. Самое страшное, что у меня могло случиться — это зависание компа, где решал очередную олимпиадную задачку ))

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

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

Да, но это больше среди студентов. Когда начинаешь работу, понимаешь, как это круто — в дебаг-сборке сразу видеть, где налажал. А в продакшен уже просто собираешь без этого оверхеда.
Вы путаете тёплое с мягким. Умножение столбиком и таблица умножения в жизни нужна, паскаль нет.
что будет не нужно

На этом этапе учат не языку, а программированию. В Паскале есть низкоуровневый доступ в памяти, который позволяет пощупать концепции типа кучи/стека, но при этом есть хоть какая-то защита от дурака в отличие от того же c/c++. После этого программист в три прихлопа пересаживается на джаву, но при этом у него не лопается мозг от int vs Integer.


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

На этом этапе учат не языку, а программированию.

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

Давать же с нуля ЯП, фактически применяемые при разработке реального ПО - это насилие над человеческим сознанием, вырождающуюся в дальнейшую глубокую некомпетентность

На нём нет практически коммерческих разработок. Устроится на работу программистом паскаля, если не невозможно, то очень сложно (какой-нибудь НИИ на задворках вселенной)

Такое впечатление, что высшем учебном заведении программистов учат только одному языку программирования

Я верю. Формат просто похожий, но некоторые детали выдают, что писалось для себя/своих, а не для препода. И именно поэтому препод бы такой текст оценил – ему ж надо, чтобы студент разобрался в теме. Ну и указатели – базовая вещь, так что основная аудитория Хабра их давно знает или уже не будет знать никогда, статья по ним тут несколько неожиданна.

ЗЫ: У вас в вузе основы ассемблера или устройства ЭВМ были? Понимание, как в комменте @fk0 – оно всё-таки базовое, всё прочее накручивается на него.

нет, к сожалению

Статическая память — это память, которая выделяется до начала работы программы, на стадии компиляции и сборки.

Динамическая память — это оперативная память, которая выделяется в процессе компиляции программы

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

Спасибо. В некоторых ВУЗах есть Паскаль, поэтому и рассмотрели эту тему, т.к. она у многих вызывает затруднения.

И чего это в статье только простые типы данных рассматриваются. Сдаётся, дело нечисто и всё же не ради просвещения непросвещенных столь куцая статья о базовых принципах работы с памятью написана. Где записи, где массивы, где объекты. А как же незабвенный mem[]?

Статья ведь называется "Знакомство..", то есть она освещает базу для работы с указателями.

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

type TDayTime = (dMorning, dDay, dEvening, dNight);
const Names : array [TDayTime] of string = ('Morning', 'Day', 'Evening', 'Night');

Да, это ни с чем не сравнимое ощущение буквальности, что ли, языка. Немного, разве что, в Лиспе оно возможно?..

Rust с библиотекой strum:


#[derive(strum::EnumVariantNames)]
enum DayTime {
    Morning,
    Day,
    Evening,
    Night,
}

// `DayTime::VARIANTS` - массив `["Morning", "Day", "Evening", "Night"]`

И да, насчёт выразительности и лаконичности Pascal читать смешно.

Ну вот вам Java:


public enum DayTime {

    Morning("Morning"),
    Day("Day"),
    Evening("Evening"),
    Night("Night");

    private final String name;

    DayTime(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

Буковок больше, но с адекватностью и выразительностью никаких проблем.

Хотите переведу?

```kotlin

enum class DayTime { Morning, ... }

val names = DayTime.values().map{it.name() }

```

Как мне уже тут справедливо заметили ниже, пример не о строковом представлении перечислимого типа, а о том, что им можно индексировать массив.

Вы не совсем полный пример привели, из-за чего отвечающие подумали что дело в переводе энама в строку.

Лучше как-то так:

type TDayTime = (dMorning, dDay, dEvening, dNight);
const Names : array [TDayTime] of string = ('Morning', 'Day', 'Evening', 'Night');
const RussianNames : array [TDayTime] of string = ('Утро', 'День', 'Вечер', 'Ночь');

type TWeekDay = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
var PowerLoad[TWeekDay, TDayTime] of Double;
...
for day in TWeekDay do PowerLoad[day, dEvening] := PowerScale[dEvening] * PowerLoad[day, dMorning]
...

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

Нет здесь никакого волшебства, это вас разбаловали языки, которые дают программисту чересчур много способов выстрелить себе в ногу. Строгая типизация таких приколов не позволяет:

main.pas(2,81) Error: Expected another 1 array elements

Ну и как меня уже тут справедливо поправили, пример кода не о текстовом представлении, а о том, что массивы можно индексировать перечислимым типом. Где ещё такое есть в том, что сейчас модно и современно?

Ну и как меня уже тут справедливо поправили, пример кода не о текстовом представлении, а о том, что массивы можно индексировать перечислимым типом.

Стоило бы так сразу и сказать. Rust с enum-map:


use enum_map::{enum_map, Enum, EnumMap};

#[derive(Enum)]
enum DayTime {
    Morning,
    Day,
    Evening,
    Night,
}

fn names() -> EnumMap<DayTime, &'static str> {
    enum_map! {
        DayTime::Morning => "Morning",
        DayTime::Day => "Day",
        DayTime::Evening => "Evening",
        DayTime::Night => "Night",
    }
}

Или, если нужно без зависимостей или нужно индексировать именно массивы:


use std::ops::{Index, IndexMut};

impl<T> Index<DayTime> for [T; 4] {
    type Output = T;
    fn index(&self, idx: DayTime) -> &Self::Output {
        &self[idx as usize]
    }
}

impl<T> IndexMut<DayTime> for [T; 4] {
    fn index_mut(&mut self, idx: DayTime) -> &mut Self::Output {
        &mut self[idx as usize]
    }
}

const NAMES: [&'static str; 4] = ["Morning", "Day", "Evening", "Night"];

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

type TDayTime = (dMorning, dDay, dEvening, dNight); const Names : array [TDayTime] of string = ('Morning', 'Day', 'Evening', 'Night');

В 1С: создаёте перечисление в конфигураторе, а потом просто выводите его синоним(есть имя и синоним). Ещё можно создать составной тип (аналогично у них есть синонимы), а потом Строка(ОписаниеТипов.Типы()[Index]). Как обычно, любой кусок кода не даёт никакого понятия зачем это нужно, когда речь идёт о задаче, внезапно, выясняется, что такой код и не нужен, а можно сделать всё по другому и, возможно, более просто. "Адекватный" перевод, в языках программирования, это аналог Калиграфии: совершенно ненужная хрень, в наше время.

P.S. Адресовать перечислениями или строками, можно много где.

Соот = Новый Соответствие;
Соот.Вставить(Перечисление.dMorning, "Morning")
Соот[Перечисление.dMorning]

Структ = Новый Структура("dMorning, dDay", "Morning", "Day"); Структ["dMorning"]

to SalamWord

В Паскале, поскольку есть строгая типизация, то на начальном уровне, действительно, сложно понять как она сочетается с указателями. Например, вами ничего не сказано о типе Pointer, это уже не годится как "ввведение". Передача параметров по ссылке и по значению и на фоне этого параметр типа СсылкаНаСсылку.

Сам я хорошо изучил эту тему: дву/много связанные списки, FreeMem/GetMem, выделение/освободжение в разных модулях, ссылки на процедуры и функции и т.п. И при этом, меня до сих пор вводит в ступор слово "разыменование", наиболее неудачного термина невозожмно было придумать, есть какие-то другие варианты?

Спор о лучшем языке программирования не имеет смысла, если у тебя есть нож и нужно отрезать кусок колбасы - просто отрежь и съешь.

Указатели в Паскале, заголовок в ВордАрте… Ностальгия.

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

Но на счёт паскаля, это трагедия что этот язык преподают. Те, кто в ВУЗах преподаёт ДОС, Pascal, Windows XP, 8080 и прочий старый хлам — просто враги прогресса и студентов. Эти знания никогда не пригодятся.

Говорят, мол, зная паскаль можно выучить другие языки. Таки да, но что мешает сразу начать с си? Намного больше пользы, даже если человек не будет его использовать, синтаксис будет полезен.
что мешает сразу начать с си?
А еще лучше С++
Потому что с него прямая дорога в шарп, джаву, котлин и тд тп, что потом выберет студент. Все равно, в основе С++
Способы мышления си и с++ разные. Каждый кулик своё болото хвалит. Я, скорее, за классический си.
Абсолютно разные. Потому надо начинать с С++, ибо он куда более современный. А чистый С пусть выбирают уже на специализации, может кто в микроконтроллеры уйдет. Другим то он зачем?

Не надо начинать с C++. Это один из самых сложных языков в мире, который практически никто не знает на 100%, и который требует обширного багажа предварительных знаний и нескольких лет для изучения.

Ядро Linux, системные программисты.
Ну да, очень небольшие ниши
«небольшие» :)))
По сравнению со всяким энтерпрайзом то? Или мобильной разработкой?
Смотровая площадка у университета. Там байкеры собираются, как вы знаете.
Очередная тусовка.
В одной стороне реальные такие дядьки бородатые, солидные. Харлеи стоЯт в рядок блестят хромом, все один к одному. Дядьки чинно спокойно стоят, что-то свое перетирают. Все так спокойно, благородно, солидно…

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

Тут один из них к дядькам подлетает, стоппи, дым из под колес… И спрашивает:
— мужики! А чего вы с нами никогда не знакомитесь?
Дядька спокойно так, сплевывая в сторону:
— а чего с вами знакомиться-то?.. ВЫ КАЖДЫЙ ГОД НОВЫЕ...


БАШ :). Та же «мобильная разработка», в каждом телефоне стоит ядро Linux, которое тоже требует драйверов ;)

Ещё раз присказка про кулика и болото. Правды тут нет, но востребованность на эту тему тоже большая.

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

Требую фотофиниш!!!
Я хвалю своё болото )
Драйвер пишет одна команда, а пользуется им — тысячи
Да я не спорю, моя мысль была только на счёт паскаля. В остальном с тобой я согласен.

Как раз опыт C++ здесь может сильно мешать. Например, в STL используется довольно своеобразный способ работы с коллекциями и итераторами, имеющий мало общего с C#/Java/Kotlin/Python.

Тогда — сразу Джаву )
Потому что с него прямая дорога в шарп, джаву, котлин и тд тп, что потом выберет студент. Все равно, в основе С++

Прямая дорога в шарп, джаву и т.д. не с С++, а как раз с Паскаля. Паскаль намного ближе к тоже же шарпу, чем С++. Потому что для перехода на шарп с Паскаля нужно запоминать простейшие технические штуки вроде «скобочки вместо бегин/энд», а для перехода с С++ на шарп надо учить новую парадигму программирования.

Ну не пойму я в чем трагедия то. Я начинал с бейсика и фортрана. Потом много ассемблера. И Паскаля 6.
Потом дельфи. И до сих пор на нем пишу. Это не значит, что я на чем то другом не пишу. Устану перечислять чего я только не использовал.
Этот спор мне всегда напоминал медведя Балу в Маугли. Когда он наказывает мальчика зато, что тот бежит на двух ногах. Ну мальчику так удобнее. Удобнее преподам излжжить материал и они излагаю. Паскаль четко реализует все классические операторы Алгоритмического языка программирования. Удобнее студентам понять эти азы. А дальше в полет.
Больше всего не люблю заказчиков, которые приходят и диктуют мне на каком языке я должен им что то исполнить. При этом еще не имея денег на оплату. Та какая блин разница. Это если ты идешь в команду, то там да. Там уже пишут все на одном и надо выть как и вся стая.
В общем ребята молодцы. Изложили нормально. Я тут отвлекался и не запомнил привели ли они примеры связных списков. Тут чуть выше человек спрашивал, для чего это нужно. Вот для этого и нужно.
Еще раз возвращаясь к устареванию или исполнению. Ну я много на дельфи использую библиотек от С. Заголовочный файл написал и вперед.
Как то так. Когда то Вирт по моему создал еще Модула. Типа там больше было операторов для работы с внешними устройствами. Ну вот эта Модула вроде и новее Паскаля и где она. Та нету.

В общем ребята молодцы. Изложили нормально.


Большие молодцы.

Трагедия в старческом подходе и обучению старью.

Так старперы там преподают в ВУЗах. Я и сам не молод, но как то попросили меня подобрать пару программистов во вновь создаваемую фирму. Ну где их взять молодых и умных. Пошел по старой памяти на защиту дипломов в институт. Ну лет 10-15 назад мой шеф по аспирантуре сказал, что кандидатская сейчас это что то типа диплома в мое время, а диплом это как курсовая работа в твое же время. Ну точно дипломы какие то хилые, послушать нечего. Все бубнят о методах черного и белого ящика при тестировании. О программировании как то не очень. И в комиссии мои одногодки,а то и на десяток полтора лет старше. Противно
Но я повторяю. Та неважно какой язык. К примеру у Кнута и своя машина и свой язык. Думаю мало кто его знает. Но читали многие.
У нас один препод четко излагал. Есть несколько операторов и они есть во всех алгоритмических языках

  1. Оператор присваивания (тут между переменной и значением можете вписать что себе хотите)

  2. Условный оператор (тут можете логическое выражение заключать в скобки или не заключать. И операторы после выражения в скобках или нет

  3. Операторы цикла

3.1 С определенным количством циклов (for etc...)

3.2 С предусловием (условие проверяется до выполнения)

3.3 С постусловием (условие проверяется после хотя бы одного прохода)

  1. Операторы ввода-вывода.

  2. Оператор безусловного перехода (это запрещено и упоминать всуе)

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

Я и сам не молод, но как то попросили меня подобрать пару программистов во вновь создаваемую фирму. Ну где их взять молодых и умных.

А в этой новой фирме какие-то другие программисты предполагались? Потому что взять молодых и умных студентов из ВУЗа в новую фирму, где нет хотя бы одного опытного программиста, это самоубийственная идея.

Предполагалось, что я буду руководителем филиала из одной западной страны. Язык этой страны мне не очень нравиться и когда они начали предлагать свои компы со своим хендехоховским языком, да еще и зажимать бабло, то я отказался. Но по моему филиал таки существовал. Я точно не знаю. Так вот раз уж такая песня про старье то работали там на Шестом бейсике. Для меня было дико смотреть на это после Дельфи.
Да и хочу вам сообщить что есть еще и прагматика во всех этих вопросах. В США и Австралии многие пишут на Коболе (старье, но пишут) потому, что это оплачивается.
И я еще раз повторяю. Лично мне да по фиг на чем писать. Алгоритм он и есть алгоритм. Но если работать в команде то тут про личности можно забыть. И завывать на том, за что платят

Так вот раз уж такая песня про старье то работали там на Шестом бейсике

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

Так я же и пытаюсь про это рассказать.
Пришел я в коммерческую фирму. Писали на Клиппере.
Дали в помощь мне еще девочку. Дал задание. Быстро написала.
Но как вам сказать. Одно и то же раз 15 повторила. Я говорю - а че бы это в процедуру или подпрограмму не вынести. Ответ поразил. А зачем. Редактор же легко позволяет копировать одни и теже участки текста.

О Майн Готт :)
Ну это тоже вопрос к преподавателю программирования, который не рассказал самое начало азбуки нормального кода, зачем нужны подпрограммы, и как придётся страдать, когда нужно будет сделать, например, одно изменение кода в этом куске.
"Редактор же легко позволяет" изменить в одном месте и затем "копировать одни и теже участки текста".

Индийский метод не просто так возник.
Оператор безусловного перехода (это запрещено и упоминать всуе)

Могу вас уверенно сказать, что это ошибочное утверждение. Есть места, где он используется повсеместно. Можете открыть любой драйвер Linux. Из последнего, с чем сталкивался.

Учить надо тому, что может использовать выпускник сразу после выпуска. Паскаль нельзя, как и ДОС, как и 8080.
Учить надо тому, что может использовать выпускник сразу после выпуска.

Мы за годы института писали на Паскале, на VB, на С, С++, гоняли в хвост и в гриву SQL и так далее. И было здорово, что на первом курсе нам дали именно Паскаль, а потом на втором сказали, что ок, собственно программировать научились, теперь давайте двигаться дальше. И по-моему, нигде Паскаль не мучают все пять лет, может разве что на филфаке и религиоведении. Это язык для «лёгкого старта», после чего уже студенты занимаются чем-то другим. Поэтому его вполне себе можно использовать.
Четырнадцатилетнего учил си, не вижу проблем :)
Оптимизация обучения — это не про не когда у вас четырнадцатилетний ребенок, а про когда у вас два потока по сотне восемнадцатилетних.
Вы зачем-то со мной спорите, пытаетесь мне что-то доказать. Я переучиваю студентов после убогого обучения.
То что мы когда-то учили паскаль, и даже, о боже пишем на нём (у меня даже статьи есть тут), и любим его, не означает то, что язык морально устарел.
Любовь к паскалю одно, а вот засорять мозг — другое.

Постоянно пытаюсь донести мысль, что если мы хотим получить годные кадры на выпуске ВУЗа, то нужно отказаться от порочных практик преподавания ненужного старья. Ведь, в ВУЗах автомобилестроения нет курса по паровым двигателям, верно?
любим его, не означает то, что язык морально устарел.

Ну так в обучении программированию нет морального устаревания. Моральное устаревание есть в продакшене. А учиться программировать надо на том, на чём легче учиться. Паскаль в этом плане прекрасно подходит до сих пор. А потом уже, когда первые шаги сделал, можно и к чему-то более применимому на практике переходить.
Ведь, в ВУЗах автомобилестроения нет курса по паровым двигателям, верно?

Да есть, в общем. Не в практическом плане, а в теории, как работают тепловые машины, действительно рассказывают на примере паровых двигателей, потому что это просто и понятно. А потом уже переходят к более сложным ДВС.
Простой вопрос: в передовых странах мира, флагманах технологий изучают паскаль по программе?

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

Тут я Вас поддерживаю на 100 %. Но я выше написал. Просто старперы, которых уже не переспоришь. А вот кто молодой красивы пойдет излагать в ВУЗ передовой язык какой нибудь. Так вот и нету людей.

Простой вопрос: в передовых странах мира, флагманах технологий изучают паскаль по программе?

Наверное нет. А встречный вопрос — мы, выученные на паскалях, отстаем в качестве разработчиков ПО от передовых стран?

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

В значительной мере да, но это, скажем так, не критично. Критично то, что преподаватель программирования в ВУЗе зарабатывает намного меньше, чем программист, поэтому естественный отбор работает в другую сторону.

Я вот никак не пойму, кто принял как истину в последней инстанции , что Паскаль устарел и мы просто портим молодежь.
Я не вижу проблемы устаревание.
Только бизнес. МС позволяет себе вкладывать большие бабки в рекламу Студии. А Борланд и тем более Ембаркадеро то точно не могут. Вот вам и причина устаревания.
Мой друг уехал в Ирландию. Когда его спрашивали на чем он пишет то он отвечал на Дельфи от Борланд. Его спрашивали - это фирма вашего дяди чтоли. Никто не спрашивал работы, которые он сделал. Все почему то нужно язык. Какому то бухгалтеру заскорузлому, который и программируемы калькулятор освоить не может, подавай визуал студию. Зачем, он не знает.
Вот кстати о МС SQL и FireBird. Тоже старый движок фареберд. То, что МС купила Сибейз и дала ему свое имя, то наверное никто и не помнит. А вот заказчик мне. Ты на Фареберде не пиши , а пиши на МС СЕКУЕЛ. Почему - пояснить никто не может. Я ему показываю ту же задачу написаную в двух разных СУБД и фареберд шустрее делает выборку. Но ему дай что то то от МС, потому, что это фирма.

У вас типичная ошибка построения статистики по кругу знакомств. Это нерепрезентативная выборка. То, что вам ещё удаётся находить работу с паскалем, не означает что он популярен.

Только бизнес. МС позволяет себе вкладывать большие бабки в рекламу Студии. А Борланд и тем более Ембаркадеро то точно не могут. Вот вам и причина устаревания.

Удивительно, около 15 лет не пользуюсь продуктами MS и не пишу для них. А везде не используется паскаль. Нигде не встречал (тоже ошибка). Веб, приложения для бизнеса, аппаратные приложения, и т.п. Питон и тот будет мощнее и удобнее паскаля.

Питон и тот будет мощнее и удобнее паскаля.

Та вы правы, что Питон круче. Я как то начитался и думаю, возьму ка я напишу что нить на Питоне. Но первая фраза, которая мне попалась в какой то статье - Питон не очень подходит для десктопных приложений.
От и облом. Я то другие и пишу очень очень редко. Вот так и закончилась наша любовь

У вас типичная ошибка построения статистики по кругу знакомств. Это нерепрезентативная выборка. То, что вам ещё удаётся находить работу с паскалем, не означает что он популярен.

Та не ищу я уже работу. Это она еще за меня держится. Но того же материала на том же Дельфи наработано ой как много. Предприятие на нем работает. И как, несмотря на мои неоднократные объявления не появляются люди могущие еще написать на том же Дельфи. Но к сожалению не находится и людей, которые могут переложить это все на более современный язык. Ну так, чтобы при это не положить работу предприятия.

Ты на Фареберде не пиши, а пиши на МС СЕКУЕЛ. Почему — пояснить никто не может. Я ему показываю ту же задачу написаную в двух разных СУБД и фареберд шустрее делает выборку. Но ему дай что то то от МС, потому, что это фирма.

Заказчик интуитивно прав. У огнептицы сейчас есть несколько критических недостатков, которые программным путём не исправляются:
1. По ней фиг найдёшь специалиста. Ну т.е. относительно несложно найти дедушку вроде меня, который двадцать лет назад был ого-го, лабал на Delphi+FB/IB, и может быть что-то ещё помнит, но попробуй ещё уговорить его поменять текущий стек на тот, что был 20 лет назад.
2. А ещё по ней фиг найдёшь хостинг. Ну т.е. если хочется олд-стайл, локальный сервер, свой админ, бэкапы и всё такое, вам никто богато жить не запретит. Но если вам хочется делегировать это облачникам, не получится. МС СКЛ — запросто, мускуль с постгресом — вообще навалом. А огнептицу попробуй ещё найди.
Ну а быстродействие, то такое, если у вас бизнес генерирует столько транзакций, что быстродействие MS SQL стало бутылочным горлышком, вам можно позавидовать.

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

Вы передёргиваете мою мысль. Я говорил про поршневые паровые двигатели, которые не используются.

ТА учить это одно. А вот как он будет выпонять работу это другое.
А то такие как примеры не с программирования. Попросили поставить виндовс. Мол такой умный четырнадцатилетний. Ну все может на компе. Меня всегда умиляли родители, которые и пультом от телека поьзоваться не могут, оценивают сое чадо как гения в программировании.
Ну вот.Поставил. Через неделю что то не работает. Что делал спрашиваю. Драйвер ставил. На фига. Плачет.. Хорошо. Переставил систему.
Через неделю опять не работает. Спрашиваю, что дела. Та тут мол освобождал место на диске. Был большой каталог Виндовс называтся. Я его и удалил.
А так родители говорят что просто гений.
Дальше молчу.

Я же не говорю, что не испоьзуется. Но опять же обращаясь к книгам Кнута и Дейкстры вспоминается, что использование этого оператора - МОВЕТОН.
И действительно иногда думаешь - ну никак без него. Но потом подумаешь и вот он выход . И даже красивше получается.
И почему нельзя про ДОС. Мой сын после института работал на заводе, где программировал контролеры. И нормально. При этом диплом был на паскале у него.

И почему нельзя про ДОС. Мой сын после института работал на заводе, где программировал контролеры. И нормально. При этом диплом был на паскале у него.


Какой ужас… А потом мы удивляемся, что у нас такое технологическое отставание.

Ну эт не от хорошей жизни, если честно, а от невыразительности языка. В той же жабе аналог будет выглядеть как


synchronized(data.updatedLock) {
    int status = pmbus_get_status(client, page, reg);
    if (status < 0) {
        return status
    }
   //...
}

При этом олдовым unrestricted goto обычно никто не пользуется, максимум как раз то, что вы привели в качестве примера.

Конкретно в указанном вами месте оператор условного перехода нужен из-за отсутствия в языке RAII и try/finally.


Вот, кстати, их бы включить в список не помешало...

Есть места, где он используется повсеместно. Можете открыть любой драйвер Linux...

Как и полагал, пример показывает, как goto используется вместо отсутствующего RAII или хотя бы defer. Вы скорее бедность C продемонстрировали, чем нужность goto.

В общем ребята молодцы. Изложили нормально
Девчата ))

Пацаны ваще девчата :)

Спасибо:)))

Спасибо!

Те, кто в ВУЗах преподаёт ДОС, Pascal, Windows XP, 8080 и прочий старый хлам — просто враги прогресса и студентов.

Те кто продолжает запускать TP и BP в сеансе недоэмуляции DOS под Windows XP и на этом учат студентов - реально враги прогресса и студентов. В то время когда есть FreePascal версии 3.2.2 вышедшей в 2021 году. Это раз.

Второе - те кто предлагает начать обучение программированию с C такие же враги, равно как и те, кто предлагает для этой цели Python. Оба языка, в 2023 году, имеют вполне определенные ниши применения: первый - системное программирование, второй - веб-разработка и скриптинг. Не смотря на то, что оба именуются языками общего назначения.

Си с его UB, неявным приведением типов, указателями с порога, malloc-ами и прочими прелестями - это конечно то, что нужно первокурснику! Еще раз повторю - начинать обучения с ЯП изобилующего такими "сюрпризами" - это сознательная профдеформация обучаемого. Достаточно одно примера

int a = 1;
int b = 2;

float c = a / b;

printf("%f\n", c);

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

Почему-то Вы упрямо утверждаете о ненужности языка. Может Паскаль как язык и не нужен, а вот как средство получения первоначальных навыков программирования он подходит лучше любого ЯП. Для освоения "нужных" в Вашем понимании вещей обучение в специалитете длится 5 лет, а по болонской системе - все 6 (бакалавриат и магистратура). Поверьте, семестр Паскаля на первом курсе никому не повредит

0. Паскаль был светлой юношеской любовью, какое-то время был тру-фанатом и более чем наработался с ним. Убийство микрософтом экосистемы Delphi не забуду, не прощу.
1. Эта статья вызывает боль у завсегдатаев хабра, потому что технические аспекты мёртвого языка должны жить в гугле, статьи про паскаль могут быть интересны в ностальгическом ключе, чтобы утёрли слёзы гики 90х
2. Преподавать в Университете уже несуществующие языки — так-то плевок в будущее общества, полно современных языков, на которых можно показать всю базу в любых разрезах, не уступающих по «читабельности».
3. Если авторов действительно удивляет реакция читателей, и если это ваша будущая профессия, то проводите больше времени тут, чем у вас там. Пора разбираться где и за что вам согласятся платить деньги. Лучше получить 3 у такого препода, но потратить время на самостоятельное погружение во что угодно, встречающееся в вакансиях.
Подписываюсь под каждым словом.

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории