LINUX.ORG.RU

А как вы учите языки?


0

0

Вот народ мучается, тр***тся с абстрактными примерами, явно вникает во все нюансы, вот последний пример - http://www.linux.org.ru/view-message.jsp?msgid=3701527&lastmod=1242239644311 , а так их вообще куча.

была бы такая задача, я бы не задумываясь написал
const int* pi=&i;
i++;

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

>так как же более Ъ? и надо ли оно вообще, знать все эти мелочи?

Вообще надо, но нет смысла зубрить это.

wfrr ★★☆
()

детали приходят со временем, а так -- learning by doing

beastie ★★★★★
()

> я смотрю многие предпочитают взять учебник и проделать все примеры от и до

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

А всякие фреймворки и прочее - это по ходу... Бо сегодня один фреймворк, завтра - другой.

smh ★★★
()

Есть задача - беру справочник

Язык не важен

bioreactor ★★★★★
()

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

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

Теперь, похоже, я стал стар. Мне уже нужно не учиться, а учить других. Хотя ХЗ. Посмотрим, хватит ли сил на питон.

den73 ★★★★★
()

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

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

ИМХО, если язык не на раз в год требуется, то время потраченное на вдумчивое изучение окупится сполна

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

> более Ъ сначала во всем разобраться, атолько потом писать

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

Manhunt ★★★★★
()

> Вот народ мучается, тр***тся с абстрактными примерами, явно вникает во все нюансы

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

> была бы такая задача, я бы не задумываясь написал

> const int* pi=&i;

> i++;


В твоем коде pi указывает на i, и (*pi) меняется вместе с i. А в примере http://www.linux.org.ru/view-message.jsp?msgid=3701527 пытаются заставить pi указывать на временную переменную, и так что от последующих изменений i значение (*pi) уже не зависит.

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

int t = i;
++i;

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

если честно - не очень вникал, что хотят от этого добится, но

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

это правильно, имхо читаемость кода это важнее

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

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

Freek
()

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

zHACKa
()

> Вот народ мучается, тр***тся с абстрактными примерами

1. Прочти у алены-срр -- там это не абстрактно

2. Чуваку похоже скзали совсем не в тему про lvalue

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

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

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

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

Так или иначе, это надо знать.

www_linux_org_ru ★★★★★
()

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

Wizard_ ★★★★★
()

я на практике
лучший и самый эффективный способ

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

> Теперь, похоже, я стал стар. Мне уже нужно не учиться, а учить других.

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

Интерес к Лиспу есть. В англоязычном сообществе он несравненно более популярен, потому что новички могут прочитать SICP, PCL, ANSI CL, LOL на родном языке, без смысловых деформаций, внесённых переводчиком.

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

> Напиши книжку. Или цикл статей.

Поддерживаю mv. Вовсе не обязательно цикл. Достаточно одной достаточно объемной статьи с описанием фич лиспа и __очень__ кратким объяснением что это такое на пальцах (даже без кода).

Кстати, вполне возможно для этого подошло бы ЛОР-овское вики?

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

> В англоязычном сообществе он несравненно более популярен, потому что новички могут прочитать SICP, PCL, ANSI CL, LOL на родном языке, без смысловых деформаций, внесённых переводчиком.

Лисп *бесполезно* толкать новичку. Его имеет смысл объяснять только серьезным программерам.

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

> Лисп *бесполезно* толкать новичку. Его имеет смысл объяснять только серьезным программерам.

MIT и его SICP говорят об обратном. В дебри макросов и ридтейбла никто же не призывает сразу бросаться?

mv ★★★★★
()

> надо ли оно вообще, знать все эти мелочи?

Да. Всем кажется что они после прочтения туториала знают питон. А на самом деле это не так и нюансов там куча. Если что-то для себя по мелочи пишешь то пофиг, а вот на работе такое приводит к печальным последствиям. Никогда не думал почему большинство php-программистов не умеют писать? Они беруться за дело даже толком туториал не дочитав.

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

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

> MIT и его SICP говорят об обратном. В дебри макросов и ридтейбла никто же не призывает сразу бросаться?

Не вижу *никакого* смысла в лиспе без макросов по сравнению с остальными языками. Может, подскажешь?

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

> Не вижу *никакого* смысла в лиспе без макросов по сравнению с остальными языками. Может, подскажешь?

А ты Лисп когда учил (если учил вообще...), то сразу с defmacro начал?

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

> А ты Лисп когда учил (если учил вообще...), то сразу с defmacro начал?

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

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

> это никак не влияет на предмет обсуждения.

