Bagaimana Anda bisa mencapai dan mempertahankan aliran saat memasangkan pemrograman?

17

Flow adalah konsep yang diperkenalkan oleh Mihaly Csikszentmihalyi; singkatnya, itu berarti masuk ke "zona". Anda merasa terbenam dalam tugas Anda, fokus; tugasnya bisa sulit tetapi sekaligus menantang. Ketika orang mencapai aliran, produktivitas mereka meningkat. Pemrograman membutuhkan banyak fokus mental karena kita sering perlu menyulap beberapa hal dalam pikiran kita sekaligus. Banyak yang suka bekerja di lingkungan yang tenang di mana mereka dapat mengarahkan perhatian penuh mereka pada tugas tersebut. Jika mereka terganggu, mungkin perlu beberapa menit atau bahkan berjam-jam untuk kembali ke aliran.

Saya mengerti ada praktik dalam pengembangan tangkas dan pemrograman ekstrem yang disebut pemrograman pasangan. Ini berarti Anda menempatkan seluruh tim pengembangan perangkat lunak dalam satu ruangan sehingga komunikasi menjadi lancar. Anda menulis kode dengan pasangan Anda karena dengan cara ini Anda mendapatkan ulasan kode instan dan lebih sedikit bug yang lolos.

Saya selalu mengalami masalah mencapai aliran saat melakukan pemrograman berpasangan karena interupsi yang konstan. Saya berpikir mendalam tentang suatu masalah maka tiba-tiba seseorang bertanya kepada saya pertanyaan dari pasangan lain. Kereta pikiranku hilang.

Bagaimana Anda bisa mencapai dan mempertahankan aliran saat memasangkan pemrograman?

siamii
sumber
4
Saya tidak setuju bahwa pasangan lain hanya bisa memotong setiap saat.
JeffO
3
Alternatif untuk Flow adalah mengidentifikasi dan mempertahankan posisi di Ballmer Peak . Ini mungkin memerlukan banyak percobaan, waktu, dan Scotch untuk mencapainya.
Hovercraft Full Of Belut
Saya terganggu membaca pertanyaan ini ketika saya harus menulis kode. Jika saya berpasangan-pemrograman dengan seseorang, saya tidak akan membuka pertanyaan ini untuk membacanya, dan mungkin akan lebih banyak dilakukan.
TehShrike

Jawaban:

15

Sunting: Penafian - Inilah cara saya mendefinisikan "zona": A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

Saya mencoba untuk menghindari keadaan ini karena, sementara saya dapat menghasilkan kode yang benar di zona tersebut, saya dan pengembang lain akan kesulitan memahaminya nanti. Singkatnya: membaca kode yang ditulis di zona mungkin sering mengharuskan pembaca berada di zona. Kendala itu adalah masalah saya.

Ada bab bagus tentang The Clean Coder di mana Paman Bob secara persuasif menjelaskan mengapa "masuk ke zona" adalah ide yang sangat buruk.

Inilah alternatif yang mungkin lebih baik daripada "masuk ke zona": berpikir jernih dan pertimbangkan dengan tenang dan profesional apa yang Anda lakukan. Menyampaikan. Bagikan pemikiran dengan pasangan Anda. Identifikasi masalah nyata. Diskusikan kemungkinan solusi. Anda mungkin tidak merasa fokus luar biasa, tetapi Anda cenderung membuat keputusan yang baik, dan desain yang mudah didekati.

Jika Anda dan pasangan-pasangan Anda dapat mendiskusikan masalah tanpa Anda berdua menjadi sangat fokus, maka kemungkinan Anda telah merebus masalah menjadi sifatnya yang lebih sederhana. Itu menunjukkan Anda akan dapat memahaminya lagi kapan pun Anda perlu.

Di sisi lain ... Jika Anda hanya perlu waktu sendirian untuk meluruskan kepala Anda (kadang-kadang kita semua melakukannya), ambil saja. Kumpulkan pikiran Anda. Selesaikan dulu masalahnya di kepala Anda.

