プログラミング哲孊6-補品ず蚭蚈

補品ずプロゞェクトの違いは、補品を開発するずきに蚈画があるこずず、プロゞェクトを開発するずきに研究があるこずです。 未解決の問題がある堎合、プロゞェクトで䜿甚するデヌタベヌスをただ決定しおいないずしたしょう。この問題、぀たり調査を研究する必芁がありたす。 これは技術研究ず呌ばれたす。 研究、これはたったく必芁ありたせん、地球芏暡で完党に新しいものです。橋を建蚭する堎合、この特定の堎所で土壌を探玢する必芁があり、この土壌が探玢されるたで、補品ずしおの橋はただ存圚しおいたせん-プロゞェクト。 どのような土がただ知られおいないので、䜕から橋を䜜るか、どのようにそれを匷化するか、予算を蚈算しお䜜業スケゞュヌルを蚈画するこずは䞍可胜です。



もちろん、どのプロゞェクトも蚈画に䌌おおり、䞀連のアクションがあり、いく぀かの期限を蚭定するこずもできたすが、これたでに未螏の癜い点がありたす。これは穎のある蚈画、぀たりプロゞェクトです。



補品を開発でき、倚くのテクノロゞヌを研究しおいる堎合、垂堎で競争䞊の優䜍性を埗るこずができるため、補品開発ではなくプロゞェクトに参加したいずいう願望は、このような病気です。 プログラマヌは、次のように考えおいたす。さお、ここでこの小さなこずを探求し、発明し、みんなを匕き裂きたす。 そしお、研究には無期限の期間があり、あなた自身たたはプログラマヌが「ただこれを行う方法を理解する必芁がある」ず蚀ったら、すぐに自分自身に泚意しおください。ここでは、研究に぀いお、぀たり補品ではなくプロゞェクトに぀いお話しおいたす。 このプロゞェクトには、研究のために䞍明確な時間枠がありたす。



このプロゞェクトは粟神で考えるこずを特城ずしおいたす。長い間、私たちはスヌパヌ機胜、メガテクノロゞヌを研究し、すぐにすべおを集めお補品を手に入れたした。 補品の顕著な違いは、「すべおを収集する」段階が非垞に早く、ほが即座に始たり、スケゞュヌルのほずんどがすべおの郚分を埮調敎するこずに専念しおいるこずです。 それどころか、プロゞェクトでは、この段階はスケゞュヌルの終わりにかなり近づいおいたす。 プロゞェクトのスケゞュヌルは1䞇本の釘を打぀のに䌌おいたす。すぐに把握にかかる時間を把握し、系統的に打぀こずができたす。 䞀般的に、プロゞェクトは「すでにこれを行っおいるので、この特定の補品に察しおもう䞀床行うだけでよい」ずいう感芚を持っおいたす。 さらに、同じスケゞュヌルに埓っおプロセスを繰り返しお、別の類䌌補品を䜜成できたす。 倚くの成功したプロゞェクトは、スケゞュヌル党䜓を最初から最埌たで芋おいた人がチヌムを去り、組織プロゞェクト党䜓、䜜業スケゞュヌルを耇補し、研究ず実隓を意識的に避けおより良い品質でのみ同じこずを行うため、正確に成功したした。



たずえば、入力フィヌルドが突然フォヌカスを倱ったり、間違っお移動したりする堎合、プロゞェクトの芳点からするず、これは取るに足りない詳现であり、補品の芳点からするず、これは評刀を深刻に損なう可胜性がある欠点です。 たたは、フォヌムには同じタむプの2぀のボタンがありたすが、1぀は10番目のポむント、もう1぀は11番目のポむントです。 些现なこずは10分でなくなりたす。正しいファむル、正しい堎所を芋぀け、修正し、確認する必芁がありたす。 スヌパヌテクノロゞヌはありたせんが、少なくずも10分間オフです。 そしお、通垞、補品には䜕癟、䜕千ものそのような些现なこずがありたす。それらは小さく、たくさんありたす。これにより、補品開発者の䞻芁な歊噚を䜿甚しお、スケゞュヌルを立おるこずができたす。 今日、私たちは明日、そしお30日間、30個のゞャムを修正し、すべおの既知の係数で、2000個のピヌス​​ず詳现を取埗したす。 そしお、プロゞェクトでこれを行う時間はありたせん。



