Apakah ada saran untuk mengembangkan standar pengkodean C # / dokumen praktik terbaik? [Tutup]


159

Saya lulusan AI baru-baru ini (sekitar 2 tahun) bekerja untuk operasi sederhana. Itu telah jatuh kepada saya (terutama karena saya 'adopter' pertama di departemen) untuk membuat dokumen standar standar C # coding (baca berguna?).

Saya pikir saya harus menjelaskan bahwa saya mungkin adalah insinyur perangkat lunak paling junior, tapi saya menantikan tugas ini karena mudah-mudahan saya benar-benar dapat menghasilkan sesuatu yang setengah dapat digunakan. Saya telah melakukan pencarian Internet yang cukup luas dan membaca artikel tentang apa yang seharusnya / tidak seharusnya berisi dokumen standar pengkodean. Ini sepertinya tempat yang bagus untuk meminta saran.

Saya menyadari bahwa saya berpotensi membuka pintu bagi seluruh dunia ketidaksetujuan tentang 'cara terbaik untuk melakukan sesuatu'. Saya sama-sama memahami dan menghormati fakta yang tak terbantahkan bahwa setiap programmer memiliki metode yang disukai untuk menyelesaikan setiap tugas individu, sebagai hasilnya saya tidak ingin menulis apa pun yang begitu proskriptif untuk melumpuhkan bakat pribadi tetapi untuk mencoba dan mendapatkan metodologi umum dan setuju standar (misalnya konvensi penamaan) untuk membantu membuat kode individu lebih mudah dibaca.

Jadi begini .... ada saran? Ada sama sekali?

Jawaban:




26

Ironisnya, menetapkan standar aktual cenderung menjadi bagian yang mudah.

Saran pertama saya adalah untuk mendapatkan saran dari insinyur lain tentang apa yang menurut mereka harus dicakup, dan pedoman apa yang menurut mereka penting. Menegakkan segala bentuk pedoman memerlukan tingkat kepercayaan dari orang-orang. Jika tiba-tiba Anda menjatuhkan dokumen pada mereka yang menentukan cara menulis kode Anda akan menghadapi perlawanan, apakah Anda pria yang paling junior atau senior.

Setelah Anda memiliki satu set proposal, kemudian kirimkan ke tim untuk mendapatkan umpan balik dan ulasan. Sekali lagi, suruh semua orang untuk membelinya.

Mungkin sudah ada praktik pengkodean informal yang diadopsi (misalnya variabel anggota awalan, nama fungsi camelcase). Jika ini ada, dan sebagian besar kode sesuai dengannya, maka akan membayar untuk meresmikan penggunaannya. Mengadopsi standar yang bertentangan akan menyebabkan lebih banyak kesedihan daripada nilainya, bahkan jika itu sesuatu yang umumnya direkomendasikan.

Ini juga layak mempertimbangkan refactoring kode yang ada untuk memenuhi standar pengkodean baru. Ini mungkin tampak seperti buang-buang waktu, tetapi memiliki kode yang tidak memenuhi standar dapat menjadi kontra-produktif karena Anda akan memiliki banyak gaya yang berbeda. Ini juga membuat orang dalam dilema apakah kode dalam modul tertentu harus sesuai dengan standar baru atau mengikuti gaya kode yang ada.


14

Saya selalu menggunakan pdf Juval Lowy sebagai referensi ketika melakukan standar pengkodean / praktik terbaik secara internal. Ini mengikuti sangat dekat dengan FxCop / Analisis Sumber , yang merupakan alat lain yang tak ternilai untuk memastikan bahwa standar sedang diikuti. Di antara alat dan referensi ini, Anda harus dapat membuat standar yang bagus yang tidak akan diikuti oleh semua pengembang Anda dan dapat menegakkannya.


9

