Internetin bu kadar büyümesi ve özellikle Google gibi arama motorlarının günlük iş hayatımızın bir parçası haline gelmesi biz programcılar için ne kadar hayırlı oldu, bilemiyorum. Pek te hayırlı olmadığı kanısındayım. Açıklamaya çalışayım.
Çalıştığım projede bir çalışma arkadaşımın masasında algoritmalarla ilgili kalınca bir kitap gördüm. Havadan, sudan konuşurken kendisi böyle kitapların artık gereksiz olduğunu, çünkü internette istediğin algoritmayı bulup, kullanabildigini söyledi. Doğru, haklıydı.
Bugünlerde Pratik Spring Core 3 isminde yeni kitabım üzerinde çalışmalarımı sürdürüyorum. Spring ile XML bazlı deklaratif transaksiyon yönetimi konfigürasyonu nasıl yapılır diye internette araştırma yaparken, birkaç klasik blog sayfasına rastladım. Bu klasik blog yazılarını tanırsınız. Basit bir örnek üzerinde belli bir konfigürasyonun nasıl yapıldığını gösterirler. Bu örnekleri copy/paste yaparak programcının kendi uygulamasına eklemesi zor değildir. Zamanında az yapmadık. Copy/paste işlemi esnasında insan keşfettiği örneğin altındaki konseptlerin ne olduğunu sorgulamıyor. Programcı için önemli olan bir şeyleri çalışır hale getirebilmek. Ve bunu başardıktan sonra, “ya, bunu çalışır hale getirdim ama, bu işin temelindeki konseptler nelerdir” şeklinde bir sonuca varmıyor ya da varamıyor. İşte internet üzerinden bilgiye bu kadar hızlı, sorgusuz ve sualsiz erişmenin getirdiği hayırsızlıkta bu noktadan itibaren başlıyor. Programcı bir bilgiyi edindi ve kullandı. Ama o bilginin neyi temsil ettiğini, yani temelinde neler olduğunu bilmiyor. Spring ile XML bazlı deklaratif transaksiyon yönetimi konfigürasyonu örneğinde 3 satırlık copy/paste edilen XML konfigürasyonunun altında AOP (Aspect Oriented Programming) ve Proxy tasarım şablonu gibi konseptler var. İki satırlık konfigürasyonu kopyaladım, ama temelinde yatan bu bilgileri kopyalayamadım. Bunlar internette kalmaya devam etti. Benim kopyaladığım cansız, iki satırlık kod parçası.
Kod örneğiyle, kodun temelindeki konseptlerin zahmetsiz bir şekilde beyne nasıl kopyalandığını Matrix filmede gördük. Neo anında Karate-Kid olmuştu. Bizim böyle bir imkanımız yok. Böyle bir şeyin gelecekte mümkün olacagını da düşünmüyorum. Geriye kalan, kaynağını bulup, copy/paste yaptığımız bilgilerin temelinde yatan konseptleri ögrenmek ve uygulamak. O zaman hayırsız olarak tabir ettiğim işlemi hayırlı bir işleme dönüştürebiliriz.
Copy/paste zihinlere o kadar yerleşmiş ki, bilgiye sahip olmanın değil de, bilgiye nasıl ulaşabileceğini bilmenin daha önemli olduğunu savunanlar var. Bu artık copy/paste filozofisinin mükemmelleştirilerek, getirildiği en son noktadır, yani bu akımın en tepesindeki noktadır. Bu filozofiye sahip olanların, iş görüşmelerinde bu tür ifadelerde bulunmamalarını tavsiye ediyorum, çünkü iş verenin en sevmediği ve iş görüşmesini anında sonlandırabileceği durumların başında, iş görüşmesi yaptığı şahsın “ufak bir internet araştırması ile bu sorunu çözebilirim” tarzı söylemlerde bulunmasıdır. Böyle bir şey söyleyen şahıs aslında “ben bu bilgiye sahip değilim, başkaları sahip, ama bir bakayım, bakalım, bir yerlerden bulabilir miyim” demektedir. Böyle bir şey söyleyen bir programcıyı siz olsanız işe alır mıydınız?
İyi bir programcı olabilmek için iyi bir temele sahip olmak gerekir. Bu temel edinilmiş ve zaman içinde edinilen bilgiden oluşur. Programcı tüm yeteneklerini bu temel üzerine inşa eder. Zaman zaman internetten bir şeyleri copy/paste etmek suç ya da günah değildir. Bu hepimizin yaptığı bir şeydir. Lakin programcı copy/paste yaptıktan sonra, copy/paste yaptığı kod parçasının temelinde yatan bilgiyi sahip olduğu temele eklemekle yükümlüdür. Aksi taktirde bu bakkaldan bir sakız alıp, parasını ödememek gibi bir şey olur. Copy/paste yapılan şeyin bedeli ödenmelidir. Copy/paste edilen kodun üzerinde fiyat etiketi olmadığı için beleş sananlar vardır. Hayır, beleş değildir. Bedeli ödenmeden kullanılan bilgi, temeli sağlam olmayan bir binanın en ufak bir rüzgar esintisinde sallanması misali programcıya zarar verir.
Copy/paste yapalm, ama bedelini ödeyerek…
EOF (End Of Fun)
Özcan Acar
Çok güzül açıklamışsınız.Özelliklede bir konuya çok aydınlık getirmişsiniz.Ayrıca teşekkür ederim
güzel yazi olmus fakat bir konu da size katilmiyorum.
“ufak bir internet araştırması ile bu sorunu çözebilirim >>> ben bu bilgiye sahip değilim, başkaları sahip, ama bir bakayım, bakalım, bir yerlerden bulabilir miyim” evet dogru ama cok kötü, negatif birseymis gibi yazmissiniz.
bir yazilimci sonucta bir doktor degil, doktor birsey bilmediginde, mesela bir tani koyabilmek icin kitapta birseyler arar, ama bir yazilimci birsey ögrenebilmesi, arastirabilmesi icin internetti kullanip, iyi bir kaynak aramalidir. bir doktor bunu yapamazdi cünkü elinde iyi bir kaynak olmasi gerekirdi, bu da kitap oluyor. bence bir yazilimcinin ayni zamanda isi bu; internette baska cözümler veya bilmedigi birseyi arastirip cözümler bulmak.
tabii bazi insanlar bu isi hevesli yapmadiklari icin, bulduklari kodlari / cözümleri c/p yapiyorlar, birsey ögrenemiyorlar ama bazilari var, internette yazilan kaynaktan bile daha iyisini kodlayabiliyorlar, zaten bu tip kisilerin amaclari da mantigi anlayabilmek, ney nasil oluyor diye. daha sonra arastirdigi buldugu kaynaktaki kodlardan daha iyisini yazan insanlar bile var.
internetten birsey aramak, cözüm bulmak bir insanin aslinda hevesli oldugunu da gösterir, ama yazilimcidan yazilimciya degisiyor, eger bir adam 1-2 dil üzerinde yogunlasmissa bu bence tembel biridir, ki yogunlastigi bir dilde internette hala delice cözümler kaynak ariyorsa, iyi bir yazilimci degildir ve tembeldir, iyi yazilimcilar bir dil üzerinde yogunlasmazlar, bir dille yetinmezler.
illa bir dili iyi bilmekte gerekmiyor, en azinda merak edip, biraz ilgilenmesi bile yeterlidir.
1; bir yazilimciya hangi dille ugrastigini sormak, neyi merak edip ne ile ilgilendigini sormak gerekiyor
2; daha sonra internette cözümler ariyor mu diye sormak lazim, internette buldugu cözümleri nasil kullandigini sormak gerek, direk c/p mi yoksa ögrendigi seyi devam gelistirip öyle mi kullandigini sormak gerek.
internette hep cözümler aramak bence kötü birsey degil.
bir kitaptan dogrudan bir cözüm aranmaz, bir seyin temeli ögrenilir, ki kitaplar basta gerekli birseydir, daha sonra internette cözümler aramak, internetteki kaynaklari bulmak gerekir.
Neden size katılmadığımı kısaca açıklama ihtiyacı hissettim.
“…Böyle bir şey söyleyen şahıs aslında “ben bu bilgiye sahip değilim, başkaları sahip, ama bir bakayım, bakalım, bir yerlerden bulabilir miyim” demektedir. Böyle bir şey söyleyen bir programcıyı siz olsanız işe alır mıydınız?”
Evet alırdım. Hem de seve seve.
Her kopyaladığı kodun arkasındakini (kısa sürede) öğrenebilen, bunu (uzun vadede) aklında tutabilen ve bunların yanında, deadline gibi bir kavramın önem sırasında en başlarda geldiği bir sektörde işinin hakkını verebilen birilerini bulabiliyorsanız durum değişir tabi.
Aksi halde söyledikleriniz sadece akademik mantığa oturuyor. İş hayatında bu tarz bir çalışan yaklaşımı, iş veren için can sıkıcı olabilir.
Merhaba,
Copy/paste özellikle internet kullanımının artması ve acemi programcı yetiştiren kurumları sayısının artması ile birlikte en büyük sorun haline geldi.İnternetdeki kod parçasını alıp kendi programına entegre etmeye çalışan bir kişi bence programcı değildir ne olursa olsun eğer gerçekten programcı olsaydı gece gündüz demeden o kopyalayacağı kodu oturur emek verir öğrenirdi.Bende hiç internetden bakmıyor değilim ama eğer bilmediğim bir konu ise hemen oturup mantığını yapılma şeklini ve detayını öğreniyorum ondan sonra kodu kendim yazamıyorsam kopyalarım ve en kısa sürede kendim yazabilecek şekilde kendimi geliştiririm.Yazılımcılık bir iş değildir bence hayat tarzıdır tutkudur eğer siz tutkulu olduğunuz işi kendiniz yapamıyor, internetden bakarak yapıyorsanız bence sorun var demektir bu tip bir kişiyi veya bu şekilde düşünen bir programcıyı bende işe almazdım kesinlikle.İnsan bir kere kolaya alıştığı zaman sürekli ona yönelecektir ki programcılık o kadar da kolay bir iş değildir.
Zaten bir kere kişi o konuyla ilgili kodu kopyalıyor ise konuyu bilmiyor demektir ama yazılımda kullanıyor bence bu çok komik .İşi bilmeyen bir ekip ile yola çıkmak çok yanlış olacaktır.Tabiki kişi kendisini internet ve kitap üzerinden geliştiricek ama hakkınıda vermesi lazım kesinlikle.Ayrıca her kod da kopyalanamaz, mesela uygulama genelinde kullanılacak bir design pattern ‘i veya farklı dinamikleri olan bir algoritma , işte acemi programcı bunlarıda kopyalayabileceğini düşünür.Onun için kopyalayan değil işi ve mantğını bilen programcı gelecek için her zaman daha iyi olur.Uygulama bu şekilde genişletilebilir , yönetilebilir olacaktır.
İyi çalışmalar
Asagidaki bu iki cumle bir programcinin hayat felsefesi olmasi gerekir. Copy/paste yardimi ile birseyler yailabilir ama dikkat edilmesi gereken en onemlisi bu kodu iyi tahlil etmek ve daha iyi hale getirmek eyer Copy/paste edilmis bir kod iyi tahlil edilmese projenin ilerleyen yerlerinde bu kodun yaratacagi problemleri cozemiyeceyi yada kodu daha iyi hale getirmeyince programin yavaslamasi veya buna benzer sonuclarin dogmasina sebeb olur.
” Programcı için önemli olan bir şeyleri çalışır hale getirebilmek. Ve bunu başardıktan sonra, “ya, bunu çalışır hale getirdim ama, bu işin temelindeki konseptler nelerdir” şeklinde bir sonuca varmıyor ya da varamıyor. İşte internet üzerinden bilgiye bu kadar hızlı, sorgusuz ve sualsiz erişmenin getirdiği hayırsızlıkta bu noktadan itibaren başlıyor. “…
“İyi bir programcı olabilmek için iyi bir temele sahip olmak gerekir. “…..
Cok guzel bir yazi olmus. Elinize saglik.
Özcan hocam yazdıklarınıza kısmen katılıyorum. Katılmadığım noktaları arkadaşlar yorumlarında belirtmiş , o yüzden tekrarlamak istemiyorum.
Merhaba,
Siteyi ve yazıları büyük bir keyifle takip ediyorum. Hepsi çok güzel ve üzerine emek harcandığı belli olan işler. Elinize sağlık diyorum.
Katılmadığım bazı noktaları arkadaşlar yukariıda paylaşmış. Benim eklemek istediğim küçük bir kısım var.
“Copy/paste zihinlere o kadar yerleşmiş ki, bilgiye sahip olmanın değil de, bilgiye nasıl ulaşabileceğini bilmenin daha önemli olduğunu savunanlar var.”
Evet bende bunu savunuyorum. Çünkü bilyorum ki bilgiye sahip olabilmek için öncelikle ona nasıl ulaşabileceğinizi bilmeniz gerekir. Bu yolu geçemeden bilgiye sahip oluyorsanız ben buna ezbercilik derim ki sanırım bu en kötüsü bu olsa gerek.
bilgiye sahip olmanın değil de, bilgiye nasıl ulaşabileceğini bilmenin daha önemli olduğunu savunanlar var”
bence de bilgiye nasıl ve nereden hangi kaynakları kullanarak ulaşabilmek çok önemli bir mesele,(bunlar kitap,internet veya bir kişiye danışmak olabilir) Dikkat edilmesi gereken de yukarıda belirtildiği gibi o bilgiyi özümsemek ve ondan sonra da gerektiğinde o özümsenmiş bilgiyi kullanabilmek…Yani doğru bilgiye ulaşmayı bilmek, bilgiye sahip olmaktan az değerli değildir kanımca…
Geçen yıl bir mülakatta aynen söylediğiniz cevabı vermiştim ve bana “peki internette bulamazsan?” diye sordular, ki bazı zamanlar internette çözüm bulunamayabiliyor, o durumlarda yaptığım cevabı verdim, “o halde stackoverflow’da sorarım” dedim. Mülakatı yapan bilgisayar mühendisleri gülümsemişti ve memnun kalmıştı cevabımdan:) Sonra beni işe aldılar:)
Ya aslında söylemek istediğim; şu anda siz nefes alırken bile onlarca yeni şey üretiliyor, teknoloji hızla gelişiyor ve devamlı kitaplardan bunları öğrenemiyorsunuz, bir bakıyorsunuz yeni bir sürüm çıkmış, yeni bir sektör gelişmiş -en güzel örneği mobil teknolojiler-, hemen bir şeyler yapıp öğrenmek istiyor insan. Sonra örnek kodları okuyorsunuz, başkalarının yazdığı kodları kopyalıyor ve çalıştırıyorsunuz, daha sonra onu geliştirip yenisini ortaya koyuyorsunuz. Her aşamada sorunlarla karşılaşıyor ve bu sorunlar için internetten çözüm arıyorsunuz. Sonuçta karşılaştığınız her sorun sizi işin mantığına itiyor. Böyle böyle öğreniyorsunuz. Ve bence bu öğrenme yolu, kitaptan okumaktan daha kalıcı bir öğrenme oluyor.
Hocam merhaba,
Pratik Spring kitabınızı bekliyorum sabırsızlıkla. Zaman bilgisi verebilir misiniz lütfen?
Teşekürler.
Yilbasi gibi ebook olarak yayimlanacak.
Merhaba,
Yorumları okudum.Bence Özcan bey’in söylemek istediği pek anlaşılmamış yada ben bazı yorumları yanlış idrak ettim.Özcan bey copy/paste karşısında değil onun devamında gelmesi gereken bilgiyi özümseme kısmınının olmamasından şikayetçi.Tabi bu özümseme zamanı da tecrübeyle kısalır ama yeni başlayan insanların en çok zamanını alan ve alması gereken işte bu bilgiyi özümseme meselesidir.
İyi çalışmalar..