Tuesday, November 25, 2008

Konflik jangan dihindari...

.. tapi diselesaikan.

Saya ingat betul ketika pertama kali mendapat kuliah dari Prof. Sudjono (atau yang lebih dikenal dikalangan mahasiswa: Pak Jon). "Ilmu elektronika bisa diterapkan dimana-mana, untuk ilmu apapun, bahkan diterapkan dalam kehidupan sehari-hari". Sejenak kemudian saya berfikir, mencoba mencerna apa maksud kata-kata filosofisnya. Pak Jon lalu mencontohkan tentang fenomena sosial di masyarakat, dan kemiripannya dengan fenomena ilmu-ilmu yang dipelajari di Elektronika.

Sekali lagi, saya gagal memahami apa maksudnya. Bagaimana ilmu Elektronika dipakai untuk menganalisa fenomena sosial? Ah, tapi baru-baru ini, sedikit-demi-sedikit saya mulai memahami apa maksud kata-kata filosofisnya. Ilmu adalah universal. Karena pangkal dari semua ilmu adalah kebenaran universal yang satu. Itu adalah fitrah, yang Allah takdirkan bagi hamba-Nya.

Saya beri satu contoh kecil bagaimana pengalaman kerja saya di bidang IC design menjelaskan fenomena sosial.

Pernah pakai SVN? Tool untuk version control. Untuk windows saya pakai Tortoise SVN, sedangkan untuk Linux saya pakai Kdesvn. Caranya adalah, setelah desain selesai dengan kriteria tertentu, kita commit design. Lalu SVN (atau sering kita sebut: repository) akan merekam semua kejadiannya, termasuk perbedaan code line-per-line antara desain versi duku dengan sekarang. Orang lain bisa melihat code yang baru kita commit dengan cara update design.

Intinya agar kita punya jejak perkembangan desain yang sudah dibuat, agar jika terjadi error, bisa kembali ke versi dahulu. Kegunaan lainnya adalah jika bekerja dalam suatu tim. Bagaimana menggabungkan pekerjaan beberapa orang, dan bagaimana jika ada dua orang mengedit satu file (misalnya verilog file) yang sama.

Contoh terakhir menarik. Dalam development, ada dua orang yang harus mengedit satu file yang sama. Satu orang mengedit lalu commit design. Orang lain mengedit lalu ingin commit design. Tapi tidak bisa! Kenapa? Pertama, karena file di repository telah berubah, dan acuan editing kita tidak sesuai dengan apa yang ada di repository. Kedua, karena editing orang lain yang telah di-commit (atau check-in) di repository posisinya sama dengan apa yang kita edit dalam file kerja kita (current working directory).

Kalau ini terjadi, maka kita sebut sebagai "Konflik". A conflict occurs when two changes are made by different parties to the same document, and the system is unable to reconcile the changes. A user must resolve the conflict by combining the changes, or by selecting one change in favour of the other (http://en.wikipedia.org/wiki/Revision_control).

Ada banyak cara jika kita kedapatan konflik. Cara yang benar adalah pakai resolve conflict. Tortoise SVN punya fasilitas built-in resolve conflict. Untuk Linux bisa pakai Kdiff3.

Apa yang dilakukan dalam proses resolve conflict? Kita membandingkan hasil code kita dengan code yang ada direpository. Tools seraca otomatis akan menunjukkan bagian line berapa yang terjadi conflict. Lalu kita, sebagai desainer, bisa memilih: (1) pakai code line yang ada di repository, (2) pakai code line kita yang ada di current working directory, (3) Memakai kedua code. Apabila ragu-ragu atas pilihan itu, maka kita harus berdiskusi dengan desainer lain yang mengedit file yang sama tersebut. Kemudian memutuskan code mana yang akan dipakai. Itu dalah cara menyelesaikan konflik yang benar.

Cara yang salah adalah:
1. Update repository.
2. Ketemu koflik.
3. Backup code kode_saya.mine
4. Revert ke repository (sesuaikan working directory dengan repository)
5. Timpa kode_saya dengan kode_saya.mine.

Cara ini sangat fatal! Kenapa? Karena kita telah menghapus hasil jerih payah orang lain dengan menimpa pekerjaannya dengan pekerjaan kita. Sama sekali bukan cara yang baik untuk menyelesaikan konflik. Kejaian fatal juga sering terjadi jika sesorang bekerja di directory lain (bukan SVN working directory), lalu untuk commit design adalah dengan cara meng-overwrite file di working directory, lalu meng-commit-nya ke repository. Walapun tidak ada indikasi konflik oleh SVN (karena secara teknis tidak mengedit file yang sama) cara ini lebih fatal! Kita sebut saja konflik terselubung.

Konflik dalam kehidupan sehari-hari.
Ah, ternyata. Dari pengalaman kerja memakai SVN ini, saya mendapat pelajaran bagaimana menghadapi konflik dan menyelesaikannya. Bukan hanya dalam dunia kerja, tapi juga dalam kehidupan sosial. Saya sering katakan pada desainer-desainer muda yang baru berkenalan dengan SVN dan team working. Jangan hindari konflik, tapi selesaikan!

Yup, walau begitu, "konflik jangan dicari... tapi kalau ketemu jangan lari". Konflik juga jangan tidak boleh disembunyikan. Konflik jangan dihindari, tapi diselesaikan :)

No comments:

Post a Comment