プロゞェクトが悪く、補品が良いず蚀いたいのなら、そう蚀うでしょう。 これら2぀の抂念を明確に区別したいだけで、倚くの劎力を節玄できるように思えたす。 プロゞェクトは、それ自䜓でこの珟象は玠晎らしいです、研究も本圓の創造性です。 さらに、プロゞェクトは、研究の確率的およびゲヌムの本質党䜓を実珟し、これらの䞍明確な期間でさえ賢明に配垃および蚭蚈するこずができたす。 結局のずころ、これは単なる䞍明確な投圱ですが、あなたはたさにあなたが䜕をしおいるかを明確に理解する必芁がありたす。 私は個人的に、経隓から、補品蚈画を開始する前にすべおの研究を行っおいたしたが、䜿甚されたすべおの技術、原則、芏則を調査する必芁がありたす、質問はありたせん、研究の最埌に基本的な決定を行う必芁がありたす長所ず短所があり、蚈画段階、぀たり補品開発に進みたす。



調査ずは、適切なテクノロゞヌずツヌルの怜玢、独自のアルゎリズムずスタッフトレヌニングの䜜成、初期パフォヌマンス調査、顧客たたは垂堎が必芁ずする機胜のリスト、さらには䟿利な操䜜モヌドの怜玢です。 ぀たり、事前に䞍明であり、正匏に決定できないすべおのものです。 ぀たり、補品の開発、぀たり蚈画ず䜜業スケゞュヌルのコンパむルを開始する頃には、癜い斑点や質問はなくなり、蚈画は堅実で具䜓的で重いレンガでできおいるはずです。 すべおがはっきりしおいるず感じお、ただ䜜業をしたり、釘を打ち蟌んだり、競合他瀟の補品のチップからクロヌンを䜜成したりするだけで、補品が完成したず蚀うこずができたす。 もちろん、それは成功しないこずが刀明する可胜性があり、蚈画や参照条件の定矩の間違い、たたは実際の実際の䜜業の誀りがありたしたが、これはすでに次のプロゞェクト/補品で考慮されたす。



経隓を蓄積し、補品から補品ぞ、プロゞェクトからプロゞェクトぞ仕事のアルゎリズムを移す胜力は、䞀般に、開発においお正しい道を進んだ人を区別したす。 たずえば、ボタンのフォントを倉曎するのに平均で少なくずも10分かかるこずを長い間知っおいたしたが、これはほんの数秒であるように思えたした。 グラフのブリックを入力するず、実行の耇雑さ、実行時間、必芁な資栌に応じおすべおのタスクずサブタスクを゜ヌトする機胜が䞻な蚈画スキルです。 それほど耇雑ではないが、メモリを倧幅に䜿い果たすずいう特性を持぀タスクの皮類は、次のタスクに進むのに時間がかかりたす。 あなたがプログラマヌのオフィス党䜓たたは孀独のマネヌゞャヌである堎合、いずれにしおも、あなたは垞に倖郚から自分を芋お、次の小さなステップが完了したこずを喜ぶだけでなく、次のこずをすぐに考える必芁がありたすが、垞に理解し、倧声で蚀い、どんなタスクを曞き留める必芁がありたすどのくらいの期間が決定されたか、どのようにタむプされたか、さらに蚈画を立おるためにどのような経隓を匕き出すこずができるかが決定されたした。



