Programlamaya başlama sorunsalı // Hangi dili seçmeli?

egeklan

Katılımcı Üye
19 Eki 2012
961
1
Merhaba arkadaşlar. Bugün farklı bir yazı yazmaya karar verdim. Bunun en temel seçimi forumda sürekli “Hangi dili seçmeliyim”, “C++ öğrendim şimdi bununla ne yapabilirim?” gibi sorular görmem. Başlamadan önce sizi uyarayım. Bu yazıda hangi dili seçmeniz gerektiğini öğrenmeyeceksiniz. Programlamaya dil seçerek başlanmaması gerektiğini ve sanıldığından çok daha farklı olduğunu göreceksiniz.

Not: Yazı, Daron Yondem adlı bir youtube kanalının videosunun metine dökülmüş halidir. Kendi cümlelerim değildir. Herkese öneriyorum fakat 17 dakika insanlar izlemeye üşeniyor. Bende yazıya dökmek istedim. Video linki yazının altında var. Oradan dinleyebilirsiniz ancak ciddi ciddi 17 dakikanızı ayırıp dinleyin lütfen. Size çok şey katacaktır.


--------------------

Aslında bu sorunun cevabını kimse veremez, çünkü bu hayatın anlamını aramak gibi bir şey. Bu soru, öğle yemeğinde ne yemeliyim sorusuna benziyor. O kadar çok değişken var ki. Asıl soru şu, amacın ne? Ne yapacaksın? Bu programlama dili ile yapmak istediğin şey ne? Yani ben en kolay iş bulacağım programlama dilini arıyorum diyorsan, farazi atıyorum şuan bende javascript diyeceğim. Dediğim gibi, ne amaçla hangi programlama dili sorusunu soruyorsun.

Problem şu, zaten bu soru yazılım sektöründe 10 yılını geçirmiş biri tarafından sorulan bir soru değil. Bunu bir kere itiraf edelim. Bu yazıyı okuyorsanız büyük ihtimalle nasıl tercih edeceğinizi bilmiyorsunuz ya da aslına bakarsanız bu sorduğunuz sorunun ne kadar anlamsız olduğunu anlayacak veya anlamış olacak yaşta ya da deneyimde değilsiniz. Çünkü bu, bu kadar basit bir şekilde sorulamaz.

Soru şu şekilde gelirse, daha anlamlı olabilir. “Ben İPhone için uygulama geliştirmek istiyorum, hangi programlama dili?” Bu durumda bile “Objective C” mi “Swift” mi sorusuna geliriz ve karşınızdaki insan mutlaka cevap vermek için başka sorular soracaktır. Zaten programlama dillerinin ortaya çıkış sebebine bakarsak bir sorundan doğmuşlardır. Biri bir eksik görür ve bir programlama dili ile ortaya çıkar. Atıyorum “3D model render etmek zordu o nedenle böyle bir şey çıkardık” diyerek yeni bir programlama dili çıkardıklarını varsayalım. Buna “A” dili diyelim. Bu durumda siz eğer 3D uygulama geliştirmek istiyorsanız “A” dilini öğrenirsiniz.

Bir başka örnek olarak şunu çok fazla duyuyorum, “IOS için eğer data uygulaması yapacaksanız Swift, diğerleri için Objective C kullanmalısınız”. Yani özetle sen gelip İPhone için hangi programlama dilini seçmeliyim dediğinde karşındaki insan sana data uygulaması mı yapacaksın yoksa oyun mu geliştireceksin diye soracaktır. Yani detaylandırmak gerekiyor çünkü genel olarak sorulan bir soruya ancak çok genel ve anlamsız bir cevap verilebilir.

3aOZy0.jpg


Şimdi diyeceksiniz ki hangi programlama dili, atıyorum bende de dedim ki “C#”. İşte bu sefer de sizin şunu sormanız gerekmiyor mu? “Neden C#?” Sonra bende diyeceğim ki işte atıyorum “Hem Windows 10 hem Windows 8 için uygulama geliştirebilirsin”. Sende diyeceksin işte “Ben Windows uygulaması değil MAC uygulaması geliştireceğim”. Bende “Haa o zaman yine yapabilirsin ama şunu seçmen daha mantıklı” gibi bu muhabbet uzar gider.

Bu sorunun ısrarla sorulmasının temel nedeni, ilk olarak kolay yol arayışı. Sorunun özü aslında “Hangi dili öğrenmeliyim ki kendimi kurtarayım”. Genelde üniversite öğrencilerinde ya da meslek yüksek okullarındaki öğrencilerden duyduğum bu sorunun ardındaki asıl kaygı bu. Bir öğrenci olarak asıl kaygınız, ben ne öğrensem hayatımı kazanırım.