Я понимаю, что критикам творчества Пастернака не обязательно его читать, но всё же... SICP-то хоть читали? Имхо, одна из самых лучших вводных книжек по теме "как работают программы".

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

> Как же достал распространитель "виагры" для младенцев.

Я это понял как согласие с моим тезисом "лисп можно оценить только как второй язык"

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

> Я понимаю, что критикам творчества Пастернака не обязательно его читать, но всё же... SICP-то хоть читали? Имхо, одна из самых лучших вводных книжек по теме "как работают программы".

Попробовал. Вытошнило. Перестал.

Меня метапрограммирование интересует, а не детская азбука.

При чем не просто, а в сравнении с аналогами из плюсов и хаскеля.

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

Еще интересуют некоторые фичи лиспа, которых я возможно не вижу в обычных языках, типа restart и прочих прыжках по стэку.

www_linux_org_ru ★★★★★
()

сразу начинаю писать маленькую очень нужную программу, которая просто необходима именно на этом языке, походу, матерясь, просматриваю мануал и гугля по проблемам,и да таким образом lisp не выучишь(ИМХО), и еще раз да я не программист ^_^

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

Я не знаю согласуется это с твоим миропонимаением или нет, просто этот школьник меня лично уже достал :)

imhotep
()
Ответ на: комментарий от www_linux_org_ru

> Меня метапрограммирование интересует, а не детская азбука.

Т.е. Лисп в качестве целевого языка для детской азбуки всё-так подходит?

> При чем не просто, а в сравнении с аналогами из плюсов и хаскеля.


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

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

> Т.е. Лисп в качестве целевого языка для детской азбуки всё-так подходит? Не писатель дестких азбук. (имхо нет).

> Если имеется опыт в плюсах и хаскелле, то можно просто референс по языку читать, и разница сама собой будет видна.

Референс? Типа стандарта анси? Или даже что попроще?

Не подходит. Слишком много времени читать, и там дохрена ненужных деталей, среди которых самое интересное и не увидишь.

Хотя, за неимением лучшего, можно прочитать оглавление. И по диагонали страницы.

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

> Я не знаю согласуется это с твоим миропонимаением или нет, просто этот школьник меня лично уже достал :)

Этому школьнику по моей оценке в районе 35 лет.

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

> Референс? Типа стандарта анси? Или даже что попроще?

[отводя глаза в сторону] Мне "Common Lisp: The Language 2nd" показалась доступнее и приятнее пафосных речей в PCL и On Lisp.... Букварь, всё-так, должен быть сухим и академичным. Для затравки же интереса к теме достаточно было ту самую знаменитую рекламу пера Пола Грэма почитать.

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

> Этому школьнику по моей оценке в районе 35 лет.

В 35 лет люди более спокойные и пофигистичные (см. на tailgunner'а).

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

> Народ трахается еще гораздо жестче - вдумчиво читает Стандарт. Лезть во всё это, не имея за плечами хотя бы года практики, нет никакого смысла.

Читается стандарт C++ сравнительно легко, кстати. Как бонус - со временем появляется очень хорошая привычка первым делом лезть в стандарты, если что забыл, и легко в них ориентироваться. Честно говоря, уже забыл сколько лет назад я последний раз заглядывал в книги Страуструпа/Мейерса/Александреску/etc. - когда-то для меня они свою основную задачу выполнили окончательно.

mannaz
()
Ответ на: комментарий от imhotep

> Это от темперамента зависит а не от возраста.

теперь дурь в голове темпераментом называется? :)

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

>Читается стандарт C++ сравнительно легко

можно определение типа данных, позволяющего хранить (осуществлять смещение на) ровно один байт? по стандарту ISO/IEC 14882

jtootf ★★★★★
()

K&R C - от корки до корки. Остальное - по желанию

ktotuta
()
Ответ на: комментарий от true_admin

>А я нашёл там по косвенным признакам что это за тип :).

и который же?

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

компиляторы ANSI C по непонятным мне причинам (вопреки своему стандарту) считают, что sizeof void == 1, и позволяют выполнять смещение (снова вопреки стандарту) на один байт после приведения к void *. компиляторы C++ этого не позволяют, и хаков для получения гарантированного байта лично я найти так и не смог

вообще говоря, мне из стандарта ни C, ни C++ ответ на поставленный вопрос не очевиден. есть два более-менее корректных подхода - unsigned char как byte (и byte *), либо void *. а так, по существу - implementation-specific. как повезёт, короче говоря

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

