Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
19 Mayıs 2017

Programlama ve Kariyer

Akin Eğitim ve Seminer, Programlama, Yazılım Mühendisliği

Mayıs ayı başında Malatya, İnönü Üniversitesi’nin düzenlediği Robocofest‘te katıldım ve “Programlama ve Kariyer” isimli bir sunum yaptım. Bu sunumun PDF dosyasına şu yazıdan ulaşabilirsiniz. Şimdi ise bu sunumu biraz daha geniş bir şekilde burada ele almak istiyorum.

Programalama nedir?

Bazı şeyleri, onları yapan, icra edenler üzerinden tanımlamak daha kolaydır. Programlama yapan kişiye programcı (programmer) denir. Peki, programcı kimdir? Programcı tabi ki kafein ve pizzayı yazılıma dönüştüren organizmadır 🙂 Bizim ülkemizde buna sigarayı da eklemek gerekir. Çünkü bekar olan ve muhtemelen bir kaç bekar arkadaşıyla aynı evde yaşayan, kariyerinin başındaki genç programcı arkadaşımızın odasına girdiğinizde hemen göze çarpacak şeylerin başında, izmaritle dolup taşmış küllükler gelir. Aynı odaya gece 2-3 gibi girerseniz dumandan programcıyı seçememe ihtimali de vardır.

 

 

Bir işi yapanı gözlemlemek o işle ilgili size çok şey anlatır. Dolayısıyla programcıları, tabi ortamlarında gözlemlemelisiniz. Programcıların kendilerine has hal ve hareketleri, çoğunlukla başkalarına garip gelir. Çok odaklı çalışırlar mesela, işin karmaşıklığı da zaten bunu gerektirir. O yüzden çalışırken rahatsız edilmek istemezler, açık ofis ortamlarında kulaklık takarak çalışmaları tam da bu yüzdendir. Bu sebepten, onların verimli çalışmalarını isteyen yöneticileri, programcıları zaman zaman aşağıdaki gibi korumaya alabilirler. Tehlikeli kimyasallarla ya da radyoaktif maddelerle uğraşanların da özel, korumalı ortamda çalışmalarından farklı bir şey değildir bu durum. Dolayısıyla bu fotoğraf

 

 

ya da bu fotoğraf,

 

 

programcılar için hiç de anormal değildir.

Peki geyiği bırakıp biraz ciddi olalım ve “hakikatten programlama nedir” diye soralım. Programlama kısaca,
• bilimdir (science),
• sanattır (art),
• mühendisliktir (engineering)
• ve zanaattir (craftmanship).

Programlama, her ne kadar harcıalem yani hemen herkesin yapabileceği, üstesinden kolayca gelebileceği bir şeymiş gibi görünse bile, aslen o kadar da basit değildir. Hayatımıza çok girmiş işleri genel olarak basite alma eğilimindeyizdir, taa ki onun içine girinceye kadar. Aslen “programlama nedir” konusunda daha önce burda bir dizi yazı yayınladım:

  • Programlama Nedir: Programlamanın Tabiatı ve Programcılık Üzerine – I
  • Programlama Nedir: Programlamanın Tabiatı ve Programcılık Üzerine – II Bilim mi, Mühendislik mi, Sanat mı Yoksa Zanaat mı?
  • Programlama Nedir: Programlamanın Tabiatı ve Programcılık Üzerine – II Bilim mi, Mühendislik mi, Sanat mı Yoksa Zanaat mı?

Bu yazılarda anlatmaya çalıştığım şey, programlamanın çok disiplinli (interdiciplinary) bir alan olduğu ve hiç bir şekilde harcıalem bir uğraşı olmadığıdır.

Yukarıda programlamanın neliği ile bu kadar uğraşmışken neden şimdi başka bir yazı yazdığımı sorarsanız eğer, burada daha çok programlamayı bir kariyer olarak gören gençlere yönelik bir kaç tavsiyem olacak. Ama bu tavsiyelerin anlam ifade etmesi ve bütünlük için için programlamanın neliğinden kısaca yine bahsetmek gerekecek.

Programlama Bilimdir.

