2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Изучение программирования
Сообщение02.03.2014, 22:25 
Заслуженный участник


27/04/09
28128
(В продолжение предыдущего моего сообщения.) И вообще, не обязательно же изучать один «первый» язык до посинения. Как только основные понятия уложатся в голове, стоит начать изучать вместе с одним и другой язык.

warlock66613 в сообщении #832089 писал(а):
Нет, замыкания - это отдельная песня.
А тип-делегат-то значениями имеет замыкания… Почему отдельная?

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение02.03.2014, 22:28 
Заслуженный участник


02/08/11
6892
arseniiv в сообщении #832049 писал(а):
Странно, что сюда из других тем ещё не пришли люди, советующие начинать с, например, Scheme. :-) Почему бы и нет?
Действительно странно. Минимально ожидаемый кворум определённо включает Java и Python. До кучи не помешали бы Forth, Lisp и Haskell, а также, не к ночи будь помянут, Objective C.

-- 02.03.2014, 23:34 --

arseniiv в сообщении #832090 писал(а):
А тип-делегат-то значениями имеет замыкания… Почему отдельная?
Потому что делегат - это одно, анонимный делегат - другое, а анонимный делегат с замыканием - третье. Например, в .NET делегаты есть, а анонимных делегатов и замыканий нет. Замыкания в C# представляют собой "синтаксический сахар".

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение02.03.2014, 23:47 
Заслуженный участник


27/04/09
28128
Хм, да, действительно, классы генерирует… Ерунду написал, значит. :oops:

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 00:44 
Аватара пользователя


22/09/09

1907
arseniiv в сообщении #832090 писал(а):
(В продолжение предыдущего моего сообщения.) И вообще, не обязательно же изучать один «первый» язык до посинения. Как только основные понятия уложатся в голове, стоит начать изучать вместе с одним и другой язык.
Забавно!: в теме поставлен однозначный вопрос: "Хочу изучить программирование", а тут обсуждение свелось к изучению языков. Язык - это инструмент для реализации алгоритмов (и структур данных) в программы. Чтобы научиться программировать, нужно 1) изучить важнейшие алгоритмы, 2) научиться реализовывать их в программы и доводить эти программы до работающего состояния. Для этого нужно освоить (не до посинения!) достаточно удобный, простой, но в то же время универсальный язык. Один! Зачем начинающему, выучив один язык, кидаться на другой? -Только время терять! Разве уровень программиста определяется количеством изученных языков? (Конечно, на практике для "продвинутого" полезно знать несколько языков, но это другая тема.)

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 12:39 
Заслуженный участник


27/04/09
28128
bin в сообщении #832129 писал(а):
Зачем начинающему, выучив один язык, кидаться на другой?
Что вы понимаете под «выучив язык», выучив вместе со стандартной библиотекой? Если так, это долго, я предлагаю добавлять (а не «кидаться») в рассмотрение второй язык уже после того как перевод алгоритмов и что вообще можно с ними делать, станут понятными. Конечно, толку от изучения паскаля вместе с си будет меньше, чем от изучения схемы вместе с си, но от изучения одного си будет ещё меньше: лучше пораньше понять, что можно писать по-разному.

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

bin в сообщении #832129 писал(а):
Только время терять!
(1) Как вы собираетесь узнать, потеряно ли время? Оно может быть потеряным в любом варианте будущего, и есть даже причины ему потеряться именно от знания единственного языка. (2) А зачем минимизировать время?

bin в сообщении #832129 писал(а):
Разве уровень программиста определяется количеством изученных языков?
Действительно, не совсем. Но это тут и ни при чём.

bin в сообщении #832129 писал(а):
Конечно, на практике для "продвинутого" полезно знать несколько языков, но это другая тема.
Для любого полезно знать несколько языков. Или хотя бы представлять себе их в той мере, чтобы можно было начать что-то писать, при этом без логических ошибок, вооружившись всеми справочниками по нему.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 14:16 
Аватара пользователя


