TTNET, elektrikçiler, telefon kabloları ve ev sahipleri

Herkese tekrar merhabalar,

Şimdi geçen yazımda bahsettiğim, yazdığım konularda daha kohezif bir ilerleme isteğim vardı. Yalnız güzel İstanbul insanın önüne öyle şeyler çıkartıyor ki, anlatmadan geçme ihtimalim yok, tarihe kesinlikle not düşmemiz gereken saçmalalıklar bunlar..

Neyse efendim, ilk günden başlayalım. 17 Ağustos çarşamba günü işten çıkıp Emniyetevler deki rezidansıma gittim. Eve geldim bir de ne göreyim internet kopup kopup bağlanıyor. Ben de üşenmedim TTNET in müşteri hizmetlerini aradım. Dedim kardeşim bu internet kopuyor, nedendir bir el atın şu işe. İşte klasik beylik laflarını kullandılar ve sonunda sinyal alamadığımı, arıza kaydı oluşturacaklarını söylediler ve ben de tamam deyip telefonu kapattım. Allah dan yanımda kullandığım bilgisayara gayet uyumlu ve 3G paketi olan bir telefon vardı da onu bilgisayara bağlayıp mağdur olmaktan kurtuldum. Bu arada TTNET in müşteri hizmetlerinde hiç bir şekilde cep telefonu indirimi yok, ararsanız 4 dk için 4 tl para ödeyebiliyorsunuz, olayın böylesine de bir ekonomik boyutu var.

Sonraki günlerde ses çıkmadı elemanlardan. Ben de haliyle bir kaç kez daha aradım perşembe ve cuma günlerinde. Hatta ve hatta twitter a TTNET i şikayet eden tvitler yazdığımda, adamlar sosyal medya kanalından bana ulaşıp şikayetimi not ettiler ayrıca.

Neyse sonunda geçtiğimiz pazartesi bir telefon aldım. Arayan eleman, gayet asker arkadaşı ile konuşurmuş edasıyla evde olup olmadığımı sordu. Ben de kendisine mesai saatinde olduğumuzu doğal olarak da işte olduğumu söyledim. Sanki ev hanımıyız ulahn allah allah ya. Neyse bu da biz gene de bakarız, yaparız birşeyler deyip, telefonu kapattı. Ben de safım ya, ulan diyorum heralde adamlar çözecek sorunumu, kurtuldum falan diye seviniyorum. Akşam eve geldim, büyük bir hevesle modeme baktım ve ne göreyim, eskiden şifa niyetine arada sırada yanan adsl ışığı tamamen sönmüş ve sıfır sinyale düşmüş duruma gelmiş. İnanılmaz bir moral bozukluğu ve 5tl sonrasında gene içimi TTNET müşteri hizmetlerine döktüm.

Ertesi gün daha olumlu bir güne başladım. Öğleden sonra pazartesi beni arayan numarayı arayıp durumun ne olduğunu sordum. Telefonu açan adam bana gene asker arkadaşı edasıyla randevu ayarlamamız gerektiğini söyledi. Ben de öğle tatili uygun olur mu diye sordum. Sonuçta çalışıyoruz ve en uygun zaman bu. Ama beyefendi beğenmedi, yemek yiyorlarmış (yalana gel, kesinlikle oruçlu hepsi elemanların), hatta saat 13:30 u bile beğenmediler ve saat 14:00’te anlaştık(bu insanlar adamı bezdirmeyi iyi biliyor arkadaş). Neyse ben tam kapamaya doğru dün gelen ekibin akıbetinin ne olduğunu sordum ve elemanın şaşkınlığıyla karşılaştım. Adamın diğer ekipten hiçbir haberi yoktu ve bir excel dosyasına bakacağını söyledi(bu devirde hala yaptıkları işleri excelde tutan insanlar var ulahn). Baktı dedi ki, arkadaş biz zaten gelmişiz oraya, bizim adamlar kablo ıslahı gerektiğine karar vermişler. Ulan dedim iyi be, kablo ıslahının ne zaman olacağını sordum. Valla hiç belli olmaz her an gelebiliriz şeklinde benzer saçmalıklar geveledi ve sen yarın bizi bir ara sor, durumu öğren deyip kapattı.

