All posts by Soner Gönül

Stack Overflow Nedir? Etkİlİ Şekİlde Nasıl Kullanılır?

Günümüzde programcıların internette en çok başvurduğu yer Stack Overflow. Peki bu siteyi gerçekten kullanmayı biliyor muyuz? Nasıl kullanılır? Hangi sorular sorulabilir? Hangi sorular sorulmamalıdır? Kuralları nelerdir? Türkiye’deki 3. en yüksek reputation puanına sahip kişi olarak (kaynak: https://data.stackexchange.com/stackoverflow/query/90536/top-users-turkey) bu videoda bu altın değerindeki siteden en iyi şekilde nasıl yararlanabileceğinizi ve kurallarını anlatmaya çalıştım.

➡️ Stack Overflow nedir ve ilk olarak ne zaman kullanmaya başladım?

Stack Overflow en basit tabiriyle bir programlama soru cevap sitesi. Programlama ile ilgili bir sorunuz varsa sorabileceğiniz, başka programcıların sorularını yanıtlayabileceğiniz ve onlarla fikir alışverişi yapabileceğiniz (meta siteleri) bir internet sitesi. 2008 yılında Jeff Atwood ve Joel Spolsky tarafında kuruldu, ben de özellikle 2012 yılında askerden geldikten sonraki dönemde yoğun olarak kullanmaya başladım.

Kaynak: https://stackoverflow.com/tour

➡️ Stack Overflow’da hangi konularda sorular sorulabilir?

Stack Overlfow’da şu tip sorular sorabilirsiniz;

💡 Spesifik programlama problemleri

💡 Yazılım algoritmaları

💡 Programcılar tarafından düzenli kullanılan yazılım araçları

💡 Yazılım geliştirme ile ilgili spesifik cevap verilebilen sorular.

Sormak istediğiniz soru bu kategorilerde olsa bile aşağıdaki kategorilere uymaması gerekir;

🔴 “Kodum neden çalışmıyor” tarzı sorularda minimal bir kod örneği vermemek

🔴 Küçük yazım hatasından kaynaklanan sorular

🔴 Ev ödevimi yapamıyorum. https://meta.stackoverflow.com/q/334822/447156

🔴 Kitap, uygulama, yazılım kütüphanesi tavsiyeleri

🔴 Bilgisayar donanımı ve network ile ilgili sorular

🔴 3. web siteleri ile ilgili sorular

Kaynak: https://stackoverflow.com/help/on-topic

➡️ Stack Overflow’da hangi konularda sorular sorulmamalıdır?

Sohbet edici, açık uçlu sorular genellikle Stack Overflow’da sorulmaması gereken sorulardır.

🔴 Temel amacı programlama olmayan sorular.

🔴 Her cevabın doğru olduğu sorular. “Favori editörünüz hangisi?”

🔴 Gerçekte bir sorunun olmadığı sorular. “Diğer insanların bu konuda ne düşündüklerini merak ediyorum.”

🔴 Açık uçlu ve varsayımsal sorular: “Şöyle olsaydı ne olurdu?”

🔴 “Bu araç çok kötü, değil mi?” Kaynak: https://stackoverflow.com/help/dont-ask

➡️ Bir sorunun kapatılması ne anlama gelir?

Bir sorunun kapatılması, o sorunun muhtemelen Stack Overflow’a uygun olmadığı anlamına gelir. Kapatılan sorulara cevap veremezsiniz. Bu sayede kötü cevapların da önüne geçilmiş olur. Kapatılma nedenlerine bakacak olursak;

💡 Duplicate: Sorunuza çok benzer olan bir soru daha önce sorulmuş.

💡 Off-topic: Sorunuz konu olarak bu siteye uygun değil.

💡 Needs details or clarity: Sorunuz yeterince açık değil veya flu.

💡 Needs more focus: Tek bir soruda “tek bir soru”

💡 Opinion-based: Fikir bazlı sorular.

Eğer reputation puanınız 3000’den fazlaysa bir soruyu kapatılması için oylayabilirsiniz. Unutmayın ki, kapatılan bir soru her zaman tekrar açılabilir. Kaynak: https://stackoverflow.com/help/closed-questions

➡️ Nasıl iyi bir soru sorabilirim?

💡 Ara, ve araştır.

💡 Sorununuzu açık bir şekilde belirten bir başlık

💡 Önce açıklama, sonra kod

💡 Diğer kişilerin de aynı hatayı almasını sağlayın.

💡 Tüm ilgili tag’ları ekleyin.

💡 Submit etmeden sonra bir kez tekrar okuyun.

💡 Submit edin ve gelen feedback’lere cevap verin.

Kaynak: https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/

➡️ Minimal ve tekrarlanabilir bir örnek nasıl oluşturulur?

Kaynak: https://stackoverflow.com/help/minimal-reproducible-example

➡️ Soruma kimse cevap vermezse ne yapmalıyım?

Bounty sistemi ile ilgi çekebilirsiniz: https://stackoverflow.com/help/bounty

➡️ Reputation sistemi nedir? Nasıl çalışır?

Reputation, topluluğun size ne kadar güvendiğinin bir ölçüsüdür; meslektaşlarınızı ne hakkında konuştuğunuzu bildiğinize ikna ederek kazanılır. Ne kadar çok reputation kazanırsanız, o kadar çok ayrıcalık kazanırsınız ve sitede o kadar çok araca erişebilirsiniz.

➡️ İyi bir cevap nasıl yazılır?

Kaynak: https://stackoverflow.com/help/how-to-answer

LeetCode Çözümlerİ – 775. Global and Local Inversions

LeetCode içerisinde bulunan “Global and Local Inversions” sorusunun açıklaması ve çözümü. Bu soruda size verilen “global inversions” ve “local inversions” tanımlarına göre eşit olup olmadığı soruluyor.

🔥 LeetCode 775. Global and Local Inversions: https://leetcode.com/problems/global-and-local-inversions/

➡️ Problem açıklaması:

We have some permutation A of [0, 1, …, N – 1], where N is the length of A.

The number of (global) inversions is the number of i lessThan j with 0 lessEqual i less j lessThan N and A[i] biggerThan A[j].

The number of local inversions is the number of i with 0 lessEqual i lessThan N and A[i] biggerThan A[i+1].

Return true if and only if the number of global inversions is equal to the number of local inversions.

Example 1:

Input: A = [1,0,2]

Output: true

Explanation: There is 1 global inversion, and 1 local inversion.

Example 2:

Input: A = [1,2,0]

Output: false

Explanation: There are 2 global inversions, and 1 local inversion.

Note:

A will be a permutation of [0, 1, …, A.length – 1].

A will have length in range [1, 5000].

The time limit for this problem has been reduced.

LeetCode Çözümlerİ – 1189. Maximum Number of Balloons

LeetCode içerisinde bulunan “Maximum Number of Balloons” sorusunun açıklaması ve çözümü. Bu soruda size verilen kelime içerisindeki harfleri bir defa kullanarak, “balloon” kelimesinin kaç defa yazdırılabileceği soruluyor.

🔥 LeetCode 1189. Maximum Number of Balloons: https://leetcode.com/problems/maximum-number-of-balloons/

➡️ Problem açıklaması:

Given a string text, you want to use the characters of text to form as many instances of the word “balloon” as possible.

You can use each character in text at most once. Return the maximum number of instances that can be formed.

Example 1:

Input: text = “nlaebolko”

Output: 1

Example 2:

Input: text = “loonbalxballpoon”

Output: 2

Example 3:

Input: text = “leetcode”

Output: 0

Constraints:

1 <= text.length <= 10^4

text consists of lower case English letters only.

LeetCode Çözümlerİ – 206. Reverse Linked List

LeetCode içerisinde bulunan “Reverse Linked List” sorusunun açıklaması ve çözümü. Bu soruda head olarak verilen linked list‘in tüm node’larını tersine çevirmeniz isteniyor.

🔥 LeetCode 206. Reverse Linked List: https://leetcode.com/problems/reverse-linked-list/

🔥 Bahsettiğim makale linki: https://www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/linked%20lists.html

➡️ Problem açıklaması:

Reverse a singly linked list.

Example:

Input: 1–2–3–4–5–NULL

Output: 5–4–3–2–1–NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

LeetCode Çözümlerİ – 1047. Remove All Adjacent Duplicates In String

LeetCode içerisinde bulunan “Remove All Adjacent Duplicates In String” sorusunun açıklaması ve çözümü. Bu soruda verilen string’in, yan yana aynı aynı olan tüm karakterleri silinerek, en sonda yan yana aynı karakter kalmayacak şekilde hazırlamanız isteniyor.

🔥 LeetCode 1047. Remove All Adjacent Duplicates In String: https://leetcode.com/problems/middle-of-the-linked-list/

➡️ Problem açıklaması:

Given a string S of lowercase letters, a duplicate removal consists of choosing two adjacent and equal letters, and removing them.

We repeatedly make duplicate removals on S until we no longer can.

Return the final string after all such duplicate removals have been made. It is guaranteed the answer is unique.

Example 1:

Input: “abbaca”

Output: “ca”

Explanation: For example, in “abbaca” we could remove “bb” since the letters are adjacent and equal, and this is the only possible move. The result of this move is that the string is “aaca”, of which only “aa” is possible, so the final string is “ca”.

Note:

1 <= S.length <= 20000

S consists only of English lowercase letters.

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.

LeetCode Çözümlerİ – 876. Middle of the Linked List

LeetCode içerisinde bulunan “Middle of the Linked List” sorusunun açıklaması ve çözümü. Bu soruda verilen linked list içerisindeki orta node’u bulmanız isteniyor. Eğer iki tane orta node varsa, ikinci node’u döndürmelisiniz.

🔥 LeetCode 876. Middle of the Linked List: https://leetcode.com/problems/middle-of-the-linked-list/

➡️ Problem açıklaması:

Given a non-empty, singly linked list with head node head, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

Example 1:

Input: [1,2,3,4,5]

Output: Node 3 from this list (Serialization: [3,4,5])

The returned node has value 3. (The judge’s serialization of this node is [3,4,5]).

Note that we returned a ListNode object ans, such that: ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

Example 2:

Input: [1,2,3,4,5,6]

Output: Node 4 from this list (Serialization: [4,5,6])

Since the list has two middle nodes with values 3 and 4, we return the second one.

LeetCode Çözümlerİ – 14. Longest Common Prefix

LeetCode içerisinde bulunan “Longest Common Prefix” sorusunun açıklaması ve çözümü. Bu soruda verilen string’lerin hepsinde ortak olan en uzun ön ek’i bulmanız isteniyor.

🔥 LeetCode 14. Longest Common Prefix: https://leetcode.com/problems/longest-common-prefix/

➡️ Problem açıklaması:

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string “”.

Example 1:

Input: strs = [“flower”,”flow”,”flight”]

Output: “fl”

Example 2:

Input: strs = [“dog”,”racecar”,”car”]

Output: “”

Explanation: There is no common prefix among the input strings.

Constraints:

0 <= strs.length <= 200

0 <= strs[i].length <= 200

strs[i] consists of only lower-case English letters.

LeetCode Çözümlerİ – 141. Linked List Cycle

LeetCode içerisinde bulunan “Linked List Cycle” sorusunun açıklaması ve çözümü. Bu soruda head’i verilen bir linked list’in, içerisinde döngüsel bir yapı olup olmadığı soruluyor. Sorunun çözümü biraz karmaşık gelebilir bazı arkadaşlar için, o yüzden görseller ile de anlatmaya çalıştım, umarım anlaşılabilmişimdir.

🔥 LeetCode 141. Linked List Cycle: https://leetcode.com/problems/linked-list-cycle/

➡️ Problem açıklaması:

Given head, the head of a linked list, determine if the linked list has a cycle in it.

There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail’s next pointer is connected to. Note that pos is not passed as a parameter.

Return true if there is a cycle in the linked list. Otherwise, return false.

Example 1:

Input: head = [3,2,0,-4], pos = 1

Output: true

Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).

