Akıcı Kod Yazma

Arkadaşlar merhaba,

Ben sizden çok genel bir konuda yardım isteyeceğim. İstediğim çoğu projeyi yapabiliyorum, ancak kendi başıma destek almadan (yapa zeka, forum vb…) yazamıyorum. Uzun süredir kod yazıyorum ama bunu aşamıyorum. Bu konuda beni yönlendirmenizi rica ediyorum. Çünkü iyi bir yazılımcı kendi başına belirli bir süreden sonra proje yazabilmeli diye düşünüyorum…

Tek başına proje tabiki yapabilirsin ama ChatGPT gibi birşeyi tek başına yapmak pek mümkün değil. Google gibi bir arama motoru yapmak tek kişinin boyunu aşar. Yani tek kişi olarak hangi ölçekteki projeleri gözüne kestirmişsin birşey diyemiyorum, yapay zeka araçlarını kullanarak tabiki de çeşitli projeler yapabilirsin ama insanlık için ne kadar etkileyici birşey ortaya çıkar bilmiyorum.

Konu ile ilgili özelde çalışan deneyimli arkadaşlar sektörün gerçekleri açısından daha faydalı bilgi verebilirler.

Konuya şöyle bakmanda fayda olabilir. 21. yy’da bireyde olması beklenen bazı beceriler var. Bu becerilere sahip olanların gelecekte daha iyi yerlerde olacağı ön görülüyor. Söz konusu becerilerden birisi de iletişim ve işbirliği. Takım çalışmasına yatkınlık (uyum). Demek istediğim bir ekibin uyumlu bir parçası olarak çok daha süratli ilerleyebilirsin. Hem sektörün bir yazılımcıdan beklentisini de görmüş olursun.

Aşağıdaki bağlantıyı göz ucuyla da olsa incelemeni tavsiye ederim, dünya gelecekte bu tarz insanlarla çalışmak isteyecek (Kaynak öyle diyor, zamanla şartlar değişebilir tabiki). MEB de öğretim programlarında bu becerilere odaklandı.

https://medium.com/@atolyeminizma/21-yüzyıl-becerileri-nelerdir-e6303a9606db

2 Beğeni

Nasil destek aliyorsunuz?
Ilk akla gelen yontem, destek almadan yazmaya calismaniz.

Forumdaki konulara baktigimda Selenium ve scraping ile ilgili yardim aldiginizi goruyourm. Uuzun suredir bunu yapan biri olarak, Selenium dokumentasonunun linki bookmark’lariniz arasinda mi?
Yillardir kullanmadigim halde PostgreSQL bende havadurumu ile GitHub arasinda duruyor hala. Java’yi da gecen sene sildim, yerine ESP-IDF geldi.

Selenium kullanan bir suru kod yazdiginiza gore mutlaka kendinizi tekrar etmissinizdir. Bu tekrarlari birer fonksiyona, sinifa, kutuphaneye cevirdiniz mi?
Mesela ben [Py]OpenGL ile iki projede gurestikten sonra sunu cikarttim. Ayni zamanda PyPI kullanmayi ogretti. Daha sonra grafik motorlarinin hemen hepsinde gereken frame/FPS zamanlamasi kodu elektronik isinde cikinca su 50 satirlik kutuphaneyi gelistirdim. pygame.time.Clock’tan daha dakik calisiyor.

Python’un logging modulu neredeyse cok iyi. Ciktiisni duzelten kod yillardir o veya bu sekilde bir yerlerde duruyordu, her projede kopyaliyordum. Arayuzunu belirleyip baska bir ufak kutuphaneye cevirdim. Artik testleri var ve pip ile yuklenebiliyor.

Scraping/selenium’un etrafindaki konulara hakim misiniz? HTTP RFC’sini okudunuz mu? Kendi scraper’inizi, browser’inizi yazmayi denediniz mi? Burada selenium ile ilgili soru soran arkadaslara yardim ediyor, kodlarini inceleyip duzeltmeler oneriyor musunuz?

Iliskiniz Selenium’a uyuz olacak kadar ilerledi mi? Sacmaliklarini -bazen kimse sormasa bile- listeleyebiliyor musunuz? Yeni cikan versiyonlarin changelog’larina bakiyor musunuz, birisi sonunda duzeltmis mi diye? Kod reposunu kopyaladiniz mi, kendiniz duzeltmeye kalktiniz mi?

6 Beğeni

Çok güzel şeyler yazmışsınız. Teşekkür ederim. :pray:

Birçok kütüphane kullanarak proje yapıyorum. Ama zaman oluyor ki döngü oluşturmak için bile yapay zekadan destek alıyorum.Projede neler yapacağımı biliyorum ve tüm projeleri tek başımada yapabiliyorum, algoritma mantığını da biliyorum. Ama artık yavaştan medium-senior seviyelerine geçmek istiyorum. Ne kadar kod yazsamda hep kendimi tekrar ediyor gibiyim.