Çarşamba günü ben bunları öğleden sonra aradım arkadaş, başka bir eleman açtı bu sefer telefonu. Dedim nooldu arkadaş bizim iş(ben de bunlar gibi konuşmaya başladım artık ehehe)? Bu eleman bir baktı sordu mordu ve en sonunda, kablo ıslahına gerek olmadığını, benim elektrikçi çağırmam gerektiğini söyledi. Akşam o sinirle eve gittim, yarım saat elektrikçinin dükkana gelmesini bekledim, elektrikçide de pis bir huy, adam cevap veremeyeceği zaman kesinlikle açmıyor telefonunu(bakmayın elektrikçi ile de kanka olduk arada). Neyse sonunda tuttum adamı götürdüm kutuya, baktı ve dedi ki arkadaş biz burada birşey yapamayız, hangi kabloların sana ait olduğu belli değil. Haydaaaa, döndük başa. Aradım gene TTNET’i, dedim eleman gönderin kabloları işaretlesinler. Bunlar bana tabii tabii beyefendi şeklinde klasik yanıtlar verdiler.

Bu arada not düşmem gereken başka bir olay var. Sosyal medya kanalı var TTNET’in, buradaki arkadaşlar biraz daha düzgün çalışan insanlardan oluşuyor, iş takibi yapacak kadar işlemci gücü ve hafızaya sahip beyinleri var ve kendi aralarında da organize olabiliyorlar. Buradaki bir eleman bana Türk Telekom’u arayıp onlardan kutu için şikayette bulunmamı önerdi. Bu sayede gelen ekipler kutuyu düzenleyip benim de kablolarımı işaretleyebilirlermiş. Tamam dedim arayayım şu Türk(Arap) Telekom’u, demez olaydım. Açtım, kendini çok beğenmiş ses tonuna sahip bir hatun telefonu açtı. Dedim arkadaş böyle böyle, çoook soğuk bir biçimde bu sorunun kendilerini ilgilendirmediğini, kutuya falan bakmayacaklarını, ankastre denilen telefon kutusunun sorumluluğunun bina yönetimde olduğunu söyledi. Elektrikçi yapamıyor arkadaşım bina yönetimi nereden bilsin hangi kablo kimin deyince de efsane cümlesini kurdu : “Daha iyi bir elektrikçi bulmanız gerekiyor beyefendi….”. Dedim ulan şaka yapıyor heralde, ama sonraki cümleleri de bunu destekler biçimde oldu. Bir yaşıma daha girip (bu süreçte sanırım 34 yaşına falan geldim) telefonu kapattım.

Mübarek Kadir gecesinin olduğu cuma günü de böyle geçtikten sonra, ipleri tamamen elime almaya karar verdim. Sabah ilk iş TTNET’i arayıp destek elemanı istediğimi söyledim. Klasik yanıtlar aldım. Kalktım üşenmedim gittim Gayrettepe’deki genel müdürlüğe. Kapıdaki güvenlik arkadaşlar şu anda müşteri şikayetleri inceleyen kişilerin çalışmadığını, ama kendi telefonlarından TTNET’i arayabileceğimi söyledier. Aradım bu sefer tehdit ettim arkadaş, çıkıcam dedim, kullanmayacağım dedim, Turkcell dedim, Uydu.Net dedim bir sürü şey dedim. Eleman da sonunda dayanamadı bana Gayrettepe santralin adresini buldu ve verdi. Güzel bir dilekçe de döşendikten sonra kalktım gittim santrale. İnanılmaz kolay şekilde muhattap buldum ve bir görevlinin gelip kabloları işaretlemesini söyledim. Ve adam gerçekten geldi lan!! İnanamadım ama geldi, neredeyse şöyle bir adamı elleyecektim gerçek misin ulan sen diye… Neyse bu işaretledi kabloları ve gitti öğleden sonra saat 4 itibariyle. Akşam sonunda elektrikçi geldiiiii ve gene olmadı lan!!! Gene olmadı, bu sefer modemi getirdik doğrudan telefon kutusuna bağladık. Orada da olmadı, meğerse kutuda da problem varmış lan? Elektrikçi modemin de arızalı olabileceğini söyledi. Arkadaş aldım modemi ana ocağına gittim taktım ve modem takır takır çalıştı. Ben gene açtım TTNET’e döşendim durdum. Ama bu sefer fazla ileri gittim… İyi oldu ama : )).

