高レベルの管理者に関数型プログラミングを考慮するよう説得するための良い事実上の議論は何でしょうか?[閉まっている]


15

関数型プログラミングが良いアイデアである理由については、「理論的な」議論たくさんあります(それが多すぎて未解決の問題として残っているので、正しくそうです)。

ただし、それらのほとんどは、理論(「エレガンス」など)から作成された議論、または開発者向けの議論です。

問題は、大企業の上級管理職にアイデア提示することを目的とする場合、それらのほとんどはまったく役に立たないことです。一部の人は開発者でさえなく、全員が主にビジネス議論を重視します:コスト、人的資本管理、製品の配送、クライアントサービス、収益。事実に裏付けられない理論的ポイントに関する定量的事実も同様です。

Java / C ++ /(Perl | Python)などの手続き型/ OOPの典型的な組み合わせに対して、関数型プログラミングの概念(特定の言語ではない)の採用を検討する限り、これらのビジネス上の懸念に対処するために説得力のある議論はありますか。

できれば、定量的かつ/または研究や事例研究に基づいた議論を探しています。たとえば、「このリファレンスによると、Lisp / F#のマルチスレッドシステムのバグ率はJavaの10%です」または「トップ3の利益として機能プログラミングという名の望ましいテクノロジーの選好を表明する卒業生の80%」。

Grahamがスターアップの関数型プログラミングのユースケースを提示したことは知っていますが、大規模な既存の企業に有効であると仮定して、彼の議論の一部を受け入れます。

psPerlで関数型プログラミングに近いもの、おそらくPython、そして(おそらく)Java 8またはC ++ 14を実行できることを完全に認識しています。しかし、それはPerl、C ++またはJavaを使用する組織が関数型これらの言語でもOOP /手続き的アプローチ

この言語の目的のために、「大」は、すべての開発者が使用/実行できるものを決定する専用の開発エンジニアリング/ツールグループを持つのに十分な大きさとして定義されます。そして、ローエンドで少なくとも数百人の開発者


1
これを探していますか?paulgraham.com/avg.html実際、この記事は少し時代遅れで、多くの機能的概念が主流言語に入ってきていると思います。
ドックブラウン

34
なぜ高度な管理が、どのプログラミング言語と方法が使用されているのを気にする必要があるのですか?なぜ彼らはそのような決定に関与するのでしょうか?確かにそれは技術管理者の問題ですか?
ハイパフォーマンスマーク

8
@HighPerformanceMark:「高度な管理」を「技術管理者」に置き換え、質問を再度評価します。
ロバートハーベイ

2
どんなビジネスをしていますか?コントラクトプログラミングとコンサルティングを行う場合、機能プログラミングは、経営者がクライアントを感動させると考えるかもしれない流行語かもしれません。
ジェフ

3
現在使用している言語について、経営陣からどのようなビジネス上の議論がありましたか?
ジェフ

回答:


7

非常に単純な議論が1つあり、それは少なくとも経営者を楽しませるかもしれません。

周波数スケーリングは今のところ限界に達しているため、現代のコンピューターが以前のように「高速」にならないことはよく知られています。コアを追加することにより、潜在的な生産性が向上します。

これは、このアーキテクチャを最大限に活用するには、プログラムを並列化する必要があることを意味します。しかし、並列プログラミングは、それがもたらす多くの新しい課題のために、逐次プログラミングよりもはるかに困難です(包括的な概要については、Wikiの記事を参照してください)。

関数型プログラミングは、これらの課題のいくつかを取り除くのに役立ちます。たとえば、副作用のない不変の変数とメソッドのみを使用する場合、競合状態は適用されません。関数型プログラミングの学習曲線は多くの場合急勾配ですが、並列プログラミングの学習曲線はさらに急勾配であり、まったく直感的ではありません。

したがって、より効率的な方法でより効率的なプログラムを作成することが課題である場合、並行プログラムを作成するための人のトレーニングのコストと、関数型プログラミングを学習するための人のトレーニングのコストを比較できます。