22/09/09

1907
arseniiv в сообщении #832189 писал(а):
Что вы понимаете под «выучив язык», выучив вместе со стандартной библиотекой? Если так, это долго, я предлагаю добавлять (а не «кидаться») в рассмотрение второй язык уже после того как перевод алгоритмов и что вообще можно с ними делать, станут понятными.
В случае Виртовского Паскаля это очень не долго. Стандартная библиотека минимальная. Описание языка занимает всего 30 страниц. Книги, которые я советовал, вообще можно начинать читать, не читая предварительно никаких описаний - там последовательно по мере необходимости вводятся новые конструкции. Что имеется в виду под "перевод алгоритмов и что вообще можно с ними делать, станут понятными" - я не понял. Должны стать понятными не перевод, а сами алгоритмы. Это цель, а язык только средство. Много слышал различных методик обучения программированию, но о "методике" изучения двух языков сразу друг за другом слышу впервые. Хоть трудности не сопоставимые, но выглядит такая рекомендация примерно так же, как рекомендация начав изучать испанский язык, тут же начать изучать китайский язык ;-) Но еще раз: обучение программированию - это не только обучение языку! Думать, что программирование сводится к языку, все равно, что выучить язык мат. формул TeX и полагать, что таким образом выучил всю математику.

-- Пн мар 03, 2014 14:40:19 --

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

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 14:53 
Заслуженный участник


27/04/09
28128
bin в сообщении #832204 писал(а):
Должны стать понятными не перевод, а сами алгоритмы. Это цель, а язык только средство.
Ну тогда давайте учить на «алгоритмическом языке».

bin в сообщении #832204 писал(а):
но о "методике" изучения двух языков сразу друг за другом слышу впервые
Значит, я правильно угадал, что идея не распробована в массах. Но это не значит, что она бесполезна.

bin в сообщении #832204 писал(а):
Но еще раз: обучение программированию - это не только обучение языку!
Не оспариваю. Но это и не только обучение пониманию того, кто такие алгоритмы. На заданном языке можно написать много программ, делающих одно и то же, но «правильных» из них будут две-три, и эта «правильность» не целиком диктуется алгоритмом.

bin в сообщении #832204 писал(а):
Просто учить языки для коллекции не вижу смысла и никому бы не рекомендовал.
Не надо для коллекции! Надо для представления, как можно программировать вообще.

bin в сообщении #832204 писал(а):
Что же касается начинающих изучение программирования, то лучше узнать хорошо один язык, чем два кое-как.
Где я предлагал кое-как? Надо изучать аккуратно.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 16:10 
Аватара пользователя


22/09/09

1907
arseniiv в сообщении #832216 писал(а):
Ну тогда давайте учить на «алгоритмическом языке».
А что такое алгоритмический язык? Алгол? ;-) В википедии, например, очень коротенькая и невнятная статья на эту тему, как источник цитирующая только англо-русский словарь. В англовики запрос "Algorithmic language" перенаправляется на ALGOL :D Паскаль алгоритмический язык?
arseniiv в сообщении #832216 писал(а):
На заданном языке можно написать много программ, делающих одно и то же, но «правильных» из них будут две-три, и эта «правильность» не целиком диктуется алгоритмом.
И структурами данных, по формуле Вирта: Алгоритмы + структуры данных = программы. А чем еще? Синтаксическими ошибками в программе? Переполнением памяти из-за неоправданно гигантских размеров матриц? Можно утверждать, что если собрать толпу профессиональных программистов и дать им корректное задание, например, отсортировать последовательность в десять тысяч натуральных чисел в возрастающем порядке, то каждый из этой толпы напишет правильную программу, и вряд ли эти программы будут текстуально совпадать друг с другом.
arseniiv в сообщении #832216 писал(а):
Надо для представления, как можно программировать вообще.
А что такое "программировать вообще"? Подставьте любой другой глагол - смысла не прибавится: "сочинять вообще", "писать вообще", "вычислять вообще", "рисовать вообще", "петь вообще", "говорить вообще"...

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 19:52 
Заслуженный участник