En sonunda pazartesi geldi çattı… Yine kalktım gittim santrale, durumu anlattım, bir adamı görevlendirdiler. Adamcağız geldi kutudaki sorunu çözdü gitti. Ben gene akşama kadar elektrikçiyi bekledim, 3 te geleceğim diyen adamın elemanı gelip çalışmaya başladığında saat 7 olmuştu. Eleman da lise arkadaşlarımdan Bertan’ın aynısıydı ve aynı çakallıktaydı, elektrikçinin bana 50 liraya yaparım dediği işe en az 80 e olur falan dedi. Neyse… Elektrikçiyle konuşunca 60’a indirdim ve sorun çözüldü. Ben de 12 günde falan bayağı bir zihinsel efor sarfetmiş oldum hayırlısıyla.

Gelelim işin bir bu kadar daha enteresan yanına.. Bu süreçte tabii ki her sorumlu kiracı gibi ev sahibeme haber verdim. Dedim bakın kardeşim böyle böyle durumlar oldu. Hatta kocası, kombiye bakması için usta getirdiğinde(evet kombi de bozuk ak), adama direkt yüzyüze söyledim, beni sadece geçiştirip kaçtı. Neyse elektrikçi çalışmaya başlamadan önce arayıp haber verdim kendisine, bana cevaben tüm bunların sorumlusunun TTNET olduğunu, ne olduysa TTNET özelleştiğinden beri olduğunu, (kendisi aynı zamanda emlakçıdır) son zamanlarda verdiği 10 evden 5’inde benzer problemlerin olduğunu ve ev sahiplerinin bu giderleri karşılamadığını belirtti. Sonuç olarak da kendisinin bu ücreti ödemeyeceğini, kablolarının sağlam olduğunu aktardı. Ya güzel Allah’ım sen bana sabır ver. Ki ben eve girdiğimde en az 15 tane yanmayan spotu tekrar taktırdım, sökülmüş prizlerin yerine yenilerini taktırıp parasını istememiş adamım, kala kala bir 60 liraya kalan bir ev sahibi ile karşı karşıya kaldım.

Sonuç olarak, bundan sonra TTNET ile iş yapacaklara nacizane bir tavsiyem var, hiç müşteri hizmetlerini arayıp Turkcell i zengin etmenin manası yok, bir iki aramada çözemediğiniz tüm sorunları, direkt adamların masasına götürün, sizi orada krallar gibi karşılamak zorundalar çünkü karşılarına bir telefon sesi değil, madde olarak çıkıyorsunuz.

İkincisi ev tutacaklara tavsiye, ev sahibini alıp eve gidin taşınmadan önce. Tek tek arıza tespiti yapın, herşeyin çetelesini çıkarın. Sonra böyle yavşaklıklar yapamasınlar.

Ayrıca şunu da belirtmek isterim ki bundan böyle ev sahipleri ve TTNET ile ilgili tüm sıkıntısı olan arkadaşlara yardım edeceğim elimden geldiği kadar ve bu gibi kronik toplumsal sorunların çözülmesi için daha kollektif çözümler de düşünmeye ve tasarlamaya başlıyorum.

Öptüm, kalın sağlıcakla…

Use Case, kullanım senaryolarına giriş

Herkese merhaba,

Biliyorum konularda dağınık gidiyorum ama arada aklıma anlatmam gerektiğini düşündüğüm şeyler geldiğinde sırayı sapıtıyorum. Normalde bu seferki yazımda geçen ingilizce olarak yayımladığım özet design patterns yazısını türkçeye çevirecektim ama konu gene değişti.. Ve bugünkü konum kullanım senaryoları olarak türkçeye çevrilmiş olan use case mantığı.

