Temiz Kod Tasarımı - Lemi Orhan Ergin

Devnot TV
12 May 201739:35

Summary

TLDRThe speaker emphasizes the importance of software design, which is often overlooked compared to architecture. Well-designed code should be easy to change over time. He recommends techniques like testing, refactoring, reducing coupling between components, and increasing cohesion within components to improve design quality. The speaker argues that taking time to create clean code ultimately saves more time compared to quick but messy code, even if managers don't see the immediate benefit.

Takeaways

  • 😃 The speaker's journey began around 2012-2013, where they shifted focus from coding to reviewing projects, leading to a significant change in perspective.
  • 🙂 Encountering a peculiar 15-line method dramatically altered the speaker's viewpoint on code quality and efficiency.
  • 📝 Emphasizes the importance of understanding and reviewing tests to comprehend application behavior, highlighting that functioning code in production does not imply it's optimal.
  • 🙋🏻‍♂️ Advocates for the necessity of questioning and reevaluating one's own code, stressing that mere functionality is insufficient for quality.
  • 💡 A pivotal moment was realizing that complex code could often be simplified significantly, which sparked a deeper interest in writing quality code over merely learning new technologies.
  • 🛠 Technical debt within an application can lead to its downfall, underscoring the need for continuous improvement and maintenance of code.
  • 💬 Highlights the cultural aspects of coding, including the significance of addressing 'code smells' to avoid future problems.
  • 📚 References Jack Reeves's view that code itself is the design, suggesting a shift towards recognizing coding as a form of design work.
  • 🔧 Stresses the importance of automated testing, refactoring, and clean code practices as essential for sustainable software development.
  • 📰 Discusses the dangers of coupling and the lack of cohesion, advocating for code that is easy to manage, modify, and understand.

Q & A

  • What significant change in perspective did the speaker experience in 2013 related to code review?

    -The speaker's perspective changed dramatically after coming across a 15-line method that, despite working correctly in production with unit tests, appeared odd to them. This led them to question and rethink their approach to writing and reviewing code.

  • How did the speaker approach unfamiliar frameworks and technologies?

    -The speaker tackled unfamiliar frameworks and technologies by reviewing and analyzing codes written using these, despite not having worked with them directly. This process involved scrutinizing codes they hadn't written to understand their structure and logic.

  • What was the speaker's main focus in their software development career?

    -The speaker's main focus has been on writing high-quality code. They emphasize the importance of not just making code work but ensuring it is well-designed and maintainable, indicating a shift from merely learning new technologies to mastering the art of coding.

  • Why does the speaker believe that addressing 'code smells' is crucial?

    -The speaker believes that addressing 'code smells' is crucial because these indicate deeper issues within the code that could lead to technical debt. Recognizing and rectifying these smells are essential for maintaining a healthy codebase and preventing future problems.

  • What does the speaker say about the role of testing in software development?

    -The speaker underscores the importance of testing, stating that untested code is equivalent to unfinished code. They argue that thorough testing is essential to ensure code reliability and functionality, drawing a parallel to proving mathematical formulas.

  • How does the speaker view the relationship between code design and software architecture?

    -The speaker views code design as integral to software architecture, emphasizing that design isn't just about the structural aspects but also involves the code itself. They argue that every line of code contributes to the overall design and architecture of the software.

  • What metaphor does the speaker use to describe software development?

    -The speaker compares software development to growing a city, where initial designs might not accommodate future growth. This metaphor highlights the need for scalable and adaptable code design to support the software's evolution over time.

  • What is the speaker's stance on refactoring?

    -The speaker advocates for continuous refactoring as a part of the development process, rather than a separate phase. They stress that refactoring is essential for maintaining code quality and should be integrated into daily coding activities.

  • According to the speaker, how can software developers ensure code quality?

    -To ensure code quality, the speaker suggests practices like pair programming, code reviews, and embracing a culture of communication and collaboration among developers. These practices help identify and rectify issues early in the development process.

  • What does the speaker identify as a key challenge in software development?

    -The speaker identifies managing complexity and avoiding 'code smells' as key challenges. They emphasize the need for clean code practices, including proper naming conventions, reducing dependencies, and enhancing code cohesion to tackle these challenges effectively.

Outlines

00:00

😀 Getting started: reviewing code in 2013

The author started reviewing code in 2013 when he joined Sony. He would look through code, frameworks and technologies he didn't work on to understand them better. He would leave comments asking questions even though he didn't fully grasp the code yet.

05:01

😷 Identifying code smells

The author argues that concepts like code, design, architecture etc all 'smell'. We get so used to these smells that we no longer notice them. But when we get exposed to better alternatives, we start noticing the 'smell'. Identifying these code smells is the first step to improving quality.

10:02

📝 Software design is in the code itself

The author highlights that Jack Reis said that the design of software is in the code itself. Software that is untested is considered incomplete. Testing validates that the code works as intended just as mathematical proofs validate the accuracy of equations.

15:04

🔨 Refactoring is essential

The real value of software is not in it working correctly, but in adapting to change. Refactoring cannot be a separate activity, but has to be woven into development itself through constant code review and rewriting. Legacy code that cannot adapt accumulates technical debt.

20:05

🤝 Programming concepts build on each other

The author argues that software design involves programming, testing and refactoring bound together, supporting each other. Lack of any one causes the whole structure to crumble. Refactoring aims to reduce coupling while increasing cohesion.

25:05

😎 Naming reveals understanding

The author argues that naming classes, methods etc appropriately reveals how well we understand the code. Meaningful names make the code more readable. Framework dependent code with ambiguous names makes the application rigid and hard to maintain.

30:06

🏭 Building maintainable software

Drawing from the Gang of Four book, the author argues that software systems need to be built for change, just as cities had to evolve from towns. The design has to change as code grows from more people working on it over time.

35:08

🤝 Collaborating for better code

The author argues that code reviews and pair programming are essential for higher quality code. No one person can write perfect bug-free code. Collaborating makes us leave aside egos and co-create better designed software.

Mindmap

Keywords

💡software design

The speaker emphasizes the importance of software design, which refers to the internal structure and organization of code. Good design makes code flexible, reusable, and maintainable over time.

💡refactoring

The process of improving existing code without changing its behavior. Refactoring aims to clean up duplicate code, improve names of methods/classes, break code into smaller pieces.

💡code quality

The overall readability, understandability, flexibility and maintainability of software code. The speaker argues that working code alone is not enough - its design quality is critical.

Highlights

Software design is the code itself

If code is not tested, there is a problem - it is unfinished

The real value of software is not that it works correctly, but that it can adapt to change

High coupling between concepts means changing one thing breaks many other things

Cohesion - related concepts should be encapsulated together

Refactoring, testing, programming are all essential - missing any means poor design

Naming is critical - names bring new abstractions and domain concepts

Avoid overuse of generic helper/utility classes - they hide business logic

Duplicate knowledge (not just code) indicates a missing abstraction

Making changes getting harder over time indicates design problems

Leaky abstraction - don't expose low-level concepts up higher

Use small interfaces/classes over large god classes

Code review and pair programming enable collaborative improvement

Take small steps - incremental improvement over big upfront design

Code to be refactored later - it will change

Transcripts

play00:02

yıl sanırım 2013 civarıydı

play00:06

2012'de sonye 3 girişim

