Чи можете ви вдосконалити свої навички програмування, вивчаючи інші мовні парадигми?


9

Якщо так, чи можете ви сказати, як вивчення нової парадигми змінило ваш підхід до вирішення проблем програмування, навіть якщо проблема полягає в іншій парадигмі / мові / технології?

Я дуже вдячний Якщо ви зможете конкретно сказати мені, як ваші навички програмування X (тобто: JAVA / C # / C ++) покращилися завдяки навчанню Y (тобто: схема / пролог / лісп).

Крім того, які парадигми, які ви пропонуєте, допомагають найбільше стати хорошим програмістом?

Мій досвід лише структурований - OOP, імперативний - процедурний, і в деякій мірі шаблонне метапрограмування, але моя мета - не вивчити іншу мову, а навчитись різним підходам до вирішення проблем.

Дякую!


1
Я вважаю, що відповіді на це будуть якоюсь формою звучного так .
R0MANARMY

Відповіді:


7

Я намагаюся щороку вивчати принаймні 1-2 нові мови. Найбільше я отримав від вивчення функціональної мови (F #), що змінило спосіб я дивлюсь на вирішення проблем - я = зараз я намагаюся сказати машині, що робити, а не як це зробити, особливо в C #, де я сильно використовую Linq і незмінні предмети тепер, коли я знаю переваги їх використання. Я також дуже часто використовую функції вищого порядку (методи як параметри), в результаті мій стиль кодування змінився (покращився).


1
Діто для мого програмування Python. Я б не зміг записати весь код, що генерує дерева і аналізує парсер, певним чином, якби я не вивчив методи, які я в кінцевому підсумку використовував (дерева в значній мірі означають рекурсію або рулонну версію цього, генератор парсера складається функцій вищого порядку і надихається парсерними комбінаторами тощо), вивчаючи Хаскелл.

Дякую, ти ще раз підтвердив те, що я підозрював ... Ще раз дякую!
Армандо

2

Абсолютно. Кожна мова програмування, яку ви вивчаєте, матиме різний спосіб виконання певних речей. Деякі речі зроблять вас з розуму, деякі речі, які ви будете любити, а інші на вас поволі будуть рости.

Ніколи не даремно витрачати час на вивчення хоча б основ нової мови.


1

Добре, ось приклад, з яким я стикався.

Я вивчив відносно стару мову (VB6) для проекту на якомусь старому коді.
Мова дуже орієнтована на вікна, але в структурі .Net не так багато потужних класів високого рівня, як у нас.

Мені довелося зробити кілька маніпуляцій із зображенням, і це познайомило мене з функціями Windows API для маніпуляцій із зображеннями.

Після того як я дізнався, що це дало мені краще розуміння класів GDI .Net. І розуміння того, що іноді використання Windows API буде набагато швидше (менше завершення функцій).

Отже, це свідчить про те, що навіть коли ви вивчаєте старий код, ви все одно можете вчитися та отримувати іншу перспективу.


1

Чи можете ви вдосконалити свої навички програмування, вивчаючи інші мовні парадигми?

На мій досвід, напевно, так. Наявність декількох різних способів атаки на проблему - це як палітра інструментів. Одного разу ви (як і я) вам скористаєтесь цими іншими інструментами. Або, можливо, ні. Все залежить. Деякі приклади:

Мови взагалі не стоять окремо, вони приходять з оточенням. Я витратив трохи часу, вивчаючи дивну мову, відому як awk . Він спирається на відповідність шаблону, використовуючи "регулярні вирази". Намагаючись вивчити ST + C ++ (не дуже вдало), я дізнався про карти. Поєднуючи ці два концепції, я міг дуже швидко написати деякі утиліти, що трансформують текст у Pearl (єдина мова, доступна на платформі).

В основному для задоволення від цього я намагався навчитися Ерланг (не дуже вдало). Він має бібліотеку функцій, відому як OTP, що реалізує, серед іншого, спосіб поводження з помилками, іноді відомий як не дозволяє, і монітор перезапускає функції. Я використовував цю ідею в деяких сферах, іноді просто відпускав речі, а не робив нескінченні тести.

Спроба засвоїти Хаскелл (знову ж таки не дуже успішно) справді відкрила мені очі на інші способи нападу на проблеми. Різновид функціонального програмування (на мій погляд) починається з написання коду, який говорить про те, якого результату ви хочете, а не з написання кроків, пов’язаних із потраплянням туди. Я вважаю, що це дійсно допомогло мені написати кращий SQL-код.

Останнім часом я спробував трохи javascript. І знайшов середовище, відоме як зведене. Код не потрібен для створення невеликого сервера домашньої автоматизації.

Якщо говорити в перспективі, більшість моїх роздумів різними мовами була (і є) на досить мілкому рівні, здебільшого, щоб відчути те, про що говорять люди. Є дуже мало мов, на яких я насправді можу бути продуктивними.


0

Я також багато чого навчився з даблу на функціональній мові протягом деякого часу. Однак те, що я взяв з цього, було менше робити речі, які відрізняються від імперативних мов, настільки, як зробити спрощення одночасності. Він може бути застосований так само легко в імперативній мові, як у функціональній мові, але чомусь більшість прикладів, які я натрапила на імперативні мови, були складнішими. (Інші речі виявилися набагато складнішими у функціональних мовах.)

Ще одна річ, яку я навчився новою мовою, - це додаткові моделі програмування. Я читав про багато з них, але перегляд та використання декількох дійсно хороших їх втілень полегшив розуміння та насправді привів додому їх корисність та коли вони доречні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.