Çerçevelerin bolluğu programcıları engelliyor mu? [kapalı]


22

Bugünlerde mevcut tüm çerçeveler ile ORM'ler , bağımlılık enjeksiyonu (DI), Kontrolün Tersine çevrilmesi (IoC), vb., Birçok programcının zor sorunları çözmek için gereken problem çözme becerilerini kaybettiğini veya kaybetmediğini görüyorum. Çoğu zaman, beklenmedik bir davranışın uygulamalara kaydığını ve geliştiricilerin gerçekten kazamadıklarını ve sorunları bulamadıklarını gördüm. Bana öyle geliyor ki, başlık altında neler olup bittiğine dair derin bir anlayış kayboluyor.

Beni yanlış anlama , bu çerçevelerin iyi olmadığını ve sektörü ilerletmediğini öne sürüyorum, yalnızca istenmeyen bir sonuç olarak geliştiricilerin derinlemesine anlamak için gereken bilgi ve becerileri kazanıp kazanmadığını soruyorum. sistemleri.


İşte birkaç yıl önce, sorunuzla ilgili hatırladığım iyi bir makale. Özellikle yazar, BASIC'e benzer bir şeyin eksikliğini bir öğrenme platformu olarak problem olarak gösterir. salon.com/technology/feature/2006/09/14/basic
GrandmasterB

Tonlarca "başka" çerçeveden uygun çerçeveyi seçmek için gereken problem çözme becerilerini eğitiyoruz.
systempuntoout


1
Bir grup insanı yere düşürmek ne anlama geliyor?
Randall Schulz

Yanıtlar:


18

Kabul. Şu anda, çerçevelerle çevrelenmiş bir yazılım paketi üzerinde çalışıyorum, bu da işi anlamayı neredeyse imkansız hale getiriyor. Çerçeveler sizi yalnızca MVC'yi çözmek yerine işle ilgili sorunları çözmekten alıkoyduktan sonra, çok ileri gitti. Sizin de belirttiğiniz gibi, IMO'nun çoğu programcısı ORM ve MVC'yi çözmek için dener ve mimarlık eder / programlar ve bunun aslında yazılımın ilk başta olduğu sorunu çözmesine yardımcı olup olmadığını nadiren soruyorlar.


Evet, JSP sayfasındaki bazı ham SQL'leri görmek "hayır-hayır" dır, ancak bir saha danışmanıysanız, bu özel bir çözüme nerede uyuyor? Ve hayır, bu çerçevenin doğru olmadığı anlamına gelmez, tüm müşterilerin sayfaya küçük bir veri noktasının yansıtıldığından emin olmak için her dönüşte 20 bin dolar harcadığı anlamına gelmez.


4
+1...just solving MVC, it has gone too far.
Talvi Watia 20:10

2
Gratzy'nin bu cevabı topluluk yerine öznel sorusuna en iyi cevabı oy vermesi yerine kabul ettiğini komik buluyorum (bunun tam tersini söylüyor). Bir soru sormak yerine bir cevap için balık tutuyor gibi görünüyor.
Craige

1
@Craige - Doğru cevabın her zaman en popüler cevap olduğunu mu ima ediyorsunuz?
Jé Queue

1
@Xepoch - Hiç de değil. Sübjektif bir soru olarak, bu sorunun başlamak için gerçek bir cevabı olmadığını hissediyorum. Ben sadece bu sayfadaki diğer cevapların çoğunun tersini yazan cevabı seçtiğini ilginç buluyorum. Sanırım sorusundaki önerisini yansıtan bir cevabı bulmuş ve doğru olduğuna karar vermiştir çünkü inancı doğrultusundadır.
Craige

31

Bu, düzenli olarak, birçok alanda ve birçok biçimde açılan bir argümandır.

Bu argümanın genel şekli:

[X: tool / technology] 'ye sahip olmak insanları [y: x]' den etkilenen fonksiyonlarda daha da kötüleştirir mi?

