Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Paralyzer

Uzman
Katılım
10 Eylül 2024
Mesajlar
30
Çözümler
1
Beğeniler
6
Yazılım öğrenme sürecindeyim ve tavsiye edilen bir yolu izleyerek öğrenmekteyim. Henüz başlangıçtayım ve bu aşamada, "algoritma ve veri yapıları" konusunu öğrenmek var.

İzlediğim video serisinde () "algoritma ve veri yapıları" konusu adı altında, quick sort, merge sort vb. sıralama algoritmalarını anlatıyor fakat bunları gerçek bir proje (örneğin web sitesi programlama) yaparken kullanacak mıyım? Bunu merak ediyorum, veya bana sadece dolaylı yoldan mı katkı sağlayacak bu öğrendiklerim? Zaman kaybediyor muyum emin değilim o yüzden tavsiyelerinizi merak ettim. Deneyimi olan kişiler cevaplarsa sevinirim.
 
Çözüm
... quick sort, merge sort vb. sıralama algoritmalarını anlatıyor fakat bunları gerçek bir proje (örneğin web sitesi programlama) yaparken kullanacak mıyım?

Genel konuşmayacağım, kendi adıma konuşacağım. Algoritmalarla içli dışlı biri olarak kullandığım dillerin kütüphanelerinin hazır olarak sunduğu sıralama fonksiyonlarını kullanıyorum: C++, Python, JavaScript. İdeal performansta implemente edilmiş fonksiyonlar sunuyor bu diller bildiğim kadarıyla. İhtiyaçlarımı fazlasıyla karşılıyorlar.

Fikir olarak quick sort'un da merge sort'un da işe yaradığı spesifik algoritma problemleri var ama gerçek hayatta (hobi dışında) henüz kullanma ihtiyacı duymadım. Mesela bir permütasyondaki inversion sayısını hızlıca saymak için merge sort kullanılabiliyor ama başka çözümler de yok değil. Aslına bakarsanız bu algoritmaların kendilerinden çok kullandığı teknikleri öğrenmek fayda sağlıyor. Mesela merge sort'ta hem divide & conquer hem de iki sıralı listeyi tek sıralı listeye dönüştürme (merge) teknikleri kullanılıyor ve algoritma bu sayede hızlı çalışıyor.

Gerçek hayatta işime yarayan sayılı tekniklerden biri two pointers idi. Kolay olmasına karşın işe yarayan, çok hoş bulduğum bir fikir.

Dillerin kütüphaneleri aslında tıpkı sıralama fonksiyonları gibi çokça hazır fonksiyon sunuyor, bu yüzden kendim yazmaya ihtiyaç duyduğum pek bir fonksiyon olmadı. Tabii bu benim üzerinde çalıştığım projelerle de alakalı bir durum çünkü projeden projeye ihtiyaçlar değişkenlik gösterebiliyor.

... veya bana sadece dolaylı yoldan mı katkı sağlayacak bu öğrendiklerim?

Kesinlikle ve kesinlikle. "Dolaylı"ya takılmayın, algoritmik düşünme yeteneğinizin gelişimi uzun vadede elzem. Tüm programlama hayatınızı etkileyecek bir seviyeden bahsediyorum. Öğrendiğiniz algoritmaları ve teknikleri pratikte kullanmasanız bile bir problemin çözümünü düşünürken öğrendiklerinizin ettiği dolaylı yardımı hissediyorsunuz. Burada "problem", uğruna kod yazdığınız herhangi bir hedefi temsil ediyor. Bir çözümü hızlandırmak sizin için alışkanlık hâline geliyor ve göreceli olarak daha az zorlanıyorsunuz çünkü öyle düşünmeye alışık oluyorsunuz. Çözüm hızlandırmanın yanı sıra çözüm bulmak da kolaylaşıyor.

"Uzun vadede" kısmına tekrar değinmek isterim. Bu konuda gelişmek zaman istiyor ama süreç meyvesini güzelce veriyor. Damlaya damlaya göl oluyor.

Zaman kaybediyor muyum emin değilim.