Tetapi masalahnya adalah jika Anda melakukannya - jangan gunakan waktu itu untuk menulis kode produksi. Sebaliknya, bermain-main dengan kode sampel dan prototipe. Cobalah untuk memahami masalahnya, tanpa memikirkan solusinya dulu. Setelah Anda meluruskan semuanya dan menuliskannya, diskusikan dengan tim dan pasangan Anda, atau bahkan bebek karet di meja Anda. Jika Anda masih tidak dapat mengartikulasikannya, atau mereka tidak dapat memahaminya, maka perbaiki ide-ide Anda. Setelah Anda menyelesaikan semua itu - mengintegrasikan semua pemikiran dan kode sampel menjadi solusi yang nyata dan berfungsi.

Yam Marcovic
sumber
2
Saya akan memilih jutaan kali jika saya bisa, profesional belajar untuk bekerja apakah mereka "di zona" atau tidak. Profesional dapat bekerja dengan orang-orang yang mengganggu mereka untuk bertanya, dengan kebisingan di sekitar mereka, dan bersama-sama dengan orang lain benar-benar melakukan percakapan tentang bagaimana melakukan tugas apa pun yang mereka kerjakan bersama. Saya tidak tertarik bekerja dengan prima donnas yang harus memiliki kondisi kerja khusus untuk berkonsentrasi.
HLGEM
7
@ HLGEM - Saya pikir tidak memiliki akses ke tempat yang cukup untuk bekerja ketika dibutuhkan terlalu banyak untuk diminta.
JeffO
2
@HLGEM: Tentu saja seorang profesional seharusnya memiliki produktivitas rata-rata di bawah kondisi kerja rata-rata. Tetapi di sisi lain, pengusaha berkepentingan untuk membiarkan profesional yang sama bekerja dengan cara yang sangat terfokus, karena ini dapat sangat meningkatkan produktivitas dan kualitas.
Giorgio
2
"Sepertinya saya orang memperlakukan" zona "seolah-olah itu adalah perbaikan cepat yang ajaib untuk menyelesaikan masalah dengan baik, seperti topi berpikir.": Tidak, yang lebih sepele, zona adalah keadaan konsentrasi di mana Anda lebih produktif karena Anda fokus pada tugas Anda tanpa gangguan. Zona ini tidak membuat Anda mahakuasa, itu hanya membuat Anda lebih produktif.
Giorgio
2
@Yam Marcovic: Ini bukan jenis produktivitas yang ada dalam pikiran saya (menghasilkan lebih banyak kode dengan kualitas lebih rendah): jika seseorang menggunakan isolasi sebagai alasan untuk melakukan apa yang mereka inginkan, mereka tidak menjadi lebih produktif. Bagi saya flow tidak berarti mengacaukan dan kemudian menulis banyak kode, tetapi lebih kepada mengerjakan secara sistematis tugas tertentu tanpa terganggu oleh tugas-tugas lain yang tidak terkait.
Giorgio
5

Pemrograman pasangan terkadang membutuhkan periode isolasi dari pasangan Anda.

Contoh

Anda bekerja bersama pada kelas tertentu, dan Anda menyadari bahwa Anda perlu menulis metode yang membutuhkan pemikiran mendalam pada beberapa logika kompleks, tetapi sebaliknya mengembalikan hasil yang biasa. Anda bekerja bersama membuat tes unit untuk metode itu, dan menunda penulisan metode itu ke periode waktu ketika Anda bekerja secara terpisah. Ketika metode ini selesai, Anda kembali bersama sebagai pasangan dan mengevaluasi hasilnya.

Robert Harvey
sumber
Mengapa implementasi tidak dilakukan dalam pemrograman berpasangan?
coba-tangkap-akhirnya
5

Saya telah menemukan ada kelas kecil masalah di mana pemrograman pasangan bekerja. Misalnya, jika Anda bekerja pada produk lintas platform dan Winders guy telah mengimplementasikan fitur yang memerlukan kode spesifik OS, ia dapat membantu pria Mac mengimplementasikan fitur yang sama pada kode Mac saat pria Mac mengemudi.

Namun dalam pengalaman saya, pemrograman berpasangan secara tidak biasa menghasilkan hilangnya produktivitas bersih. Seringkali kami merasa seperti membayar dua pengembang untuk melakukan satu pekerjaan.

Ya, itu mengurangi kemungkinan mengerikan bahwa seorang dev mungkin mengambil istirahat stackexchange selama hari kerja.