Yazılım dünyasında kullanıcı gereksinimleri diye bir kavram var ilgilenen arkadaşların bildiği gibi. Bu kullanıcı gereksinimleri başlamanız gereken projenizde, sonuçta oluşacak yazılımın sahip olması gereken özellikleri madde madde sıralayan bir belgedir. Her madde, yazılımınızda kesinlikle olması gereken bir özelliği işaret eder çoğu zaman.

Kullanıcı gereksinimlerinin bizim için kötü yanı, oldukça resmi bir dille yazılmış olmalarıdır. Örnek olarak :

Kullanıcı, ekranda gördüğü içeriğin yerini dilediğince değiştirebilmelidir.

Bu dil hem resmi hem de yoruma aşırı açık bir belirtmedir. Siz bu gereksinim ile ilgili olarak müşterinizle yada proje müdürünüzle anlaştığınızı zannedersiniz ve kodlamaya başlarsınız. Belli bir süre sonra projeniz bittiğinde, ve sevinçle sonuçları müdürünüze açtığınızda, iki taraf da farklı ruh hallerine bürünür. İlk olarak müdürünüz bu özelliği nasıl test edeceğini bilmiyor olacaktır büyük ihtimalle. (En iyi proje müdürleri eski yazılımcılardır!!!) İkincisi ve daha önemlisi, siz sürükle bırak için haftalarınızı harcamışken, müdürünüz sizden sürükle bırak değil de mesela bir yönetim ekranında menülerin yerlerinin değiştirilmesini istediğini söyleyebilir. Bu durum da tam bir kabus olsa da, günümüz projelerinin çokca başına gelen bir beladır. Peki biz bu durum için ne yapabiliriz?

Bu şekilde yoruma açık cümleler kullanırsak birşey yapamayız. Çünkü bu tarz cümleler müşterilerin ve pointy haired boss ların çok sevdiği cümlelerdir ve hemen anlaştığınızı görerek şaşırırsınız. Aslında böyle olmaması gerekiyor, uzun tartışmalar yaşanmalı ve istenenin net olarak belgelenmesi sağlanmalıdır.

Bunun için, kullanım senaryosu denilen teknik kullanılabilir. Use Case olarak literatüre geçmiş bu kavram İsveçli bilgisayar bilimcisi Ivar Jacobson tarafından ortaya atılmıştır. Kullanım senaryolarında gereksinimler bir sıra ile sistemde yapılacak işler tasvir edilerek belirtilir. Örnek vermek gerekirse:

  1. Kullanıcı sisteme giriş yapar.
  2. Yönetim menüsüne tıklayarak yönetim ekranını açar.
  3. Yönetim ekranında, kutuların yerlerini değiştirme listesinden kutuya yer seçer.
  4. İstediği tüm kutuların düzenlenmesi bitene kadar 3. adımda kalır.
  5. İşlem bitince save düğmesine basarak, düzeni saklar.

Bu şekilde yazılan senaryo hakkında netlik ortadadır. Her taraf tam olarak anlayana kadar üzerinde çalışılabilir.

Kullanım senaryoları özellikle Unified Process denilen birleşik proses yazılım geliştirme tekniğinde yoğun olarak kullanılmaktadır. Özellikle sistemin geliştirilmesi bittiğinde resmi süreçlerde kabul testleri olarak da kullanılabilir. Hatta büyük ihtimalle test yazmak bile zorunda kalmazsınız çünkü adım adım ne yapmanız gerektiği zaten kullanım senaryolarında yazılıdır.

Bunlardan daha da önemli olan özelliği, sistemin bu şekilde tasviri sayesinde, elimizde sınıf olması ihtimal dahilinde olan kavramlar ortaya çıkar ve bu da nesneye yönelimli tasarım açısından bize büyük bir avantaj sağlar. İlk olarak isimleri ve isim tamlamalarını ayırırsınız. Bunlar bir liste halinde tutulur. Örneğin :

  • Kullanıcı
  • sistem
  • giriş
  • yönetim menüsü
  • yönetim ekranı
  • kutu
  • yer değiştirme listesi
  • işlem
  • save düğmesi
  • düzen

