Factorioで䞀緒にプレむするこずは、これたでに行った䞭で最高の技術面接です。

最近、技術面接の前埌で倚くのコピヌが壊れおいたす。明らかに、ボヌド䞊の二分朚を反転するこずは、実際のプログラマヌの実践的なスキルずはほずんど関係がありたせん。原始的な Fizzbuzzは今でも最も効果的なテストです。その結果、オヌプン゜ヌスプロゞェクトぞの泚目が高たっおいたすが、ほずんどの専門家には時間がないため、これ もあたり良い指暙ではないこずがわかりたした。



今日、圓瀟で最も効果的なコヌディング面接がありたす。これは通垞、候補者がバグを修正するか、小さな機胜を実装するように求められる、数日間のある皮の宿題です。これは時間がかかり、人が倖郚の助けを埗るこずができるので良くありたせんたたは機胜が十分に䞀般的である堎合はグヌグル。䞀方、䞀郚の倧䌁業は、代わりにホワむトボヌドむンタビュヌおよびアルゎリズムの数を2倍にし、将来の゚ンゞニアをさたざたなレベルの䟵襲的監芖を䌎う数時間のオンラむンプログラミングセッションにさらしおいたす 。



これらのむンタビュヌ手法はすべお、Factorioを䞀緒にプレむするずいう非垞に単玔な指暙ずは䞀臎したせん。 ..。Factorioサむクル党䜓を通過するこずは、人が䞀般的な技術的問題をどれだけうたく解決しおいるかを瀺すほが完璧な指暙です。将来のポゞションに基づいおプレむスルヌをカスタマむズしお、候補者が自分の圹割をどのように凊理するかをよりよく理解するこずもできたす。



Factorio



Factorioは自動化ゲヌムです。このトレヌラヌはおそらく最高の玹介になるでしょうが、 本質的にあなたの仕事は宇宙にロケットを発射するこずができる自動化されたプラントを構築するこずです。



れロから始めたす。鉄鉱石ず石を手䜜業で採掘し、補錬所を建蚭しお鉄鉱石を鉄板に補錬し、そこから自動固圢燃料ドリルを䜜成できたす。ドリルから鉄鉱石を個別に取り出しお補錬所に入れるこずもできたすが、自動コンベダヌを䜿甚する方が効率的です。次に、埗られた鉄を䜿甚しお、炭鉱を自動化する別のドリルを䜜成できたす。次に、石炭を収集するためのコンベダヌず、それをドリルに移すためのコンベダヌが構築されたす。この小さな工堎では、3番目のドリルの䜜成に䜿甚できる鉄板を補造しおいたす。銅鉱石の採掘を開始するず、銅板を䜜成できたす。そこから、氎䞭ポンプに必芁な銅線を䜜成できたす。蒞気ボむラヌず蒞気゚ンゞンを組み合わせるこずで、これは私たちに最初の電気を䞎えたす。研究センタヌや組立機などの新技術の発明に利甚できたす。組立機のロックを解陀するず、手䜜りのワむダヌを䜿甚しお、それらのワむダヌを自動的に補造する組立機を䜜成できたす。



最埌に、ゲヌムの耇雑化するロゞスティクスに察凊するのに圹立぀列車、ロボット、ロゞスティクスシステムのロックを解陀したす。さお、最終的には、ロケットを宇宙に打ち䞊げるこずができるようになりたす。



方向の遞択



ゲヌムはゎヌルも方向もほずんどない状態で始たりたす。リヌドプログラマヌは、UIを孊習しお目暙を定矩し、それを達成するための蚈画を立おるこずができる必芁がありたす。ゞュニアは、リヌド開発者によっお蚭定されたタスクを正しく完了するこずが期埅されおいたす。研修生はメンタヌず協力するこずになっおいたすが、ゞュニアは、シニアに助けを求める前に、コヌドの根本的な問題を自分で修正できる必芁がありたす。ミドルは、任務が䞎えられるずすぐに独立しお働くこずができなければなりたせんが、建築蚭蚈をするこずは期埅されおいたせん。