混合言語(関数型プログラミングと命令型プログラミングの両方をサポート)に関して:ある時点から、それらは移行に便利な場合があります(人々は「馴染みのある」方法でそれらを使い始め、徐々に新しいアプローチを学びます)。別の点から、これは、関数型プログラミングがもたらす潜在的な利点が誰かの不器用なコードによって取り消される可能性があるため、変装の祝福かもしれません。ガイドラインに従うには一定レベルのチーム成熟度が必要ですが、明確なコーディングガイドラインを確立することでこれを緩和できます(たとえば、Twitterの「Effective Scala」を参照)。この観点から、純粋な関数型言語は、設計によって課されるより厳しい規則のために、ソフトウェア開発にとって「より簡単」であるかもしれません。


これらの主張を裏付ける実際の研究/証拠を見つけることができる場合-特に「関数型言語はこれらの課題のいくつかを取り除くのに役立ちます」-これまでのところ、これが最良の答えになる準備ができています。
DVK

この質問はすでに数回議論されています。例:quora.com/Why-does-functional-programming-favor-concurrencyまたはstackoverflow.com/questions/474497/…–
Ashalynd

3
多くのOOP言語が関数型プログラミングもサポートしていることを除けば、関数型の側面を使用して、お風呂の水で赤ちゃんを捨てることができます。
アンディ

1
質問は、「関数型言語」ではなく「関数型プログラミング」に関するものでした。文言を変更します。
アシャリンド

40

あなたは間違った側からこれに近づいています。ほとんどの企業では、経営陣は「プログラミングパラダイムの選択」に責任を負わず、チームを効率的に機能させる責任があります(または少なくともそうすべきです)。もしあなたのチーム全体が関数型プログラミングがあなたの仕事の速度または品質を改善すると確信しているなら、管理者を説得するのも難しくないはずです。さらに、あなたのチームが確立されたプログラミング言語で機能的構造を使用し始め、誰もがそれに満足している場合、許可を求める必要さえないはずです(たとえば、非プログラマーは非機能的および機能的構成体、なぜあなたは彼とその問題を議論したいのですか?)

ただし、チームの他のメンバーがFPについて異なる意見を持ち、他のチームメンバーが理解できないあなたの機能コードについて不平を言う場合は、管理に問題が発生する可能性があります。場合、チームは効率を失います。

要点は次のとおりです。他のチームメンバーやチームリーダーを説得しますが、ハイレベルな経営陣は説得しません。

編集:あなたのコメントのために-実際には、これあなたの質問への答えです;-)。私が話している事実上の議論の1つは、「チーム全体がFPが仕事をするのに役立つと考えていることです。私見は、最高レベルの経営陣によって受け入れられる可能性が最も高い議論であり、非常に実用的です。技術的議論を使用すること「技術的な理由を理解するにはあまりにも愚かな」ためではなく、技術専門家が技術的な決定を下す必要があることを知っているほど賢く、依存しないほど賢いためたった一人の専門家の意見で。


7
19人が質問に全く答えない答えを支持したことに驚いています。実際の状況では、これは実際的な質問です。チームメンバーには声がなく、納得する必要もありません。また、未承認のテクノロジー/言語に関しては、問題が明確になったため、彼らも機能しません
DVK

1
@DVKは、他の誰もあなたのコードを見ない場合、あなたの言語が良いことを他の誰かに納得させる必要はありません。使い始めてください。
user253751

2
@DVK-経営陣が会社で使用される言語をどのように制御しているかについて、より多くの洞察を提供する必要があります。ほとんどの場合、経営陣はチームとそのリーダーに任せているため、この分野へのインプットはほとんどありません。
ジェフ

3
@DVK:目の前の質問に最も役立つと思う回答者に賛成票を投じます。ほとんどの人があなたが間違った問題に近づいていると答える答えを支持しているなら、それは多くのプログラマーが同様の状況であり、これらの「非回答」が役に立つことを示唆するかもしれません。ほとんどの人があなたのビジネスに根本的に不健康なものがあることに同意し、それは言語の選択とは関係ありません。ほとんどの人はこれに対処する必要があることに同意します。言語を選択した直後に行おうとすると、一連の解決策ではなく、次の障害に単純につながります。
コートアンモン-復帰モニカ