Bu isim ve isim tamlamalarının bir kısmı anlamsız olacaktır. Aynı anlama gelenler, yapılan işle alakası olmayanlar ve önemsiz varlıkları temsil edenler silinir. Önemsiz varlıkları temsil edenlerden daha büyük varlıklara ait olanlar, o fiziksel sınıfın özellikleri olabilirler. En son olarak da bu cümlelerdeki fiiller, isimlerin (yani fiziksel sınıfların) aralarındaki ilişkileri belirler. Bir sonraki yazımda bunun daha detaylı bir örneğini vereceğim. Şimdilik herkese iyi çalışmalar.

Design Patterns, An introduction

Today I would like to relate to a little research i have done on my
daily job. These abstracts will provide a path for us on the road
to further investigate these patterns. Also a turkish version of
this work will be published too.
	Recommended GOF Patterns

	1 - Abstract Factory
	    	     Abstract factory creates factories that produces
		     different classes. For example if we need a factory
		     that either creates win buttons or osx buttons, we
		     need a factory to create these factories.
		     Here we need to define what factory is by the way :
		     if we have more than one adapters for example,
		     we need to know which one to create in a given
		     situation, but if we give this responsibility to
		     any class in the system, we improve the dependency
		     of each object to another, so we need another class
		     to handle this responsibility. This class is the
		     factory class.
	2 - Factory Method
	    	     This pattern is used to put the creation method
		     to the class which will use the created object
	3 - Singleton
		     Singleton pattern is used to create the factory itself
		     . To implement a singleton pattern you have to define
		     the constructor as private and create a static method
		     for the class that cannot be overridden. This static
		     method will return an object of the class.
	4 - Adapter
	    	     Main function is to change the interface of a class to
		     match other classes, for example, there may be more
		     than one outside class that does the same operation
		     for our system but we don't want to change the inner
		     classes according to the outer class that we use
		     so we create adapters for each class and provide the
		     same interface to our inner classes, so the inner
		     classes dont have to know which class they are dealing with.
	5 - Composite
		     Sometimes an object should not know about the way a
		     method works. For example an object may work with a
		     single other object to accomplish some task and some
		     other time the same object may require to work with
		     multiple objects to do the same task. If the
		     implementor object knew about the objects it works,
		     this reduces low-coupling and flexibility. In order
		     to overcome this problem we use composite pattern.
		     A class is constructed with same interface as the
		     other classes, and the multiple objects work in that
		     class, so all other objects dont know anything about
		     the sub objects that does the work.
	6 - Facade
		     This pattern is used to hide complexity of a system
		     (either inside or outside) from other parts of the
		     system. For example you want to hide business logic
		     from representation logic because the representation
		     can change any time but business logic is more stable.
		     So a facade class is constructed to centralize the
		     operations done on a complex subsystem.
	7 - Observer
		     This pattern is used when a change of state in a
		     class requires the attention of many other classes.
		     If we write a function for every class about the
		     change, we have a highly coupled class system and
		     it will be very hard to make a change in the class
		     that does the changes.
		     So in Observer pattern as a solution to this problem
		     an interface is created, and the classes that want
		     to learn about the change, implements this interface.

	8 - Strategy
		     Over time an object may require different kinds of ways
		     to do the same operation. This can be examplified by a
		     a discount method, some conditions require different
		     discount methods, and some other conditions require
		     different methods. In order to cope with the complexity
		     this problem presents, we use the strategy pattern. In
		     strategy pattern, a method is abstracted using an
		     interface. Then different strategies are implemented
		     using this interface. As a result, implementor class
		     knows nothing of the strategy class, it just uses the
		     specified interface.

Artık yeter!