この意味で、開発者自身がプログラマヌではなく、開発チェヌンのリングを正しく評䟡できない開発マネヌゞャヌは灜害です。 そのような人はすぐに珟れ、通垞は䜕床か圌を驚かせるのに十分なほど远い払われる必芁がありたすが、なぜそんなに時間がかかったのですか プログラマヌのマネヌゞャヌは、ある距離を予想倖に玠早く通過した堎合にのみ驚かされたす。 そしお、それは望たしくありたせん。 プログラマヌが頭の䞭ですべおを持ち、甚語で新しい行の瞬間に深く切り替える必芁がない堎合、圌は䜕かをほが瞬時に行うこずができるこずは明らかです。 ぀たり、ボタンを3぀の異なる堎所で修正し、それを行うのに10分かかりたしたが、同じ皮類の䜜業であるために非垞に迅速に発生し、3぀のボタンすべおが連続しお修正されたした。 ただし、コヌド内のある堎所でボタンを修正する必芁がある堎合は、プロトコルのグリッチを修正し、次に別のボタンを修正し、次にれロによる陀算を芋぀け、別のボタンを修正したす。各ボタンの修正には10分かかりたす。 さらに、1぀のステップでの開発プロセスず切り替え時間だけでなく、熱意ず故障の攻撃も考慮するこずができたす。 マネヌゞャヌの最も重芁な才胜は、セルフマネヌゞャヌであろうずチヌムマネヌゞャヌであろうず、突然の勉匷のために仕事が遅くなったずきを远跡する胜力です。 通垞、しわのある額や仕事から気をそらしたいずいう願望は良い兆候です。 これは、䜕かが頭に足りないずいう開発者がメモリに保持されおおらず、蚈画のポむントでの均䞀な動きが黙っおいるこずを意味したす。 ここでは、経隓ず深い理解を瀺し、質問を「解決」する必芁がありたす-研究は避けられないこずを理解し、蚈画プレヌトに䞍明確なサむズの倧胆な行を远加し、それを解決するためのすべおの努力を攟棄するか、実蚌枈みの代替゜リュヌションを適甚しお質問をバむパスしたす。 補品を補造する堎合、あなたの仕事は「うたく機胜する」こずではなく、予枬可胜性を完党にするプロセスを蚭定するこずです。



奜奇心が匷い䞖垯の比范。どんな比范も単なる比范であり、原則を説明するこずしかできないこずを理解する必芁がありたすが、それは倕食の調理です。 自分で食事をする必芁があるずきは、食べ物をすばやく調理でき、その過皋で実隓や研究を行うこずができたす。 塩を増やしたり枛らしたり、新しい調味料を詊しおみおください。ガラディナヌを䜜り、芪愛なるゲストを逊う必芁がある堎合、状況は根本的に異なりたす。 コストは盎線的にスケヌラブルである必芁があり、5人のゲスト、぀たりガラディナヌの掚定コストは自分のランチスナックの5倍高いこずを意味したすが、実際には、コストは食材の遞択ず実行ず提䟛の培底の䞡方で倧きさによっお異なりたす費やした時間。 これはプロゞェクトおよび補品です。 䌑日のボルシチを詊しおみる人はいたせんし、もしそうなら、圌はそれを埌悔したす。 ゲストはちょうど5時に来たす。぀たり、締め切りがありたす。 サヌビングずディテヌル、チヌズを薄いスラむスにスラむス、ゞャムを均等な局に広げる費甚は、お祝いの蚭定よりも通垞の家庭の倕食で10倍簡単です。 これは補品であり、お祝いのディナヌです。 お祝いのランチやディナヌを実行する耇雑さは、その䞭ですべおが決定され、各操䜜が長幎デバッグされおいるずいう事実によっお補われたす。最高でも、ホステスは1぀の珍しい料理を決定したす、厳密に刀断せずに、「競争䞊の優䜍性を求めお」ず蚀うこずにしたした。 さらに、ほずんどの操䜜は暙準的なものであり、最終的にはキッチンにいるすべおの人が実行できるため、すべおが完党に拡匵されたす。



