タグ

関連タグで絞り込む (402)

タグの絞り込みを解除

Programmingとprogrammingに関するrydotのブックマーク (1,407)

  • Haskellでの合成可能なオブジェクトの構成とその応用

    Haskellでの合成可能なオブジェクトの構成とその応用 木下郁章, 山和彦, 2015 Haskellで状態を管理する際は、 一般的に代数データ型や型クラスが用いられるが、 データが拡張できないか、動的な性質を持たない。 そのためHaskellは、 複雑な状態を扱う問題領域には適していないと考えられてきた。 一方で、一般的なオブジェクト指向言語では、 オブジェクトを提供することでこの問題領域で成功を収めている。 論文では、Haskellの言語仕様を変更することなしに、 オブジェクト指向言語から着想を得たオブジェクトを実現する。 論文で提案するオブジェクトは圏を構成し、合成を用いて継承を表現できる。 また、終了する運命にあるオブジェクトやストリーミングなどに応用でき、 複雑な状態を扱うゲームの実装にも使われている。 論文をダウンロード(PDF) PPL 2015 発表スライド ここに

  • コーディング ファスト&スロー: 開発者と自信過剰の心理 | POSTD

    今日は、開発者が見積もりを作成している時に脳内でどんなことが起きているのか話してみたいと思います。なぜこんなにも見積もり作業が難しいのか、そして、私の見積もり精度は相変わらずひどいものですが、私がどうやって(非常に幸せな事業主の方々に向けて)ソフトウェアを書いて生計を立てる術を編み出してきたのかについてお話ししたいと思います。 まずは昔話をひとつ。 あれは\<私がものすごく年寄りには見えない程度の年代をここに挿入>頃でした、私は年若き開発者でした ^(1) 。大学のコーディング演習では優秀な成績を修め、若手開発者として誰がどんな問題を提示してきても解決し、想像を絶する速さでどしどしコードを量産していました。新しい言語は週末の間に習得し、書けるようになっていました(少なくともそう信じていました)。 それで自然な流れとして自分でプロジェクトを取り仕切ることになりました。アカウント・マネージャが

    コーディング ファスト&スロー: 開発者と自信過剰の心理 | POSTD
  • 「ほとんどのユニットテストが役に立たない理由」を読んで | POSTD

    数ヶ月前、私はJames O Coplienの ほとんどのユニットテストが役に立たない理由 という記事に出会いました。Jamesはほとんどのユニットテストは無意味であると考えていて、タイトルは内容をそのまま正確に表しています。彼は 追加記事 で議論をさらに展開しています。私は彼の議論に大変興味をそそられました。というのは、私はユニットテストから多くの利益を得ているからです。私たちはどうしてこのような異なる見解を持つに至ったのでしょうか? 私が何かを見逃したのでしょうか? 結局のところ私は彼の見解に賛成できませんでした。以下は彼の記事に対する私の意見です。 ユニットテストが必要な場合 私の経験では、ユニットテストはアルゴリズムロジックに対して行う時に最も有益です。結合度の高いコードについてはその性質から特に有益ではありません。結合度が高いコードはユニットテストのために多くのモックオブジェクト

    「ほとんどのユニットテストが役に立たない理由」を読んで | POSTD
  • クラスは知ってるけれどクラスの使い道がわからないあなたへ - ぴよぴよ.py

    「クラスは知ってるけどクラスの使い道がわからない」 「クラスとインスタンスの違いがよくわからない」 初心者にありがちなことだと思います。 クラスの存在価値がわかるまでって意外と大変です。 クラス・インスタンス・オブジェクト指向といえばJavaな気がします。 今日はクラスのありがたみをJavaのサンプルコードを用いながら、 簡単にではありますが説明してみたいと思います。 ここではクラスの「使い方」ではなくて「使い道」について話していきます。 (使い方がわからなくても、ついていけるとは思います) それではまずは、簡単な問題を出してみたいと思います。 怖がらないでください。 (1)あるグラフの上に、図のようなに3つの点が有ります。この3つの点の座標を持つプログラムを書いてみてください。 特に強いこだわりがなければ、ファイル名はLesson.javaとつけることにしましょう。 かけましたか? 書け

    クラスは知ってるけれどクラスの使い道がわからないあなたへ - ぴよぴよ.py
  • 型付けを活用してテストを減らす:静的型を使ったTDD Part 1 | POSTD

    私はテスト駆動開発(TDD)について、Kent Beckの著書『 Test-Driven Development By Example 』(邦訳『テスト駆動開発入門』)で学びました。これは大変優れた入門書で、TDDにますます関心を持つようになった私は、さらにSteve FreemanとNat Pryceの著書『 Growing Object-Oriented Software, Guided by Tests 』(邦訳『実践テスト駆動開発:テストに導かれてオブジェクト指向ソフトウェアを育てる』)を読みました。このも私のお気に入りです。 ただし、両書には弱い部分もあります。現代の静的型システムがテストを補ったり、場合によっては置き換えたりできるかもしれないことには、全く触れていないのです。このようなを読んだだけでは、”typing”(型付け)と聞いてもキーボードの”タイピング”のほうを考

    型付けを活用してテストを減らす:静的型を使ったTDD Part 1 | POSTD
  • プログラマを悩ませること Top 10 | POSTD

    10. 「何か」は分かるが「なぜ」が分からないコメント プログラミング入門コースでは、早い段階かつ頻繁にコメントを記述することを生徒に教えます。プログラムを書き始めた初期段階(ごく単純なコードであっても、時に理解し難いことがあります)では、これは実際に役立つことなのですが、習慣にとらわれてしまうプログラマが多くいます。 上記のコードが何をするのか分かりますか? 私は分かりません。 問題は、多くのコメントがそのコードが 何をする のかを説明していますが、 なぜ そのコードが書かれているかが説明されていません。では、異なるコメントが書かれた同じコードを見てみましょう。 こちらの方が分かりやすいですね。何が起きているのかを完全に理解できるとは言えませんが、最低でもなぜこのコードが必要なのかが文脈から判断することができます。 コメントは、構文を理解してもらうためにではなく、読み手がコードを理解しや

    プログラマを悩ませること Top 10 | POSTD
  • 多くの若きプログラマたちが学ぶべきこと | POSTD

    私はこの7年半、 Ronimo でプログラミングを学ぶ多くのインターン生を指導し、様々なタイプの大学生や大学院生を見てきました。彼らのほとんどには、共通して言える学ぶべきことがあります。特別なテクニック、アルゴリズム、数学、あるいは特定の形式についての話だと思う人もいるかもしれません。もちろんそれも必要ですが、中心的なものではないと私は考えます。彼らが主軸として学ぶ必要があるのは、自己統制力です。常に可能な限り読みやすいコードを書き、開発中の変更により秩序がなくなってきた時にはきちんとリファクタリングを行い、使用されていないコードを除去し、コメントを追加することができるという力です。 プログラミングのインターン生を指導する際、この話にほとんどの時間をかけます。上級のテクニックでもなければエンジンの詳細についてでもなく、概ね彼らにより良いコードを書かせることに主眼を置きます。いつもインターン

    多くの若きプログラマたちが学ぶべきこと | POSTD
  • Haskell の Monad とは言語内DSLのフレームワークである - あどけない話

    この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の利用者に分かるかは不明です。 Haskellを勉強したのですから、 代数データ型 型クラス は分かっていることにします。Monad は、単なる型クラスの一つで、それ以上でもそれ以下でもありませんから、この二つが分かってないと話になりません。 また、言語内DSL(以下、DSLと略記)という考え方を知っていることも仮定します。Monad とは、DSLのフレームワークという直感を与えるのが、この記事の主眼ですからね。 さらに、構造化定理をいう単語を聞いてもビビらない人を想定しています。逐次、反復、分岐があれば、計算しうる計算はすべて記

    Haskell の Monad とは言語内DSLのフレームワークである - あどけない話
  • 関数型プログラミング言語の定義&実装の仕方の例 - Qiita

    前置き:何となく成り行きで何か書かないと心苦しいので、殴り書きレベル & 文才がなくてつまらない & 関数型言語の授業等を受けたことがある方にはものすごく当たり前の教科書的内容ですみませんが、取り急ぎ自分が容易に書けることを書きます。(この記事に直接の関係がある)質問があれば、(すぐに反応できない場合もあると思いますが)なるべく答えます。誤植などの指摘も助かります。 さて、プログラマならば誰しも一度は「オレオレ・オリジナル・プログラミング言語を作りたい」という欲求を抱きますよね。(抱きますよね?) そのとき、文字列レベルの文法(具象構文(concrete syntax)と言います)はわりと誰でも(?)考えられますが、それが木構造レベルでどういう風に表されて(抽象構文(abstract syntax)と言います)、どう動作するのか(操作的意味論(operational semantics)と

    関数型プログラミング言語の定義&実装の仕方の例 - Qiita
  • 「関数型言語」に関するFAQ形式の一般的説明 - Qiita

    前置き: 特定の言語ではなく、関数型言語一般に関する説明です。 ここに書くのが良いのかわかりませんが、それを考える時間ももったいないのでとりあえず書きます。必要が生じたら移転します。 皆様のご要望や自分の気分(?)により随時加筆修正します。 「それは違うんじゃない?」というご指摘はもちろん、初心者の方の素朴な疑問・質問や、「ここがよくわからない」「こういうことも書いてほしい」みたいなコメントも歓迎します。すぐに対応できない場合もあると思いますがすみません。Twitterのesumii宛でも構いませんが、コメントのほうが他の方も見つけやすくて良いと思います。当然ながら(他者に対しても)誹謗中傷等はご遠慮ください。 いただいたコメントはほぼ文に反映していますので、文を読むために、必ずしもコメントを読む必要はありません。もちろん、興味と余裕(?)があればコメントも読んでいただければ非常に有用

    「関数型言語」に関するFAQ形式の一般的説明 - Qiita
  • Game Programming Patterns

    Hey, Game Developer! Do you struggle to make your code hang together into a cohesive whole? Find it harder to make changes as your codebase grows? Feel like your game is a giant hairball where everything is intertwined with everything else? Wonder if and how design patterns apply to games? Hear things like “cache coherency” and “object pools”, but don’t know how to use them to make your game faste

  • 私がコーディングで垂直方向にそろえるインデントをとる理由 | POSTD

    先週、 Hacker News上で興味深い議論が行われました 。テーマは Linux Kernelのコーディングスタイル についてです。 議論の中で私は、 コーディングで垂直方向にそろえるインデントをとるべきか というささやかな聖戦を仕掛けました。私は全面的に賛成です。理由を説明しましょう。 垂直方向にそろえるインデントをとるとは? 簡単な例を挙げてみます。 int robert_age = 32; int annalouise_age = 25; int bob_age = 250; int dorothy_age = 56; ちょっと見ただけで、「bob_age」がおかしいと分かるでしょう。また、目視であちこち探さなくても、全ての値が整数であることが簡単に確認できます。 この考え方は 一般的に 共有 されているわけではありません。ですので、なぜ 多くの 人たち がこれを有効なスタイルガ

    私がコーディングで垂直方向にそろえるインデントをとる理由 | POSTD
  • Jenkinsを使ったコンシューマゲームでのデプロイとテスト

    Jenkins ユーザ・カンファレンス 2015の講演資料です。 弊社で開発したPS3/VitaゲームのJenkins使用事例を紹介します。主な内容としては自動ビルドとデプロイ、自動テストで、デプロイでは並列化を使いPS3向けのROMやVITAのパッケージ、日版、アジア版など、あわせて数百ギガのデータを6時間で作成する手法を紹介します。 また、自動テストではAIを使用したモンキーテストやスモークテストの事例を紹介します。

    Jenkinsを使ったコンシューマゲームでのデプロイとテスト
  • 函数プログラミングの�エッセンスと考え方

    Recent Advances on Transfer Learning and Related Topics Ver.2

    函数プログラミングの�エッセンスと考え方
  • 関数型プログラミングの今昔(仮)

    函数プログラミングの集いで発表したスライド. 後半についての詳細を知りたい方には, Hudak らの A History of Haskell をお薦めします.

    関数型プログラミングの今昔(仮)
  • 山本和彦の発表資料

    2019/11 GHC の GC 2019/09 HTTP/2時代のコネクションの切り方 2019/06 関数プログラミングことはじめ 2019年度版 2018/03 ユニットテストあれこれ 〜 Haskellerの視点から 〜 2018/02 TLS 1.3 draft 23 ハンズオン 2018/02 TLS 1.3 の標準化動向 2017/01 TLS 1.3 2016/09 HTTP/2 and TLS in Warp 2015/11 関数プログラミングことはじめ 2015/11 HTTP/2 in Warp with Haskell lightweight threads 2015/11 Server Implementations of HTTP/2 Priority (revised) 2015/10 Server Implementations of HTTP/2 Prio

  • 関数型言語のウソとホント - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 追記 こんな記事を読むより、まともな関数型プログラミング言語を使ってまともに関数型プログラミングを学ぶほうが、関数型プログラミングについてよほど正確な理解を得られます。少しでも関数型プログラミングに興味のある人は、まずは真面目なHaskellの教科書やすごいHを読んだり、やさしいHaskell入門を読んだりしながら、実際に関数型プログラミングのコードを書いてみることをお勧めします。 繰り返しますが、この記事はあんまり読む必要はないです。関数型プログラミングを理解するには実際に自分でコードを書いてみるのが一番です。関数型プログラミングあ

    関数型言語のウソとホント - Qiita
  • 【C++テンプレートメタプログラミング超入門】もう実行時処理トカゆるふわモテマクロは古い!? スマート女子の今年のクリスマスは C++テンプレートメタプログラミング でモテカワコンパイル時メイク♪

    Home プログラミングC++C++テンプレートメタプログラミング超入門】もう実行時処理トカゆるふわモテマクロは古い!? スマート女子の今年のクリスマスは C++テンプレートメタプログラミング でモテカワコンパイル時メイク♪

    【C++テンプレートメタプログラミング超入門】もう実行時処理トカゆるふわモテマクロは古い!? スマート女子の今年のクリスマスは C++テンプレートメタプログラミング でモテカワコンパイル時メイク♪
  • λ計算とは コンピュータの人気・最新記事を集めました - はてな

    まず無限個の変数が与えられているとする。変数は通常x, yなどど記述される。変数から出発し、次の操作を繰り返して得られるものをλ式と呼ぶ。 λ抽象 λ式Mと変数xから、式λx. Mを生成する操作。これは、変数xに引数を受け取り、値Mを返す関数を意図する。Mに含まれる変数xはこのλにより束縛されるという。ただし、すでに束縛されているものは除く。 関数適用 二つのλ式M, Nを並べて結合した式MNを作る操作。これは式Mが表す関数に引数としてNを与えることを意図する。 またλ抽象や関数適用の範囲を明確にするために括弧を用いる。 例: (λx. xx)(λx. xx),λf.(λx.(f (x x)) λx.(f (x x)))

    λ計算とは コンピュータの人気・最新記事を集めました - はてな
  • 突発簡単チュートリアル2:λ計算の操作的意味論 - sumiiのブログ

    (5/24追記:「λ式とは何か」「β簡約とは何か」あたりは前提知識としています。その部分については、自己引用ですみませんが授業のレジュメや、はてなキーワードのyoriyukiさんによるλ計算についてのエントリなどをば。) ちょー間が空いてしまいましたが、突然再開。λ式 M ::= x | λx.M | M1 M2 の操作的意味論というと、 (λx.M1)M2 → [M2/x]M1 M1→M1'ならばM1 M2 → M1' M2 M2→M2'ならばM1 M2 → M1 M2' M→M'ならばλx.M → λx.M' という帰納的定義によるsmall-step reductionが「普通」です。プログラミング言語を意識して、閉じた式かつ(たとえば)call-by-valueに限ると V ::= λx.M M ::= V | x | M1 M2 (λx.M)V → [V/x]M M1→M1'なら

    突発簡単チュートリアル2:λ計算の操作的意味論 - sumiiのブログ