Algoritma dersi çalışırken hocanın bir söylediği kafama takıldı ve programlama bölümüne sordum ama sormasam daha iyiydi. Hiçbir şey iddia etmeden basitçe soru sormama rağmen, \"Sen İngilizce bilmiyorsun\" olayına döndü muhabbet. İngilizcem kötü olsa evet diye geçiştiririm ama kötü değil. O yüzden size sormak istiyorum. \"Java has general API for sequences of items and its got things like a, append at the end, remove from the beginning, and so forth. Any uses of the resizing array, so many of the principles that we consider does also a, a link list interface. So, why not just use those? Why use our own implementations? Well, the problem is often in such library code is kind of designed by committee phenomenon that more and more operations get added and the API becomes too broad or bloated. It's not a good idea to have lots and lots of, you know, operations in the same API. And we'll see example in a second. The problem, the real problem is that when you do that you can't know much about the performance or you can't assume much about the performance. And so you can kind of immediately arrive at that performance even for simple clients. So our best practice that we recommend is so few that these basic data structures that we use and there's so simple is to go ahead and use the implementations that we've just discussed for these fundamental data structures. Maybe later, later on, after an experienced programmer who knows what he or she is doing could use some of these library collections effectively. But inexperienced programmers often have trouble with it. Here's a war story from students Programming assignments not that long ago. So, we have an assignment where you need to generate a random open sites in a percolation system. We have one student who was paying attention to what we're saying and uses an array and can pick the indices into that array at random check whether they're open and, and repeat. And so the array is N by N, it's N^2 things and it takes about N^2 time, which is actually a linear time for this application. But then we have another student who had some Java before coming to us and considered himself an expert and said, well, I'm going to use linked list because I could use Java's library and I don't have to worry about downloading your stupid code. And so, I'll just use that one and pick an index at random and delete and that program took quadratic time and poor Kenny, when trying to run his program for the huge instance that we asked found out that it wasn't finishing. And the reason is that the Java linked list implementation takes a linear time to find an item with a given index. Not constant time like an array. And that's difficult for Kenny to think about and difficult to drive that information from the implementation so program is just too slow. And with the Swiss knife implementation with so many operations it's hard to know whether or not the particular set of operations that your client needs is efficiently implemented. So our insistence in this course is that students should not use the library until we've implemented it in class. At least that some indication that you understand the performance characteristics.\" Bold olan kısım asıl tartışmalı olan ama olayı anlamak için hepsini okumak lazım. Soru ise şu: Metne göre hocanın tavsiye ettiği şu: Eğer tecrübesiz bir geliştirici isenin en iyisi kendi veri yapılarınızı kullanmak. İleride tecrübe edinince ve ne yaptığınızı bilir hale gelince hazır kütüphanelerden bazılarını kullanırsınız. Benim anladığım bu. Forumdaki başka biri ise hayır tam tersini iddia edip şöyle diyor: \"oncelikle soylenilenden bunu anladiysaniz, ingilizce uzerine biraz daga fazla yogunlasmak sizin icin daha iyi olabilir. son kez anlamaniz umudu ile tekrar edeyim, java da bir interface/veri yapisi icin birden fazla implementasyon hali hazirda vardir. eger bunlar isinizi goruyorsa alip kullanirsiniz eger isinizi gormuyorsa ihtiyaciniz dogrultusunda oturup kendi implementasyonunuzu yazarsiniz ve kullanirsiniz. yine arkadaslar soylemis ama ben de tekrar edersem belki anlarsiniz, bu kursta amac sizin veri yapilarinin nasil calistigini ogrenmeniz. profesyonel hayatta \"ben kendi queue implementasyonumu yazicam\" derseniz junior halinizle muhtemelen azar isitirsiniz. junior olmayanlar da zaten ihtiyaci dogurultusunda mevcut implementasyonlardan dogru olanini secer kullanir ki abi de ayni seyi soylemis.\" Kim haklı şimdi? P. S Ben bir şey iddia etmiyorum. Bana kalırsa da hazır olanı kullanmak daha mantıklı ama hocanın söylediği tam tersi. Kafama takılan o zaten. Herkes hazırını kullanmayı tavsiye ederken bu hoca neden tam tersini söylüyor? Tartışma bunun üzerine olması gerekirken sen yanlış anlamışsın, hoca öyle bir şey demiyor noktasına geldi.