1
@CortAmmon質問は、質問者の会社の運営方法に問題があることを示していることに喜んで同意しますが、彼がそのような問題を修正する立場にある可能性は非常に低いです。独断的なCTOが引き起こす可能性のある問題を実際に目にしました(実際、昨日だけは、「プログラムファイル"Windowsマシン上のディレクトリ。ただし、Rubyは名前にスペースが含まれるディレクトリにはインストールされません。
Jules

16

関数型プログラミングが世界に引き継がれない理由を理解するには、プログラミング言語の決定の背後にある企業の考え方を理解する必要があります。しばらくJavaを選択するには:

  1. 通常のJavaコードの連なりを書くことができるプログラマーの軍隊があります。これは、LispやHaskell(またはScala)プログラマーには当てはまりません。
  2. 他の誰もがJavaを使用しているので、それは良いに違いありません。Corrolary:マネージャーは、コマンド構造の誰も聞いたことのない曖昧な言語に対して、Javaの選択を正当化する必要はありません。

あなたの組織がすでに名詞王国に定着している場合、関数型プログラミングに大規模な変更を加えることは起こりません。言語の選択(およびそれを囲む他のすべての選択)は、すでに企業文化に深く組み込まれています。

あなたの目標がソフトウェア開発者として成長することであると仮定すると、あなたの最善の策は

  1. 機能的概念を既存のプログラム組み込み、有用で適切な場合、
  2. 言語に追加された新しい機能言語機能を使用します。
  3. オブジェクト指向の設計パターンを学びましょう。そのいくつかは、機能言語にはないオブジェクト指向言語の言語の欠陥を克服するために存在します。

ポール・グラハムの議論は本当にスタートアップにのみ当てはまり、純粋に機能的な言語を使用して始めた企業の注意書きがいくつかありましたが、その後、彼らはビジネスの最初の注文がすぐに機能的なコードベースを変換することであった別の企業に買収されました既存のソフトウェア開発者がそれを理解できるように、OO言語に。


1
いいえ、私の目標は(この質問の目的のために)「ソフトウェア開発者として成長する」ことではありません。私の目標は、決定を下す人々に提示するための最良の議論を収集することであり、承認されたアプローチとしてFPを許可する方向に彼らを揺さぶるでしょう。それ以上でもそれ以下でもありません。特に標準OOP /プロシージャスタックと比較して、FPの利点を強調します。
DVK

また、私が大きな言い回しを間違えない限り、質問は間違いなく、求められている議論の意図された結果として「卸売変更」を暗示することを意味しませんでした。
DVK

名詞の王国の+1。私はそれを「名詞と動詞の間の戦争」と呼んでいます。
ロブ

4
@DVK:何かを管理することを説得する方法
ロバートハーベイ

9

私の(やや皮肉な)経験で、関数型プログラミングを使用したショップで働いて、他のいくつかの人にインタビューしました:

  1. 関数型プログラミングの経験があり、非技術系幹部を説得することができたCTOや他の高レベルの技術者が常にいました。(そして偶然にも、これらの人々は私よりもあなたの質問に答える資格があります。)
  2. これらの人々が会社を辞め、この傾向を持たない人々に取って代わられると、物事は南に進みます。新しい人たちは、前に出てきたものを構築するために使用された奇妙なプログラミング言語とパラダイムで、うまくいかないものすべて(特に自分の失敗を含む)を非難します。彼らは関数型プログラミングのスキルを持つ残りの人々を疎外し、彼らを会社から追い出します。関数型言語で構築されたシステムは、メンテナンスされないまま劣化します。私の考えでは、この種のことは、関数型言語を採用した場合にビジネスが受ける最大のリスクであり、過小評価してはなりません。
  3. 組織がこれを機能させるには、「購入ではなくビルド」の文化が必要です。関数型言語を採用すると、「購入」オプションが少なくなるためです。
  4. ほとんどの場合、アイデアの技術的および非技術的中傷者に対して何らかの妥協がありました。これらの妥協の中で最も一般的なのは、JVM以外の言語は考慮の対象外であるということです。ClojureとScalaが提案され、HaskellとO'Camlがすぐに出てきました。

4

上級管理職がプログラミング言語の選択に関与している場合、または上級管理職が考慮すべきこと(奇妙なことですが、信頼できる知識のある人(技術とビジネスに精通している人)に任せるべきです):

  • 生産性
    • 現在および将来の従業員
    • すべてのロール(アーキテクト、開発者、テスター、OPなど)
  • サポートされているプラ​​ットフォーム
    • オペレーティングシステム(ハードウェア?)
  • 言語/プラットフォームの発行者
    • ライセンス
  • 言語/プラットフォームの成熟度
    • 出版社および/またはコミュニティのサポート
    • 図書館
  • 現在のコードベースの移行
    • またはとの統合

これらは関数型プログラミング言語に固有のものではないことに注意してください。これらを使用してデータを提供しない限り、これらも引数ではありません。ビジネスの環境に完全に依存しているため、データを提供することはできません。できることは、ウェブからデータを収集して、特定の言語にどれだけの知識と関心があるかを示すことだけです。StackOverflowの多くの質問やLinkedinの多くのタグを人気のある言語に翻訳するときは注意してください。


1
企業も人を雇うことを懸念しているので、機能的な開発者を交換するのが難しい場合、それが彼らがそのような決定に関与する正当な理由であると言えます。
アンディ

1
@アンディ-はい、だからこそ私は質問に異議を唱えないので、マネージャーは私が述べたトピックに興味を持つべきだと思います。私の心配は、問題(???)が定義される前にソリューション(関数型プログラミング言語)が選択されることです。
エルノ

機能的な開発者を置き換えるのは本当に難しいですか?ここやインターネット上の他のサイトに投稿する情報に基づいた開発者の数から、マネージャーが考えるよりもはるかに多くの機能的な開発者がいると思います。
ジョルジオ

@Giorgio-それらを交換するのは難しいとは言いませんでしたが、私の経験では可用性は場所によって異なる場合があります。一部の大学はそれらを専門とするのに対して、一部の大学卒業生は基礎さえ学ばなかった。企業にとって、長期と新規採用の期待されるニーズに注目することは非常に重要です。
エルノ

@エルノ:あなたの意見に同意します。アンディのコメントにコメントしていました。とにかく、私は常に機能的なプログラマーが非常に少なく、FPは難解なものと見なされていると考えてきました。最近の私の印象は、FPの仕事よりもはるかに多くのFP開発者がいるということです。
ジョルジオ

3

私は議論や事実が役立つとは思わない。そして確かに、あなたが解決したい問題を述べることなしではありません。

一般的な信念と典型的な自己評価に反して、多くの決定は直感に基づいて行われます。多くの場合、これらの決定は非常に良い決定です。なぜなら、潜在的なレベルで決定を行う個人の多くの経験を取り入れているからです。

「すべてのコンピューターの終わりまでCのような言語に固執する」などの決定に挑戦したい場合は、いくつかの引数を提供する以上のことを行う必要があります。

最初のステップは、おそらく、上級管理職がそのような技術的決定において発言すべきである決定の背後にある人物と理由を明らかにすることです。もちろん私はここでしか推測できませんが、彼らは技術的な個人が下した決定のかなりの実績を持っている可能性が非常に高いです。それに直面してみましょう:ほとんどの開発者は、企業レベルで(技術的であっても)意思決定を行うのがあまり得意ではありません。

一度これらの人々がそこに信頼を得るために彼らと話すことを見つけた。おそらく最良のアプローチは、それらに耳を傾けることです。彼らが懸念していること、彼らが見ているリスクとチャンスは何か。彼らが挑戦している問題は何ですか。ここから、この種の決定にテクノロジー関係者を巻き込むように動くかもしれません。多くの場合、経営陣はこれらの意思決定を本当に望んでいませんが、他の人を信頼していません。したがって、チームがアーキテクチャの決定に関与し始め、提案した決定が健全な管理であることを示すことができれば、あなた/あなたのチームを信頼することができます。

適切なアーキテクチャ上の決定を行うために重要なのは次のとおりです。

  • 利害関係者(管理、ユーザー、管理者、営業、クライアントなど)から情報を収集します。
  • その入力に基づいた決定
  • 明確に伝える:(提案された)決定とは何か。緩和を目指すリスク。利益相反とは何か、少し遅れて:どれだけうまくいったか。

たとえば1万人以上の従業員を抱える大企業で働いている場合は、次のレッスンのいくつかを学ぶ準備をしてください。

  • コーディングの速度は、最終的に重要ではありません。
  • 数十年規模の保守性のようなものです。
  • 関数型言語を使用して解決できると思う問題は、最終結果にはあまり関係ありません
  • 1000人の開発者のトレーニング、変更に対する自然な抵抗、使用されているテクノロジーの5年未満の経験を持つ開発者が作成したコードベースの維持などの問題があります。

あなたの議論が聞かれ考慮される信頼のレベルに達したら、あなた、あなたのチームおよび経営陣が信頼する要件を収集し、検討する方法も確立します。

このプロセスにより、特定の領域で機能的アプローチを使用するように推奨されている場合は、完了です。

このプロセスが、現在のメインプログラミング言語が提供する機能を超えた機能的アプローチを無視する推奨事項を作成した場合も同様です。

悪いニュースは次のとおりです。会社の規模とスタイルによっては、数年から数十年かかることもあります。

良いニュースは次のとおりです。途中で多くのことを学びます。

最初のステップは話し始め、特に上級管理職の話を聞くことですから、Just Listenを読むことから始めることをお勧めします。


3

一つの良いアプローチは、それが業界で良い結果を示し、採用されたことを示すことです。

以下からいくつかのデータを取得できます。

理想的には、特にあなたの業界にいる場合、いくつかの上場企業のマネージャーと話をして、彼らから数字と証言を得るようにしてください。

Googleには、Haskell、OCamlなどの他の同様のリンクが多数あります。


3
OOの実践者はFPの支持者よりも大幅に多いため、一部の企業はこれを反対ケースと見ています。
ロバートハーベイ

1
@RobertHarvey-それは少々赤いニシンの議論です。少なくとも私の特定のケースでは。彼らはすでにそれを知るのに十分な知性を持っています。彼らが知らない(そしてこの答えから私が見つけた)ことは、Eaton VanceがSchemeを使用し、さらに重要なことにはFaceboook、BoA / ML、Deutsche BankおよびGoogle [Haskellを使用]であるということです。意味、それは彼らがつま先を浸すことを考慮することができる何かです、他の価値が決定したので。私が尋ねた質問に答えようとした実際に有用な唯一の答えは(答え
たく

1
@dvk:あなたが尋ねた質問(私が正しく理解していれば)は、「FPが良いことだと上司に納得させるにはどうすればいいですか?」です。まあ、時々そうではありません。私たちは不変の世界に住んでおり、関数型プログラミングは、正直言って少し奇妙です。私を信じないなら、モナドを見てください。これらの奇妙な点(およびそれらがソフトウェアの設計と開発プロセスにどのように影響するか)に対処する回答は、それらがそうであるかどうかに関係なく、有用です。
ロバートハーベイ

@RobertHarvey(1)それを取り戻します。現在、2つの有用な回答が最も低い投票数になっています:)(投稿されたばかりの新しい回答は、事実によって改善される可能性がありますが、良いスタートです)。
DVK

@RobertHarvey-はい。質問は「FPは良いことだ」とか「FPが良いことだと人々に納得させることは可能か」ではなかった。質問は非常に正確に「どの引数を使用して、それが良いことだと確信しようとするかをサポートすることができます」でした。「どうやってFPを自分の仕事/コーディングに内密にポジティブな方法で導入できるか」ではなく、あなたが答えたものです-もしそれが私が最初に尋ねないオプションであれば、私はコーディングしています: )
DVK

