Generator kode otomatis [ditutup]

13

Salah satu kolega saya suka menggunakan generator kode otomatis, yang membuat kode dalam jumlah besar yang tidak terdokumentasi dengan baik dan sangat sulit untuk dipelihara.

Apakah biaya menggunakan generator kode sepadan dengan kerumitan dalam pemeliharaan, untuk mengurangi waktu pembuatan?

Mumbles
sumber

Jawaban:

10

Mari kita ulangi lagi bahwa:

Apakah biaya generator kode otomatis yang baik sepadan?

Iya.

Apakah biaya generator kode otomatis buruk yang menciptakan lebih banyak pekerjaan untuk semua orang tetapi penulis layak?

Benar-benar tidak. Tidak ada alasan untuk kode yang buruk. Jika seseorang ingin menjadi pintar dan menggunakan pembuatan kode otomatis maka mereka harus meluangkan waktu untuk memastikan bahwa kode yang dihasilkan adalah kode yang baik. Kalau tidak, apa gunanya? Itu hanya mendorong uang turun naik dan ketika datang ke produksi kode, uang harus berhenti pada pengembang yang menulisnya.

wheaties
sumber
16
Saya tidak setuju dengan poin kedua Anda. Kode yang dihasilkan hanya perlu cukup baik sehingga berfungsi dan tidak menciptakan kinerja / keamanan atau masalah lainnya. Karena Anda seharusnya tidak pernah menjaga kode yang dihasilkan dengan tangan, tidak masalah jika tidak sesuai dengan standar pengkodean Anda yang biasa.
Hila
4
Tidak apa-apa bagimu untuk tidak setuju. Namun, jika Anda akan meluangkan waktu untuk membuat pembuat kode lalu mengapa tidak meluangkan waktu untuk membuat kode yang dihasilkan cantik? Setelah dihasilkan, saya tidak tahu siapa yang membuatnya, bagaimana pembuatannya, atau niat pembuatannya kecuali hanya bisa dibaca / dipelihara seperti halnya semua bagian lainnya. Kadang-kadang generator ada di sana hanya untuk membuat titik awal daripada produk jadi yang lengkap.
wheaties
1
Juga, jika generasi kode adalah bagian dari build Anda (yaitu ia akan dihasilkan kembali setiap build) maka tidak masuk akal untuk menghasilkan kode "indah". Tetapi jika Anda akan menghasilkan kode sekali dan hanya itu, maka itu cerita yang berbeda.
Dean Harding
5
Hila, Anda seharusnya tidak pernah mempertahankan kode yang dihasilkan dengan tangan, tetapi ketika saatnya tiba Anda perlu mengubah kode itu karena persyaratan baru / berubah, Anda perlu kode tersebut menjadi jelas dan mudah dipahami sehingga Anda dapat dengan mudah membuat perubahan yang diperlukan untuk generator. , dan kemudian menghasilkan kembali.
Carson63000
6
Kode yang dihasilkan tidak harus cukup untuk pemeliharaan, tetapi harus cukup jelas untuk debugging dan untuk validasi.
Huperniketes
23

Kode yang dihasilkan oleh generator tidak boleh dipelihara dengan tangan. Jika perlu diubah, maka generator dan / atau pengaturannya harus diubah dan dijalankan kembali. Mempertimbangkan itu, tidak masalah jika kode yang dihasilkan tidak dapat dipahami dan tidak berdokumen selama mekanisme pembangkitan itu sendiri sangat jelas. (Pastikan untuk mendokumentasikan fakta bahwa kode tersebut dihasilkan, dan di mana generator itu dan cara kerjanya.)

