... как я могу развить навыки программирования, которые можно применять ко всем языкам, а не только к одному?
Ключ к этому вопросу - превзойти язык и думать не на том языке, на котором вы кодируете.
WAT?
Опытные программисты-полиглоты думают в абстрактном синтаксическом дереве (AST) своей ментальной модели языка. Кто-то не думает «мне нужен цикл for здесь», а скорее «мне нужно циклически перезаписать что-то» и переводит его в соответствующий, или while, или итератор, или рекурсию для этого языка.
Это похоже на то, что можно увидеть при изучении разговорного языка. Люди, которые говорят на многих языках, свободно думают значение , и оно выходит на данном языке.
Некоторый ключ к пониманию этого AST можно найти в паре видеороликов, посвященных отслеживанию движений глаз, с помощью Eye Tracking и Eye-Tracking Code Experiment (Новичок), где наблюдаются движения глаза начинающего и опытного программиста. Можно увидеть, как опытный программист «скомпилирует» код в свою ментальную модель и «запустит» его в своей голове, а новичку придется перебирать код по ключевому слову по ключевому слову.
Таким образом, ключ к вопросу о развитии навыков программирования, применимых ко всем языкам, заключается в изучении нескольких языков, чтобы можно было дистанцироваться от наличия ментальной модели одного языка и развить способность самостоятельно генерировать AST для проблемы в язык головы, который затем переводится на данный язык.
Как только у человека появляется возможность использовать AST в голове, изучение другого языка в рамках аналогичной школы мысли (переход на Befunge - это небольшой переход от Java, но не так много от Forth ) становится намного проще - это «просто» перевод AST на новый язык, который будет намного легче в 3-й, 4-й и 5-й (и т. д.) раз, когда это будет сделано.
Существует классическая статья « Настоящие программисты не используют Паскаль» . Часть этого гласит:
... Настоящий Программист может писать программы на Фортране на любом языке
Есть также биты, для которых вы не можете просто использовать умственную АСТ - вам также нужно думать на языке. Это занимает немного времени (я все еще обвиняюсь в написании кода на Perl на Python, и мой первый код на Лиспе был рассмотрен с надписью «Это очень хорошая программа на Си»).
На это я должен указать на статью, опубликованную ACM, « Как не писать фортран на любом языке» . Третий абзац статьи (это не ведущие кавычки) непосредственно касается рассматриваемого вопроса:
Характеристики хорошего кодирования превосходят все языки программирования общего назначения. Вы можете реализовать хороший дизайн и прозрачный стиль практически в любом коде, если примените себя к нему. Тот факт, что язык программирования позволяет писать плохой код, не означает, что вы должны это делать. И язык программирования, который был разработан для продвижения хорошего стиля и дизайна, все еще может использоваться для написания ужасного кода, если кодер достаточно креативен. Вы можете утонуть в ванне с небольшим количеством воды, и вы можете легко написать совершенно нечитаемую и не поддерживаемую программу на языке без переходов или номеров строк, с обработкой исключений и универсальными типами и сборкой мусора. Пишете ли вы на Fortran или Java, C ++ или Smalltalk, вы можете (и должны) выбрать хороший код вместо плохого.
Это не просто иметь AST - необходимо иметь AST, который можно перевести на другие языки. Иметь Fortran AST в своей голове и писать код на Fortran на Java - не очень хорошая вещь. Нужно также быть достаточно знакомым с языком и его идиомами, чтобы иметь возможность думать на языке (несмотря на то, что я сказал на самом верху).
Я видел код Java, написанный кем-то, кто не прекратил писать код на Си. Был один объект с основным методом. В этом объекте была куча статических методов, вызываемых main
, и частные внутренние классы, которые имели открытые поля (и, таким образом, выглядели очень похоже на Struts). Это был C-код, написанный на Java. Все, что было сделано, - это перевод синтаксиса одного языка на другой.
Чтобы преодолеть этот пункт, нужно продолжать писать код на нескольких языках, не думать на этих языках при разработке кода, а думать на них при переводе дизайна в код для правильной работы с языковыми идиомами.
Единственный способ достичь этого - развить навыки программирования, которые можно применять ко всем языкам, - это продолжать изучать языки и сохранять этот язык ментального программирования гибким, а не связанным с одним языком.
(Приношу свои извинения ChaosPandion за то, что он заимствовал из идеи, которую он представил .)