Az önce sevdiğim yazılım yazarlarından Paul Graham’ın bir makalesini okuyordum (http://www.paulgraham.com/wealth.html). Açıkçası yazılanları okuyunca daha fazla dayanamadım ve oradaki bilgilerin bir kısmını paylaşmak istedim.

Yıllarımı verdim kurumsal şirketime

İlk olarak şunu söylemeliyim ki, tek bir şirkette yıllar boyu çalışma ve orada kariyer edinme, 80ler sonu ve 90lar başında son bulmuş bir fenomen. Ama tabii ki annelerimizin ve babalarımızın tavsiyelerine gereğinden fazla uyduğumuz için belki de doğruluğunu pek test etmeden kabul ettiğimiz bir tuzak aynı zamanda. Bir çok akıllı ve kendini iyi yetiştirmiş profesyonelin kendini sadece kurumsal olduğu için büyük şirketlere adadığını görüyorum ve buna gerçekten üzülüyorum.

Bir kere kapitalizmin de herşey gibi değiştiğini kabul edelim, artık Internet elimizin altında ve herkes herkesin yaptığının iyi kötü bir benzerini yapabiliyor, dolayısıyla artık dikkat üründen, özelleşmiş müşteri hizmetine ve deneyimine doğru kayıyor. Bu da ne demek oluyor, bizim büyük şirketlerin hemen üretim ve iş modellerini değiştiremeyeceği, dolayısıyla karlı kalmak için giderlerini kısmaları gerektiği demek oluyor. 2008 krizinde gördük ki, giderlerin kısılması gerektiğinde ilk olarak çalışanlar işlerinden çıkartılıyor. : ) Dolayısıyla işiniz pek de güvende değil (küresel ekonomide Paul Graham’ın söylediğinin aksine en büyüklerin en büyük karları elde etmeleri için de arada sırada büyük krizler çıkması gerektiğini de artık 15 yaşındaki solcu liseliler bile biliyor).

Ama ben çok iyi bir çalışanım

Evet öylesiniz, hatta belki de düşündüğünüzden bile iyisiniz. Ama büyük bir yerde çalışırken birden fazla takım ve onlarca insanla bir arada çalıştığınızı unutmamanız gerekiyor. Bu durumda tek bir kişi ne kadar iyi çalışırsa çalışsın, istatistiğin altın kuralları devreye giriyor ve o işin geneli genelde ortalama olan insanlar tarafından yapılıyor(1000 mühendisin içindeki en iyi 10 mühendisle aynı takımda çalışma olasılığınız sizce kaç?). Sonuç? Ortaya ortalama bir ürün çıkacaktır ve lütfen bu ortalama ürünün ortaya çıkmasında göz yaşartıcı bir çalışma yapıp saatlerce mesai yaptığınız için ödüllendirilmeyi beklemeyin, üzülürsünüz.

İşte ustanın devreye girdiği nokta

Bu noktada demin anlattığım durumdan kurtulmanın yolu da ortaya çıkıyor, daha iyi bir iş yapmak istiyorsunuz, daha iyi kazanmak istiyorsunuz. O zaman o 1000 mühendisin içindeki en iyi 10 mühendisle birlikte çalışmak zorundasınız gerçekten de. Böylesi bir durumda hem birbirinizi daha iyi tartabilecek ve sonuçta ortaya çok daha mükemmel bir ürün ortaya koyabileceksiniz, ürünün mükemmelleşmesi de sizi aradan çıkartacaktır. Bu sayede gidip de ‘Hey ben çok sıkı çalıştım, aç x programını bak, bilmemne özelliğinin eklenmesi için şu kadar saat çalışmışım’ diyebileceğiniz bir durum ortaya çıkıyor. Peki bu durumu nerede bu kadar rahatlılıkla ve kesinlikle dile getirebilirsiniz? İlk örnekte verdiğimin aksine küçük ve hırslı insanlardan oluşan bir şirkette bu isteğinizi gerçekleştirebilirsiniz. Önemli olan bu hırslı ve küçük takımı motive edebilmek ve onlara uğraşmaları için güzel ve çok zor bir problem verebilmek.

 

Böyle bir çalışma ortamı bulmak da imkansız değil. Sadece aramaktan ve biraz yorulmaktan korkmamak gerekiyor, o kadar..