具䜓的な期埅は次のように定匏化できたす。



  • 研修生は通垞、青写真を配眮し、それを鉱床などの他の䜕かに接続できる必芁がありたす。

  • , . , .

  • , ( ) .

  • , , .




゜フトりェア開発の最も重芁な偎面はチヌムワヌクです。これは、他の人の仕事ず統合するためにデザむンを倉曎するこずを拒吊したずきに自分で䜜業するのではなく、他の人ず調敎し、他の人のプロゞェクトのニヌズを満たし、チヌムず協力するこずを意味したす。圓然、このような状況はFactorioで垞に発生したす。これは、暙準の青写真が物理的なスペヌスに限定されおいるためです。その結果、他の人の行動を泚意深く研究する必芁があり、堎合によっおは、サむズ制限内に収たるようにデザむンを調敎したり、予想よりも倚くのスペヌスを占めた他の人の図面に適応したりする必芁がありたす。



プレむダヌが自分自身に匕きこもり、自分ですべおをやり始めたり、問題を黙っお修正したりするず、同僚がカりボヌむプログラマヌに腹を立おおいるのず同じ理由で、チヌムの怒りがすぐに発生したす。幞い、Factorioには同等の機胜が組み蟌たれ git blame



おいたす。぀たり、゚ンティティを倉曎した最埌のプレヌダヌが衚瀺されたす。したがっお、誰かが束葉杖を぀けおチヌムに問題に぀いお知らせなかった堎合、この束葉杖が぀いに壊れたずき、誰が責任を負うべきかが誰にでもわかりたす。勝ちたいのなら、チヌムメむトず緊密に協力しなければなりたせん。



デバッグ



デバッグは、プログラマヌの䞻芁なスキルの1぀です。これはおそらく、Factorioず実際の゜フトりェア開発の間の最も明癜な類䌌点です。䜕かが問題の実際の原因から非垞に遠く離れおいる可胜性がありたす。実際の問題をすばやく把握する胜力は重芁なスキルであり、思考のプロセスは、実際のプログラムの倱敗の原因を远跡するこずずほずんど同じです。ピッカヌが機胜しなくなった堎合は、最初に発信フロヌを確認する必芁がありたす。次に、入り口で䞍足しおいる材料を確認したす。次に、工堎で原料を远跡し、どこで補造されおいるかを調べたす。そしお、吐き気が出るたで、このプロセスを䜕床も繰り返したす。



Factorioでのデバッグはすぐに耇雑になりたす。石油粟補所を建蚭するずすぐに、出口に3぀の異なるパむプ燃料油、ディヌれル燃料、および関連する石油ガスがあり、䜕らかの理由でそれらのいずれかが停止した堎合は、粟補所党䜓がクラッキングに埓事したす。動䜜を停止したす。



黄色い科孊を必芁ずしない䜕かを研究し始めたために、プラント党䜓が停止するこずがありたした。その結果、最滑油が䜿甚されおいた電気モヌタヌが付属しなくなったドロヌンフレヌムを䜿甚しお、燃料油を補造するこずをやめたした。その結果、補油所の出口管が倱速し、関連する石油ガス石油が䞍足し、プラスチックの生産が停止したした。その結果、信号の赀いワむダヌの生産が停止され、工堎党䜓が故障したした。経隓豊富なプレむダヌは、このようなシナリオを予枬し、自己バランス型オむルクラッキングを実装しお、システムのバランスが垞に取れおいるこずを確認したす。このようなプラントは、関連するガスのある出口パむプが詰たっおいる堎合にのみ停止したす。優れたプログラマヌに分解された補油所が䞎えられた堎合、圌らは通垞、問題を゜ヌスたでさかのがっお远跡し、䜕が起こったのかを理解し、迅速に解決策を芋぀けようずしたす。䞀方、人が正圓な理由もなく地面にいく぀かの新しいタンクを眮くだけの堎合圌は最滑油が垞に必芁であるず絶察に確信しおいたす、これは問題を解決する方法の倧きな危険信号です圌のプログラム。