Buna "Evet." diyeceğim bir senaryo gelmiyor aklıma. Öyle ya da böyle faydası dokunacaktır. Temel bilimleri öğrenmek gibi düşünün.
Hangi dili öğreneceğiniz ve hangi alanda kullanacağınıza göre değişir. Çok geniş bir konu.

Web sitesi programlamayı ve freelance olarak iş almayı düşünüyorum. Bu bağlamda Front-End için JS, HTML ve CSS öğreneceğim ve halihazırda yarım kalmış bir Java eğitimim var, onu da tamamladıktan sonra hazır olacağımı düşünüyorum. Tabii sürekli proje yapmaya devam edeceğim ki pratik ile bilgileri kalıcı hale getirebileyim.
 
... quick sort, merge sort vb. sıralama algoritmalarını anlatıyor fakat bunları gerçek bir proje (örneğin web sitesi programlama) yaparken kullanacak mıyım?

Genel konuşmayacağım, kendi adıma konuşacağım. Algoritmalarla içli dışlı biri olarak kullandığım dillerin kütüphanelerinin hazır olarak sunduğu sıralama fonksiyonlarını kullanıyorum: C++, Python, JavaScript. İdeal performansta implemente edilmiş fonksiyonlar sunuyor bu diller bildiğim kadarıyla. İhtiyaçlarımı fazlasıyla karşılıyorlar.

Fikir olarak quick sort'un da merge sort'un da işe yaradığı spesifik algoritma problemleri var ama gerçek hayatta (hobi dışında) henüz kullanma ihtiyacı duymadım. Mesela bir permütasyondaki inversion sayısını hızlıca saymak için merge sort kullanılabiliyor ama başka çözümler de yok değil. Aslına bakarsanız bu algoritmaların kendilerinden çok kullandığı teknikleri öğrenmek fayda sağlıyor. Mesela merge sort'ta hem divide & conquer hem de iki sıralı listeyi tek sıralı listeye dönüştürme (merge) teknikleri kullanılıyor ve algoritma bu sayede hızlı çalışıyor.

Gerçek hayatta işime yarayan sayılı tekniklerden biri two pointers idi. Kolay olmasına karşın işe yarayan, çok hoş bulduğum bir fikir.

Dillerin kütüphaneleri aslında tıpkı sıralama fonksiyonları gibi çokça hazır fonksiyon sunuyor, bu yüzden kendim yazmaya ihtiyaç duyduğum pek bir fonksiyon olmadı. Tabii bu benim üzerinde çalıştığım projelerle de alakalı bir durum çünkü projeden projeye ihtiyaçlar değişkenlik gösterebiliyor.

... veya bana sadece dolaylı yoldan mı katkı sağlayacak bu öğrendiklerim?

Kesinlikle ve kesinlikle. "Dolaylı"ya takılmayın, algoritmik düşünme yeteneğinizin gelişimi uzun vadede elzem. Tüm programlama hayatınızı etkileyecek bir seviyeden bahsediyorum. Öğrendiğiniz algoritmaları ve teknikleri pratikte kullanmasanız bile bir problemin çözümünü düşünürken öğrendiklerinizin ettiği dolaylı yardımı hissediyorsunuz. Burada "problem", uğruna kod yazdığınız herhangi bir hedefi temsil ediyor. Bir çözümü hızlandırmak sizin için alışkanlık hâline geliyor ve göreceli olarak daha az zorlanıyorsunuz çünkü öyle düşünmeye alışık oluyorsunuz. Çözüm hızlandırmanın yanı sıra çözüm bulmak da kolaylaşıyor.

"Uzun vadede" kısmına tekrar değinmek isterim. Bu konuda gelişmek zaman istiyor ama süreç meyvesini güzelce veriyor. Damlaya damlaya göl oluyor.

Zaman kaybediyor muyum emin değilim.

Buna "Evet." diyeceğim bir senaryo gelmiyor aklıma. Öyle ya da böyle faydası dokunacaktır. Temel bilimleri öğrenmek gibi düşünün.
 