Programlama, bilimdir çünkü programlama, matematiktir. Programlama, temelleri mantık ve cebir olan, aksiyomlara sahip, kendine has notasyonu olan bir uygulamalı matematik disiplinidir. Programlama ile genelde daima bir algoritma yazılır. İster çok karmaşık bir hesap yapın, mesela Newton Raphson yöntemiyle kök hesaplayın, ister bir sigorta poliçesinin fiyatını hesaplayın, isterseniz de KDV hesabı kadar basit bir şey yapın, daima bir algoritma yazarsınız. Grafik kullanıcı arayüzleriyle uğraşıyor olsanız ve bir düğme tıklanınca onun olayını (event) halletseniz de yazacağınız şey bir algoritmadır. Peki nedir algoritma?

Algoritma Nedir?

Tabi ki algoritma, programcıların ne yaptıklarını açıklamak istemediklerinde kullandıkları, mistik bir terimdir!

 

  • Nedir problem?
    • Algoritma abi!
  • Neden gecikti bu iş böyle?
    • Algoritmadan kaynaklanan bir problem var!

Tabi ki abartıyorum, keşke bu topraklarda iş alanı ile ilgili konuşmalarımızda algoritma vb. terimleri kullanarak formal konuşabilsek. Bizim konuşmalarımız daha çok “şu button tıklanınca falan şey gözükmüyor” tipinde, dıdının dıdısı cinsinden, hiç bir şekilde bağlamı içermeyen, detayda boğulan konuşmalardır. Bu problemin ne anlama geldiğini anlamak, başka yerlerde de olup olmayacağını ortaya çıkarmak için 2-3 soru daha sormanız gerekir! Neyse, algoritma, matematiksel bir ifadedir ve “bir işin yapılış şeklinin tarifidir öyle ki içinde iş kurallarının olduğu bir süreci barındırır” denebilir kısaca. Dolayısıyla program yazmak, algoritma yazmaktır, dolayısıyla matematiktir. Algoritmik düşünceyi daima sevmelisiniz iyi bir programcı olmak için. Bu yüzden üniversitelerde programlamayı, tipik olarak farklı türdeki algoritmalar üzerinden anlatırlar. Ama master yaparken saf algoritma dersi alırsınız, herhangi bir programlama dilinden bağımsız, sadece matematiksel, cebirsel bir faaliyet olarak öğrenirsiniz algoritmaları. Hatta güvenlik (security) vb. konularda apayrı yapıda algoritmalara odaklanırsınız.

Geyik de olsa algoritma kelimesine yüklenen “karmaşıklık” algısı aslen, her meslek gibi programcıların da kendilerine has bir dilleri olduğunu ifade etmeye yarar. İngilizce’de “sadece ehlinin bildiği” anlamına gelen “esoteric” terimi kullanılır bu gibi durumlar için. Bu topraklarda her ne kadar henüz örneğin doktorlar kadar formal ve esoterik konuşamazsak da programcılık, tamamen esoterik bir dile sahiptir. Matematiksel tabanlı olan bu esoterik dili ne kadar iyi bilirseniz o kadar iyi programcı olursunuz.

Programlama Sanattır.

Soyut oluşu ve örneğinin olmaması, yaratıcılık gerektirmesi ve yapanın kişisel özelliklerine bağlı olması, programlamayı bir sanat yapar. Programlama matematiktir dedik ama zaten matematikte de sanatsal taraf yok mudur sizce? Hemen hiç bir programlama yapısı bir diğerinin aynısı hatta benzeri bile değildir, her programlama birimi kendi başına tekildir, “unique”dir. Aynı sanat eserleri, tablolar, müzik eserleri, filmler, romanlar gibi. Dolayısıyla ciddi bir kurgu içerirler.

Programlamayı sanat görenlerin başında, bu dünyaya en çok emeği geçmiş, Stanford Üniversitesi’nden emekli, Donald Knuth gelir. Çok özel ilgi duymuyorsanız muhtemelen sadece doktora yaparken karşılaşacağınız kitaplardan olan, Knuth’un en büyük eseri The Art of Computer Programming‘in  ismi de bunu yansıtmaktadır. Knuth bu kitabında programlamadaki estetik tecrübeye de vurgu yapar.

 

 

 

 

 

 

 

 

Programcılar, yaptıkları işi tanımlarken, “aşk”, “tutku”, “bağımlılık” gibi kelimeleri çok kullanırlar. Muhtemelen, zekanın çıktısını, programlama kadar açık ve hızlı görebilen fazla meslek uğraşı yoktur. Bu yüzdendir ki normal insanlar uyanmak, programcılar uyumak için saat kurarlar!

 