Example 2:

Input: head = [1,2], pos = 0

Output: true

Explanation: There is a cycle in the linked list, where the tail connects to the 0th node.

Example 3:

Input: head = [1], pos = -1

Output: false

Explanation: There is no cycle in the linked list.

Constraints:

The number of the nodes in the list is in the range [0, 104].

-105 lessEqual Node.val lessEqual 105

pos is -1 or a valid index in the linked-list.

Follow up: Can you solve it using O(1) (i.e. constant) memory?

LeetCode Çözümlerİ – 1221. Split a String in Balanced Strings

LeetCode içerisinde bulunan “Split a String in Balanced Strings” sorusunun açıklaması ve çözümü. Bu soruda verilen string’i en fazla kaç adet dengeli (R ve L harfleri sayısı eşit) string’e ayırabileceğiniz soruluyor.

🔥 LeetCode 1221. Split a String in Balanced Strings: https://leetcode.com/problems/split-a-string-in-balanced-strings/

➡️ Problem açıklaması:

Balanced strings are those who have equal quantity of ‘L’ and ‘R’ characters.

Given a balanced string s split it in the maximum amount of balanced strings.

Return the maximum amount of splitted balanced strings.

Example 1:

Input: s = “RLRRLLRLRL”

Output: 4

Explanation: s can be split into “RL”, “RRLL”, “RL”, “RL”, each substring contains same number of ‘L’ and ‘R’.

Example 2:

Input: s = “RLLLLRRRLR”

Output: 3

Explanation: s can be split into “RL”, “LLLRRR”, “LR”, each substring contains same number of ‘L’ and ‘R’.

Example 3:

Input: s = “LLLLRRRR”

Output: 1

Explanation: s can be split into “LLLLRRRR”.

Example 4:

Input: s = “RLRRRLLRLL”

Output: 2

Explanation: s can be split into “RL”, “RRRLLRLL”, since each substring contains an equal number of ‘L’ and ‘R’

Constraints:

1 <= s.length <=1000

s[i] = ‘L’ or ‘R’