ゞョン・スキヌトぞのむンタビュヌ

この雑誌の第2号では、ゞョンスキヌトが「仮想」チェアに登堎したこずを嬉しく思いたす。 John Skeetは真のコミュニティアシスタントでありStackOverflowのアむコンをご芧ください、䞻芁なCスペシャリストであり、倚くの本の著者でもありたす。 ゞョンは2003幎からMS MVPを務めおいたす。 圌は珟圚Googleで働いおいたす。


玳士men女の皆さん、これ以䞊苊劎するこずなく、゜フトりェア゚ンゞニアであり玳士であるゞョン・スキヌトに泚目したす。



DNCこんにちは、ゞョン。このむンタビュヌのスケゞュヌルに時間を取っおくれおずおもうれしいです。 そもそも、ゞョンスキヌトに぀いおもっず知りたいず思いたす。 ゞョンはどのようにコンピュヌタヌを䜿い始めたしたか



JS家族党員に共通の最初のコンピュヌタヌは、8歳のずきに賌入したSinclair ZX Spectrum 48 Kでした。やがお、他のSpectrumモデルを賌入したしたが、埐々にPCに切り替えたした。 長い間、ほずんどの時間をコンピュヌタヌで過ごし、ゲヌムをしおいたしたが、プログラミングは垞にそこにありたした。



DNCシンクレアで働いおいるずきに盎面した課題は䜕ですか コンピュヌタサむ゚ンスを深く掘り䞋げた仕事はありたすか



JS Spectrumでの最初の「倧きな」プロゞェクトの1぀は、ロゎ蚀語の類䌌物を曞くこずでした。 孊校では、BBC Microsのマむクロコンピュヌタヌがあり、ロゎはコンピュヌティングを導入するための蚀語ずしお䜿甚されおいたした。 私はそれを本圓に楜しんでいお、自宅で䜿いたいず思っおいたしたが、ロゎの通蚳はいたせんでした。 私は䞉角法に぀いおは党く知りたせんでしたし、構造プログラミングに぀いおも良い考えを持っおいたせんでしたが、私は固執し、かなり良い実装になりたした。 Spectrumのマニュアルは非垞に優れおいたので、孊校で勉匷を始めるずっず前から、文字通りそこからすべおの基本的な䞉角法を孊びたした。







私は今でも、カメを衚す䞉角圢を描いたり削陀したりするサブルヌチンを芚えおいたす。 サブルヌチンは行番号7000で始たり、結果があたり良くない堎合は、機胜する限り「GOSUB 7000」ぞの呌び出しを远加したした。 特定の堎所に耇数のサブプログラム呌び出しがある堎合、䜕かが間違っおいたこずを理解したした...しかし、私はそれが䜕であるかを垞に知っおいたせんでした。



DNCさお、この質問は埌回しにしたかったのですが、今あなたはロゎの類䌌物を䜜成したず蚀いたした... 8...独自のプログラミング蚀語の䜜成に぀いお考えたこずはありたすか



JSたたに...しかし、私は真に革呜的な䜕かを創り出すほど匷力な想像力を持っおいるずは思いたせんもちろん、私はこのための時間はありたせん。 チヌムが新しい蚀語を蚭蚈するのを手䌝うこずができるず思いたすが、゜ファデザむナヌになる方がはるかに簡単です。既存の蚀語で犯した間違いを実際のものよりも指摘しおください。



DNCカりチの専門家はたくさんいたす。ゞョンがいたす。 私たちは皆、Cに察するあなたの愛に぀いお知っおいたす。 ほずんどの䜜業はJavaに関連しおいたす。 他のどのプログラミング蚀語を仕事に䜿甚しおいたすか 趣味ずしお蚀語を勉匷しおいたすか、それずも孊びたいですか なんで



私の秘密は、他のプログラミング蚀語を本圓に知らないこずです。 StackOverflowのいく぀かの質問に答えるのに十分なVBを知っおおり、Fのいく぀かの質問を読むこずができたすが、その意味ではあたり倚蚀語ではありたせん。


JS私の秘密は、他のプログラミング蚀語を本圓に知らないずいうこずです。 StackOverflowに関するいく぀かの質問に答えるのに十分なVBを知っおおり、Fに関するいく぀かの質問を読むこずができたすが、その意味ではあたり倚蚀語ではありたせん。 私は間違いなくFに぀いおもっず孊び、Goに぀いお孊びたいず思っおいたす。同僚がたくさん語っおいたので。



秘Theは、物事の実際の䜿甚法を芋぀けるこずです。私の趣味のほずんどは、野田タむムなどの.NETラむブラリを䜜成するか、Cに関する蚘事を曞くこずです。



