Tag Archives: programlama

Boş Zamanlarda Kod Yazmamak Beni Kötü Programcı Yapar mı?

Boş zamanlarımda kod yazmamak beni kötü bir programcı mı yapar? Sadece işte yaptığım programlama benim için yeterli olmaz mı? Bu ikisi arasındaki denge nasıl kurulur? Bir boyacı, boş zamanlarında da boya yaparak daha iyi bir boyacı mı olur? Bu konulardan bahsetmeye çalıştım bu videoda.

➡️ Videonun başında da bahsettiğim gibi, programlamada “pratik” yapmak gerçekten çok önemli. Belki de ben de bu yüzden Twitch‘te yaptığımız CodinGame yayınlarına oldukça önem veriyorum. Fakat “pratik” her şey demek değildir. Bunun yanında, programcı olarak kazanabileceğiniz önemli yetenekler de mevcut. Bunlara örnek olarak aşağıdakileri verebiliriz;

✨ Çalışma arkadaşlarınız ile ilişkileriniz

✨ Bir “takım oyuncusu” olmak

✨ Farklı bir programlama dili ve/veya framework öğrenmek

✨ Bir enstrüman çalmak

➡️ Bir diğer açıdan bakarsak, yazılım geliştirme sektöründe olan herkes bu işi severek yapmıyor. Bu sektörün maddi açıdan kendileri için yeterli bir getirisi olması bazı insanlar için en büyük nedenlerden biri. Bu kişilerin fikrimce potansiyellerinin yeterince kullanmadıklarını düşünüyorum. Çünkü bir çok insan, severek yaptıkları işler konusunda, bunlardan bir “hobi” oluşturma eğiliminde oluyorlar. Yani ben zaten severek yaptığım işi yapıyorum, bunun karşılığında bir ücret alıyorum, ek olarak “farklı bir şeyler de üretebilirim” düşüncesiyle bunu bir hobi haline getiriyorlar.

➡️ Tabi bu söylediklerimi, işyerinde yaptıkları işlerden tatmin olanları kapsamıyor. Eğer siz bu şanslı gruptaysanız, boş zamanlarınızda programlama yapmamak gayet doğal bir hal alır. Yine de, yazılım geliştirme gibi rekabetin olduğu bir ortamda, boş zamanlarında kendilerini farklı şekilde geliştiren kişiler ile rekabet etmek durumundasınız.

✨ Ayrıca Matt Might’ın “Tips for work-life balance” isimli yazısını okumanızı tavsiye ederim: http://matt.might.net/articles/work-life-balance/

✨ Stack Overflow’daki “Nobody has to lose in work/life balance” yazısı: https://stackoverflow.blog/2020/07/01/nobody-has-to-lose-in-work-life-balance/

Programlama Becerİnİzİ Gelİştİrmek İçİn Uygulayabİleceğİnİz 8 madde

Programlama becerinizi geliştirmek için yapabileceğiniz en etkili yöntemlerden bahsetmeye çalışacağım bu videoda. Hepsi muhtemelen daha önce duyduğunuz kavramlar fakat hepsinin teker teker incelenmesi ve öğrenilmesi gereken konular olduğunu düşünüyorum.

➡️ Sizden daha zeki insanlarla çalışın. Söylendiği gibi “Bir odada en zeki sizseniz, muhtemelen yanlış odadasınızdır”. Gerçekten de öyle. Sizden daha zeki insanlarla çalışmak sizi her zaman yukarıya çekecektir. Onlardan çok şey öğreneceksiniz bu süreçte. Ayrıca zeki insanlarla çalışmaya nasıl alışabileceğiniz ile ilgili şuna göz atabilirsiniz: https://www.quora.com/How-did-you-adjust-to-working-with-smarter-people

➡️ Herkesi dinleyin. Junior, senior, kıdemli ve guru olsun, herkesi dinleyin. İş ünvanı her şey demek değildir. Kimden farklı fikirler alabileceğinizi tahmin edemezsiniz.

