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

11

Я новичок в Python, и мне очень нравится это до сих пор. Один вопрос, который мне приходит в голову очень часто, заключается в том, нужно ли мне понимать и, следовательно, изучать внутреннее пространство языка программирования (как в моем случае Python). Как вы, возможно, знаете, сам Python написан на C.

Итак, мой вопрос: насколько глубоко нужно погрузиться в язык программирования, чтобы хорошо владеть этим языком или свободно владеть им. Я сравниваю этот вопрос с «естественными» языками. Я не знаю каждой детали грамматики на своем родном языке, но я могу выразить себя без проблем на этом языке. Это когда я говорю, что я свободно говорю на языке. Это относится и к языкам программирования?

Фло Шенфельд
источник
4
Внутренние органы становятся важными, когда вам приходится беспокоиться о производительности.
Gort the Robot
7
Я знаю немало о внутренностях CPython и PyPy, но в 80% случаев они бесполезны (или даже вредны, как отвлекающие) для моего программирования на Python. Я рад, что знаю все эти 20%, и это касается не только производительности, но и понимания глупых сообщений об ошибках и предотвращения непереносимого поведения.
2
Нету и нету. Определенно не дубликат ни того, ни другого.
1
Это зависит от того, что вы подразумеваете под «внутренними компонентами», но я знаю, что профессиональные программисты на C # и Java нередко имеют хоть какое-то понимание CLI или JVM.
user16764

Ответы:

8

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

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

  2. Понимание «культуры» языка помогает вам писать программы, которые следуют «наилучшим методам», делая их более понятными, более понятными и более эффективными.

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

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

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

Роберт Харви
источник
7

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

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

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

Telastyn
источник
0

Я бы определил «опытный» с языком как:

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

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

Например: я знаю, что и VB.NET, и C # компилируются в IL .NET (Intermediate Language) .NET, который затем компилируется для целевой платформы. Я не знаю много о IL, но знаю достаточно, чтобы распознать его, когда увижу, и понять в общем смысле, как он справляется с определенными вещами. Я считаю себя опытным в C #, но не в VB.NET, несмотря на то, что «внутренности» одинаковы, и мое понимание их не глубокое.

Bobson
источник