27/04/09
28128
bin в сообщении #832236 писал(а):
А что такое алгоритмический язык? Алгол? ;-)
Нее, это тот в котором нач, кон, цел и др..

bin в сообщении #832236 писал(а):
А чем еще? Синтаксическими ошибками в программе? Переполнением памяти из-за неоправданно гигантских размеров матриц?
Например, один код может быть легче поддерживать, чем другой. Не всегда написали и забыли. Один код может быть проще понимать, чем другой. И так далее.

bin в сообщении #832236 писал(а):
А что такое "программировать вообще"?
В данном случае я описывал вот что. Предположим, пишете вы на Turbo Pascal 7, пишете, и нигде не видите итераторов. И самостоятельно бы вы до них додумались лет через пятьдесят, хотя они могли бы сделать код лучше (см. выше, что это значит у меня здесь). Итераторы, безличное «вы» и паскаль — это пример.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 21:39 
Аватара пользователя


22/09/09

1907
arseniiv в сообщении #832308 писал(а):
Нее, это тот в котором нач, кон, цел и др.
Т.е. это чисто российское явление: среднего школьника с пятого класса учат английскому, но "begin", "end" ему запомнить проблематично и поэтому "нач", "кон" и т.д. Особенно хорошо на сегодняшний день выглядит в упомянутой статье "безмашинный курс информатики", когда каждый школьник режется в стрелялки на компе (а для стрелялок потребен не слабый комп, а зачастую и очень специфичный английский - иногда используются такие словечки, что я понимаю не сразу) :D
arseniiv в сообщении #832308 писал(а):
Предположим, пишете вы на Turbo Pascal 7, пишете, и нигде не видите итераторов.
Сколько помню: Turbo Pascal 7 не было - был Borland Pascal 7, и нигде там не видел слова "итератор", м.б. Вы с Turbo С++ перепутали?
arseniiv в сообщении #832308 писал(а):
Например, один код может быть легче поддерживать, чем другой.
И от чего это зависит? Код со строгой типизацией данных поддерживать легче, чем код с нестрогой. Т.о. при прочих равных, код на Паскале поддерживать легче, чем код на С++. Но про это недавно говорили в другой теме.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 22:07 
Заслуженный участник


27/04/09
28128
bin в сообщении #832366 писал(а):
Сколько помню: Turbo Pascal 7 не было - был Borland Pascal 7
http://en.wikipedia.org/wiki/Turbo_Pascal. Или вы про различие IDE/язык?

bin в сообщении #832366 писал(а):
и нигде там не видел слова "итератор"
Разумеется, т. к. в язык итераторы там не встроены, но это не важно — их можно использовать и так. Итератор имелся в виду этот — интерфейс с методами для обхода объекта. Правда, в том паскале нет интерфейсов… ну, может быть, можно было бы обойтись и абстрактным классом вместо.

bin в сообщении #832366 писал(а):
И от чего это зависит? Код со строгой типизацией данных поддерживать легче, чем код с нестрогой.
Но ведь человеческий фактор никуда не денется. Несмотря на влияние типизации, модели управления памятью и другое.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 23:20 
Аватара пользователя


22/09/09

