Tag Archives: programlama

Egosuz programlama

1971 yılında Gerald Weinberg‘in çıkardığı The Psychology of Computer Programming kitabında bahsettiği bir yazılım geliştirme metodolojisi bu.

Yazılım mühendisliği diğer mühendisliklere göre yeni bir alan aslında. Yeniliklere de oldukça açık. Genelde takım halinde icra edilen bir mühendislik olan yazılımı takım kimyasını koruyup, egoları bir kenara bırakıp nasıl yapılacağı ile ilgili yol gösterir bu kurallar.

1. Understand and accept that you will make mistakes.

Orhan Gencebay’ın dediği gibi, “hatasız kul olmaz“. Yazılımdaki hatalar çok az sektörde ölümcül durumlara sebep olur. Önemli olan bu hatalardan ders çıkarmak, öğrenmek, bu hatalara gülebilmektir. Bu hataları canlı ortamda tecrübe etmeden bulmak en önemli amaçtır.

2. You are not your code.

Geliştiricilerin kodları incelemesinde amaç hataları bulmaktır, ve hatalar daima olacaktır. Bu hataları kişisel olarak algılamayıp birinci maddeyi hatırlamalısın. Herkes hata yapabilir fakat önemli olan bu hataları çözmektir.

3. No matter how much “karate” you know, someone else will always know more.

El elden üstündür. Yazılım dünyasında benim en sevdiğim konulardan biri bu. Tecrübeye bakmaksızın her hangi bir kişiden yeni bir bakış açısı, yeni bir yöntem veya daha kolay bir çözüm öğrenebilirsiniz. Öğrenmek için hep çaba sarf edin, sormaktan çekinmeyin.

4. Don’t rewrite code without consultation.

Önemli bir şeyi değiştirmeden önce danışmak faydalı olur. Code review zaten yanlış bir değiştirmenin önüne geçecektir ama danışmaktan zarar gelmez. Hatalı kodu düzeltmek ile kodu yeniden yazma arasındaki farkı iyi anlamamız gerekir.

5. Treat people who know less than you with respect, deference and patience.

Yazılım ile alakası olamayan kişiler veya daha az tecrübeli, daha az bilgili yazılımcılar ile çalışırken saygılı, sabırlı ve geri bildirime açık ol. Yazılımcılar her zaman itiraz eden, üstten bakan kişiler olmamalıdır.

6. The only constant in the world is change.

Efesli Herakleitos‘un dediği gibi, “Değişmeyen tek şey değişimin kendisidir”. Yazılım için çok önemli bir söz. Durmadan değişen, gelişen teknolojiler ile baş başayız. Yenilikleri olumlu şekilde karşılamalı ve yeni meydan okumalar olarak görmelisin.

7. The only true authority stems from knowledge, not from position.

Bilgi yetkinliği, yetkinlik ise saygıyı doğurur. Saygı görmek istiyorsanız daha bilgili olun. Kendinizi her zaman geliştirin ve yetkin bir insan olun.

8. Fight for what you believe, but gracefully accept defeat.

Fikirlerini doğru şekilde savunmalısın ama fikrinden daha iyi fikirler daha doğru çözümler olduğunda vazgeçmeyi bilmelisin. Takım kararlarına saygı göster. Bazı durumlarda sana daha az mantıklı gelen tercih uygulanabilir. Bu karar sonucunda çıkan sonuçlara da saygılı olmalısın. Sonuç olarak senin fikrin doğru çıkmış olsa bile “ben demiştim ama” gibi kalıpları fazla kullanmaktan kaçınmalı, sadece gerekli yerde kullanmalısın. Olaylar yaşanır geçer, önemli olan daha önce de bahsettiğimiz gibi bunlardan en faydalı sonuçları çıkarmaktır.

9. Don’t be “the guy in the room.”

Karanlık bir köşede sessizce çalışan yabani kişi olmayın. Çalışma ortamınızdaki herkesle ilişki kurun. Sadece yazılım takımı değil herkesle. Yazılımcıların işi hep bilgisayarlarla olduğu için iş ortamında doğal olarak daha az sosyal etkileşimde bulunurlar. Bunu değiştirin.

10. Critique code instead of people – be kind to the coder, not to the code.