Poster-poster lain telah menunjukkan Anda pada baseline, yang akan saya tambahkan adalah membuat dokumen Anda pendek, manis, dan to the point, menggunakan Strunk and White dosis tinggi untuk membedakan "must have" dari "itu akan lebih baik seandainya ".

Masalah dengan pengkodean dokumen standar adalah bahwa tidak ada yang benar-benar membacanya seperti yang seharusnya, dan ketika mereka membacanya, mereka tidak mengikuti mereka. Kemungkinan dokumen seperti itu dibaca dan diikuti bervariasi berbanding terbalik dengan panjangnya.

Saya setuju FxCop adalah alat yang bagus tetapi terlalu banyak dari ini dapat menghilangkan semua kesenangan dari pemrograman, jadi berhati-hatilah.


9

Jangan pernah menulis standar pengkodean Anda sendiri menggunakan yang MS (atau yang Sun atau ... sesuai untuk bahasa Anda). Petunjuknya ada dalam kata standar, dunia akan menjadi tempat yang lebih mudah untuk dikodekan jika masing-masing organisasi tidak memutuskan untuk menulis sendiri. Siapa yang benar-benar berpikir mempelajari seperangkat 'standar' baru setiap kali Anda mengubah tim / proyek / peran adalah penggunaan waktu siapa pun dengan baik. Yang paling harus Anda lakukan adalah merangkum poin-poin penting, tetapi saya menyarankan Anda untuk tidak melakukannya karena apa yang penting berbeda dari orang ke orang. Dua hal lain yang ingin saya sampaikan tentang standar pengkodean

  1. Tutup cukup baik - Mengubah kode untuk mengikuti standar pengkodean ke huruf adalah buang-buang waktu selama kode itu cukup dekat.
  2. Jika Anda mengubah kode yang tidak Anda tulis, ikuti 'standar pengkodean lokal', yaitu membuat kode baru Anda terlihat seperti kode di sekitarnya.

Dua poin ini adalah kenyataan bagi keinginan saya bahwa semua orang akan menulis kode yang terlihat sama.


8

Saya menemukan dokumentasi berikut ini sangat membantu dan ringkas. Itu berasal dari situs idesign.net dan ditulis oleh Juval Lowy

C # Standar Pengkodean

NB: tautan di atas sekarang mati. Untuk mendapatkan file .zip, Anda perlu memberi mereka alamat email Anda (tetapi mereka tidak akan menggunakannya untuk pemasaran ... jujur) Coba di sini


5

Saya baru saja mulai di tempat di mana standar pengkodean mengamanatkan penggunaan m_ untuk variabel anggota, p_ untuk parameter dan awalan untuk jenis, seperti 'str' untuk string. Jadi, Anda mungkin memiliki sesuatu seperti ini di tubuh metode:

m_strName = p_strName;

Mengerikan. Sangat mengerikan.


1
IntelliSense di Visual Studio 2010 memungkinkan Anda mengetik "Nama" dan itu akan cocok dengan substring di p_strName- membuatnya 10% lebih menyakitkan ketika Anda dipaksa untuk bekerja dengan kekejian seperti itu. : o
Sam Harwell

5

Saya akan menambahkan Kode Lengkap 2 ke daftar (Saya tahu Jeff adalah penggemar di sini) ... Jika Anda adalah pengembang junior, buku ini berguna untuk mengatur pikiran Anda dengan cara yang menetapkan dasar untuk yang terbaik praktik penulisan kode dan pembuatan perangkat lunak ada.

Saya harus mengatakan bahwa saya sedikit terlambat dalam karir saya, tetapi itu mengatur banyak cara saya berpikir tentang pengkodean dan pengembangan kerangka kerja dalam kehidupan profesional saya.

Perlu dicoba;)


2
Saya akan menyarankan buku yang sama. A harus membaca.
Pascal Paradis

Saya sedang dalam proses membaca buku, baca> 67%. Itu mengubah cara saya membayangkan pemrograman. Harus baca.
UrsulRosu

4

