初夏には、多くの大企業が最近のコースの学生や専門技術の卒業生を対象にインターンシップを実施しています。 私は幸運にも、SKB Konturのそのような若い専門家の仲間入りをすることができました。 ソフトウェア開発の世界と知り合いになったのは、4日間の集中的な訪問学校である「クラッシュコース」というコードネームのイベントから始まりました。 興味深く、魅力的で有益なものがたくさんありましたが、私たちの特別なエンターテインメントについてもう少しお話ししたいと思います。 今日はコードリトリートがあります!
コードリトリート-それは何ですか?!
まず、Code Retreat形式について。 これは、単純なルールを満たすいくつかのプログラミングセッションで構成される開発者会議です。
- セッション時間45分。
- すべてのプログラミングはペアであり、ペアのみです。
- カップルは各セッションをランダムにミックスします。
- 各セッションの終わりに、書かれたコードはすべて容赦なく削除されます。
- 各セッションは同じ問題を解決しますが、さまざまな追加の制限があります。 実際、これらの制限ではすべて塩です!
一見すると、このイベントは控えめに言っても奇妙に思えるかもしれませんが、珍しい、不快で非現実的なルールがあります。 しかし、それに参加する価値があり、意見は根本的に変化しています!
目撃者の目を通して。 どうだった?
クラッシュコースで初めてCode Retreatについて学びましたが、後で判明したように、私だけではありません。 すべては無害な最初のイテレーションから始まり、ゲーム「 Life 」の実装を求められました。 私たちはペアで座って、タイマーが開始されました...
反復1
制限事項:
- 制限時間は45分です。
- あなたはタスクに慣れる必要があり、何かをプログラムします。
大多数の場合、割り当てられた時間間隔で、解決策が準備でき、うまくいったと言わなければなりません。 その後、クッキー、ジャグリング(?!)、および記述されたコードの完全な削除を伴う10分間のコーヒーブレークがありました! さらに、ペアの変更。
反復2
制限事項:
- 45分
- TDDの使用:
- 各テストでは、1つの単純なテストのみ
- 新しいテストはそれぞれ次のとおりです。
- 赤から
- できるだけシンプル
- できるだけシンプル
- キーボードで、それぞれ5分間。
記述されたコードを削除してCookieを食べる標準操作の最後に=)そして、もちろん、ペアを変更します!
反復3(もう少し興味深い)
制限事項:
- 45分
- メソッドのサイズの制限-3(!)行以下。
- キーボードで、それぞれ5分間。
- 競技場は無限大です。
この繰り返しで、もっと楽しくなりました! しかし、最後の4回目の繰り返しが迫っています! そして最初に、あなたはそれを推測し、コードを削除してペアを変更しました!
反復4(非常に興味深い)
制限事項:
- 45分
- キーボードで、それぞれ5分間。
- から選択するには:
- マウスを使用しないでください
- 3分間の計画期間(セッション全体は3分間のサイクルで構成されています。各サイクルの開始時に、パートナーはこのサイクルに間に合うようにしたいことに同意します。最初からやり直す必要があります)
- から選択するには:
- サイクルなし。
- 条件文はありません。
- 変数はありません。
正直なところ、大多数の最終的な反復は、誰もが作業プログラムを取得したかったため、45分よりはるかに長く続きました。 そして、誰も長い間あきらめたくありませんでした=)
印象
2つの言葉:これは何かです! いくつかの段落で起こったことのすべての感情を伝えることは困難です。 次回制限がどうなるかわからないという事実によって状況は悪化し、最初の反復では最終的に何が起こるかさえ想像していませんでした。 私はすべてが好きでした! インターンが共有するレビューは肯定的なものです。 私は、そのような何かを手配する機会がある人に強くお勧めします。
理解度
Code Retreatの利点は何ですか? 実際、そのすべての利点を長い間リストできますが、主なものに言及する価値があります。
- 第一に、それは経験の交換です。 新しいイテレーションごとに、新しいアイデアを得て、新しいパートナーから学び、知識を他の人に伝えます。
- 第二に、これは意識の拡大です(まあ、私はそれを別の方法で何と呼べばいいのかわかりません。 同じ方法で問題を解決した場合、別のソリューションまたは他のいくつかのソリューションを思い付くのが難しい場合があります。 極端な制限は、単にそれを強制的に実行し、通常を超えたものにします。
- 第三に、ポジティブでコミュニケーションの海。 実際になじみのない人と一緒に問題を共同で解決する経験を積むことができます(これは最初のみです)。
まとめ
クラッシュコースは終了しました。多くのエンターテイメントの1つだけを説明しましたが、Konturでのインターンシップは本格的です。 皆さんに幸運を!
ご清聴ありがとうございました! =)そして、試してみてください、あなたはコメントであなたの印象について退会することができます。
DenxcおよびSleipnirの下のコード作成者
最後の反復からのLifeゲームコードの一部。
/* : 1. . 2. . 3. . 4. 3- . 5. Game 60 . */ class Game { private HashSet<Point> aliveCells; private IEnumerable<Point> movingVectors = new List<Point>() { new Point(-1, -1), new Point(-1, 0), new Point(-1, 1), new Point(0, -1), new Point(0, 1), new Point(1, -1), new Point(1, 0), new Point(1, 1) }; public Game(IEnumerable<Point> initCells) { aliveCells = new HashSet<Point>(initCells); } public Game MakeStep() { return new Game(aliveCells.SelectMany(Neighbours).Where(ShouldAlive)); } public void Show() { Console.Clear(); aliveCells.Where(c => cX >= 0 && cY >= 0 && cX < Console.WindowWidth && cY < Console.WindowHeight) .Select(PrintPoint).ToArray(); } public bool PrintPoint(Point cell) { Console.SetCursorPosition(cell.X, cell.Y); Console.Write('*'); return true; } public IEnumerable<Point> Neighbours(Point cell) { return movingVectors.Select(c => new Point(cX + cell.X, cY + cell.Y)); } public bool ShouldAlive(Point cell) { var aliveNeighboursCount = Neighbours(cell).Count(aliveCells.Contains); return aliveNeighboursCount == 3 || aliveNeighboursCount == 2 && aliveCells.Contains(cell); } } // : public static void Run(Game game) { game.Show(); Thread.Sleep(40); Run(game.MakeStep()); } Run(new Game(new HashSet<Point>() { new Point(21, 23), new Point(21,21), new Point(21,22), new Point(22, 21), new Point(20, 22) } ) );
ソース、実行可能ファイルをダウンロードして、 ここで結果を確認できます。