“Tekerleği yeniden icat etme” insan hafızasının sınırlarını göz ardı ediyor mu?


16

Haskell ve F # 'da çalışan bir şey bana öğretti ki benden daha akıllı bir üniversitede birinin yaptığım şey için bir soyutlama bulmuş olması. Aynı şekilde C # ve nesne yönelimli programlamada, ne yaparsam yapayım, muhtemelen "o" için bir kütüphane vardır.

Programlama soyutlamalarını tekrar kullanma üzerinde böyle bir vurgu var ki, genellikle arasında bir ikilem hissediyorum: 1) sadece kendimi kısa ve kirli bir şey kodlamak veya 2) aynı zamanda başka birinin daha sağlam kütüphane / çözümünü bulmak ve bunu kullanmak için harcamak.

Son zamanlarda olduğu gibi, burada kodlayıcılardan biri CSV dosyaları için bir (de) serileştirici yazdı ve ben yardımcı olamadım ama zaten .NET standardıyla gelmiyorsa, böyle bir şeyin çevrimiçi bulmak çok kolay olduğunu düşünüyorum. API'leri.

Yine de onu suçlamıyorum, .NET'te birkaç kez bildiklerime dayanan bir çözümü bir araya getirdim, sadece bir yöntem çağrısı veya nesne veya genellikle aynı kütüphanede bir şey olduğunu fark etmek için ne yaptı İstedim ve bunu bilmiyordum.

Bu sadece deneyimsizliğin bir işareti mi, yoksa her zaman yeni yazmak ile eskiyi tekrar kullanmak arasında bir denge unsuru var mı? En çok nefret ettiğim şey, zaten bildiğim ve unuttuğum bir çözümle karşılaştığım zaman. Bir insanın bu günlerde çoğu dille önceden paketlenmiş olarak gelen büyük miktarda kodu sindiremediğini hissediyorum.

Yanıtlar:


9

İlk olarak, bir kütüphane veya 3. taraf çözümünün zaten varolabileceği kadar genel / tekrar kullanılabilir "bileşenleri" tanımlamayı öğrenmeniz gerekir. Bunu yaptıktan sonra, iyi bir geliştirici olsanız bile, aynı soruna sayısız saat harcayan sayısız geliştiricinin kolektif deneyiminin, yapabileceğinizden daha iyi bir çözüm üretme olasılığının yüksek olduğunu fark edin. Bu, asla "tekerleği yeniden icat etmemeniz" anlamına gelmez , ancak bunu yapmayı seçerseniz, bunu yapmak için bir DAMN iyi gerekçeniz olması daha iyi olur.

Programlama soyutlamalarını tekrar kullanma üzerinde böyle bir vurgu var ki, genellikle arasında bir ikilem hissediyorum: 1) sadece kendimi kısa ve kirli bir şey kodlamak veya 2) aynı zamanda başka birinin daha sağlam kütüphane / çözümünü bulmak ve bunu kullanmak için harcamak.

Hatta söz It yetmeyecek olursa o kendiniz yazmak için yaptığı gibi varolan kitaplığı / çözüm bulmak için zamanın sizi aynı tutarda alır bunu yaparken kendinizi de bunu korumak için gerekecek demektir unutmayın sonsuza . Sadece tekerleği yeniden icat etmekle kalmayıp, aynı zamanda tüm pit ekibini de çalışır durumda tutmak için. Tabii ki, bazı kütüphaneler buggy veya zayıf bir şekilde korunur, ancak bunlar 3. taraf bir çözüm seçerken aklınızda bulundurmanız gereken şeylerdir.


2
Yine de, iyi ve aktif bir şekilde korunsa bile, bir kütüphaneye daha fazla bakım zamanı harcayabilirsiniz. Genellikle bu, bir şekilde kodunuza uymayacak şekilde tasarlandığında olur.
Jason Baker

Mevcut kütüphane / çözümü aramak için harcanan zamanı haklı göstermek için +1 .
rwong

Çukur ekibine işaret ettiği için +1, her zaman onları unuturuz gibi görünüyor
Filip Dupanović

5

