Я знаю, что изучая язык, вы можете просто купить книгу, следовать примерам и по возможности выполнять упражнения. Но то, что я действительно ищу, - это как овладеть языком, как только вы его выучите.
Теперь я знаю, что опыт является одним из основных факторов, но как насчет изучения внутренних элементов языка, какова основная структура и т. Д.
Есть статьи, в которых говорится, что читайте эту книгу, читайте эту книгу, создавайте эту игру и эту игру. Но для меня это не значит овладеть языком. Я хочу иметь возможность читать код других людей и понимать его, независимо от того, насколько это сложно. Чтобы понять, когда использовать функцию, а когда другую, и т. Д. И т. Д.
Список можно продолжать и продолжать, но я верю, что сделал это правильно. :)
И наконец, возьмите любой язык в качестве примера, если это необходимо, хотя лучше всего было бы, если бы C был взят в качестве примера.
источник
Ответы:
Я должен ответить: «Все вышеперечисленное». Люди спорят о том, является ли кодирование искусством, ремеслом, инженерной дисциплиной или разделом математики, и я думаю, что честнее сказать, что это часть из каждого. Таким образом, чем больше техник вы овладеваете языком, тем лучше. Вот частичный список:
Используйте язык весь день, каждый день. Обычно это означает, что вы работаете на языке полный рабочий день.
Прочитайте все, что вы можете о языке. Особенно "лучшие практики" и идиомы.
Присоединитесь к группе пользователей, чтобы поговорить с другими о языке и о том, что они с ним делают.
Работайте с чужим кодом! Нет более быстрого способа научиться тому, чего не следует делать на языке, чем убирать за тем, кто сделал что-то ужасное.
Поддержите код, который вы пишете - каждая ошибка становится путеводителем по вашим худшим решениям!
Изучать информатику и языки в целом
Выучите совершенно другой язык. Отличным комплиментом для C был бы такой функциональный язык, как Lisp. Это изменит ваш взгляд на процедурный язык наизнанку.
Научитесь использовать рамки и API, доступные для этого языка.
Потратьте время, чтобы сделать свои собственные эксперименты с языком. SICP не применим к C, но отношение к изучению языка путем проверки его пределов является очень продуктивным.
Прочитайте историю языка, чтобы узнать, почему он был таким, какой он есть.
Посетите конференции, чтобы услышать, как говорят авторы языка, или услышать, что лидеры отрасли делают с языком.
Занять урок по языку.
Учите язык другим (спасибо Брайану Оукли )
Подводя итог, делайте все, что можете придумать. Нет возможности узнать все о большинстве языков. Каждая техника обучения, которую вы используете, приносит дополнительную перспективу вашему пониманию.
источник
Every technique you use to learn brings and additional perspective to your understanding.
10000 часов практики - вот что нужно.
Прочитайте "Научите программировать за десять лет"
Ключевые моменты сверху:
источник
НИКОГДА не считайте себя мастером всего языка, пока вы не освоите лучший язык, чем этот. Это означает, что для изучения того, как конкретный язык работает снизу, возьмите книгу, которая научит вас концепциям компилятора / интерпретатора языка. Например:
C: LCC Compiler book
C ++: проектирование и развитие C ++ (а затем продолжайте сборку собственного компилятора C ++ или, по крайней мере, поймите реализацию его с использованием кода компилятора GNU C ++)
Java: получите "Inside JVM" и получите исходный код javac. .C код "Java" также полезен
Python: реализация CPython.
ObjectiveC: Практически любой материал от Apple о внутреннем окружении среды выполнения ObjC и исходных кодов компилятора поможет вам.
Lisp: SICP Book (обучает вас Scheme и базовому интерпретатору-компилятору для языка, похожего на lisp): Lisp in Small Pieces (еще одна хорошая книга).
источник
Попробуйте использовать язык для чего-то, для чего он не предназначен. Напишите драйвер устройства на Python или библиотеку манипулирования матрицей на языке COBOL. Я думаю, что один из лучших способов овладеть языком - это действительно толкать его, стараясь, чтобы его сильные стороны преодолели его слабости.
источник
Я сделаю это легко для вас. Вы никогда не овладеете языком. Период. Если вы думаете, что у вас есть, то вы, очевидно, нет. Нет вершины горы, к которой вы внезапно добрались и сказали: «Ну, теперь я полностью освоил этот язык. Что теперь?» Даже опытные программисты, которые десятилетиями работают с одним и тем же языком, скажут вам, что иногда они сталкиваются с новыми идеями, процессами, практиками и т. Д. Истинная цель - овладеть вашим концептуальным пониманием языка или языков. Способность изучать новые концепции и скорость, с которой вы можете применять новые или измененные функции в языке, гораздо важнее, чем постоянное знание каждого ключевого слова и синтаксиса. Перестаньте беспокоиться о «овладении» языком и просто беспокойтесь о постоянном улучшении и улучшении качества и эффективности вашего кода.
источник
The true goal is to master your conceptual understanding of a language or languages.
Именно так. Это то, что я действительно имел в виду.Вы уже знаете ответ на этот вопрос
Это сводится к тяжелой работе и решимости и ко всему, чего вы, возможно, никогда не добьетесь.
Подумайте, откуда мы взяли этот термин - чтобы стать Мастером-мастером, вы должны были стать учеником, а затем подмастерьем, и только у них может быть шанс стать мастером. По ходу обучения вас будут практиковать, вы будете наблюдать и расспрашивать других в их ремесле и (надеюсь) учиться у них.
Там нет волшебной пули ...
источник
Начните с чтения и понимания, что такое SDLC (иначе говоря , жизненный цикл разработки программного обеспечения). Это итеративный процесс, который включает в себя самосовершенствование, обучение,
**practicing, practicing...**
Это откроет вам горизонты в том, какие области вам нужно изучать или улучшать. Есть несколько основных книг по разработке программного обеспечения, которые вы также найдете очень полезными для чтения, как только вы создадите несколько приложений самостоятельно.
Кроме того, как только вы почувствуете себя уверенно с языком ООП , вы можете начать изучать шаблоны проектирования , и шаблоны Head First Design - действительно хорошая книга для рассмотрения. Я люблю эту книгу.
источник
Там нет замены для опыта. Для того, чтобы овладеть чем-то, вы должны делать это / использовать, для многих разных вещей.
Поэтому используйте этот язык для упражнений (например, Project Euler ) и личных проектов, вещей, которые вам действительно нужны, или вещей, которые вы просто считаете интересными. Написать игру, написать веб-приложение, написать парсер, все что угодно. И на каждом этапе старайтесь понять, что вы делаете, а не просто вставлять код или следовать инструкциям.
Это то, что вы можете сделать сразу, как только вы поймете основной синтаксис. Просто возьмите немного кода и найдите время, чтобы разобраться в нем подробно. Ищите вещи, которые вы не понимаете, или задавайте конкретные вопросы в таких местах, как переполнение стека .
источник
На высокоуровневой стороне проблемы узнайте об архитектуре: как организовать свои проекты, какова ее структура. Не позволяйте им расти случайным образом.
На среднем уровне выучите разные техники и парадигмы. Чем больше в вашем репертуаре инструментов, тем больше возможностей для вас. Если вы изучали только Java, Python и Ruby, вы попали в очень небольшую часть пространства программирования. Изучите императивное и функциональное программирование, изучите пролог и J. Идея состоит не в том, чтобы «освоить» сто языков, а в том, чтобы узнать о различных способах решения одних и тех же задач.
Что касается проблемы низкого уровня, одна вещь, которая может помочь вам стать лучшим программистом (на самом деле лучше во всем, что бы вы ни делали), - это иметь хорошую мысленную модель платформы. Например, вы можете узнать, как работают структуры управления C, и знать наиболее распространенные библиотеки, но если у вас нет ментальной модели работы указателей и памяти, у вас будут проблемы с умеренно сложными выражениями.
источник
Могу ли я сделать пару предложений?
Во-первых, если вы можете найти наставника, чтобы обсудить с вами использование языка и получить лучшие советы и рекомендации, а также ответить, когда одна техника лучше другой.
Во-вторых, практикуйтесь как можно больше и пробуйте язык по максимуму! Раньше я работал в команде, которая (в шутку) каждый день выбирала глагол или другой кусок языка программирования из руководства. Это был бы почетный знак, если бы вы могли внести это в свой код в тот день. Это означало, что вся команда программистов должна была взглянуть и понять (иногда) непонятный термин, чтобы понять и эффективно использовать его. В некоторые дни мы терпели неудачу, но работать в этой команде было весело и по-настоящему технически включено !!
источник
Языки программирования отражают идеи, лежащие в основе парадигм программирования, которые были разработаны для разработки программного обеспечения общего назначения или для разработки программного обеспечения специального назначения. Например, язык программирования, такой как Java, представляет собой парадигму объектно-ориентированной программы, но AspectJ (расширение Java) используется для программирования в соответствии с аспектно-ориентированным программированием.
Учитывая это краткое введение, для того, чтобы действительно овладеть языком, покупка и чтение книги сами по себе не очень помогли бы. Вам нужно понять среду, в которой вы можете программировать, используя нужный язык, узнать о парадигме и, что более важно, создать значимое приложение с использованием языка. Создание небольшого приложения, которое может дать вам представление о различных инструментах, предоставляемых языком, является действительно полезным подходом к обучению.
Я видел людей, пришедших из сообщества чистых Си, которые ничего не изучали об объектно-ориентированности и борьбе в изучении Java или target-c. Я также видел, как люди борются с программированием пользовательских интерфейсов, когда они на самом деле не разбираются в элементах пользовательского интерфейса, программировании на основе событий и т. Д.
Надеюсь, это поможет!
источник
Я бы добавил два пункта в список Глена
источник
Чтобы основываться на том, что сказал @TMN. Я имел большой успех в изучении языков, написав одну и ту же программу на другом языке.
Например, написание программы, которая читает файл CSV, анализирует текст, а затем записывает его обратно во второй файл CSV со столбцами в обратном порядке.
Нравится,
в
Это даст вам базовое понимание или язык. Тогда посмотри, что еще ты можешь сделать. Может быть, разрешить подстановку значений или переупорядочение или чтение из командной строки. Сделайте это так сложно, как вы хотите.
Кроме того, я думаю, что @GlenPeterson сказал о,
Отличная идея. Я бы предложил такой язык, как Haskell, потому что в последних версиях вы можете программировать, используя все четыре парадигмы программирования OO, процедурные, логические или функциональные. Несмотря на то, что это на самом деле функциональный язык, вы можете с некоторыми усилиями реализовать другие парадигмы, которые будут хорошим опытом обучения.
Отличный язык для игры.
источник
Вы не можете выучить язык из книги. Все, что вам нужно, это практика и практика. Не думайте, что Вы можете изучать язык из этой конкретной книги или из этого конкретного источника. Просто думайте, что язык программирования такой же, как человеческий язык. Вы не можете просто выучить английский или французский, читая определенную книгу. Все, что вам нужно, это использовать его в день, чтобы повседневная жизнь. Код с нуля, расширите его функциональность, постарайтесь создать что-то, что сделает вас немного довольным. И если вы думаете, что овладение языком - это знание всего языка и использование каждого элемента языка программирования в практическом кодировании ... ВЫ НЕ МОЖЕТЕ. Или даже если это возможно, это может занять 10-15 лет.
источник