LINUX.ORG.RU

Сколько зарабатывает Pascal программист?

 , , ,


6

6

Здравствуйте. Я хочу узнать сколько можно заработать в 2022 году, зная Object Pascal и почему он не стал мейнстримным языком программирования. Почему он только изучается в школах и почему именно Pascal

Ответ на: комментарий от monk

Ты про inline? В зависимости от функции он не всегда возможен + это не упрощает чтение фрагмента кода, если проверка становится слишком громоздкой.

grem ★★★★★
()
Ответ на: комментарий от pihter

это как?

if (cond1 && cond2 && ... && condN) {
  // do something
}

ничем не отличается от того что Вы написали, особенно если likely / unlikely обмазаться.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

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

pihter ★★★★★
()
Ответ на: комментарий от pihter

Это не бесконечный цикл. Он выполняется всего один раз. Цикл с постусловием выполняется до тех пор, пока условие не станет истинным. А вместо условия в моём примере True.

По break также происходит выход из цикла.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от pihter

остальные условия тоже будут вычисляться после того как выяснилось что первое не соблюдается.

Нет. && и || гарантированно прекращают вычисление после первого результата, позволяющего получить ответ.

monk ★★★★★
()
Ответ на: комментарий от pihter

остальные условия тоже будут вычисляться

Глубочайшее заблуждение и 4.2. Стандарт требует чтобы cond2 … condN не вычислялись если cond1 не выполнилось, это вовсе не вопрос оптимизации. Я то думал Вы там с jumps forward пытались бороться…

bugfixer ★★★★★
()
Ответ на: комментарий от etwrq

Scheme

а в школе нормально заходят basic/c/pascal. до 5 класса факультативом шло, потом как часть программы. физмат уклон потока.

Для школы есть Лого. Правда у нас как и Scheme непопулярно.

monk ★★★★★
()
Ответ на: комментарий от MOPKOBKA

И все эти года язык оставался без изменений, а так же не появилось какого то компилятора с типами, верно?

Изменения наслаивались сверху. Сломанная основа остаётся прежней. В JS сломана прежде всего именно базовая логика.

emorozov
()
Ответ на: комментарий от peregrine

Вы просто не знаете как у нас теперь разрабатывают софт.

В чатах подсказывают, что теперь ряд контор просто набирают команды фрилансеров. И вот там они и пишут софт на Паскале/Delphi, C++, чём угодно ещё. А вакансий соответствующих нет, потому что это не постоянная работа.

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

saahriktu ★★★★★
()

Давайте определимся, что подразумевается под программистом на Pascal? Программист на изначальном Pascal Вирта? Программист на Borland Turbo Pascal? Программист на fpc + Lazarus? Программист на PascalABC.NET? Программист на Borland Delphi ~5? Или программист на современном Embarcadero Delphi?

Очевидно (не спрашивайте почему), что Embarcadero живёт не на пожертвования и зарабатывает на развитии и продаже своих RAD решений, у которых не такой уж низкий порог вхождения для нормального освоения. Значит, нормальное программирование в них требует квалифицированных программистов. Ни одна контора не будет закупать не самый дешёвый продукт для неквалифицированных кадров. А квалифицированный специалист тоже стоит не так уж мало. И уж основной рынок у Embarcadero явно не страны СНГ.

Так что, если вчерашние студенты, изучавшие паскаль (точнее его основы) за 4-5 лет до окончания института, не могут найти работу работу с его применением, не вина паскаля. Просто они недостаточно квалифицированы в рамках программирования на Delphi. А хлебные места и так уже заняты, либо на реализацию краткосрочных зовут проверенных людей, а не вчерашних студентов.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от slepoy_pew

А в паскале строки реализуются через специальный строковый чип? Какая разница через что они реализуются.

MOPKOBKA ★★★★★
()
Ответ на: комментарий от grem

Порядок вычислений здесь не определён, разве нет?

Очень даже определён. В частности конструкции вида p && p->flag правильно работают исключительно из-за этого.

bugfixer ★★★★★
()
Ответ на: комментарий от monk

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

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

yu-boot ★★★★★
()
Ответ на: комментарий от maxcom

возможность применить знания на практике для решения прикладных задач

А толку то, если даже Эдик, активно применяющий Си для прикладных задач, забывает выделять место под символ конца строки и считает «работает же».

grem ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Через строковый тип. String/UnicodeString. Разница большая.

saahriktu ★★★★★
()
Ответ на: комментарий от yu-boot

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

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

Zhbert ★★★★★
()
Ответ на: комментарий от yu-boot

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

В первых двух явно указано (с поправкой на синтаксис ЯП), что оба счётчика меняются параллельно. На Паскале параллельное изменение двух счётчиков сделать конструкцией языка нельзя. Можно либо сделать один более главным (и у читающего возникнет вопрос: почему именно этот?) либо переделать вообще в while.

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

Вы точно не любите паскаль? Для сишника первый вариант — общеиспользуемая идиома. Например

char *strncpy(char *s1, const char *s2, int n)
{
  char *r = s1;
  for(int i = 0; i<n && *s2; s1++, s2++, i++) *s1 = *s2;
  *s1 = 0;
  return r;
}
monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от yu-boot

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

apex
()
Ответ на: комментарий от Zhbert

которые стремятся писать код как можно более непонятно