1907
arseniiv в сообщении #832391 писал(а):
http://en.wikipedia.org/wiki/Turbo_Pascal.
Цитата:
Two versions named "Turbo Pascal for Windows" (TPW), for Windows 3.x, were released: TPW 1.0, based on Turbo Pascal 6 but released about 2 years later, and 1.5, released after Turbo Pascal 7; they were succeeded by Borland Pascal 7, which had Windows support.
У меня на антресолях валяется коробка, на которой написано Borland Pascal 7, м.б. были коробки с надписью Turbo Pascal 7? Стоит проверить, Википедия часто ошибается.
arseniiv в сообщении #832391 писал(а):
Разумеется, т. к. в язык итераторы там не встроены, но это не важно — их можно использовать и так. Итератор имелся в виду этот
— интерфейс с методами для обхода объекта. Правда, в том паскале нет интерфейсов… ну, может быть, можно было бы обойтись и абстрактным классом вместо.
Это не для новичков. Чтобы изучать базовые алгоритмы, ООП не нужно, более того, новичкам от него вред - отвлекает от алгоритмов. Когда знаешь общие принципы, то инкапсуляция, наследование и полиморфизм очень удобны, т.е. они очень удобны, когда знаешь, как можно и без ООП обойтись, а когда новичок начинает с ООП - он без объектов уже не может, и получаются такие "иерархии", что очень грустно становится. Недаром чистых ОО языков было предложено сравнительно не много. Упомянутый выше Dee был одним из таких языков, но распространения не получил.
arseniiv в сообщении #832391 писал(а):
Но ведь человеческий фактор никуда не денется.
И в чем повинен человеческий фактор? В том, что человек вместо одной буквы может напечатать другую цифру? Современные IDE хорошо помогают справляться с такими опечатками. Вот когда с типами данных допускается путаница - тогда может быть трудно баг поймать. Максимум ошибок должен выявляться на стадии компиляции, а не на стадии исполнения - принципы защитного программирования обеспечивают это. Человек по природе невнимателен, но если он понимает, что делает, т.е. понимает суть алгоритма и применяемых им технологий, то с помощью IDE достаточно быстро доводит свою программу до правильной. А если чисто формально перепечатывает из книги листинг, то тривиальная опечатка в книге становится для него непреодолимой проблемой. BTW встречал публикации в очень уважаемых научных журналах, где авторы, похоже, нарочно делали ошибки в формулах, чтобы никто не смог воспроизвести их алгоритм, один из таких авторов мне как-то даже похвастался подобным "подходом"... Человеческий фактор, однако!

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение03.03.2014, 23:48 
Заслуженный участник


02/08/11
6892
bin в сообщении #832419 писал(а):
И в чем повинен человеческий фактор?
В кривой архитектуре. В сильной связанности там где нужна слабая и наоборот. В переиспользовании кода копированием. В плохих именах переменных. В методах, которые не читаются сверху вниз, а прыгают влево-вправо, потому что человек не знает как пользоваться операторами return, break и continue, потому что их нет в Паскале. В методах, некорректно освобождающих ресурсы при ошибке, или освобождающих корректно, но абсолютно нечитаемых из-за неумения заюзать goto (это в Си и Паскале). В непредварении енумов префиксом (в Си) и получаемым неприятностям. В плохом обращении с макросами (в Си и Си++). В незнании что такое мемори-лики и как с ними бороться (в системах со сборкой мусора). В незнании, как обращаться со смартпойнтерами (в Си++) и почему нежелательно писать delete явно. В неумении писать и читать лямбда-выражения (в Си-Шарп), в незании, что такое fluent api и как он помогает писать красивый код. В явном вызове GC.Collect() (в Си-Шарп) "на всякий случай". И много-много ещё в чём.

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение04.03.2014, 00:26 
Заслуженный участник
Аватара пользователя


08/11/11
5940
bin в сообщении #832419 писал(а):
У меня на антресолях валяется коробка, на которой написано Borland Pascal 7, м.б. были коробки с надписью Turbo Pascal 7?


http://www.emsps.com/oldtools/borpasv.htm#tp7

 Профиль  
                  
 
 Re: Изучение программирования
Сообщение04.03.2014, 00:35 
Заслуженный участник


02/08/11
6892
Turbo Pascal 7.0 - это была, насколько я помню, урезанная версия Borland Pascal 7.0. Там не было IDE с виндовым GUI и библиотеки OWL.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group