play00:11

sonrası yeni görev tanımım ve heyecanım

play00:16

projeleri review etmeye başladım

play00:19

kodlarını didikli üzerinde uğraşmadım

play00:21

çalışmadığım kodlara bakıyorum üzerinde

play00:24

çalışmadığım frameworkleri bilmediğim

play00:26

teknolojilerin kodlarını incelemeye

play00:28

çalışıyorum ve insanlardan habersiz

play00:31

onlara komer yazıyorum Kod review

play00:33

açıyorum Ve diyorum ki buradaki kodda

play00:35

Bir gariplik gördüm Sence nedir Yani ben

play00:38

garip belki normal bir şey ama ben

play00:40

anlayamadım diye yorumlar

play00:42

yazıyordum ve kodlar arasında dolaşırken

play00:46

şöyle bir Bu kaç satır bir 15 satırlık

play00:50

bir metoda denk geldim bunu Ar bir kısmı

play00:54

bilmiyorum denk Gelmiş olabilirsiniz

play00:55

buna bahsediyorum Çünkü 15 satırlık kod

play00:58

benim bakış açımı dramatik değiştirdi bu

play01:02

kodu yazan arkadaşı Eee

play01:05

tanıyorum ben değilim

play01:08

e ve bu kodan Scroll yaparken bu kodu

play01:13

gördüğümde durdum Yani bir gariplik var

play01:16

dedim okumaya çalıştım falan Sonra

play01:19

testini açtım Çünkü benim ilk yaptığım

play01:21

şey testine bakmak uygulamayı kendim

play01:24

compile edemem uygulamanın nasıl

play01:25

çalıştığını anlamı bekleyemezsiniz

play01:27

testine bakmam gerekir Eee ki eğer K

play01:30

test senaryolarını düzgün yazmışsa

play01:32

oradan bir şeyler anlayabilirim ve

play01:33

testini açtım testini Hark de yazmıştı

play01:36

unit testleri var Bir de bu kod Bu arada

play01:38

canlıya çıkmış durumda Yani bu kod

play01:41

çalışmıyor bu kod çok falen

play01:42

değiştirmemiz lazım diyecek durumda

play01:44

değilim canlıda çalışıyor ve güzel

play01:45

çalışıyor testi de var unit testi de var

play01:48

harkulade ama bu koddan ayrılamıyorum

play01:50

Scroll edemiyorum burada kaldım burada

play01:52

bir şey var Sonra satır satır bu kodu

play01:56

incelemeye

play01:57

başladım satır satır incelerken ilk

play02:00

başta message stringi oluşturuyorsunuz

play02:03

ve oraya diyorsunuz

play02:06

Mage sonra eğer ki bu arada bu validate

play02:10

package metodu Yani bir paket objesi

play02:12

alıyor Bunu val edece tamam mı ve paket

play02:15

Eğer ki nsa package n mesajı stringe

play02:21

ekleniyor Eğer ki paket n değil ama emp

play02:25

ise Page not di

play02:28

bires

play02:30

oluyor sonra message null değilse Aha

play02:34

Demek ki ortada bir problem var demektir

play02:37

message n deilse burada exception

play02:39

fırlatıyoruz runtime exception

play02:41

fırlatıyoruz ve bir saniye yakalıyoruz

play02:45

fırlattığımız an topu hemen yakalayıp

play02:48

bakıyoruz ki Evet burada bir problem var

play02:51

exception ve false dönüyoruz Eğer ki

play02:53

bunun hiçbiri yaşanıyorsa Tabii ki True

play02:56

deyip bunu diyoruz burada burada bir

play02:58

gariplik var

play03:00

cidden cidden üzerinde uzun zaman böyle

play03:03

durdum durdum Baktım bir şeyler var Ve

play03:06

bunu baştan nasıl yazabilirim diye merak

play03:08

ettim e ve bu kodu baştan yazmak için

play03:11

uğraştım şöyle bir hale geldi yani bu

play03:14

burada e logger olduğu için loglamak

play03:17

gerekiyor Peki ya loglamak için gereken

play03:20

eforu burada sarf etmesek validate

play03:23

package' çağıran yerde llas hani burada

play03:25

loga gerek olmadığını düşünsek ne olurdu

play03:28

Evet bu kadar

play03:30

olurdu bu kod bu kadar bu kod tek

play03:35

satırla halledilebilir bir kodmak

play03:37

üstteki de çalışıyor alttaki de

play03:40

çalışıyor bu bende eee bir şey ışıkların

play03:44

parlamasına bilinç kaybına falan bir

play03:46

şeylere bir şeyler bir şeyler oluştu

play03:48

Yani kendimi sorgulam neden oldu ve

play03:51

kendi kodlarım baktığım zaman evet evet

play03:54

falan diye kendi kendi yazdığım kodlarda

play03:56

da böyle Açıklar bulmaya başladım

play03:58

çalışması yetmez arkadaşlar kodun

play04:01

çalışması yetmez ve Odak noktam benim

play04:04

Eee teknolojileri süper öğrenmek uzun

play04:07

zamandır olmadı yani e teknolojiler

play04:10

konusunda öğrenmeye çalışıyorum ama

play04:12

hiçbirini süper bilmiyorum Benim ana

play04:14

noktam kaliteli kod yazmakla alakalı ve

play04:17

bunun daha kaliteli olduğuna inanıyorum

play04:19

bunu da tartışabiliriz ama en

play04:21

nihayetinde uygulamanın kodunun iç

play04:24

tasarımının daha güzelleşmesi

play04:26

gerektiğine inanıyorum çünkü Eee her

play04:29

güzel her

play04:31

Eee çalışsa bile uygulamanın içerisinde

play04:34

teknik borçlar Eee var ve o teknik

play04:37

borçlar gelecekte uygulamayı iflasa

play04:39

götürebilir

play04:41

eee bir şeyi atlam bir şeyi atladım y

play04:45

ondan da

play04:46

bahsedeceğim genele baktığımız zaman uı

play04:49

Culture ya kültürümüz ofisin içi kodun

play04:52

kendisi mimari buradaki bütün

play04:54

kavramların ortak bir özelliği var

play04:57

hepsinin ortak bir özelliği var infra

play05:00

hatta müşteri ortak özellikleri neler

play05:04

kodun kendisi

play05:06

tasarım Bunların ortak özelliği şu

play05:09

Bunlar kokab arkadaşlar Hem de ne

play05:12

kokuyor bazen E hiç almıyorsunuz

play05:16

kokmasına rağmen alışkanlık olmuş oluyor

play05:18

uzun zamandır kokuyla yaşadığınız zaman

play05:21

Tıpkı fiziksel olarak o kokuyu

play05:23

hissetmediğiniz gibi Koda baktığınız

play05:26

zaman da o kokuyu hissetmiyorsunuz ama

play05:29

ara ara dışarıya

play05:31

çıkıp nefesinizi temizlediğiniz ya da

play05:34

farklı kokularla kendinizi tekrardan

play05:37

ferahlığın o kokuyu fark farkındalık

play05:40

yarattığınız fark edebilirsiniz ve bu

play05:44

anlamda biraz evvel gösterdiğim

play05:45

listedeki şeyler kavramlar kokarlar ve

play05:49

kötü koktuk bilin ki ortada bir ciddi