Örneğin:

  • CAD yazılımı daha kötü mühendisler için yapar mı?
  • Lisedeki hesap makineleri öğrencileri matematikte daha da kötüleştiriyor mu?
  • Sosyal yazılım, insanların kişisel sosyal becerilerini engeller mi?
  • Muhasebe yazılımı daha kötü muhasebeciler üretiyor mu?

Bellekten, her yerde cevap neredeyse her zaman: gerçekten değil. Her zaman [y] yaparken iyi ve kötü insanlara sahip olacaksınız ama şimdi onlar farklı bir yetenek yönünden çok kötüler.

Herhangi bir işin temellerini daha iyi anlayabilmeniz, ne yaparsanız yapın - 'düzeltici' olarak kabul edilen işlerde bile yardımcı olacaktır. Bilgi her zaman yardımcı olur.


Daha büyük raketler tenisçilerden daha az beceri gerektirir mi?
systemovich 10.03

22

Soyutlama, bilgisayar programlamanın temel bir konseptidir ve çerçeveler, programcıların bunu başarmasına yardımcı olur. Bu iyi birşey. Meclis dilinde karmaşık sistemler geliştirmek istediğimizden şüpheliyim! Problem gelir, bence programcılar soyutlama katmanının maskeleme hakkında ne olduğu hakkında çok az fikir sahibi olduklarında. Başka bir deyişle, doğrudan etkileşime girmese veya onunla etkileşime girmeseniz bile, kaputun altında neler olup bittiğine dair bir fikre sahip olmanız gerekir.

İlk dinamik web sitelerinden bazılarını 90'lı yılların ortalarında, C ve CGI kullanarak (web sitelerinin çoğunun hala statik HTML olduğu bir zamanda) geliştirdiğimi hatırlıyorum . Hiçbir olgun sunucu tarafı komut dosyası dili (PHP veya ASP gibi) ve çok az kitaplık yoktu, bu nedenle tüm HTTP yanıt akışını sunucuya her sayfada yazmanız gerekiyordu. Kendi kütüphanenizi yazarken GET ve POST parametrelerinin ayrıştırılması gerekiyor. Can sıkıcı, yavaş, çalışkan ve hataya açıktı. Biraz özlemiyorum!

Bununla birlikte, ASP.NET web formları gibi çerçevelerin de, web'in bütün vatansız yapısını, pek çok yeni web geliştiricisinin, başlığın altında neler olup bittiğinin çok az ipucu olduğu bir noktaya kadar soyutladığını hissediyorum. Bu, geliştiricinin HTTP düzeyinde olup bitenleri anlamadan bir "drag'n'drop" metodolojisi kullanarak bileşenleri bir araya getirdiği için düşük performans gösteren verimsiz, şişirilmiş bir kod oluşturur.

Bu yüzden, çerçevelerin üst seviye yazılımlar geliştirmek için gerekli olduğuna inanıyorum, ancak geliştiricilerin soyutlanmış olanın ne olduğu hakkında bir anlayışa sahip olmalarını şart koşmuyorlar. Evet, çerçeveler sizi aptallaştırabilir, ancak yalnızca onları anlayamazsanız.


"ASP.NET web formları, web'in bütün vatansız doğasını soyutlar" ile daha fazla hemfikir olamazdı, altında ne olup bittiğini anlamayan ve aptalca sorunlara neden olan şeyleri anlamayan geliştiricilerle tanıştımIsPostBack
billy.bob

14

Otomatik şanzıman veya yağmur algılamalı ön cam silecekleri bizi daha kötü sürücüler yapar mı?

Çerçevesiz kodlamanın zorunlu olarak altta yatan sistemleri daha iyi anlamalarını gerektirdiğini sanmıyorum. Bu, adayların tutarlı bir yöntemi bir araya getirebildiklerinden emin olmak için görüşmelerde basit kodlama soruları sormak zorunda oldukları işverenler tarafından kanıtlanmaktadır.

Sonuçta öğrenmek için geliştirici kalmış. İyi olanlar yapar, kötü olanlar olmaz.