Analogi: sementara prosesor komputer saya selalu menjalankan kode mesin, saya tidak perlu tahu apa-apa tentang hal itu selama saya tahu cara membuat kode mesin itu menggunakan bahasa dan kompiler tingkat tinggi. Saya pernah mendengar bahwa GCC kadang-kadang menghasilkan kode mesin di bawah standar, tetapi siapa yang peduli, asalkan bekerja dengan sempurna. Lapisan abstraksi basis data menghasilkan SQL untuk beroperasi dengan mesin DB, tetapi siapa yang peduli seperti apa bentuk SQL itu, selama lapisan abstraksi itu jelas dan berfungsi?

Ketika digunakan dengan benar, pembuat kode pasti dapat menghemat tidak hanya pembuatan, tetapi juga biaya perawatan.

Joonas Pulakka
sumber
4
Masalahnya kemudian menjadi, hanya satu orang yang memiliki alat, tidak ada orang lain yang melakukannya, dan oleh karena itu harus secara manual memelihara kode.
Mumbles
Ini melewati uang. Sebagai pengembang perangkat lunak, bisnis kami adalah kode - tidak peduli bagaimana kami memproduksinya.
Steven Evers
12
@ David, jika hanya satu orang yang memiliki alat, Anda tidak boleh menggunakannya untuk proyek yang melibatkan lebih dari satu orang.
Matt Olenik
2
@ Mat, tepatnya. Generator adalah bagian dari proyek (sebanding dengan skrip yang dibuat) dan harus disimpan dalam kontrol versi atau repositori pusat serupa.
Joonas Pulakka
2
@SnOrfus: Saya pikir bisnis kami adalah menghasilkan produk yang dapat digunakan dan dibeli orang. Dari situlah gaji kami berasal. Kode hanyalah media.
Joonas Pulakka
6

Pembuat kode adalah jenis kompiler. Anda tidak khawatir tentang betapa cantiknya keluaran kompiler, Anda hanya bekerja dengan kode sumber. Menggunakannya dan kemudian memodifikasi hasilnya seringkali lebih sulit daripada hanya menulisnya dari awal dalam bentuk yang dapat dipahami oleh manusia, dan berarti Anda tidak dapat menggunakan pembuat kode lagi tanpa banyak pekerjaan, karena Anda harus menerapkan perubahan yang sama ke kode yang tidak dapat dipahami sama secara akurat.

Oleh karena itu, mereka dapat baik-baik saja jika mereka adalah bagian dari proses pembangunan, dan didokumentasikan seperti itu. Input ke generator kemudian kode sumber, dan apa pun yang dihasilkannya adalah hasil antara, bukan untuk dikacaukan.

Namun, jika seseorang menggunakan kode tersebut untuk menghasilkan kode yang tidak dapat dimengerti yang seharusnya digunakan sebagai sumber, maka orang tersebut akan menghasilkan kode yang buruk. Tidak masalah jika orang tersebut menghasilkan kode yang buruk secara mekanik atau dengan tangan, itu masih kode yang buruk, dan Anda masih memiliki masalah kualitas dengan kode tersebut.

Oleh karena itu, Anda perlu memperlakukan ini sebagai pengembang lain memotong sudut dan menulis kode yang buruk. Saya tidak tahu bagaimana Anda mengatasinya di toko Anda.

David Thornley
sumber
3

Dari komentar pada jawaban lain, sepertinya Anda bertanya tentang standar tim daripada pembuat kode sendiri.

Alat pembuatan kode harus dimasukkan dalam proyek dan harus (jika sesuai) menjadi bagian dari proses pembangunan. Contohnya adalah pada tim kami, kami menggunakan Subsonic 2.2 yang kami hasilkan kelas dari objek basis data yang sedang dibangun.

Exe yang melakukan ini diperiksa ke dalam SVN sebagai bagian dari proyek sehingga anggota baru tim bisa mendapatkan proyek baru dari svn dan segera membangunnya tanpa harus mencari tahu dari mana semua kelas database ini berasal (dalam contoh ini kita bahkan tidak menyertakan kode yang dihasilkan dalam svn).

Rob Stevenson-Leggett
sumber