play05:51

bir problem vardır Önemli olan bu

play05:54

kokuları tespit

play05:56

etmek atladığım şey şu kendimi kısaca

play05:59

tanıtmayı unuttum Eee adım Lemi eico da

play06:03

çalışıyorum

play06:04

eee Sony'de üç kere Eee sony'ye giriş

play06:08

yaptım 10 sene kadar Sony'de çalıştım

play06:10

Gitti Gidiyor e'de çalıştım 2 sene e

play06:13

asm'de Eee danışmanlık tecrübem oldu Çok

play06:17

fazla proje çok fazla Şirket çok fazla

play06:20

İşini keyifle yapmayı aşkla tutkuyla Eee

play06:24

uğraşan arkadaşla çalışma fırsatım oldu

play06:27

çok şey öğrendim eee Çırağım ve çırak

play06:31

olarak kalacağım e ve burada anlatmaya

play06:35

çalıştığım şeyler tamamen e deneyimler

play06:42

deneyimlediğimiz yani yazılım temiz kod

play06:46

ya da yazılım tasarımı çok büyük bir

play06:48

konu Yani devasa bir konu Bunun neresini

play06:51

40 dakikada Hatta Zamanım çok olmadığı

play06:53

için ne kadar yarım saatle anlatabilirim

play06:55

diye düşünüyorum

play06:57

Eee size ancak ve ancak gerçekten önemli

play07:01

ama çok önemli olduğunu düşündüğüm

play07:03

birkaç noktayı değineceğim ümit ediyorum

play07:05

ki buradan çıktığınızda o önemli

play07:07

noktalarla kodunuza geri döndüğünüzde o

play07:10

kokuları alabilirsiniz ve bahsettiğim

play07:13

pratik yöntemlerle bunları

play07:15

temizleyebilirsiniz

play07:20

şimdi çok severek okuduğum ve her

play07:23

satırından da dediğim bir makale var

play07:27

Kendisi 199 senesinde e What is software

play07:32

Design diye bir makale yazıyor bu

play07:34

makaleyi internetten erişebilirsiniz

play07:36

yani Zaten bir 2 sayfalık bir yazı her

play07:38

satırını yedim yuttum not aldım çizdim

play07:42

Çünkü bunu e açıkça söylemek gerekirse

play07:45

hiç beklemediğim kadar derin şeyler

play07:47

yazmıştı Bu yazdıkları e uzun zaman çok

play07:52

konuşulmadı gelin görün ki zaman

play07:55

içerisinde Büyük Ustalar tarafından

play07:57

dillendirilen başlanınca bize kadar

play07:59

ulaştı Eee bu makalesinde birkaç tane

play08:02

önemli nokta var Jack

play08:05

rein yazılımın kaynak kodu tasarımınız

play08:08

ta kendisidir arkadaşlar tasarım diye

play08:12

bahsettiğimiz çoğu şey esasında mimari

play08:15

yani işte buraya bir tane Eee relational

play08:18

Database koyalım or ortaya bir elastic

play08:20

Search koyalım şunu cluster haline

play08:22

getirelim char ayarlarını yapalım işte

play08:24

uygulamayı modelize edelim e sürekli

play08:27

sürekli mimariden bahs ediyoruz Peki

play08:30

tasarım nerede unuttu yazılım dünyasında

play08:32

yazılımın unuttuğu şeylerin Bence

play08:34

başında yazılımın iç tasarımı geliyor

play08:38

Yani biz kodu yazıyoruz ama kod yazmak

play08:41

ciddi bir tasarım emeği gerektiriyor ve

play08:44

Eee bakıldığı zaman Jack Reis'in

play08:46

makalesinde esasında her yazılımcı kod

play08:49

yazarak tasarım yapıyor aslında ve bütün

play08:53

koddaki problemlerin büyük bir çoğunluğu

play08:56

tasarımsal

play08:57

problemlerle örtüşüyor Yani biz ne kadar

play09:00

fazla tasarımsal problemleri öğrenirsek

play09:03

kodumuzun kalitesinin de o kadar

play09:04

artabileceğini

play09:06

inanıyorum jackin enteresan bir başka

play09:09

bakış açısı

play09:11

da uygulamanız eğer ki test

play09:16

edilmemişse bir problem var demektir

play09:18

bitmemiş demektir E kodunuzun sadece

play09:22

tasarımınız sadece yazılmış olması

play09:24

kodunuzun yazılmış olması yetmez test

play09:27

edilmiş olması gerekir çünü yazılımlar

play09:29

Tıpkı matematik formüllerine benzer

play09:32

Bugün bana bilmem ne formülünü yazar

play09:34

mısın dediğinizde yazarım istediğiniz

play09:36

her formül yazarım Ama doğru değil tabii

play09:39

ki Yani doğru şey yazacağımı Garanti

play09:41

edemem ama yazarım Atarım ortaya bir şey

play09:43

Peki verdiğim formülün doğru olduğunu

play09:46

nasıl ispat edeceğim ispatlamak

play09:48

zorundayım Eee Tıpkı yazılımlarda öyle

play09:52

test edilmemiş kod bitmemiş demektir

play09:55

hasarlı demektir yanlış demektir bunu

play09:57

önceden eee

play10:00

bu şekilde algılayabiliriz ve bu test

play10:02

etmek manuel testle olabilecek bir şey

play10:04

değil Tabii ki Tabii ki siz manuel

play10:07

testle kodunuz her if statement içine

play10:10

girebilir misiniz Bu mümkün mü yüz

play10:13

binlerce

play10:14

farklı ihtimalin dönüp dolaştığı bir

play10:17

koddan bahsediyoruz

play10:19

e test yazmaktan bahsediyoruz O nedenle

play10:23

Tasarımın nihai hedefine ulaşabilmesi

play10:26

için test yazmak zorundayız yazılmamış

play10:30

kod yarım tasarlanmış

play10:33

demektir şimdi bu açıdan bakıldığı zaman

play10:36

kodun tasarımını programlama kodlama ve

play10:40

test ya ben onu otomatikleştirilmiş test

play10:43

otom test ya da bu bizim anladığımız şey

play10:46

tüm test hiyerarşisinde unit test

play10:49

integration functional test gibi

play10:50

testlerle de örtüştürmek

play10:59

tasarlamak bundan ibaret değil yazılımı

play11:02

tasarlamak konusunda Tabii ki büyük usta

play11:04

Robert Martin alıntı yapmazsak olmaz

play11:07

yani Adet yerini bulmaz Robert marın

play11:10

harkulade bir sözü var yazılımın Gerçek

play11:13

değeri nedir bir numaralı değeri onun

play11:16

doğru çalışması değildir yani Çalışan

play11:18

yazılım geliştirmek değildir çalışan

play11:21

yazılım önemlidir ama yazılımı değerli

play11:23

kılan şey onun gerçekten çalışması

play11:26

değildir ondan daha değerli bir tane

play11:29

nokta var düşünün bu çok değerli bir şey

play11:31

ondan daha da değerlisi var ondan daha

play11:34

değerli nokta onun değişime karşı ayak

play11:37

uydurabilmek

play11:39

Yani sizden sonraki yazılımcının da o

play11:43

Koda o satırlara kod yazabilmesi yani

play11:46

önceki yazılımcı e Twitter hesabını

