LINUX.ORG.RU
Ответ на: комментарий от JaneDoe

Кстати, в паскале уже можно реализовать ReadLn средствами языка?

Лет 20 как, с разморозкой.

redgremlin
()
Ответ на: комментарий от Norong

Хочу научиться программированию. Не знаю, в какой области буду в будущем прикладывать, поэтому интересует что-то типа «классики».

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

Единственное что хочется отметить, если ранее ты не сталкивался серьёзно с изучением программирования, то ни в коем случае не изучай C++ по книге Страуструпа, для новичка идеальный вариант это книга «Х.М. Дейтел, П.Дж. Дейтел Как программировать на C++», там сначала подробно разжёвывают самые азы (как если бы ты изучал просто C) постепенно переходя на более сложные материи.

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

C++ т.к. он включает в себя ООП, которого в языке C нет.

лол

anonymous
()

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

thesis 😊😊😊😊😊
()

Довольно странно начинать обучение программированию с любого из этих языков: C слишком низкоуровневый (чтобы написать хоть что-то, имеющее реальную отдачу, нужно осознать много непрофильных вещей вроде типов данных, указателей, управления памятью), а C++ слишком замороченный и неочевидный (поди объясни неофиту сходу, почему cout << 12 печатает число, а 1 << 12 делает что-то другое).

Сам в свое время начинал с BASIC на spectrum-е. Думаю, что и по сей день BASIC — годный язык для начинающего.

kawaii_neko
()

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

Естественно, начинать с высокоуровневых языков нельзя: кроме говнокода ничего не выйдет.

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

ни в коем случае не изучай C++ по книге Страуструпа

У Страуструпа кроме «Языка программирования» есть еще и «Программирование. Принципы и практика». Вроде бы более щадящий вариант, написанный для новичка. Правда, по объему он от «Языка» не отстает.

JaneDoe
()

Потому что С++ - это ООП, поэтому если с него начинать, то придётся решать сразу две задачи: учиться собственно программированию ЭВМ и осваивать объектно-ориентированный подход. В итоге есть вероятность запутаться и не понять ни того, ни другого. Кстати, начинать сразу с Си - тоже не лучшая идея, потому что Си - это профессиональный, а не учебный ЯП, в нём многое реализовано так, чтобы решать задачи эффективно, но не всегда понятно. А учиться программированию лучше по такой схеме: BASIC->Pascal->C->{C++,Python,Perl,...}

x-signal
()
Ответ на: комментарий от kawaii_neko

basic это укоцанный до ассемблера(см wang-)fortran - так что если тока как асм многорегистровой машины basic годен как язык для начинающих - тогда уж можно dc ( man dc) как язык для начинающих - там(в dc) хоть Quine-прога клёвая - почти как в HQ9

qulinxao
()
Ответ на: комментарий от x-signal

Потому что С++ - это ООП

откуда вы все???(не, ну биологически очевидно - но вот что за система образования то )

попробуй С++ with STL and without class

qulinxao
()
Ответ на: комментарий от x-signal

всёж отсутствие(до сих пор) шаблонов в чистом С хоть и легко обходится самопальным препроцессингом но stl как идея (а она и на схеме была как и на аде как и на чистом Си) - редко когда/где в экосистеме чистого Си исползуеится

где аналог того же бууста для чистаСи???

qulinxao
()
Ответ на: комментарий от Norong

Паскаль в рамках школьной программы.

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

ya-betmen 😊😊😊😊😊
()
Ответ на: комментарий от ya-betmen

При такой постановке вопроса ищи вакансии джуна в том городе где хочешь работать и смотри требования.

Это что шутка такая? При такой постановке вопроса надо искать работу в другой области, потому что практически с нуля учиться программированию и одновременно с этим искать работу программистом - это нонсенс.

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

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

ya-betmen 😊😊😊😊😊
()

Потому что поехавших маньяков и так достаточно.

devl547 👍👍
()

Потому что С++ нереально сложен, а для обучения нужно что-то простое как три рубля. Посмотри на объём учебника по крестам (учебник прата больше 1000 страниц) и по си (k&r 250 страниц) - сравни и подумай. И это при том, что после k&r в принципе больше ничего не надо, а после учебника прата нужно прочитать ещё 5 книжек про всякие нюансы языка. Такие дела.

no-such-file 👍👍👍👍👍
()
Ответ на: комментарий от greenman

Как считаешь, надо для этого знать ассемблер?