Kişileri değil kodu eleştir, kodlara değil kodu yazan kişiye nazik ol. kod içerisinde bir hata gördüğünde veya değişiklik olmasını istediğinde “bunu niye böyle yaptın” diye bir yaklaşım yerine “bunu böyle yapsak daha iyi olmaz mı?” yaklaşımı her zaman daha avantajlıdır. İstediğin değişikliğin sebebinde açıklayıcı ol, teknik olarak neden gerekli olduğu doğru bir şekilde anlat. Aynı hataları senin de yapacağının farkında ol ve ona göre davran.

Kaynak:

https://en.wikipedia.org/wiki/Egoless_programming

https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/

https://wiki.c2.com/?EgolessProgramming

Rob Pike’tan programlamanın 5 kuralı

Texas üniversitesinin sitesinde bulunan, Adnan Aziz’in yazdığı “”Rob Pike: Programlamanın 5 kuralı” makalesini inceledim.

Rob Pike kimdir peki? Kendisi programlama dünyasında çok saygı duyulan bir abimiz. 2002 – 2021 yılları arasında Google’da çalışmış bu abimiz en fazla Go programlama dilinin yaratıcılarından biri olarak bilinir. Ek olarak Unix takımında yer alıp, Bell laboratuvar‘ında çalışmış. Ayrıca Ken Thompson ile UTF-8’i geliştirmiş.

İşte o 5 kural;

1. Yazdığınız bir programın zamanı nerede harcayacağını bilemezsiniz. Darboğazlar şaşırtıcı yerlerde meydana gelir, bu nedenle darboğazın nerede olduğunu kanıtlayana kadar ikinci bir tahminde bulunmaya ve bir hız kesme işlemi yapmaya çalışmayın.

2. Ölçüm. Ölçene kadar hız için ayarlama yapmayın ve o zaman bile kodun bir kısmı geri kalanını boğmadıkça yapmayın. (Erken optimizasyon, tüm kötülüklerin köküdür.)

3. Havalı algoritmalar, n küçük olduğunda yavaştır ve n genellikle küçüktür. Havalı algoritmaların büyük sabitleri vardır. n’nin sıklıkla büyük olacağını bilene kadar, süslenmeyin. (n büyüse bile, önce Kural 2’yi kullanın.)

4. Havalı algoritmalar, basit olanlardan daha karmaşıktır ve uygulanması çok daha zordur. Basit veri yapılarının yanı sıra basit algoritmalar kullanın. (Kararsızsanız, brute force kullanın)

5. Veri domine eder. Doğru veri yapılarını seçtiyseniz ve işleri iyi organize ettiyseniz, algoritmalar neredeyse her zaman belli olacaktır. Algoritmalar değil veri yapıları programlamanın merkezindedir.

Kaynaklar:

KISS prensipleri: https://en.wikipedia.org/wiki/KISS_principle

The Mythical Man-Month: https://en.wikipedia.org/wiki/The_Mythical_Man-Month

“Nicelık vs nitelık” üzerine

Jeff Atwood 2008 yılında Quantity Always Trumps Quality yazmış, ben yeni gördüm, bu da bizim ayıbımız olsun.

Yazıda alıntı yaptığı kısmı şu şekilde özetleyebilirim;

Bir seramik öğretmeni okulun ilk gününde sınıfı iki gruba ayırdığını duyurur. Sınıfın sol tarafındakilerin tümü, yalnızca ürettikleri işin miktarına göre derecelendirileceğini, sağdakilerin ise yalnızca kalitesine göre derecelendirileceğini söyler. Yaptığı prosedür basit; günün sonunda, tartıyı getirerek sol taraftaki gruptan 50 kiloluk “A” kalitede ve 40 kiloluk “B” vb. devam eden kalitede ürün çıkartılması beklenirken, sağ taraftaki gruptan sadece 1 kiloluk “kaliteli” ürün ürün çıkartılması beklenmiş.

Değerlendirme zamanı gelir ve ilginç bir sonuç ortaya çıkar; en yüksek kalitede eserlerin tümü, miktar açısından derecelendirilen grup (sol taraftaki) tarafından üretilir. Görünüşe göre, “nicelik” grubu yığınlar halinde iş yapmakla ve hatalarından ders alırken, “nitelik” grubu “mükemmellik” hakkında teoriler üretmekle meşguldü.