Çözüm
Genel konuşmayacağım, kendi adıma konuşacağım. Algoritmalarla içli dışlı biri olarak kullandığım dillerin kütüphanelerinin hazır olarak sunduğu sıralama fonksiyonlarını kullanıyorum: C++, Python, JavaScript. İdeal performansta implemente edilmiş fonksiyonlar sunuyor bu diller bildiğim kadarıyla. İhtiyaçlarımı fazlasıyla karşılıyorlar.

Fikir olarak quick Sort'un da merge Sort'un da işe yaradığı spesifik algoritma problemleri var ama gerçek hayatta (hobi dışında) henüz kullanma ihtiyacı duymadım. Mesela bir permütasyondaki inversion sayısını hızlıca saymak için merge sort kullanılabiliyor ama başka çözümler de yok değil. Aslına bakarsanız bu algoritmaların kendilerinden çok kullandığı teknikleri öğrenmek fayda sağlıyor. Mesela merge Sort'ta hem divide & conquer hem de iki sıralı listeyi tek sıralı listeye dönüştürme (merge) teknikleri kullanılıyor ve algoritma bu sayede hızlı çalışıyor.

Gerçek hayatta işime yarayan sayılı tekniklerden biri two pointers idi. Kolay olmasına karşın işe yarayan, çok hoş bulduğum bir fikir.

Dillerin kütüphaneleri aslında tıpkı sıralama fonksiyonları gibi çokça hazır fonksiyon sunuyor, bu yüzden kendim yazmaya ihtiyaç duyduğum pek bir fonksiyon olmadı. Tabii bu benim üzerinde çalıştığım projelerle de alakalı bir durum çünkü projeden projeye ihtiyaçlar değişkenlik gösterebiliyor.

Kesinlikle ve kesinlikle. "dolaylı"ya takılmayın, algoritmik düşünme yeteneğinizin gelişimi uzun vadede elzem. Tüm programlama hayatınızı etkileyecek bir seviyeden bahsediyorum. Öğrendiğiniz algoritmaları ve teknikleri pratikte kullanmasanız bile bir problemin çözümünü düşünürken öğrendiklerinizin ettiği dolaylı yardımı hissediyorsunuz. Burada "problem", uğruna kod yazdığınız herhangi bir hedefi temsil ediyor. Bir çözümü hızlandırmak sizin için alışkanlık hâline geliyor ve göreceli olarak daha az zorlanıyorsunuz çünkü öyle düşünmeye alışık oluyorsunuz. Çözüm hızlandırmanın yanı sıra çözüm bulmak da kolaylaşıyor.

"Uzun vadede" kısmına tekrar değinmek isterim. Bu konuda gelişmek zaman istiyor ama süreç meyvesini güzelce veriyor. Damlaya damlaya göl oluyor.

Buna "evet." diyeceğim bir senaryo gelmiyor aklıma. Öyle ya da böyle faydası dokunacaktır. Temel bilimleri öğrenmek gibi düşünün.

Anladım, matematik öğrenmekle aynı süreç aslında ve hiçbir zaman bitmez diyorsunuz. Ne kadar çok pratik o kadar hızlı çözüm üretmek. Matematik problemi çözdükçe daha zor ve karmaşık problemleri de eskiye nazaran hızlı çözebilir hale geliyoruz. Aynı mantık.

Aslında direkt ne dil ne bir şey öğrenmeden sadece internetten bulduğum ya da kendi kafamda ürettiğim bir proje ile başlamak ve problem ile karşılaştığımda kuralları öğrenmek daha mı iyi olurdu diye düşünüyorum bazen. Çünkü öğrendiklerimi çoğunlukla pratik edecek bir şey bulamıyorum. Öğreten kişilerin bence en büyük eksiği bu. Öğrettikleri teorik bilgiyi sıcağı sıcağına pratik edecek problem/proje ile pekiştirtmeleri gerekiyor ki akılda yer etsin. Yoksa bütün bilgileri verip, pratik yaptırmayınca başa dönülüyor. Şahsen Java öğrenirken kaç defa sinir krizi geçirecektim neredeyse sırf bu yüzden. Ciddiyim bu dediğimde.
 