Basit aslında artık destek almayacaksın. Karışık bir fonksiyona mı ihtiyacın oldu, basit parçalara ayırıp tamamını kendin yazacaksın. Yapay zeka toollarına karşı değilim ancak olayı tamamen anlayıp artık senin için yazmak zaman kaybı olacağı zaman yapay zeka toolları işine yarar bu senaryoda. Ki projelerin karmaşıklığı arttıkça ya da yeni teknolojiler kullandıkça yapay zekanın hatta forumların da yararı olmayacak.

Eğer bazen döngüde dahi sorun yaşıyorsan programlama becerini geliştirmek için herhangi bir yardım almadan hackerrank gibi sitelerden alıştırma sorularını yapabilirsin. Biraz geliştikten sonra clean code gibi kitaplardan yardım alarak temiz kod yazmayı öğrenebilir, solid prensiplerini ve tasarım kalıplarını öğrenerek kodlamada daha da geliştirebilirsin kendini.

Kodlamada artık belirli bir seviyeye gelince de proje yapmak istersen gideceğin ilk kaynak dokümantasyon olmalı. Dokümanda her zaman her şey yazar. Aldığın hatalarda da debugger kullanmayı öğrenerek hata analizi yapmayı öğrenebilirsin.

Ben de iyi bir yazılımcı sayılmam. 4 5 yıl olmadı yazılım sektörüyle ilgilenmem ama şunu söyleyebilirim ki projeyi bir şekilde bitirmektense temiz ve geliştirilebilir kod yazarak sorun aldığında dokümanlarla işin içinden çıkman çok daha geliştirecektir seni.

Ps. Eksiğim ya da yanlışım olduysa daha tecrübeliler düzeltirler.

3 Beğeni

Teşekkür ederim, çok mantıklı tavsiyeler. :pray:

Merhaba,

Ben bunun yanlış olduğunu düşünüyorum. (Daha doğrusu eksik) Her zaman her şey dökümanda yer almaz. Dökümanı yetersiz, ama source code larında yorum satırlarında olayı anlatan open source projeler gördüm, örneğin.

Bu arada ben de bir iki kelam etmek istiyorum. Bence akıcı yazmanın en iyi yollarından birisi,başkasının yazdığı kodları incelemek. Ben böyle geliştirdim kendimi, hala da geliştiriyorum. Modul veyahut third party kütüphaneleri kullanırken bir hata ile karşılaştığımda asla source code’u modifiye etmekten korkmadım, anlamak istediğim yere gidip print atıp source code daki ilgili fonksiyonun nasıl çalıştığını anlamaya çalıştım. Ve bunu yaparken bug bulup 1k yıldızı olan open source bir projeye katkıda bile bulundum.

Ama bana kalırsa bütün bunlar emek istiyor, çünkü ilgili açık kaynak projeyi yüzlerce kişi geliştiriyor, yıllarca emek veriliyor, ha diyince anlamak da kolay değil, içine girmek lazım. İçine girmekten korkmamak lazım.

Bir de her zaman döküman açacaksın, gerekirse soracaksın, gerekirse chatgpt ye sorup belli oranda yardım da alacaksın. Hatta gerektiği durumlarda third party kütüphanenin maintainerine soru bile soracaksın kaçarı yok, üzülmeye vs. gerek de yok. Ama azaltmanın yolu da tecrübe edinmek, tecrübeyi de daha önce bir şeyi tecrübe etmişlerden öğrenmek de belli yerden sonra sana ivme kazandırıyor.

2 Beğeni

Merhaba, ben çalışırken bir yerde hata yapıyorum aslında neyi yanlış yapıyorum onu anlamak niçin sizlerden bilgi istedim. Günde saatlerce çalışıyorum ve sürekli proje, alıştırmalar yapıyorum. En kolay sitelere bile girip soru çözüyorum, egzersiz yapıyorum. Ama bir türlü istediğim seviyeye gelemiyorum. Zekam ile ilgili bir sorun olduğunu düşünmüyorum açıkçası :smiley: Gerektiğinde sabahlara kadar da çalışırım. Ama şu günlerde biraz hevesim kırılmaya başladı, hep yerimde sayıyorum. Hele ki piyasada çok iyi yazılımcılar varken ve her gün daha iyileri gelirken kendimi çok yetersiz görmeye başladım…

Bu şahsi fikrimdir, bal yiyen baldan usanır diye bir söz var. Her yiğidin yoğurt yiyişi de fakklıdır, bu yüzden insandan insana da değişmekle birlikte, ben kendi açımdan konuşmak istiyorum. Bilgisayar mühendisliği son sınıf öğrencisiyim. Bu dönem backend i ile beraber mobil uygulama çıkarmaya çalıştık. Proje için o kadar uğraşıyorduk ki ben artık ne ekrana bakmak istiyordum ne de müzik dinlemek istiyordum, benim alanım bile değildi. Arada bana da geliyor usanıklık açıkcası. O yüzden kendime paylar bırakıyorum. Mental olarak da dinlenmek lazım. Benden sana tavsiye, dinlenme payları koy araya, sürekli uğraşma. Çok çalışma var efektif çalışma var. (kastım tembellik değil)

