С чего начинать обучение программированию? паскаль или...?[re: ]

palitik8

но по-моему старый добрый паскаль
 Мёртвый язык. :(
 Задачки надо уметь решать, хоть блок схемами для начала или в консоли.
 А вообще для того чтобы работать с компьютером не обязательно быть программистом вёрстка, web и прочие вещи.

yroslavasako

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

Dasar

учебный язык. И для учёбы весьма полезный. Учебные самолёты по техническим характеристикам тоже сильно отстают от боевых, но летать учат именно на них
это устаревший учебный язык, также как какой-нибудь учебный самолет У-2

yroslavasako

Отсюда есть два вопроса
1) Есть современные учебные языки?
2) Необходимо ли прежде чем осваивать объектно-ориентированные (статические и динамические) познакомиться с процедурным программированием?

Serab

устаревший
по каким параметрам он устарел по-твоему? Ну т.е. почему нельзя научить программировать на паскале? Или что есть более удачное в этом смысле?

palitik8

1) Есть современные учебные языки?
 Нужны ли быдлокодеру учебные языки ?
 И нужны учебные языки вообще ?
 В 67-ом это казалось неплохой идеей, а сейчас ?
 ИМХО учебная среда разработки это наверное нужно, а специализированный язык знания которого никогда больше не пригодятся ? Зачем ? :confused:

Dasar

Отсюда есть два вопроса
1) Есть современные учебные языки?
скорее - нет, чем - есть.
но в тоже время часть современных языков общего назначения, например, python, ruby, c#, java - подходят для обучения больше, чем специально созданный для обучения паскаль.
2) Необходимо ли прежде чем осваивать объектно-ориентированные (статические и динамические) познакомиться с процедурным программированием?
нет, не надо.
полезных особенностей у процедурных языков я не знаю.
особой простоты, по сравнению, с ооп или фя - тоже не заметно.

Dasar

по каким параметрам он устарел по-твоему? Ну т.е. почему нельзя научить программировать на паскале?
в первую очередь - устарел по удобству.
intellisence - нет.
есть разделение на хедеры и тело
при компиляции - выдается по одной ошибке.
нет сборки мусора
малое кол-во структур данных (наличие map-а не помню; про строки уже тоже кстати говорили)
малое кол-во алгоритмов для обработки структур данных

Serab

в первую очередь - устарел по удобству.
intellisence - нет.
Юзать Delphi.
есть раздение на хедеры и тело
Странный недочет, не понимаю =)
нет сборки мусора
почему в языке для обучения должен быть сборщик мусора? (да и вообще в каком-либо другом, тоже не понимаю)
малое кол-во структур данных (наличие, map-а не помню; про строки уже тоже кстати говорили)
малое кол-во алгоритмов для обработки структур данных
этого всего _не_ должно быть в языке для обучения. Это надо научиться писать самому, а потом только пользоваться ништякам.

Dasar

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

Katya19

Мы бы НИКОГДА не взяли на позицию software engineer или research engineer человека, который не в состоянии самостоятельно реализовать список или quicksort. Причины этого столь очевидны, что я даже и объяснять их не буду.

Dasar

Мы бы НИКОГДА не взяли на позицию software engineer или research engineer человека, который не в состоянии самостоятельно реализовать список или quicksort. Причины этого столь очевидны, что я даже и объяснять их не буду.
какое это отношение имеет к обучению программирования?
это уже профессиональное владение программированием, а обучение начинается с базового владения, а не профессионального.

karkar

На первом курсе ВМК идет обучение с нуля, и там именно паскаль и именно всякие списки, деревья и сортировки (по крайней мере так было 10 лет назад. сейчас поменялось, кстати?) Так что это именно обучение. В профессиональной деятельности сортировки практически никто не реализует сам, для этого уже есть готовые библиотеки.

spitfire

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

yroslavasako

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

markmsk

Сообщение удалил

markmsk

Я не раз наблюдал мучительно тяжёлый переход от программирования на C# к C++,
----------
А водил, которые мучительно пересаживались с мерседеса на запорожец не наблюдал?

yroslavasako