IMHO akan lebih murah bagi perusahaan-perusahaan yang ingin mengawasi dev mereka untuk hanya memasangkan setiap dev dengan penjaga keamanan swasta untuk berdiri di belakang pengembang dan memukul dev dengan pentungan jika dia melambat atau mencoba untuk memuncak pada yang tidak penting halaman web.

Jim In Texas
sumber
1
Inti dari pemrograman pasangan tidak saling menghentikan dari mengendur; itu bahkan tidak akan efektif. Intinya adalah memiliki tinjauan kode secara real time.
Im
3
@ Leev: Memiliki tinjauan kode sebelum melakukan jauh lebih efisien: review memakan waktu dari beberapa menit hingga setengah dan jam, daripada seluruh hari kerja.
Giorgio
@Iorgio Tidak cukup. Misalnya, bisa jadi Anda membuat bug, lalu buang waktu untuk menangkapnya, dan baru setelah itu kode ditinjau dan komit. Jika Anda telah memprogram pasangan, pasangan Anda akan memperhatikan bug dan menghemat waktu debugging.
Im
1
@Lev: "Jika Anda telah memprogram pasangan, pasangan Anda akan memperhatikan bug dan menghemat waktu debug.": Tidak ada jaminan bahwa bug diketahui dengan pemrograman pasangan atau dengan ulasan kode. Misalnya, setelah enam jam pemrograman berpasangan, seseorang mungkin sangat lelah sehingga mudah mengabaikan bug.
Giorgio
Jelas tidak ada jaminan, tetapi itu bisa membantu.
Im
3

Sebagai pengembang yang mencoba masuk ke zona tersebut, Anda akan berusaha mengisolasi diri Anda sebaik mungkin untuk merasa nyaman dan menjernihkan pikiran. Mengapa pemrograman pasangan harus berbeda?

Anda dan pasangan Anda harus menemukan lingkungan pemicu zona yang bekerja untuk Anda berdua. Ini mungkin membutuhkan kompromi pada beberapa hal, tetapi poin utama saya adalah bahwa lingkungan pasangan harus serupa dengan solo. Matikan dunia luar. Pasangan ini pemrograman bersama; pasangan lain (rekan kerja lain pada umumnya) tidak boleh mengganggu (kecuali masalah kritis, apa yang Anda lakukan).

sarumont
sumber
0

Flow adalah kondisi yang bagus untuk dilakukan ketika Anda tahu langkah-langkah tepat untuk menyelesaikan masalah. yaitu beberapa tidak diketahui yang tidak diketahui. Anda duduk di sudut yang tenang dan memalu solusinya. Namun, sebagian besar masalah / cerita / fitur tidak begitu jelas ketika Anda mulai memprogram mereka. Akan selalu ada "celah" antara kondisi akhir yang diharapkan dan bagaimana otak Anda telah "merencanakan" itu. Anda belajar banyak hal ketika Anda benar-benar "melakukannya". Otakmu juggle

  • Desain Kode

  • Mengetik

  • Mempelajari hal-hal baru tentang domain dan kode

Ketika saya memprogram sendiri, saya berjuang untuk menyeimbangkan hal-hal ini. Saya cenderung masuk ke "lubang kelinci" di mana kekeliruan biaya hangus saya mencegah saya mengambil langkah mundur dan melihat gambaran besar dan mengubah desain saya. Juga sulit bagi saya untuk berbicara dengan bebek karet imajiner atau yang nyata dalam hal ini. Bagaimanapun, saya dalam "aliran".

Ketika saya memasangkan pemrograman secara produktif, saya mendapatkan periode mengetik yang berganti-ganti diikuti oleh periode pemikiran dan refleksi. Di sinilah banyak hal tersembunyi mengungkapkan diri mereka dan desain yang berbeda dapat muncul. Jika saya masuk ke lubang kelinci, pasangan pasangan saya dapat menarik saya keluar dari sana. Berbicara / menjelaskan sesuatu kepada manusia nyata memiliki efek luar biasa untuk membuat pikiran Anda lebih jelas. Kadang-kadang, saya rindu berada di "aliran", tapi saya pikir saya berkontribusi lebih banyak kepada tim saya ketika saya memasangkan program daripada ketika saya memprogram solo. Lagi pula pemrograman! = Mengetik. Pemrograman terjadi di otak dan pemrograman yang lebih baik terjadi ketika dua otak berkolaborasi dan saling mengkritik.

uttamkini
sumber