Programlama Mühendisliktir.

Programlama bir problem çözme yöntemidir, programlama amaç değil araçtır. Süreçseldir, kodun geliştirilmesi, testlerinin yazılması ve çalıştırılması, dokümantasyonu vb. çalışmalar, programlamanın parçalarıdır. Bu yönüyle programlama bir mühendislik disiplinidir.

Yazılım Geliştirme Nedir?

Yazılım geliştirme, merkezinde programlamanın olduğu bir mühendisliktir. Yazılım Mühendisliği (Software Engineering), programlama yanında, analiz, tasarım, test, yönetim vb. faaliyetlere sahiptir. Fakat programlama, esas çıktıyı üretendir, dolayısıyla koskoca projedeki tüm hata, performans, gecikme vb. şeylerden hatta faturanın kesiminden bile sorumlu olan kısımdır. (Bu sebeple, mesela ülkemizde yazılım mühendisliğini programlamaya indirgeme, ya da programcılığı, yazılım mühendisliği olarak görme eğilimi çok yaygındır.) Bu yüzden programcılık cesaret ister!

 

Programlama Zanaattır.

Usta-çırak ilişkisi ile öğrenilmesi, ciddi el (ve zihin) yatkınlığı gerektirmesi ve yapanın kişisel özelliklerine bağlı olması, programlamayı, bir zanaat (craftmanship) kılmaktadır. Her zanaatta olduğu gibi programlamada da kullanılan araçlar ve iş yapış şekilleri vardır.

 

Diğer Mühendislikler Arasında yazılım Mühendisliği

Programlama da, yazılım geliştirme de çok karmaşıktır, muhtemelen mühendislikler arasında en karmaşık olandır.

 

Ama herşeye rağmen yazılım geliştirme takımının görevi, basitlik illüzyonu yaratmaktır. Belki de tam da bu yüzden programcılık ve yazılım geliştirmek ülkemizde, harcıalem bir uğraşı olarak görülmektedir.

Programcı Olmak İçin

Yukarıda anlattıklarım, belli bir bilgi temelini, zihinsel işleyişi ve nihayetinde çalışma şeklini vurguluyor. Elbette çalışma ile herkes herşeyi yapabilir, başarabilir. Ama mutlu olur mu ya da fark yaratır mı? Sanırım bu sadece çalışma ile ilgili bir durum değil, belki, sevme, tutkuyla bağlanma, uygun olma gibi kavramlar giriyor işin içine.

Bence iyi bir programcı olmak için şu özellikler düşünülmeli:

  • Farklı soyutlama seviyeleri arasında rahatça gezebilen, matematiksel bir zeka,
  • Aynı anda pek çok faktörü yönetebilen detaycı bir zeka,
  • İğne ile kuyu kazabilen bir sabır taşı ve tutkulu bir psikoloji.

Özellikle Türkiye’de, tüm bunların altından kalkabilmek için strese de dayanıklı olmalısınız. Programcılık keyiflidir ama bu ülkede keyifsiz insanlar, programcılığı eziyete dönüştürürler.

Eğer programlama konusunda, kendinizi yukarıdaki özelliklere sahip görüyorsanız, iyi bir programcı olabilirsiniz hatta olun, insanlığa katkıda bulunun. Aksi taktirde bu dünyanın sonu değildir, bilgisayar mühendisliği vb. bir bölümde okuyor olsanız bile, kariyerinizde mutlu olmak için analist, tester, ağ, veri tabanı, vb. sistem yöneticisi vb. pozisyonları tercih etmeyi düşünün.

Programlama-Yazılım Kültürümüz

