LINUX.ORG.RU

Изучение ЯП - методики

 зубреж, ,


0

2

Всем привет. Снова я всех вас достаю своими вопросами. Но, так как считаю, что здесь есть вполне грамотные люди хочу спросить вот, что:

- Как именно нужно учить ЯП?

1. Просто читать книги, смотреть код и стараться его осознать и понять. Так и постигнем Дао C++.

2. Читая книгу - конспектировать в тетрадь часть материала.

3. Сразу брать быка за рога - стараться писать код, что не ясно открывать книгу и в режиме real time изучать.

4. Я что-то не так делаю?

Какой правильный подход? Как лучше запомнить?

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

Dragon59 ★★
()

1. Читаешь стандарт языка.
2. Пробуешь писать несложные программки, параллельно разбираясь в непонятных местах.
3. Берешься за хорошую книгу по культуре программирования и переписываешь все свои учебные программки в нормальный вид.
4. Дочитав книгу осознаешь, что программированию еще учиться и учиться и начинаешь читать следующую.
5. Устраиваешься на работу и в жестких условиях вытравливаешь все вредные программисткие привычки, которые к этому времени успел приобрести. Параллельно учишься работать в комманде.
6. Женишься, заводишь детей и забиваешь на всю эту хрень. Просто заколачиваешь бабки и больше не заморачиваешься глупыми вопросами.

Вот как-то так.

P.S. Если о С++ речь, то начинать надо не со стандарта, а с Ритчи (который вместе с Керниганом). Потом что-то по самому С++, но тут я уже не знаю, что читать, ибо мне этот язык до этого самого места.

delete83 ★★
()

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

Варианты 1 и 2 - бесполезны вообще.

Deleted
()

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

В общем, 1+3.

Kalashnikov ★★★
()

Имхо, лучший способ изучать язык - начать на нём что-то кодить.

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

Варианты 1 и 2 - бесполезны вообще.

Глупость. Вспомни о тех временах, когда компьютеры были большой редкостью. А ты в курсе как происходил процесс отладки на БЭСМ-6 и ЕС ЭВМ?

Теперь автору.

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

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

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

Харроший сайт.

Про многие из этих книг я и так знал, но про нектоторые таки нет.

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

P.S. Если о С++ речь, то начинать надо не со стандарта, а с Ритчи (который вместе с Керниганом).

Внезапно: С и С++ разные языки и у них даже синтаксис не совместим полностью для C -> C++. Так что чтение K&R для постижения C++ оч. сомнительно.

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

У C и C++ абстрактная машина почти одна и та же, а изучать её проще на примере C.

unsigned ★★★★
()

Читаешь простую книгу, параллельно пишешь хелловорлды.

Пишешь несколько программ посложнее.

Читаешь сложные книги, пишешь хелловорлды на сложные темы.

Пишешь большую и сложную программу.

Оставшееся время читаешь стандарт, гугл, хорошие чужие исходники и пишешь всё что нужно.

unsigned ★★★★
()

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

anonymous
()

Не стоит так серьезно относится к изучению С++, его ведь потом еще забывать нужно будет.

april
()

Читать книги и код [/thread]

buddhist ★★★★★
()

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

podelkin
()

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

Бессмысленно учить язык (ЛЮБОЙ) просто так, язык имеет смысл учить ТОЛЬКО для решения конкретных задач - читать Шекспира в оригинале, клеить симпатичных парижанок/бразильянок, написать игрушку, написать числодробилку считающую что нить эдакое... Ну не учиться же никто просто так стучать молотком. ЯП - это молоток.

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

Внезапно: С и С++ разные языки и у них даже синтаксис не совместим полностью для C -> C++. Так что чтение K&R для постижения C++ оч. сомнительно.

Да что вы говорите! А я и не в курсе был... Спасибо, что просветили.

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

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

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

ээээээ

в руках словарь? оригенально. и без знания языка есть возможность клеить бразильянок.

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

qulinxao ★★☆
()

Услышанная история: программист устроился в гугл. Там ему дали в руки стандарт C++, и, пока он стандарт не осилил целиком, к коду не подпускали.

Вот это - правильный подход. А те, кто ответил «3», имея в виду C++... Я бы посмотрел на их код. Так, для смеху.

unsigned ★★★★
()

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

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

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

В гюгле свой стандарт, они половину С++ нагло и цинично выкинули.

anonymous
()

Перед началом изучения различных ЯП у меня уже был опыт программирования на Delphi/Pascal порядка 5 лет. Сам Delphi/Pascal я изучил на курсах еще в средней школе.

С тех пор изучаю новый язык/технологию следующим образом:
1. Покупается бумажная книга.
2. Книга читается полностью, без написания какого-либо кода. Практически, как художественная литература (особенно если с автором повезет).
3. Когда наступает время исопльзовать язык/технологию эта книга занимает свое почетное место слева от клавиатуры. Как только возникает какой-то вопрос или что-то не получается, открываем книгу и читаем соответствующую главу полностью.
4. Через несколько недель _активного_ исользования языка/технологии книга постепенно перемещается в сторону книжной полки.
5. Если длительное время технология/язык не использовались переходим к пункту 3.

