... як я можу розвинути навички програмування, які можна застосувати до всіх мов, а не лише до однієї?
Ключове значення цього питання полягає в тому, щоб вийти за межі мови і думати не тією мовою, яку ви кодуєте.
ВАТ?
Досвідчені програмісти поліглотів думають у абстрактному синтаксичному дереві (AST) власну ментальну модель мови. Хтось не думає, "мені тут потрібна петля для циклу", а скоріше "мені потрібно щось перетворити на цикл" і перекладає це на відповідний, або поки, або ітератор чи рекурсію для цієї мови.
Це схоже на те, що бачить у вивченні розмовної мови. Люди, які розмовляють багатьма мовами, вільно думають про значення , і це виходить даною мовою.
Можна побачити деякі підказки цього AST в парі Eyetracking відео Код Розуміння з відстеженням Eye і Eye-Tracking Code Experiment (Novice) , де рух вушка begineer і досвідченим програмістом спостерігається. Можна побачити досвідченого програміста "скласти" код у свою ментальну модель і "запустити" його в голову, тоді як новачок повинен переглядати кодове слово за ключовим словом.
Таким чином, ключовим у питанні розвитку навичок програмування застосовуватись до всіх мов є вивчення декількох мов, щоб можна було дистанціюватися від розумової моделі однієї мови та розвивати здатність самостійно генерувати AST для проблеми. головна мова, яка потім перекладається на задану мову.
Після того, як у вас є можливість використовувати AST в голові, вивчення іншої мови в подібній школі думки (перехід на Befunge - це трохи стрибок від Java, але не настільки з Forth ) стає набагато простіше - це просто "просто" переклад AST на нову мову, що набагато простіше 3-го, 4-го та 5-го (тощо) часу, коли це робиться.
Є класична стаття, справжні програмісти не використовують Pascal . Частина цього читає:
... визначений Реальний програміст може писати програми Fortran будь-якою мовою
Є також біти, для яких ви не можете просто використовувати розумовий AST - вам також потрібно думати мовою. Це потребує небагато часу (я все ще звинувачую в написанні коду Perl на Python, і мій перший код Lisp було переглянуто, кажучи: "Це дуже гарна програма C".).
Для цього я мушу зазначити статтю, опубліковану ACM, « Як не писати Fortran будь-якою мовою» . Третій абзац статті (який не є провідними котируваннями) безпосередньо стосується питання, що знаходиться під рукою:
Є характеристики хорошого кодування, які виходять за рамки всіх мов програмування загального призначення. Ви можете реалізувати хороший дизайн та прозорий стиль майже в будь-якому коді, якщо застосувати його до себе. Тільки тому, що мова програмування дозволяє писати поганий код, не означає, що ви повинні це робити. І мова програмування, розроблена для просування гарного стилю та дизайну, все ще може використовуватися для написання жахливого коду, якщо кодер достатньо креативний. Ви можете потонути у ванні з дюймом води у ній, і ви можете легко написати абсолютно нечитабельну та нездійснену програму мовою без гото чи номерів рядків, за винятком обробки та загальних типів та збирання сміття. Якщо ви пишете Fortran або Java, C ++ або Smalltalk, ви можете (і повинні) вибрати, щоб написати хороший код замість поганого.
Не достатньо мати AST - він повинен мати AST, який можна перекладати на інші мови. Мати в голові Fortran AST і писати на Java Java код Fortran - це не дуже добре. Треба також бути достатньо знайомим з мовою та її ідіомами, щоб можна було мислити мовою (незважаючи на те, що я сказав у самому верху).
Я бачив код Java, написаний людиною, яка не перестала писати код C. Був один об’єкт з основним методом. У цьому об’єкті були безліч статичних методів, викликаних main
і приватними внутрішніми класами, які мали публічні поля (і, таким чином, були схожі на підказки). Це був код C, написаний на Java. Все, що було зроблено, - це переклад синтаксису однієї мови на іншу.
Щоб подолати цю точку, потрібно продовжувати писати код на декількох мовах, не думаючи тими мовами при розробці коду, але думайте над ними, перекладаючи дизайн у код, щоб правильно працювати з мовними ідіомами.
Єдиний спосіб потрапити туди - можливість розвивати навички програмування, які можна застосувати до всіх мов - це продовжувати вивчати мови та підтримувати цю мову розумового програмування гнучкішою, а не пов’язаною з однією мовою.
(Мої вибачення ChaosPandion за те, що сильно запозичили ідею, яку він представив .)