play11:48

takip ediyorum her yazılımda midemi

play11:51

kramplar giriyor sonra kendimi buluyorum

play11:53

Yani resmen beni anlatıyor ya da bizi

play11:55

anlatıyor buradan

play11:57

e Bu açıdan baktığımız

play12:00

zaman değişim kaçınılmaz ve bu değişim

play12:03

sadece requirement lın değişimi değil bu

play12:06

karşımıza çıkan bugdan sonra stack

play12:08

overflow baktığımızda Bizim tahminimiz

play12:11

de dışında orada kodlar görüyoruz ve

play12:13

onları uygulamak zorunda kalıyoruz

play12:15

oradaki çözümleri denemek zorunda

play12:16

kalıyoruz ve işin yaptığımız kodun

play12:19

tasarımı sürekli değişiyor ve değişime

play12:21

karşı adapte olamadığımız zaman da

play12:23

patchler yazmak zorunda kalıyoruz kim

play12:26

123 tane metodu olan bir k

play12:29

bakıp da acaba İhtiyacım olan metot

play12:32

burada var mı diye bakar bakmaz 123 tane

play12:35

metot varsa ne ihtiyacı varsa ekler

play12:39

kimse önceki 123 acaba Burada şu benim

play12:43

aradığım fonksiyonalite burada var mı

play12:45

diye birisi bakan görmedi yani 5500

play12:48

satırlık KL içerisinde of diye açarsınız

play12:52

püf diye çevres şeyleri Scroll edersiniz

play12:55

sonra da istediğiniz o User Manager

play12:57

dünyaya Hakimiyet kurmaya çalışan o User

play12:59

Manager classın içerisine istediğiniz

play13:01

metodu yazıp çıkarsınız çok fazla

play13:03

durmazsın Çünkü orada 123 tane metot var

play13:06

yani eee bu

play13:10

kritik şimdi grady book önemli

play13:13

kişilerden Design Gang of for Design

play13:15

patterns kitabının girişindeki o forward

play13:17

kısmını yazan kişi yani o açıdan

play13:20

bakıldığı zaman önemli bir kişi olarak

play13:22

doğrudan söyleyebilirsiniz O da diyor ki

play13:24

Eee yazılımlar da şehirler gibidir Bugün

play13:27

1 milyon İstanbul'un durumuna bakın 17

play13:31

milyon Ken bakın Ama birçok semti 1

play13:34

milyon Ken kuruldu ama 17 milyonu

play13:36

kaldırmıyor yazılımlar da öyle İlk başta

play13:39

Tasarladığınız ve Yazdığınız şekilde

play13:41

kalmayacak eklediğiniz her satır

play13:43

takımınıza giren her kişiyle beraber

play13:46

uygulamanız büyüyecek ve tasarımı da

play13:47

değiştirmek zorunda kalacaksınız

play13:50

tasarımı değiştirmek mikroservis

play13:52

mimarisi yapalım 10 tane inst aynı anda

play13:55

ayağa kaldıralım

play13:57

değil kı işte yeni metotlar ekleyelim

play14:00

daha çok feature ekleyelim daha çok

play14:02

feature bu da değil farklı bir yolu

play14:04

yöntemi olmalı şimdi bu açıdan bakıldığı

play14:08

zaman uygulamayı reaktör etmemiz

play14:10

gerekiyor Yani fonksiyonalite Esi aynı

play14:12

kalarak uygulamanın iç tasarımını

play14:14

değiştirmemiz gerekiyor yani eee yazılım

play14:18

tasarımı dediğimiz şey bir üçgen Bermuda

play14:20

sheytan üçgeni güzel bir üçgen yani e

play14:23

burada programlama test ve Eee

play14:26

refactoring bahsediyoruz Bunlardan

play14:28

herhangi bir

play14:29

eksikse üzgünüm sadece kod yazıyoruz

play14:32

demektir tasarlama tasarımında ciddi

play14:36

açıklarım olabilir anlamına

play14:39

geliyor Bunu mutlaka söyle bunları hep

play14:42

fark edip hep mevcut kodlarda kendi

play14:45

kodlarım beraber çalışıp takımların

play14:47

kodlarında gördüğüm için bunlardan

play14:49

bahsetmek zorundayım o nedenle test

play14:53

testing ve refactoring yani test unit

play14:55

test yazma fonksiyonel test yazma

play14:57

otomatik testler yazma ve refactoring

play15:01

kaçınılmazdır arkadaşlar ve o testler

play15:03

geçmek zorundadır test herhangi bir

play15:06

testiniz geçmiyorsa bir problem var

play15:09

demektir bütün üretim bandını

play15:11

durdurmalısınız Çünkü uygulamanızın bazı

play15:13

bölümleri çalışmıyor olabilir yani şu an

play15:16

Eee ışık yanıyor arabanızda fren balata

play15:19

bilmem ne ışığı yanıyorsa siz onu

play15:21

servise götürmeniz gerekir onunla uzun

play15:23

süre yaşayamazsınız yapmışlığım vardır

play15:26

olmuyor yani o araç el nihayetinde

play15:28

bozuluyor e ve refactoring bildiğiniz

play15:31

gibi ya da düşündüğüm gibi Eskiden

play15:33

refactoring ile alakalı bir bölüm olsun

play15:36

yani bir hafta refactoring yapalım işte

play15:38

bir sprinti refactoring le koşalım İşte

play15:41

bu kısmı baştan yazmamız lazım

play15:43

dediğinizde yöneticileriniz buna izin

play15:45

vermez hiç kimse vermez yani bir saniye

play15:49

Sen bu kodu aynı fonksiyonalite aynı

play15:52

şekilde çalışacak ama ben bütün ekibe

play15:55

Bir hafta boyunca çalışması için para

play15:57

vereceğim Bir hafta son sonra aynı kod

play15:59

aynı şekilde çalışmaya devam edecek yani

play16:02

siz ne yapıyorsunuz orada falan di

play16:05

sorular sormaya başlar O nedenle

play16:07

refactoring mevcut kod yazmaktan ayırt

play16:10

edilemez refactoring bunun bir

play16:12

parçasıdır kodu yazarken aynı anlarda

play16:16

Aynı zamanlarda reaktör etmeniz

play16:20

gerekir şimdi buna yazılım tasarımının

play16:25

üçgeni

play16:26

diyoruz Bu üçgeni dah daha temiz hale

play16:29

nasıl getirebiliriz Yani temiz temiz

play16:33

yazılım tasarımı nasıl olabilir bu

play16:36

üçgene Sadık kalacağız bunu bu

play16:39

üçgeni biraz Pırıltı eklememiz gerekiyor

play16:42

Yani refactoring biraz açmamız gerekiyor

play16:44

iki tane kavram var bu iki kavramı

play16:47

üstüne basa basa Konuşmamız gerekiyor Bu

play16:50

iki kavraman bir tanesi cing yani cing

play16:54

le alakalı vaktimiz olsa bir meetup

play16:57

larda vesaire üzerine bir saat sadece

play16:59

coupling konuşsak yani uygulamanın iç

play17:02

tasarımında birbirine olan bağımlılıklar

play17:05

eee buna Ara ara e şirkette muhabbet

play17:08

ederken Hani bir şeyi değiştirmek için

play17:11

çekiyorsun çektikçe geliyor Bütün bütün

