3 dk, tahmini okuma süresi
CS dersleri almadan veya Veri Yapıları (data structures) ve Algoritmalar gibi temel bilgileri öğrenmeden de kesinlikle bir web geliştiricisi olabilirsiniz. Ancak bu derslerin (veya kursların) belli nedenlerden dolayı var olduklarını unutmayın.
Web geliştirme kurslarının çoğu HTML, CSS ve temel JavaScript ile başlar. Bunlar, üzerine web geliştirme bilginizi oluşturacağınız temel bilgiler olarak kabul edilebilir. Web geliştirmeyle ilgili ilginç olan şey eğer sanatçı bir tarafınız varsa, parlamak için her fırsata sahipsininiz. Web siteleri tasarlayabilir ve bunları kendiniz çalışır hale getirmek için kod yazabilirsiniz. Çok az CS bilgisi ile web siteleri geliştirebilirsiniz ve bunula ilgili hiçbir problem yok. Hatta bir junior web dev. olarak iş bulabilir ve çok temel CS bilgisi ile teknoloji (veya yazılım) kariyerinize başlayabilirsiniz. Ancak front-end geliştirmeden daha fazlasını yapmanız gerektiğinde ne olacak?
Çevrimiçi bulabileceğiniz kursların çoğu CS temelleri açısından çok sınırlı. Ortalama bir öğrenenin sadece iş fikirlerini gerçekleştirmek veya teknoloji alanında bir kariyere başlamak için pratik bilgiler edinmeye çalışması anlaşılabilir bir durum. Çoğu zaman bir js kursundan sonra öğrendiğiniz şey döngülerin, değişkenlerin ve fonksiyonların ne olduğudur. Kapsamları (scopes), thread'in ne olduğunu, OOP'nin (object-oriented-programming) ne olduğunu vb. öğrenmek için fazladan yol kat etmeniz gerekecek. Elbette öğrenciye bu konular hakkında daha derinlemesine bilgi veren kurslar da var, ama bu kurslar temel kurslardan çok daha az popüler. İnsanlar ya temeller kurslardan memnunlar ya da sadece temel kurslara baktıktan sonra öğrenmekten vazgeçiyorlar. Ama web geliştirme kurslarının mevcut durumu bu.
Her şeyden önce, diğer programlama dillerini araştırdıysanız, yüzeyde çok benzer olduklarını fark etmiş olmalısınız. Döngüler, değişkenler, fonksiyonlar vb. Yani temelleri öğrenmek gerçekten hiç sorun değil. Benim için durum böyleydi en azından.
JavaScript'e alıştıktan sonra PhP ve Python öğrenmeye başladım. Python öğrenmek için temel motivasyonum veri bilimini anlamaktı (data science). Yani tamamen doğrudan web geliştirme ile ilgili değil. PhP öğrenmemin sebebi tamamen iş piyasasındaki şansımı arttırmaktı. Pek çok web geliştirme işinin en azından temel PhP bilgisi gerektirdiğini fark ettim. Diller arasındaki farklar benim için çok küçüktü. Bu yüzden Python ve PhP ile çalışmak eğlenceli bile diyebilirim.
Benim için diller arasındaki farklar, yukarıda açıkladığım gibi, çok küçüktü. Ancak bu farklılıklar, Veri Yapıları ve Algoritmalarına girdiğinizde çok daha önemli bir hale geliyor. Yazdığınız fonksiyonların maliyetini anlamaya başlıyorsunuz. Uygulamalarınız için oluşturduğunuz yapılar daha önemli hale geliyor. Bu yüzden CS temellerini web geliştirmeyi öğrenmenin bir sonraki adımı olarak görüyorum. Performans, özellikle dünya çapında birçok kişi tarafından kullanılacak karmaşık bir web uygulaması geliştiriyorsanız çok önemlidir. Google'ın tam olarak aradığınız web sitesi olmasa da en alakalı olanları vermek için milyonlarca web sitesini bir saniyeden daha kısa sürede nasıl aradığını hiç merak ettiniz mi? CS öğrenirken bunun nasıl olabilceğine dair kendi teorilerinizi oluşturmaya başlayacaksınız.
After learning CS fundamentals you will understand more of the code you write, and you won't need to just memorize code. When you understand how things work the way they work, problems are just challenges for you that in time you can overcome. You learn from the errors you face and you don't repeat them in the future.
CS'nin temellerini öğrendikten sonra, yazdığınız kodun çoğunu anlayacaksınız ve sadece kodu ezberlemeniz gerekmeyecek. İşlerin nasıl yürüdüğünü anladığınızda, sorunlar sizin için zamanla üstesinden gelebileceğiniz zorluklardan başka bir şey olmayacaktır. Karşılaştığınız hatalardan ders çıkaracaksınız ve gelecekte bunları tekrar etmeyeceksiniz.
Her şeyden önce, web geliştirme zaten yeterince karmaşık gelebilir. Web uygulamaları oluşturmak için kullanabileceğiniz çok sayıda çerçeve (web frameworks), dil, css kitaplığı (libraries) vb. var. Hepimizin bildiği gibi, dökümanları okumak asla yeterli olmayacak. Neler olup bittiğini anlamak için birkaç uygulama geliştirmelisiniz. Bunların hepsi zaten çok zaman alan şeyler. CS hakkında öğrenmeye başlamak, web geliştirme bilginize güvendiğinizde ve web geliştirme hakkında öğrenebileceğiniz pek bir şey olmadığını hissettiğinizde yapılabilir.
Web geliştirmede, kurslarınızdan topladığınız bilgilerin çoğu pratiktir. Kodunuzun ne yaptığını tarayıcınızda hemen görebilirsiniz ve bu şekilde öğrenmek çoğumuz için daha eğlenceli. CS'de çoğu zaman matematik ve soyut yapılarla (ve kavramlarla) uğraşacaksınız. Bu kavramların derinliklerine inmenize gerek yok. Web geliştirmede ulaşmak istediğiniz noktaya ulaşmadan önce CS temellerini öğrenmeye başlarsanız, bunalmış hissedebilir ve hatta bırakabilirsiniz. Bu nedenle, çok fazla şey yaptığınızı düşünüyorsanız, bir ara verin ve durumunuzu yeniden değerlendirin. Bu bir maraton, kısa mesafe koşusu değil.
Gururla söyleyebilirim ki öğrenmeyi çok seviyorum. Her şey hakkında öğrenmeyi seviyorum. İlk etapta web geliştirmeyi öğrenmeye başlamamın nedeni de buydu. Sadece web siteleri oluşturmayı öğrenmek istedim ve yaptığım için gayet memnunum. Ama öğrenmeyi seven biri olarak benim için bile, bazen CS ve CS'de kullanılan matematiği öğrenmek zaman zaman zordu. Kimsenin cesaretini kırmak istemem ama bence başlamadan önce karşılaşacağınız zorlukların farkında olmalısınız. Bu şekilde bir çalışma programı oluşturabilir ve tükenmişlik sendromunu önleyebilirsiniz.
Hiç CS eğitimi almamış geliştiriciler olduğunu ve CS eğitimi almış olanlar kadar başarılı olduklarını görebilirsiniz. Siz de onlardan biri olabilirsiniz. Ama bence teknoloji sektöründe başarılı olmak, bir iş kurmak, bir hizmet sağlamak veya olabileceğiniz en iyi geliştirici olmak istiyorsanız, bir noktada CS bilgisine ihtiyacınız olacak.
Ilker Akbiyik