Programmer Bill of Responsibility [ditutup]

40

Jadi, kita semua pernah mendengar tentang Programmer Bill of Rights dan XP memiliki konsep serupa.

Ini adalah keluhan umum hari ini bahwa kami mendengar banyak tentang hak-hak orang tetapi tidak begitu banyak tentang tanggung jawab mereka, jadi apa yang seharusnya ada pada tagihan tanggung jawab programmer. Itu adalah hal-hal yang harus mereka lakukan, yang mereka anggap tidak menyenangkan, tetapi yang memisahkan pemrogram bertindak secara profesional dan bertanggung jawab, dari mereka yang tidak.

Saya terutama tertarik pada yang tidak enak dan yang cenderung tidak terjadi. Itu adalah hal-hal yang cenderung diabaikan oleh programmer dan dihindari, daripada yang dilakukan oleh 90% programmer (seperti selalu refactor dan menggunakan kontrol sumber).

Jadi, apa yang seharusnya ada pada Programer Bill of Responsibility?

Jon Hopkins
sumber
4
lebih lanjut saya pikir itu sesuai dengan pedoman 1,2,4, dan 6.
Stephen Furlani
2
Saya pikir ini pertanyaan penting untuk ditanyakan.
HLGEM
1
Tindak lanjut yang penting mungkin 'bagaimana Anda melatih diri Anda untuk menjadi Programmer yang Bertanggung Jawab?'
Stephen Furlani
2
Pertanyaan ini tampaknya hanya menghasilkan daftar item. Meskipun jawabannya agak mengesankan (dan saya memuji para penjawab yang menaruh waktu dan usaha ke dalam pos mereka), mereka berpusat pada pendapat dan kata-kata dari pertanyaan itu menurut saya sebagai polling.
Thomas Owens
5
@ThomasOwens sangat tidak setuju bahwa "Pertanyaan ini tidak cocok untuk format Tanya Jawab kami." Ini telah menghasilkan jawaban mengenai pengujian pengembang, metodologi pengembangan, lepas dan masalah bisnis, jaminan kualitas dan rekayasa perangkat lunak, benar-benar mulai menjadi tidak pasti mengapa kita bahkan memiliki situs ini jika pertanyaan seperti di atas terus tertutup.
Joshua Drake

Jawaban:

41
  • Seorang programmer memiliki tanggung jawab untuk mendorong kembali persyaratan yang buruk alih-alih menerapkannya secara membabi buta. Ini termasuk memberi tahu klien bahwa yang mereka inginkan lebih mahal daripada opsi lain atau memiliki serangkaian risiko tertentu. Ini juga termasuk mengkomunikasikan berita buruk secara profesional - tidak berteriak, menyebut orang bodoh, menyiratkan mereka bodoh atau perilaku kekanak-kanakan lainnya. Jika dia mendorong kembali, dia harus memiliki serangkaian alasan (lebih dari, "Saya tidak suka SQL Server dan tidak akan menggunakannya") dan rencana alternatif untuk disajikan.

  • Namun, programmer juga memiliki tanggung jawab untuk menerima keputusan dan menggunakan alat atau desain yang mungkin tidak mereka sukai jika pushback mereka tidak diterima. Jika laporan diminta dalam SSRS, mengirimkannya dalam Crystal Reports (yang mungkin tidak dimiliki klien) tidak dapat diterima. Jika solusi .net diperlukan, mengirimkannya dalam Haskell tidak dapat diterima. Jika tidak ada orang lain di tim yang menggunakan alat atau bahasa yang ingin Anda gunakan, itu tidak profesional untuk menggunakannya jika manajemen tidak setuju bahwa itu adalah alat terbaik untuk pekerjaan tertentu.

  • Seorang programmer memiliki tanggung jawab untuk menguji pekerjaannya. (Ini seharusnya bukan satu-satunya tes, tetapi tidak ada programmer profesional yang harus mengirimkan kode yang belum dia uji.) Ini termasuk menguji bahkan cabang-cabang kode yang tidak Anda harapkan akan sering muncul. Jika Anda memiliki satu set IF bersarang, uji semua rute yang mungkin.

  • Seorang programmer memiliki tanggung jawab untuk menangani kesalahan dan pengecualian dengan anggun dan untuk menulis pesan kesalahan yang akan dilihat pengguna yang profesional dan netral, tidak bercanda atau menghina.

  • Seorang programmer memiliki tanggung jawab untuk melindungi data pribadi, melindungi kode hak milik yang ia tulis untuk perusahaan dan untuk melindungi pengguna dari bencana (bahkan bencana yang diakibatkan oleh diri sendiri) dari penggunaan aplikasi oleh mereka.

  • Seorang programmer memiliki tanggung jawab untuk memastikan kodenya dapat dipertahankan dan berada dalam kendali sumber.

  • Seorang programmer memiliki tanggung jawab untuk berkoordinasi dengan orang lain untuk memastikan perubahannya tidak mempengaruhi apa yang mereka lakukan.

  • Seorang programmer memiliki tanggung jawab untuk merekomendasikan pilihan terbaik untuk klien alat atau bahasa pada fase desain bukan alat / bahasa yang ingin ia mainkan dan pelajari.

  • Seorang programmer memiliki tanggung jawab untuk bekerja dengan semua personel yang sesuai untuk suatu proyek termasuk yang tidak dia sukai. Bukan tugas Anda untuk menyukai orang, itu tugas Anda untuk bekerja bersama mereka dan bersikap sopan.

  • Seorang programmer memiliki tanggung jawab untuk menghasilkan produk yang melakukan apa yang ditentukan dalam kerangka waktu yang masuk akal. Jika kerangka waktu tidak akan terpenuhi, ia memiliki tanggung jawab untuk memberi tahu manajemen tentang hal itu segera setelah diketahui.

  • Seorang programmer memiliki tanggung jawab untuk memberi tahu manajemen proyek tentang hambatan untuk menyelesaikan pekerjaan. Mereka tidak dapat memperbaiki apa yang tidak mereka ketahui.

  • Seorang programmer memiliki tanggung jawab untuk melakukan seluruh tugas bukan hanya bagian yang menyenangkan dan menarik. Setiap pekerjaan memiliki beberapa bagian yang membosankan, mereka masih perlu dilakukan. Ini termasuk hal-hal seperti timesheets dan menambahkan item diskusi ke perangkat lunak manajemen proyek. Ini termasuk hal-hal seperti dokumentasi, tinjauan kode, dll.

  • Seorang programmer memiliki tanggung jawab untuk mempelajari domain bisnis yang didukungnya bukan hanya konsep pemrograman.

  • Seorang programmer memiliki tanggung jawab untuk menjaga keterampilannya tetap mutakhir.

  • Ketika seorang programmer kacau, dia memiliki tanggung jawab untuk melakukan semua yang dia bisa untuk memperbaiki masalah secepat mungkin secara manusiawi. Ini mungkin termasuk membawa berita buruk kepada manajemen daripada berusaha menyembunyikan bahwa Anda baru saja menghapus tabel penting dalam database produksi.

  • Seorang programmer memiliki tanggung jawab yang sama dari pekerja lain - untuk muncul tepat waktu, untuk bekerja di jam yang dikontrak, untuk meminta waktu liburan di muka, untuk menjawab pesan telepon dan email (heck untuk membaca email mereka), untuk mengisi formulir yang diperlukan untuk SDM, dll.

HLGEM
sumber
7
Saya suka pesan kesalahan lelucon. Situasinya sudah cukup buruk, tidak perlu membuatnya lebih serius dari itu - setidaknya mencoba membuat saya tertawa sambil menampar saya dengan kesalahan!
dr Hannibal Lecter
2
Saya mempertanyakan tanggung jawab pengembang untuk menguji kodenya secara pribadi dalam semua situasi ... Saya akan mengulangi hal itu untuk memastikan bahwa kodenya diuji ... Jika organisasi memiliki penguji profesional (baik otomatis dan manusia) dan proses yang solid di tempat untuk memastikan kode diuji, saya tidak melihat mengapa pengembang harus melakukannya secara pribadi. Jika saya mengembangkan fitur baru atau memperbaiki bug, pasti saya akan mengujinya sendiri, kalau tidak saya tidak akan tahu apakah saya sudah selesai dengan pekerjaan saya. Namun, jika saya melakukan refactoring besar, tidak masuk akal bagi saya untuk menguji ulang seluruh produk secara menyeluruh.
JoelFan
Saya tidak mengatakan uji regresi, tetapi Anda harus menguji unit perubahan Anda untuk memastikan mereka melakukan apa yang Anda inginkan.
HLGEM
2
Bagaimana dengan tidak ada tanda seru dalam pesan kesalahan ... yaitu "Tanggal tidak valid!"
JoelFan
1
Ini harus netral gender. Membuat mereka imperatif akan membuat ini lebih mudah, misalnya alih-alih "Seorang programmer memiliki tanggung jawab untuk menguji pekerjaannya," seharusnya "Uji pekerjaan Anda."
Sigil
42

