Saya ingin mendengar keputusan desain seperti apa yang Anda ambil dan bagaimana hasilnya menjadi bumerang. Karena keputusan desain yang buruk, saya akhirnya harus mendukung keputusan buruk itu selamanya (saya juga punya bagian di dalamnya). Ini membuat saya sadar bahwa satu kesalahan desain tunggal dapat menghantui Anda selamanya. Saya ingin belajar dari orang yang lebih berpengalaman kesalahan apa yang telah mereka alami dan apa yang mereka pelajari dari mereka.
Saya yakin ini akan banyak membantu programmer lain dengan membantu mereka untuk tidak mengulangi keputusan itu.
Terima kasih telah berbagi pengalaman Anda.
Jawaban:
Mengabaikan YAGNI , lagi dan lagi ...
sumber
"Aku akan melakukannya nanti"
"Nanti" tidak pernah datang.
sumber
C ++, beberapa warisan virtual berbentuk berlian . Anda mendapatkan idenya.
sumber
Konfigurasi dalam aplikasi bagus. Terlalu banyak konfigurasi adalah mimpi buruk untuk digunakan dan dipelihara.
sumber
Dari salah satu kesalahan saya, saya telah belajar bahwa normalisasi DB tidak boleh diikuti secara membabi buta. Anda bisa, dan dalam beberapa situasi Anda HARUS meratakan meja Anda.
Saya akhirnya mengelola banyak tabel (melalui model) dan kinerja tidak sebagus dengan sedikit meratakan tabel.
sumber
Menggunakan char tunggal dalam database untuk status, dll. Tidak ada gunanya sama sekali, overhead penggunaan char yang lebih lama () atau nvarchar2 () sangat kecil dibandingkan dengan jaringan dan penguraian yang ditimbulkan oleh panggilan SQL apa pun, namun karakternya selalu berakhir up agak dikaburkan, atau kehabisan (bukan karena status, tetapi hal-hal lain). Jauh lebih baik untuk hanya memasukkan versi yang dapat dibaca manusia, dan juga memiliki dalam model Java Anda (dalam kasus saya) enum dengan nilai yang cocok.
Saya kira ini adalah bentuk optimasi yang tidak perlu dan buta prematur. Seolah menggunakan satu arang akan menyelamatkan dunia hari ini. Terlepas dari Y / N booleans di database yang tidak mendukung booleans / bit.
sumber
Tidak mengembangkan Layer Akses Data yang tepat , dan memiliki sql di mana-mana dalam kode saya, hanya untuk mendapatkan sesuatu yang "cepat" dan berjalan. Kemudian, ketika proyek mulai berkembang, dan persyaratan berubah, itu menjadi mimpi buruk. Saya tidak tahu apa itu DAL saat itu.
... senang saya melewati itu, meskipun saya masih melihat programmer dengan 20 tahun pengalaman "" melakukan ini.
sumber
Berpikir saya bisa menjadi Arsitek, Pengembang dan PM semua di proyek yang sama.
2 bulan tidur 3 jam malam mengajari saya Anda tidak bisa melakukannya.
sumber
Memilih Microsoft Foundation Classes (MFC) untuk menulis IDE Java.
sumber
Itu bukan keputusan saya (saya bergabung dengan perusahaan agak kemudian) tetapi di suatu tempat saya bekerja agak terlalu jauh, termasuk menerjemahkan semua pesan log mereka.
Hasil:
Ups.
sumber
Menemukan Kembali Roda
sumber
Melakukan desain terlalu banyak . Membuat banyak diagram UML, terutama diagram Sequence untuk setiap operasi tunggal, yang sebagian besar pada akhirnya tidak berguna. Pada akhirnya ternyata sejumlah besar waktu dapat dihemat dengan melewatkan desain / diagram yang tidak perlu dan memulai pengkodean secara langsung.
sumber
Pelanggan yang percaya tahu apa yang mereka inginkan dan kemudian melakukan terlalu banyak sebelum memeriksanya.
sumber
Keputusan desain terburuk saya? Kembali pada tahun 1980-an saya sedang mengerjakan sebuah proyek di mana kami mendapat ide cemerlang untuk membuat semacam templat untuk layar entri data kami yang akan ditafsirkan pada saat dijalankan. Bukan keputusan yang buruk: itu membuat layar input mudah dirancang. Pada dasarnya hanya membuat file yang menyerupai layar entri data, dengan beberapa kode khusus untuk mengidentifikasi apa yang merupakan label vs apa yang merupakan bidang input, dan untuk mengidentifikasi apakah bidang input alfa atau numerik. Kemudian saya memutuskan untuk menambahkan beberapa kode khusus ke file-file ini untuk mengidentifikasi validasi apa yang harus dilakukan. Kemudian saya menambahkan lebih banyak kode untuk memungkinkan pembangunan bersyarat layar, bidang X hanya termasuk ketika beberapa kondisi benar, dll. Kemudian saya menambahkan lebih banyak kode untuk melakukan beberapa pemrosesan input yang sederhana. Dll Akhirnya kami telah mengubah templat layar kami menjadi bahasa pemrograman baru, lengkap dengan ekspresi, struktur kontrol, dan pustaka i / o. Dan untuk apa? Kami melakukan banyak pekerjaan untuk menemukan kembali FORTRAN. Kami memiliki rak yang penuh dengan kompiler untuk bahasa yang dirancang lebih baik dan diuji lebih baik. Jika kami mencurahkan banyak upaya untuk membangun produk di mana kami benar-benar memiliki keahlian, perusahaan itu mungkin masih dalam bisnis saat ini.
sumber
Penerapan YAGNI yang terlalu bersemangat (yang disebut Desain oleh Pencacahan dalam Jebakan Pengembangan Berorientasi Objek ) di lingkungan di mana setiap orang yang berakal sehat dapat mengatakan bahwa persyaratannya pasti akan berubah. Dan berubah berulang kali.
Jika Anda (sulit) mengkodekan semuanya persis dengan persyaratan saat ini — sembari mengalahkan siapa pun yang mengatakan "tidak bisakah ini lebih generik?" dengan palu YAGNI Anda — dan kemudian persyaratannya berubah secara drastis (tetapi dengan cara yang bisa diantisipasi secara wajar), maka itu bisa menjadi perbedaan antara mengambil 2 minggu untuk beradaptasi, vs mengambil 20 menit.
UPDATE: Untuk memperjelas, ini adalah contoh fiktif yang tidak terlalu jauh dari apa yang terjadi. Stack Overflow dirancang untuk mendukung lencana, tetapi anggaplah mereka hanya bisa memikirkan empat lencana pada awalnya. Hanya empat, jumlah yang sangat kecil, sehingga mereka membuat hardcode dukungan untuk empat lencana di seluruh logika di situs. Dalam database, di info pengguna, di semua kode tampilan. Karena "Kamu tidak akan membutuhkan" lencana yang tidak bisa kamu pikirkan, kan? Misalkan kemudian situs itu ditayangkan, dan orang-orang mulai menyarankan lencana baru. Setiap lencanaperlu waktu hingga dua minggu untuk menambahkan, karena ada banyak hardcoding yang bisa diubah di semua tempat. Tapi tetap saja, "Ya tidak akan perlu" lencana lebih dari daftar hari ini, jadi tidak pernah ada refactoring untuk mendukung koleksi umum lencana. Apakah koleksi generik seperti ini akan membutuhkan waktu lebih lama? Tidak banyak, jika ada.
YAGNI adalah prinsip yang berharga, tetapi seharusnya tidak (ab) digunakan untuk memaafkan desain yang buruk dan hardcoding yang tidak pantas. Ada keseimbangan, dan dengan pengalaman, saya yakin saya sedang mendekatinya.
sumber
Sumber daya manusia yang tidak kompeten
Mencoba membuat sesuatu yang benar dan hebat dengan orang yang salah!
Bahkan jika mereka dalam peran sebagai PM ego berlebihan (yang agak terlalu umum terutama di perusahaan besar di mana ketidakmampuan mereka dapat bertahan untuk waktu yang lebih lama).
sumber
Setiap kali saya membuat hutang teknis, menulis kode prosedural, melewati tes menulis, dll karena saya terburu-buru. Hampir tak terelakkan saya menemukan ini menciptakan rasa sakit bagi saya di jalan.
sumber
Menggunakan SQL Server Intergration Services (SSIS).
Saya tidak berharap itu pada musuh terburuk saya.
Setelah membangun beberapa paket SSIS selama dua bulan terakhir, hanya untuk mengetahui bahwa paket yang saya kembangkan tidak dapat didistribusikan & dan tidak dapat dipekerjakan. Khususnya di lingkungan berlisensi non-web, bukan SQL Server.
Ini adalah situasi yang sangat buruk, ketika Anda memiliki kurang dari 48 jam untuk menulis ulang paket SSIS Anda dalam kode POCO .NET murni atau melewatkan tenggat waktu yang ditargetkan.
Saya heran bahwa saya bisa menulis ulang tiga paket SSIS (yang membutuhkan waktu dua bulan untuk menguji dan mengembangkan), dalam waktu 12 jam dalam kode .NET murni, dengan OLEDB Adapters dan SQL Adapaters.
SSIS tidak dapat didistribusikan dan tidak akan menjalankan paket dari mesin klien jika tidak memiliki lisensi SQL Server yang diinstal di atasnya (Khususnya DTSPipeline.dll). Ini bagus untuk diketahui di muka. Saya melihat disclaimer sekarang (dalam cetakan kecil) di MSDN. Itu tidak ada gunanya ketika Anda memiliki contoh kode di seluruh internet menggunakan kode hanya mesin SQL-LICENSED. Pada dasarnya, Anda harus membuat layanan web yang akan berbicara dengan server SQL Anda, untuk menjalankan paket SSIS Anda secara terprogram. Anda tidak dapat menjalankannya dari kode .NET murni, kecuali jika Anda memiliki lisensi SQL yang diinstal pada mesin yang menjalankan. Seberapa tidak realistis itu? Apakah Microsoft benar-benar mengharapkan SSIS untuk digunakan dari mesin yang memerlukan instalasi SQL server? Benar-benar buang-buang waktu dua bulan.
Perusahaan saya tidak akan pernah lagi menggunakan SSIS karena tulisan "gotcha" kecil ini.
sumber
Tidak mendefinisikan mekanisme / model penyebaran sedini mungkin.
sumber
Melemparkan beberapa telur paskah 'lucu' ke dalam beberapa kode yang saya tulis sebelum pergi berlibur selama 2 minggu. Saya pikir saya akan menjadi satu-satunya orang yang membacanya ketika saya kembali, itu akan membuat saya tertawa dan siap untuk menulis ulang kode itu.
Tidak perlu dikatakan, bos saya tidak terkesan ketika dia memeriksanya saat saya pergi, dan dia bahkan kurang terkesan ketika salah satu 'telur paskah' melibatkan wajahnya yang lucu di kartun ASCII.
Mmmmmm ...
sumber
Menggunakan Tema ASP.Net ketika folder CSS biasa hanya akan baik-baik saja.
sumber
Mengambil jalan cepat untuk membuat beberapa kode berfungsi, bukan jalan yang benar (agak umum, tetapi kami akan menyebutnya abstraksi dan karena itu jawaban yang 'benar').
sumber
Perusahaan saya memiliki model pengembangan seperti air terjun, di mana pengguna bisnis dan analis bisnis kami akan menentukan persyaratan untuk proyek. Pada salah satu proyek "besar" kami, kami mendapat setumpuk persyaratan, dan saya perhatikan sejumlah persyaratan berisi detail implementasi , khususnya informasi yang berkaitan dengan skema basis data kami yang digunakan oleh sistem akuntansi kami.
Saya berkomentar kepada pengguna bisnis bahwa implementasi adalah domain saya , seharusnya tidak tercantum dalam persyaratan. Mereka tidak mau mengubah persyaratan mereka karena, bagaimanapun, mereka adalah BISNIS, dan hanya masuk akal bagi akuntan untuk merancang perangkat lunak akuntansi. Sebagai pengembang rendahan yang terlalu jauh dalam jajak pendapat totem, saya dibayar untuk melakukan alih - alih berpikir . Sebanyak yang saya perjuangkan, saya tidak bisa membujuk mereka untuk menulis ulang persyaratan - ada terlalu banyak dokumen dan birokrasi di sekitar perubahan yang terlalu merepotkan.
Jadi, saya memberi mereka apa yang mereka minta. Paling tidak, ini agak berfungsi , tetapi database dirancang dengan aneh:
Banyak normalisasi yang tidak perlu. Catatan tunggal yang berisi 5 atau 10 bidang dibagi menjadi 3 atau 4 tabel. Saya bisa mengatasinya, tetapi secara pribadi saya ingin semua bidang 1: 1 ditarik ke dalam satu tabel.
Banyak denasionalisasi yang tidak pantas. Kami memiliki tabel yang menyimpan data faktur yang menyimpan lebih dari data faktur. Kami menyimpan sejumlah flag lain-lain dalam tabel InvoiceData, bahkan jika flag tersebut tidak terkait secara logis dengan tabel InvoiceData, sehingga setiap flag memiliki nilai kunci Primary yang di-hardcoded dan semua bidang lainnya dibatalkan dalam tabel InvoiceData. Karena bendera direpresentasikan sebagai catatan dalam tabel, saya menyarankan menarik bendera ke tabelnya sendiri.
Banyak lagi denasionalisasi yang tidak pantas. Flag aplikasi-lebar tertentu disimpan sebagai kolom dalam tabel yang tidak pantas, sehingga mengubah flag aplikasi memerlukan pembaruan setiap catatan dalam tabel.
Kunci primer berisi metadata, sehingga jika kunci utama varchar diakhiri dengan "D", kami menghitung faktur menggunakan satu set nilai, jika tidak kami menghitungnya dengan set lain. Akan lebih masuk akal untuk menarik metadata ini ke dalam kolom terpisah, atau menarik himpunan nilai untuk dihitung ke dalam tabel lain.
Kunci asing sering kali mengarah ke lebih dari satu tabel, sehingga kunci asing yang diakhiri dengan "M" dapat ditautkan ke tabel akun hipotek kami, sedangkan kunci asing yang diakhiri dengan "A" mungkin menautkan ke tabel akun otomatis kami. Akan lebih mudah untuk membagi data menjadi dua tabel, MortageData dan AutoInsuranceData.
Semua saran saya ditembak jatuh dengan banyak ratapan dan kertakan gigi. Aplikasi ini berfungsi seperti yang dirancang, dan sementara itu adalah bola lumpur yang besar, semua peretasan jahat, kasing khusus, dan aturan bisnis aneh didokumentasikan secara sarkastik dan lucu dalam kode sumber.
sumber
Berpegang teguh pada teknologi yang lebih lama karena tampaknya terlalu merepotkan untuk membiarkan klien Anda memutakhirkan ke versi .NET framework baru, tetapi sebenarnya akan membutuhkan lebih banyak waktu pengembangan untuk membuat perangkat lunak karena Anda tidak dapat memanfaatkan beberapa komponen (hemat waktu) dari versi kerangka kerja yang lebih baru.
sumber
Kembali di universitas saya sedang mengerjakan proyek desain senior saya. Pria lain dan saya sedang menulis sistem pelacakan bug berbasis web. (Tidak ada yang inovatif, tetapi kami berdua ingin mendapatkan pengalaman web.) Kami melakukan hal itu dengan Java servlets, dan itu bekerja dengan cukup baik, tetapi untuk beberapa alasan konyol, alih-alih memilih untuk menggunakan Pengecualian sebagai mekanisme penanganan kesalahan kami, kami memilih untuk menggunakan kode kesalahan.
Ketika kami mempresentasikan proyek kami untuk nilai dan salah satu staf pengajar bertanya, "Jika Anda harus melakukannya lagi, apa yang akan Anda lakukan secara berbeda?" Saya langsung tahu jawabannya: "Saya akan menggunakan pengecualian, untuk itulah mereka ada di sana."
sumber
Bukan pilihan metode saya, tetapi menciptakan XSLT untuk mengonversi file XML berbasis baris menjadi laporan HTML berbasis kolom.
Ini hanya bekerja di IE, benar-benar mustahil untuk memecahkan kode cara kerjanya. Setiap kali kami perlu mengembangkannya, sangat sulit dan butuh waktu lama.
Pada akhirnya, saya digantikan oleh skrip C # kecil yang melakukan hal yang sama.
sumber
mencoba menggunakan semua teknologi baru (untuk mempelajari teknologi baru) meskipun itu bahkan memerlukan ..
sumber
Saya tidak mengambil cukup waktu untuk menilai model bisnis. Saya melakukan apa yang diminta klien, tetapi 6-12 bulan kemudian kami berdua sampai pada kesimpulan bahwa hal itu seharusnya dilakukan secara berbeda.
sumber
Merancang tanpa spesifikasi.
sumber
Saya menerapkan sub-bagian aplikasi sesuai dengan persyaratan.
Ternyata persyaratannya kembung dan berlapis emas, dan kode saya dirancang berlebihan. Seharusnya saya merancang sub-bagian saya hanya untuk bekerja dengan apa yang saya tambahkan pada saat itu, tetapi berencana untuk menambahkan semua hal lainnya tanpa menyertakan dukungan umum untuk itu sejak awal.
sumber