Açıktır ki, ülkemizdeki programlama kültüründe zanaat tarafı ağır basmaktadır. Zanaatlarda da, ülkemizdeki programlama pratiğinde de, öğrenmede formal eğitim yerine bakıp-görerek öğrenme, problem çözmede de sistematiklik yerine deneme-yanılma ile çözme, iş yapış şekillerinde yaratıcılık yerine araçlara ve teknolojiye bağlı kalma öne çıkmaktadır. Ülkemizdeki programcıların en büyük yardımcısı copy-paste ve Google’dır. Bu anlamda programlama ve yazılım geliştirme kültürümüz, toplumsal kültürümüzün bir yansımasıdır. Bu yüzden sıradan bir programcı olmak yerine fark yaratmayı hedefliyorsanız zanaatkar olmakta ileriye gitmeye çabalamalısınız. Bu yüzden:

  • Formal eğitime muhakkak önem verin. Yani üniversite 2. sınıfta iken “Java’yı ve Android’i öğrendim, şimdi ne öğreneyim” diye sormayın. Matematiğiniz 90 ve üzerinde mi? Algoritmalar ve Veri Yapıları dersinden sınıfın en iyisi misiniz? Bu sorulara hayır diye cevap veriyorsanız sorduğunuz soru zaten yanlış bir sorudur. Hele üniversitede BM’e girdiği ilk sene, binlerce lira para vererek şehrideki bir kursa yazılıp, Windows makinanın TCP/IP ayarlarının nasıl olacağını öğrenmeyi marifet sayanlardan olmayın. İşletim Sistemleri dersinden zor geçip sonra Linux öğreneceğim diye de yırtınmayın. Linux’te komut satırında ihtiyacını giderecek kadar bir şeyler yapmak ya da yasaklarla boğuştuğumuz canım ülkemizde bir kaç IP ayarını hızlıca yapabilmek, işte tüm bunlar zanaatin ta kendisidir! Dolayısıyla Linux öğrenin ama bir Linux de ben nasıl yazarım diye hedefleyin. Algoritmaları ezberlemeyin, şunu şöyle seçseydik nasıl çalışırdı diye akıl yürütmeyi alışkanlık edinin. Temel derslere, işletim sistemleri, algoritmalar, db, network, discrete matematik, vb. çok önem verin. Formal eğitiminizi çalışırken de devam ettirin, master-doktora yapın, sertifika alın örneğin.
  • Sistemli çalışın. Sistemli çalışmak için muhakkak, temelden ileriye doğru gidin ve odaklanın. Kerat cetvelini bilmeden integrali öğrenmeye kalkmayın, öğrenemezsiniz çünkü, sadece ezberlersiniz ve başarısız olursunuz.
  • Odaklanın. Aslında odaklanmak, sistemli çalışmanın bir alt parçası ama önemine binaen ayrı bir başlık altına aldım. Çok sıklıkla görüyorum, ilgisiz pek çok konuyu abur-cubur bir şekilde öğrenmeye çalışanları. Zaten bu şekilde öğrenme de olmuyor, bilgi sahibi olmadan fikir sahibi olunuyor. İyi tanımlanmış ve özelleştirilmiş, spesifik hedeflere sahip olun.  Örneğin 3 senelik BT çalışanı, hem PM sertifikası almış şimdi de SQL eğitimi alıyor, seneye de Cisco kursuna gitmekten bahsediyor! Nedir şimdi bu? Eğer PMP, SQL ve Cisco ile bir şey başarılabiliyorsa, bunları gerekli kılan bir hedef varsa eyvallah ama aksi taktirde zaman, enerji ve zeka kaybı!

Bu türden eleştiri ve tavsiyelere, bizim sektöre katılacak gençlerden çok aslında sektörümüzün ve üniversitelerimizin ihtiyacı var, bunun çok fena şekilde farkındayım. Siz istediğiniz kadar iyi olun sektörümüz iyiyi aramıyor, iş bitiriciliğe prim veriyor. Ya da üniversiteler hatta çok daha öncesinde başlayan eğitim sistemimiz, edep-terbiye adı altında sorgulamamayı, ezberlemeyi kutsamış durumda. Dolayısıyla yurt dışına gitmeyi, gerek eğitim gerek profesyonel olarak çalışmak amacıyla oralarda bir miktar yaşamayı kesinlikle hedef edinin. Yukarıdaki tavsiyelere ne kadar uyarsanız bunu yapmak o kadar kolay olacaktır.

Programlama, keyiftir 🙂

 

Toplam görüntülenme sayısı: 1148

15 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
16 Mayıs 2017

Programlama ve Kariyer Sunumu

Akin Eğitim ve Seminer, Kariyer, Programlama programlama, programlama nedir

Mayıs ayı başında Malatya, İnönü Üniversitesi’nin düzenlediği Robocofest‘te katıldım ve “Programlama ve Kariyer” isimli bir sunum yaptım. Sunuma aşağıdaki bağlantıdan ulaşabilirsiniz.