Хотя бы в общих чертах. Чтобы видеть, происходит ли вызов или инлайн, развернут ли цикл, применилось ли (N)RVO

Uter
()

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

hotpil
()
Ответ на: комментарий от anonymous

Что тут обосновывать, всё и так очевидно: Rust в общем менее гибок плюсов и не менее сложен в разработке благодаря своей ссылочной семантике, заморочками с lifetime-ами и упёртостью его разработчиков. Последнее в основном выражается в навязывании некоторых стилей разработки через костыли и неприятие альтернативных подходов (например, наследование, исключения ... всё предлагают костылить через композицию руками).

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

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

mashina
()
Ответ на: комментарий от anonymous

Естественно, начинать с высокоуровневых языков нельзя: кроме говнокода ничего не выйдет.

Оказывается, MIT говнокодеров выпускает.

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

Оказывается, MIT говнокодеров выпускает.

А ты не знал? Для кого-то это еще новость?

anonymous
()
Ответ на: комментарий от mashina

В сухом остатке: Rust в относительно скором времени (когда поправят всякие шероховатости с массивами фиксированной длины, специализацией трейтов, удобным IDE и прочим), будет полноценным конкурентом С++. Постепенно, с добавлением поддержки различных платформ, станет и конкурентом С.

До «примерно одной мажорной фичи» Rust'а С++ не доберётся никогда из-за груза обратной совместимости. А именно эта мажорная фича (гарантированно безопасная работа с памятью) позволяет избавиться от уязвимостей, приводящих к удалённому выполнению кода, упоминание о которых вы внимательно пропустили мимо глаз.

Очень рекомендую почитать http://www.cvedetails.com/vulnerability-list/cvssscoremin-9/cvssscoremax-10/v...

red75prim
()
Ответ на: комментарий от mashina

считающих что одной мегафичей можно побороть человеческую глупость

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

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

red75prim
()
Ответ на: комментарий от ya-betmen

Хорошая книжка, кстати. Любимая, моя, книжка.

Мимо-молчун.

pawnhearts
()
Ответ на: комментарий от red75prim

Rust в относительно скором времени ... когда поправят всякие шероховатости ...

Мечтать не вредно, главное заранее губозакатываетль приобрести.

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

Мог бы не вылезать сюда с «Киселёвской пропагандой» из методички, этот бред наивных дурачков видели все кому он даже не особо нужен.

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

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

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

Очень рекомендую почитать...

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

Что же там можно обнаружить: а) ошибки работы с памятью далеко не единственные в этом мире и даже не являются подавляющими; б) много ошибок касаются Си-шного кода и значительная их часть во всяих прошивках и ядрах, где и так будут часто использовать unsafe { ... } когда туда доедет Rust; в) существует куча ошибок вне c/c++ сводящих на нет любые потуги повышения безопасности системного кода.

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

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

Чей действительности не соответсвует если я, например, в этой уже встал в такую позу? Как же тебе поможет Rust с подобной спутанностью мыслей...

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

этот бред наивных дурачков

Аргументы будут? Достаточно примера кода без unsafe, содержащего уязвимость, приводящую к удалённому выполнению произвольного кода.

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

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

Большинство ошибок случаются именно из-за пренебрежения этими техниками

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

ошибки работы с памятью далеко не единственные в этом мире и даже не являются подавляющими

Давайте посмотрим. 3 buffer overflow, misconfiguration, не указано (remote code execution), misconfiguration, не указано (elevation), не указано, не указано (logic error?), 60 уязвимостей у Adobe (code execution, memory corruption), не указано, integer overflow, 2 не указано (code execution) ну и так далее.

Большинство ошибок в порядке убывания: ошибки в работе с памятью (как иначе можно получить remote code execution?) (и не только у Adobe), ошибки в конфигурации, sql injection, ошибки работы с правами доступа. Так что читайте больше.

где и так будут часто использовать unsafe

За unsafe бить по рукам намного проще, чем за то, что не заметил, что UB в коде в комплекте с оптимизатором привели к удалению проверки на null или чему-нибудь повеселее.

существует куча ошибок вне c/c++

Три-четыре примера реального взлома с использованием этой кучи ошибок? Ошибки в железе, надо полагать?

кардинально в целой картине ничего не меняя

Ещё раз, пожалуйста, посмотрите на список CVE. 11328 критических уязвимостей. Около половины из них - remote code execution.

качество разработки на плюсах

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

Как же тебе поможет Rust с подобной спутанностью мыслей...

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