Bazen bu, belirli bir dilde veya genel olarak programlamada deneyimsizliğin bir işaretidir. Bununla birlikte, bazen, uyum açık değilse, tam olarak ne istediğinizi ve daha fazlasını yapamayan kendi kodunuzu almak daha iyidir . Genel kütüphaneler, genellikle yararlı olsa da, sahip olmadığınız gereksinimler için oluşturulabilir ve bazı durumlarda bu tür jeneriklik, onları değerinden daha fazla sorun haline getirebilir.

Örnek: Küçük tek kişilik projelerim için asla "gerçek" bir günlük kütüphanesi kullanmam. Ben printifadeler artı biraz geçici yapılandırma kullanın. printAçıklamaları benim amacım için iyi çalıştığında , ben hiç kullanacağımdan çok daha fazla özelliği olan bir günlük kitaplığı kurmak ve yapılandırmak rahatsız olmak istemiyorum . Ayrıca kullanmak istediğim derleyici / yorumlayıcının sürümü ile uyumlu olmayan başka bir bağımlılık da istemiyorum, dağıtılması gerekir.


1
... ya da tam tersi. Bazen çok özel bir görev için ayarlandı ve kodunuzun yapması gereken şeyi yapacak kadar esnek değil.
Jason Baker

Ben de buna cevap
verecektim

4

Programlama dünyasına hoş geldiniz. Bu sorun, siz ve gelecekteki meslektaşlarınız arasındaki birçok anlaşmazlığın konusu olacaktır. İki seçeneğiniz var:

  1. Kendininkini yuvarla.
  2. Başkasının çözümünün üzerine bir şeyler oluşturun.

Her iki çözümün de uygun olduğu zamanlar olduğunu düşünüyorum. Örneğin, ORM'nin kendi CSV ayrıştırıcısını yuvarlamaktan kaçınmayı tercih ederim. Öte yandan, kütüphaneler genellikle kısıtlanır. Çalıştığım her proje için, bu eksiklik olmasa bile sorunumu mükemmel bir şekilde çözecek kütüphanelerle karşılaştım . Ya da bazen bir kütüphane, bir şey yapmaya ilk başladığınızda tam olarak ihtiyacınız olan şeydir, ancak değişiklik yapmanız gerektiğinde yardımdan daha zararlıdır.

Genel olarak, "doğru" cevapları bulmaya çalışmamanızı tavsiye ederim çünkü mevcut değiller. Şüphe duyduğunuzda sadece bağırsağınızla gidin. Bir keresinde birinin deneyimin kaç aptal hata yaptığınızla tanımlandığını söylediğini duydum. Genellikle, bir şeyler öğrenirsiniz veya işe yarayan bir şey yaparsınız. Her iki durumda da, hepsi kötü değil.


Bunun üç yönlü bir seçim olduğunu söyleyebilirim: bu özel ihtiyaç için kendi çözümünüzü kullanın , bir başkasının mevcut çözümünü uyarlayın veya bu ihtiyacı ve gelecekteki ihtiyaçları karşılamak için kendi genel amaçlı çözümünüzü kullanın . Üç yönlü bir seçim olması, bunu iki yönlü bir seçimden çok daha zorlaştırır.
supercat

2

Bu (ya da benzer bir şey), çerçevenin ciddi İç Platform Etkisinden muzdarip olduğu önceki bir işte sık sık başıma geldi.

Temel olarak, kod tabanları Windows C / C ++ 'ın ilk günlerinden evrimleşti, sonra MFC altında derlenmeye başladı - ve böylece MFC ve eski şirket içi veri yapılarını ve pencere bileşenlerini karıştırmaya başladılar. İç platform çok iyi belgelenmemiştir, ancak sağladığı bazı iç tesisler nedeniyle söz konusu ürün üzerinde bir şeyler yapmak için sözde "Yol" idi. Şirketin iç çerçevesiyle nasıl yapılacağını anlamak yerine, kendi şeylerimi sıfırdan (MFC temellerinden) yazmayı daha kolay ve daha hızlı buldum.

(Tamam, bu başlangıç ​​noktanızın tam tersi gibi görünüyor - ama prensip aynı, hehe! Evet, bazen kendi işinizi yapmak, mevcut yeniden kullanılabilir bulmak için zaman ve çaba harcamaktan daha hızlıdır çözüm.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.