А водил, которые мучительно пересаживались с мерседеса на запорожец не наблюдал?
у тебя некорректное сравнение. С++ не менее полезен, чем C#, просто для разных отраслей. Хотя, честно говоря, для чего нужен C#, когда есть java, я не представляю

yroslavasako

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

agent007new

для чего нужен C#, когда есть java, я не представляю

И пусть весь мир подождет :)

yroslavasako

Там где критична скорость юзают c++ или с. А для реализации корпоративной бизнес-логики хватает и java, да и серверные технологии её сильно развиты

Dasar

Я не раз наблюдал мучительно тяжёлый переход от программирования на C# к C++,
а я еще больше видел людей, которые не смогли освоить C++ (как первый опыт программирования) и программирование бросили вообще - хотя способности у них были, и при изучении в обратном порядке - допустим python/c# => c++ - шансы у них тоже были.
даже если брать ВМиК - то там от силы программирование освоили - 5-10%, хотя математику освоили все.
и, на мой взгляд, как раз из-за того, что обучение начинается со всякой херни типа паскаля и си

356ft85

даже если брать ВМиК - то там от силы программирование освоили - 5-10%, хотя математику освоили все.
математику все и так знали (основу). а вот те кто знал проганье (основу) до универа в таком же объёме как и математику , не испытывали трудностей ни с паскалём, ни с асмом. и дело не в паскале - были люди которые не сразу понимали что такое рекурсия, безотностильно языка программирования..

Dasar

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

dimi61

> само программирование - это чисто утилитарный навык - такой же как читать/писать/складывать.
Почему-то дети учатся читать по слогам, писать по прописям и складывать по упражнениям.
> также как, например, для того, чтобы писать (в том числе и грамотно) - не надо знать какого спряжения глагол бежать
И зачем же, по-твоему, в школе проходят спряжения? Из любви к филологии? Да нет, просто без знания спряжений ты не напишешь орфографически правильно слово "чешут" или "плачете". А "бежать" относят к исключениям (и зубрят это) просто чтобы не возникло желания на него ориентироваться.
Короче, не вижу смысла учить в универе программирование иначе чем с серьезных основ: алгоритмы, машинный язык, языки навроде Си. Паскаль, на мой взгляд, может быть чуть-чуть полезен, чтобы те, кто не одолел бы Си вовсе, получали за него положительные оценки.
И мой личный (скудный) опыт общения с ВМКшниками показывает, что математики они особо не знают (как средний физфаковец, скажем, или чуть получше а вот программируют легко.

Dasar

И зачем же, по-твоему, в школе проходят спряжения? Из любви к филологии? Да нет, просто без знания спряжений ты не напишешь орфографически правильно слово "чешут" или "плачете". А "бежать" относят к исключениям (и зубрят это) просто чтобы не возникло желания на него ориентироваться.
напомни, пожалуйста:
1. в каком классе проходят спряжения.
2. в каком классе учатся писать.
3. сколько людей (в процентах) после школы помнит - какого спряжения слова бежать, ходить, прыгать.
4. сколько людей (в процентах) после школы - грамотно(в целом) пишет.

dimi61

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

nikita270601

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

Dasar

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

dimi61

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

Dasar

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

dimi61

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

Dasar

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

dimi61

> нужно учить только то, за что платят?
ты забыл, с чего начинался тред?
> тебе за умение грамотно писать - сколько платят?
20 долларов за 1000 знаков
> а за то - что ты считать умеешь - тоже приплачивают?
нет, это мне за умение писать приплачивают, а за умение считать мне платят зарплату

Dasar

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

Dasar

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

Serab

скажу крамольную мысль: что рекурсия - это сложная абстрактная математическая концепция, и к программированию, в целом, никакого отношения не имеющая.
Тут уже давали ссылку: http://www.joelonsoftware.com/articles/fog0000000073.html
15 years of experience interviewing programmers has convinced me that the best programmers all have an easy aptitude for dealing with multiple levels of abstraction simultaneously. In programming, that means specifically that they have no problem with recursion (which involves holding in your head multiple levels of the call stack at the same time) or complex pointer-based algorithms (where the address of an object is sort of like an abstract representation of the object itself).

SPARTAK3959

И зачем же, по-твоему, в школе проходят спряжения? Из любви к филологии? Да нет, просто без знания спряжений ты не напишешь орфографически правильно слово "чешут" или "плачете". А "бежать" относят к исключениям (и зубрят это) просто чтобы не возникло желания на него ориентироваться.напомни, пожалуйста:1. в каком классе проходят спряжения.2. в каком классе учатся писать.3. сколько людей (в процентах) после школы помнит - какого спряжения слова бежать, ходить, прыгать.4. сколько людей (в процентах) после школы - грамотно(в целом) пишет.
Спряжения проходят в 3 классе, если не раньше. Я отчетливо помню, как я задал вопрос о глаголе "бежать" который отсутствовал в списке исключений в учебнике, и учительница начальных классов пыталась убедить меня, что это слово к исключениям не относится. Но ей это не удалось :grin: - с логикой у меня уже тогда все было в порядке, хотя свою ошибку она так и не признала.

Dasar

Спряжения проходят в 3 классе, если не раньше.
первая же ссылка ya.ru: глагол спряжение школа - говорит, что это это 6 класс
http://www.edu-reforma.ru/load/2-1-0-1039

Werdna

Мы бы НИКОГДА не взяли на позицию software engineer или research engineer человека, который не в состоянии самостоятельно реализовать список или quicksort. Причины этого столь очевидны, что я даже и объяснять их не буду.
Я вот честно признаюсь что без помощи интернетов сам quicksort не реализую.
Ну только если подсмотреть в STL сразу алгоритм, да. ;)