Понятие «непонятности» оно весьма относительно. При определенной квалификации понять что делает код можно всегда, не всегда очевидно почему автор написал именно так и чего пытался добиться (особенно при наличии на поверхности более простых решений).

Имхо, люди которые целенаправленно обфускейтят код - профнепригодны.

bugfixer ★★★★★
()
Ответ на: комментарий от pihter

Имхо это очевидный switch..case..break. Можно ещё цикл с выходом из середины, те же яйца в профиль.

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

yu-boot ★★★★★
()
Ответ на: комментарий от bugfixer

мнение всеми уважаемого дядьки Линуса

Pascal, where labels cannot be descriptive

Да, очень ценное мнение действительно уважаемого дядьки.</sarcasm>

unC0Rr ★★★★★
()
Ответ на: комментарий от yu-boot

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

Везде не надо. Надо там где это оправдано. Загляните в код ядра - там есть масса примеров грамотного применения.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

При определенной квалификации понять что делает код можно всегда

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

Zhbert ★★★★★
()
Ответ на: комментарий от bugfixer

Да и не является умение написать нечитабельную портянку признаком квалификации.

Zhbert ★★★★★
()
Ответ на: комментарий от saahriktu

Да. Чет я тупанул под вечер.

Ну в любом случае приколхоживать ЦИКЛ, заставляя его проходить один раз – всяко менее читаемо, чем явный переход

pihter ★★★★★
()
Ответ на: комментарий от Xenius

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

slepoy_pew
()
Ответ на: комментарий от monk

Нет. && и || гарантированно прекращают вычисление после первого результата, позволяющего получить ответ.

Хм. Это прямо гарантированно и не зависит от реализации? Это всегда так было или начиная с какого-то стандарта? Это только в си так или в си-подобных языках тоже принято? А порядок вычисления определен?

В любом случае – спасибо за науку: я не занл

pihter ★★★★★
()
Ответ на: комментарий от monk

а на нормальных языках …

Rly?

for i from 0 to 9

Я не могу никак запомнить to 9 это включая 9 или до 9? Или вот until? Until таки точно до 9 т.е. максимум будет 8, а значит to включает! - Вот это мой внутренний диалог когда я вижу такой код!

Оцените Kotlin:

for (i in 8 downTo 1 step 2) print(i)

Мне приходится напрягаться чтоб понять как работает этот код. Что такое step 2, это будет 8,5,2 или 8,6,4,2 т.е. к обычному downTo прибавляется 2? Или все операции по умолчанию step 1 но мы явно переопределяем значение step?

В то время как на c/c++/java все кристально чисто:

for (int i = 8; i >= 1; i-=2) print(i)

Ведь этот код проще! Ты запомнил как писать арифметические операции и операции сравнения и используешь их везде!

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

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от Zhbert

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

Одна из причин почему всегда и надо стремиться к «самому простому решению которое скорее всего сработает». Одна из ключевых идиом экстремального программирования, кстати ;)

bugfixer ★★★★★
()
Ответ на: комментарий от pihter

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

slepoy_pew
()
Ответ на: комментарий от pihter

Да. Вот сводная портянка где как принято: ссылка.

В общем, везде, где пишется именно && и ||, принято именно вычисление по короткой схеме.

monk ★★★★★
()
Ответ на: комментарий от MOPKOBKA

А в паскале строки реализуются через специальный строковый чип?

да

Какая разница через что они реализуются.

тогда и в брейнфаке строки есть

pihter ★★★★★
()
Ответ на: комментарий от MOPKOBKA

А в паскале строки реализуются через специальный строковый чип?

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

slepoy_pew
()
Ответ на: комментарий от Aber

Я не могу никак запомнить to 9 это включая 9 или до 9?

to - включая, below не включая. В паскале не возникает сомнений to 0 включая или нет. А аналога below в паскале вообще нет.

Ведь этот код проще!

Для одной переменной да. А когда их 3-4, то у тебя сначала инициализация всех четырёх, потом проверка условия всех четырёх, потом шаг по всем четырём.

Видел документ, где заявку на трёх владельцев заполняли. Так там, в фамилию написали три фамилии через запятую, в имя - три имени, в индекс прописки - три индекса, … Вот читать сложный цикл на Си примерно также - по каждой переменной приходится сложить три куска из разных мест.

monk ★★★★★
()
Ответ на: комментарий от monk

я про свой опыт написал, 1990-2001гг - школа. универ 2001-2006

etwrq ★★★★★
()
Ответ на: комментарий от pihter

Так кому как. С goto обычно борются как раз в рамках борьбы с лапшекодом. В Basic'е ещё gosub есть. Особенно активно gosub использовался в диалектах Basic'а, где не было функций. Суть там примерно такая же: переход на тело функции осуществляется через gosub вместо goto, а в конце функции стоит «return», по которому происходит возврат к тому месту, откуда был вызван gosub. Но читать это всё многим было сложнее чем структурный код на Си/Паскале/Фортране.

saahriktu ★★★★★
()
Ответ на: комментарий от monk

for(int i = 0; i<n && *s2; s1++, s2++, i++) *s1 = *s2; *s1=0;

while(n-->0) (*(s1++)=*s2++)||break; /* Си-шая идиома: не рожать лишних переменных и писать так чтобы "паскалист" не разобрался :-) */
MKuznetsov ★★★★★
()
Ответ на: комментарий от monk

Вместо «ГОТУ МЕТКА» писать «Возврат

Множественный возврат ещё большее зло

Psilocybe ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.