Aturan Microsoft sendiri adalah titik awal yang sangat baik. Anda dapat menerapkannya dengan FxCop.


4

Saya akan tergoda untuk menerapkan Microsoft StyleCop sebagai standar. Itu dapat diberlakukan pada saat membangun. tetapi jika Anda memiliki kode lama maka cukup gunakan StyleCop pada kode baru.

http://code.msdn.microsoft.com/sourceanalysis

Akhirnya ia akan memiliki opsi refactor untuk membersihkan kode.

http://blogs.msdn.com/sourceanalysis/


2
Anda mungkin tidak setuju dengan semua yang diberlakukan oleh StyleCop, tetapi pertimbangkan bahwa Microsoft bergerak menuju standar tunggal, seperti yang ditegakkan oleh StyleCop - jadi ini adalah serangkaian standar yang dapat Anda harapkan dari pengembang lain. Konsistensi dengan sebagian besar industri dapat bernilai.
Bevan

4

Secara pribadi saya suka yang disatukan IDesign . Tapi bukan itu sebabnya saya memposting ...

Bagian yang sulit di perusahaan saya adalah memperhitungkan semua bahasa yang berbeda. Dan saya tahu perusahaan saya tidak sendirian dalam hal ini. Kami menggunakan C #, C, rakitan (kami membuat perangkat), SQL, XAML, dll. Meskipun akan ada beberapa kesamaan dalam standar, masing-masing biasanya ditangani secara berbeda.

Juga, saya percaya bahwa standar tingkat yang lebih tinggi memiliki dampak yang lebih besar pada kualitas produk akhir. Misalnya: bagaimana dan kapan menggunakan komentar, kapan pengecualian wajib (misalnya acara yang diprakarsai pengguna), apakah (atau kapan) menggunakan pengecualian vs nilai pengembalian, apa cara obyektif untuk menentukan apa yang harus menjadi kode pengontrol vs kode presentasi, dll. Jangan salah paham, standar level rendah juga diperlukan (format penting untuk keterbacaan!) Saya hanya memiliki bias terhadap struktur keseluruhan.

Bagian lain yang perlu diingat adalah dukungan dan penegakan. Standar pengkodean sangat bagus. Tetapi jika tidak ada yang setuju dengan mereka dan (mungkin lebih penting) tidak ada yang menegakkan mereka maka semuanya sia-sia.


4

Ketika saya menulis yang diterbitkan untuk Philips Medical Systems dan yang di http://csharpguidelines.codeplex.com saya mungkin sedikit bias, tetapi saya memiliki lebih dari 10 tahun dalam menulis, memelihara dan mempromosikan standar pengkodean. Saya sudah mencoba menulis satu CodePlex dengan perbedaan pendapat di pikiran dan menghabiskan sebagian besar pengantar tentang cara menghadapinya di organisasi khusus Anda. Baca dan berikan saya umpan balik .....


Saya BENAR-BENAR menyukai panduan ini dan berpikir ini mengikuti format yang fantastis (versi cepat dan versi lengkap seperti banyak orang yang saya lihat menggunakan). Anda mendapatkan suara saya terhadap semua orang lain, pekerjaan bagus. Saya sangat merekomendasikan menggunakan dokumen ini pada Codeplex sebagai awal karena ini adalah panduan yang sangat baik untuk membandingkan catatan atau mengikuti dengan cermat.
atconway

Saya melihat bahwa. Saya sungguh-sungguh, tetap bekerja dengan baik dan saya merekomendasikan panduan ini setidaknya sebagai titik awal untuk para pengembang .NET yang serius.
atconway

1
+1 untuk karya yang hebat, seandainya saya bisa +100. Ini singkat, sehingga orang akan membacanya - sehingga memenangkan standar Microsoft dan IDesign. Itu punya nama aturan yang bermakna, lembar contekan, file gaya untuk VS / R # ... mungkin kehilangan contoh yang lebih luas dalam lembar contekan :)
Victor Sergienko