Ve benzer şekilde, sadece yeteneklerini analiz etmeden orada olduğu için bir çerçeve seçmek ve artılarını / eksilerini de zayıf gelişme uygulamalarının bir işaretidir.


11
Otomatik travesti daha kötü bir sürücü yapar :)
Jé Queue

3
Yalnızca çerçevelerin daha kötü geliştiriciler sağlayıp sağlamadığını sormakta hemfikir değilim.
Gratzy

2
@ Grazy: Sanmıyorum. Bence aynı kötü geliştiriciler hala farklı şekillerde, çerçevesiz gelişirler.
Adam Lear

3
Anna ile aynı fikirde değilim. Çerçeveler olmadan tembel programcılar bile bilgilerini genişletmek zorunda kaldılar. Altyapılar aslında kötü programcıların sayısını artırıyor (belki sadece biraz).
Sihirbaz

1
Otomatik travesti argümanına karşı koymak için: birçok profesyonel sürücü manuel araba kullanmaz ve daha fazlası genellikle bilgisayar kontrollü olan kanat çarkı kaymasına neden olur.
Steven Evers

10

Bence sorun, yeni programcıların daha yüksek ve daha yüksek soyutlama seviyelerinde başlıyor olması ve bu nedenle de “başlık altındaki” şeylerin bitlerine ve baytlarına maruz kalmamasıdır. Bu yüzden, geçmiş yıllarda öğrenilen ilk şeyler olacak gerçekten temel kodlama temellerinden bazılarını öğrenmiyorlar.

Burada her seferinde kafamı sallıyorum, belli ki yeni bir programcı biraz veri depolamak hakkında bir şeyler soruyor, ve herkes derhal bir ORM aracı kullanmalarını söylüyor . Hayır, hayır, hayır, hayır, hayır ... önce kendi başlarına nasıl yapacaklarını öğrenmeleri gerekir.


4
“Bunu kendin yapman gerekiyor” zihniyetinin nerede durur? Her programcının kullanmadan önce kendi derleyicisini yazması gerekir mi?
mipadi

2
Durmuyor. Programcılar daima öğreniyor olmalıdır. Tüm programcıların bir derleyici yazmasına gerek yoktur. Ancak , kariyerlerinin birçoğunu bir noktada yapmaya çalışmadıkları kadar zanaatkârlıklarına karıştıran birçok büyük programcının olduğundan şüpheliyim.
GrandmasterB

6
Önce "kendin yap" a kadar bir ORM aracı kullanmama mantığı altında, muhtemelen veritabanına doğrudan arama yazana kadar bir veritabanı soyutlama katmanı kullanmamalı mıyım? Veya aslında, dosya sistemini kullanarak bir depolama sistemi yazana kadar veritabanı kullanmamalı mıyım? Peki, dosya sistemi de bir soyutlamadır ... Nereden başlarım? Her nesilde daha yüksek bir soyutlama seviyesinde başlayacaklar veya daha kısa sürede daha ilginç şeyler yapmak için.
RationalGeek

2
Bence bir programcı soyutlama seviyelerinde kalırsa, mükemmel derecede yetenekli bir programcı olabilir ve mükemmel fonksiyonel kabinlerinden mükemmel fonksiyonel iş uygulamaları yaratabilirler. Ancak, bir sonraki zorunlu kullanım programlama dilini ya da veritabanlarında bir sonraki inovasyonu yaratacak bir programlama dili oluşturacaklarından ya da grafik teknolojisini en üst seviyeye taşıyan bir sonraki yenilikçi oyunu yazacaklarından şüpheliyim.
GrandmasterB

2
@jkohlhepp: Şimdiye kadar denediğim her önemli projede, sağlanan soyutlama her zaman sızdırıldı. Neler olup bittiğini derinlemesine anlama çabası olmasaydı, kayboldum ve verimsizdim. Hiç ilginç şeyler yapmak istersen , her şeyi bilmelisin.
Paul Nathan

4

Belki de "aptallığın" dağılımı gerçekten değişmedi ve biz bunun yerine geliştiricilerin kendilerini ayağından vurmaları için daha büyük ve daha karmaşık yöntemler kullanıyoruz.


