ibash.org.ru - Новый цитатник Рунета | Цитаты: По дате По рейтингу Случайно Добавить Поиск RSS |
Форум: Научить программировать 1 2 3 4 > [RSS] | Форум: Вход Регистрация Участники Поиск RSS |
NoName_NoFame 06.12.2009 - 02:12 | Дано: Быдлокодер (ваш покорный слуга), коему не в лом тратить своё драгоценное время на всякие глупости Девушка (мозг, вроде бы на месте. По крайней мере дискретку ту же понимать понимает) Энное количество времени Компилятор Надо: Получить девушку, которая в состоянии написать простенькую 300-500строчную программу на С++ (конвертор чисел из одной позиционной системы счисления в другую, с периодами и защитой от дурака, например) и получить от этого моральное удовлетворение. Хочется услышать ваши идеи и комментарии по поводу вопроса. |
#101 #101 - 07.12.2009 - 22:48 | >все пишут на C++ Насколько я знаю, C++ в наши дни активно используется разве что в геймдеве из-за того, что там особо критично быстродействие. А сам язык (имхо) довольно противный, с большим количеством тонкостей и подводных камней. При программировании нужно не сражаться с языком, а решать конкректную задачу наиболее оптимальным путём. И знать нужно не один, а несколько языков, желательно хотя бы по одному для каждой основной парадигмы (процедурная, ООП, ФП). И уж точно нельзя цепляться за одну парадигму (например, за ООП) - золотого молотка не существует. (Кстати, про ООП - C++ НЕ поддерживает ООП в строгом смысле этого понятия). По сабжу: План обучения программированию мне видится примерно следующим: 1) Основы: процедурное программирование - алгоритмы, структуры данных, процедуры/функции. Особое внимание на то, чтобы не лепить весь код в одну функцию (как это делают многие новиички), а грамотно разбивать на подзадачи. Потом это станет привычкой, а это ОЧЕНЬ плохая привычка. Язык желательно со статической типизацией. (Динамическая типизация поначалу может развращать). Можно начать с C (без плюсов), но тогда сразу придётся рассказывать про указатели и прочее низкоуровневое представление вещей, или, что ещё хуже, объяснять на уровне "магических конструкций" (для ввода числа пиши scanf("%d", &varName), а что такое &varName узнаешь как-нибудь потом), что ещё хуже. Как вариант - начать с паскаля, а потом перейти к C. (Вообще, C желательно изучить, так как несколько полезных языков на нём основаны). 2) Вот теперь можно вынести мозг всяким матаном в виде ФП. Из языков могу порекомендовать Scheme или Erlang. У обоих языков довольно простой синтаксис (учится за день), что позволяет быстро перейти к осознанию самой концепции. 3) ООП. Только не C++, а что-нибудь более Ъ. Ruby хорош. Также хорош Objective-C. Smalltalk - Ъ и вообще родоначальник ООП, но реально используется реже, однако тоже хороший вариант. 4) Теперь, когда база усвоена, можно изучать практически любой язык - на основе предыдущих вариантов остаётся разобраться только с основными идиомами, а остальное уже изучено. Примерное время обучения (из расчёта по одному занятию на каждый день): 1) 2-3 недели (1-2 недели на основы и изучение языка, 1 неделя - на оттачивание навыков). 2) 1-2 недели (1 неделя - на вкуривание концепции, 1 неделя - на оттачивание навыков) 3) 1-2 недели (1 неделя - на вкуривание концепции, 1 неделя - ...ну ты понял) |
NoName_NoFame #102 - 08.12.2009 - 09:29 | #101 >>1) Основы: процедурное программирование - алгоритмы, структуры данных, процедуры/функции. В таком порядке? 0_о >>сразу придётся рассказывать про указатели Рассказал уже. В принципе она в состоянии понять такое. По крайней мере нечто вроде void swap (int* a, int* b) { int c=*a; *a=*b; *b=c; } написать может. Теперь осталось разобраться с окончательным пониманием массивов и тех же циклов (объяснял их через инварианты, теперь частично жалею... Но ничего более разумного я придумать не могу по этому поводу), и можно переходить к мучению девушки алгоритмами. >> Можно начать с C (без плюсов), А почему без плюсов? >> Особое внимание на то, чтобы не лепить весь код в одну функцию (как это делают многие новиички), а грамотно разбивать на подзадачи Вот этим надо заняться, да. Без моего тыка сверху код на функции не делит... |
unikoid #103 - 08.12.2009 - 09:40 | >Теперь осталось разобраться с окончательным пониманием массивов и тех же циклов (объяснял их через инварианты, теперь частично жалею... Но ничего более разумного я придумать не могу по этому поводу), и можно переходить к мучению девушки алгоритмами. Так это ж все в школе объясняют. Как жеж она егэ сдавала?! Да, алгоритмами, имхо, нужно мучать по ходу обучения конструкциями, это лучше дает понять, как устроена и для чего нужна та или иная конструкция. >void swap (int* a, int* b) { int c=*a; *a=*b; *b=c; } А почему не ссылками? void swap(int &x, int&y) { int c = y; y = x; x = c; return; //Правда, это, ЕМНИП, только для С++ работает, но не для чистого С. } >А почему без плюсов? Потому что для начала нужно как следует разобраться с процедурным программированием, а потом уж вникать в ООП, ФП, шаблоны и т. д. Ну и плюс недостатки С++, кои тут в принципе уже обсудили. |
X-Ray #104 - 08.12.2009 - 15:06 | LISP рулит ( Не путать с "Lot of Idiotic and Stupid Parentheses")! |
#105 #105 - 08.12.2009 - 15:50 | >В таком порядке? 0_о Порядок тут может быть любой, лишь бы понятно было. >Рассказал уже. В принципе она в состоянии понять такое. Вот и прекрасно. Значит, можно начинать сразу с C ещё и время обучения >А почему без плюсов? При изучении первого языка для каждой парадигмы учатся две вещи: сам язык и, собственно, парадигма. Вдвойне сложно при изучении, вообще, самого первого языка. Поэтому, имхо, не стоит создавать лишние сложности при обучении и сосредоточиться не на языке, а на понимании парадигмы и умении её применить. Не должно быть проблем: "Моя программа не компилиться". Должны быть проблемы: "Моя программа не работает". А C++ - язык довольно тяжёлый, как я уже говорил. Однако, после того, как основная концепция будет вкурена, C++ будет изучить намного легче, так что в итоге можно ещё и сэкономить на времени обучения. |
naryl #106 - 08.12.2009 - 16:33 | #104 +1 ;) NoName_NoFame, про плюсы можешь вообще забыть. В качестве первого языка выбираешь C, по причинам, упомянутым #105. В качестве следующего - Scheme по SICP. По C она начинает понимать основы и структурную парадигму. По Scheme - остальные. Потому что Scheme не просто позволяет их использовать, он позволяет их реализовать на себе. |
#107 #107 - 08.12.2009 - 17:15 | >В качестве следующего - Scheme по SICP. По C она начинает понимать основы и структурную парадигму. По Scheme - остальные. Потому что Scheme не просто позволяет их использовать, он позволяет их реализовать на себе. +1 |
VovanZ #108 - 08.12.2009 - 17:24 | Я знаю только Pascal, и пишу на Delphi и Lazarus Free Pascal.... Скажите у меня есть какой-нибудь шанс стать человеком? Доктор, я буду жить?! |
naryl #109 - 08.12.2009 - 17:30 | Да. Срочно приступай к плану #101, пока C++ с PHP не выучил :) Потом учи и пиши на чём хочешь. |
VovanZ #110 - 08.12.2009 - 17:34 | #109 - спасибо, доктор, вы дали мне надежду! |
X-Ray #111 - 08.12.2009 - 18:10 | #108 +1 :) |
NoName_NoFame #112 - 08.12.2009 - 22:06 | #103 1. Не ссылками т.к. пока требую указателями. 2. Кто мешает писать на плюсах без ООП? А cout удобнее printf в некотором смысле... #104 В любом случае - лабы требуются на плюсах :( #105 За чистый С злобный препод бьёт страшной железной линейкой :( Но да, идея вообще понятна. #106-107 Оки, понятно, спасибо за поддержку и дельные идеи *ушел читать SICP* |
#113 #113 - 08.12.2009 - 22:18 | >А cout удобнее printf в некотором смысле... Не думаю. Придётся объяснять про то, что такое <<. Есть два пути: 1) Сказать, что это "магия" (я уже высказывал своё отношение к такому подходу: магии быть не должно. Должна быть система знаний.) и 2) рассказать про перегрузку операторов, что опять же означает введение ненужных сущностей в самом начале обучения. >За чистый С злобный препод бьёт страшной железной линейкой :( Но да, идея вообще понятна. Ух. Не повезло с преподом :( (Вообще, преподавание программирования у нас в большинстве ВУЗов совершенно странное.) |
NoName_NoFame #114 - 08.12.2009 - 22:39 | #113 1. А вопросов особо нет... Хотя да, признаю свою неправоту. 2. Угу. Ну, он вроде бы только начинает. Может со временем станет чем-нибудь не таким уж и плохим... |
злобный препод #115 - 09.12.2009 - 07:19 | #113 есть такое противное понятие как "рабочая программа" и за отклонение от оной декан "бьёт страшной железной линейкой (с)" |
unikoid #116 - 09.12.2009 - 11:50 | >2. Кто мешает писать на плюсах без ООП? А cout удобнее printf в некотором смысле... Так это (за незначительными исключениями) и есть чистый С. А использование cout/cin и прочего - это уже ООП. И это надо либо объяснять целиком или ссылаться на магию. |
unikoid #117 - 09.12.2009 - 11:52 | №115, а в "рабочей программе" прям написано, какие операторы и функции использовать, да? //Нас пока учат С, ссылаясь на С++ в тех моментах, где проявляются различия (те же ссылки, как пример). |
naryl #118 - 09.12.2009 - 13:19 | > Так это (за незначительными исключениями) и есть чистый С. Уже давным-давно нет. Даже C99 содержит фичи, отсутствующие во всех стандартах C++. |
xserg #119 - 09.12.2009 - 13:30 | davelos videt' lntel fortran compiler dlya m$ studio. skazhite plz, pochemu tam takoy idiotskij sintaksis? ili eto v fortrane vsegda tak i bylo? |
unikoid #120 - 09.12.2009 - 13:48 | #118, спасибо, значит те книжки, по которым я учился и наши преподы слегка отстали от жизни. То-то я с ходу и примера не вспомнил, чтоб различия были, даже в ссылках неуверен был. |
unikoid #121 - 09.12.2009 - 13:51 | #119, открыл учебник по математике за 1981 год, посмотрел примеры программ. С ходу ничего особо страшного не увидел, только что все в верхнем регистре написано. |
naryl #122 - 09.12.2009 - 14:32 | unikoid, я ни C ни C++ много не пишу в последнее время, но уверен, что variable-length arrays и structs в C++ нет. struct myStruct { int self_length; char msg[]; }; myStruct окажется переменной длинны, а msg - не указателем на массив, а самим массивом, т.е. данными, но его длинна может быть разная для разных деклараций экземпляров myStruct. |
unikoid #123 - 09.12.2009 - 15:19 | Да, это так. Вот, соответственно и разница. В книжке то я об этом читал, а вот на лекциях ни слова про это не сказали, видимо обучают по С89. |
Кто-то #124 - 09.12.2009 - 16:14 | xserg, фиксированный формат фортрана, конечно, полная лажа, а вот свободным (есть начиная с Fortran 90) вполне юзабелен. |
злобный препод #125 - 09.12.2009 - 18:26 | #117 unikoid, там написано на основе какого языка вести обучение, и хорошо если там написано Си а не Паскаль |
smb. #126 - 09.12.2009 - 19:11 | >и хорошо если там написано Си а не Паскаль А чем плох Паскаль? |
злобный препод #127 - 09.12.2009 - 20:35 | А с паскаля потом на другие языки никто переходить не хочет, с паскаля переходят на дельфи и на этом процесс развития заканчивается. |
unikoid #128 - 09.12.2009 - 20:43 | Но посмотрев на паскаль после С не хочется переходить на паскаль. Хотя для обучения процедурному программированию и алгоритмизации в чистом виде паскаль, имхо, хорош. Для этого он, собсно, и предназначался. |
naryl #129 - 09.12.2009 - 21:37 | Паскаль - замечательный пример простого, стройного, но бесполезного языка. Как и большинство творений проф. Никлауса Вирта. |
#130 #130 - 10.12.2009 - 00:16 | Для разнообразия напишу по теме... может кто-нибудь порекомендовать книгу, если таковая вообще была написана, доходчиво описывающую программирование, начиная с уровня"написать хеллоуворлд в дэлфи" и заканчивая пониманием положений всех основных парадигм программирования, и разницей между ними, ну, и необходимые навыки чтобы это понимание как-то использовать в своих корыстных целях :) Акцентирую внимание, что хотелось бы именно понять, грубо говоря, КУДА копать а не КАК копать... иными словами, не вызубрить синтаксис к\л языка или набора языков, а получить навыки, необходимые для того, чтобы впоследствии, потратив неделю\другую на изучение синтаксиса языка была возможность с максимальной эффективностью использовать... также, язнаю что такое гугиль и википедия, но читая то что там написано, я ощущаю что я по уровню умственного развития нахожусь где-то между дубовым поленом и табуреткой, и, кроме того, разрозненную инфу труднее усвоить,по крайней мере, для меня, потому и прошу дать информацию об одной книге, где всё это было бы систематизировано и выстроено в порядке, в котором это можно усвоить... может хоть это мне поможет =_= |
#131 #131 - 10.12.2009 - 00:18 | к#130 : чтобы не было непонимания- я нахожусь где-то в районе уровня хеллоуворлдов в дэлфе, а хотелось бы большего... из книги мне не нужно узнавать, как это делаеться :) |
VMChaZ #132 - 10.12.2009 - 00:21 | Пост выше - замечательный пример поста без аргументации. Жаль,здесь нет лички - я бы попросил перечислить недостатки такого Паскаля, в который он развился сейчас (синтаксис последних версий FPC и Delphi 7) (Не в этой теме - потому, что не хочу уводить тему в холивар). |
VMChaZ #133 - 10.12.2009 - 00:22 | Прошу прощения, указатель "пост выше" является ссылкой на пост 129 |
ilik #134 - 10.12.2009 - 03:18 | #130 Кормен, Кнут, Ахо, Вирт, Седжвик. Это по алгоритмам книжки. Читай - интересно и полезно. |
аноним #135 - 10.12.2009 - 07:55 | тут лежат http://e-maxx.ru/bookz/ |
аноним #136 - 10.12.2009 - 07:56 | кстати перцы с этого сайта упорно всё пишут на c++ и java к чему бы это? |
unikoid #137 - 10.12.2009 - 16:21 | #129, Если мне не изменяет память, паскаль задумывался как учебный язык. Со данной задачей он справляется на отлично, имхо. Ибо позволяет писать строго процедурные программы, понимая алгоритмы и не заморачиваясь на особенностях реализации, вроде того же ручного управления памятью, указателей, форматов ввода-вывода и т. д. |
3213 #138 - 10.12.2009 - 17:43 | #135 Есть подобный архив в fb2? |
John Fremlin #139 - 10.12.2009 - 18:51 | Паскаль, С, Ruby, etc не нужны! На них хороший блог не сделаешь! Учите лисп! |
Кто-то #140 - 10.12.2009 - 22:12 | Ты же имел в виду самозаполняющийся блог? Ну тогда конечно |
3113 #141 - 10.12.2009 - 22:46 | #139 /me представил блог на паскале гыгы |
White5178 #142 - 12.12.2009 - 12:33 | >>А с паскаля потом на другие языки никто переходить не хочет, с паскаля переходят на дельфи и на этом процесс развития заканчивается. не правда, сам начинал с паскаля/делфи, ща изучаю с++, java, php.... размышляю над асемблером, но послений - туговат |
аноним #143 - 12.12.2009 - 18:52 | бытует мнение, что ассемблер нужно знать, но писать на нём не нужно, т.к. современные компиляторы знают ассемблер гораздо лучше |
naryl #144 - 12.12.2009 - 19:06 | White5178, асм намного проще и логичнее, чем C++. Возможно проблема в том, что вы забыли познакомиться с архитектурой ПК. |
unikoid #145 - 12.12.2009 - 19:13 | naryl, да, он проще и логичнее, но писать на нем большие программы - весьма неудобно. Да и смысла особого нет, имхо, лучше комбинировать код на С/другом языке с ассемблерными вставками. |
naryl #146 - 12.12.2009 - 19:17 | White5178 утверждает, что у него проблемы с "размышлением" над ассемблером, а не написанием больших программ. ;) |
аноним #147 - 12.12.2009 - 20:16 | unikoid, а часто ли ассемблерные вставки получаются лучше чем у компилятора? и большой ли они дают выигрыш? |
#148 #148 - 12.12.2009 - 21:30 | > а часто ли ассемблерные вставки получаются лучше чем у компилятора? В тех случаях, когда они используются, чтобы задействовать возможности процессора, о которых не знает компилятор - да. |
naryl #149 - 12.12.2009 - 21:40 | т.е. в тех случаях, когда причиной их использования стал недостаточно умный компилятор ;) |
аноним #150 - 12.12.2009 - 22:03 | говорят у интела хороший компилятор сишный, который странным образом очень хорошо знает архитектуру процессора и который сводит на нет все потуги по изготовлению высокоуровневых потоков, т.к. умеет сам делать низкоуровневые при наличии директивы специальной в коде |
К списку вопросов | Страницы: 1 2 3 4 > |
«ibash.org.ru — Новый цитатник Рунета» | Почта вебмастера: imail@ibash.org.ru |