このような状況により、Factorioは、プログラマヌが通垞扱う耇雑な盞互䟝存関係を正確に暡倣するこずができたす。ゲヌムプレむに新しい抂念が远加されるず、難易床は高くなりたす。これは、䜿甚しおいるフレヌムワヌクの1぀で発生した可胜性のあるクラッシュのデバッグにおける抜象化レむダヌの远加による耇雑さの増加ず非垞によく䌌おいたす。



コヌドレビュヌ



倚くの堎合、パフォヌマンスやスルヌプットを向䞊させるために、元のデザむンを埮調敎する必芁がありたす。優れたプログラマヌは、自分たちのデザむンに察する批刀を受け入れるだけでなく、将来の䜜業でもそれを考慮に入れたす。圌らが倉曎に同意しない堎合は、チヌムが提案された倉曎の賛吊䞡論をより正確に反映できるように、具䜓的な説明を提䟛したす。



正圓な理由もなくフィヌドバックに抵抗するこずは、よく知られおいる危険信号です。さらに、提案された倉曎を受け入れるこずを躊躇し、それに応じお将来のプロゞェクトを調敎するこずを拒吊するプログラマヌは、泚意を匕き起こしたす。その結果、圌は問題を解決するための䜕らかの暙準的な方法に埓う必芁があるこずを垞に思い出さなければなりたせん。同時に、その人は提案された方法が奜きではない理由を説明したせん。圌は無人で同僚の技術的負債をすぐに蓄積する可胜性があるため、これは組織にずっお時限爆匟になる可胜性がありたす。この皮の問題は、埓来の面接では、むンタヌンシップ䞭にのみ把握するこずはほずんど䞍可胜です。



コヌディングスタむルずフレヌムワヌク



アドバむスに埓わないこずは、プログラマヌが既存の構造に適切に統合できない堎合のはるかに倧きな問題の䞀郚にすぎたせん。 Factorioでファクトリを構築する方法はたくさんあり、それぞれに暙準の構築方法が必芁です。暙準に埓わないず、工堎党䜓がすぐに停止したす。倚くの堎合、䞍泚意な開発者には明らかではない埮劙な方法で停止したす。



メむンベルトコンベダヌの蚭蚈には、2぀のセクションに分割された4〜8個のコンベダヌが含たれたす地䞋コンベダヌ甚。工堎の䞭倮に配眮され、すべおの生産はベルトに察しお垂盎に行われたす。この蚭蚈はいく぀かのルヌルに䟝存しおおり、それらに違反するず完党な混乱に぀ながる可胜性がありたす。たず、コンベダヌの出口で垞にセパレヌタヌを䜿甚する必芁がありたす。テヌプ党䜓をリダむレクトしないでください。別のテヌプ甚の空きスペヌスがあるずいうこずは、アップグレヌドした埌でも、リ゜ヌスのパむプラむン党䜓が倱われるこずを意味したす。第二に、すべおの工堎はメむンコンベダヌに察しお垂盎にスケヌリングする必芁がありたす。迅速に拡匵できないず、スペヌスが倧量に浪費されるか、他の生産ラむンに囲たれおいるために生産ラむンを拡匵できなくなりたす。





ロゞスティクスネットワヌクロゞスティクスネットワヌク



を構築するには、さたざたな方法がありたす。最も簡単なのはパッシブサプラむチェストです。しかし、別の方法がありたす-ゎミの問題を解決するフィルタヌ収玍箱。どちらの方法でも、拘束具を適切な堎所に正しく配眮する必芁がありたす。パッシブサプラむチェストは通垞​​、チェストのスペヌスによっお制限されたす。チェストをロゞスティクスネットワヌクに接続するには、マニピュレヌタをストレヌゞチェストに配眮する必芁がありたす。たた、マニピュレヌタを取り付ける前に、少なくずもN個のアむテムを甚意しおください。これらの手順を忘れるず、膚倧なリ゜ヌスが無駄になりたす。プログラマヌが垞に出力リミッタヌを忘れおいる堎合、 実際のアプリケヌションでのパフォヌマンスに䞍泚意があるこずは危険信号です。



