あなたは他の言語パラダイムを学ぶことによってあなたのプログラミングスキルを向上させることができますか?


9

もしそうなら、問題が別のパラダイム/言語/テクノロジーにある場合でも、新しいパラダイムを学ぶことでプログラミング問題を解決するためのアプローチがどのように変わったのか教えていただけますか?

特定の方法で教えていただければ、X(つまり、JAVA / C#/ C ++)プログラミングスキルは、Y(つまり、Scheme / Prolog / Lisp)を学ぶことによってどのように改善されたのでしょうか。

また、優れたプログラマーになるために最も役立つパラダイムは何ですか?

私の経験は構造化された-OOP、命令的-手続き型であり、ある程度テンプレートメタプログラミングですが、私の目標は別の言語を学ぶことではなく、問題を解決するためのさまざまなアプローチを学ぶことです。

ありがとう!


1
これに対する答えは、ある種のはっきりしたイエスになると思います
R0MANARMY 2011年

回答:


7

私は毎年少なくとも1〜2つの新しい言語を学ぶようにしています。私が得た最大のものは、問題の解決方法の見方を変えた関数型言語(F#)の学習からでした-私は今、特にLinqを頻繁に使用するC#で、方法の代わりに何をすべきかをマシンに伝えようとしています不変オブジェクトを使用する利点を知ったので、また、高次関数を非常に多く使用しています(パラメーターとしてのメソッド)。その結果、コーディングスタイルが変更(改善)されました。


1
私のPythonプログラミングのための同上。私が使用してしまった手法を学ばなかった場合、ツリーをムンチングしてパーサーを生成するコードをすべて書くことに無残に失敗したでしょう(ツリーはほとんど再帰またはその手巻きバージョンを意味し、パーサージェネレーターは高階関数のパーサーコンビネーターなどに触発されて、Haskellを学習します。

ありがとう、あなたは私が疑っていたものを再確認しました...ありがとうございます!
アルマンド、

2

もちろんです。学ぶすべてのプログラミング言語は、特定のことを行うための異なる方法を持っています。気が狂うものもあれば、愛するものもあれば、ゆっくりと成長するものもあります。

少なくとも新しい言語の基本を学ぶのに時間を無駄にすることは決してありません。


1

わかりました、これが私が遭遇した例です。

私たちが持っていたいくつかの古いコードのプロジェクトでは、比較的古い言語(VB6)を学びました。
言語は非常にウィンドウ指向ですが、.Netフレームワークにあるような高レベルの強力なクラスはありません。

私はいくつかの画像操作を行わなければならなかった、そしてそれは私に画像操作のためのウィンドウAPI関数を紹介した。

.NetのGDIクラスの理解が深まったことを知った後。また、Windows APIを使用すると、はるかに高速になる(関数のラッピングが少なくなる)と理解しています。

つまり、古いコードを学習したとしても、学習して別の視点を得ることができるということです。


1

あなたは他の言語パラダイムを学ぶことによってあなたのプログラミングスキルを向上させることができますか?

私の経験では、確かにそうです。問題を攻撃するいくつかの異なる方法を持つことは、ツールのパレットのようなものです。ある日、(私がしたように)あなたはこれらの他のツールを使うでしょう。または多分そうではない。それはすべて異なります。いくつかの例:

言語は一般に独立しているわけではなく、環境に付属しています。私はawkと呼ばれる奇妙な言語を学ぶのに少し時間を費やしました 。「正規表現」を使用したパターンマッチングに依存しています。C ++ STLを学習しようとしたところ(あまり成功していません)から、マップについて学びました。これら2つのコンセプトを組み合わせると、Pearl(プラットフォームで使用できる唯一の言語)でテキスト変換ユーティリティをすばやく作成できます。

主にそれを楽しむために、Erlangを学習しようとしました(あまり成功していません)。これには、OTPと呼ばれるエラーの処理方法を実装する機能のライブラリがあり、失敗したり、機能を再起動するモニターを備えていることもあります。私はいくつかの領域でこのアイデアを使用しました。時々、無限のテストを実行する代わりに、物事を失敗させるだけです。

Haskellを学ぼうとすること(これはあまりうまくいきません)は、問題を攻撃する他の方法に本当に目を向けました。(私の心に)ある種の関数型プログラミングは、そこにたどり着くための手順を記述するのではなく、希望する結果を示すコードを記述することから始まります。これは、より良いSQLコードを書くのに本当に役立ちました。

最近、JavaScriptを少し試してみました。そして、noderedと呼ばれる環境を見つけました。小さなホームオートメーションサーバーを作成するためのコードは必要ありません。

見方を変えると、さまざまな言語での私のほとんどの取り組みは、人々が何について話しているのかを感じるために、ほとんど浅いレベルにありました(そしてそうです)。私が実際に生産できる言語はほとんどありません。


0

また、関数型言語を少しの間学んだことからも多くのことを学びました。しかし、私がそれから得たのは、並行性をより簡単にする方法と同じくらい、命令型言語とは異なることを行うことではありませんでした。命令型言語でも関数型言語と同じように簡単に適用できますが、何らかの理由で、命令型言語で出くわした例のほとんどはより複雑でした。(他のものは関数型言語ではもっと複雑であることがわかりました。)

新しい言語から学んだもう1つのことは、追加のプログラミングパターンです。私はそれらの多くについて読みましたが、それらのいくつかの本当に優れた実装を見て使用することで、理解しやすくなり、それらの有用性と適切なタイミングを理解できるようになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.