➡️ Farklı diller ve framework’ler öğrenmek. Farklı diller ve framework’ler öğrenmek, bunları düzenli olarak kullanmayacak olsanız bile size farklı bir bakış açısı katar. Bu tarz yapıların genel programlama yapılarını nasıl kullandıklarını ve sizin hali hazırda kullandığınız yapılar ile karşılaştırarak aralarındaki farkları öğrenebilirsiniz.

➡️ Best practice’leri iyi öğrenin. Yazdığınız kod ve ortamlar ile ilgili best practice’leri en iyi şekilde öğrenin. Bu pratikler yıllar boyunca insanların tecrübeleri ile oluşmuş şeylerdir. Bunları dikkate alın ve düzenli olarak bunları uygulamaya çalışın. Günümüzde bu pratikleri uygulamanızı sağlayabilecek bir çok uygulama da mevcut. Faydalanın. https://en.wikipedia.org/wiki/Best_coding_practices

➡️ Zeki insanların hataları nasıl ele aldığını izleyin. Bu insanların hata ve sorun durumlarını nasıl ele aldıklarını gözlemleyin. Sorunun temeline inme yöntemlerini ve çözüm bulma becerilerini iyi olarak öğrenin.

➡️ Jack of all trades, master of none “Hiçbirinin ustası olmayın, ancak çoğu zaman bir ustadan daha iyi olun”. Evet biraz karmaşık bir tavsiye gibi gelebilir ama, tıpkı Moore yasasının dediği gibi: “Bildiğiniz şeylerin yarısı 18-24 ay içinde modası geçmiş olacak”. https://en.wikipedia.org/wiki/Jack_of_all_trades,_master_of_none ve https://tr.wikipedia.org/wiki/Moore_yasas%C4%B1

➡️ Yazdığınız kodtan daha çok kod okuyun. Kod okumak zor olabilir sizin için. Eskiler “iyi programcılar yazdıkları kodtan daha fazla kod okurlar.” derler. Kesinlikle katıldığım bir önerme. Profesyonel insanların kodlarını okuyun. Hem zevk alırsınız, hem de çok şey öğrenirsiniz. Ayrıca şu linklere de göz atabilirsiniz;

💡 Reading other peoples code – https://youtu.be/mrXHf71lYrs

💡 Learn to Read the Source, Luke – https://blog.codinghorror.com/learn-to-read-the-source-luke/

➡️ Düzenli spor yapın. Sadece programlama için değil, hayatın her alanında gerekli spor yapmak. O yüzden düzenli olarak (tavsiyem koşu) spor yapmanızı şiddetle tavsiye ederim.

💡 Why Programmers Should Exercise – http://gallabytes.com/2014/02/why-programmers-should-exercise.html

💡 Sports and Programming – https://christinalee.github.io/DCLondon2019/

💡 How important is exercising for programmers? Does it help with becoming a better programmer? – https://www.quora.com/How-important-is-exercising-for-programmers-Does-it-help-with-becoming-a-better-programmer

Sizlerin de verebileceğiniz tavsiyeler varsa videonun yorumlar kısmına yazabilirsiniz.

Codecademy “Learn C#” Online Programlama Eğitimi – [5. Kısım]

Codecademy üzerinden “Learn C#” adındaki programlama eğitiminin 5. kısmını bu Twitch yayını ile tamamladık. Bu yayında konuştuğumuz konu başlıkları şu şekilde;

➡️ C# içerisinde döngüler nasıl kullanılır?

➡️ for döngüsü – for (initialization; stopping condition; iteration statement)

➡️ while döngüsü – while (condition)

➡️ do..while döngüsü – do { statement; } while (condition);

➡️ foreach döngüsü – foreach (type element in sequence) { statement; }

➡️ Jump statements – break, continue, return

🔥 1. Kısım: https://www.youtube.com/watch?v=0X7bEBSxygg

🔥 2. Kısım: https://www.youtube.com/watch?v=ziJPCgzvQjE

🔥 3. Kısım: https://www.youtube.com/watch?v=KGaN0O9Nf2U