Yine başa dönmüş olacağız ama işin özü şu, kimse size bunu söyleyemez. Geleceğe baktığınızda noktaları birleştirip bir manzara görme şansınız yok. Hayatınızda yaşadığınız şeyleri anlamlandırabileceğiniz, neden sonuç ilişkisi kurabileceğiniz şeylerin hepsi geçmişteki şeylerdir. Gelecekteki şeylerle ilgili neden sonuç ilişkisi kuramazsınız. Kurmaya çalışırsanız, o kadar çok değişken var ki, tutturma ihtimaliniz çok düşük. Yani, “Ben şu programlama dilini öğreneyim, böylece şöyle şöyle başarılı olurum”. Bunu tutturma ihtimaliniz çok düşük, piyango oynamaktan bir farkı yok. Böyle şeyleri genelde hep geçmişe baktığınızda görürsünüz. “Aa evet şunu yapmışım, o sayede bak böyle oldu”. Ve geçmişte yaşadığınız deneyimlerden çıkardığınız derslerle de ileriye yönelik tahminleriniz güçlenmeye başlar.

Burada da sizden şöyle bir soru gelebilir. “Tamam, o zaman sen o geçmiş deneyimlerini paylaş bizimle, tahminlerini paylaş.” Paylaşabilirim fakat insandan insana da o kadar değişiyor ki bu. Yaşam tarzına göre, bulunduğunuz şehre göre, duygu ve düşüncelerinize göre, hedeflerinize göre her şey inanılmaz miktarda değişiyor. Yani ben evet en genel anlamda şunu diyebilirim, “Eğer Microsoft platformunda uygulama geliştireceksen, C# öğren. Şu an en geniş başarı yakalama şansın orada. En çok senaryoyu o kapsıyor.” Yani peki bu senin için, şahıs olarak doğru bir şey mi? Benim edindiğim bilgiler, deneyimler senin hayatınla ne kadar özdeşleşecek? Şimdi bu kaygıdan vazgeçmek lazım, çünkü bu birazda dediğim gibi kolay yol bulmak. “Bir programlama dili öğrensem kaptırsam gitsem”. Bu arada bu kaygıyı eleştirmiyorum. Bu çok doğal bir kaygı ve olması gerekiyor. Fakat bir yazılım uzmanı olarak, bir developer olarak, sizin şu noktaya gelmeniz lazım. Ben karşıma hangi programlama dilini çıkartırsan çıkart, hangi teknolojiyi ve platformu koyarsan koy, gerekli zaman verildiğinde, bunun ustası olurum ve bununla gerekli her şeyi yaparım. Bu noktaya gelebilmek tabii ki geçmişte bazı başarılar elde etmiş ve bunlarla kişisel güveninizi yükseltmiş olmayı da gerektiriyor. Bu da zamanla olacak bir şey. Bunu yaratmak içinde eğitim hayatınız boyunca ister lise, ister üniversite olsun, bir şey öğrenmek yerine bir şeye odaklanmayı öğrenmenizi tavsiye ederim.

Kişisel not: Dediğim temel nokta burası. Şu anda her birimiz bir dil öğrenmeye odaklanmış durumdayız. C++ öğreneyim ne biliyim Vb.Net öğreneyim gibi. Hâlbuki asıl odaklanmamız gereken yer, atıyorum bir crypter yazayım olmalıdır. Ne demek istediğimi daha iyi anlamak için yazıya devam edelim.

Proje yapın. Özetle muhabbeti buraya getireceğim. Proje yapın. Projeler yaptıkça, projeleriniz başarılı hale geldikçe, projeleriniz insanlar tarafından kullanılıp beğenildikçe siz şunu göreceksiniz. “Yahu ben hiçbir şey bilmiyordum, bir problemi çözmek istedim, bir proje yapmak istedim ve yapmak isterken bir sürü şey öğrendim, bir sürü problemle karşılaştım ve bunların hepsini atlattım. Bir şey çıkarttım ortaya ve insanlar beğendiler. Ben bunu yapabiliyorum. Benim yapabildiğim şey bu. Benim yapabildiğim şey C# kodu yazmak değil, benim yapabildiğim şey Java kodu yazmak değil, benim yapabildiğim şey bir yazılım geliştirici olarak bir problemi alıp, onunla ilgili gerekli her şeyi çözüp problemi halledebilmek”. Eğer bununla ilgili kişisel güveni yaratırsanız zaten ondan sonra başka bir tartışmaya gireceğiz. Yani ondan sonra artık ben ne öğrensem işsiz kalmam diye düşünmeyeceksiniz.

Ben şahsen kendi adıma, MAC ve IOS platformlarına hâkim değilim. Fakat bugün eğer ben bir yere gitsem ve IOS ile ilgili, Objective C ile ilgili Developer’lık yapmam gerekse, tamam eyvallah, yavaş olur başta. Çünkü hiçbir şey bilmiyorum. Fakat şuan tablet platformunda ne kadar uzmansam, bir nokta geldiğinde, gerekli zamanı ve emeği harcadığımda o platformda da aynı uzmanlığa geleceğimi biliyorum. E karşımdaki insanın da benden IOS uzmanıymışım gibi bir beklentisi olmasının gerçekçi olmayacağı ve akıllıca olmayacağını bildiğim için, kendimle ilgili bir problemde görmüyorum.

Programmer.jpg