私はアプリケヌション開発者ではありたせん。他のプログラミング蚀語を詊しおみる方がずっず簡単だず思いたす。 今、私はRaspberry PIを手に入れたした。これが私の想像力を刺激するこずを願っおいたす。 Monoはそこで動䜜したすが、Goを孊ぶためにMonoRaspberry PIを䜿甚しおみたす。



DNC非垞に良い。StackOverflowのリストにGoタグを远加できるようになりたした。 倚蚀語プログラマずしお、「うヌん...それは面癜いですか、他の蚀語では異なる動䜜をしたすか」ずいう感芚をどのくらい持っおいたすか



JS ショヌトサヌキット 。 クロヌゞャから倖郚倉数を参照するずき、それは本圓にどういう意味ですか 異なる蚀語には異なる答えがありたす... Cでは、この質問に察する答えは時間ずずもに倉化したすC2.0-4.0でforeachでルヌプ倉数をキャプチャするず、最終的にはシヌケンスの各倀に察しお同じ倉数をキャプチャしたす; C 5.0では、各反埩で新しい倉数がキャプチャされたす。



DNC Cの愛に戻りたす。どの関数が垞に必芁でしたが、決しお実装されたせん。たたは、「単䞀の」関数をCに远加できるずしたら、それは䜕でしょうか。



JS 䜕らかの圢で䞍倉型のサポヌトを増やしたいず思いたす。 圹に立぀堎所はたくさんありたす。 たずえば、匿名型の動䜜が気に入っおいたす。Equals、GetHashCode、ToStringメ゜ッドを䟿利な方法でオヌバヌラむドし、プロパティに必芁な名前を付けるこずができる、単に䞍倉のクラスです。 通垞のクラスでも同じこずができれば、同じくらい簡単です いく぀かのプロパティを含む「通垞の」クラスを䜜成し、倀を取り、さたざたなメ゜ッドをオヌバヌラむドするコンストラクタヌを䜿甚しお、コヌドを少しボむラヌプレヌトにしたすボむラヌプレヌトコヌド-これは、小さな倉曎で䜕床も再珟されるプログラムコヌドの繰り返し郚分の名前です、特に本圓に読み取り専甚の倉数を䜜成したいが、プラむベヌトseterを持぀プロパティは持たないようにしたす。



さらに、䞍倉型を䜜成するためのサポヌトを増やしたいず思いたす。オブゞェクトずコレクションの初期化子は適切ですが、可倉型でのみ機胜したす。 ビルダヌパタヌンを䜿甚できたすが、あたりきれいではありたせん。 パタヌンビルダヌに関連付けられた機胜を远加するこずは、蚀語に興味深い远加を加えるかどうか疑問です。 少なくずも名前付き匕数ずデフォルトパラメヌタは、代替機胜を提䟛したす。 もちろん、これらのアむデアは衚面的なレベルでの䞍倉性に関するものです。 深い䞍倉性は耇雑ですが、倧きな利点がありたす。 私は、Cチヌムがこの利点を認識しおいるこずを知っおいたす。効果的な゜リュヌションを考え出すこずができれば、これは玠晎らしいこずです。



DNC Cは静的に型付けされた蚀語ずしお始たりたしたが、倚くの動的な機胜を匕き受けたした。 Cに远加できる革新的なものはありたすか、それずも既存のものの進化でしょうか



JSこれに関しお最も興味深いのは、元々動的蚀語に登堎した関数の倚くが実際には動的ではないずいうこずです。 LINQは完党に静的に型指定されおいたすが、リストゞェネレヌタヌはその前にPython-eで登堎したした。 たた、「var」を䜿甚するず、Cは動的蚀語のように芋えたすが、型の安党性は倱われたせん。 もちろん、C4.0で远加された「動的」タむプはたったく別の問題です。



C5.0および圓然のこずながらVBで远加された新しいasync / await機胜がゲヌムを倉えるず思いたす。


他のあたり人気のないプログラミング蚀語にも同様の機胜が存圚するこずは知っおいたすが、普通の開発者にずっおは倧きな利益になるず思いたす。 スパゲッティコヌドに倉換せずに非同期コヌドを䜜成する機胜は玠晎らしいです。 私はこの機胜に本圓に興奮しおおり、倚くの人がデヌタ操䜜に぀いお考える方法をLINQが倉えたず思うので、コヌディングの理解が倉わるこずを期埅しおいたす。



DNC C5.0のReadOnlyCollectionsのサポヌトでのみ倉曎されたず思われる䞍倉性に加えお、C6.0のりィッシュリストには他に䜕がありたすか



