2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Как изучать язык программирования?
Сообщение02.04.2006, 19:36 


01/01/06
35
К примеру, вам нужно достаточно быстро освоить язык программирования (любой), на что вы в первую очередь обращаете внимание и какие именно возможности языка осваиваете (безотносительно к платформе)?

 Профиль  
                  
 
 
Сообщение02.04.2006, 20:59 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
"""Распечатать печаль легко. // Распечалить печаль попробуй"""

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

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

 Профиль  
                  
 
 
Сообщение21.04.2006, 07:16 


25/01/06
102
>>Активная работа с языком дает результаты куда быстрее пассивной.

Чистая правда. Найдите себе интересную задачу и запрограммируйте ее на выбранном языке. А вот чтение программ - задача утомительная даже для профессионалов. Лично я отнес бы эту деятельность ко второму этапу обчения.

Еще я советовал бы начинать с интерпретируемых языков тип Питона или C#. Там нет суеты с управлением памятью, есть мощные типы данных типа словарей и т.п. Все это позволяет решить многие задачи гораздо быстрее и в результате получить удовольствие и научиться программировать.

 Профиль  
                  
 
 
Сообщение21.04.2006, 08:23 
Аватара пользователя


17/04/06
18
Хабаровск, ВЦ ДВО РАН
Igor Borovikov писал(а):
>>Активная работа с языком дает результаты куда быстрее пассивной.

Чистая правда. Найдите себе интересную задачу и запрограммируйте ее на выбранном языке. А вот чтение программ - задача утомительная даже для профессионалов. Лично я отнес бы эту деятельность ко второму этапу обчения.

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


Igor Borovikov писал(а):
Еще я советовал бы начинать с интерпретируемых языков тип Питона или C#. Там нет суеты с управлением памятью, есть мощные типы данных типа словарей и т.п.


С# не интерпритируемый. "Мощные типы данных" есть почти везде. Управлять памятью даже на с никто не заставляет при первых шагах.

 Профиль  
                  
 
 
Сообщение21.04.2006, 09:34 


01/01/06
35
Igor Borovikov писал(а):
Еще я советовал бы начинать с интерпретируемых языков тип Питона или C#. Там нет суеты с управлением памятью, есть мощные типы данных типа словарей и т.п. Все это позволяет решить многие задачи гораздо быстрее и в результате получить удовольствие и научиться программировать.

Я имел ввиду обучение не программированию вообще, а изучение какого-нибудь конкретного языка. К примеру вы знаете С++, Python, а программу вам надо писать на Бейсике ( это только в качестве примера). То есть на какие возможности языка вы обращаете внимание для освоения языка: наличие указателей и техника работы с ними, управление памятью, использование стандартных библиотек и т.д.?

 Профиль  
                  
 
 
Сообщение21.04.2006, 19:46 


25/01/06
102
>...не программированию вообще...

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

Уточню свою мысль насчет чтения программ, а то, как я вижу, меня тут не вполне правильно поняли. Брать чужой программный проект на новом языке размером в сотню тысяч строк и читать - большого смысла нет. Ваша задача - научиться идиомам программирования, свойственным данному языку. Для этого весь проект читать не надо. Например, надо проитерировать массив - ищите как это делается в книге или в чужой работающей программе. Наверняка есть много способов, все они правильные, но некоторые более эффективны или просто более общеприняты. Вот для этого и надо читать - чтоб найти примеры нужные для решения Вашей задачи.

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

 Профиль  
                  
 
 
Сообщение21.04.2006, 22:24 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Igor Borovikov писал(а):
В модификации чужого кода я большого обучающего смысла, честно сказать, никогда не видел. Мне лично это в обучении никогда особенно не помогало. По моему это миф. Просто чтение кода помогает еще меньше. Оттого что Вы посмотрите соревнования по бегу на сто метров, Вы быстрее бегать не станете. Надо в первую очередь тренироваться бегать, то есть надо писать самому. Просто делайте свою практическую задачу и ищите где что позаимствовать.

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

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

 Профиль  
                  
 
 
Сообщение21.04.2006, 22:37 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
temp писал(а):
То есть на какие возможности языка вы обращаете внимание для освоения языка: наличие указателей и техника работы с ними, управление памятью, использование стандартных библиотек и т.д.?

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

 Профиль  
                  
 
 
Сообщение21.04.2006, 23:41 
Заслуженный участник


15/05/05
3445
USA
незванный гость писал(а):
В некотором смысле интереснее вопрос -- какие еще существуют техники? Мы назвали две с половиной -- чтение / модификация (1.5 -- на две не тянет) и самостоятельное написание (1.0). А еще?

Если все-таки будем считать, что рассмотрены 3 техники:
    1) все пишу сам;
    2) модификация (частично пишу сам);
    3) чтение (вообще не пишу сам),
то получаем полную систему по критерию "пишу сам"