play17:14

Eee uygulamanın her yerinde değişiklik

play17:17

yapman gerekiyor bir böyle de

play17:20

açıklanabilir yahut uygulamaya hiç

play17:22

dokunamam manla da açıklanabilir yani

play17:25

burayı değiştiremiyoruz Neden Çünkü onu

play17:27

şu kullanıyor Çünkü o şuraya bağımlı

play17:30

Çünkü o burada bunu yapıyor Eee bu çok

play17:33

sık karşımıza çıkıyor Spring Framework

play17:37

Hey Java dünyasının medarı iftiharı ya

play17:39

da böyle web mvc frameworkleri çatılar

play17:43

harkulade şeyler ama ilginç bir

play17:46

dezavantajı da var yani Biz şöyle

play17:49

yapıyoruz controller yazıyoruz

play17:51

controller altına controller konuşsun

play17:54

konuşacağı servisler Manager yazıyoruz

play17:57

Handler yazıyoruz milyon tane

play17:59

isimlendirme veriyoruz ama onları bir

play18:00

yazıyoruz şuraya Ondan sonra onların

play18:03

konuşacağı repository database'e

play18:05

erişecek olan repository objelerini

play18:07

oluşturuyoruz E başka Class var mı Yok

play18:11

uer var Her yerde her yerde helper

play18:13

classları var Eee milyon tane statik

play18:16

Herkes birbirini statik olarak çağırıyor

play18:18

Eee ve uygulamada Eee Herkes her şeye

play18:23

coupled Yani herkes her şeye bağımlı Eee

play18:27

sıfır dizay p

play18:29

yani uygulama içerisinde uygulamanın

play18:31

modelize olacağı uygulamanın

play18:41

genişleyebilir controller yazacaksın

play18:43

Manager yazacaksın Bir de repost bir şey

play18:50

ekleyeceğim ben gibi hissediyor Yani ben

play18:54

Eee bu kadar notasyonu belli olan bir

play18:57

yerde kod yazmak istemiyorum

play18:58

Yani benim sorunlarım daha karmaşık ve

play19:00

ben o karmaşık sorunları springe

play19:02

yedirmek istemiyorum Ben o sorunları

play19:04

çözmek istiyorum O nedenle Framework

play19:07

bağımlı Hatta frameworkler kölesi kod

play19:10

yazma diye bir kavram vardır Bu

play19:12

tehlikeli bir kavramdır bundan biraz

play19:15

daha bahsedeceğim coupling kavramını

play19:17

Kent beck bir oturumda şöyle bahsediyor

play19:20

internette görebilirsiniz Bir videosu

play19:21

var 8 Büyük Usta Google Hangout

play19:24

karşılıklı tartışıyorlar nefesimi

play19:26

tutarak izledim kulaklık el Ellerim

play19:29

titreyerek iz inanılmaz şeylerden

play19:30

bahsettiler Kent orada şöyle söylüyor

play19:33

Eğer ki bir komitenin içerisinde

play19:35

birbirinden farklı kavramlar ya da

play19:38

dosyalar ya da modüller ya da işte o

play19:40

kavram o komit delerse Bunlar kır

play19:43

değillerse lo cır yani birbirine olan

play19:46

bağımlılıkları azdır bir şeyi

play19:48

değiştirdiğin zaman onu da değiştir onu

play19:50

da değiştir yapmana gerek kalmaz bu çok

play19:53

net Anlaşılır komit bir bakın çoğunlukla

play19:56

komit

play19:57

baktığımızda ö değiştirirsiniz hepsini

play20:01

hepsini bir alırsınız ve komit lersin

play20:02

Peki içerisindeki kaçı bu feature

play20:04

alakalı kaçı refactoring alakalı kaçı

play20:07

Dün gördüğümüz bugla

play20:10

alakalı Bilmiyorum işte yaptıklarımı

play20:12

komit komit Bu Değil arkadaşlar Hani git

play20:15

konusunda Çok hassasım O yüzden komit

play20:18

komit kesinlikle bu değil komit çok özel

play20:21

bir kavram belki günün birinde yine me

play20:24

karşılaşır komikler hakkında konuşuruz

play20:27

şimdi E bir ik kavram da cohesion yani

play20:31

kavramlar arasındaki Fikir Birliği bir

play20:35

kavramın tek bir yerden ulaşılabilir

play20:38

olması günümüzde birçok arkadaşımla

play20:41

değişik nedenlerle farklı projeler

play20:43

geliştiriyoruz o projelerde işte Ticket

play20:47

classı Event classı işte speaker

play20:51

etkinlik düzenliyoruz etkinlikle alakalı

play20:54

tasarım kodlar kodlar üzerine

play20:57

tartışıyoruz cod review yapıyoruz ve cod

play20:59

review da şeyi fark ediyorsunuz e

play21:01

kullanıcı burada da var E kullanıcı

play21:03

burada da var şimdi Ticket Ticket diye

play21:06

bir Class var Ticket classın içerisinde

play21:09

session bilgisi var Ben buna ihtiyacım

play21:12

yok yani cod R yaparken domain ile

play21:15

alakalı kavramları üzerinde tartışırken

play21:17

bunun burada yeri Burası doğru mu diye

play21:19

kafanızda soru işaretleri oluyor bilin

play21:22

ki orada cohesion da yani alakalı olarak

play21:25

adlandırdığım isimle türkçeleştirdi

play21:28

bildiğim diyelim e bu kavramda bir

play21:30

problem var demektir cohesion kavramı

play21:32

alakalı kavramının en tepeye çıkması

play21:35

cinge olabildiği kadar aşağı inmesi

play21:37

gerekir birini yukarı çekerken Öbürü de

play21:39

zaten aşağıya inecektir burada net price

play21:44

eğer okumadıysanız mutlaka okumanızı

play21:46

tavsiye ederim growing object oriented

play21:48

software by tests diye bir kitabın

play21:51

yazarlarından bir tanesi benim tahmin

play21:53

daha tahminimden çok daha genç çıktı

play21:55

açıkçası E onun çok iyi güzel tarif

play21:58

etmiş Eğer ki siz bir kavram konusu bir

play22:01

feature ekliyorsun login le alakalı

play22:03

payment la alakalı işte transal bir şeyi

play22:08

değiştiriyorsa açtıysanız o zaman bir

play22:11

problem vardır diyor yani siz bir

play22:14

kavramda değişiklik yapacaksınız o

play22:16

dosyada bu dosyada bu dosyada bu dosyada

play22:18

bir sürü farklı yerde onun parçalarını

play22:21

görmektesiniz bunu Şununla da alakalı

play22:24

aştı biliriz e primitive obsession diye

play22:27

bir kavram bir kavram var primitifler

play22:30

ilkel veri yapıları ona karşı olan

play22:34

takıntı hepimiz primitiv her yere String

play22:36

koyuyoruz her yerde integer long double'

play22:39

havada uçuşuyor priz diyoruz Sonra bir

play22:41

bakıyoruz Ah price'ın yanına ceny de

play22:43

gerekiyor TL koymamız gerekiyor Tamam

play22:46

Price T iki tane ayrı primitif olarak

play22:49

kullanıyoruz bir bakıyoruz bir tane daha

play22:50

bilgi gelmiş ortada bağırsakları olan