red75prim
()
Ответ на: комментарий от mashina

останется навечно маргинальщиной

недоучек-романтиков

губозакатываетль приобрести

бред наивных дурачков

У тебя явно что-то личное против Rust. Ты не strncat часом?

tailgunner
()
Ответ на: комментарий от anonymous

И полностью переформатировать мозг, т.к. С++ настолько радикально отличается от С, что нужен совершенно иной стиль мышления, чтобы на С++ писать! Я, например, даже и не пытаюсь уйти в С++, потому как не имею объектно-виртуального стиля мышления.

anonymous
()

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

Умение же писать на С++ зависит в основном от знания его рантайма и синтаксиса, а далее от веры, кастылей и прочего.

Потом, когда умение сишки будет в районе «уровень господь» - тогда кресты будут казаться примитивной хернёй.

AnonCxx
()
Ответ на: комментарий от anonymous

Я, например, даже и не пытаюсь уйти в С++, потому как не имею объектно-виртуального стиля мышления.

Он и не нужен.

tailgunner
()
Ответ на: комментарий от red75prim

Достаточно примера кода без unsafe, содержащего уязвимость, приводящую к удалённому выполнению произвольного кода.

Раз,
Два,
Три, обрати внимание на функцию os.system и варнинг про неё,
Четыре, дада, постскрипт тоже тюринг-полный язык, можно выполнять произвольный код,
Пять, сам когда-то делал файл ГолаяКурикова.ziр, в котором в URI запихивал fork bomb, ЛОЛ.

Так что выдыхай, бобёр, выдыхай...

shkolnick-kun
()
Ответ на: комментарий от anonymous

С++ настолько радикально отличается от С,

Си как и С++ состоит из мощи синтаксиса. Если ты можешь в реальный си - ты можешь в синтаксис.

что нужен совершенно иной стиль мышления, чтобы на С++ писать

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

AnonCxx
()
Ответ на: комментарий от shkolnick-kun

Ойвей! И с каких пор они там выше?

Да много лет как. Как С/С++ начали перерастать.

90% сишников - это не сишники, а те, кто по волею судеб вынужден писать на сишке. Вчера писал на фортране - он сдох - пишет на сишке. Писал на паскалике - он сдох - пишет на сишке. Хелворды на днищемкашках - там вообще никакого скилла не надо.

Среди этих адептов качество кода вообще не котируется. Сри как угодно лишь-бы насрать.

Крестовикам хоть мозги промыли кодгайдами, они пишет не в нотепаде, не на днище рантайме как 90% крестовиков. У них больше примеров, ибо серьёзный си код находится в серьёзных проектов, которые ньюфаги читать не могут. У крестовиков с этим проще.

Плюс в крестах больше сахара, а те 90% сишку знают на уровне «массивчики/функции/операции/принтф» - т.е. на уровне первого курса.

AnonCxx
()
Ответ на: комментарий от shkolnick-kun

Раз - я просил без unsafe, FFI функции unsafe.

Два, три, пять - это - да, выполнение произвольного shell-кода возможно. Впрочем, сделать ошибку при выполнении команд системы сложнее, чем при использовании system(3):

Command::new("ls").arg("; bash").output()
не запускает баш, а возвращает ls: cannot access '; bash': No such file or directory. Да, Command::new("ls; bash") тоже не запускает баш.

Четыре - я просил уязвимость. Выполнение произвольного постскрипт кода сложно назвать уязвимостью.

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

Четыре - я просил уязвимость. Выполнение произвольного постскрипт кода сложно назвать уязвимостью.

http://stackoverflow.com/questions/5136164/is-there-a-file-io-in-postscript-f...

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

shkolnick-kun
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от red75prim

И да, исходный тезис был

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

Так вот, ни хрена она не позволяет.

shkolnick-kun
()
Ответ на: комментарий от shkolnick-kun

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

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

По факту Rust не спасёт от выполнения произвольного кода.

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

И в случае автоматизированной системы это должен быть не матюгальник, который ругается на все подряд, а генератор кода, который анализирует зависимости и сам делает Box Rc Arc Mutex и так далее.

shkolnick-kun
()
Ответ на: комментарий от umren

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

Kuzy
()
Ответ на: комментарий от red75prim

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

Нельзя. Это было бы верно, если бы pvs-studio находило _все_ ошибки.

Эти данные (без дополнительных данных), на самом деле, вообще ничего не дают. Можно точно так же сказать, что они показывают какие ошибки может находить pvs вообще.

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