2

あなたは間違った方向からこれに来ています。

あなたは自分の娯楽のために機能的なパラダイムへの切り替えの管理を説得しようとしています。そして、あなたがそれを望む本当の理由とは何の関係もない、これをサポートする議論を掻き立てようとしています。それ以外の場合は、頭の上部から引数をリストできるため、質問をする必要はありません。

むしろ、あなたが考えるべきことは、現在のビジネスニーズが何であり、それがどのように最適に提供されるかです。機能的なパラダイムを使用して提供するのが最適な場合は、そうです!-プレイできます。ただし、運用上のビジネスニーズ、同僚の必要なトレーニング、将来のプログラマーの背景、保守などを考慮して、公正な分析を行うと、多くの場合そうではありません。


2
これはちょっとした教訓的であり、質問に答えるのにあまり役に立たないので、彼の「アプローチ」でOPを助けるだけではなく抽象化されるべきです。
VF1

1

技術的なスキルのない上級管理職は、機能的なパラダイムの使用などの技術的な側面を気にするべきではありません。これは彼らの専門分野ではなく、マイクロマネジメントの匂いがします。なぜ彼らは実際にスキルを必要とする人にそれらの決定を委任しないのですか?

これは言われていますが、ここでは技術的な背景を持つ人々(最初のケース)とそうでない人々(2番目のケース)を説得するためのいくつかのヒントがあります。

