Internet.com’da bir amerikalı profesör ile yapılmış bir röportaj yayınlanmış. Yazının başlığı Anti-Java’ Profesörü ve İşsiz Programcılar.
Bu aslında bizimde yıllardır tartıştığımız birşey.
Bildiğiniz gibi programlama dilleri genel olarak iki gurupta incelenir. ( Aslında programlama dilleri 50 farklı kategoride de incelenebilir ama temel olarak iki guruptan söz edilir. ) Bunlardan biri low-level (düşük seviye) programlama dilleri diğeri ise high-level (yüksek seviye) programlama dilleri. Low-level ve High-Level çoğunuzun bildiği gibi dilin kötü-iyi olmasıyla değil donanıma ne kadar erişebildiğiniz gibi basit sayılabilecek bir kıstasa dayanır. Mesela assembly low-level bir dildir ama php high-level bir dildir. Dillerin seviyesi düştükçe kullanımı da zorlaşır da denebilir. Bir asembly kodu yazmak bir PHP kodu yazmaktan zordur. Bir de her ne kadar low-level olarak tanımlansa da C gibi orta seviye diller vardır. ( Ilerde teknolojinin gelisimine bagli olarak kod gormeden program yazabilecegimiz super-high level dillerin turemeyecegini de kimse soyleyemez. Sonucta bu cogumuzun hayali olsa da is boyle devam ederse cok yakin bir gelecekte sartlar bunu gerektirecek )
Makalede de tartışılan aslında bu. Yani toollar ya da kitaplıklarla şahane programlar üretebilen ancak yazdığı kodun bellekte ne tür işlemler yaptığını bilmeyen kişiler yetiştirilmesinin bugün için piyasaya uygun olabileceği ama genel olarak bir sorun teşkil ettiği söyleniyor. Yani çok iyi piyasa programcıları yetiştiriyoruz ancak çoğu yazdığı kodun neler yaptığını tam olarak bilmiyor.
Esasında bu anafikir doğru. Buna yanlış demek mümkün değil. Örneğin gayet iyi kod yazan ve bundan ciddi paralar kazanan PHP programcıları var. Ancak bunların çoğu belleğin yapısını bilmez. Çoğu performans testlerini sayfa sonuna ekledikleri debugdan ya da yazdıkları program bir sitede çalışırken sürekli fix ederken farkederler. Yani yazılan kodun ne iş yaptığını belleği-işlemciyi nasıl kullanacağını bilmedikleri için bunu yorumlayıcı-derleyici bileceği için aslında yazılan kod genel olarak “yorumlayıcıya güven”e dayanır.
Ancak diğer fikir yani düşük seviye dillerle programlama geliştirmenin külfeti ve yavaşlığının aksine olarak havuz diller ile programlama yapmak gerçekten zevkli, kolay, hızlı. Eskiden CGI kodları yazarken temel bir felsefe olarak heryerde gördüğünüz bir şablon vardı : C ile de CGI scripting yapılır ancak PERL ile yapması daha kolay! Gerçekten de bu fikir her zaman geçerli bir fikir. Belki PERL ile donanıma hükmetme şansınız yok ancak yapacağınız işe göre işi daha kolay ve hızlı bir şekilde yapmanız, teferruatlar üzerinde boğulmadan işi bitirmeniz mümkün.
Ancak zaten üst seviye dillerin temel çıkış noktası düşük seviyelerde iş yapmanın zorluğu değil mi? Belki scripting dilleri türemeden önce Unix üzerinde C kodu yazmak kişilere çok eğlenceli gelebiliyordu ancak ne zaman PErl gibi diller türedi daha önce oldukça çok mesai alan işler birkaç saniyede çözülür duruma geldi.
Aslında bu iki bakış açısının ikiside doğru olsa da biri daha geçerli. Haliyle üniversitelerde eğitimlerini geçerli olan yola göre yapmak durumunda. Çünkü şu şartlar altında hayatı boyunca bir pointere ihtiyacı olmadan çok iyi para kazanmak mümkün. Daha doğrusu sektör sizden işi hızlı ve kolay yapmanızı bekliyor. Bir manada bu donanımın ucuzluğundan da kaynaklanıyor olabilir.
Kaldı ki Microsoft başta olmak üzere herkes yatırımlarını bu yöne kaydırmış durumda. Yani yazıdaki gibi sadece Java’dan bahsetmek Java’nın uzun yıllardır kullanılır olmasından dolayı yoksa Dotnet’in durumu da aynı yapıda. ( Farklı anadan doğmuş kardeşler diyelim.) Koca koca firmaların yatırımlarını high-level dillere yönlendirmesi ve donanımla olan ilişkiyi kendilerinin çözmeye çalışmasında tek bir mantık var. O da daha çok programcıya daha kolay programlama imkanı sağlayıp kendi firmasına reputation (= para) kazandırmak.
Şunu da unutmamak lazım. Programlamanın bir kişiye öğrettiği yegane şey birşeyi gerektiğinde öğrenmektir. Programlama yapmak için herşeyi bilmeniz gerekmez. Ya da bir dilde uzman olup çok kaliteli kod yazmak için dilin her komutunu bilmeniz gerekmez. Neleri öğrenmesi gerektiğine programcı lazım olduğu anda karar verir ve öğrenir. Örneğin hayatı boyunca pointere ihtiyaç duymayan programcı buna ihtiyaç duyduğuna kanaat getirirse bunu öğrenmek zorunda kalacaktır. Bellek her zaman bellek, işlemci her zaman işlemcidir; ne zaman öğrenmek isterseniz isteyin öğrenmesi aynı zorlukta olacaktır. Haliyle kişilere bu kavramları zorlaya zorlaya öğretip sonra hiç kullanmamak üzere unutmalarına yol açmak olsa olsa zaman kaybı olabilir. ( Esasında yapılacak işinizle alakalı olarak öğrendiğiniz hiçbirşey zaman kaybı değildir. Ama eğer amaç kısa yoldan iş sahibi olup para kazanmaksa ve buna bağlı olarak hayatınızın hiçbir döneminde mikro işlemcilerle ya da bellekle uğraşmayı düşünmüyorsanız iki dönem boyunca haftada üç saat boyunca aldığınız bu tip derslerin size hiçbir yararı olmayacaktır da denebilir. Çünkü unutacaksınız, daha doğrusu beyninize daha önemli bilgiler geleceği için bu bilgilerin önceliği düşecek ve hatırlamak neredeyse mümkün olmayacak, yeniden başlayacaksınızdır. )
Ama şunu da kendimden örnek vermek isterim. İlk C öğrendiğimde ve neredeyse herşeyini ezberime aldığımda editörü açıp “Eee, sonra?” diye bakakalmıştım. Uzunca süre ne yapacağımı düşünmüştüm. Ve sonunda yapacak birşey bulamayıp yüksek seviye dillere geçmiştim. Uzun süre yüksek seviye dillerde dolaştıktan sonra birgün pointer lazım olduğunda da ne yalan söyleyim o zaman ki C bilgimin işe yaramadığını söyleyemem. Ek olarak C bilgimin öğrendiğim diğer tüm dillerde ama öyle ama böyle çok işime yaramadığını söylesem de yalan söylemiş olurum. Fakat C üzerine harcadığım zamanı düşündüğümde buna değip değmediği konusunda da “Evet” ya da “Hayır” diyemem. Bence hayatımda yaptığım hem en mantıklı iş hem de oldukça gereksiz bir işti.
Yani aslında kararı verirken biraz da bu durumu gözönüne almak gerekiyor. İyi bir programcı (akademisyenlerin pointer nedir bilmesi belki şart olabilir. Sonuçta akademisyenlerden genelde çok iyi programcılar türemez. Bilmekle uygulamak arasındaki farkı herhalde hepimiz biliyoruzdur.) gerçekten hardware ile yakın bir ilişki kurmak zorunda mıdır? Ya da üst seviye dillerle çok kullanıcılı web uygulamaları yapan bir kişinin hardware’e olan yakınlığı ile düşük seviye dillerle hardware uygulamarı yapan bir kişinin son seviye dillere yakınlığı arasında bir bağlantı var mıdır? Ya da herkesin herşeyi bilmesinin asla mümkün olmadığı bir mühendislik alanında bazı işleri birilerine bırakıp kendimiz diğer şeylerle uğraşsak hata mı yapmış oluruz?
Aslında bu sorulara herkes farklı cevap verecektir. O sebeple aslında bana göre röportaj yapılmış kişinin bunun yanlış bir yol olduğunu söylemesi bence çok da doğru bir yaklaşım değil.
Bana göre ikisi de doğru yol, sadece tercihler farklı.
Tags: programlama, programlama dilleri
Entries (RSS)
framework programcıları veyada bazen veritabanı programcıları olarak nıtelendırıyorum ben bu ust seviyede calısan programcıları. ama pointerı hadı gecelımde o(n) nedır dedıklerınde dumur fecı oluyor
Pointer Bilmeyen Programcılar ve Gelecek…
Internet.com’da bir amerikalı profesör ile yapılmış bir röportaj yayınlanmış. Yazının başlığı Anti-Java’ Profesörü ve İşsiz Programcılar….
Pointer Bilmeyen Programcılar ve Gelecek…
Internet.com’da bir amerikalı profesör ile yapılmış bir röportaj yayınlanmış. Yazının başlığı Anti-Java’ Profesörü ve İşsiz Programcılar……
Çok ama çok güzel bir tartışma konusu bu. Benim düşüncem kesinlikle programcıların “pointer” bilmelerinin gerektiğidir. Sorun aslında burada pointer değil, bir programcı iş yaptığı sistemin çalışma prensiplerini bilmelidir. Pointer burda çok garip bir örnek aslında. Yani ram ne işe yarar ya da bellek nasıl kullanılır gibi şeyler önemlidir. Bunun yanında veri yapıları gibi konularda da bilgili olunması gerekliliğini düşünüyorum. Java ve .Net gibi platformlarda bu yapıların çoğu hazır gelsede, mesela oyun yazarken bunun bir anlamı olmaz. Kişisel olarak C/C++’la çalışmak bana her zaman diğer platformlardan çok daha fazla zevk veriyor. Çünkü herşey benim kontrolümde. Yani birşeyleri gerçekten “ben” yapıyorum. Ayrıca kendimden ve etrafımda bu gelenekten gelen insanlardan gördüğüm kadarıyla, high-level dillerle çalışırken bu bilgilerin daha “sağlam” kod yazmada işe yaradığını kesinlikle söyleyebilirim. Çünkü, bu gerçek programcılık. Takdir edersinizki “herşeyi” bilerek çalışmak çok daha üst seviye olur. Emin olun, bazı “yazılımcılar” (özellikle high-levelle başlamış) gerçekten pek birşey bilmiyorlar. Herşeyi kendi dar kalıplarında bildikleri kadar sanıyorlar. Bunu yıllardır görüyorum.
Tabi işe birde profesyonel açıdan bakarsak, high-level platformlarda yazılım geliştirmek zaman ve kalite bakımından çok daha verimlidir. Bu sebeple şirketler buna yöneliyorlar ve bence haklılarda.
[...] bir hayli uzaklaşmış durumdayız. [ Bu konu hakkında Faruk Enes'in çok güzel bir yazısı var ] . Ancak bazı durumlar oluyor ki pointer kullanmadan işin içinden çıkmanın maliyeti oldukça [...]