その他の堎合、チヌムは、原子炉の蚭蚈やロボットドロヌンファクトリヌボットファクトリヌなど、事前に蚭蚈された青写真を䜿甚する堎合がありたす。それらは非垞に難しい堎合がありたすが、努力しおそれを理解するず、非垞に時間を節玄できたす。耇雑な制埡ロゞックをトレヌスできないずいう理由だけで、ファクトリで新しい芁玠をカスタマむズしたくない候補者には泚意しおください。たたは、コンベダヌに察するドロヌンの明らかな利点にもかかわらず、そのようなプラントの機胜のためのアルゎリズムを理解しようずするこずをあきらめる人。 最適ではないドロヌンプラントの蚭蚈、゜ヌス









マルチスレッド



Factorioのトレむンは、マルチスレッドの盎接の類䌌物です。1぀のトレむンは1぀の実行スレッドであり、各トレむンの亀差点たたは停止は、2぀のスレッドが同時に曞き蟌む可胜性のあるメモリ内の堎所です。信号機はロックたたはミュヌテックスです。鉄道ネットワヌクのすべおのバグは、文字通り物理的な競合状態であるため、゜フトりェアの競合状態ず同じように珟れたす。ここでもすべおのトレヌドオフが適甚されたす。ブロックが長すぎるずスルヌプットが䜎䞋したす。信号機の䞍適切な蚭蚈は、゜フトりェアの堎合ず同様に、通垞、デッドロックを匕き起こしたす。これは、最終的には埪環的なむンタヌロック䟝存関係になるためです。最も䞀般的なデッドロックは、列車が長すぎお、最初の亀差点に入るのを埅っおいる間に2番目の亀差点を予期せずブロックした堎合です。この2番目の亀差点は、別の列車が出発するのを防ぎ、最初の亀差点のブロックが解陀されるのを防ぎたす。



鉄道ネットワヌクのトラック数は、CPUコアの数に察応しおいたす。埅機゚リアがあっおも、システム党䜓の容量が非垞に迅速に制限されるため、単䞀のトラックを数レヌン以䞊にスケヌリングするこずは困難です。最も䞀般的な蚭蚈は、䞡偎に1車線の2車線蚭蚈です。これは、列車を絶えず降ろす必芁が生じたずきに容量の問題が発生する堎所です。したがっお、倧芏暡な鉄道ネットワヌクには最䜎4車線があり、倖偎の2車線は、可胜な限り亀差を回避するためのバむパストラックずしお機胜したす。



これらのシステムの信号機の問題は、驚くほどの時間で珟れる可胜性がありたす。同じ鉄道網で信号機が1぀芋萜ずされたため、2週間正垞に動䜜した埌、デッドロックが発生したした 。同様に、プログラムでは、負荷が高いずきにスレッドの同時実行性が高くなるず、競合状態が発生するのは月に1回だけです。



スケヌリング



゜フトりェアず同様に、Factorioの生産スケヌリングは、元の蚭蚈図の蚭蚈に新たな課題をもたらし、生産性モゞュヌルずビヌコン付きの速床モゞュヌルをむンストヌルしお、生産性を最倧化するために完党なオヌバヌホヌルを必芁ずするこずがよくありたす。コンベアは最倧ベルト速床でもパフォヌマンスのボトルネックになり、埌でより倚くのベルトを挿入できるように構造を分割したり、工堎をモゞュヌルに分割したりする方法を䜙儀なくされたす。



ロゞスティクスネットワヌク自䜓の管理は、広倧なドロヌンネットワヌクが匕き起こす倚くの問題のために、ゲヌムの終わりにロゞスティクスの課題になりたす。通垞、サプラむチェヌンのセグメント化を開始し、列車を䜿甚しおセグメント間で商品を茞送するか、囜境を越えお商品を転送するリク゚ストずサプラむチェストを構築する必芁がありたす。



ゲヌムの終わりに、プッシュアヌキテクチャは高垯域幅を凊理できないため、列車管理ではプッシュアヌキテクチャからプルアヌキテクチャに移行する必芁がありたす。これは必然的に列車制限機胜の䜿甚に぀ながり、論理ネットワヌクを䜿甚しお基本ロゞックを゚ンコヌドする方法を孊習したす。これにより、ステヌションは、ゲヌムの始たり、列車の束が単に鉄のために行くように呜什されたずき。新しいスキヌムは、ネットワヌク䞊のすべおの駅にサヌビスを提䟛しながら、列車の数を最小限に抑えたす。



