Комментарии 173
Я компьютер изучал с бейсика и ассемблера. И концепция указателя самое понятное что есть в компьютере. Указатель -- это адрес в памяти. А по адресам записаны байтики. Компьютер же не может работать сразу непосредствнено с именованной переменной. Что тут непонятного?
Те, кто начинал с бейсика (без ассемблера и операторов peek/poke) или с современных языков с GC (тут ниже товарищ, кажется, жаждет,чтобы учили сразу с Питона) вполне могут этого и не знать. А так-то, конечно, ваше объяснение куда прозрачней того, что в статье)
Я начал с С++. Учил сам по какой-то случайной книжке издательства Питер. До этого из опыта программирования - калькулятор в консоли на Паскаль. Всё.
Так вот указатели я понял минут за 5. Я так и не понял нафига под них выделили целую главу. Это самая тупая вещь в истории, как она у кого-то вообще может вызывать проблемы?
Всё лежит в памяти компьютера
Память (для простоты) представляем как кучку пронумерованных ячеек
Указатель хранит номер ячейки в которую нужно посмотреть, чтобы найти интересующие нас данные
См. пункт 1 и понимаем, что указатель тоже лежит в памяти
Соответственно указатель на указатель - хранит номер ячейки с другим указателем.
Повторяем пункты 4 и 5 до нужного уровня вложенности указателей.
Как только эту простейшую схему объяснить, добавить в эту схему арифметику с указателями уже не составит труда.
Объяснить всякие тонкости с выравниванием, NULL, виртуальной и физической памятью, страничной адресацией и пр. и пр. за 5 минут не получится, но саму концепцию указателей буквально за 5 минут можно рассказать ведь)
Как только эту простейшую схему объяснить,
В этой схеме не хватает главного — зачем это надо, и что с этим делать.
С этим можно много чего делать) Но это всё никак не относится к самой концепции указателя.
Условно, указатель может указывать вообще не в память, а в пин микроконтроллера, который замаплен в память) Но это ваще никак не относится к указателю как концепции)
Когда не понимаешь зачем что-то надо, то мозг сопротивляется этой бесполезной, на данный момент, информации.
Если же начать с задачи/проблемы ("Нам надо найти в тысяче ячеек, расположенных подряд, определённое число. Как это сделать?"), то всё идёт гораздо легче.
Если же начать с задачи/проблемы ("Нам надо найти в тысяче ячеек, расположенных подряд, определённое число. Как это сделать?"), то всё идёт гораздо легче.
И вот эта явная задача на массив якобы даёт понимание указателей?
На Паскале с помощью указателей можно выделять массивы той длины, которая заранее неизвестна. В противном случае вам придётся выделить эту память заранее, при старте программы. А вы не знаете, сколько потребуется
Поверьте, может. См., к примеру, https://www.joelonsoftware.com/2005/12/29/the-perils-of-javaschools-2/ – дофига народа не врубается в указатели. Странно, но факт.
Что тут непонятного?
Ничего непонятного в этом нет. Обычно, сложно понять что происходит в синтаксисе программы с ними. Особенно когда скобки в скобках, а ещё там-же берётся адрес и приведение типа… Мозг сломать можно с непривычки.
Наименование переменной в коде тоже своего рода указатель, только не в виде физического адреса. Alias, так сказать
За курсовые на Хабре теперь зачет дают или автомат сразу?
Почему? Нет, это наше желание.
Как всегда, слышал звон… :-) Ситуации уже разобрали. Кстати, сейчас никаких сессий и зачетов не идёт, только семестр начался. И любая самостоятельная студенческая статья всегда имеет равные с другими шансы выйти на Хабр.
Тут выглядит скорее "чтобы разобраться – надо объяснить кому-нибудь". Imho, достойное поведение, только ресурс выбран неудачный.
может, у вас такое есть. с таким не сталкивались
А меня мой преподаватель по ГИСам, кстати, сам толкал перетащить курсовую в статью на хабре. Но увы, уже после зачета. Так что думаю, вполне могут быть и такие прогрессивные
Я теперь понимаю, почему язык C для начинающих подходит лучше, чем Паскаль:
- Операция выделения памяти отделена от указателя.
- Передача аргументов по ссылке делается явным образом через указатели.
В Си нет ссылок.
Именно поэтому я и написал, что передача делается явно через указатели.
Что значит явно через указатели?
typedef unit8_t *pType;
myFunc(pType myData){...
От того, что вы объявили алиас, указатель не перестал быть указателем.
Ну так указатель в Паскале тоже не перестаёт быть указателем. Только записан точно так же.
Я так понимаю, товарищ имеет в виду, что нет var-аргументов, как в Паскале (или передаваемых по ссылке, как в c++), и получение адреса переменной всегда надо выполнять явно.
Но и тут есть исключение – массивы.
Насчёт var согласен. Не могу сказать хорошо это или нет. В Паскале к этому привык, в С/C++ наоборот - привык что только через ссылку.
var нравится, но это совсем немного, но всё же другой стиль разработки.
В C++ всё опять усложнилось – можно передать указатель на переменную, а можно ссылку на неё. Казалось бы, одно и то же, но есть нюанс...
ничего, в следующем семестре узнаете, что бывает 3 вид памяти))
Это где в 2023 Паскаль дают?
ВУЗы РФ, в 2027 они узнают про python.
Меня очень бесил в 2002 преподаватель, который заставлял для 8086 писать на ассемблере, хотя c++ уже использовался два десятилетия для этих целей.
А почему это, 2023 году, нельзя использовать для обучения ЯП, специально разработанный для обучения? Где и в каком месте этот язык "устарел"?
Паскаль - строго типизированный язык, исключающий, ко всему прочему, неявное преобразование типов, содержащий все необходимые для начинающего парадигмы.
Может быть не надо использовать замшелый и покрытый плесенью Borland Pascal для DOS, или свистелки типа ABC Pascal, а взять Паскаль здорового человека - FreePascal? С этим я соглашусь. В остальном - Паскаль гораздо более подходит для обучения, чем предлагаемый ниже питон. В том числе и в 2023 году
Авторам статьи - успехов! Порекомендую книги Андрея Столярова "Программирование: Введение в профессию" в трех томах. Первая книга как раз посвящена Паскалю, и там хорошо раскрыта тема указателей.
Python, как это ни странно, тоже строго типизированный язык. Просто типизация динамическая, а не статическая, и нет прямого доступа к памяти.
Питон - интерпретируемый язык, ниша применения его вполне определенная, и это - не обучение
Просто типизация динамическая, а не статическая
Это, кстати, минус для обучения. Чтобы учить студентов понимать типы, хорошо, когда они видны.
Спасибо!
А чем Борланд паскаль плох? Он не запускается на современных машинах?
Там упоминается именно Borland Pascal для DOS. Запустить сейчас что-то досовское уже становится нетривиальной задачей.
Тем более что есть вполне себе современный и кросплатформный FreePascal и у него даже есть консольная IDE с таким же интерфейсом как у TP/BP.
Да даже если и запускается...
Вот самое то на современном мониторе работать в текстовом режиме 80 на 50! (А те кто не умеют этот режим включать — будут работать 80 на 25).
Опять же, жалкие 64 килобайта на массив. Мне их не хватало даже в школьных олимпиадах.
>> В строках 16, 19, 21, 28 и т.д.
довольно сложно считать номера строк тут
Очень здорово, что вы не просто учитесь, но и систематизируете свои знания (хотя мне и кажется, что ваш текст – это, скорей, эссе для сдачи преподавателю, чем статья на Хабре).
Блин, хабровский редактор забодал, дальше была критика и советы, но они пали смертью храбрых. Вкратце – не путайте свойства собственно указателей и динамического выделения памяти и изучите несколько других языков для сравнения.
Спасибо! Нам так не объяснили подробно на лекциях, к сожалению. Разобравшись, захотелось помочь другим. Не понимаю, почему уже второму человеку кажется, что это мы делали для зачета или в качестве эссе преподавателю (это не так))) )
Потому что Pascal настолько древний, что разбирать там, как мне видится, уже особо нечего (особенно, если говорить об уровне института, где он обычно для галочки).
Поясните, пожалуйста, всё же - почему паскаль "настолько древний"? Что в нем устарело?
Хотя, щяс же такого паскаля уже нет, есть только дельфи?
В досовском борланд паскале тоже классы и наследование есть (начиная с Turbo Pascal 5.5, 1989 год). А более ранний - это видимо из периода перфокарт, я сомневаюсь что ему в этом веке учили.
Есть FreePascal, умеющий 64 бит код под несколько платформ
Del
Конечно - функциональщина - как раз то, что необходимо знать первокурснику. И да, вы помоему путаете функциональное программирование с процедурным
Не соглашусь — это как раз хорошая последовательность. Сначала базовый подход где всё в main (или что там у паскаля вместо него, уже не помню), потом наворачиваем первый уровень абстракции — процедурное программирование, потом второй уровень — объединяем процедуры в классы.
Речь идет не о рабочем инструменте, а о языке, предназначенном для обучения программированию, базовым принципам, таким как алгоритмы и структуры данных
Столбиком умножать/делить тоже не нужно? Таблица умножения?
Вы ошибаетесь - разница ужасающе трагична. И это связано как раз с концепцией указателей. Если в паскале на начальных этапах обучения можно спокойно обойтись без них, то в си ввод данных с клавиатуры уже заставляет применять операцию взятия адреса. Ну и так далее, примеров могу гору привести
Зачем нужно взятие адреса, когда можно читать из потока?
В сях вроде как нет потоков, они в плюсах только появились.
Для начинающего кодить наличие в языке нормальной поддержки строк и массивов (включая многомерные) — манна небесная.
Да я тоже его давно не трогал, меня вон в соседнем треде натыкали носом в 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).
Что-то я не понял, enum в C/C++ или enum class в C++ можно использовать точно так же. Или речь не про это?
del
Нет здесь никакого волшебства, это вас разбаловали языки, которые дают программисту чересчур много способов выстрелить себе в ногу. Строгая типизация таких приколов не позволяет:
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"];
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, которое тоже требует драйверов ;)
Ещё раз присказка про кулика и болото. Правды тут нет, но востребованность на эту тему тоже большая.
Как раз опыт C++ здесь может сильно мешать. Например, в STL используется довольно своеобразный способ работы с коллекциями и итераторами, имеющий мало общего с C#/Java/Kotlin/Python.
Потому что с него прямая дорога в шарп, джаву, котлин и тд тп, что потом выберет студент. Все равно, в основе С++
Прямая дорога в шарп, джаву и т.д. не с С++, а как раз с Паскаля. Паскаль намного ближе к тоже же шарпу, чем С++. Потому что для перехода на шарп с Паскаля нужно запоминать простейшие технические штуки вроде «скобочки вместо бегин/энд», а для перехода с С++ на шарп надо учить новую парадигму программирования.
Ну не пойму я в чем трагедия то. Я начинал с бейсика и фортрана. Потом много ассемблера. И Паскаля 6.
Потом дельфи. И до сих пор на нем пишу. Это не значит, что я на чем то другом не пишу. Устану перечислять чего я только не использовал.
Этот спор мне всегда напоминал медведя Балу в Маугли. Когда он наказывает мальчика зато, что тот бежит на двух ногах. Ну мальчику так удобнее. Удобнее преподам излжжить материал и они излагаю. Паскаль четко реализует все классические операторы Алгоритмического языка программирования. Удобнее студентам понять эти азы. А дальше в полет.
Больше всего не люблю заказчиков, которые приходят и диктуют мне на каком языке я должен им что то исполнить. При этом еще не имея денег на оплату. Та какая блин разница. Это если ты идешь в команду, то там да. Там уже пишут все на одном и надо выть как и вся стая.
В общем ребята молодцы. Изложили нормально. Я тут отвлекался и не запомнил привели ли они примеры связных списков. Тут чуть выше человек спрашивал, для чего это нужно. Вот для этого и нужно.
Еще раз возвращаясь к устареванию или исполнению. Ну я много на дельфи использую библиотек от С. Заголовочный файл написал и вперед.
Как то так. Когда то Вирт по моему создал еще Модула. Типа там больше было операторов для работы с внешними устройствами. Ну вот эта Модула вроде и новее Паскаля и где она. Та нету.
В общем ребята молодцы. Изложили нормально.
Большие молодцы.
Трагедия в старческом подходе и обучению старью.
Так старперы там преподают в ВУЗах. Я и сам не молод, но как то попросили меня подобрать пару программистов во вновь создаваемую фирму. Ну где их взять молодых и умных. Пошел по старой памяти на защиту дипломов в институт. Ну лет 10-15 назад мой шеф по аспирантуре сказал, что кандидатская сейчас это что то типа диплома в мое время, а диплом это как курсовая работа в твое же время. Ну точно дипломы какие то хилые, послушать нечего. Все бубнят о методах черного и белого ящика при тестировании. О программировании как то не очень. И в комиссии мои одногодки,а то и на десяток полтора лет старше. Противно
Но я повторяю. Та неважно какой язык. К примеру у Кнута и своя машина и свой язык. Думаю мало кто его знает. Но читали многие.
У нас один препод четко излагал. Есть несколько операторов и они есть во всех алгоритмических языках
Оператор присваивания (тут между переменной и значением можете вписать что себе хотите)
Условный оператор (тут можете логическое выражение заключать в скобки или не заключать. И операторы после выражения в скобках или нет
Операторы цикла
3.1 С определенным количством циклов (for etc...)
3.2 С предусловием (условие проверяется до выполнения)
3.3 С постусловием (условие проверяется после хотя бы одного прохода)
Операторы ввода-вывода.
Оператор безусловного перехода (это запрещено и упоминать всуе)
Наверное что то еще. Но уже подзабыл. Вот напишите вашу новейшую программу в этих терминах и все дела. Точно так же ее можно будет написать на других языках.
Я и сам не молод, но как то попросили меня подобрать пару программистов во вновь создаваемую фирму. Ну где их взять молодых и умных.
А в этой новой фирме какие-то другие программисты предполагались? Потому что взять молодых и умных студентов из ВУЗа в новую фирму, где нет хотя бы одного опытного программиста, это самоубийственная идея.
Предполагалось, что я буду руководителем филиала из одной западной страны. Язык этой страны мне не очень нравиться и когда они начали предлагать свои компы со своим хендехоховским языком, да еще и зажимать бабло, то я отказался. Но по моему филиал таки существовал. Я точно не знаю. Так вот раз уж такая песня про старье то работали там на Шестом бейсике. Для меня было дико смотреть на это после Дельфи.
Да и хочу вам сообщить что есть еще и прагматика во всех этих вопросах. В США и Австралии многие пишут на Коболе (старье, но пишут) потому, что это оплачивается.
И я еще раз повторяю. Лично мне да по фиг на чем писать. Алгоритм он и есть алгоритм. Но если работать в команде то тут про личности можно забыть. И завывать на том, за что платят
Так вот раз уж такая песня про старье то работали там на Шестом бейсике
Дело не в языке. Вчерашние студенты без толкового ментора на любом языке запорят проект с вероятностью 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 (бакалавриат и магистратура). Поверьте, семестр Паскаля на первом курсе никому не повредит
1. Эта статья вызывает боль у завсегдатаев хабра, потому что технические аспекты мёртвого языка должны жить в гугле, статьи про паскаль могут быть интересны в ностальгическом ключе, чтобы утёрли слёзы гики 90х
2. Преподавать в Университете уже несуществующие языки — так-то плевок в будущее общества, полно современных языков, на которых можно показать всю базу в любых разрезах, не уступающих по «читабельности».
3. Если авторов действительно удивляет реакция читателей, и если это ваша будущая профессия, то проводите больше времени тут, чем у вас там. Пора разбираться где и за что вам согласятся платить деньги. Лучше получить 3 у такого препода, но потратить время на самостоятельное погружение во что угодно, встречающееся в вакансиях.
Страшно представить в каком виде представлена информация об указателях Паскаля в Интернете, раз вы пытались это всё собрать и донести в более доступном виде. Потому что ваш материал тоже очень сложный, очень нагруженный. Сразу вспомнилась школа, где надо было всё это бездумно зубрить и не понимать — за что же так мучить ученика? В чём он провинился?
Лол, я честно говоря немного офигиваю от тонны комментариев тут, то есть засилие мусорных «твиттер статей» и откровенной джинсы на главной хабра - не вызывает хейта, а статья про указатели, для новичков, настолько сильно «взрывает»? Тупо из-за хейта к языку у сишников?
Реакция сишников, на каждую статью с упоминанием паскаля, от одних и тех же людей, настолько бурная, что я даже не могу предположить причины этого. Успокойтесь уже, си, имеющий меньший функционал, чем паскаль, и действительно застрявший в 70-х - победил, хватит уже лезть под каждую статью, где упоминается паскаль.
Знакомство с указателями в Паскале