コミュニティに私のプロゞェクトDeodarを玹介しおから1幎になりたす。 これはもずもず兞型的な「プロゞェクト」でした。補品の実際の実装を行うために必芁な研究の量は、私がすぐに巚倧であるず特定したした。 そもそも、私が興味を持っおいる開発ツヌルの質の悪さの欠劂は、䜕幎も、䜕十幎もの間、私を萜ち蟌たせたした。 お気に入りの開発ツヌル、゚ディタヌ、IDE、デバッガヌの新しいバヌゞョンをむンストヌルするずきに、開発者がどれだけしたか、基本的に䜕も倉わっおいないこずを䞍思議に思いたしたか 䞀般に、オヌプン゜ヌスプロゞェクトの䞻な傟向は、根本的な倉曎、完党なリファクタリングを避け、代わりにたすたす倚くの新しいハンドル、オゟナむザヌをマシンに取り付け、ドアを塗り盎すこずです。 健党なバヌゞョンの反埩プロセスでは、随時すべおの方向に根本的な倉曎を提䟛する必芁がありたす。 これらの基本的な倉曎の1぀は、問題の解決策です。これは、日垞の蚀語では「十分に小さいもの」ず呌ぶこずができたす。 ぀たり、玠晎らしいツヌルがあり、すべおが時代遅れになり぀぀ありたすが、必芁な通垞のささいなこずは十分ではありたせん。このため、数十䞇人時のリ゜ヌスで開発された補品は、機胜のために開発に1日かかりたす。



開発者にずっお、非自明なタスクを解決し、ツヌルに䟝存するこずは非垞に重芁であり、このツヌルぞの䟝存が蚈画における戊略的決定の採甚を決定したす。



「あきらめるこずにした...」ずいうフレヌズを䜕回聞いたこずがありたすか 私の若さはロシアのボヌランド補品の党盛期に萜ち、私は専門的にプログラムするこずを孊び、Turbo Pascalず埌にDelphiを䜿甚したした。 これに関連しお、F4カヌ゜ルで実行、Control + Enterカヌ゜ルでファむルを開く、むンスタントコンパむルなどの環境ツヌルに䟝存する䜜業スキルを開発したした。 1぀のボタンでコンパむルし、カヌ゜ルの䞋に停止しおプログラムを開始し、1぀のボタンで終了しおコヌドの線集を続行できるこずが重芁になりたした。 Visual Studioで通垞のモヌドで䜜業しようずするず、コンパむル速床が桁違いに遅くなりたすが、1぀のボタンでデバッガヌを起動し、もう1぀のボタンでプログラムを起動し、前のブレヌクポむントを削陀しお新しいブレヌクポむントを蚭定する必芁があるため、これは䞍可胜なプロセスです気が散る。 数日間、私は䜕ずか問題を解決するマクロを曞きたした。 もちろん、これらは私の個人的な奜みですが、問題は各プログラマヌが独自の個人的な奜みを持っおいるこずです。それらがなければプログラマヌはいたせん。画家でさえメ゜ッドやツヌルに察する独自の個人的な奜みを持っおいたす。 私の知り合いの䞀人である工䜜機械の調敎装眮は、手元にガ゜リンの入った颚呂がないず機胜せず、食前の枅朔さのためにい぀でもすぐに手を掗うこずができたした。 そのようなお颚呂がない別のワヌクショップで働かなければならなかったずき、圌はひどく苊しみたした。 些现なこずですが、そのような些现なこずから、ワヌクフロヌも発展したす。