最初のケース

プログラミングを知っている人と話している場合、関数型プログラミングパラダイムなしで記述されたコードと関数型スタイルで記述された同じコードを比較することで十分に納得できます。

命令型スタイルを使用するサンプルC#コード:

var categorizedProducts = new Dictionary<string, List<Product>>();

// Get only enabled products, filtering the disabled ones, and group them by categories.
foreach (var product in this.Data.Products)
{
    if (product.IsEnabled)
    {
        if (!categorizedProducts.ContainsKey(product.Category))
        {
            // The category is missing. Create one.
            categorizedProducts.Add(product.Category, new List<Product>());
        }

        categorizedProducts[product.Category].Add(product);
    }
}

// Walk through the categories.
foreach (var productsInCategory in categorizedProducts)
{
    var minimumPrice = double.MaxValue;
    var maximumPrice = double.MinValue;

    // Walk through the products in a category to search for the maximum and minimum prices.
    foreach (var product in productsInCategory.Value)
    {
        if (product.Price < minimumPrice)
        {
            minimumPrice = product.Price;
        }

        if (product.Price > maximumPrice)
        {
            maximumPrice = product.Price;
        }
    }

    yield return new PricesPerCategory(category: productsInCategory.Key, minimum: minimumPrice, maximum: maximumPrice);
}