Şimdi sizin de şu bakış açısından kurtulmanız lazım. “Ben ne öğrensem günü kurtarırım”. Böyle bir şey yok. Şu ana bakın, problem çözmeye odaklanın. Bakın ben bugüne kadar bir sürü insana mentorluk, abilik yaptım ve onların hayatlarının gidişatını da gördüm. Evet, 80 yaşında değilim hatta ben ilk üniversitede konuşma yaparken yaşıtlarıma konuşurdum. Ama bir sürü insanın bu yollardan geçtiğini gördüm. Kendim ve gördüğüm herkes dâhil olmak üzere, kimse planladığı hayatı yaşayamadı. Çok kaderci gözükmek istemiyorum ama bir söz vardır “Rüzgârın yönünü değiştiremezsin ama yelkeni sen kullanıyorsun”. Yani rüzgârı tahmin etmeye çalışma, yola çık. Çünkü çoğu zaman şurada takılı kalıyoruz. Daha yelkenliye binmemiş, yola çıkmamış, bi rüzgârı tahmin etme, bi planlama. Tamam, tabii ki hava durumuna bakacaksın ve hazırlık olacaksın. Ben demiyorum ki şimdi gidip hemen Pascal öğren. Demek istediğim yüzde yüz nokta atışı tutturmaya çalışıp bu kaygının içerisinde kaybolup gitme.

Özetle benim demek istediğim hangi programlama dili gibi soruları bir kenara koyun. Ne sizi heyecanlandırıyor ve hangi problemi çözmek istiyorsunuz, ne yapmak istiyorsunuz? Hedefi belirleyin ve ona göre ne öğreneceğinizi belirleyin. Çünkü dışarıda o kadar milyon tane şey var ki. Milyon tane teknoloji var. Eskiden bu kadar yoktu. Şimdi çok fazla öğrenilecek şey var, zaten hepsini de öğrenemeyeceksiniz. O yüzden ne yapmak istediğinizi belirleyin ve proje odaklı ilerleyin. Bir problem bulun ve onu çözmek için ne gerekiyorsa onu öğrenin. Bir şeyi öğrenmiş olmak için öğrenmeyin. Bir şeyi CV’nize yazmak için öğrenmeyin. Lütfen. Yani yok böyle bir şey. Birincisi gerçek hayat deneyimi sahibi olmuyorsunuz ikincisi öğrenmek bir şey başarmıyorsan motivasyon getirmez, bir şeyi başarıyor olman gerek. Çünkü yazılım geliştirici bununla motive olur. Ortaya kullanılan bir şey çıkartarak.

Kişisel not: İşte sonra “C++ öğrendim ne yapabilirim” ya da “Neden Python öğrenmeliyim” gibi sorular geliyor. Bu soruların cevabını siz vermelisiniz. Neden C++ öğrendiğinizi bilmedikten sonra C++ öğrenmenin bir faydası yok. C++ öğrenme sebebinizi bilmiyorsanız C++ öğrenmeniz gerektiği fikrine nereden kapıldınız?

Ne öğrendiğinizin bir önemi yok. Ortaya bir şey çıkartmak için ne gerekiyorsa onu öğrenin. Yani şu çok yanlış olur. Şimdi benim burada “Gelecek C#’da. C# öğrenin” demem ve herkesin de gidip bir C# kitabı alması, okuması bitirmesi yanlış. Yani düşünün 5000 kişi gitti C# kitabı aldı, okudu, öğrendi, bitirdi. Hee okey ne güzel toplum olarak bir adım daha ileri gittik. Böyle bir şey yok. Ne yapıyorsun sen bana onu söylemen lazım. C#’ı CV’ne yazdın ve biliyorum dedim. Varsayalım ki işyerine gidiyorsun. Sana sorulacak olan şey “Ne yaptın C# ile?”. “Kitap okudum öğrendim”. Bu mu yani?

Eğer içinizde bir şeyler yapmalıyım isteği varsa, önemli bir şey bu, evet bir şeyler yapın. Ama yapmanız gereken şey kitap alıp, okuyup arka arkaya bin tane şey öğrenmek değil. Yapmanız gereken şey problem çözmek. Etrafınıza bakın, etrafınızdaki insanlara bakın, etrafınızdaki firmalara bakın. Bir problem bulun, onu çözmek için çalışın ve o problemi çözün. Odaklanmanız gereken şey bu. Yapmanız gereken şey belirli bir teknoloji ya da dilin hiçbir şey yapmadan uzmanı olmak değil. Böyle bir uzmanlık yok. Öğrenirsiniz kitaptan ve anlatırsınız. Bu ancak başarısız bir öğretmen olmanızı sağlar.

-----------

Umarım bu yazıdan sonra da bu tarz sorular gelmeye devam etmez. Ben bu soruyu sormayı bu videoyu izledikten sonra bırakmıştım. Herkesle paylaşmak istedim. Yardımı dokunduysa ne mutlu bana.

Video link: [ame="https://www.youtube.com/watch?v=O6bgCHYkxbg"]Daron Yondem // Gerçekten Hangi Programlama Dilini Öğrenmeli?[/ame]
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.