play22:55

yine örneklerim hep iğrenç oluyor o

play22:56

yüzden oraya girmiyorum E yani işler

play22:59

kötüye sarıyor öyle söyleyeyim yani

play23:01

örnek verme konusunda bir sıkıntım var

play23:03

şimdi ene sonunda bakıldığı zaman bu

play23:06

Bermuda Şeytan üçgenini biraz daha

play23:08

şekillendirir isek altta refactoring

play23:10

imizin ana amacı king'i düşürmek yani

play23:13

uygulamanın iç tasarımındaki kavramların

play23:16

birbirine olan bağımlılıklarını

play23:18

olabildiği kadar aşağı indirmek bunu

play23:20

yaparken de aynı anda zaten aynı anda

play23:22

oluyorlar bunu yaparken de cohesion yani

play23:26

Birbir alakalı arttırmak ikonları

play23:29

seçerken burada king'de damma etkisi

play23:33

Yani bir şeyi değiştirdiğiniz zaman Onda

play23:35

da değiştir Bunu değiş tusuna mi etkisi

play23:38

yaratıyor öbürü ise henüz internette

play23:40

olmayan halay çekme ikonunu ben yarattım

play23:43

halay çekme ikonu yani birbiriyle e

play23:46

alakalı arkadaşların ayrılamaz bir

play23:48

şekilde e beraber olma durumu halay

play23:51

ikonu da Eee internete katkı tek katkım

play23:54

bu yani bugün öyle söyleyeyim şimdi buna

play23:57

baktığımız zaman

play23:58

bir şeyi hiç yapmıyoruz ya da yaparken o

play24:01

kadar zorlanıyoruz ki yapmasam olmaz mı

play24:03

Lütfen yapmayayım diye ısrar ediyoruz O

play24:05

da şu isimleri değiştirmek ne olur

play24:08

isimleri değiştirelim ne var değiştirsek

play24:10

Ne olur bir tane git bren al Değiştir

play24:15

değiştirebilen kodları komikleri geri al

play24:18

ne olur Yeter ki değiştirin arkadaşlar

play24:20

isimlendirme değiştirmek önemlidir Çünkü

play24:24

her yeni isimlendirme yeni veri yapıları

play24:27

yeni kavram ları getirir buradan

play24:29

bakıldığı zaman mesela biz ne yapıyoruz

play24:32

mailer Nuse Gmail smtp Send email ya

play24:36

smtp Gmail'in smtp üzerinden Send email

play24:39

diye bir metot yazıyoruz sonra ya bu

play24:42

isim çok jenerik ya Ben hla nasıla

play24:45

ilgilenmiyorum yani E bu

play24:47

işin ne Send email' çeviriyoruz Send

play24:51

email her projede Send email vardır Her

play24:55

projenin birçok Send emaili vardır Hatta

play24:59

E ama esas istediğimiz şey şu Send

play25:02

activation email Send activation emaili

play25:05

arkada generik bir Send emaili

play25:07

kullanabilir sorun değil ama Koda

play25:09

baktığımız zaman Send email şimdi bu

play25:11

Acaba hangi emaili atıyor diye

play25:14

düşünüyoruz sonra 17 parametrede de

play25:17

activation ile alakalı bir rakam

play25:18

görüyoruz 12 12'nin Database activation

play25:22

olduğunu birinin bakması gerekiyor Yani

play25:24

kod daha okunaklı olması gerekmez mi Bu

play25:27

açıdan bakıldığı zaman isimlendirme çok

play25:29

çok önemlidir refactoring en önemli

play25:32

parçalarından bir tanesidir en

play25:34

önemlisidir demiyorum çünkü refactoring

play25:36

en önemli parçası Bence extract metod

play25:38

yani 100 yılın gördüğü en basit 100

play25:41

yılın gördüğü idelerin destek en çok

play25:43

destekledi refactoring yöntemi olan o

play25:45

extract metodu kullanmamız gerekiyor

play25:48

Yani 200 satırlık Koda baktığımız zaman

play25:51

Ya bu çok fazla O yüzden gel teker teker

play25:53

satırları okuyalım değil e var parçayım

play25:57

tam gel parçaladım şu metodu yani

play26:00

commenter Ben hatırlıyorum ben de çok

play26:02

yaptım commenter le kodları bloklara

play26:04

ayırıyoruz kodun bu kısmı şuraya bakıyor

play26:08

bu kısmı price'ın bilmem nesini yapıyor

play26:10

bu Tamam ayır o zaman metotları ayır

play26:12

İşte tam refactoring ortaya çıktığı yer

play26:15

bu kodu temizlerken buna gerçekten

play26:18

ihtiyacımız

play26:19

olacak bir başk bir isimlendirme ile

play26:23

ilgili çok hassas olduğum konulardan bir

play26:24

tanesi de şu

play26:26

helper

play26:29

helper utility utility şey metotları

play26:33

classları Ama genel olarak şöyle

play26:35

kullanılır seçersiniz Çünkü kınız o

play26:38

kadar büyümüştür ki 123 tane 80 tanesini

play26:41

seçersiniz User managerin vardır ya User

play26:44

Manager helper diye ona aktarırsınız ona

play26:46

da dependen verirsiniz Oh kodum çok

play26:49

güzel oldu sadece 20 tane metot kaldı

play26:51

geriye kalan 80 met öbür tarafta helper

play26:54

tehlikelidir çünkü helper metı classları

play26:58

içerisinde Business Logic Barındırır

play27:01

utility classları tehlikelidir bugün

play27:03

baktığınız zaman her şey utility diyoruz

play27:05

her şeyin başına statik koyuyoruz

play27:07

uygulama test edilemez hale geliyor

play27:09

Cingi devasa oluyor Herkes her şeye

play27:12

bağımlı Tabii ki isimlendirme ii

play27:14

değiştirmek çok tehlikeli olur

play27:17

uygulamayı daha genişleyebilir hale

play27:25

getirebilmek Ama herkes ona ulaşıyor

play27:27

rahatlıkla ulaşsın Ulaşmasın rahatlıkla

play27:30

Ulaşmasın varsın kullandığımız Framework

play27:33

40 yılın başı Spring kullanmışız varsın

play27:35

Spring bunu inject etsin yaptığı tek şey

play27:38

singleton olarak Ayağa kaldırmak ve onu

play27:40

inject etmek Bu kadar

play27:43

basit Daha bir sürü isimler isimler

play27:46

isimler isimler hepsini kullanıyoruz

play27:49

Peki ne manaya geliyor controller

play27:51

biliyoruz ama arkasında Manager

play27:52

repository helper parser vesaire milyon

play27:55

tane var yemiyoruz Hatta bir seferinde

play27:59

işte message helper message Broker

play28:01

message işte zımbır bir sürü başında

play28:04

message olan 50 tane Class gördüm

play28:06

arkadaşla beraber kod yazıyorduk dedik

play28:09

ki bu ne yapıyor Bunun bunun birisinin

play28:10

grafiğini çizmesi lazım kod grafiği

play28:13

çizilmesi gereken

play28:16

bir bir şey olmaması gerekiyor Koda

play28:18

baktığınız zaman onu anlamanız gerekiyor

play28:21

o yüzden bu isimleri kullanırken dikkat

play28:23

etmemiz gerekiyor ne manaya geldiğini

