デベロップメントオンラインゲーム開発に最適なプログラミング言語は何か?最近のゲーム開発者は、ゲームをより分かりやすく、魅力的なものにすることに注力しています。そのためには、最適なプログラミング言語を選択するという問題が生じます。すべての要件を満足する言語を選ぶのは簡単ではありませんが、JavaScriptのようなリーダに頼ることは可能です。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。Feathers氏の最新の投稿をめぐり、ブログのコミュニティ上で活発な議論が行われた(source)。Feathers氏は、オブジェクト指向プログラミング言語に組み込まれた機能を使うと、テストが容易に行うことができ、コードの復元性を簡単に高めることができる(source)と主張した。Feathers氏は一つのサンプルを提示した。このクラスXはbadMethodという名前のメソッドを持っている。このメソッドはテストをしにくくするような何か、例えばデータベースを作成/更新したり、低レベルのハードウェアを操作したりする。...}クラスごとのテストや、(関連する機能ごとの)クラス群ごとに独立してテストができるような設計が理想である。badMethodがfinalではなく、オーバーライドすることができるメソッドであるため、テストには好都合と言える。この条件であれば、オーバーライドを行ってテストを簡単にするような割り込みをかけることができるため、テストを行うには十分な柔軟性を持っているといえる。}これはFeathers氏が継ぎ目(seam)と呼ぶもので、他の箇所を編集することなく、機能を実現する部品を取り替えることができる。これはオブジェクト指向言語が提供する、遅延結合と呼ぶテクニックである。この機能のおかげで、関数型言語よりもオブジェクト指向言語の方が復元性の高いテストが行いやすくなるとFeathers氏は信じている。ほとんどのオブジェクト指向言語が、プリプロセッサ、継承、ポリモーフィズム、委譲、マクロ、関数ポインタ、高次関数(関数を引数に取る関数)、動的メソッド、ファーストクラス関数(オブジェクトとして引数に渡したり、返り値で返せる関数)、モジュール境界、モナドなどの何らかの機能が、この継ぎ目として使用できる形で提供されているということを、コメントを付けた人や、Feathers氏自身が述べている。議論に参加している人によると、テスト可能性は言語の選択よりも、プログラムの設計による影響の方が大きいという。John氏は、どんな言語を使用したとしていても「ユニットテストがしやすいようにコードを構造化するのが先決」と表明している。他のブロガーのAndrew氏は、もしテストされるべきコードの固まりがメソッドとして分割されていない場合には、テストのしやすさを向上させるために実装を変更すべきだと書いている。そのために、彼は「継ぎ目について考えることは、テスト可能性を向上させるためのプログラム設計というのはどういうものか、という問題を取り扱うことと同一である」としている。これらの反応を受けて、Feathers氏は、これらの機能はほとんどの言語に実装されているが、重要なのは、これらの機能が簡単につかえるかどうかだ、と述べている。コードがテストしやすいように設計されていない場合においては、これが顕著に表れる。私は、"テスト容易性を高めるための設計"が本当の議論の中心であることを認めます。残念なことに、どんなにそのように設計したとしても、そうならないシステムがあるということも知っています。そのため、私が注意を払うのは復元性というものです。[...]私は継ぎ目をうまく設計することができることは知っていますが、これは問題となるポイントではありません。私が問題だと考えているのは、テスト容易性を高める設計をされていないコードに対して、どうすればこのような仕組みを簡単に組み込めるか、ということです。[...]継ぎ目を使ったとしても、いつも思うようにテストが書けるようになるとは限らないというのは事実です。言語のサポートがすばらしければ、偶然のように継ぎ目ができたり、故意に継ぎ目を作るのも容易になるはずです。Feathers氏のよると、関数型言語にはリンクできる代替モジュールがいくつもある。「Haskelには例外的に、テスト時には避けたいコードがあり、これらはモナドの内部に集中している」と述べている。「関数純粋性のために、ユニットテストを行おうとする意志がそがれる」と主張したが、この意見に対しては厳しく指摘するコメントが数多く寄せられた。「Feathres氏は関数型言語の特徴と、それによってもたらされる可能性を考慮に入れていない」というものである。氏がJavaの構造とイディオムを関数型言語のコードに持ち込もうとしているのではないか、と述べている。最初に彼はOcamlの文法を使ってJavaのコードを書こうとして、しまいにはOcamlはJavaよりも劣っていると不満を述べていました。彼の結論は驚くようなものではありません。Ocamlはシンプルに設計されていて、Javaのようなオブジェクト指向のプログラムを書くには不十分です。次の問題は、彼が、関数型言語はJavaよりもテストを書くのが難しいと結論づけたことです。Ocaml上でJavaのようなコードを書こうとしていたのであればこの結論は正しいでしょう。一般的なOcamlのコードや、関数型言語のコードを書く限りでは、この結論はただしくありません。多くの関数型言語の擁護者は、関数型プログラミングでは副作用が分離されると主張している。M.氏によると、この分離を行うことでリファクタリングが必要となるような悪いコードが書かれることはなくなり、テストはしやすくなる、と説明している。:関数型言語を使用すると、(テストでは)扱いにくいコードはすべてトップレベル(から最下層の部分まですべて)で分離することができ、ロジックをきれいに保つことができます。[...]もし(モジュールの)単体の独立が保証されているのであれば、ユニットテストはとても簡単になります。問題が依存関係にあることは明白です。Goldman氏もまた、「伝統的なオブジェクト指向プログラミングに従って状態をたくさん使用することは、テストにとって有害でしかない」と述べている。いうのも、このオブジェクト指向的なアプローチでは、「テストの準備として、多くのオブジェクトが内部で接続しているような構造を準備する必要があり、期待される副作用を評価しようとすればさらに複雑さが加わっていく」と述べている。一方で「Haskellのような純粋な関数型のフレームワークでは、(テストをしにくくする)原因はモナドの中にカプセル化される」と説明している。Greg氏が述べたように、モナドを使用することで「簡単なコードですぐにIOコマンドをリスト/ストリームに変換するすることができる。他の(IOに依存していた)コードはこのストリームを扱って処理をするような構造になる(ため、IOとの直接の結合をなくすことができる)」。Ericd氏も同様に、内部状態を持たないという関数型言語の特徴に触れて、状態遷移を扱う必要がない、と述べている。「状態変化のないモジュールやシステム」をテストする場合にも、Feathers氏が書いているような種類のテストを書く必要がなくなる、としている。(状態遷移がないコードのテストが終わった後は)入力に関するテストを残すのみです。このテストではすべての境界条件をテストできる入力を集めておき、それぞれのケースで関数にデータを入力してテストを通し、出力を検証するだけです。[...]もし、コンポーネント(純粋な関数)群が個別にテストできて、正しいと証明できたとすると、これらの純粋関数を合成したものも正しいと言うことができます。このような反応に対して、Feathers氏は「関数的な純粋さ(という概念)と、関数的によく設計されたコードがこの手の問題を持たないことには気づいていた」と答えている。すべてのコードがこのようにうまく設計されているわけではなく、「Haskellは副作用をやむを得ず分離した関数型言語の一つでしかない」と述べている。他の言語、例えばOcamlやScalaについては「コードが乱雑になるのを防ぐしかけは何もないように見える」と付け加えた。そのように言ったとしても、Feathers氏に反対する人の多くは、関数型のコード乱雑になる原因は、関数型ではないイディオムを関数型言語に持ち込んだこと以外にはないと信じている。Lispといった、ハイブリッドな言語では副作用をもたらすような非関数型のコードを書くことを認めているが、他の言語では許可されていない」、と述べている。IoC)や、感心の分離(separation-of-concern)の悩みとは無縁となる、と唱えている。Erikd氏はこの意見を論拠として、オブジェクト指向の世界から入った人が質の高いコードを関数型言語で書くための方法として以下のように述べている。「古い習慣や考え方を捨て、可能な限り、オブジェクト指向の機能や、責務ベースのプログラミングの機能を無視する『こと』が必要である。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。