ページ「SL Sharp」と「ペアプログラミング」の間の差分

提供: MonoBook
(ページ間の差分)
ナビゲーションに移動 検索に移動
(ページの作成:「'''SL#'''(えすえるしゃーぷ)とは、GPUで実行されるプログラマブルシェーダーを、超高級言語であるC#で書け...」)
 
 
1行目: 1行目:
'''SL#'''(えすえるしゃーぷ)とは、[[GPU]]で実行される[[プログラマブルシェーダー]]を、超高級言語である[[C Sharp|C#]]で書けてしまうという夢のような[[オープンソース]]の[[フレームワーク]]である。[[ライセンス]]は[[MITライセンス]]となっている。
+
'''ペアプログラミング'''[[英語]]:pair programming)とは、大雑把にいうと[[職業プログラマー]][[冗長化]]することである。
  
 
== 概要 ==
 
== 概要 ==
SL#の一番の核となる機能は、[[.NET Framework]]の世界で使われている[[中間コード]]形式である[[共通中間言語]]([[CIL]])を、[[DirectX]]で使われる[[HLSL]]や[[OpenGL]]で使われる[[GLSL]]などの各種高級[[シェーディング言語]]に変換するエンジンにある。
+
ペアプログラミングは[[冗長化]]手法として広く知られている[[HDD]][[RAID]]構成を[[プログラマー]]という[[人的リソース]]に適用したものである。これにより[[デスマーチ]]突入率を大幅に抑えることができる。
  
この変換エンジンはSL#に同梱されるクラスライブラリを使用(継承)して作られた[[シェーダー]][[CIL]]の中から自動抽出し、対象となる[[シェーディング言語]]に変換する。これにより[[HLSL]]([[DirectX]])と[[GLSL]]([[OpenGL]])の非互換の垣根を超えることができる。
+
なお、[[RAIDコントローラー]]に相当するプロジェクトの現場責任者(日本では[[システムエンジニア]]と呼ばれることが多い)が無能である場合は、ペアプログラミングの理想も虚しく、綺麗に空中分解する。そのような人物は[[バグ]]を抱えた[[不良品]]であり、迷わず[[リストラ]]して[[新品交換]]するのが望ましい。
  
さらに[[HLSL]]や[[GLSL]]といった[[シェーディング言語]]に変換された[[ソースコード]]は、内部的に各種シェーディング言語の[[コンパイラ]]により暗黙的に[[コンパイル]]されたのち、自動的に[[GPU]]に送り込まれる。このため[[プログラマー]]は[[GPU]]を深く意識する必要がない。
+
==他業種ではあたりまえ==
 +
ペアで業務に取り組むという行為は絶対の安全が求められる分野では常識となっており、たとえば航空機の機長と副機長や、チーム医療などでは当たり前の形態である。わざわざお硬く提唱される時点で知能指数の低い者が多い(多くなった)業界だということである。
  
また、[[プログラマー]]は[[Visual Studio]]や[[MonoDevelop]]、[[SharpDevelop]]といった使い慣れた[[統合開発環境]]を使用でき、[[コード補完]]や[[構文チェック]]などの恩恵を受けることができる。さらに[[シェーダー]]は[[C Sharp|C#]]の[[コンパイラ]]で事前に検証されるため[[実行時エラー]]を最小限に抑えることができ[[デバッグ]]が捗るという利点もある。
+
刑事ドラマの警察官も2人組、覆面パトカーでドライブしている警察官も2人組が基本である。つまりペアプログラミングという概念は[[プログラマー]]に限ったものではない。某外資系電機メーカーなど、一部の企業では営業職なども基本的にペアで行動するようにしているところも少なからず存在している。
  
== 備考 ==
+
ペア行動の有無は[[ブラック企業]]を判別する手法としても注目が集まる。2014年3月ごろから発生した[[すき家]]の[[パワーアップ工事]]も[[ワンオペ]]が原因のひとつと言われている。
SL#はまだ実験的な[[ライブラリ]]であり、将来的に[[構文]]が変わる可能性などもあるので注意する必要がある。
 
  
SL#に関する[[不具合]]などについては可能な限り[[GitHub]]上の同プロジェクト宛てに報告してほしいとしている。
+
== 利点 ==
 +
=== 規範意識の増大 ===
 +
組合せ次第では、個人の作業よりもサボりにくく、ちゃんと作業を進める可能性が高い。なお組合せを間違えると2人してサボる。
  
現段階では[[ジオメトリシェーダー]]はサポートされておらず、また[[C Sharp|C#]]以外の[[プログラミング言語]][[F#|F Sharp]][[Boo言語]][[Phalanger]]など)については完成度が高まってからのサポートとなる予定であるとしている。
+
=== よりよいコード ===
 +
相乗効果により[[設計]][[実装]]の質が向上することが期待される。2人組だと常に[[コードレビュー]][[単体テスト]]が行われているような状態になるため、後から読めない[[スパゲッティコード]]を抑制できる。とくに[[中級者病]]の抑制には強い効果を発揮する。
  
== 関連ライブラリ ==
+
=== 作業効率の向上 ===
SL#は下記のライブラリを使用している。
+
2人組だと1人で作業するときとは流れが変わる。1人がドライバーとなり、1人がナビゲーターとなるため、次に何をすべきかを考え込むといったことが少なくなる。
* [[Mono.Cecil]]
+
 
* [[ICSharpCode.NRefactory]]
+
=== 外乱要因に対する耐性 ===
* [[ICSharpCode.Decompiler]]
+
2人組だと「[[Excel]]の使い方がわからない」などといった、「助けて[[パソコンの大先生]]!」的な、いわゆる[[FAQ]]な外乱要因に対しても耐性を示し、他の人が割り込んできても、一方が応対し、もう一方が作業を進められる。
 +
 
 +
=== 多数の開発者による設計 ===
 +
ペアを頻繁に入れ替えれば、複数の人間が1つの機能の開発に関わることになる。これにより、よりよい[[設計]]が生み出され、たとえばあるペアが解決できない問題で作業が止まってしまっても、別のペアでは解決できることもある。
 +
 
 +
=== 勤労意欲の向上 ===
 +
ペアプログラミングを行うことでチームの各人が互いをよりよく知ることができ、結束力を生み出しやすい。またペアプログラミングの方が1人で作業するよりも楽しいと感じる開発者もいる。これは友達の少ない[[プログラマー]]の[[コミュ力]]を向上させることにもつながることであろう。
 +
 
 +
=== 集団的なコード所有権 ===
 +
プロジェクトの全員がペアプログラミングを行い、頻繁にペアを組みかえる場合、そのコード全体について全員がそれなりの知識を共有することになる。
 +
 
 +
=== 教育的側面 ===
 +
初心者であっても固有の知識(プログラミングテクニックなど)を持っているものである。ペアプログラミングでは、余計な手間をかけずにそのような知識をチーム全体で共有できる。
 +
 
 +
== 欠点 ==
 +
===コミュニケーション障害者===
 +
経験を積んだ開発者によっては、初心者とのペアプログラミングを一種の退屈な指導と捉える場合もある。一部の技術者は1人で作業することを好み、ペアでの作業を面倒と感じる場合もある。
 +
これは上級者側の[[コミュ力]]不足、[[指導力]]不足であるともいえ、そのような人物は[[RAプログラム]]の対象としても差し支えない。
 +
 
 +
また、ペアの組み合わせによっては双方が「よくわからんけどあいつはしっかりやるし大丈夫だろう」の考えの元に行動してしまい、結果として人件費を2倍かけたのにもかかわらず逆にチェックが杜撰になることもあるので注意が必要である。プロジェクトリーダーや人事はお互いが「あいつで大丈夫か」と思えるような人材同士(かつ険悪な関係にないもの)をペアにする必要があり、リーダーや人事の高い能力が求められる。
 +
 
 +
===人件費===
 +
小規模な[[ブラック企業]]では[[ワンオペ]]による[[プログラミング]]が広く行われており、そのような環境下ではペアプログラミング以前に[[プログラマー]]1人のみですべてを行い、[[プロジェクトマネージャー]]や[[システムエンジニア]]などという役職も存在しない。また、その前提で[[チキンレース]]の末に[[不当廉売]]のような価格が横行しており、[[安かろう悪かろう]]を繰り返し顧客からの信頼も薄いため、正常な価格への値上げも難しい状況に陥っている。このような[[ブラック企業]]では[[人件費]]を捻出することが難しくペアプログラミングは夢のまた夢である。
 +
 
 +
====RAIDプログラミング====
 +
ただこの状態は[[大企業病気]]の真逆の[[弱小企業病]](なお私が勝手に名付けた名称で一般的なものではない)であるといえ、顧客からの信頼性の面や企業としての収益性の面からみても放置すればその企業は確実に経営破綻する。それを回避するためにも徐々にでも正常な状態にもっていく必要があるといえる。
 +
 
 +
いわゆる世間一般でいわれるペアプログラミングは[[ハードディスク]]でいえば[[RAID1]]構成である。確かに目先の[[コストパフォーマンス]]は悪い。
 +
そこでまずは[[RAID5]]のような[[RAIDプログラミング]](なお私が勝手に名付けた名称で一般的なものではない)からはじめてみてはいかがだろうか。
 +
 
 +
[[プログラマー]]は最低3名構成で、うち1名はペアプログラミング的に巡回を担当する。
 +
それを日替わりなどで行うのである。
 +
万が一、不慮の事故や病気などで[[プログラマー]]が1名ほど欠落しても、一時的にペアプログラミング状態は停止することになるが、巡回するプログラマーを通常のプログラマーとして補欠できるため[[デスマーチ]]に陥る確率は大幅に低減できる。
 +
 
 +
そして企業として少し余裕が出てきたならば巡回するプログラマーを徐々に増やすなどして[[RAID6]]や[[RAID50]]に近い形態に移行し、最終的には[[RAID1]]、すなわち本来のペアプログラミングの体制にもっていけばよい。
 +
 
 +
長くなりそうなので以下に検証ページを作る。
 +
*[[RAIDプログラミング]]
 +
 
 +
== 現実 ==
 +
2人組であれば開発速度は落ちないどころか向上すると言われているが、目下の[[人件費]]が2倍になるという理由から、いわゆる[[IT土方]]が集う、いわゆる[[ブラック企業]]ではまず行われていない。そもそもそんな企業の人事やプロジェクトリーダーは能力不足によりまともに機能するペアを社内で構成することすらできず、ますますブラック化を加速させているのが実情と思われる。
 +
 
 +
[[システム]]を発注する顧客の場合は、「本当に完成品を納品してくれそうか」を測る指標として、[[見積]]段階でペアプログラミングを導入しているかを尋ねてみると良い。尋ねると良いどころか、必ず確認しておかなければ危険な点であるとう人もいる。
  
 
== 関連項目 ==
 
== 関連項目 ==
* [[シェーディング言語]]
+
* [[ペアプログラミング合コン]]
* [[GPU]]
+
* [[アジャイル]]
* [[GPGPU]]
+
* [[エクストリーム・プログラミング]]
  
== 外部リンク ==
+
== 参考文献 ==
* https://github.com/IgniteInteractiveStudio/SLSharp
+
{{reflist}}
  
 
{{stub}}
 
{{stub}}

2015年3月6日 (金) 14:08時点における版

ペアプログラミング英語:pair programming)とは、大雑把にいうと職業プログラマー冗長化することである。

概要

ペアプログラミングは冗長化手法として広く知られているHDDRAID構成をプログラマーという人的リソースに適用したものである。これによりデスマーチ突入率を大幅に抑えることができる。

なお、RAIDコントローラーに相当するプロジェクトの現場責任者(日本ではシステムエンジニアと呼ばれることが多い)が無能である場合は、ペアプログラミングの理想も虚しく、綺麗に空中分解する。そのような人物はバグを抱えた不良品であり、迷わずリストラして新品交換するのが望ましい。

他業種ではあたりまえ

ペアで業務に取り組むという行為は絶対の安全が求められる分野では常識となっており、たとえば航空機の機長と副機長や、チーム医療などでは当たり前の形態である。わざわざお硬く提唱される時点で知能指数の低い者が多い(多くなった)業界だということである。

刑事ドラマの警察官も2人組、覆面パトカーでドライブしている警察官も2人組が基本である。つまりペアプログラミングという概念はプログラマーに限ったものではない。某外資系電機メーカーなど、一部の企業では営業職なども基本的にペアで行動するようにしているところも少なからず存在している。

ペア行動の有無はブラック企業を判別する手法としても注目が集まる。2014年3月ごろから発生したすき家パワーアップ工事ワンオペが原因のひとつと言われている。

利点

規範意識の増大

組合せ次第では、個人の作業よりもサボりにくく、ちゃんと作業を進める可能性が高い。なお組合せを間違えると2人してサボる。

よりよいコード

相乗効果により設計実装の質が向上することが期待される。2人組だと常にコードレビュー単体テストが行われているような状態になるため、後から読めないスパゲッティコードを抑制できる。とくに中級者病の抑制には強い効果を発揮する。

作業効率の向上

2人組だと1人で作業するときとは流れが変わる。1人がドライバーとなり、1人がナビゲーターとなるため、次に何をすべきかを考え込むといったことが少なくなる。

外乱要因に対する耐性

2人組だと「Excelの使い方がわからない」などといった、「助けてパソコンの大先生!」的な、いわゆるFAQな外乱要因に対しても耐性を示し、他の人が割り込んできても、一方が応対し、もう一方が作業を進められる。

多数の開発者による設計

ペアを頻繁に入れ替えれば、複数の人間が1つの機能の開発に関わることになる。これにより、よりよい設計が生み出され、たとえばあるペアが解決できない問題で作業が止まってしまっても、別のペアでは解決できることもある。

勤労意欲の向上

ペアプログラミングを行うことでチームの各人が互いをよりよく知ることができ、結束力を生み出しやすい。またペアプログラミングの方が1人で作業するよりも楽しいと感じる開発者もいる。これは友達の少ないプログラマーコミュ力を向上させることにもつながることであろう。

集団的なコード所有権

プロジェクトの全員がペアプログラミングを行い、頻繁にペアを組みかえる場合、そのコード全体について全員がそれなりの知識を共有することになる。

教育的側面

初心者であっても固有の知識(プログラミングテクニックなど)を持っているものである。ペアプログラミングでは、余計な手間をかけずにそのような知識をチーム全体で共有できる。

欠点

コミュニケーション障害者

経験を積んだ開発者によっては、初心者とのペアプログラミングを一種の退屈な指導と捉える場合もある。一部の技術者は1人で作業することを好み、ペアでの作業を面倒と感じる場合もある。 これは上級者側のコミュ力不足、指導力不足であるともいえ、そのような人物はRAプログラムの対象としても差し支えない。

また、ペアの組み合わせによっては双方が「よくわからんけどあいつはしっかりやるし大丈夫だろう」の考えの元に行動してしまい、結果として人件費を2倍かけたのにもかかわらず逆にチェックが杜撰になることもあるので注意が必要である。プロジェクトリーダーや人事はお互いが「あいつで大丈夫か」と思えるような人材同士(かつ険悪な関係にないもの)をペアにする必要があり、リーダーや人事の高い能力が求められる。

人件費

小規模なブラック企業ではワンオペによるプログラミングが広く行われており、そのような環境下ではペアプログラミング以前にプログラマー1人のみですべてを行い、プロジェクトマネージャーシステムエンジニアなどという役職も存在しない。また、その前提でチキンレースの末に不当廉売のような価格が横行しており、安かろう悪かろうを繰り返し顧客からの信頼も薄いため、正常な価格への値上げも難しい状況に陥っている。このようなブラック企業では人件費を捻出することが難しくペアプログラミングは夢のまた夢である。

RAIDプログラミング

ただこの状態は大企業病気の真逆の弱小企業病(なお私が勝手に名付けた名称で一般的なものではない)であるといえ、顧客からの信頼性の面や企業としての収益性の面からみても放置すればその企業は確実に経営破綻する。それを回避するためにも徐々にでも正常な状態にもっていく必要があるといえる。

いわゆる世間一般でいわれるペアプログラミングはハードディスクでいえばRAID1構成である。確かに目先のコストパフォーマンスは悪い。 そこでまずはRAID5のようなRAIDプログラミング(なお私が勝手に名付けた名称で一般的なものではない)からはじめてみてはいかがだろうか。

プログラマーは最低3名構成で、うち1名はペアプログラミング的に巡回を担当する。 それを日替わりなどで行うのである。 万が一、不慮の事故や病気などでプログラマーが1名ほど欠落しても、一時的にペアプログラミング状態は停止することになるが、巡回するプログラマーを通常のプログラマーとして補欠できるためデスマーチに陥る確率は大幅に低減できる。

そして企業として少し余裕が出てきたならば巡回するプログラマーを徐々に増やすなどしてRAID6RAID50に近い形態に移行し、最終的にはRAID1、すなわち本来のペアプログラミングの体制にもっていけばよい。

長くなりそうなので以下に検証ページを作る。

現実

2人組であれば開発速度は落ちないどころか向上すると言われているが、目下の人件費が2倍になるという理由から、いわゆるIT土方が集う、いわゆるブラック企業ではまず行われていない。そもそもそんな企業の人事やプロジェクトリーダーは能力不足によりまともに機能するペアを社内で構成することすらできず、ますますブラック化を加速させているのが実情と思われる。

システムを発注する顧客の場合は、「本当に完成品を納品してくれそうか」を測る指標として、見積段階でペアプログラミングを導入しているかを尋ねてみると良い。尋ねると良いどころか、必ず確認しておかなければ危険な点であるとう人もいる。

関連項目

参考文献