play28:25

Bilmemiz gerekiyor ve e Framework

play28:28

bağımlı kod yazmadan bunları kullanmayın

play28:31

demiyorum ama kullanırsak da Bunlar

play28:34

sadece ama sadece entry pointler olarak

play28:37

kullanılarak e kodu tasarım Design

play28:41

pattern lla

play28:44

şekillendirmek şimdi E uygulamayı

play28:48

parçalara bölmek bahsettik parçalara

play28:50

bölmek çok kritik yeni abstraction

play28:53

yaratmak çok daha kritik yani yeni yeni

play28:56

isimlendir yeni gerektirir Yani

play29:00

uygulamanızda siz Ticket var o ticketı

play29:04

satın alacak User var bir de sınız var

play29:07

bir de şu var bu var ve sürekli Bunları

play29:10

bir yerden bir yere pas etmeye

play29:12

başlıyorsunuz her yerde Ticket ve User

play29:14

beraber gidiyor Ticket ve User Ticket ve

play29:16

User her yerde Ticket ve User devam

play29:18

ediyor O zaman bir yerlerde duplikasyon

play29:22

yok mu ama kod duplikasyonu değil copy

play29:24

paste değil bunlar Ticket ve User

play29:26

beraber devam etmek zorunda Ama bu

play29:29

knowledge duplication deniyor buna

play29:31

bilginin duplikasyonu tekrarı

play29:34

uygulamalarda Dry Prensi diye bir şey

play29:36

duymuş olabilirsiniz Dry Prensi do not

play29:39

repeat Yourself çoğunlukla şöyle söyler

play29:42

kodda duplikasyon olmamalı kod düplik

play29:45

asyonu Tamam Koda baktığınız zaman

play29:47

birbirlerini tekrar eden if if if if if

play29:50

if falan bunlardan bahsetmiyoruz sadece

play29:54

bilginin de tekrarından bahsediyoruz ve

play29:56

bu Bilgi tekrarı çok tehlikelidir

play29:59

birbirini tekrar eden bu bilgiler mesela

play30:01

kod rler düzenliyoruz bir Board Game

play30:04

yazıyoruz ve orada da bir board'un bir

play30:06

dama tahtası gibi X ve Y koordinatlarına

play30:09

göre taşları koyuyoruz her yerde XY

play30:11

geçiyor XY XY x XY XY Tamam bildiğiniz

play30:16

dve prensibini uygulamamız gerekiyor

play30:18

burada ciddi bir koku var coordinat

play30:21

location position gibi bir objenin

play30:23

içerisinde bunu enkapsüle edin yani bu

play30:25

İlla object oriented mekle alakalı değil

play30:28

Ya da istediğiniz herhangi bir

play30:31

paradigmayı

play30:32

kullanın illaki Oradaki duplikasyonu bir

play30:35

şekilde çözmeniz gerekir sadece yeni bir

play30:37

obje olması değil Ayrıca yeni veri

play30:39

yapıları da

play30:41

kullanabilirsiniz mapleri Collection lı

play30:44

vesair kullanmıyoruz sürekli ya her şeyi

play30:47

database'e yazıyoruz ya da her şeyi ama

play30:50

her şeyi primitifler olarak pas ediyoruz

play30:52

Oysa ki bu ortada uygulamanızın

play30:56

ortasında var olacak mapler Collection

play30:59

kodu geçici olarak bellekte

play31:01

tutabileceğiniz ve sonradan

play31:02

kullanabileceğiniz yapılar kritiktir

play31:05

neden kritik uygulama öyle devam edeceği

play31:07

için değil o veri yapılarından Siz daha

play31:10

sonra uygulama evrilir Ken yeni veri

play31:13

yapılarına yeni abstraction vara

play31:16

erişecek yani uygulama Yazdığınız an

play31:19

biten bir şey değil uygulama gelecekte

play31:21

genişleyebilir olması gerekli Bu da

play31:23

önemli adımlardan bir

play31:25

tanesi leak abdan bahsetmem gerekiyor

play31:28

leaky abstraction Yani abstraction daki

play31:31

Sızıntı abstraction Türkçesi çok

play31:33

soyutlama soyutlamanın sızıntısı Yani

play31:36

siz Biz her yerde nal kontrolü yapıyoruz

play31:40

e login kontrolü yapıyoruz User eş log

play31:45

in User ya da authenticated User eşit

play31:47

değil log n falan her yerde nal O ne

play31:50

anlama geliyor bu kadar low level bir

play31:53

abstraction anlamlı değil buradaki

play31:55

abstraction abstract CL

play31:57

bahsetmiyorum bildiğiniz kavramların

play31:59

abran bahsediyorum Eğer ki sizin

play32:02

uygulamanız bilet satın al Bilmem ne

play32:05

organize Event organize et session aç

play32:07

session kapat gibi metotlara sahip ya da

play32:10

o seviyede abstraction sahipse User

play32:14

login User eşit değilse n diye bir

play32:16

kontrolün orada olmaması gerekir Peki

play32:19

oraya o kontrolü koymamız gerekiyorsa Ne

play32:21

yapacaksınız işte onu ayrı bir metoda

play32:23

çekeceğiz Orada

play32:26

validate

play32:28

Locked authenticated onun gibi dışarıya

play32:30

almamız ve ona özel isimler vermemiz

play32:32

gerekiyor sonra taşıdığımız yeri Belki

play32:35

başka bir yere götüreceğiz yani uygulama

play32:38

evrilerek devam

play32:40

edecek

play32:42

implementasyon lı yine hep aynı örneğe

play32:45

doğru kayıyorum yani içeride

play32:47

sakladığımız detayları dışarıya

play32:49

vermememiz gerekiyor şimdi Eee Robert C

play32:53

Martin'in e her daim eee e referans

play32:58

verdiğim kişinin güzel bir sözü var Eğer

play33:00

bir şeyi yapmak daha yavaş daha zor Daha

play33:02

Zor Her geçen gün daha zor oluyorsa Dün

play33:05

yaptığınız Dün

play33:06

Eee ya da bir ay önce 3 günde

play33:09

bitirdiğiniz modülün benzerini yazmanız

play33:12

Bugün 2 hafta alıyorsa bilin ki

play33:15

uygulamanızın içerisinde dehşet kokular

play33:18

var ve

play33:19

hissetmiyoruz yani uygulamada bir

play33:21

problem var Oy bu problemi çözmemiz

play33:24

gerekiyor yani buna baktığım zaman bu

play33:28

üçgen yetersiz Arkadaşlar bu üçgenle

play33:31

Hayat bulabilmek mümkün değil bu üçgenin

play33:34

üzerinde Ayrıca cod review koymamız

play33:37

gerekiyor çünkü yazılımcılar olarak

play33:41

Bizler mükemmel değiliz geliştirdiğimiz

play33:44

kod doğru çalışmıyor yaptığımız tasarım

play33:47

hatalı Bize gelen requirement eksik

play33:49

testi yapan arkadaş test sadece Best

play33:52

caseleri Happy padleri test ediyor Yani

play33:55

herkese bir kus K var bunu kabul etmemiz

play33:58

gerekiyor yaptığımız şeyler kusurlarla

play34:01

dolu o zaman nasıl temiz Koda ulaşacağız

play34:04