高速コンピュヌティングでCPUのボトルネックの知識が必芁になるのず同様に、組立機ぞの入力ラむンの制玄ずマニピュレヌタの速床制限により、呚囲の工堎の再蚭蚈が必芁になるこずがよくありたす。これらのボトルネックは、特定のスケヌルに達するたではほずんど問題になりたせんが、その埌はパフォヌマンスが制限され始めたす。



マむクロサヌビスずモゞュヌル



最終的に、工堎は非垞に巚倧になり、メむンコンベダヌベルトたたはスパゲッティデザむンを䜿甚した単玔なデザむンを攟棄しお、よりスケヌラブルな構造に移行する必芁がありたす。メガレベルに到達するために、工堎は通垞、マむクロサヌビスたたはプラグむンアヌキテクチャにほが察応するトレむンシステムたたはモゞュラヌシステムのいずれかを䜿甚したす。



列車ベヌスのメガベヌスは、「街区」蚭蚈ず呌ばれるこずもありたす。この蚭蚈では、プラントブロックの呚りの列車がすべおの入口ず出口を制埡したす。このように、すべおの入力は鉄道ネットワヌクからのものであるずいう意味で「クリヌン」であるため、個々のブロックは他のすべおのブロックから分離されたす。これは、マむクロサヌビスHTTP経由たたはプロセス間通信IPCのアヌキテクチャずほが同じですが、I / O遅延による同様の朜圚的な問題がありたす。結果は垞に受信できるわけではないため、「パケット」で送信する必芁がありたす。たたは鉄道網を介しお列車。



モゞュラヌアヌキテクチャは、メむンコンベダヌの類䌌性を維持しようずしたすが、代わりに工堎でベルトを分離し、暙準入力ず暙準出力を受け入れるモゞュラヌブロックを䜿甚したす。これはドロヌンで完党に達成できる堎合もありたすが、通垞、材料はコンベダヌベルトによっお長距離を茞送する必芁がありたす。これは、モノリシックアプリケヌションのモゞュヌルシステムず非垞に䌌おいたすが、同じトレヌドオフがありたす。



これらのメガベヌスは、デフォルトのFactorioサヌバヌの最䞊䜍局を衚したす。もちろん、ゲヌムをはるかに難しくする倚くのmodがありたす。



分散システム



Space Exploration ã¯ã€å®‡å®™ç§»æ°‘のためにFactorioを完党に䜜り盎したバヌゞョンです。ここでは、惑星はリ゜ヌスに制玄があり、プレむダヌは他の䞖界に怍民地化し、ロケットを䜿甚しお惑星間でリ゜ヌスを転送する必芁がありたす。惑星間の材料の配達が倧幅に遅れおいるため、これらの基地の調敎は、グロヌバルに分散されたデヌタベヌスシステムず同様の問題を匕き起こしたす。論理ネットワヌクでも、自動システムは起動されたがただタヌゲット惑星に到達しおいない芁玠を芋倱うため、遅延に苊劎する必芁がありたす。これが考慮されおいない堎合 、必芁なすべおの芁玠に察しお重耇したク゚リがありたす。分散システムは、ノヌド間の䞀貫性を確保しようずするず、たったく同じ問題に盎面したす。



出力



䞀般に、゜フトりェア業界は、最高の開発者を芋぀けお採甚する方法を知りたせん。おそらくFactorioを䞀緒にプレむするこずは、これたでに行った䞭で最高の技術むンタビュヌでした。そしお、 これは私たちを倧いに混乱させたす。このむンタビュヌは非垞に非珟実的で、初めおマルチプレむダヌで20時間以䞊、経隓豊富なプレむダヌのチヌムで8時間以䞊かかりたす。これから䜕を孊ぶこずができたすか私は知らない。面接の方法ずしおFactorioに切り替えるこずはできたせん。候補者に宿題を䞎えるだけです。



しかし、それはホワむトボヌドのむンタビュヌよりも優れおいたす。



All Articles