4

Programcıları saran çerçeveler değil. Aptal programcılar çerçeveleri kullanıp kullanmamaları aptalca olacaktır.

Bir araç ya da çerçevenin düzene koymanıza yardımcı olduğu düşük seviyeli çalışmayı anlamanız, araç ve çerçeveler konusunda daha iyi bir kullanıcı olmanıza neden olduğu için kesinlikle doğrudur. Ayrıca sorunları daha kolay hata ayıklayabilir ve araçların işlevsellikteki kaçınılmaz boşluklarını çözebilirsiniz.

Örneğin, Lex ve yacc gibi ayrıştırıcı üreteçlerini kullanmayı öğrenmeden önce, Kolej'deki bir LR ayrıştırıcısını kodladığımız kolejdeki Compiler Design'da ders aldım. Çok eğiticiydi ve o zamandan beri kullandığım tüm programlama dilleri için daha iyi bir anlayışa ve takdirime sahip oldum.

Ancak, her programcının yüksek düzeyde çalışmasına izin verilmeden önce, Bay Miyagi'nin arabasını yıllarca ve yıllarca cilalamaktan kaçınması gerektiğini söylemiyorum. Belirli bir dilde veya araçta kodlamanın mekanik çalışmasına değil, yazılımın ne yapması gerektiğine karar veren birçok programlama işi entelektüeldir .

Bu entelektüel çalışma, zekâ ve sersemliğin daha da önemli olduğu yerdir.


4

James Larus'un mükemmel "Harcama Moore'un Kar Payını " ndan alıntı (vurgulandı):

Otuz yıl önce, Bill Gates Altair Basic’te 5 byte hafıza tasarrufu isteğini “HAZIR” olarak “Tamam” olarak değiştirdi. Günümüzde, geliştiricilerin programlarının bu ayrıntı seviyesinden haberdar olmaları, bu konuda endişelenmelerine rağmen ve haklı olarak, bu büyüklükteki bir değişiklik bugün farkedilmez olduğu için farkında olmayacaklar ... Bugünün sistemlerini üretmemize imkan yoktu. zanaatkâr kullanarak, 4K hafızalı makinelerde (gerekli) mümkün olan el yapımı uygulamalar.

