#Software Design

Posts on structuring code, designing boundaries, and making software easier to evolve.

April 15, 20266 min read

Breaking Up With WordPress After Two Decades

Around Black Friday last November, I moved my website from SiteGround to Bluehost. This was not some ambitious infrastructure decision. SiteGround wanted roughly five times more...

October 16, 202513 min read

Most of What We Call Progress

Most of what we call progress in software is just motion. New tools, new frameworks, same problems. Maybe fancier logos. Our industry always has this collective thrill that a ne...

October 3, 202510 min read

Stop Wasting Brainpower

How many times have you found yourself saying: “I worked all day, but I didn’t get anything done.” I know, we have all been there. We feel bad about it, too. On the surface, it...

November 1, 20234 min read

Why You Should Read More Code

In university, I have master students studying software engineering. I often ask them one question: how do authors become authors? Do they suddenly start writing great novels in...

February 13, 20226 min read

Addressing Technical Debt

Tech debt occurs when we solve a software problem with our limited understanding of the business at the time. We start building a solution to get feedback as early as possible....

August 20, 20197 min read

Good APIs Age Slowly

I have noticed that APIs are a bit like abstractions in general. APIs that impress people quickly are very often the ones that cause the most trouble later. I do not mean this a...

August 3, 20197 min read

On Writing Wrapper Libraries

A wrapper library is a thin layer of abstraction around an existing library, dependency, or functionality. A wrapper library offers a better and cleaner interface or rather hide...

December 15, 20178 min read

You Know State Is NO Good

Every engineer learns this the hard way. You think the logic is solid, your tests are green, and your deployment goes smoothly. Looks all good, right? Then you have an outage. N...

April 12, 20174 min read

Duplicate code isn't that bad

Duplicate code isn’t something we usually want in our code for various reasons. The most obvious one is maintenance. When you change a piece of logic, you have to find every pla...

October 22, 20164 min read

Smaller is Faster

“Smaller is faster” is a wellknown hardware design principle, as you might already know it. Generally speaking, smaller pieces of hardware will be faster than larger ones becaus...

July 25, 20168 min read

Who needs an Architect?

An architect? According to Wikipedia, an architect is a person who plans, designs, and oversees the construction of buildings. So, we obviously have derived the role from civil...

December 11, 20133 min read

Implementing HTML5 Bomberman

CS102 is one of the most important course in CS curriculum. In this course, students learn how to write recursive function, objectoriented programming and etc. This course provi...

May 22, 20134 min read

Dependency Injection in JavaScript

Dependency injection is about removing the hard coded dependencies and providing way of changing dependencies in compiletime or runtime. This pattern has been exercised in sever...

May 16, 20135 min read

Achieving Abstraction In JavaScript

In computer science, abstraction is to hide certain details and only show the essential features of the object. Abstraction tries to reduce and factor out details so that the de...

January 30, 20124 min read

Cepheye Yönelik Programlama

Yazılım dünyasında başlıca endişelerinden biri, yazılımdaki parçaların biri birine çok bağlanmasıdır(high coupling, crosscutting concerns). Bu durum yazılımın belirli bir noktad...

November 2, 20102 min read

Mediator

Bu yazımda size Mediator adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım.Mediator bize, bjeler arasında fazla bağ kurmadan (tightcoupled) i...

November 1, 20102 min read

Strategy

Bu yazımda size Strategy adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Bu şablonun genel amacı yapılacak iş için alternatifler oluşturup...

October 25, 20101 min read

Composite

Bu yazımda size Composite adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Bu şablonun genel amacı tekrarlanan(recursive) parçaları(compone...

August 12, 20102 min read

Observer

Bu yazımda size Observer adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Bu şablonun genel amacı bir objeyle başka objeler arasında bağ ku...

January 11, 20102 min read

Facade

Bu yazımda size Facade adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Bu şablon(pattern) genelde birden fazla pakete (package) aynı anda...

January 10, 20101 min read

Adapter

Bu yazımda size Adapter adında nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Bu yazılım şablonu genellikle daha önce yazılan bir kodun başka bir...

January 10, 20102 min read

Abstract Factory

Bu yazımda size Abstract Factory adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Abstract factory, bir veya birden fazla nesnenin farklı t...

January 10, 20101 min read

Factory

Bu yazımda size Factory adındaki nesneye dayalı yazılım şablonunu (ObjectOriented Design Pattern) anlatacağım. Factory şablonunu şöyle anlatayım. Painte benzer bir program yazma...

January 10, 20101 min read

Singleton

Bu yazımda size Singleton adındaki nesneye dayalı yazılım şablonunu(ObjectOriented Design Pattern) anlatacağım. Singleton benim en çok kullandığım dizayn şablonlarından biri. Bu...

December 5, 20093 min read

Inheritance ve Polymorphism

Polymorphism ve Inheritance beraber kullanılan iki önemli nesneye dayalı (ObjectOriented) programlama unsurudur. Bunlar program kodlarının yeniden kullanılabilmesi veya var olan...

March 21, 20094 min read

Binary Search Tree

Binary Search Tree (BST), bilgisayar biliminde arama, ekleme ve silme işlemlerini ortalama O(log n) zamanla gerçekleştirebildiği için temel veri yapılarından biridir. BST’nin gü...

November 3, 20082 min read

Use of Pointers For Lists

C++’ta diziler sabit uzunlukludur; yani program çalışırken bir diziyi doğrudan büyütüp küçültmek mümkün değildir. Bu yüzden, eleman ekleyip silmeyi destekleyen dinamik bir liste...

October 31, 20083 min read

Java Link List Implementation

Linked List (bağlı liste), verileri bellek üzerinde dinamik şekilde saklamamızı sağlayan temel veri yapılarından biridir. Dizilerde eleman sayısı sabitken, bağlı listeler ihtiya...

October 14, 20082 min read

Heap-Allocated 2D Structures in C++

C++ öğrenirken en çok zorlanılan konulardan biri, işin mutfağı olan manuel bellek yönetimi ve pointer yapılarıdır. Bugün çoğu modern dil bizim için bellekle ilgilense de, C++ hâ...