Yetenek
Ne yalan söyleyeyim, bana göre yetenek bu işin önemli bir parçası. Bir programlama dili öğrenmek ve bunu kullanarak bazı programla geliştirmek için çok fazla yeteneğe ihtiyacınız yok tabi ki, ama bana sorarsanız, bu konuda yol almak için yetenek önemli bir faktör. Şöyle düşünün, neredeyse herkes şarkı söyleyebiliyor değil mi? Ancak, herkesin iyi bir şarkıcı olmasını bekleyemeyiz. Bence, programcılık konusunun da bundan bir farkı yok. Herkes program yazabilir, ama herkesin iyi bir yazılımcı olmasını bekleyemeyiz.
Bence programcılık, matematik, dil, sistemli düşünce, sembollerle ve soyut düşünebilme gibi alanlarda yetenekli olmayı gerektiriyor. Aslına bakarsanız, programcılığın teorik kısmının, matematikten pek bir farkı yok. Dolayısıyla, iyi bir programcı olabilmek için, bu alanlarda iyi bir kavrama gücü gerektirdiğini düşünüyorum.
--------------------------------------------------
Merak
Merak iyi bir programcı olmak için sahip olmanız gereken bir özellik, çünkü, sizi araştırmaya ve kurcalamaya itecek olan güç, bu merak unsuru olacak. Yukarıda bahsi geçen yeteneklere sahip olsanız da, eğer bu konuda bir merakınız yoksa, programcılık sizi heyecanlandırmıyor ise, bu konuda fazla bir yol katedemezsiniz.
Meraklı olmadan, saatlerce gcc belgerini kim okur ki? Ya da, oturup yeni bir programlama dili öğrenmeye kalkar. Programcılık alanında sizi iteleyebilecek tek şey meraktır. O yüzden, inancım şu ki, para karşılığı bu işle uğraşan kişiler, bu işi merak ve ilgisinden yapan kişiler kadar yol alamazlar. Yanlış anlaşılmasın, meraklı kişilerin bu alanda para kazanmasından bahsetmiyorum. Programcılık konusunda meraklı olmayıp, sırf parası için (veya hacker olmak için :/) programcılık yapanlardan bahsediyorum. Meraklı olan kişiler, iş dışı saatlerde de kendileri için kod yazarlar, farklı şeyler denerler, kendilerini sürekli bir adım ileriye götürürler. O yüzden, iyi bir yazılımcı olmak için, meraklı olmanız gerekir.
---------------------------------------------------
Zaman
Programcılıkta ilerlemek için zamana ihtiyacınız olacak, hem de çok zamana. Özellikle, asıl işiniz programcılık değilse, boş vakitlerinizi iyi değerlendirmeniz, ve doğru şekilde kendinizi geliştirmeniz gerekiyor. Bu alanda pratik yapılması ve öğrenilmesi gereken o kadar çok şey var ki, tüm ömrünüzü adayan biri bile, tümünü öğrenemez.
----------------------------------------------------
Farklı paradigmalara sahip diller öğrenin
Farklı paradigmaların, farklı hayat görüşleri var. Eğer farklı paradigmalara ait diller öğrenirseniz, programcılığa bakış açınızı genişletebilirsiniz. Önerilerim;
C: Prosedürel, low-level ve linux sistem programcılığı konusunda yaygın kullanılan bir dil. Ayrıca, algoritma ve veri yapıları çalışmalarınızda kullanabilirsiniz.
Java: Kullanım alanı yaygın olan, tam anlamıyla bir nesne tabanlı programlama dili. C'ye nazaran daha üst seviye veri yapıları, garbage-collection ve exception-handling özellikleri olan bir dil. Bu dil benim çok hoşuma gitmedi, ama öğrenmenin eğitsel bir değeri var. Design Patterns öğrenirken de kullanılabilir.
Haskell: Saf fonksiyonel, kafanızı zonklatacak bir dil. Paralel işlem özelliği dilin içine işlenmiş. Yaklaşık 4-5 gün uğraştıktan sonra, devam edemeyip bıraktım. (Ahh o monadlar yok mu!) Ama, bu uğraştan sonra Python kodlarım bir hayli güzelleşti. Bu arada, Python'un bazı özellikleriniHaskell'den arakladığını biliyor muydunuz?
Python: Duck-Typing
------------------------------------------------------------
İngilizce
İngilizce öğrenmek önemli, çünkü, bu işin kaynağı İngilizce. Evet, internette Türkçe kaynaklar var ama bunlar İngilizce kaynaklarla kıyaslanamaz. Programların ve kütüphanelerin orjinal belgeri, mail grupları, kullanıcı blogları hep ingilizce. Eğer Türkçe kaynaklara bağımlı kalırsanız, ne kadar yetenekli ve meraklı olursanız olun, kısıtlanacak ve kendinizi geliştirmek için gerekli kaynaklara ulaşamayacaksınız. O yüzden, Türkçe konuşan programcılar için İngilizce iletişim kurabilme yeteneği bir zorunluluk.
------------------------------------------------------------
Ne yalan söyleyeyim, bana göre yetenek bu işin önemli bir parçası. Bir programlama dili öğrenmek ve bunu kullanarak bazı programla geliştirmek için çok fazla yeteneğe ihtiyacınız yok tabi ki, ama bana sorarsanız, bu konuda yol almak için yetenek önemli bir faktör. Şöyle düşünün, neredeyse herkes şarkı söyleyebiliyor değil mi? Ancak, herkesin iyi bir şarkıcı olmasını bekleyemeyiz. Bence, programcılık konusunun da bundan bir farkı yok. Herkes program yazabilir, ama herkesin iyi bir yazılımcı olmasını bekleyemeyiz.
Bence programcılık, matematik, dil, sistemli düşünce, sembollerle ve soyut düşünebilme gibi alanlarda yetenekli olmayı gerektiriyor. Aslına bakarsanız, programcılığın teorik kısmının, matematikten pek bir farkı yok. Dolayısıyla, iyi bir programcı olabilmek için, bu alanlarda iyi bir kavrama gücü gerektirdiğini düşünüyorum.
--------------------------------------------------
Merak
Merak iyi bir programcı olmak için sahip olmanız gereken bir özellik, çünkü, sizi araştırmaya ve kurcalamaya itecek olan güç, bu merak unsuru olacak. Yukarıda bahsi geçen yeteneklere sahip olsanız da, eğer bu konuda bir merakınız yoksa, programcılık sizi heyecanlandırmıyor ise, bu konuda fazla bir yol katedemezsiniz.
Meraklı olmadan, saatlerce gcc belgerini kim okur ki? Ya da, oturup yeni bir programlama dili öğrenmeye kalkar. Programcılık alanında sizi iteleyebilecek tek şey meraktır. O yüzden, inancım şu ki, para karşılığı bu işle uğraşan kişiler, bu işi merak ve ilgisinden yapan kişiler kadar yol alamazlar. Yanlış anlaşılmasın, meraklı kişilerin bu alanda para kazanmasından bahsetmiyorum. Programcılık konusunda meraklı olmayıp, sırf parası için (veya hacker olmak için :/) programcılık yapanlardan bahsediyorum. Meraklı olan kişiler, iş dışı saatlerde de kendileri için kod yazarlar, farklı şeyler denerler, kendilerini sürekli bir adım ileriye götürürler. O yüzden, iyi bir yazılımcı olmak için, meraklı olmanız gerekir.
---------------------------------------------------
Zaman
Programcılıkta ilerlemek için zamana ihtiyacınız olacak, hem de çok zamana. Özellikle, asıl işiniz programcılık değilse, boş vakitlerinizi iyi değerlendirmeniz, ve doğru şekilde kendinizi geliştirmeniz gerekiyor. Bu alanda pratik yapılması ve öğrenilmesi gereken o kadar çok şey var ki, tüm ömrünüzü adayan biri bile, tümünü öğrenemez.
----------------------------------------------------
Farklı paradigmalara sahip diller öğrenin
Farklı paradigmaların, farklı hayat görüşleri var. Eğer farklı paradigmalara ait diller öğrenirseniz, programcılığa bakış açınızı genişletebilirsiniz. Önerilerim;
C: Prosedürel, low-level ve linux sistem programcılığı konusunda yaygın kullanılan bir dil. Ayrıca, algoritma ve veri yapıları çalışmalarınızda kullanabilirsiniz.
Java: Kullanım alanı yaygın olan, tam anlamıyla bir nesne tabanlı programlama dili. C'ye nazaran daha üst seviye veri yapıları, garbage-collection ve exception-handling özellikleri olan bir dil. Bu dil benim çok hoşuma gitmedi, ama öğrenmenin eğitsel bir değeri var. Design Patterns öğrenirken de kullanılabilir.
Haskell: Saf fonksiyonel, kafanızı zonklatacak bir dil. Paralel işlem özelliği dilin içine işlenmiş. Yaklaşık 4-5 gün uğraştıktan sonra, devam edemeyip bıraktım. (Ahh o monadlar yok mu!) Ama, bu uğraştan sonra Python kodlarım bir hayli güzelleşti. Bu arada, Python'un bazı özellikleriniHaskell'den arakladığını biliyor muydunuz?
Python: Duck-Typing
------------------------------------------------------------
İngilizce
İngilizce öğrenmek önemli, çünkü, bu işin kaynağı İngilizce. Evet, internette Türkçe kaynaklar var ama bunlar İngilizce kaynaklarla kıyaslanamaz. Programların ve kütüphanelerin orjinal belgeri, mail grupları, kullanıcı blogları hep ingilizce. Eğer Türkçe kaynaklara bağımlı kalırsanız, ne kadar yetenekli ve meraklı olursanız olun, kısıtlanacak ve kendinizi geliştirmek için gerekli kaynaklara ulaşamayacaksınız. O yüzden, Türkçe konuşan programcılar için İngilizce iletişim kurabilme yeteneği bir zorunluluk.
------------------------------------------------------------