Что касается исходного вопроса со следующим уточнением:
temp писал(а):
К примеру вы знаете С++, Python, а программу вам надо писать на Бейсике ( это только в качестве примера).

то для некоторых пар языков есть статьи (книги), типа Java for C++ programmers, C# for Java и т.п. Если есть возможность, то желательно начать с них. Т.к. первый язык формирует стиль мышления, народные способы типа "пишите и обрящете" позволят решить конкретную задачу, но научат не сразу. Чтение/модификация чужих кодов поможет, если вы сами сумеете провести аналитическую работу по сравнению языков.

 Профиль  
                  
 
 
Сообщение22.04.2006, 04:52 


25/01/06
102
незванный гость написал:

Цитата:
А Вы никогда не пробовали бегать вдвоем? или взводом?


Мне кажется, что здесь уже начинается смешение понятий.

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

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

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

незванный гость написал:

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


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

 Профиль  
                  
 
 
Сообщение22.04.2006, 08:25 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Igor Borovikov писал(а):
Мне кажется, что здесь уже начинается смешение понятий.

Я имел в виду несколько другое. Бег "в ногу". И бежать легче. Но это не только и не столько командная работа, сколько передача навыка. Хорошо, если Вы можете работать в команде, и у Вас есть старше товарищи. Чтение/модификация -- суррогат, приближение к команде в отсутствие оной. Это возможность поработать в команде и перенять именно технические навыки у людей, с которыми персонально не встретиться.

Igor Borovikov писал(а):
незванный гость писал(а):
Я обычно изучаю язык, когда у меня есть задача. Исходя из этого я ищу инструменты для решения задачи. А какие это инструменты, в большей степени зависит от задачи чем чего либо другого.

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

Если бы. Если Вы считаете, что способны изобрести все приемы программирования на новом для Вас языке -- вперед с песней. Я рассматриваю чение/модификацию как способ перенимания приемов у людей, уже освоивших язык.

Здесь есть один тонкий момент. Вы написали что-то на новом для Вас языке, и "оно" не работает. Что дальше? Рыться в описании языка? (Я тут обнаружил, что и грамматику русского-то уже не в силах прочитать...) Плакать? Экспериментировать? Писать с начала? ... В то время как модифицируя программу Вы можете точно понять, когда, на каком шаге перестало работать. Вы имеете дело с заметно меньшим размером перехода от работающего до неработающего. В абсолютно безыдейном случае Вы можете попытаться выразить свою модификацию по другому. Но! у Вас всегда есть с чем сравнить. При написании программы "с нуля" у Вас эта работающая база отсутствует.

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

 Профиль  
                  
 
 
Сообщение22.04.2006, 09:56 


25/01/06
102
Цитата:
Я тут обнаружил, что и грамматику русского-то уже не в силах прочитать.


Это потому что она в БНФ нигде не опубликована ;-)

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

 Профиль  
                  
 
 Re: Как изучать язык программирования?
Сообщение22.04.2006, 10:39 
Экс-модератор
Аватара пользователя


23/12/05
12047
temp писал(а):
К примеру, вам нужно достаточно быстро освоить язык программирования (любой), на что вы в первую очередь обращаете внимание и какие именно возможности языка осваиваете (безотносительно к платформе)?

Вставлю свои пять копеек как программист-самоучка. Лично я не считаю, что умею хорошо программировать (Более-менее сносно использую MatLAB, Java и FoxPro, но доводилось что-то писать и на Pascal, C, приходилось вникать в тексты программ на Fortran и на Assembler), но тем не менее. Как идет освоение?

Сначала мне нужна какая-то простенькая книжка, help и примеры. Если какой-то язык уже известен можно в течение нескольких дней сносно овладеть синтаксическими особенностями нового языка, а за пару недель даже с некоторыми "примочками", присущими данному языку. А чтобы по настоящему эффективно использовать возможности языка нужно: а) Примеры написанные специалистами в этом языке (я, например, многое почерпнул из кодов функций MatLAB-a, где коды стандартных функций, не являющихся встроенными, написанные разработчиками языка, открыты); б) Очень желательно иметь такого специалиста под рукой, чтобы он иногда бросал взгляд на ваши коды и давал полезные советы; в) время и практика.

 Профиль  
                  
 
 
Сообщение12.06.2006, 21:09 
Аватара пользователя


14/05/05
224
Баку
Хм... для начала не нужны никакие книги.
Открываете HELP. Для этого нужны небольшие знания английского языка. Параллельно HELP открываете папку DEMO (в уважающей себя платформе программирования эта папка должна присутствовать)... Находите прогу типа BGIDEMO и просматриваете ее код. С первого же оператора или процедуры открываете HELP и находите там объяснение... после чего путем проб и ошибок изменяете структуру кода и наблюдаете за изменениями. Первый этап пройден.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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



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

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


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

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