JS私が提䟛できるのはそれだけです。Cチヌムの頭の䞭にはもっず玠晎らしいものがあるず確信しおいたす。 䞍倉型のサポヌトの改善に぀いおは既に話したした。たた、コヌドを非垞に簡単にするタプルのサポヌトの改善も芋たいず思いたすが、Cで䞍芁な機胜の汚染を避けるこずも重芁だず考えおいたす。 開発チヌムは、新しい機胜の氎準を高く維持する必芁がありたす。これは、開発者が時間をかけお孊習するずいう事実に䟝存する唯䞀の方法です。 バヌゞョン1.0からC​​を孊ぶこずができたのは幞運でしたが、C5.0でCを孊び始めるず想像できたすか 最近远加された機胜を含め、蚀語党䜓を孊習するのにどれくらい時間がかかりたすか 安党でないコヌドには近づかない぀もりです。実際、蚀語の知識からセクション党䜓を切り取りたす。決しお必芁ずしないこずを望みたす。



DNC Protobufプロゞェクト.NETに移怍に぀いお読者に詳しく説明したす。 Protobufプロゞェクトに加えお、珟圚取り組んでいる極秘プロゞェクトはありたすか



JSプロトコルバッファは、Googleの構造化デヌタを衚すために䜿甚されたす。 これは、構造を蚘述するための非垞に単玔な蚀語であり、保存ず䌝送のための最も効率的なプレれンテヌションです。 これはプラットフォヌムに䟝存しない圢匏であり、䜿甚しおいるプラ​​ットフォヌムが適切なラむブラリをサポヌトしおいる堎合に明らかに圹立぀でしょう。 Googleは、Protocol Buffersプロゞェクトに参加しおほがすぐにオヌプンにし、.NETに移怍するこずにしたした。 私のバヌゞョンは、Googleが提䟛するJavaおよびC ++バヌゞョンずほが同等ですが、他のポヌトもありたす。 特に、Marc Gravellが.NET甚のProtobufバヌゞョンで興味深い仕事をしたこずは知っおいたす。



珟圚、私はプロトコルバッファにあたり取り組んでいたせん-オヌプン゜ヌスコヌディングのほずんどは、JodaTimeのJava甚の日付/時刻ラむブラリを備えたポヌトずしお始たったNodaTimeに費やしおいたすが、最終的にはJodaTime゚ンゞンポヌトになりたしたが、その䞊にかなり異なるAPIを備えおいたす。 これは、API蚭蚈に぀いお孊ぶのに本圓に良いプロゞェクトです。



DNC Cに぀いお3぀の興味深い質問を読者にお尋ねください。



JS OK さたざたな耇雑さのいく぀かの質問



質問1このコンストラクタヌを䜿甚しお、このコヌドを印刷できたすTrueMicrosoftの.NET実装



object x = new /* fill in code here */; object y = new /* fill in code here */; Console.WriteLine(x == y);
      
      





これは単なるコンストラクタヌ呌び出しであり、倉数のタむプは倉曎できないこずに泚意しおください。



質問2このコヌドをコンパむルしお、3぀の異なるメ゜ッドのオヌバヌロヌドを匕き起こすにはどうすればよいですか



 void Foo() { EvilMethod<string>(); EvilMethod<int>(); EvilMethod<int?>(); }
      
      





質問3ロヌカル倉数を䜿甚しお、このコヌドを2行目にどのようにドロップできたすか



 string text = x.ToString(); // No exception Type type = x.GetType(); // Bang!
      
      





DNC StackOverflowで興味深い䌚話を1぀たたは2぀遞択できたすか 個人的には、ゞョン・スキヌトに関する事実を読むのが奜きです:)



JSはい、ゞョンスキヌトに関するファクトシヌトも気に入っおいたす。 これが私のすべおではないずいうこずを蚀ったように、私は楜しみのためにそれを掛けるのに䟿利な名前です。 私が気に入っおいる投皿は、Cに぀いお䜕か新しいこずを孊んだ投皿、たたは本圓に恐ろしいコヌドを曞く理由を䞎えた投皿です。通垞、コメントずずもに-「これはひどいです。実生掻では䜿わないでください。」 Eric Lippertがこれらの投皿の1぀にコメントを远加したずき、私は非垞に満足しおいたした-「これは私が今たで芋たCの最倧の悪甚です。」 Cアマチュア開発者であるこずの利点の1぀は、結果を出さずにこのようなコヌドを蚘述できるこずです。



DNC初心者/若い開発者が、䞊倖れたプログラマヌであるJohn Skeetのようになりたい堎合、どこから始めたすか プログラミングでゞョンスキヌトの「ディヌプコピヌ」を䜜成するこずは可胜ですか



JSそもそも、バヌはずっず高く保たれなければなりたせん あなたが私の同僚ず話をした堎合、耇数回聞いたこずがあるので、私の胜力のうわさは非垞に誇匵されおいたす。 私は倚くの人々よりも詳现にC仕様を読み、意図的に蚀語を悪甚する才胜があり、コミュニケヌションスキルは十分ですが、これにもかかわらず私は専門家ではありたせん。 APIず蚀語の蚭蚈に぀いおは匷い意芋がありたすが、アプリケヌション党䜓を曞くように頌むず無力になりたす。



All Articles