Setiap programmer harus membuat kode mereka dapat dibaca oleh orang lain.

dan_waterworth
sumber
@ Kevin D: Itu adalah tanggung jawab. Anda memiliki tanggung jawab untuk menghasilkan kode yang dapat dibaca manusia.
doppelgreener
1
@Axidos, Itu karena saya mengubah jawaban saya begitu saya menyadari apa yang telah saya lakukan.
dan_waterworth
Saya akan menghapus komentar orignal saya karena tidak lagi relevan.
Kevin D
1
"Dapat dibaca" oleh siapa? "Rekan" saya (yaitu, seseorang dengan pendidikan dan pengalaman serupa dengan saya)? Seseorang yang benar - benar berpendidikan seni dan sains? Atau Monyet Kode Terbang yang TIDAK memiliki bisnis dengan sesuatu yang lebih maju dari Dartmouth BASIC?
John R. Strohm
7
@ John, yang lain dalam konteks ini menyiratkan programmer lain. Dalam kalimat: "Jerapah itu lebih besar dari yang lain.", Kita tidak menganggap orang lain berarti monyet terbang. 'Lainnya' berarti "lebih banyak dari jenis yang sama yang belum disebutkan".
dan_waterworth
22

Programmer bertanggung jawab atas privasi dan keamanan semua data yang disediakan pengguna. Terutama kata sandi, nomor kartu kredit, alamat email, dan lokasi fisik.

Malfist
sumber
Ini benar-benar akan berada di bawah domain arsitek sistem. Dalam banyak, banyak skenario perusahaan, pemrogram tidak memiliki suara atau kontrol atas penyimpanan data. Bagaimana saya bisa bertanggung jawab untuk alamat email dalam database, ketika semua yang saya lakukan adalah mengakses, bukan membuat, database itu?
Neal Tibrewala
2
Saya kira orang-orang Facebook tidak perlu menerapkan sejauh sebagian besar tanggung jawab di atas pergi. :)
MetalMikester
4
-1 itu terlalu banyak tanggung jawab.
Peter Turner
6
Mungkin untuk sistem skala besar mungkin terlalu banyak untuk diputuskan oleh satu programmer. Tetapi untuk sebagian besar situs tempat satu atau beberapa programmer bekerja, sangat penting untuk menyimpan data dengan benar. Tidak diperlukan enkripsi saat hashing, tidak ada algoritme khusus atau keamanan karena ketidakjelasan. Keamanan nyata dan teruji.
Malfist
@Neal: Arsitek sistem hanyalah programmer lain. Tentu, untuk proyek-proyek besar dia mungkin tidak akan bisa melakukan pemrograman apa pun, tetapi itu tidak berarti dia bukan seorang programmer. Dan, itu hanya berlaku untuk proyek-proyek besar; pada proyek 2 atau 3 orang, seorang programmer biasanya bertanggung jawab atas beberapa bagian dari basis data atau keseluruhannya; itu adalah tanggung jawabnya untuk memastikan bahwa data disimpan dengan aman.
konfigurator
20

Jangan membuat pengguna kehilangan pekerjaan mereka.

Ini lebih sulit daripada kedengarannya ... bekerja lebih dari sekadar "data dalam file" ... itu setiap saat pengguna menghabiskan waktu dengan perangkat lunak Anda.

Misalnya, jika pengguna mengisi formulir 30-bidang Anda dengan 29 item yang valid dan 1 yang tidak valid, jangan hapus semua data validnya untuk mengeluh tentang 1 yang tidak valid (heck, bahkan tidak menghapus yang tidak valid .. mungkin panjang dan hanya perlu koreksi kecil, atau pengguna tidak akan ingat apa itu sebelumnya jika Anda menghapusnya)