Yani, yaptığınız ve üzerinde uzun süre düşündüğünüz tasarım ve teorilere istinaden, bu harcanan zamanın bir şeyleri “geliştirmek,” üzerine daha iyi harcanabileceğidir. Buradaki temel düşünce, erken şekilde başarısızlık için harcadığınız zaman, “doğru şekilde yapmaya çalıştığınız” her şeyi öğrenmek için harcadığınız zamandır. Bu, “yanlış” şeyi geliştirmek için zaman harcayarak elde edemeyeceğiniz bir fayda. Bu orijinal ya da yeni bir fikir değil tabi ki. İşin güzel tarafı, Jeff Atwood burada çömlek yapmaktan yazılım geliştirmeye, veya blog yazısı yazmak için gerekli disiplinler için nasıl geçerli olduğunu açıklamış.

Bu tavsiyeyi değerli kılan, bize hata yapmaktan “korkmamayı” öğretmesi. Sadece bu değil, hatalarımızı “kabul etmeyi” de öğrenebiliriz çünkü sonuçta bu şekilde gerçekten “öğreniriz”. Eğer bir şey durgunlaşmışsa, – bu bir yazılım geliştirmesi de olabilir, kişisel bir ilişki de- bu durgunluktan çıkmak için rastgele bir şey yapmanın hiç bir şey yapmamaktan daha iyi olabileceğini düşünüyorum. Bunu yaparsanız, sonuçları analiz edebilir ve neyi “düzeltmemiz” gerektiğini anlayabiliriz.

LeetCode Çözümleri – 101. Symmetric Tree

LeetCode içerisinde bulunan “Symmetric Tree” sorusunun açıklaması ve çözümü. Size root’u verilen bir binary tree‘nin merkezine göre simetrik olup olmadığını bulmanız isteniyor.

► LeetCode 101. Symmetric Tree: https://leetcode.com/problems/symmetric-tree/

► Problem açıklaması:

Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).

Input: root = [1,2,2,3,4,4,3]

Output: true

Input: root = [1,2,2,null,3,null,3]

Output: false

Constraints:

The number of nodes in the tree is in the range [1, 1000].

-100 <= Node.val <= 100

Follow up: Could you solve it both recursively and iteratively?

Sıfırdan C# Programlama Eğitim Seti – 5. Ders

►► Sıfırdan C# Programlama Eğitim Seti – 5. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin beşinci dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Çok boyutlu diziler

Jagged array kavramı

Değişkenler ve parametreler

Yerel değişkenler

Varsayılan değerler (default values)

Parametre geçişleri (değer ile veya referans ile geçiş)