🔥 4. Kısım: https://www.youtube.com/watch?v=iWGew-FZCmU

👍 İlk ziyaretiniz mi? O zaman sizi şöyle alalım: https://bit.ly/sonergonul-youtube-subs

✅ Codecademy: “Learn C#” online programlama kursu: https://www.codecademy.com/learn/learn-c-sharp

Codecademy Kodlama ve Programlamaya Giriş Eğitimi – [1. KISIM]

Codecademy üzerinden “Learn How to Code” adındaki programlama eğitiminin ilk kısmını hep birlikte bu Twitch yayını ile tamamladık. Bu yayında konuştuğumuz konu başlıkları şu şekilde;

➡️ Programlama, kodlama nedir?

➡️ Programlamada değişken kavramı nedir? Nerelerde kullanılır?

➡️ Programlamada kullanılan genel veri tipleri nelerdir?

➡️ Programlamada aritmetik operatörler nasıl çalışır?

➡️ Programlamada karşılaştırma operatörleri nasıl kullanılır?

➡️ Progralamada mantıksal operatörler nasıl kullanılır?

➡️ Programlama fonksiyonlar nasıl ve nerede kullanılır?

Kanalıma ilk ziyaretiniz mi? O zaman sizi şöyle alalım: https://bit.ly/sonergonul-youtube-subs

Codecademy: “Learn How To Code” online programlama kursu: https://www.codecademy.com/learn/learn-how-to-code

✅ Online Kurslar:

– Codecademy: https://www.codecademy.com/

– Khan Academy: https://www.khanacademy.org/

– MIT Open Course: https://ocw.mit.edu/courses/

– Stanford Online Course: https://online.stanford.edu/

– FreeCodeCamp: https://www.freecodecamp.org/

– Coursera: https://www.coursera.org/

Merhaba Youtube! Merhaba Twitch! Nasıl Bir Programlama Yayını Yapmak İstiyorum? [İlk Yayın]

Twitch üzerinden düzenli olarak yapmayı planladığım programlama yayınlarının akışını konuştuk bu videoda. Bu yayınlarda genel olarak kullanacağımız online kaynakları aşağıda listeledim, siz de istediğiniz sayfayı bookmark’larınıza ekleyip kullanabilirsiniz.

✅ Online Kurslar:

– Codecademy: https://www.codecademy.com/

– Khan Academy: https://www.khanacademy.org/

– MIT Open Course: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/

– Stanford Online Course: https://online.stanford.edu/courses-programs – FreeCodeCamp: https://www.freecodecamp.org/

– Coursera: https://www.coursera.org/

✅ Veri Yapıları ve Algoritmalar:

– GeeksForGeeks: https://www.geeksforgeeks.org/

– LeetCode: https://leetcode.com/

– VisualGo: https://visualgo.net/

– Data Structure Visualizations: https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

✅ Yazılım Kitapları:

– Code Complete 2

– Cracking the Coding Interview

✅ Competitive Programming:

– Codingame: https://www.codingame.com/home

– LeetCode: https://leetcode.com/

– SPOJ: https://www.spoj.com/

– Codewars: https://www.codewars.com/

– Kattis: https://open.kattis.com/

✅ Eğlence

– Satranç: https://www.chess.com/

– Ekşi Sözlük: https://eksisozluk.com/

– GeoGuessr: https://www.geoguessr.com/

– Human Benchmark: https://www.humanbenchmark.com/

Neden Programlama Bu Kadar Zor?

Üniversiteye ilk başladığım yıllarda – ki programlama ile tanışmam bu senelere denk geliyor – programlamanın kolay olduğunu düşünüyordum. Neden zor olduğunu düşünmeliydim ki? Bir insanın ürettiği makinaya input’ları gönderip, makinın bu inputları işlemesi ve insanların anlayabileceği output’lar üretmesi bana hep kolay görünüyordu.

 

 

 

 

 

 

 

 

 

Programcı’nın Wikipedia’daki tanımına bakarsak şöyle yazıyor;