yani kaliteli Koda nasıl ulaşacağız

play34:05

benim ulaştığım şey kaliteli kod

play34:09

diyebilmem için başka gözlerin de

play34:12

desteğine ihtiyacım var o açıdan

play34:14

bakıldığı zaman pay programming ve Code

play34:16

review ikisi çok ama çok önemlidir bunun

play34:21

sadece kod yazmak da değil sosyalleşme

play34:23

açısından da önemli bir yeri vardır

play34:26

sizin kurumsal yazılım kültürünüzü

play34:28

gerçekten ayak üzerinde tutabilmek ve

play34:30

insanların gıptayla bakabileceği bir

play34:33

iletişim ve Yardımlaşma kültürü

play34:35

oluşturabilmeniz için insanların

play34:37

birbirine iletişim kurabilmesi için

play34:39

fırsat vermemiz gerekiyor Bu da cod

play34:42

review ve p programming doğrudan bunu

play34:44

amaçlıyor Aslında

play34:47

şimdi buna baktığımız zaman eğer ki daha

play34:51

temiz bir Koda ulaşmak istiyorsanız

play34:53

lütfen Birbirinizin koduna yorumlar

play34:55

yazın lütfen ego ımızı bir yere

play34:57

indirelim egoların inen egoların

play35:00

ışığında kodu tartışalım ve kodun daha

play35:02

temiz daha az kokulu nasıl olabileceğini

play35:05

kavramaya çalışalım bunun Keskin bir

play35:08

şeyi yok kitaplar var bunun üzerine

play35:10

kitapları okuyalım tartışalım

play35:13

BG

play35:15

çözmeye ve debug yapmaya vaktimiz var mı

play35:20

Tabii ki var debug Yapmaya Tabii ki var

play35:22

çünkü kodu yazacağız B çözmeye vaktimiz

play35:25

var mı Tabi ki çözmeye vaktimiz var

play35:27

çünkü bug çıkarsa çözmezsek uygulama

play35:30

çalışmayacak bug çözmeye ve debug

play35:32

yapmaya vaktimiz var ama temyiz kod

play35:36

yazmaya test yazmaya tdd yapmaya pay

play35:40

programming yapmaya vaktimiz yok bunu

play35:43

kabul edemiyorum esasında bu tamamen bir

play35:45

algıda algı yönetimiyle alakalı bir şey

play35:48

yani bugün production da çok ama çok az

play35:52

bugını çıktığını düşünün ne kadar çok

play35:54

vaktiniz olacaktır ne kadar çok çok

play35:57

vaktimiz olacak Eee bunu sağlayabilen

play35:59

yolu daha 1 dakikadan itibaren buna

play36:02

yönelik kod yazmaktan geçiyor

play36:05

Eee düplik kasyon varı kaldıracağız

play36:08

duplikasyon lı kaldırırken de sadece

play36:11

kodu değil bilgi bilginin de duplike

play36:15

olduğu tekrarladığı yerleri de bulup

play36:17

Eee bunları kapsüle edeceğiz bunları

play36:20

tekrarından

play36:22

kurtulacağız ve lütfen her şeyi

play36:25

küçültecek

play36:27

Lütfen yeni klaslar oluşturalım her

play36:30

yerde dosyalar olsun önemli değil 5500

play36:33

satırlık bir klası mı tercih edersiniz

play36:36

yoksa 500 tane minik klası mı tercih

play36:39

edersiniz Tabii ki 500 tane minik klası

play36:41

Çünkü bir fili yemenin en kolay yolu bir

play36:45

Filik yemenin yolu lokmalara bölerek ya

play36:47

lokmalar şeklinde yememiz gerekiyor o

play36:50

nedenle lokmalara bölmem gerekiyor temiz

play36:52

kod lokmalara bölünmüş yazılımdır yani

play36:56

siz bir yazılımda lokmayla yamaya kodlar

play36:59

varsa bilin ki temiz değildir O kısım O

play37:03

nedenle interface deri classları

play37:05

aklınıza gelecek her şeyi küçük küçük

play37:08

parçalara bölmen

play37:13

şart ve Lütfen Birkaç konuya dikkat

play37:16

edelim frameworkler

play37:20

frameworkler

play37:22

şeyi kölesi kod yazmanın yanında

play37:26

keywordleri statik keywordleri herkes

play37:28

Bunu kullanırken 5 t'yi cebinde hazır

play37:30

etmesi gerekiyor Yani yeri geldiği zaman

play37:32

kullanacağız ama kullandığımız zaman da

play37:34

işte 5 TL dememiz gerekiyor Yani bunları

play37:36

Eee gerçekten bilgece kullanmamız

play37:40

gerekiyor optimizasyona çok kafa

play37:42

görüyoruz Tamam yazılımcı olarak

play37:44

kodumuzu güzelleştirmek için seviyoruz

play37:46

güzelleştirmeyi ama bırakın ilk günlerde

play37:48

kötü olsun temiz olmasın ama şunun

play37:51

bilincinde olalım bu kod reaktör edilmek

play37:53

zorunda reaktör edilmeden bitmemiş

play37:56

demektir

play37:57

ve önceden büyük tasarımlardan kaçının

play38:00

uygulamayı kodu yazarken iki paterne

play38:02

denk geliyorum bir

play38:04

tanesi hiç düşünmeden kod yazanlar işte

play38:07

bir feature geliştiriyoruz Evet yazdım

play38:09

kontroll anlat devam et yazıyorum falan

play38:13

yazdın mı Evet işte repos Yazdım şu an

play38:15

Database atabiliyorum çek çekeceğim

play38:17

gönder bana bilgiyi böyle şeyler

play38:19

görüyorum İkincisi de anlatıyorsunuz o

play38:22

zaman bir çizelim başlıyor çizmeye o

play38:25

böyle olmaz öyle olmaz çizdik çe çiziyor

play38:28

anlattıkça anlatıyor bitmiyor O upfront

play38:30

Design var ya bitmiyor en önce yapılan

play38:33

bir Short upfront Design diye geçiyor

play38:35

ecal dünyasında Yani kısa bir tasarım

play38:37

ilk kafanızda Böyle bir şey olabilir

play38:39

diye Giriş yapın daha sonra refactor

play38:42

edeceğinizi emin olun refactor

play38:44

edeceksiniz O nedenle işte hard cod

play38:47

buraya 42 yazdım kalmas kalsın boş ver

play38:50

ama onu reaktör edeceğini de garantisini

play38:54

ver bunların ışığında baktı ın zaman bu

play38:57

benim için yazılım temiz kod tasarımının

play39:00

Bermuda Şeytan üçgeninin de ötesinde

play39:03

Eee özel bir yapısı

play39:06

e doğrudan gördüğüm ve Tanık olduğum

play39:11

bilgiler ve deneyimler böyle daha

play39:14

detayları için lütfen bu konular

play39:16

hakkında harkulade kitaplar var bu

play39:18

kitapları da yalayıp yutmam gerekiyor o

play39:21

konuda da hani sizden de o tutkuya sahip

play39:24

olacağınıza eminim

play39:27

beni dinlediğiniz için teşekkür ediyorum

play39:29

Arkadaşlar sağ

play39:33

olun

Rate This

5.0 / 5 (0 votes)

Benötigen Sie eine Zusammenfassung auf Englisch?