Sanırım, çerçevelerin zor sorunları çözmek için gerekli becerilerden kaçınmanıza ya da derinlemesine anlayıştan kaçmanıza izin verdiğini söylemek yanıltıcı olabilir. Bunun yerine, günümüzün karmaşık sistemlerini kurabilmemizin tek nedeni (karmaşıklığı zor meseleler yaratabilecek ve derinlemesine anlamaya meydan okuyabilecektir), çerçevelere (ve üst düzey OO çöp toplayan dillere ve bağlama duyarlı dillere sahip IDE'lere ve on-the-fly sözdizimi kontrolü ve diğer tüm yazılım geliştirme ilerlemeleri, bazen programcıları aptallaştırmakla eleştirilir.


2

Altyapılar harika. Ama kaputun altında ne olduğunu bilmek zorundasın. Öyleyse sorun, programcıların temel sistem hakkında yeterli bilgiye sahip olmadan, çerçevelere çok fazla güvenmeleridir.

Biraz modası geçmiş bir örnek MFC'dir. : bir programcı, Windows API yerine MFC kullanarak çok fazla zaman kazandırabilir, ancak API bilgisi olmadan (ham API ile gerçek bir çalışma geçmişine sahip olmak anlamına gelir), sık sık sıkışmış olurlar. . Neredeyse hiç olmadı, çünkü tipik bir MFC programcısı Windows API bilgisine sahipti.

Ancak, .NET üzerindeki Windows Formları ile daha iyi bir kapsülleme ve daha iyi nesne modeli sayesinde sayesinde, bir programcı, başka bir Windows API paketleyicisini kullandığını neredeyse hiç görmezden gelebilir. Dolayısıyla sıkışıp kalma şansı daha azdır, ancak bu gerçekleştiğinde, acı verebilir.

Ne yazık ki, piyasaya sürülme süresi her zaman kısalır ve projeler gittikçe karmaşıklaşır, bu nedenle programcıların derine gidecek zamanları yoktur. Bu, yazılım endüstrisinin üzücü hali ...


1

Olması gerektiği yere akıllıları koyar. Bir topun binanın tepesinden düşmesini sağlayan bir mekanizma oluşturmak için kuantum mekaniğini ve Newton fiziğini anlamak gerekmez. Yazılımda Her yeni katman gereken son üzerine inşa ve klişe çıkarmak kullanışlı uygulamaların inşaat.

Çerçevenin arkasındaki "şeyleri" bilmek veya bilmek isteyenler kanca veya sahtekarlarla çalışacak ve araştıracaklardır.


1

Kesinlikle değil. Altyapılar, özünde, bir alt program kütüphanesinin ve bir şablonun, denenmiş ve gerçek iki programcı aracının birleşimidir. Zavallı bir işçi aletlerini suçluyor.

... ve çerçeveleri kullanan ve suçlayan birçok fakir işçi var.


Sanırım çerçevelerin iyi araçlar olmadığını önermediğim bir sorunun eksik olduğunu düşünüyorum, çünkü orada o kadar çok soyutlama sağlayan çok fazla araç var ki, daha fazla insanın kendi aracını suçlamasına izin veriyor.
Gratzy 21

3
@Gratzy: iyi, elbette. Bir araç ne kadar çok kişi kullanırsa, o kadar fazla kaltak olur. Bilgisayarlar çok büyük, pahalı ve nadir olduğunda, dünyadaki sadece bir avuç insan ne kadar zor kullandıklarından şikayet edebilirdi - şimdi herkes öyle. Benzer şekilde, çerçeveler programcılara herhangi bir aptallık yapmak zorunda değildir - sadece çok fazla aptal programcı çekmek için olurlar.
Shog9

1

Yazılım oluştururken, çerçeveler zaman kazandırır. Yazılım inşa etmeyi öğrenirken, çerçeveler anlama yoluna gider.

Bence sorun temelde fazla güçlenen bilgisayarlardan biri. Çoğu programcı için artık “temellere inmek” için mantıklı bir neden yoktur. Aynı şeyleri yapmak sadece daha fazla zaman alır ve çalışma zamanında anlamlı bir fark yoktur. Bunu çözmenin tek yolu, yapay kısıtlamaları, js1k gibi yarışmaların yapmasını sağlamaktır.

Belki de okullar, güçlü alan ve zaman kısıtlamaları altında programlar oluşturmanız gereken özel bir konuya "optimize edilmiş tasarım" vermeli midir?


-1

Hayır, çerçeveleri öğrenmek bir programcının becerilerini geliştirir. Çerçeve, bir programlama dilinin uzantısıdır. Bazı diller zaten çerçeve tabanlı. Hem PHP hem de Java ile çalışıyorum. PHP, şablon motoru gibi bir çerçeveye ihtiyaç duyar (bazen). Java bir çerçeveye ihtiyaç duymaz (çoğu zaman), zaten birçok yöntem ve kütüphaneye sahiptir.

Çoğu Altyapı, programcıların tekrar tekrar kullandığı fonksiyonlara sahip olacaktır.


1
Aww, cevabını daha yanlış olamazdı.
NB

-1

Görünüşe göre şeytanın avukatını burada oynamak için, çerçevelerin ("iyi" olanlar, yine de) aslında bir programcının eğitimini ilerletmek için uzun bir yol alabileceğini düşünüyorum . İyi tasarlanmış bir çerçeve birçok problemi çözecektir ve çerçeveyi kullanarak programcı hangi problemlerin çözüldüğünü ve nasıl olduğunu anlayabilir. Aklımda, bir çerçeve en iyi uygulamaların programlanmasının bir kristalleşmesidir (/ olması gerekir) ve bir programcıya örnek olarak öğretebilir.


Neden aşağı oy? Sadece katılmıyorum çünkü? Boo.
Chris Allen Lane
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.