Soru çözebilirsin yine. Ama bence bir fikir bulup onun üzerine uğraşmanı tavsiye ederim. Ben sana örnekler veriyorum. Basit bir forum sitesi, basit bir quiz oyunu sitesi (kahoot gibi felan ama daha basit). Yada bir projeye yeni bir özellik eklemeye çabalayabilirsin. Kendimden örnek vereyim, Linux Mint’in iso kalıp yazıcısı olan mintstick e flash belleğe yazdırma yaparken durdurup devam ettirebilme özelliği getirmeye çalışmıştım. Başarısız oldum. Ama bana threading’den tut linuxa kadar belli oranda bir şeyler kattı bu proje.

Benim bu forumda sorduğum ilk soru şuydu mesela: “kullanıcıya şifre soracağım, eğer 15 saniye içinde şifre girilmezse uygulamayı kapatacağım, Şifre yanlış girilirse uygulamayı direkt kapatacağım bunu nasıl yapabilirim?” Bunu sorduğumda istihza belgelerini yeni bitirmiş biriydim, foruma soru sormadan önce de basit bir konsolda hımbıl oyubu yazmaya çalışıyordum.

Sonraları edebiyat hocama mobil uygulama yapabilmek amacıyla kivy modulunu öğrenmeye kalkmıştım.

Kısaca anlatmak istediğim, kafanda bir fikir belirleyip bunu gerçeğe dönüştürmek seni geliştirecek. Ama sen diyorsun ki “bunu nasıl gerçeğe dönüştürebileceğim?”. Ben de diyorum ki, sihirli değnek yok . Ancak gerçeğe dönüştürmeye çabalayarak gerçeğe dönüştürebilirsin. Ve herhangi bir projeni buradan paylaşabilirsin, yeri geliyor ben de paylaşıyorum başkası da paylaşıyor. Beni motive eden şeylerden biri bu oldu. Projeleri program tanıtımları etiketinden bulabilirsin.

(Kendimi Ege Fitness gibi hissettim bunları yazarken :stuck_out_tongue: ama öyle yani bazı şeyler sende bitiyor.)

Boşver onları, onların çoğu da zamanında senin gibiydi. Yazılımı seviyorsan yap derim.

İyi akşamlar.

:sweat_smile: :sweat_smile:

Efektif çalışma kısmında çok haklısın. Ben de sanırım fazla çalışmaktan baygınlık geçirdiğim dönemdeyim.

Kafamda ne yapmam gerektiği konusunda bir şeyler canlandı. Çok teşekkür ederim erinmeden uzun uzun anlatmışsın. Umarım umduğundan daha iyi yerlerde olursun :pray:

1 Beğeni

Aynı sorunun farklı versiyonunu ben de yaşıyorum. Şu bilgisayar için çözülen sorularda uzun yöntemlerle yapabiliyorum ama kodu hızlandırma konusunda kendimi yetersiz hissediyorum. Hatta bazen önceki yıllarda çözdüğüm şekilde bile çözemiyorum. Kafa dolgunluğu mu zeka gerilemesi mi bilemiyorum sebebini de.

Memory/Runtime complexity (“O(n)”) analizi yapabiliyor musun? Standart veri yapilarina ve alternatiflerine karsi sunduklari avantajlara az bucuk hakim misin?

Mesela satirlarin tekrar edip etmedikleri ile ilgilendigimiz bir text dosyasi olsa, ve birbirinden bagimsiz olarak su sorulari cevaplayan programlar yazmak istesek:

  1. Dosyada hic tekrar eden satir var mi?
  2. Dosyada 15. satirin tekrari var mi?
  3. Verilen herhangi bir satir icin “bunun tekrari var mi” sorusunu cevaplayacak sistemi nasil kurariz?
    1. soru ile ayni, ama sadece iki text dosyasi tutacak kadar yerimiz var
    1. ve 4. soru ile ayni, ama sadece 1,000,000 text dosyalik yerimiz var.

buna nasil yaklasirsin, veya her sorunun cevabi farkli olur mu? Veya bunun her sayinin farkli bir cevabi olmak uzere tasarlanmis dandik bir soru oldugu belli mi?

Malesef, bu beceriyi olcmeyi biliyorum ama nasil kazandirilacagini bilmiyorum. Complexity, Data Structures, vb. isimlere sahip derslerin mufredatlarini incelemek lazim. Veya belki ilgili hikayeleri duydukca, bloglari/makaleleri okucukca yavasca yerlesen bir beceri.

Kendimi olcmeyi de bilmiyorum, bu arada, o yuzden bu beceriye ne kadar sahibim, ve daha kotusu, olcumlerim ne derece iyi onlari da bilmiyorum.

1 Beğeni