Contoh yang tidak jelas tetapi penting adalah apa yang Windows dan hampir semua perangkat lunak "manajer file" lainnya salah .... jika saya menghabiskan setengah jam dengan hati-hati Ctrl-Click'ing untuk memilih satu set file dan saya tidak sengaja melakukan Klik alih-alih Ctrl-Click, seharusnya tidak menghapus semua file yang saya pilih sebelumnya, membuat saya memulai kembali.

Satu lagi yang mereka salah ... jika saya tidak sengaja menekan Ctrl-A (bukan Ctrl-S di sebelah), seharusnya tidak kehilangan tempat saya di file dan meletakkan kursor di awal .... Saya sebut menemukan tempat yang tepat di file "work" yang telah "hilang" oleh program.

Yang lain: Dialog "komit" TortoiseSVN memiliki daftar panjang file. Sebelum menekan "Commit", Anda dapat melihat daftar file, mengklik dua kali masing-masing untuk melihat perubahannya dalam dialog ke-2. Untuk melakukan ini dengan cepat saya kadang-kadang menggunakan keyboard saja, menekan <Esc>untuk menutup dialog ke-2 dan kembali ke tanggal 1. Jika saya secara tidak sengaja menekan <Esc> dua kali, itu juga menutup dialog 1, yang mengakibatkan saya lupa file mana yang saya pilih.

JoelFan
sumber
5
Usahakan untuk tidak membuat pintasan keyboard yang melakukan hal-hal yang ditentukan oleh tombol tepat di sebelah satu sama lain (CTRL-C dan CTRL-V misalnya, tidak dapat memberi tahu Anda berapa kali Jika disalin ketika ketika saya bermaksud menempel dan sebaliknya)
HLGEM
5
@HLGEM, Paradoksnya, siapa pun yang merancang ini mungkin mengira ia melakukan sesuatu untuk kita dengan menempatkan mereka di samping satu sama lain
JoelFan
4
Dan dia tidak? Maksud saya, Anda tidak memiliki kekuatan penuh Emacs atau apa pun, tetapi Anda dapat menyalin dan menempel tanpa banyak menggerakkan tangan Anda.
compman
1
Gunakan Total Commander. Klik kanan untuk memilih, dan klik kanan untuk membatalkan pilihan. Kecuali jika Anda menavigasi di tempat lain atau kehilangan fokus untuk waktu yang lama saat folder saat ini sedang ditonton berubah, Anda tidak akan kehilangan pilihan Anda.
konfigurator
1
Untuk contoh terakhir (Ctrl-A kehilangan tempat saya di file), saya baru saja menemukan solusi parsial yang berfungsi di banyak program ... Ctrl-Z, Ctrl-Y .... yang akan membatalkan pengeditan terbaru saya ke file isi file, lalu "ulang" itu, dengan hasil bahwa isinya sama seperti sebelumnya, dan saya berada di tempat edit. Ini belum tentu sama dengan tempat kursor saya tepat sebelum Ctrl-A saya keliru, tetapi seringkali cukup dekat ... ini tentu saja tidak memaafkan perilaku buruk program pada Ctrl-A ... itu hanya solusi parsial dan butuh waktu beberapa saat untuk
kuhadapi
15

Seorang programmer memiliki tanggung jawab untuk menghormati sistem yang akan dijalankan oleh programnya. Setelah pengembangan dan pengujian selesai, program akan digunakan untuk digunakan untuk tujuan yang dimaksudkan, dan itu biasanya melibatkan orang lain yang menjalankannya di komputer mereka. Pemrogram perlu mengingat hal ini: programnya berjalan di atas properti orang lain , bukan milik mereka sendiri, dan perlu berperilaku sebagai tamu di rumah mereka alih-alih menerobos masuk seolah-olah ia memiliki tempat itu.

Misalnya, programnya tidak boleh:

Mason Wheeler
sumber
1
Saya sangat suka keduanya sebagai pengguna dan programmer. Ikon yang memantul di dok saya adalah penyebab utama kemarahan saya terhadap orang-orang yang tidak pernah saya temui.
Agos
7
Saya suka semuanya kecuali "perbarui sendiri tanpa persetujuan pengguna". Saya menemukan cara pembaruan Chrome sendiri menyegarkan - Saya suka hanya menemukan fitur baru. Namun, cara program lain melakukannya sangat keji. Saya melihat Anda, Jawa, dan pada Anda, Acrobat Anything. Jangan tidak meminta saya jika saya ingin memperbarui Anda setiap hari. Saya bilang tidak sekali, ambil petunjuk!
konfigurator
2
Jika suatu program akan memperbarui sendiri secara otomatis, setidaknya itu harus meminta persetujuan pengguna untuk pertama kalinya.
gablin
Pelanggaran lain oleh TortoiseSVN ... melakukan apa saja dengan itu menyebabkan sistem terhenti
JoelFan
@SpashHit: Hmm? Saya menggunakan TortoiseSVN setiap hari dan saya tidak pernah memperhatikan bahwa ...
Mason Wheeler
8

Dari Manifesto untuk Pengrajin Perangkat Lunak :

Sebagai Pengrajin Perangkat Lunak yang bercita-cita tinggi, kami meningkatkan standar pengembangan perangkat lunak profesional dengan mempraktikkannya dan membantu orang lain mempelajari kerajinan itu. Melalui pekerjaan ini, kami menghargai:

  • Tidak hanya perangkat lunak yang berfungsi, tetapi juga perangkat lunak yang dibuat dengan baik

  • Tidak hanya merespons perubahan, tetapi juga terus menambah nilai

  • Tidak hanya individu dan interaksi, tetapi juga komunitas profesional

  • Tidak hanya kolaborasi pelanggan, tetapi juga kemitraan yang produktif

Artinya, dalam mengejar barang-barang di sebelah kiri kami telah menemukan barang-barang di sebelah kanan harus sangat diperlukan.

sepon
sumber
8

Lihatlah di cermin dan mungkin mengenali kualitas terburuk dari seorang programmer dalam dirinya sendiri. Kemudian bekerja untuk menghilangkannya setiap hari.

  1. Tidak belajar sesuatu yang baru
  2. Tidak berusaha memperluas keterampilan Anda
  3. Tidak terbuka untuk yang baru, melekat pada kebiasaan lama
  4. Tidak peduli dengan kualitas pekerjaan Anda
  5. Tidak berusaha meningkatkan kualitas pekerjaan Anda
  6. Menjadi pekerja 9-ke-5 tanpa hasrat
  7. Tidak memiliki pendapat sendiri tentang hal-hal itu
  8. Menerima pendapat orang lain tanpa bertanya
  9. Percaya Anda sudah mempelajari semuanya
  10. Tidak mentolerir kritik
  11. Tidak mendengarkan input eksternal
  12. Menjadi individu yang ego-sentris, tahu segalanya
  13. Memiliki kepribadian negatif dan mengkritik orang lain
user8685
sumber
+1, tetapi mengutarakannya dengan cara ini membuatnya cukup negatif.
dan_waterworth
1
Saya menemukan # 13 sangat ironis, karena pada dasarnya itulah yang Anda lakukan di sini, meskipun secara umum.
Dustin Rasener
6
  • Tanggung jawab Programmer adalah menciptakan perangkat lunak yang memenuhi kebutuhan persyaratan, analisis, desain, dan spesifikasi sebagaimana diatur dalam kontrak apa pun antara programmer dan klien.
  • Tanggung jawab Programmer adalah menciptakan perangkat lunak yang ekonomis, andal, dan bekerja secara efisien pada mesin nyata.
  • Tanggung jawab Programmer adalah bekerja seefisien, etis, dan dengan integritas sebanyak yang mereka bisa dan melakukan sendiri dengan profesionalisme sepenuhnya.

Beberapa dari itu berlaku untuk Tanggung Jawab " Perusahaan Pemrograman ".

Stephen Furlani
sumber
4
  • Programmer harus tahu dan menggunakan perpustakaan inti dan platform yang digunakan.

Khususnya ketika programmer berasal dari platform / bahasa lain. Sungguh mengerikan menemukan programmer berjuang untuk sesuatu perpustakaan inti menyediakan atau menyalahgunakan keuntungan platform karena ketidaktahuan.

  • Programmer harus membuat kode dokumentasi diri