1

Anda kemungkinan besar diatur untuk gagal. Selamat datang di industri.

Saya tidak setuju - selama dia membuat dokumen, hal terburuk yang dapat terjadi adalah bahwa dokumen itu dilupakan oleh semua orang.

Jika orang lain memiliki masalah dengan konten, maka Anda dapat meminta mereka untuk memperbaruinya untuk menunjukkan apa yang mereka inginkan. Dengan begitu, Anda tidak keberatan, dan yang lain memiliki tanggung jawab untuk membenarkan perubahan mereka.


Saya tidak setuju. Yang terburuk yang dapat terjadi adalah bahwa pedoman tersebut tidak konsisten; dan bug lewat. Jika dia kebetulan menulis perangkat lunak kontrol untuk LHC, maka kita akan melakukannya. / Sarkasme
TraumaPony


1

Saya penggemar berat buku Francesco Balena " Pedoman Praktis dan Praktik Terbaik untuk Pengembang VB dan C # ".

Ini sangat rinci dan mencakup semua topik penting, Tidak hanya memberi Anda aturan, tetapi juga menjelaskan alasan di balik aturan tersebut, dan bahkan memberikan anti-aturan di mana mungkin ada dua praktik terbaik yang bertentangan. Satu-satunya downside adalah bahwa itu ditulis untuk pengembang .NET 1.1.





1

Saya telah menggunakan Juval sebelumnya dan itu berhasil jika tidak berlebihan, tapi saya malas dan sekarang hanya sesuai dengan kehendak Resharper .



0

Saya pikir saya menggemakan komentar lain di sini bahwa garis pedoman MS yang sudah ditautkan adalah titik awal yang sangat baik. Saya memodelkan kode saya sebagian besar pada mereka.

Yang menarik karena manajer saya telah mengatakan kepada saya di masa lalu bahwa dia tidak terlalu tertarik pada mereka: D

Anda memiliki tugas yang menyenangkan di depan Anda teman saya. Semoga berhasil, dan silakan tanyakan apakah Anda membutuhkan lebih banyak :)


0

Standar dari Philips Medical Systems ditulis dengan baik, dan sebagian besar mengikuti pedoman Microsoft: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

Standar saya didasarkan pada ini dengan beberapa penyesuaian, dan beberapa pembaruan untuk .NET 2.0 (standar Philips ditulis untuk .NET 1.x jadi agak ketinggalan jaman).



0

Dalam kode yang saya tulis, saya biasanya mengikuti .NET Framework Design Guidelines untuk API dan Mono Coding Guidelines yang terbuka untuk umum untuk casing dan indentasi anggota pribadi . Mono adalah implementasi open source dari .NET, dan saya pikir orang-orang tahu bisnis mereka.

Saya benci bagaimana kode Microsoft membuang-buang ruang:

try
{
    if (condition)
    {
        Something(new delegate
        {
            SomeCall(a, b);
        });
    }
    else
    {
        SomethingElse();
        Foobar(foo, bar);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Okay, you got me");
}

Apa yang mungkin Anda temukan aneh dalam pedoman Mono, adalah bahwa mereka menggunakan tab 8-ruang. Namun, setelah beberapa latihan, saya menemukan bahwa itu sebenarnya membantu saya menulis kode yang kurang kusut dengan memberlakukan semacam batas indentasi.

Saya juga suka bagaimana mereka memberi ruang sebelum membuka tanda kurung.

try {
        if (condition) {
                Something (new delegate {
                        SomeCall (a, b);
                });
        } else {
                SomethingElse ();
                Foobar (foo, bar);
        }
} catch (Exception ex) {
        Console.WriteLine ("Okay, you got me");
}

Tapi tolong, jangan memaksakan hal seperti itu jika rekan kerja Anda tidak menyukainya (kecuali jika Anda bersedia berkontribusi untuk Mono ;-)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.