А почему именно unsidned char а не просто char? Я понимаю что он может быть signed, но разве это сильно влияет?

sizeof(char)=1. Так как результат sizeof может быть аргументом malloc а malloc в качестве параметра принимает кол-во байтов то значит char это один байт.

с другой стороны там сказано что любой объект можно представить в виде массива char(пункт 3.9). Т.е. даже те объекты которые занимают несколько байт подряд. Это значит что расстояние между соседними char-элементами равно нулю, иначе бы memcpy не работал так как указано в стандарте.

Притянуто, конечно, за уши :).

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

>sizeof(char)=1

стандарт этого не гарантирует

>Так как результат sizeof может быть аргументом malloc а malloc в качестве параметра принимает кол-во байтов то значит char это один байт

результат sizeof - константа времени компиляции. и что? вывод насчёт char взят с потолка

>расстояние между соседними char-элементами равно нулю

а расстояние между какими элементами нулю не равно? массив определяется как последовательность в памяти, это ж не список

>иначе бы memcpy не работал так как указано в стандарте

учитывая, что есть системы, на которых sizeof char != 1, утверждение несколько сомнительное

>Притянуто, конечно, за уши

более чем. беда в том, что там или притягивать за уши, или идти против стандарта

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

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

По поводу одного байта посмотрите stdint.h из C99.

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

>в стандарте, кстати, ничего не сказано о том как вывести текст на консоль красными буковками

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

читая K&R, какого-нибудь Саттера или "stdint.h из C99", решение найти можно. а вот читая стандарт (который якобы читать легко) - хрен там

>В приведенной цитате ничего не говорится о том, что я считаю, что в стандарте C++ каждый человек сможет найти то, что по его мнению обязательно должно быть в любом стандарте

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

>По поводу одного байта посмотрите stdint.h из C99

и что же я там увижу? к слову, стандарт C99 я не смотрел, может там это недоразумение и поправили

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

Я не передергиваю. Ты просто не понимаешь (или просто решил поспорить на пустом месте) главного: стандарт C++ - это документ, в котором помимо синтаксиса описываются МИНИМАЛЬНЫЕ ГАРАНТИИ касательно тех или иных аспектов языка, поведения функций, алгоритмов и т.д. Ничто не мешает создать полностью соответствующий стандарту компилятор языка C++ на машине, минимальная доступная для адресации единица памяти которой составляет, например, 9 бит. Какие тут байты? Какой "переносной ассемблер"? Причем sizeof(char) на такой машине все равно будет равен 1. Это все описано в стандарте, но ты никогда не найдешь в нем ответа на вопрос "Почему так?", никаких "решений" - для этого существуют другие книги.

Именно поэтому, человеку, полностью не знакомому с языком, прежде чем начать создавать что-то на нем следует для начала почитать более "лирического" Страуструпа, Мейерса или даже что-нибудь попроще. Понять возможности, идеологию, цели, историю языка. А как иначе? Это чрезвычайно сложный и мощный инструмент. Только после этого отпадут обывательские вопросы, а заодно придет понимание, что лучшего источника информации по C++ чем стандарт - не существует. Ты просто заглядываешь в стандарт и смотришь не вышли ли по забывчивости твои предположения за пределы пресловутых минимальных гарантий языка, стандартной библиотеки. Это занимает минимальное время, потому что читается он, бл**ь, легко :)

mannaz
()
Ответ на: комментарий от jtootf

По существу дискуссии: условие sizeof(char) == 1 всегда и везде истинно (5.3.3 Sizeof), а на системах c 8-битными байтами ты можешь смело приводить указатели к char* и "осуществлять смещение на ровно один байт" (начни с 1.7 The C++ memory model). Только не забывай при этом про ограничения, связанные с выравниванием памяти, т.к. спарки, например, не такие добрые по части адресации как x86.

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

>Ты просто не понимаешь (или просто решил поспорить на пустом месте) главного

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

>МИНИМАЛЬНЫЕ ГАРАНТИИ

да я не против, лишь бы описывались они лаконично и однозначно

>минимальная доступная для адресации единица памяти которой составляет, например, 9 бит

ок, "возможность адресовать один байт" замени на "возможность адресовать минимальную единицу памяти"

>Причем sizeof(char) на такой машине все равно будет равен 1. Это все описано в стандарте

6.2.5.3: объект типа char должен быть достаточного размера для того, чтобы вместить любой символ из basic execution character set

5.2.1: представление любого символа из source и execution character set должно умещаться в байт

где тут требование равенства одному байту? или у нас какие-то разные стандарты?

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