Programlama ve Kariyer
Programlama ve Kariyer
Programlama-ve-Kariyer-06052017.pdf
1.3 MiB
1149 Downloads
Ayrıntılar
Yazar:Akin Kaldiroglu
Gereksinimler:PDF Reader
Kategori:Seminer
Lisans:GNU General Public License
Tarih:16 Mayıs 2017

Ayrıca hem İnönü Üniversitesi’ne, hem bu etkinliğin sponsorlarına hem de bizi güleryüzle karşılayan ve rahat etmemiz için etrafımızda koşuşturan öğrenci arkadaşlar çok teşekkür ederim.

İyi okumalar 🙂

Toplam görüntülenme sayısı: 461

4 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
30 Aralık 2016

Java ile Nesne Merkezli Programlamaya Giriş Eğitimi

Akin Eğitim ve Seminer, Java Java, Java'ya nasil baslarim

Sevgili Java-severler,

Verdiğim eğitimlerden olan “Java ile Nesne Merkezli Programlamaya Giriş”in kendi hazırladığım konu anlatım sunumlarını ve derste kullandığım tamamı kendime ait olan örnek kodlarını zaten Java Dersleri sayfasında öteden beri paylaşmaktaydım. Bu sayfada artık bu eğitimin konu anlatımlarını içeren videoları da var. Youtube’da oluşturduğum bir çalma listesi (play list) içinde var olan 39 tane video ile bu dersin yaklaşık 17 küsür saatlik konu anlatımlarını seyredebilirsiniz. Dolayısıyla yapmanız gereken, sunumlar ile örnek kodları içeren projeyi indirmeniz, projeyi Eclipse’de açarak çalışabilir hale getirmeniz ve sonrasında da Youtube’daki videoları seyrederek Java’yı öğrenmeye başlamanızdır.

Programlama dili öğrenmek zordur, çok ve sık, sürekli okumak ve kod yazarak, var olan kodu evirip çevirerek, ufak-tefek projeler yazarak, pratik yapmak gerekir. Ülkemizdeki programcılık kültürü, zanaat kültürüdür, dolayısıyla formal bir eğitime ve bilgiye dayanmadan, sadece bakarak-görerek ki modern zamanlarda bakılıp görülen yer ya var olan koddur ya da Google’dır, derme çatma, gelişi güzel, “çalışsın yeter” anlayışıyla kod yazıp ve yazılım geliştirdiğimizden, malesef bu tür formal öğrenim ve öğretim imkanlarına yeterince değer vermiyoruz. Bu videolarla çok daha formal bir şekilde, sistemli olarak, en başından itibaren Java’yı öğrenebilirsiniz. İyi bir developer olmak, Java sertifikalarını almak hatta  hatta yurt dışına çıkmak isteyenler için faydalı olacağını umuyorum.

Eğitimlerdeki her türlü eksiklik ya da yanlışlık için için şimdiden özür dilerim. Bu konularda beni uyarırsanız sevinirim.

Bol Java’lı günler dilerim 🙂

Toplam görüntülenme sayısı: 985

23 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
28 Eylül 2016

Agile Summit Turkey 2016

Akin Eğitim ve Seminer

Sevgili Javaseverler,

6 Ekim’de yapılacak olan Agile Summit Turkey 2016 etkinliğinde olacağım nasipse. Orada olanlarla tanışıp sohbet etmekten keyif alırım.

Ayrıca ertesi günü 1 günlük Design Patterns eğitimim olacak, ona gelmek isteyen olursa yine bu sayfanın altındaki eğitimler kısmından ilerleyerek kayıt yaptırabilir.

Design Patterns @ Agile Summit

Toplam görüntülenme sayısı: 417

13 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 5 6 7 8 9 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Popüler Yazılar ve Sayfalar

  • Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – I
  • Nasıl Yazılımcı Olalım? – II: Hangi Bölümü Okuyalım?
  • Oracle’ın Java SE Sertifikaları: OCA, OCP ve OCM
  • Java Kurulumu ve İlk Programımız
  • İş Analisti İş Tanımı
  • Java Tutorial ya da Kendi Kendine Java Öğren
  • Nasıl Yazılımcı Olalım? – I: Üniversiteli mi Alaylı mı?
  • Tasarım Kalıpları
  • Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim?
  • UML Nedir?

Yazı Kategorileri

Yazı Takvimi

Haziran 2025
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2025
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...