A programmer, computer programmer, developer, coder, or software engineer is a person who writes computer software. The term computer programmer can refer to a specialist in one area of computer programming or to a generalist who writes code for many kinds of software.

Bu yüzden bence programlamayı zorlaştıran nedenlerin başında Software development process’in bir derya deniz olması geliyor;

  • Harika bir input iletme
  • Harika bir output oluşturma
  • Input’ların açık ve sade bir şekilde dokümantasyonu
  • Programın dokümantasyonu
  • Programın test edilmesi
  • Problemin iyi belirlenmesi
  • Problemin çözümünün iyi belirlenmesi
  • Ve dahası..

Bu maddelerin hepsi daha derinden incelendiğinde programlama’nın temelinde şunun olduğuna inanıyorum;

 

Programlama problem çözmektir!

Aslında bir program, bilgisayara bir problemi nasıl çözeceğini anlatır. Zira üzerinde yaşadığımız dünya problemlerle dolu ve bilgisayar biliminde bile çözülemeyen birçok problem var hala.

Fakat bilgisayardan büyük bir problemi çözmesini istediğinizde, genellikle ona bu problemi oluşturan birden fazla küçük problemlerin çözümünü anlatmak zorundasınız. Daha basit problemleri çözdüğünüzde, bilgisayara nasıl çalışması gerektiğini anlatan programları yazmak her zaman daha kolay olacaktır.

Bir macar matematikçi olan George Pólya, How to Solve It: A New Aspect of Mathematical Method isimli kitabında problem çözmeyi şöyle özetlemiş;

  1. Problemi anla.
    • Problemi kendi sözcüklerinizle tanımayabilir misin?
    • Problemi daha iyi anlamak için bir resim veya diagram çizebilir misin?
    • Çözümü bulmak için yeterli bilgi mevcut mu?
    • Problemin içerisindeki tüm kelimeleri anladınız mı?
    • Cevap almak için soru sormaya ihtiyacınız var mı?
  2. Bir plan yap.
    • Tahmin et.
    • Sıralı bir liste yap.
    • Olasılıkları ele.
    • Özel durumları değerlendir.
    • Denklemleri çöz.
  3. Planı uygula.
  4. Çalışmanı gözden geçir.

Peki ya bir problem için plan yapmak problemin kendisiyse? O probleme nasıl hamle yapacaksınız?

Pólya bu konuda şunu belirtmiş;

If you can’t solve a problem then there is an easier problem you can solve. Find it.

Peki bu ne işe yarar?

  • Daha basit problemlerin çözümü sizi daha zor problemlerin çözümüne teşvik edebilir.
  • Basit problemlerin çözümü özgüveni arttırmak için iyi bir pratiktir. Böylece basit problemlerin çözümünü içeren bir kod ile çalışmaya başlamanız size başarıya ulaştırmada yardımcı olacaktır.
  • Zor problemleri çözmede başarısız olsanız bile daha basit problemleri çözmek size kredi kazandırır.

Hemen bir örnek verelim. Bilgisayarda konsol üzerinden ardı ardına celsius ölçeğinde girilen 10 sıcaklığın Kelvin cinsinde karşılıklarını bulan bir program yazalım. Bu problemin çözümünde şu şekilde bir yol izleyebiliriz mesela;

  • Bilgisayarda konsol üzerinden girilen sadece bir değerin Kelvin değerindeki karşılığını bulmayı öğrenin.
  • Belki de bu çok zordur. O zaman bilgisayarda girilen değerlere matematiksel işlemleri uygulamayı öğrenin.
  • Belki de bu çok zordur. O zaman bilgisyara konsol üzerinden girilen sayısal değerin saklamnasını öğrenin.
  • Belki bu da çok zordur. O zaman bilgisayara konsol üzerinden sayısal değer girilmesini öğrenin.
  • Belki bu da çok zordur. O zaman bir konsol uygulaması oluşturmayı öğrenin.
  • Belki bu da çok zordur. O zaman kullandığınız dil ile Hello World yazmayı öğrenin.
  • Belki bu da çok zordur. O zaman kullandığınız IDE’yi açmayı öğrenin.