Правда в последнее время все чаще читаю официальные спеки, а нормальной техники распечатки pdf я для себя так и не придумал =(

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

Бессмысленно учить язык (ЛЮБОЙ) просто так, язык имеет смысл учить ТОЛЬКО для решения конкретных задач

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

trex6 ★★★★★
()

P.S. Еще не забывай о книгах, которые посвещаны не языкам, а правилам хорошего программирования. Начать рекомендую с Брукса и Макконели.

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

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

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

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

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

Да-да... поэтому «нормальный» человек сначала выучит португальский на нескольких курсах, потому французский на нексольких курсах... а ненормальный к тому времени уже переспит с половиной Рио и половиной Парижа + будет говорить по португальски и французски, хотя с акцентом и грамматически неправильно, но будет говорить и клеить бразильянок и парижанок гораздо эффективней чем «нормальный».

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

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

Зачем вы так все гиперболируете? Достаточно посетить один курс португальского языка длительностью в 2-3 месяца и можно спокойно ехать покорять Рио :)

Что же касается программирования и целей... Вы что, предлагаете людям писать программы, вобще не заглядывая в стандарт? А как насчет других полезных книг по программированию? Ну и что, что все в куче goto и if else, зато написал и работает, да? И, главное, время не тратил на изучение таких ненужных вещей, как стандарт и культура программирования. Грубо, уважаемый, грубо.

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

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

Безусловно надо знать возможности ЯП. Но без практики это знание бесполезное. Умные книжки типа «С++ для пофи от мегагуру» имеет смысл читать когда уже набил себе всяких шишек, тогда написанное там действительно востребовано - опаньки, я тогда вот так то эту задачу пытался решить а можно еще так и вот так. А иначе, напр. человеку никогда не сталкивавшемуся с проблемами сборки мусора, вообще не знающему что такое сборка мусора, и не собирающемуся заниматься сборкой мусора чиать про смартпойнтеры довольно таки бессмысленно.

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

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

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

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

Только в итоге получается, что если человек не прочитал о таких возможностях языка в книжке, то он потом начинает городить тонны велосипедов вместо них. Буст действительно будет лишним на начальном этапе (да и не бустом единым), но вот про виртуальные функции и шаблоны должен знать каждый Junior C++ Programmer.
Интереса ради, а так же для поднятия настроение, можете попробовать посетить место типа gamedev.ru. Там такие вот любители практики порой задают действительно смешные вопросы и дают на них не менее смешные ответы.

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

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

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

Если о С++ речь, то начинать надо не со стандарта, а с Ритчи (который вместе с Керниганом)

C != C++.

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

Глупость.

Если ты будешь только читать книгу - ты не научишься программировать. Нужно совмещать чтение книги с программированием, и ИМХО наиболее удачное сочетание - именно взять задачу и решать ее, заглядывая при этом в книгу.

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

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

C++ контекстно-зависимый => его невозможно описать КС-грамматикой => с парсером так задолбешься, что желание дальнейшего изучения языка отпадет :)

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

а нормальной техники распечатки pdf я для себя так и не придумал =(

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

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

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

А те, кто ответил «3», имея в виду C++... Я бы посмотрел на их код. Так, для смеху.

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

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

Ну и что, что все в куче goto и if else, зато написал и работает, да?

Если еще не знаешь ни одного языка, то да. Умение решать задачу с текущими знаниями тоже очень важно.

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

Работающая программа прямо сейчас имеет гораздо большую ценность

Работающая прямо сейчас программа, написанная без крепкого знания теории, имеет отрицательную ценность: она создаёт видимость, что задача решена. Не сегодня-завтра она навернётся (для C++ - инфа 100%).

Все эти вещи помогают главной задаче, но не являются целями сами по себе

Только если пишешь на выброс, или назавтра увольняешься.

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

Программа должна работать

Это вообще не единственное требование. Более того, не всегда основное.

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

Работающая прямо сейчас программа, написанная без крепкого знания теории, имеет отрицательную ценность: она создаёт видимость, что задача решена

Если задача решена, то она решена. Конечно, она не должна сломаться через день.

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

Так я же сказал - можно быстро соорудить бесконфликтный аналог грамматики C++. Заодно, в процессе изобретения более однозначного синтаксиса, поймешь и все возможные подводные камни синтаксиса C++.

Ну или, как вариант, узнаешь в процессе работы про GLR, и сделаешь парсер на нем.

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

пока особых сдвигов нет

Читаю книги. Пробовал вести блог - забил. Пробовал конспектировать в тетрадь - забил, так как приходиться чуть ли не 70% материала тупо переписывать. А уж писать коротко мы студенты умеем еще наверное))).

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

muteki_okami
() автор топика
Ответ на: комментарий от podelkin

какой к примеру проект

Вы можете посоветовать? Где код наиболее правильно и чисто написан? Есть особые программы, так сказать вверх искусства?

// ядро linux не в счет, тем более оно на c+assembler

muteki_okami
() автор топика
Ответ на: комментарий от delete83

фишка в том что если чел успешно программирует

то вслучае злоупотребления им goto и другими спагети либо он сам обнаружит что у него время не продуктивно уходит либо ещё кто поможет обратит внимание

поэтому сначала практика затем подчистка теории и необольшая порция теории авансом .. вот в таком цЫкле. если же глотать теорию большими кусками то творчество ушибается.

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