discard kavramı (C# 7.0)

in modifier

params modifier

Optional arguments (opsiyonel argümanlar)

named arguments

Konularla ilgili faydalı linkler:

► Multidimensional Arrays: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays

► Jagged Arrays: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays

► Default values of C# types: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/default-values

► Passing Parameters: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/passing-parameters

► Discards: https://docs.microsoft.com/en-us/dotnet/csharp/discards

► in parameter modifier: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/in-parameter-modifier

► params: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params

► Named and Optional Arguments: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

Sıfırdan C# Programlama Eğitim Seti – 4. Ders

► Sıfırdan C# Programlama Eğitim Seti – 4. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin dördüncü dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

4. Ders İçeriği;

0:00:00​ | Giriş

0:16:42 | Eşitlik ve karşılaştırma operatörleri

0:31:27 | Conditional operatörler

0:37:04 | Short circuit evaluation kavramı

0:40:29 | Ternary operatörü (a ? b : c)

0:45:09 | Char tipi

0:47:35 | Escape sequence karakterleri

0:57:17 | String tipi

1:10:13 | Verbatim string literals

1:16:32 | String concatenation (birleştirme)

1:25:54 | String interpolation (C# 6.0)

1:36:16 | Diziler

1:47:10 | Dizilerde elemanların default değerleri

1:58:43 | Index kavramı (C# 8.0)

2:06:56 | Range kavramı (C# 8.0)

Konularla ilgili faydalı linkler:

► What is short circuiting and how is it used when programming in Java?: https://stackoverflow.com/q/9344305/447156

► Ternary operator: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator

► Escape sequence karakterleri: https://docs.microsoft.com/en-us/cpp/c-language/escape-sequences?view=msvc-160

► Verbatim string literals: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim

► String interpolation: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/string-interpolation

► System.Index: https://docs.microsoft.com/en-us/dotnet/api/system.index?view=net-5.0

► System.Range: https://docs.microsoft.com/en-us/dotnet/api/system.range?view=net-5.0

Sıfırdan C# Programlama Eğitim Seti – 3. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin üçüncü dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

3. Ders İçeriği;

Nümerik tiplerde type inference

Nümerik suffix kavramı

Tam sayı çevrimler

Noktalı sayı çevrimleri

Decimal çevrimleri

Aritmetik operatörler

Tam sayılarda Overflow mantığı

checked – unchecked kavramları

8 bit ve 16 bit tam sayılar

NaN, pozitif ve negatif sonsuz ve -0

double ve decimal karşılaştırması

Ayrıca videonun sonunda karıştırdığım 0.1f + 0.2f == 0.3f kısmının neden true olduğunu anladım. Durum şuymuş; “bunun her zaman true olacağına dair bir kesinlik yok”. Bu durumda CPU (veya sistemin tamamı) bunun nasıl hesaplanacağına kendisi karar veriyor anladığım kadarıyla. (Şu Stack Overflow sorusuna göz atabilirsiniz: https://stackoverflow.com/q/15117037/447156) Eric Lippert’in cevabını birkaç defa okumanızı tavsiye ederim, muazzam yazılmış. Ayrıca bu soruya ben de 8 sene önce cevap vermişim ama tamamen aklımdan çıkmış 🙂

Şöyle diyor üstad;

“The compiler and the runtime are permitted to do so however they feel like it at the time. They need not be consistent from machine to machine, from run to run, and so on. Since this can only make calculations more accurate this is not considered a bug. It’s a feature. A feature that makes it incredibly difficult to write programs that behave predictably, but a feature nevertheless.”

Örneğin; Rextester içerisinde (https://rextester.com/FPD61501) true döndürürken, aynı kod DotNetFiddle içerisinde (https://dotnetfiddle.net/BkaDOo) false döndürüyor. Buradan da bu durumu anlamış oluyoruz.

Sıfırdan C# Programlama Eğitim Seti – 2. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin ikinci dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Eğitim sırasında interaktif olarak soru-cevap kısımlarımız olmakta. Bu nedenle benimle birlikte siz de kodlama yapabilirsiniz.

► Eğitim kimler için? C# dilini öğrenmek isteyen herkes için. Olabildiğince en basit seviyede anlatmaya çalışıyorum. Fakat her seviyedeki arkadaş için ideal bir eğitim seti olacağından eminim.

► Ücretsiz mi? Tamamen ücretsiz. Derslerin tamamı önce Youtube üzerinde canlı yayınla olacak, yayın bittikten sonra da düzenleme yapılıp videolar kısmından ulaşabilirsiniz.

► Canlı yayınlar ne zaman oluyor? Henüz belli değil, fakat kaçırmamak için kanala abone olmayı ve notification kısmını aktif etmenizi tavsiye ederim. Şu andaki düşüncem haftada bir canlı yayın. Eğer yoğun talep olursa haftada iki defa yapabiliriz.

► Eğitim kaç hafta sürecek? C# programlama dilinin geniş bir dil. Konu çok. Bende anlatma hevesi de öyle. Siz istedikçe, sizler talep ettikçe eğitimler devam edecek.

► Eğitimde hangi araçlar kullanıyorsun? Microsoft Visual Studio 2019 (https://visualstudio.microsoft.com/tr/), Linqpad (https://www.linqpad.net/) ve Microsoft Whiteboard (https://www.microsoft.com/tr-tr/p/microsoft-whiteboard/9mspc6mp8fm4?activetab=pivot:overviewtab) kullanıyorum.

► Eğitimde biz hangi araçları kullanabiliriz? Benim kullandığım araçları bilgisayarınıza kurmanızı tavsiye ederim, fakat bilgisayarınızda kurulu değilse online olan C# editörlerinden birini de kullanabilirsiniz. Tavsiye olarak DotNetFiddle https://dotnetfiddle.net/, Ideone https://ideone.com/, Csharppad https://csharppad.com/, Repl.it https://repl.it/languages/csharp ve Rextester https://rextester.com/ verebilirim. Hangisini seçeceğiniz tamamen size kalmış.

2. Ders İçeriği;

Anahtar sözcükler ve kullanımları

C#’ta yorumlar

Temel veri tipleri

const kullanımı

Custom tip oluşturmak

Conversation (implicit ve explicit)

Değer tipleri ve referans tipleri

Tam sayılar, noktalı sayılar

alias kullanımı

Nümerik ve binary literaller (c# 7.0)

Faydalı linkler:

► C# Keywords: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

► Document your code with XML comments: https://docs.microsoft.com/en-us/dotnet/csharp/codedoc

► Types (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/

► const (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const

► Casting and type conversions (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/casting-and-type-conversions

► Value types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types

► Reference types (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types

► Integer literals: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types#integer-literals

Sıfırdan C# Programlama Eğitim Seti – 1. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin ilk dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Eğitim sırasında interaktif olarak soru-cevap kısımlarımız olmakta. Bu nedenle benimle birlikte siz de kodlama yapabilirsiniz.

► Eğitim kimler için? C# dilini öğrenmek isteyen herkes için. Olabildiğince en basit seviyede anlatmaya çalışıyorum. Fakat her seviyedeki arkadaş için ideal bir eğitim seti olacağından eminim.

► Ücretsiz mi? Tamamen ücretsiz. Derslerin tamamı önce Youtube üzerinde canlı yayınla olacak, yayın bittikten sonra da düzenleme yapılıp videolar kısmından ulaşabilirsiniz.

► Canlı yayınlar ne zaman oluyor? Henüz belli değil, fakat kaçırmamak için kanala abone olmayı ve notification kısmını aktif etmenizi tavsiye ederim. Şu andaki düşüncem haftada bir canlı yayın. Eğer yoğun talep olursa haftada iki defa yapabiliriz.

► Eğitim kaç hafta sürecek? C# programlama dilinin geniş bir dil. Konu çok. Bende anlatma hevesi de öyle. Siz istedikçe, sizler talep ettikçe eğitimler devam edecek.

► Eğitimde hangi araçlar kullanıyorsun? Microsoft Visual Studio 2019 (https://visualstudio.microsoft.com/tr/), Linqpad (https://www.linqpad.net/) ve Microsoft Whiteboard (https://www.microsoft.com/tr-tr/p/microsoft-whiteboard/9mspc6mp8fm4?activetab=pivot:overviewtab) kullanıyorum.

► Eğitimde biz hangi araçları kullanabiliriz? Benim kullandığım araçları bilgisayarınıza kurmanızı tavsiye ederim, fakat bilgisayarınızda kurulu değilse online olan C# editörlerinden birini de kullanabilirsiniz. Tavsiye olarak DotNetFiddle https://dotnetfiddle.net/, Ideone https://ideone.com/, Csharppad https://csharppad.com/, Repl.it https://repl.it/languages/csharp ve Rextester https://rextester.com/ verebilirim. Hangisini seçeceğiniz tamamen size kalmış.

Tekrar edeyim, bu eğitim seti için herhangi bir programlama bilgisi tecrübeniz olması gerekmiyor. Fakat temel programlama tecrübenizin olması size eğitimde büyük avantaj sağlayacaktır.

1. Ders İçeriği;

Giriş

C# Nedir?

Unified Type System nedir?

C# dosyalarını command line ile çalıştırmak

Değer tipleri ve Referans tipleri

Expression kavramı, operand ve operatörler

const kullanımı

Postfix ve Prefix operatörleri, x++ ve –x

If-else if-else kullanımı

var kullanımı

switch kullanımı

while kullanımı

do-while kullanımı

for kullanımı

break kullanımı

continue kullanımı

Method parametreleri

ref parametre kullanımı

out parametre kullanımı

Dizi (array) kavramına giriş

Çok boyutlu dizilere giriş

Jagged array kavramı

NOT: Videoda bazı yerlerde ses sorunları olmuş, çok fazla fark edilmiyorlar ama bazen rahatsız edici olabiliyor, kusura bakmayın.

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/