Kodlama problemlerinde de şu şekilde yollar vardır;

  • Eğer dikdörtgen çizmede bir sorununuz varsa, bunun yerine problemi çizgiler çizmeye indirgeyebilir misiniz? Peki ya noktalar oluşturmaya?
  • Eğer diskte bulunan bir text dosyasının içini okumada sorununuz varsa, bunun yerine problemi kendi yazdığınız string’leri okumaya indirgeyebilir misiniz?

 

Programlama için kötü koşullar

Eğer buraya kadar okuduysanız, programlamanın zorluğu hakkında bilgi sahibi olmuşsunuzdur. Neyseki, bu yüzden çalışma ortamları da programlamayı daha zor hale getirmek için tasarlanıyor. Muhtemelen birçoğumuz konsantrasyonumuzu bozacak gürültülere, konuşmalara, cep telefonu seslerine aşikar ortamlarda çalışıyoruz. Jeff Atwood – ki kendisi Stack Overflow kurucularından biridir – The Programmer’s Bill of Rights isimli yazısında bir programcıya sağlanması gereken tüm fiziksel ve çevresel gereksinimleri anlatıyor;

It’s unbelievable to me that a company would pay a developer $60-$100k in salary, yet cripple him or her with terrible working conditions and crusty hand-me-down hardware. This makes no business sense whatsoever. And yet I see it all the time. It’s shocking how many companies still don’t provide software developers with the essential things they need to succeed.

 

Programlama zor değil, sadece zaman alır

Hayatımda okuduğum en iyi yazılardan biri kesinlikle Peter Norvig’in yazdığı Teach Yourself Programming in Ten Years isimli makalesi.

Herhangi bir kitapçıya gittiğinizde Teach Yourself Java in 7 Days (7 Günde Java Öğrenin) benzeri, size birkaç günde veya birkaç saatte Visual Basic, Windows, Internet (vs.) öğretmeyi vadeden kitaplarla karşılaşırsınız.

Birkaç günde, Beethoven, Kuantum Fiziği ya da köpek eğitimi öğreten kitaplar yok. Bu sonuçlara bakılırsa, ya insanlar bilgisayar hakkında yeni şeyler öğrenmek için çok hevesli ve aceleci ya da bu iş bir şekilde inanılmaz derecede kolay.

İlk olarak 7 gün kayda değer programlar yazarak, yazdığınız programlardaki başarı ve başarısızlıklarınızdan ders almanıza yetecek bir süre değildir. Ne tecrübeli bir programcıyla çalışmaya, ne de o ortamın içinde yaşamanın nasıl bir şey olduğunu anlamaya zamanınız olmayacaktır. Bu durumda sadece yüzeysel bir aşinalıktan bahsedilebilir, derinlemesine bir kavramadan değil. Kısacası dili iyi öğrenmeye fırsatınız olmayacaktır. Alexander Pope’nin de söylediği gibi bir “yarı bilgili olmak çok tehlikelidir”.

Bu yazıyı ne zaman okusam, hemen aklına üniversiteden mezun olup 2-3 yıl bir şirkette tecrübe edindikten sonra “Senior Developer” olan arkadaşlarım gelir. Biraz üzücü buluyorum bu durumu doğruyu söylemek gerekirse zira onlar muhtemelen “yarı bilgili” konumundalar. Bir kısmının artık işyerinde verilen işleri yerine getirmekten başka uğraşı yoktur. Kitap okumazlar, blog yazmazlar, blog okumazlar, kod okumazlar, open source projelere katkıda bulunmazlar, başka programcılarla iletişim kurmazlar, programlama konusunda insanlara yardımcı olmazlar vs vs..

Fakat bu bir yarış değil. Kendinizi başka programcılarla karşılaştırmayın. Jeff Atwood Why I’m The Best Programmer In The World isimli yazısında şöyle diyor;

But it’s not our job to be better than anyone else; we just need to be better than we were a year ago.