Anladım, matematik öğrenmekle aynı süreç aslında ve hiçbir zaman bitmez diyorsunuz. Ne kadar çok pratik o kadar hızlı çözüm üretmek. Matematik problemi çözdükçe daha zor ve karmaşık problemleri de eskiye nazaran hızlı çözebilir hale geliyoruz. Aynı mantık.

Tam anlatmak istediğimi anlamışsınız.

Aslında direkt ne dil ne bir şey öğrenmeden sadece internetten bulduğum ya da kendi kafamda ürettiğim bir proje ile başlamak ve problem ile karşılaştığımda kuralları öğrenmek daha mı iyi olurdu diye düşünüyorum bazen.

Tabii, çok hoş olur. Benim de en sevdiğim yöntem. Önce somut bir amaç edinip sonra o amaca yönelik öğrenmek, ihtiyaçlar için gerektiğinde Google'a başvurmak. Ben bunu "dağınık öğrenme" diye tarif ediyorum kendim için çünkü düzgün ilerlediğimi hissetmiyorum, oradan buradan bilgi parçacıkları edine edine ilerliyorum ama bu demek değil ki kötü bir öğrenme yöntemi. Kendim için en faydalı ve eğlenceli bulduğum yöntemdir. Kendimi, bir RPG oyununda loot yapıyormuş gibi hissediyorum. Neyi lootlasam kâr.



@Paralyzer, ilk mesajımı çözüm olarak işaretlemişsiniz. Aslında yaptığım, fikir aktarmaktan ibaretti. Başkalarının yorumlarını da duymanız güzel olabilir. Belki konu "Çözüldü" olarak görüldüğü için konuya bakılmayabilir diye diyorum. Konunuz, çözülecek bir konu olmaktan ziyade fikir aktarılacak bir konu fikrimce.
 
Son düzenleme:
Tam anlatmak istediğimi anlamışsınız.



Tabii, çok hoş olur. Benim de en sevdiğim yöntem. Önce somut bir amaç edinip sonra o amaca yönelik öğrenmek, ihtiyaçlar için gerektiğinde Google'a başvurmak. Ben bunu "dağınık öğrenme" diye tarif ediyorum kendim için çünkü düzgün ilerlediğimi hissetmiyorum, oradan buradan bilgi parçacıkları edine edine ilerliyorum ama bu demek değil ki kötü bir öğrenme yöntemi. Kendim için en faydalı ve eğlenceli bulduğum yöntemdir. Kendimi, bir RPG oyununda loot yapıyormuş gibi hissediyorum. Neyi lootlasam kâr.



@Paralyzer, ilk mesajımı çözüm olarak işaretlemişsiniz. Aslında yaptığım, fikir aktarmaktan ibaretti. Başkalarının yorumlarını da duymanız güzel olabilir. Belki konu "Çözüldü" olarak görüldüğü için konuya bakılmayabilir diye diyorum. Konunuz, çözülecek bir konu olmaktan ziyade fikir aktarılacak bir konu fikrimce.

Kurallara uygun olması açısından öyle yaptım. Yoksa benim açımdan bir problem yok :)
 
Kurallara uygun olması açısından öyle yaptım. Yoksa benim açımdan bir problem yok :)

Konu türünü "Soru" olarak seçmişsiniz doğal olarak, ondan dolayı çözüm işaretlemeli konu olmuş. Dilerseniz rapor yoluyla konu türünü "Konu" olarak değiştirtebilirsiniz, böylelikle çözüm işaretlemesiz bir konu olur ve bu tür konularda hâliyle öyle bir kural yok. Bunun için ilk mesajınızın sol altındaki "Rapor" butonunu kullanıp açılan pencerede kategori olarak "Yanlış kategori ya da yanlış konu tipi" seçip "Daha fazla bilgi" kısmına açıklama yazmanız gerekiyor.

Yapmak zorunda değilsiniz tabii, keyfinize kalmış.