関数型プログラミングを念頭に置いて書き直された同じコード:

return this.Data.Products
    .Where(product => product.IsEnabled)
    .GroupBy(product => product.Category)
    .Select(productsInCategory => new PricesPerCategory(
              category: productsInCategory.Key, 
              minimum:  productsInCategory.Value.Min(product => product.Price), 
              maximum:  productsInCategory.Value.Max(product => product.Price))
    );

その後、彼らに尋ねます:

  1. プログラマーは最初のサンプルでいくつの間違いを犯すことができますか?2番目のものはどうですか?

  2. 間違いを見つけるのはどれくらい難しいですか?

  3. コードを変更するのはどれくらい難しいですか?

3つの要素すべてが生産性に影響し、製品のコストにも影響します。

2番目のケース

プログラミングを知らない人を扱っている場合、彼らに伝えることができる技術的なものはあまりありません。説得力のある方法の1つは、あなたの仕事と同僚の仕事に対する機能的パラダイムの実際の影響を示すことです。

たとえば、同じチームが作成した2つのプロジェクトを比較します。1つはFPを使用し、もう1つは使用していません。バグの数がはるかに少ないこと、またはこれが会社が実際に予定通りに納品した最初のプロジェクトであることが十分に納得できるはずです。


3
私はあなたがそこで何をしたかわかりますが、あなたの例は完全に説得力がありません。基本的に、機能的な例を展開して命令的なものにしましたが、これは実際の企業の懸念事項では発生しません。あなたyield returnはちょっとしたごまかしです。それは、とにかくLinqシナリオで使用するコードを準備する方法の例であり、if三項演算子を使用してステートメントをより簡潔に書くことができます。最初の例はすべて、命令型関数にリファクタリングできるため、複雑さが隠されています。
ロバートハーベイ

@RobertHarvey最初の例をリファクタリングして一連の命令型関数にできますが、それらはそのクエリに固有のカスタム命令型関数になります。クエリが正しいことを確信させるために、すべてを確認する必要があります。このリファクタリングは、命令型コードのサイズをさらに大きくします。たとえ同じくらいコンパクトに記述できたとしても、すべての作業は副作用によって行われるため、コードを注意深く読む必要があります。行末の三項演算子の2番目の部分で行われる副作用を見逃したくないでしょう。
ドーバル

1
@RobertHarvey 2つのコードスニペットが同等であるかどうかはわかりません。なぜなら、必須のコードスニペットは、反復をスキップするのではなく、2番目のリストを作成することによって「フィルター」をかけるからです。実際の同等物はループを1つだけ使用するため、さらに深くネストされませんか?
ドーバル

5
機能的概念を他の命令型/オブジェクト指向言語に組み込むための良いケースを作成することは間違いありませんが、必ずしも命令型/オブジェクト指向の企業環境で完全に機能的な言語を使用する場合は必ずしも良いケースではありません。
ロバートハーベイ

あなたの例に関する別の(おそらくあまり妥当ではない)問題:私は完全に読み取り可能なほとんど非FP Perlで最初の例を書くことができます-私は推測しています-ボリュームの30%。多分少ないです。map/ grepを非FPとして受け入れるかどうかによって異なります。IOW、あなたはJavaが悪い言語であり、FPが良いアプローチではないという議論を提示しています。
DVK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.