yroslavasako


qsort [] = []
qsort (p:xs) = qsort l ++ [p] ++ qsort g
where
l = [ y | y <- xs, y < p ]
g = [ y | y <- xs, y >= p ]

Dasar

code:
а на паскале? :)

alfadred

А с O(1) доп. памяти?

yroslavasako

а на паскале? :)
на паскале не спортивно, я его наизусть помню

uncle17

ну хоть блок-схемой - я его на пхп сделаю :grin:

agaaaa

На ФЯ это невозможно.

shudrik



На ФЯ это невозможно.
почему?

yroslavasako

почему?
+1.
Монстрячишь какоую-нибудь cps структуру и фя уже ничем от императивного не отличается

alfadred

На ФЯ это невозможно.
На чистом ФЯ нет, а в каждом конкретном могут быть средства. В Haskell это ST/IO и MArray.
А если не считать пространство, занимаемое результатом, то и на чистом вроде можно.

yroslavasako

На чистом ФЯ нет
бред. Я же говорил уже, что всякий ФЯ можно программировать в императивном стиле, только через жопу. И ключевое слово - cps.

Programs can be automatically transformed from direct style to CPS. Functional and logic compilers often use CPS as an intermediate representation where a compiler for an imperative or procedural programming language would use static single assignment form (SSA); however, SSA and CPS are equivalent (Kelsey 1995) [technically there are constructions in CPS that cannot be translated to SSA, but they do not occur in practice]. Functional compilers can also use Administrative Normal Form (ANF) instead of or in conjunction with CPS. CPS is used more frequently by compilers than by programmers as a local or global style.

alfadred

Результат отличается от иходного списка - значит, если полностью вычислить результат, он будет занимать O(n) памяти.
Если не считать размер результата - то да, получится.

bleyman