私は垞に、開発ツヌルの完成床などを前提ずしおいたす。 マルクス䞻矩者による生産手段の生産がどのように行われおいるかを知っおいたす。これは先進経枈ず単玔な機械化経枈を区別したす。 私の考えでは、真に改善された開発ツヌルは開発をパヌセント単䜍ではなく桁違いに加速し、加速するだけでなく、開発者がさたざたな耇雑さのタスクを匕き受けるこずができるず考えおいたす。 箄5幎前、私は自分の芁件を満たすC ++ IDEを䜜成するずいう野心的な詊みをしたした。 DaoIDEず呌ばれおいたした。 これを行うには、いく぀かの基本的な問題を解決する必芁がありたした。 最初に、独自のテキスト゚ディタを䜜成するか、Scintillaたたは他の同等のオヌプン゜ヌスを効果的に䜿甚する方法を孊びたす。 私が芚えおいるようにテキスト゚ディタ。 䞀般に、テキスト゚ディタヌの䜜成は、耇雑なプログラミングタスクの䟋です。 すべおが画面に衚瀺され、最も耇雑な構造であるため、䞊玚者にずっお理想的なタスクです。 テキスト゚ディタヌに察する私の愛は、Aldus Page Makerアプリケヌションで䜜業しなければならなかったずきに栄え、このプログラムが䜕ができるかを公然ず賞賛したした。それは80幎代埌半から90幎代前半に曞かれたした。 私はたたたたれロから、぀たりれロから䜕十ものテキスト゚ディタを曞いた。 そしお、それは䜕癟ものクむックプロトタむプを数えおいたせん。 DOS甚の最も単玔なメモ垳から、耇雑なマヌクアップず特別な芁件を持぀システムたで。 そのため、゚ディタヌには特別な問題はありたせんでした。 次に、デバッガヌを凊理する必芁がありたした.dbghelp.dllに基づいお、GDB、GDB-MI、WinDbg、およびそれらのさたざたな既補のスカヌトを介しお、玔粋なアセンブラヌでデバッガヌず環境ずの察話の倚くのプロトタむプを䜜成したした。 その過皋で私は恐怖に陥りたした-それがどれほど難しいか、すべおがどれほど文曞化されおいないか、元々サヌドパヌティのアプリケヌションに組み蟌たれる単䞀のデバッガヌではなかったこずは明らかです。 それから、C ++コンパむラヌに察凊しなければなりたせんでした。それに察する私の䞻な芁件はコンパむル速床でした。 既存のコンパむラヌの開発の歎史を詳现に調べ、最速のコンパむラヌコンパむルされたプログラムの速床ではなく、コンパむルされたプログラムの速床ではなくが以前のSymantec C ++であるDigital Mars C ++DMCであるこずを確認する必芁がありたした。 私の掚論はシンプルで、アプリケヌションの開発プロセスでは䜕千回も実行する必芁があり、最適化された実行可胜出力はリリヌス時に䞀床だけ必芁です。 DMCは倚くの堎合、ラむバルよりも数十倍速く動䜜し、通垞のDelphiリアクティブコンパむラに近いパフォヌマンスを実珟したす。 しかし、圌は数十幎前にラむセンスされたオブゞェクトファむルの圢匏のため、これらの実行可胜ファむルをデビュヌする機䌚を䞎えたせんでした。 MSVC、特に以前のバヌゞョンは、GNU C ++よりも数倍高速でした。 しかし、クロスプラットフォヌムでひどいスラヌ化されたドキュメントが䜜成される可胜性はありたせんでした。それぞれのドキュメントは、倉数のタむプを決定するなど、数日間調査する必芁がありたした。 このプロゞェクトには少なくずも1幎かかり、ほがすべおの時間が研究に費やされたした。



C ++ Tao環境プロゞェクトは、䞖界䞭で利甚可胜な既存のIDEビルディングブロックすべお、䞻にコンパむラ、デバッガを適甚できないこずを確認しただけで倱速したした。 この問題を解決するために、゜ヌスだけでなくコミュニティやこれらのツヌルの開発の歎史に぀いおも倚くの時間を費やしたした。 たずえば、GCCは決しお迅速にコンパむルできず、さらに、バヌゞョンごずにコンパむルが遅くなるこずに気付きたした。これは垂堎の需芁であり、開発の焊点です。 運営委員䌚自䜓が非垞に具䜓的に機胜し、コンパむラのデバむスが根本的に芋盎されるこずはないずいう事実は蚀うたでもありたせん。 ロゞックはシンプルで、レクサヌ、AST、バック゚ンド、コヌド生成など、科孊に埓っおすべおが行われたす。ここで発明するものは䜕もありたせん。 LLVM / Clangの䜜者のストヌリヌを含む最初のビデオを芋たずき、私は喜びに飛び぀きたした。AppleずGoogleの考えがどれほど創造的で決定的であるかは明らかでした。 GDBデバむスは、歎史的にも技術的にも悪倢です。 ここで、これらのプロゞェクトの恐ろしさを述べれば、それが奜きではないずいう意味ではないこずを明確にしなければなりたせん。 , , MSVC , ++ , , -! . , , , . .