Sangat penting untuk memiliki kode yang didokumentasikan untuk digunakan orang lain, tetapi ketika datang ke pemeliharaan, kode mendokumentasikan diri secara harfiah dapat menghemat berjam-jam frustrasi.

Sebagai contoh, bandingkan:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

untuk

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}
OscarRyz
sumber
4

Pemrograman adalah profesi, bukan keterampilan. Ini berarti bahwa seorang programmer memiliki tanggung jawab untuk tetap terkini di bidangnya pada alat, teknik, dan teknologi terbaru.

Ini mungkin berarti mendorong kembali ke manajer untuk memberikan waktu agar pembelajaran dan pelatihan terus menerus, atau melakukannya sendiri.

Neal Tibrewala
sumber
2

1) Jelaskan dengan jelas bahwa solusi untuk masalah apa pun akan memiliki trade off antara kinerja, biaya, waktu, dan kualitas.

2) Lengkapi dokumentasi yang relevan, baik itu merilis catatan atau rencana pengujian. (dokumentasi akan bervariasi sesuai dengan jenis dan ukuran perusahaan)

3) Minta alat yang benar untuk pekerjaan mereka (begitu banyak yang hanya mengeluh tentang hal itu tetapi tidak pernah mendekati bos mereka dengan alasan yang masuk akal untuk mendapatkan apa yang mereka butuhkan)

... Yang lain tidak ragu untuk mengikuti.

Kevin D
sumber
2

Pertanyaan apa pun - Seorang programmer harus memiliki tanggung jawab untuk menanyakan apa pun yang mungkin perlu dilakukan atau ditangani oleh suatu sistem. Ini dapat mencakup menanyakan apa yang pengguna anggap sebagai pertanyaan konyol karena ada berbagai situs yang ditujukan untuk menunjukkan apa yang dapat dilakukan pengguna. Harian WTF dan SharkTank menjadi beberapa contoh meskipun saya yakin ada yang lain.

JB King
sumber
1

Seorang programmer bertanggung jawab untuk mengubah cerita pengguna dalam jaminan produk menjadi peningkatan perangkat lunak yang dapat digunakan dan dikirim

Itu sebabnya manajer harus memastikan bahwa mereka memiliki segalanya untuk tujuan mereka.

user2567
sumber
1

Ini proposal saya.

  1. Seorang programmer harus mensyaratkan kondisi kerja yang terpapar dalam Bill of Right Programmer, agar tidak menurunkan standar untuk posisi tersebut.

(Untuk "programmer" maksud saya "programmer", bukan "hacker akhir pekan", jadi semua hal standar yang harus dilakukan oleh seorang programer tersirat.)

cbrandolino
sumber
-1. Saya tidak berpikir tanggung jawab bisa menjadi salah satu yang "memerlukan [s]" hak.
Craige
1

5 aturan guild programmer

1.) periksa kodenya setiap minggu dan pada hari libur.

2.) menyediakan untuk kebutuhan komunitas pemrograman.

3.) membaca setidaknya satu buku pemrograman per tahun.

4.) pergi ke setidaknya satu konferensi pemrograman per tahun.

5.) mengakui kesalahan Anda.

Peter Turner
sumber
"Periksa kodenya setiap minggu dan pada hari libur"? Maksudmu setiap jam, bukan?
konfigurator
@configurator Maksud saya ini sebagai minimal untuk menyebut diri Anda seorang programmer. Tapi lebih banyak checkin yang lebih meriah
Peter Turner
1

Saya akan menambahkan "selalu mendokumentasikan asumsi yang dibuat" ke daftar. :-)

John Parker
sumber
Atau ... tidak pernah membuat asumsi?
Stephen Furlani
2
@Stephen Furlani - Sayangnya itu hampir tidak mungkin pada proyek dalam ukuran berapa pun.
John Parker
0

Seorang programmer tidak boleh melakukan atau mengimplementasikan sesuatu yang tidak etis atau ilegal, seperti menulis virus atau meretas sistem orang lain (kecuali jika ia menemukan celah keamanan dan kemudian memberi tahu korban tentang hal itu dan apa yang dapat ia lakukan untuk menghindari hal ini agar tidak menjadi dieksploitasi oleh peretas jahat).

Gablin
sumber