私は約18か月のPythonプログラマーであり、1つのインターンシップといくつかのサイドプロジェクトで構成されており、自分はこの言語にかなり慣れていると思います。
ただし、プログラミング分野ではRubyに多くの注意が向けられているようですが、Pythonにはあまり注目されていません。
それでは、Rubyを学習する際に、Rubyの単なる悪い習慣であるPython的なものがあるでしょうか?何に注意し、何を避けるべきですか?
私は約18か月のPythonプログラマーであり、1つのインターンシップといくつかのサイドプロジェクトで構成されており、自分はこの言語にかなり慣れていると思います。
ただし、プログラミング分野ではRubyに多くの注意が向けられているようですが、Pythonにはあまり注目されていません。
それでは、Rubyを学習する際に、Rubyの単なる悪い習慣であるPython的なものがあるでしょうか?何に注意し、何を避けるべきですか?
回答:
Plone / Zopeコンサルタントだった2003-5年にPythonをやりました。その後、2006年にRubyを取り上げ始めました。振り返ったことがありません。プログラミング言語や文化が異なると、さまざまな人がより快適に感じると思いますが、私にとっては、RubyはPythonよりもずっと良いと感じています。
個人的には、PythonはRubyと比較して、信頼性の高い主力製品であり、たまたま安定していると思います。Rubyはもっと楽しいです。それはより見栄えの良い言語であり、実践者を驚かせ続ける多くの楽しくてファンキーなことをするように作ることができます。Pythonの人々が、あまりにも危険であるとRubyを攻撃するのを聞いたことがあります。クラスを再び開き、そのようなワイルドで無責任なことをするのは簡単すぎると言います。しかし、それはRubyを私にとってアクションアドベンチャーコメディロマンスのように感じさせるものの一部です。対照的に、PythonはIkeaの家具に似ています。快適で、快適で、信頼性がありますが、決して驚かされることはありません。
私の観点から見ると、Rubyの2つの優れた点は、それをPythonと明確に区別する2つの点です。まず、RubyはPerlの影響を大きく受けています。Pythonは反Perlであることを誇りにしているようです。しかし、RubyがPerlから借りたものは非常に実用的な価値があります。たとえば、正規表現を取り上げます。Rubyでは、正規表現を自然に書くことができますif mystring =~ /^\s+hello word!/ ...
。Pythonでは、それほど多くはありません。Pythonは、すべてを一様に予測可能な構文に従うようにすることにあまりにも肛門だからです。Rubyでは、ですぐにSTDINを取得できますinput = STDIN.read
。Pythonでは、あなたがする必要はありimport sys
当時と
sys.stdin.read()
。これらは、PythonがPerlから遠ざかり、予測可能なほど規則的になる努力が、それぞれの場合に正しいと思うことを行うRubyの意欲に勝る2つの例にすぎません。
RubyとPythonを区別するもう1つの点は、RubyがLispに非常に近いのに対して、Pythonはほとんど必須のプログラミング言語であるということです。これはRubyにとって大きなプラスになると思います。
Pythonに比べてRubyでより少ないコードでより多くのことを可能にするRubyのLispのような機能が多数あります。たとえば、Rubyのすべてのステートメントと制御構造は値を返しますreturn
。ステートメントを使用せずにRubyで逃げることができます。if
ステートメントも値に評価されるため、このようなものを書くことができます
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
Pythonで書く必要があります
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Pythonはresult =
2回入力します。それはあまり乾燥していません(自分自身を繰り返さないでください)。このような多くの例がありますが、RubyはLispのような性質のためにPythonよりもDRYになります。Rubyの作成者であるMatzは、Lispのバックグラウンドから来ました。
一部の人々は、Rubyはメタプログラミング(別名ダイナミックプログラミング)でPythonのお尻も蹴ると言います。Pythonの人々は、メタプログラミングは危険すぎると言うか、理論的には、RubyがPythonで実現できるすべてのメタプログラミングをまったく異なる方法で実現できると言うことで対応します。しかし、誰もが同意していることの1つは、メタプログラミングはRubyよりもPythonの方がはるかに一般的ではないということです。メタプログラミングは旅行なので、それはあまりにも悪いことです。
結局のところ、RubyとPythonの両方が仕事を成し遂げることができるのはおそらく本当だと思います。CとJavaと比較すると、RubyとPythonはほとんど同じものです。表現力豊かで生産性の高い高級言語です。
だから、それはあなたの性格に帰着します。
物事が予測可能で、定期的で、安全であることが好きですか?プログラミングの命令型が好きですか?いつかGoogleで働きたいですか?Perlは混chaとした地獄のスポーンだと思いますか?Pythonに固執します。
プログラミング結果を達成するための絶対に最も簡潔な方法を見つけることに大きな喜びを感じていますか?規則性と均一性に飽きていますか?独自のスタイルでコードを書く自由があり、独自のクールなトリックを思い付くスペースがたくさんありますか?CよりもLispに親近感を感じますか?Perlのソフトウェアプログラミングへの画期的な貢献に大きな賞賛を感じていますが、それが少しだけ謎めいてくならないようにしたいだけです。他の人が詩を考えるようにコードを考えますか?Rubyをお試しください。
result = "world" if output=="hello" else "there"
は完全に有効なPython(および3文字より短い)です。
場合によります。
私にとって、pythonはrubyよりもはるかに簡単に理解でき、さらに両方の言語の目的が異なります。
Pythonは、Cに比べて簡潔で簡単に保つために、多くの低レベルの洗練されたものを備えた、より古典的な言語です。PythonにはRubyの野望はありません。Rubyにはもっと多くの高レベルの機能があります。
Rubyを学ぶのに害はありません。新しいことを発見しますが、PythonはCの成功をもたらした単純なプログラミングパラダイムに近いため、生産性が大幅に向上することに注意してください。Rubyは、一般的なプログラミングの概念(Schemeおよびそれらのすべての「優れた」言語)をさらに進めたい人に適しています。
すべてにニッチがあります。たとえば、Python(django)はGoogleApp Engineの第一級市民ですが、多くの生物情報プロジェクトの言語または選択肢です。Pythonには多くの市場価値があります(Pythonで多くのことをしたからといって、多くの未承諾の仕事の見込みがあります)が、Rubyもそうです-さまざまな分野で。ここで何度も聞いたことがあることは間違いありませんが、これは常により多くの言語を学ぶのに役立ちます。複雑になりますか?利用可能な言語とフレームワークは互いに類似しているため、COBOLを学ぶよりもはるかに複雑ではありません。1つの例は、Rubyのgemとpythonのpipです。
言語はツールであり、すべてのツールが目的であることを忘れないでください。知っているツールが多ければ多いほど、より速く、より簡単に、より正確にツリーハウスを構築できます。
ルビーを学ぶべきですか?はい。
新しい言語を学ぶことは常に価値があり(特に、あなたが知っている言語とは異なるプログラミングパラダイムを実施する場合)、時には他の言語でプログラミングする場合でもより熟練することができます。たとえば、私はLispから知っている関数型プログラミングのほとんどを取り上げ、それをPythonとRubyに必要なときに適用します。
難しいでしょうか?Pythonを学んだことがあるなら、Rubyも学ぶことができます。
また、仕事を探している場合にも役立ちます。技術に興味があり、自分で学べることを示しています。
c2.comにはRubyとPythonの優れた比較があります。