Тут уже давали ссылку: http://www.joelonsoftware.com/articles/fog0000000073.html
Чувак. Мы тут как бы не способ отличить охуенных программеров от быдлокодеров обсуждаем, а о том, как следует учить вообще ни разу не программистов, чтобы не создать у них ощущения того, что, во-первых, программирование — это дико сложно (и тут сразу отпадает схема например или что это дико нудно (требует бойлерплейта, создаёт ощущение смирительной рубашки) и непонятно зачем нужно (и тут отпадают вообще все языки кроме Питона).
Конечно, можно рассматривать происходящее по-спартански, типа если у тебя есть твоя личная школа обучения программированию, на выходе которой ты хочешь получить только мегапрограммистов, то отсеяние (по первому пункту, но, пожалуй, не по второму) тебе полезно. Но блин, как-то мы не о том наверное всё-же.
По поводу рекурсии: это действительно очень сложная концепция. То, что мы ей все в какой-то мере овладели, не делает её менее сложной, что доказывается элементарно: любой желающий может написать Y-Combinator на своём любимом языке и потратить неопределённое время на попытку _полностью_ понять, как именно он работает. А ведь там всего тройная вложенность!
@: между прочим, Eclipse+Pydev обеспечивает вполне приемлемый интеллисенс для небольших простых скриптов. Главное не забыть добавить свой проект в PYTHONPATH (или воспользоваться визардом и фигачить всё в src). Совершенно замечательно работает и даже делает go to definition (по F3) в библиотеки. Я тоже считаю, что этого недостаточно для работы с настоящими большими проектами, но для обучения — в самый раз.
Кстати, Pydev вместе с Extensions тут недавно стал опенсорсным и совсем не нагваре, если кому интересно.
@: это не квиксорт, блджад! Основная фишка квиксорта — в инплейсности и линейному проходу по массиву!

Serab

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

bleyman

Учить надо, в какой-то момент, когда они готовы воспринять.
К программированию как способу управлять всякими интересными девайсами чтобы они сами делали всякие интересные вещи, рекурсия имеет не большее отношение чем мемоизация или динамическое программирование. То есть понимание этого всего и ещё много чего нужно если ты хочешь быть профессиональным программистом, но, во-первых, наивно и более того вредно ожидать его от начинающих программистов, во-вторых, я бы например был бы дико рад если бы каждый чувак, имеющий доступ к компьютеру, мог бы его программировать хоть как нибудь, хотя бы и без циклов даже.
Алсо, где твой Y-combinator и объяснение, почему он работает? Давай, напиши, чё, рекурсия же должна быть доступна школьникам.

salamander

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

salamander

нужны учебные языки вообще ?
Предположим, сидит перед нами ученик, который ни разу в жизни ни одной программы не написал. Наша задача научиться его этому. Посмотрим, чего же мы хотим от языка проргаммирования, который будет использоваться на первом шаге.
1. Чтобы для написания первой программы можно было изложить как можно меньше информации.
Конечно можно сразу рассказать про идею функций, классов, бибилотек, динамических библиотек, системных вызовов, наследования и т.д., вот только без возможности сразу все это попробовать толку от рассказа будет мало.
2. Чтобы не было граблей, об которые ученик расшибет лоб.
Примером таких граблей могут служить '&' в scanf в языке C. Не то, чтобы их было сложно объяснить. Но вот если их случайно забыть написать, то ошибку бывает очень сложно найти, особенно человеку, который пишет вторую программу в своей жизни.
Еще одна грабля, свойственная языкам, где можно использовать переменные без предварительного их объявления: опечатался в имени переменной - лови непонятную ошибку, почему 2*2 оказалось равным 0.
3. Строгость и минималистичность.
Чему учится человек при написании первых программ? Строго до мельчайших подробностей излагать алгоритм да пользоваться при этом стандартными языковыми конструкциями (циклы, ветвления; в других языках они будут отличаться по синтаксису, но идейно останутся такими же). 102 различных способа записать цикл "for" и авотматическиое преобразование типов (которые вполне удобны при активном использовании языка в дальнейшем) здесь совершенно не нужны.
4. Стандартная бибилиотека? Да пофиг на нее.
В первых программах от нее требуются только функции ввода-вывода. Причем они должны иметь как можно более простой вид. Ученик еще не готов писать трехэтажные вызовы бибилотечных функций содержащие указатели на указатели, указатели на функции, переменное число параметров и прочие возможности языка. Не говоря уж про то, что работа с бибилотекой - это либо запоминание огромного количества функций, либо постоянное чтение документации. И то, и другое нежелательно на этом этапе.

nawok

Может быть Scratch для начала попробовать?

yroslavasako

мне кажется, он описывал паскаль

salamander

Пункты 1 и 2 появились как результат личного опыта рассказывания начал языка C. Пункты 3 и 4 - как контраргументы к .
А то, что получилось описание каких-то реально существующих языков, вероятно, является следствием того, что создатели этих языков руководствовались схожими идеями.

yroslavasako

кстати, как ты думаешь, имеет ли смысл начинать с функциональных языков а не императивных? С точки зрения математики они проще и логичнее

Dasar

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

Helga87

кстати, как ты думаешь, имеет ли смысл начинать с функциональных языков а не императивных? С точки зрения математики они проще и логичнее
начинающего надо быстро научить делать простые вещи. Тогда у него появится внутренний стимул развиваться дальше.
Я видел, как человек, впервые увидевший комп, за 10 дней заботал TurboPascal по книжке Фаронова и написал крестики-нолики в графическом режиме с поддержкой мыши и игрой компа.
Книжку по какому функциональному языку ты бы посоветовал дать такому человеку? Сможешь ли ты, со своим опытом, написать такие крестики-нолики на этом функциональном языке?

palitik8

2...(Грабли)
Примером таких граблей могут служить '&' в scanf в языке C.
Вообще-то учитывая важность указателей и ссылок я бы сказал, что "&" учить в начале даже нужно.
Еще одна грабля, свойственная языкам, где можно использовать переменные без предварительного их объявления

Вообще-то такие ошибки даже компиляторы "С" способны отслеживать.

Serab

Еще одна грабля, свойственная языкам, где можно использовать переменные без предварительного их объявления
Вообще-то такие ошибки даже компиляторы "С" способны отслеживать.
вообще-то язык "C" к таким языкам не относится.

Serab

Вообще-то учитывая важность указателей и ссылок я бы сказал, что "&" учить в начале даже нужно.
раньше ввода-вывода — сомнительно.

salamander

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

То есть тут проблема даже не в самих указателях, а в том, что функция scanf обладает переменным числом параметров и полноценная проверка типов на этапе компиляции отсутствует.

palitik8

что функция scanf обладает переменным числом параметров и полноценная проверка типов на этапе компиляции отсутствует.

Эти дурацкие запятые. :)