, , , , . , . , . , , , , . , , , , , .



, , , ? . , , , . , , ? , . , , , , « » , , , — « ». , , . , .



YaUIを曞いたずき、4぀のプログラミング蚀語ず3぀の異なるプラットフォヌムを䞀床に䜿甚する必芁があったため、単䞀のデバッガヌですべおをカバヌするこずはできたせんでしたが、すでに完党に慣れおおり、コヌドの倉曎を通じおデバッガヌなしのデバッグが倧奜きでした。さらに、すべおの開発を通垞のメモ垳++に倉換し、コマンドラむンでスクリプトを䜿甚しおコンパむルしたした。その結果、3぀のプラットフォヌムず4぀の蚀語すべおで同じ開発アプロヌチを達成できたした。 Java、ObjC、C ++、JavaScript、Android、Windows、iOS。巚倧なIDEをたったく䜿甚せずにコヌディングでき、これらの巚倧なブレヌキングの䞖界ぞの䟝存を取り陀き、Node.jsをコンパむルしお䜿甚する必芁がなく、デバッガヌで別の欠陥が修正されるたで埅぀必芁がないこずに気付いたずき、私はこのプログラミングスタむル。だから実際、Deodarのアむデアが生たれたした。たた、Windowsを攟棄し、別の䌁業、぀たり予枬できない倉曎の原因ぞの䟝存を枛らしたいず考えたした。ここで、実際に、この蚘事のメむントピックであるプロゞェクトず補品に戻りたす。これは、このようなこずを曞くこずは非垞に長い研究の埌にしかできないこずがすぐに明らかになったためです。぀たり、実際に補品に取り組む前に、長期にわたる研究を意識的に行った方法を、私自身の䟋で瀺したいず思いたす。぀たり、実際に補品に取り組む前に、長期にわたる研究を意識的に行った方法を、私自身の䟋で瀺したいず思いたす。぀たり、実際に補品に取り組む前に、長期にわたる研究を意識的に行った方法を、私自身の䟋で瀺したいず思いたす。



, , , , . XWindow System, , , , , , , , , . - XWindow Protocol . , Anti Aliased Text. Windows , . OpenGL FreeType HarfBuzz. , , FPS. , , GDK, Qt, FLTK, SDL , GLUT, Pango . . . Xlib+FreeType+OpenGL textures.



. , Xlib . , . . hello world , . , . , , . , . , , . , , onKeyDown, onKeyUp hardware. BASH , . ? , , BASH , .



, V8 Node.js? ? . , npm . . Turbo Vision, . , JavaScript , , . : A->B->C A.draw() .draw(), .draw() .draw() , B.draw(). Turbo Vision . A.draw.apply(this), this.inherited.draw(). B.draw() , . , JavaScript, , , , . , JavaScript , dnaof .



, Notepad++, SublimeText , . . Escape BASH , , . , , JavaScript, - API , , , . , , . , , FPS , Ubuntu, -. . performance. , , , .



, , , — , , . - , , , . , , , , , . .



, . , , . , , . , « , ». , , , , , . , , , . , , . , , , , « » « », « ». , ? . , , ! , , , «», . , , . , . , , . , , , !



プログラミング哲孊

6補品ずデザむン

5Reactosずハチドリ

4Shapitoテクノロゞヌ

3チチコフずプログラマヌ

2神話ず蚀語

13者間プログラミング



All Articles