asdf123

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

asdf123

ошибок, лично
не обессудь

Dasar

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

Andbar

в первую очередь - устарел по удобству.
intellisence - нет.
есть разделение на хедеры и тело
при компиляции - выдается по одной ошибке.
нет сборки мусора
малое кол-во структур данных (наличие map-а не помню; про строки уже тоже кстати говорили)
малое кол-во алгоритмов для обработки структур данных
В целом по теме поддерживаю 'a, но это сообщение захотелось выделить особо, т.к. он кажется наиболее ярким примером требований выдвигаемых профессиональными программистами, но не педагогами (я, конечно, тоже не педагогом, однако по моим представлениям, для обучения требования совсем иные должны быть).
Известно что калькулятор (особенно инженерный) отрицательно сказывается на изучении математических дисциплин (во Франции, например, на экзаменах можно пользоваться инженерными калькуляторами, так там попадаются студенты, сдавшие сложнейший вариант ихнего аналога ЕГЭ и не умеющие складывать дроби). По идее, при изучении программирования продвинутые технические средства (тот-же intellisence облегчающие задачу, тоже могут не помогать а мешать.
По поводу выдачи ошибок - это даже хорошо, так как куча выданных ошибок (тем более что некоторые могут быть связаны с предыдущими может лишь пугать новичков, в конце концов, человек, начавший учиться программировать (кстати, мой школьный учитель считает, что научить программировать строго говоря невозможно, можно лишь попытаться помочь научиться).
Сборка мусора и соображения по поводу динамических языков... Одно время у нас в школе вели информатику по схеме: младшие (вроде с 7го класса, когда информатика начинается) изучали Питон: учились использовать черепашью графику и т.п. вещи. Через год изучали Паскаль и подход был более серьёзный. Тоже неплохая схема, особенно хорошо было бы давать выбор - продолжить изучение Питона (пусть даже частично самостоятельно) или изучать Паскаль.
Кстати, про строки. Именно в Паскале почти всегда (начиная с TP каких-то мохнатых версий, хз что там по стандарту, т.к. он для изначального обучения не нужен) была самая нормальная поддержка строк. Единственное, чего не хватало до появления Object Pascal'я - поддержки строк длиной более 255 символов. Во всём остальном всё отлично: их можно рассматривать как простые переменные и как массив символов (при чём нумерация символов строки начинается с 1, что более естественно для человека, никогда ранее не сталкивавшегося с программированием. Кстати, это касается любых массивов: индексам в Паскале не нужно начинаться с нуля).
Да, ещё одно. Всё, что я написал, касается в первую очередь первого языка для изучения в школе (есть мнение, что это нужно для того, чтобы научить старшеклассников думать но многие доводы имеют смысл и при обучении будущих программистов. Однако для последних есть дополнительное требование. В процессе обучения очень помогает желание реализовать какой-нибудь свой мелкий (или не очень мелкий) проект на изучаемом языке, чтобы был стимул изучать и развиваться. Соответственно, должна быть возможность реализации этого проекта средствами языка (пусть даже при этом проект не будет выглядеть профессионально).

bleyman

По идее, при изучении программирования продвинутые технические средства (тот-же intellisence облегчающие задачу, тоже могут не помогать а мешать.
Могут. А могут и наоборот помогать, а не мешать. Я не вижу причин, почему бы интеллисенс не помогал бы, а наоборот мешал. Ну то есть с одной стороны, конечно, умение запомнить точные сигнатуры всех необходимых функций, а так же минимизировать ущерб от переключения в хелп вроде бы полезное, а с другой — вроде бы и не очень, в наш-то просвещённый век. Может быть ещё редакторы со smart indent мешают развивать способность нажимать на таб или пробел необходимое количество раз, или подсветка синтаксиса лишает ученика жизненно важного умения считать в уме кавычки?
Единственное, чего не хватало до появления Object Pascal'я - поддержки строк длиной более 255 символов.
Угу, только ещё не было строк переменной, заранее неизвестной длины. Аж до дельфи, если мне не изменяет память. Ну то есть можно, конечно, использовать всюду String, но это как-то право странно.

Andbar

Ну то есть с одной стороны, конечно, умение запомнить точные сигнатуры всех необходимых функций, а так же минимизировать ущерб от переключения в хелп вроде бы полезное, а с другой — вроде бы и не очень, в наш-то просвещённый век.
Опять же, с какого-то момента это даже поможет, но вначале будет только отвлекать. Мне, например, не до конца понятна причина, по которой калькуляторы при умелом использовании могут помешать учёбе. Возможно, проблема в том, что их используют неправильно, заставляя выполнять упражнения, на которых должен тренироваться мозг. Аналогично - подсказки с параметрами функции. Гораздо полезнее для развития будет лишний раз открыть справку и посмотреть в ней.
Угу, только ещё не было строк переменной, заранее неизвестной длины. Аж до дельфи, если мне не изменяет память. Ну то есть можно, конечно, использовать всюду String, но это как-то право странно.
в чём странность? Это не проблема, пока у тебя строки меньше 256 символов, о чём я уже указал. А возможность указать строки меньшей максимальной длины - это как бонус. И передача в функцию строки другой максимальной длины тоже работала (если одна из директив была включена при чём превышение размера строки никогда не приводила к проблемам (помимо обрезанных строк хотя для тех-же сишных строк проблема buffer overrun'а типична (если не заботится об этом, что явно не для новичков).

Anna74

В развитие темы.
Просили спросить: как по-вашему, какой язык программирования (и среду разработки) давать как первый (а скорее всего и последний) в обычном вузе для гуманитариев и технарей при обучении азам программирования под названием информатика это всё кажись, на семестр или 2, с лабами.
Ответы типа "тот, который тамошние преподы считают, что они его знают" не предлагать :)
Де-факто дают кто turbo pascal в дос-окне, кто VBA из экселя. ОС - винда естественно. Желательно без большой доп. кучи устанавливаемого софта или если и ставтить, чтобы по-возможности свободное ПО без покупки доп.лицензий, а то вдруг при проверке дисплейных классов возьмут за жабры...
MS офис и так стоит. Ну и стандартно винда, инетэксплорер и т.д.
Спрашивают может JavaScript - прямо в эксплорере типа (VBScript не везде работает? да больно он помирает некрасиво при ошибках - обычно показывает голое окно и всё (или среда разработки есть, чтобы студента в конкретное место ошибки тыкала?). Типы ещё там левые, и объекты странные.
Ну короче, с каким программированием студентов познакомить как ликбез (сейчас на уровне рисования блок-схем и перевода "в программу" всё, да ещё объекты по-мелочи чтобы только работало)
Программить они не будут в своей дальнейшей работе, хотя может неплохо бы если бы умел 1 продвинутый студент из группы в VBA макросы программировать.
Вопрос философский - куда всё движется, в сторону линукс, работы в нтернете, или коммерческие ОС и софт форевер? Хотя преподы линукс сами не знают большей частью и в дисплейных классах поставить второй системой инженеры небось не смогут. Вроде школа на какой-то российский линукс переходить собралась и вузам может надо руку на пульсе держать - или это распил бабла?

Dasar

Де-факто дают кто turbo pascal в дос-окне, кто VBA из экселя. ОС - винда естественно. Желательно без большой доп. кучи устанавливаемого софта или если и ставтить, чтобы по-возможности свободное ПО без покупки доп.лицензий,
как вариант, вместо первого - visual studio C# express (он бесплатный вместо второго - visual studio basic express (тоже бесплатный)

serega1604

java + eclipse

Andbar

Де-факто дают кто turbo pascal в дос-окне
Вообще-то есть freepascal.
Имхо: в этом разделе много программистов, но мало педагогов, а лучше всего спрашивать у педагога, знакомого с программированием (и знающего несколько языков, чтобы иметь возможность сравнивать).

yroslavasako

как по-вашему, какой язык программирования (и среду разработки) давать как первый (а скорее всего и последний) в обычном вузе для гуманитариев и технарей при обучении азам программирования под названием информатика это всё кажись, на семестр или 2, с лабами.
Если не нужно учить программировать - то python+QT как самое простое
Вопрос философский - куда всё движется, в сторону линукс, работы в нтернете, или коммерческие ОС и софт форевер? Хотя преподы линукс сами не знают большей частью и в дисплейных классах поставить второй системой инженеры небось не смогут. Вроде школа на какой-то российский линукс переходить собралась и вузам может надо руку на пульсе держать - или это распил бабла?
В сторону линукс движется. Для обучения программированию он однозначно удобнее, вопрос в наличие квалифицированных преподавательских кадров. Хотя в одной школе видел OpenVMS, поднятый местным энтузиастом.
Работа в интернете ортогональна проприетарности продукта. Вот гуголь насквозь проприетарный, а в инете даёт работать бесплатно и завоёвывает симпатии кучи леммингов

Gaishnik

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

yroslavasako

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

yolki

Я преподаю программирование на 1 курсе мехмата, можно сказать уже лет 9.
моё имхо:
если изучение программирования начинается в старших классах (10-11 то
начать изучение стоит с паскаля. в качестве компилятора взять фрипаскаль. обучаемый должен понимать, как пользоваться командной строкой и автоматизированной сборкой через make. должен понимать разницу между редактором и компилятором. должен понимать, что подсветка синтаксиса и прочий интеллисенс - это причмоки. (я не спорю, это очень сильно помогает в повседневной жизни, но при обучении [имхо] стоит попытаться их не использовать).
если изучение начинается в средних классах (5-7 то стоит начать с интерпретируемых языков, в первую очередь - python.

FRider

если научить понимать разницу, то пусть пользуют подсветку, что тут такого? :) Любой нормальный простенький редактор сейчас подсвечивать может

Anna74

А если изучение программирования начинается с 1 курса обычного вуза? Предметы компьютерного цикла информатика (на котором VBA дают или pascal) и интернет-технологии (html дают ещё есть "выч.техника и программирование" на параллельной кафедре и опять дают программирование (вроде даже qbasic) + чмы по-мелочи - численное решение уравнений и числ.интегрирование + азы сортировки. Вроде всё как-то неправильно имхо.

yroslavasako

А если изучение программирования начинается с 1 курса обычного вуза?
тогда машина тьюринга :D

apl13

Реквестую лямбда-исчисление! :bud: :ole: :enjoy:

yroslavasako

это будет их вторым языком :)

margadon

All glory to the BrainFuck!

sav1976

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