Yazılım Geliştirmenlerini Motive Eden 10 Madde

Herkese Selamlar ! Bu yazımız içerisinde özellikle konuk olduğum etkinliklerde tarafıma çok fazla sorulmuş olan bir soruyu cevaplamaya karar verdim . Sorun şu kendimizi ya da yazılım geliştirmenlerinin motivasyonunu yüksek tutmaya yarayan çevremde ki diğer yazılım geliştirmenlerini gözlemleyerek elde ettiğim sonuçları paylaşmak istiyorum sizler ile fakat bu yazılım sizlerden bir şey rica etmek istiyorum eğer ki kendi motivasyon kaynaklarınızdan herhangi bir tanesi bu maddeler içerisinde yok ise lütfen yazının altına yorum olarak bırakmayı unutmayın . Bu sayede herkesin bu zamana kadar fark etmediği ama sizlerin kuracağı bir kaç cümle ile kendi motivasyonunu keşfetmesini sağlayabiliriz .

Bir Şeyler Yaratmak
Kurumlarda değil ama özellikle üniversitelerde konuşmacı olduğumda öğrenciler tarafından neden bu mesleği seçtiğime dair çok fazla soru geliyor. Bence meslekler ikiye ayrılır arkadaşlar. Bazı mesleklerde zamanınızı satarsınız bazı mesleklerde ise düşünce gücünüzü kullanır ortaya yeni birşeyler çıkmasını ya da varolan bir problemin giderilmesini sağlarsınız . Kod yazmaya başlamadan önce zaten bilgisayar kullanıyordum aslında sadece ıyun oynuyordum. Kod yazmaya başladıktan sonra ise şunu farkettim . Eğer ki yazılım geliştirmenliği ile alaklı bir meslekte değilseniz bizler bilgisayarı değil bilgisayar bizi kullanıyor. Bir film izlemek istiyoruz istenilen formatı açması için uygun programları ya da codec paketlerini yüklemek zorunda kalıyoruz . Oyun oynamak istiyoruz dakikalarca kurulum işlemleri ile uğraşıyoruz . Neyin eksik ya da neyin yanlış olduğunuz hep o bize söylüyor ve biz onu gerçekleştiriyoruz . Kod yazmaya başladığımda ise bu durumu değiştirebileceğimi farkettim . Bu sefer bilgisayara bir takım komutlar sayesinde istediğim işlemleri ne zaman , hangı sıra ile ve kaç defa tekrar ederek yapması gerektiğini ben söylüyordum ve benim istediklerimi yapıyordu işte bu noktada bazen yazmak istediğim bir uygulama bazen ise karşılaştığım problemi bunlar yardımı ile çözebiliyordum. Yazılan her bir satır kod başka bir kodun temelini oluşturuyordu . Ortaya çıkacak olan ürünün nasıl değiştiğini nereden nereye geldiğini gayet güzel ve net bir şekilde görebiliyordunuz . Eğer ki siz de kendinizi bu tarz bir sorunu çözdükten sonra tatmin olduğunuzu hissediyorsanız doğru yerdesiniz demektir.

Her Zaman Yeni Şeyler Öğrenmek
Bu durum ne kadar iyi ya da ne kadar kötü tartışmaya açık fakat kesinlikle değiştirebilceğimiz bir durum değil ne yaparsak yapalım klişe bir cümle olacak ama teknoloji ilerliyor , frameworkler değişiyor , eski bilgilerimizi her zaman yenisi ile değiştirmek zorunda kalsakta tecrübemizin üzerine yeni bilgiler ekleyerek devam etmemiz gerekyor . Monoton bir iş değil bence gayet güzel .

Meydan Okuma (Challanges)
Kendi kendinize meydan okuma fırsatı var bu meslekte !!! Her yeni başlayan gün içerisinde müşterinde gelen bir taleple kısa sürede büyük bir özellik eklemek zorunda kalabilir . Her zaman dengeli bir şekilde çalışan web uygulamanızın neden artık yavaşladığını çözmek zorunda kalabilirsiniz . Yeni bir algoritmayı anlamaya çalışmak bir gün öncesine kadar hiç ortalıkta gözükmeyen ama birden ortaya çıkan bug dediğimiz hatayı bulmak zorunda kalabilirsiniz. Eğer ki rekabetçi kişiliğiniz var ise ve kendinize meydan okumayı seviyorsanız doğru yerdesiniz .

İşleri Yoluna Koymak
Benim en çok haz duyduğum maddelerden biri de bu madde mesela . Bir uygulama düşünün web , mobile farketmez hafta sonu müşteriniz tarafından bir çok hatası fark edilmiş ve panikle Pazartesi sabahı bunları müthiş bir panık ses tonu ile sizinle paylaşıyor. Siz de biraz panik oluyorsunuz ama tabi ki de müşteriye belli etmek yok . Adım adım çözüyorsunuz ve bunu müşteri ile paylaştığınız da çözümünüz onu tatmin ettiyse eğer gerçekten sizi motive edecek esas cümleleri ondan duyuyorsunuz. Müşteriniz bir iltifatta bulunmasa bile kullandığınız proje-süreç yönetim sisteminizde adınıza atanmış olan görevleri tamamlandı kısmına sürüklemek güzel bir his . . .

Kendi Şirketinizde ya da Piyasada İşe Yarar Bir Eleman Olduğunuzu Göstermek
İşe girdikten sonra başlarda zorluk çekersiniz . Belirli bir süre sonra ki bu süre kişiye göre değişir o işi tek başınıza yapmanız beklenir . Tek başınıza yapmaya başladıktan sonra daha zor sorunlar üzerinden kimseden tek bir yardım bile almadan ilerleyebiliyorsanız o şirketin ya da o proje için diyelim vazgeçilmez elemanlardan biri olabilirsiniz . Bu gerçekten hem iyi hem kötü bir durumdur. İyidir size özgüven ve motivasyon sağlar . Yine aynı sebeplerden dolayı kötüdür ben vazgeçilmezim şeklinde tavırlara bürünürseniz sonuçları ağır olabilir . Şunu unutmamalısınız ki her meslek grubunda kimse vazgeçilmez değildir …

Karar Konumunda Olmak
Bazen yeni bir teknoloji bazen ise işe yeni girecek birileri . Hiç farketmez yeterince özenli olarak çalıştığınızı farz edelim ve gerçekten de işini iyi yapan birisiniz . Şirket sahibi ya da çok daha büyük bir firmada çalışıyorsanız o şirket içerisinde önemli kararlar alınırken size danışılması cidden önemli bir durumdur . Sizi rahatsız edecek ya da esas ihtiyaçları belirleyecek olan kişi siz oluyorsunuz bu nokta da ve yeterince özgürseniz istediğiniz gibi şekillendirebilirsiniz bu süreci.

Geliştirdiğiniz Ürüne İnancınız
Karşılaşmız olduğunuz her bir zorluk aslında sizin için bir sınav . Bazen kolay bazen zor hatalar ile karşılaşabilirsiniz . Kendi kişisel motivasyonunuzu arttırmak ve yeniden enerji toplamak için kendinizi ödüllendirmeyi ihmal etmeyin . En önemlisi ise bu ödüllendirme esnasında o ödülü hangi adımları izleyerek kazandığınızı yani hatayı nasıl çözdüğünüzü sakın unutmayın. Yazımı okuduğunuz için çok teşekkür ederim sonra ki yazılarda görüşmek üzere….

Maaş
Her zaman olmasa bile maaşda motıvasyon kaynağı olabilir aranız da buna itiraz edip maaşı ilk sıraya koymaya çalışanlar olacaktır fakat emin olun ilk sırada maaştan ziyade o işi yaparken ne kadar huzurlu olduğunuz olmalı. Tabi böyle dedik diye maaşlarında öldürülmesine gerek yok . Bizleri yine tatmin edici maaşlar ile zam oranları ile hayatımız da problem yaşamadan idame ettirebilmemiz lazım . Bunun esas sebebi ise tam olarak şu iş dışında mental olarak sizi çok meşgül eden bir probleminiz varsa mesela geçim sıkıntısı gibi işte o zaman en basit sorunlar o iş için gözünüzde büyüyecek zaman zaman ise çalışmak bile istemeyeceksiniz. Sadece işten tatmin oluyorum diye az paralara çalışmanın hata olmasının yanı sıra iyi iş yapıyorum diye ütopik maaşlarda beklemek yanlıştır. Her daim bunun dengesını sağlamak yararımıza olacaktır.

Saygı Duyduğunuz ve Size Saygı Duyan İnsanlar ile Çalışmak
Şirket dediğimiz yerler aslında büyük insan topluluklarının yer aldığı çalışma alanları. Herkesi sevmek zorunda değilsiniz ama herkese saygı duymak zorundasınız . Onlar da öyle . Özellikle şirket içerisinde küçümser bir şekilde birilerine yardımcı olmak , yazdığı kod ile dalga geçmek , yaptığı bir hatayı daha iyi çözümler önerebilecek durumdayken o çalışan ile dalga geçmek ciddi anlamda o kişinin motivasyonunu düşürecektir. O yüzden biri ile dialog halindeyken ya da biri ile beraber çalışırken üslubumza dikkat etmekte fayda var . Herkes kendisine saygı duyulsun ister ama önce siz saygı duyarsanız. Bu beraberliği sağladığınız da gerisini gayet kolay halledersiniz.

Kovulma Korkusu
Genelde yazılım şirketleri rahat çalışma alanları ve ortamları olan yerlerdir. Fakat bu durum orasının bir işyeri olmadığı gerçeğini değiştirmez . Kovulma korkusu bazen motivasyon kaynağı iken bazen de rüzgar tersine dönüşüp sizi düşürebilir. Bunu işinizi yaparken unutun . Kendi kendinize stres ortamı yaratıp modunuzu düşürmeyin . Tamamen unuttuğunuz da ise sonuçlarından burada bahsetmek istemeyiz. Arada bir hatırlamak en mantıklısıdır. Umarım başımıza gelmez ama maalesef kendi işimizi yapmadığımız müddetçe durum bu .

Kendi gözlemlerim doğrultusunda elimden geldiğince sizlere bu motivasyon kaynaklarını özetlemeye çalıştım. Aklınıza gelen farklı maddeler olursa lütfen yorum yazmayı unutmayın. Bu yazımı burada sonlandırıyorum. Okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Metallica: Fade to Black Sonra ki yazılarımız da görüşmek üzere….

Not : Bu yazı https://positivepsychology.com/ üzerinde Self – Motivation başlıklı yazıdan esinlenilerek yazılmıştır.

0  

Daha Verimli Hata Ayıklamak İçin 7 Öneri

Herkese Selamlar ! Bu yazımız içerisinde yazılım geliştirmenliğinin temeli olan hata ayıklama yani debug yapmaktan bahsedeceğim sizlere. Uzun yıllardır kod yazıyorum ve hala istediğim gibi yazamıyorum . Uzun yıllardır hata ile karşılaşıyorum fakat her farklı projede mantık ve kodun işleyişi değiştiği için sorunu çözene kadar can çekişiyorum. Evet zor . Hatta bazen çok can sıkıcı ama biz yazılım geliştirmenleri için aslında en önemli fırtsatlardan biri her yeni projede hata ayıklama ve kod yazma mantığımızı daha iyi seviyelere taşımaktan geçiyor. Bu kadar hevesli ve istekli konuşuyorken her şeyi başarı ile tamamlayıp gün sonunda evde ne yerken , ne izleyeceğinizi düşünürken bir açılan ticket ile her şey yerle bir olabilir. Belirli bir süre sonra buna zaten alışırsınız. Bunların hepsi yazılım geliştirmenlğinin aslında doğasında var. Peki sizler için klavyeme aldığım bu 7 öneri tam olarak hadi beraber bakalım !!!

Kod üzerinde bir değişiklik yapmadan önce aynı hatayı defalarca oluşturun

Evet doğru okudunuz. Şaşırmanıza gerek yok. Bir problemi çözmenin en iyi yolu onu anlamaktan geçer arkadaşlar. Hatayı kusursuz bir şekilde yeniden oluşturabiliyorsanız o hatayı anlamışsınız demektir ve yeterince iyi anladıysanız çözüme yaklaşıyorsunuz anlamına gelir.

Çoğu zaman bir hata ile karşılaştığımda gelen maili ya da beraber çalıştığım kıdemli yazılım geliştirmenini dinlemeden harekete geçtiğimi farkettim . Gelişigüzel varsayımlar yaptım , değişiklikler yaptım üstelik neden olduğunu bilmeden , kodu kontrol ettim ve çalıştığını gördükten sonra bunuda yaptım diye sevinip eve gittim . Ertesi gün işe geldikten sonra ise aynı problemin yeniden karşımda olduğunu gördüm . Belki de çözmüştüm sorunu fakat farklı senaryolar ile denememiştim . Aynı hatayı yeniden üretmeye çalışmamıştım. Bunu denemediğim için farklı durumlarla karşılaşabileceğimi düşünmeden hatayı çözdüğümü düşündüm. Denemenize rağmen hatayı yeniden üretemiyorsanız farklı birinin bu hatayı yeniden üretmesini bir müşteri gibi test etmesini sağlayın. Sizin firmanızda artık hangi ünvan ile hangisi varsa tester , iş analisti ya da kalite kontrol yapan kişi de olabilir. Zamanımız değerli çünkü bir sorun üzerinde geçici çözümler ile ilerleyip yeniden o probleme dönemeyiz .

Stack Traces i Anlamak
Bundan tam olarak bahsetmeden önce stack trace ne demek sizlere ondan bahsetmek istiyorum . Gelistirilmis olan yazılımda bir problem ile karşılaşırsanız bilgisayarın adım adım işlemeye çalıştığı kodların takibini sağlayarak problemin oluşmasından kaynaklı kod bloklarını en ufak bir adımını bile atlamadan takip etmek anlamına gelir. Çoğu programlama dilinde de bu tarz mekanizmalar söz konusudur .

Tabiki saniyeler içerisinde kodu takip edip anlayıp çözüme kavuşturmak muazzam bir yetenektir . Henüz ben böyle birini görmedim yalnız . Burada esas amaç o hataya sahip olan kod satırlarının en kök kısmına kadar inebilmektir. Kulağa korkunç gelsede bunu yapmak zorunda kalabiliriz.

Test Case Yazmak

Burada size esas söylemek istediğim Test Driven Development . Aslında TDD için ayrı bir blog yazısı hatta blog serisi bile çıkar diyebilirim . TDD üzerinde mantık ciddi anlamda kolay uygulamanızı yazmaya başlamadan önce test yazıyorsunuz ve bu test başarısız oluyor . Bu testi başarılı hale getiriyorsunuz . Ne kadar test yazdıysanız bunların hepsini gerçekleştiriyorsunuz . Takiben ise uygulamanız üzerinde iyileştirme ve temizleme işleri yapıyorsunuz. Bu sayede karşılaşabileceğiniz hataların çoğunu elimine etmiş oluyorsunuz ve işiniz kolaylaşıyor.

Hata Kodunu Bilin

Bunu duymak size biraz garip gelebilir ama hata kodunu bilmek ve ona göre yaklaşmakta ciddi anlamda işimizi kolaylaştırmakta. Hata kodları aslında kategori şeklindedir.

  • 1xx: Bilgilendirme amaçlı
  • 2xx: Başarı durumu
  • 3xx: Yönlendirme amaçlı
  • 4xx: Kullanıcıdan kaynaklı
  • 5xx: Sunucudan kaynaklı

Daha detaylı örnek verecek olursak , yine popüler olanlardan seçelim.

  • 401 Unauthorized (yetkisiz)
  • 403 Forbidden (yasak)
  • 404 Not Found (erişmek istediğiniz dosya sunucu üzerinde bulunamadı)
  • 500 Internal Server Error (istediğiniz işlemi herhangi bir sebepten ötürü server gerçekleştiremiyor)
  • 502 Bad Gateway (Backend tarafından geçerli response dönmüyor)
  • 503 Service Unavailable (Server üzerinde aşırı yük var ya da bakım altında )
  • 504 Gateway Timeout (Backend üzerinden beklenen zaman içerisinde response dönmedi)

Arama Motorlarını Verimli Kullanın

Arama motorunuz ne olursa olsun kesinlikle bir çözüm yolu , sizinkine benzer bir hata ya da uyarlayabileceğiniz bir mantık ile karşılaşma ihtimaliniz çok yüksek. Bunu en az bir kere ana dilinizde ve en az bir kerede hakim olduğunuz yabancı dilde yapmanızı öneririm. Emin olun çıkan sonuçlar arasında tatmin edici bir şekilde farklılıklar meydana gelecektir.

Bir Bilene Sorun

Yeterince her şeyi denediğinizi düşünüyorsanız bir bilene sormak mantıklıdır fakat sormanın dozunu kaçırmayın. Soruyu cevaplayan kişiler bir süre sonra sizinle aynı ekipte yer alsalar bile rahatsız olacaklardır. Tabi bunu söyledik diye o zaman farklı kişilere sorarım diye aklınızdan geçirmeyin . Olabildiğince kendiniz çıkmaya çalışın o hatanın içersinden . Her çıkamadığınızda ise farklı bir yol deneyin . Ne zaman her şeyi denediğinizden eminsiniz o zaman birilerinden yardım isteyin ama dediğim gibi bunun tadı kaçmasın. Abarttığınızı düşündüğünüz ya da düşündükleri anda size yardım etmemek için bahane üreteceklerdir. Aldırmayın yolunuza devam edin tabi bu tarz bir durum can sıkıcı olsada tek odaklanmanız gereken nokta uygulamanız olsun. Mantıken onların size yardımcı olmamaları size çok fazla yarar sağlar. Bunu fırsata dönüştürmeye çalışın her defasında .

Kendinizi Ödüllendirin

Karşılaşmız olduğunuz her bir zorluk aslında sizin için bir sınav . Bazen kolay bazen zor hatalar ile karşılaşabilirsiniz . Kendi kişisel motivasyonunuzu arttırmak ve yeniden enerji toplamak için kendinizi ödüllendirmeyi ihmal etmeyin . En önemlisi ise bu ödüllendirme esnasında o ödülü hangi adımları izleyerek kazandığınızı yani hatayı nasıl çözdüğünüzü sakın unutmayın. Emin olun işinizi ciddi anlamda kolaylaştıracaktır.

Bu yazımı burada sonlandırıyorum. Okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Joan Jett & The Blackhearts – I Love Rock N Roll Sonra ki yazılarımız da görüşmek üzere….

0  

Yazılım Geliştirmenlerinin Ölümcül İkilemi : Küçük Bir Girişim Firmasında mı Çalışmak Yoksa Kurumsal bir Firmada mı ?

Herkese Selamlar ! Bu yazımız içerisinde bana çok fazla sorulan bir soruyu cevaplamaya karar verdim. Sektöre yeni giren kişi ya da uzun yıllar emek vermiş biri olun ya da olmayın fark etmez bu sorunun cevabı aslında tam olarak ne kimse tarafında bilinmiyor fakat özetle sizlere durumu açıklamaya çalışacağım.

İlk aşamada şunu belirtmek isterim ki mesleki gelişiminiz , çalışma koşullarınız , hayat standardınız ve iş dengesi ve en önemlisi de kariyer gelişiminiz için bu seçim ya da soru ciddi anlamda önemli . İkisi arasında ki farklara sizler ile beraber bir bakış atalım .

Düzen X Kaos

Sizler de tahmin edersiniz ki bu başlık içerisinde yer alan düzen kelimesi kurumsal firmayı kaos ise girişim firmasını temsil eder.

Kurumsal bir firmada eğer ki çok lakayit bir firma değil ise hemen hemen her şey düzenlidir. Proje içerisinde yer alan görevler ekip üyelerini hemen hemen eşit düzeyde paylaştırılır. Sonra sprintler içerisinde sırası ile yerleştirilir tahmini zamanlar geliştirmenler tarafından verilir ve en önemlisi projeyi yöneten ve müşteri ile geliştirmen arasında ki iletişimi sağlayan analist tarafından düzenli bir şekilde proje geliştirilir.

Girişim firmasında ise senaryo bambaşka bir hal alır . Tam olarak belli olmayan müşteri talepleri ve yakın gelecek dışında pek bir şey tanımlanmaz. Bir kişinin görevi yapılması gereken en acil iş olacaktır her zaman. Bazen ise aynı proje içerisinde yapılması gereken her iş aciliyet kazanabiliyor. Tabi bu durum kurumsal firmalarda olmuyor mu ? Tabi ki de evet fakat daha az. Proje gereksinimleri ya da müşteri talepleri siz ve müşteri ile konuşmuş kişi arasında tanımlanır ve bir yere yazılmaz. Müşteri ile yakın kalırsanız bu taleplerinde sürekli değiştiğini sizlerde fark edersiniz. Sürekli toplantılar düzenlenir ve üzerinizde olan her bir görevin yetişmesi gereken tarih hatırlatılır. Bir yerden sonra gerçekten çalışma isteğinizi kaybetmenize sebep olan bir duruma dönüşebilir .

Sizden tam olarak ne bekleniyor ?

Kurumsal firma içerisinde , genellikle bir ekip içerisinde çalışacak ve yeteneklerinize görev alacaksınız . Bu durum kulağa hoş gelse de risk almayı sevmeyen biri iseniz kısıtlanabilirsiniz. Sebebi ise hep benzer işler üzerinden ilerlemenizdir fakat bazen risk alıp kendi çapınızın dışına çıkmak isteyebilirsiniz.

Girişim firmasında çalışmak ise pek öyle değildir. İşe girerken Back-End geliştirici olarak pozisyonunuz belirlenmiştir. Bazen ise sizden DevOps görevlerini ya da işiniz yoksa QA tarafına bakmanızı zaman zaman Front-End geliştirmenizi belki de bir gün bir gün proje yöneticisi gibi toplantıya girmenizi istenebilir. Bu tarz bir günde kendinizi yönetmeyi hangi işlerinize öncelik vermeniz gerektigini kesinlikle unutmayın !

Profosyonel Geliştirme

Bu nokta da özellikle hatırlatmak istediğim bir söz ver sizlere: “İş , işte iş yaparak öğrenilir.” Demek istediğim küçük ya da büyük , kurumsal ya da girişim firması farketmez size bir çok tecrübe kazandıracaktır.

Girişim firmasının sundukları ise ;

  • Eş zamanlı olarak bir çok teknoloji ile uygulamalı şekilde çalışabilirsiniz.
  • Bir proje ya da farklı projelerde farklı rollere bürünüp farklı katmanlarda görev alabilirsiniz.
  • Akıllı insanlar ile tanışma imkanınız çok yüksektir fakat sizlere bir şeyler öğretmek için pek vakitleri olmayabilir.
  • İşiniz çok fazla olacağı için kendinizi yönetmek adına iç disiplininizi sağlamanız gerekecektir.
  • Başkalarının yardımına güvenmeden kod yazmayı öğrenirsiniz ki bu bence en önemlisidir . Sadece internet üzerinden yaptığınız araştırma ile bir problemi nasıl çözebileceğinizi öğrenirsiniz.
  • Nadir de olsa proje içerisinde ki mimari üzerinde değişiklik yapma kararını siz almak zorunda kalabilirsiniz ki bu bence riskli de olsa güzel bir durum gibi duruyor.

Kurumsal firmanın sundukları ise ;

  • Büyük bir kuruluş nasıl çalışıyor ya da nasıl çalışılması gerekiyor bunu öğrenirsiniz.
  • Yazılım geliştirmeni sayısı çok fazla olacağından çay aralarında bile bir çok kişiden kolayca yeni şeyler öğrenebilirsiniz.
  • Bu yazacağım ne kadar iyi tartışılır fakat firma içerisinde ki diğer ekip arkadaşlarınız ile kendinizi kıyaslayarak yeteneklerinizin ne olduğunu fark edebilirsiniz.
  • Olgunlaşmış projelerde yer alırsınız.
  • Büyük proje içerisinde hata ayıklama işlemini görürsünüz
  • Büyük proje içerisinde ki mimari nasıl kurgulanmış onu görürsünüz.
  • DevOps ortamı ile tanışabilirsiniz.
  • Takımlar arasında entegrasyonu ve kod işleyişini görürsünüz
  • Deployment ortamında çalışabilrsiniz.
  • Proje güvenliği tam olarak nasıl sağlanıyor onu görme imkanına sahip olursunuz.

Kariyer Gelişimi
Hangi şirkette ve hangi pozisyonda ne işi yaparsanız yapın şirketiniz doğrultusunda gerçekleşiyor gelişiminiz.

Girişim şirketinde işler ne kadar hızlı ilerler ise siz de o kadar gelişir ya da gelişime ayak uydurursunuz. İlk kuruldugu yılda şirket 3 kişi ise ve 3. Kişi iseniz 5. Yılın sonunda birden 50 kişi olduysanız bu şirket içerisinde Üst düzey yönetici olma şansınız çok yüksektir.

Kurumsal firmalar ise girişim firmaları kadar hızlı büyümezler çünkü onlar o evreleri zaten yaşamıştır. Siz sonrada dahil olursunuz o firmaya fakat şirket içerisinde terfi almak adına çok fazla pozisyon olabilir. Bu da şirket içerisinde ki personellerin arasında bir rekabet ortamı hatta bazen ise taht kavgalarına dönüşebilir.

Maaş ve Hayat-İş Dengesi

İstisnalar haricinde büyük bir firmada çalışıyorsanız genellikle maaşlar tatmin edici düzeydedir. Ek olarak ise özel günler için pahalı hediyeler , zaman zaman bonuslar , şirket etkinlikleri ya da ona benzer bir çok motive edici şeylerle karşılaşabilirsiniz. Basit gibi görünse de bazen ihtiyaç duyarsınız böyle şeylere.

Tabi ki de girişim şirketleri bu tarz şeyler genelde sunamazlar. Eğer ki işler iyiye gitmez ise maaşınızı bile alamadığınız durumlar olabilir ya da zam alamayacağınız dersek de yanılmış olmayız.

Çalışma saatleri ise kurumsal firmalarda biraz daha iyidir. Bir kriz durumu söz konusu değil ise giriş çıkış saatiniz bellidir ve genelde de bu aksamaz. Girişim şirketlerinde ise iş gün içerisinde ne zaman biterse o zaman çıkarsınız. O yüzden mesai yapma olasılığınız çok yüksektir.

İş Memnuniyeti

Muhtemelen bu yazının en önemli başlığı budur diye düşünüyorum. Genel anlamda gerçekten kişisel gelişiminizi önemseyen biri iseniz yukarıda yer alan çoğu başlığı es geçiyorsunuz demektir. Yazılı geliştirmeni için yeni teknolojiler içerisinde inovatif bir projede yer almak gerçekten çok önemli . Esas olarak sizi tatmin edecek duygu tam olarak bu çünkü.

Girişim şirketlerinde yeni teknolojiler üzerinde ve adı üzerinde bir girişim şirketi olduğu için inovatif bir proje de yer alma ihtimaliniz oldukça yüksek. Bu tarz bir projede iseniz kod yazmaktan çok problem çözme odaklı çalışabilirsiniz. Bu problemı çözerken çok fazla zaman ve çaba harcabilirsiniz. Çalışanların genelde şikayetci oldukları nokta ise tam olarak burası.

Kurumsal firmalarda ise bu durum ciddi anlamda farklıdır. Genellikle siz işe girmeden önce büyük bir proje ortaya çıkmış ve halihazırda müşteri tarafından kullanılan ürünleri vardır. Siz genelde o projeye sonradan dahil olduğunuz için bakım ya da aynı proje içerisinde eklenilmesi gereken yeni özellikleri eklersiniz. Bu da demektir ki projenin kodlama standartlarına uymak için daha fazla kod okumak anlamına gelir.

Gün içerisinde ise bazen ekibiniz ile bazen ise müşteri ile toplantılara katılrsınız ve gerçekten vakit alır bunlar. Yeni bir özellik eklemek ya da proje içerisinde ki bir noktanın ileri taşınması şirketler arası sözleşmeleri , faturaları ya da ona benzer bürokratik işleri ilgilendirdiğinden işler biraz bu nokta da yavaş ilerleyebilir.

Özet Olarak
Burada görmüş olduğunuz sadece bir kaç kriter. Size sunulan farklı teklifler ve koşullar olabilir. İşinize karar verme süreciniz de onlarıda düşünmeyi unutmayın.

Şahsi fikrim ise bir yazılım geliştirmeni en az bir girişim firmasında çalışmalı , en az bir kurumsal firmada çalışmalı. Bu sayede ikisininde havasını solumuş olacaktır. Her çalıştığınız firma sizlere çok şey katacaktır. Edindiğiniz tecrübeler sayesinde sizin için doğru olan firmaya karar verebilirsiniz. Kim bilir belkide edindiğiniz tüm bu tecrübelerden sonra kendi şirketinizi açmak isteyebilirsiniz.
Bu yazımı burada sonlandırıyorum. Okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Harry Potter Theme Song Sonra ki yazılarımız da görüşmek üzere….

0  

Yazılım Geliştirmenleri Neden Zaman Takip (time tracking) Uygulaması Kullanmalı ?

Herkese selamlar ! Son zamanlarda herkes tarafından tercih edilmeye başlanan aynı zamanda da somut bir şekilde işlerimizi organize etmekte faydası olan , bu organizasyon şeması içerisinde daha sağlıklı tahmin süreleri verip (estimation) projelerimizi daha gerçekçi yürütmemizi sağlayan birkaç tane zaman takip uygulaması ile tanıştım. Fakat sizlere sadece onların isimlerini vermek istemedim o yüzden geniş bir araştırma yaptım ve birkaç tane seçenek sunmak istedim ki sizler arasından kendinize uygun olanı seçebilin.

İlk olarak bu tarz bir şeye neden ihtiyacımız var ona değinelim sizlerle beraber.

Yazılım geliştirmenleri mesleği gerçekten bilmeyenler tarafından hep bilgisayar başında oturan kişi olarak anılırlar. Bir işi gerçekleştirmek için yeterince çaba sarfetmiyormuş izlenimi yaratırılır bir parça. Esasında ise yazılım geliştirmenleri , mantık , matematik ve ihtiyaç duyduğu yazılım dillerini kullanarak bir sentez ortamı oluşturup gelen talebe cevap vermeye çalışan kişilerdir. Şu an bu yazıyı okuyan bir yazılım geliştirmeni ise bu zaten daha önceden biliyorsunuz demektir.

Bunu önceden bildiğiniz gibi yetişmesi gereken bir ürünün ya da ansızın çıkan bir hatanın nasıl stresli bir ortama dönüştüğünü de söylememize gerek yok tabi. Bu esnada ciddi vakit kayıpları yaşıyor ve aslında bunu nerede kaybettiğimizi farketmiyor olabililiriz. Tabi ki bu tarz bir ortamda yani hem işvereninizi hemde müşterinizi mutlu etmeye çalışmak gerçek anlamda sizi zorlayabilir. Tüm bunlara ve gereksiz görünmesine rağmen zaman izleme uygulamaları işlerimizi oldukça kolaylaştırabilir. Bu sayede hangi işe ne kadar ayırdık kendi performansımız nasıl gibisinden bir çok sorumuza cevap olabilir.

Peki ben hangisini kullanıyorum ? Bir iş arkadaşımda görüp benimde kullanmaya başladığım toggl.

Ciddi anlamda basit ve arayüzü kolay kullanılabilir durumda. Tabi daha kullanmaya başlayalı birkaç ay oldu fakat hemen alışıyorsunuz. Zaman takip uygulamaları sayesinde bir işi yapma sürenizi görebilir o işi yaparken çok fazla zaman harcadıysanız neden bu kadar vakit harcandı sebeplerini irdeleyebilir genel anlamda olumu ve olumsuz yönleri ile beraber performans durumunuzu görebilirsiniz.

Sizler için araştırdığım diğer uygulamalar ise ;

En kısa zamanda sizlerde kullanmaya başlarsanız işlerinizin daha organize bir şekilde iyiye doğru ilerlediğini sizlerde göreceksiniz . Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Gary Moore – Still Got The Blues (Live)

Sonra ki yazılarda görüşmek üzere hoşça kalın….

0  

.Net Core MVC Üzerinde .pdf Oluşturmak

Herkese selamlar ! Son zamanlarda özellikle de web uygulamalarının vazgeçilmez özelliği olan pdf oluşturmaya bakacağız bugün sizler ile beraber. Peki pdf tam olarak nedir ?  PDF aslında portable document formatın kısaltmasıdır yani taşınabilir belge biçimi. Platformlar arasında taşınabilir ve belge içerisinde ise resim ve metin barındırabilen aynı zamanda da yazdırılabilir bir formattır.

Web uygulamarı içerisinde ise htmlde yer alan table etiketleri ile oluşturduğumuz veri kümesini .pdf formatında kullanıcının bilgisayarına indirmesini sağlamak iyi bir hizmet haline geldi. .Net Core tarafında ise bu işimizi ciddi anlamda kolaylaştıran bir araç mevcut. Bu aracın ismi Rotativa. Rotativa açık kaynak kodlu pdf oluşturabildiğimiz bir kütüphanedir. Çoğu html etiketi bu kütüphane ile desteklendiği için oluşturma işlemi esnası sırasında kesinlikle bir sıkıntı çıkmaz.

Rotativayı github hesabı üzerinden indirip kullanabiliirz.

Yavaş yavaş uygulamamıza geçelim. Uygulamamızın amacı aslında gayet basit. Bir adet .net core mvc uygulaması  içerisinde model tarafından almış olduğumuz verileri arayüz üzerinde gösterdikten sonra eğer isterse kullanıcı pdf şeklinde bir dosya oluşturabilecek. Verilermiz ise nba takımları onların karşılığında ise rastgele puanlar atanmış olacak. İlk aşamada rotativayı uygulamamız içerisine almamız gerekmekte.Yukarıda  Rotativanın github hesabını sizler ile paylaşmıştım. Burada  yer alan sayfaya tıkladıktan sonra ise  içerisinde yer alan 4 dosyayı kendi uygulamamız içerisinde wwwroot file in altında “Rotativa” isimli bir klasör açıp içerisine yerleştiriyoruz.

Ardından ise proje üzerinde sağ tık yaptıktan sonra Manage Nuget Packages üzerinden Rotativa.AspNetCore u kuruyoruz.

Bu kurulumu da gerçekleştirdikten sonra uygulamamızda ilk kodlamaya başlayacağımız alan olan StartUp.cs den başlıyoruz. StartUp.cs .net core uygulaması ilk çalıştığında ayağa kalkacak olan sınıfımızdır. Burada yer alan kütüphaneler içerisine

 

using Rotativa.AspNetCore;

kütüphanesini ekliyoruz. Configure methodu içerisine ise

 

RotativaConfiguration.Setup(env);

methodunu ekliyoruz. Bu metot, yapılan isteğe karşılık verilecek cevaplara istinaden ara katman olarak çalışmakta ve öncelik olarak belli başlı işlemleri gerçekleştirmektedir. Kısacası uygulamamıza rotativayı kullanmak istediğimizi söylüyoruz ve burada işimiz bitiyor.

Uygulamamızı yavaş yavaş kodlamaya başlayabiliriz. Model klasörümüz üzerinde sağ tık yapıp bir adet LeagueRow isminde sınıf ekliyoruz gövdesini ise aşağıda ki gibi düzenliyoruz.

public class LeagueRow
    {
        public int position { get; set; }
        public string club { get; set; }
        public int numGames { get; set; }
        public int points { get; set; }

   public LeagueRow(int position, string club, int numGames, int points)
        {
            this.position = position;
            this.club = club;
            this.numGames = numGames;
            this.points = points;
        }
    }

Uygulama içerisinde kullandığımız bu sınıf aslında bir satır içerisinde hangi verilerin gösterileceği ve başlangıç degerlerini almasını sağlayan constructor method içeriyor.

Ardından LeagueTable isimli bir class daha ekliyoruz ve gövdesini aşağıda ki gibi düzenliyoruz.


public class LeagueTable
    {
        public DateTime DateCreated { get; set; }
        public int matchWeek { get; set; }

        public List<LeagueRow> rows { get; set; }

        public LeagueTable()
        {
            this.DateCreated = DateTime.Now.Date;
            this.rows = new List<LeagueRow>();
            this.matchWeek = 33;
        }
   

        public void createTableInstance()
        {
            string[] teams = { "Atlanta Hawks", "Boston Celtics", "Brooklyn Nets", "Charlotte Hornets", "Chicago Bulls", "Clevland Cavaliers", "Dallas Mavericks", "Denver Nuggets",
                               "Detroit Pistons", "Golden State Warriors", "LA Clippers", "LA Lakers", "Milwaukee Bucks", "Minnesota Timberwolves", "New Orleans Pelicans",
                                "Philadephina 76ers", "Phoenix Suns", "Toronto Raptors", "Sacremento Kings", "Orlando Magic"};

            int[] gamesPlayed = new int[] { 33, 33, 33, 34, 33, 34, 33, 34, 33, 33, 33, 34, 33, 34, 33, 34, 33, 33, 33, 34 };

            Random rnd = new Random();
            int[] accesses = Enumerable.Range(0, 20).OrderBy(c => rnd.Next()).ToArray();


            int[] points = new int[] { 82, 80, 66, 64, 63, 61, 47, 47, 46, 46, 42, 39, 38, 36, 35, 33, 33, 28, 17, 14 };


            for (int i = 0; i < gamesPlayed.Length; i++)
            {
                rows.Add(new LeagueRow(i + 1, teams[accesses[i]], gamesPlayed[accesses[i]], points[i]));
            }
        }

Class içerisinde amacımız tamamen bir tarih içerisinde takımların ve puanların rastgele gelmesini sağlayacak şekilde dizayn etmek.  Sırada ise Controller  var.

HomeController tarafında iki farklı methodumuz var bunlardan ilki LeagueTable isimli IActionResult tipinde olan methodumuz , amacımız ise gayet kolay sadece verilerimizi göstereceğimiz sayfayı içersinde verilerimiz ile beraber view tarafına taşımak.

 

public IActionResult LeagueTable()
        {
            LeagueTable nbaLeague = new LeagueTable();
            nbaLeague.createTableInstance();

            return View(nbaLeague);
        }

Method tamamladıktan sonra LeagueTable isminde bir view oluşturup. Gövdesini aşağıda ki gibi düzenliyoruz.

 

@model CoreMVCExportPDF.Models.LeagueTable
@{
    ViewData["Title"] = "LeagueTable";
    Layout = "_Layout";
}

<div class="jumbotron p-2 text-center border border-primary">
    

Date created: <span class="badge badge-primary">@Model.DateCreated.ToString("MM/dd/yyyy")</span>

    

Game Week: <span class="badge badge-primary">@Model.matchWeek</span>

</div>


<h1>Completed Game Schedule</h1>


<h4 class="text-muted">NBA League 2019-2020</h4>


<table class="table table-bordered">
    
<thead style="background-color: #1d428a">
        
<tr class="text-white">
            
<th scope="col">Position</th>

            
<th scope="col">Team</th>

            
<th scope="col">Games Played</th>

            
<th scope="col">Points</th>

        </tr>

    </thead>

    
<tbody>
        @for (int i = 0; i < Model.rows.Count; i++)
        {
            
<tr>
                
<th scope="row">@Model.rows[i].position</th>

                
<td>@Model.rows[i].club</td>

                
<td>@Model.rows[i].numGames</td>

                
<td>@Model.rows[i].points</td>

            </tr>

        }
    </tbody>

</table>



View tarafımızda hazır artık tek yapmamız gereken pdf alanine export etmek onuda ViewAsPdf methodu kendiliğinden yapmakta.

 


public IActionResult LeaguePDF()
        {
            LeagueTable nbaLeague = new LeagueTable();
            nbaLeague.createTableInstance();


            return new ViewAsPdf("LeagueTable", nbaLeague)
            {
                CustomSwitches = "--footer-center [page]"
            };
        }

Uygulamanın arayüzü ise aşağıda ki gibi:

Core mvc üzerinde de aslında pdf oluşturmak ciddi anlamda kolay.Uygulamayı daha detaylı incelemek isterseniz github linkini de sizler ile paylaşıyorum.

Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: No Diggity (Blackstreet) by TYPH BARROW

Sonra ki yazılarda görüşmek üzere hoşça kalın….

0  

.Net Core MVC İçerisinde Bootstrap Kullanımı

Herkese selamlar ! Bugün sizlere asp.net core mvc içerisinde bootstrap kullanımından bahsediyor olacağım. Son zamanlarda gerek bireysel geliştiriciler gerekse şirketler ciddi anlamda projelerini yavaş yavaş .net core ortamına taşımaya başladılar. Tabi bunun ile beraber standart .net framework kullanırken edindiğimiz bazı alışkanlıklarımızı unutmamız gerekiyor. Proje içerisinde bootstrap kullanımı da bunlardan bir tanesi. Normal şartlarda Manage Nuget üzerinden istediğimiz versiyonu kurup ya da cdn (content delivery network) ile bağlantıyı web sayfası içerisine yerleştirip kullanabiliyoruz. .Net core üzerinde de tamamen aynı mantık fakat biraz işleyiş farklı. Bu ufak tefek farklılıklar sizler için sorun olmasın diye bu yazıyı yazmaya karar verdim. Küçük bir dipnot eklemek istiyorum birazdan uygulamadan bahsederken aksilik yaşamayın diye önden uyarı niteliğinde.

Bir core projesi açtığınızda içerisinde wwwroot file bazen gelmiyor. Bu problemi çözmek için ise proje üzerinde sağ tık yapıp yeni dosya ekliyoruz . Dosyanın ismini ise wwwroot verirseniz herhangi bir problem kalmayacaktır. Bu problemi aştıktan sonra ise yavaş yavaş başlayalım artık. Proje üzerinde sağ tık yapıp Add -> Client-Side Library sekmesini tıklıyoruz.

 

Sekmeye tıkladıktan sonra ise açılan pencere içerisinde Provider alanı altında cdnjs , file system ve unpkg diye 3 farklı seçenek yer almaktadır.

 

Şimdi sizler ile beraber karşımıza çıkan seçeneklere tek tek bakalım;

UNPKG: Aslında eski manage nuget package manager diyebiliriz. Ekran içeriisnde yer alan Library alanına eklemek istediğiniz paketin keywordlerini yazıyorsunuz ve aşağıdaki ekran görüntüsünde gördüğünüz gibi yazdığınız keyworde uygun versiyonları sizler için listeliyor.

Takiben ise hangisini kullanmak istiyorsak onu seçip projemize devam ediyoruz. Açılan ekranda aşağıda yer alan Target Location kısmı ise indireceğimiz paketin nereye kurulacağını gösteriyor. Yine aynı pencere üzerinde Choose specific File seçeneğinden de özelikle kurulmasını istediğimiz ya da kurulmasını istemediğimiz dosyaları değiştirebiliriz.

FILESYSTEM: Bu seçenekte ise getbootstrap.com web sayfası üzerinden elde ettiğimiz cdn linkini doğrudan library inputu içerisinde görmüş olduğunuz gibi yapıştırıyoruz.

 

 

Tabi ki de herhangi bir link değil hangi dosyaya ihtiyacımız var ise ona ait olan cdn linkini yapıştırıyoruz. Ardından elde edecegimiz dosyalar aşağıda ki alanda listelenmekte ve o alandan uygulamamızın içine dahil etmek istediğimiz dosyaları alabilmekteyiz.

Son olarak ise cdnjs den bahsetmek istiyorum. CDNJS tamamen ücretsiz ve açık kaynak kodlu herkes tarafından erişilebilen cloudfare üzerinde host edilmiş 3403 farklı kütüphanenin 90027 farklı versiyonunu bulabileceğimiz özellikle web developerlar için efsanevi bir kaynaktır. CDNJS linklerini yine yukarı da gösterdiğimiz gibi kullanabiliriz.

FileSystem ya da unpkg şeklinde bootstrap frameworkünü uygulamamıza dahil ettikten sonra geriye bir kaç adım kalmakta. Projemize bir adet layout page ekliyoruz.

Layout içerisinde özellikle dikkat etmemiz gereken nokta tam olarak şu an. Yeni bir tag giriyor hayatımıza environment. Environment tag i sayesinde içerisinde barındırılan linke göre host edildiği alan ile iletişime geçer ve çalışır. Bu şekilde tanımlayınca biraz hava da kalmış olabilir, diyelim ki 3 farklı geliştirme ortamımız var Development,Staging ve Production. Development zaten bildiğiniz gibi bizim geliştirme ortamımız, staging ise müşteri ile beraber gerçekleştirilen test ortamı production ise artık ürün aşaması. Environment taginin içerisinde bu linki yerleştirdiğinizde o ortamlarda da çalışacağı anlamına gelir.

Mesela aşağıda ki kod tam olarak derki  Environment tagleri içerisinde yer alan linki sadece Development ortamı için çalıştırır.

 

 


<environment include="Development">

        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />

 </environment>

Bir de exclude olayindan bahsetmiştik . Exclude için ise örnek html tag yapımız yine aşağıda yer almakta.

<environment exclude="Development">

       <link href="~/lib/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" />
    
</environment>

Exclude ise development ortamından çıktığımız da standart linkin yerine ne çalışacaksa onun yerine gelecek olan
bağlantıları içerir. Yani yukarıda ki kod derki Development ortamından çıkış yaptıktan sonra staging ya da production
oluyor bunlar o ortamlarda çalışacak olan linktir.Burada yer alan tagleri ve linkleri layout içerisine ekliyoruz.
Ardından bir adet controller , controller içerisinde yer Alan IActionResulta bir adet index isminde  View ve artık
kullanabiliriz bootstrap frameworku. Basit bir kurgu ile örneklendirelim.



<div class="text-center" style="margin-left:50px">
    <h1 class="display-4">Welcome</h1>
    <div>
        <input type="text" /><br />
        <input type="button" value="Save All" />
    </div>
    <br />
    <div class="col-lg-6" style="margin-left:250px">
        <input type="text" class="form-control" /><br />
        <input type="button" value="Save All" class="btn btn-success" />
    </div>
</div>

Yukarıda yer alan html yapısının ekran görüntüsü ise;

Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Winter Night Jazz Music – Stress relief-Relaxing Jazz Music

Uygulamayı daha detaylı incelemek isterseniz github linkini de sizler ile paylaşıyorum. Sonra ki yazılarda görüşmek üzere hoşça kalın….

0  

ASP .NET Core Blazor ve React Arasındaki Farklılıklar

Herkese selamlar !
Son zamanlar da yazılım geliştirmenleri yani meslektaşlarımız arasında ciddi bir furya dolaşıyor. Blazor ! Tam olarak blazor nedir ve React arasında ki farklılıklar nelerdir bir ona bakacağız.

Blazor Nedir ?

Normalde bir single page applicationa ihtiyacımız olduğunda javascript ya da typescript tabanlı bir yapıya ihtiyaç duyardık. Aklımıza ilk gelenler ise angular ya da react olur bu şekilde devam ederdik. Microsoft ise 2018 yılında bu akıma dahil oldu. Blazor, .net ile interaktif bir şekilde kullanılabilen istemci(client) tabanlı web UI oluşturmamızı sağlayan bir framework geliştirdiğini duyurdu. Üstelik bu zamana kadar .NET teknolojileri ile çalıştıysanız işinizi ciddi anlamda kolaylaştıracak demektir. Zengin ve kullanıcı ile etkileşimli arayüz tasarımını kurgularken c# kullanabilecek , server tarafı ya da client tarafı içerisinde kodlama yaparken benzer mantık ile kodlayabilecek , html ve cssi entegre bir şekilde tasarlayabilecek, kurguladığı yapıyı ise mobil tarayıcılar dahil olmak üzere her yerde çalıştırabilecektir.Blazor tabiki de yeni çıktı ve hızlı yayılıyor şimdilik göze çarpan ortak noktalar bunlar peki react ile aralarında ki farka bir göz atalım.

Component ?

Blazor içerisinde yer alan component mantığı ile react içerisinde yer alan component mantığı bire bir aynıdır. Componentlerinizi hazırlayıp içe içe bir şekilde kullanarak kullanıcı arayüzünüzü oluşturabilirsiniz.

Blazor içerisinde yer alan componentler tıpkı reactta yer aldığı gibi sınıf şeklinde yazılmıştır ve benzer bir yaşam döngüsüne sahiptir. Bu demek oluyor ki react ya da angular üzerinde çalıştıysanız kolay bir şekilde blazora alışabilirsiniz aynı zamanda asp.net ya da asp.net mvc içerisinde bir geçmişiniz var ise de razor söz dizimini (syntax) kullandığı için ciddi anlamda kolaylık sağlamaktadır.

Routing ?

React içerisinde routing yapmak istiyorsanız react-router-dom kullanarak kendiniz implemente etmelisiniz. Mevcut yapıyı kullanmak istemiyorsanız ise 3.parti bir kütüphane kullanarak routing işlemini gerçekleştirebilirsiniz. Blazorda ise routing tam olarak frameworkün bir özelliğidir. Componentler arasında tanımlamalar yapmak ve bunları routing içerisinde kullanmak ciddi anlamda kolaydır. React içerisinde 3.parti bir kütüphane kullanmaktansa blazor içerisinde varolan yapıyı kullanmak şu an için tercih edilir gibi duruyor.

Data Binding ?

Data binding kısmında ise öncelikle şunu söylemek istiyorum iki yapı içinde de two-way binding geçerlidir. Zincirleme bir şekilde binding yaparken ise yani x->y->z->…. şeklinde binding söz konusu ise tartışmasız bir şekilde react tarafının daha başarılı olduğunu söyleyebilirim. Blazor başarısız mı peki kesinlikle hayır fakat ikisi içerisinde debug yapmaya kalktığınızda blazorun bazı noktalarda çok stabil davranmadığını görebiliyoruz. Tabi şu an blazor çok yeni bir platform ve zamanla daha iyi olacaktır diye düşünüyoruz.

Interop ?

Blazor .NET runtime altyapısını kullandığından dolayı tabiki de c# ile stabil bir şekilde çalışması şaşırtıcı değildir zaten bir aşama da çıkış amacının o olduğunu düşünürsek bu tarz bir şey olmazsa ciddi bir dezavantaj olurdu. Gerçek avantaj ise hem client hem de server taraflı kodlama yaptığınız zaman ortaya çıkmakta. .Net core ile çalışıyorsanız böyle bir durumda işiniz ciddi anlamda kolay. Peki bunu react ile yapabilir misiniz ? Tabiki de evet fakat react söz konusu ise back-end tarafınız node.js olduğu sürece bunu gerçekleştirebiliyorsunuz. Özellikle eklemek istediğimi bir konu ise siz blazor üzerinde uygulama geliştirirken bir takım eksikliklerle kesinlikle karşılaşacaksınız ama henüz yeni olduğu için bu eksiklikler zamanla giderilecektir diye düşünüyorum. Bunu belirtmemde ki amaç ise şu blazor altında JSRuntime servislerini kullanarak ihtiyaç duyduğunuz js kütüphanesini çağırıp kullanabilmektesiniz. İleride bunlara ne kadar ihtiyaç duyarız tabi biraz tartışmaya açık.

Dependency Injection ?

Blazor çatısı altında dependency injection kullanabilirsiniz. Tam olarak ise bir componentin içerisinde belirli bir işi yaptıracağınız ve çalışma zamanında iş sonucunu yine aynı component altında göstermesini istediğiniz zaman kullanabilirsiniz. Birbirinden farklı amaçlar ile kullanılan fakat sonuçları entegre bir şekilde kullanmak istediğiniz componentler içerisinde özellikle belirtiyorum ki tüm bunları beraber yapmak istediğiniz noktada gerçekten kullanışlı bir yapı sunar bizlere. React içerisinde ise yine aynı durum söz konususudur fakat react blazora göre daha eski olduğu için biraz esneklik söz konusudur.

Prerendering?

Pre-rendering nedir ilk önce bunu cevaplarsak çok iyi olur bu başlıkta. Arama motorlarının çoğu client taraflı javascript kodunu çalıştırmaz ve bu genelde react ya da blazor gibi teknolojiler kullanılarak yapılan web uygulamarı için ve bu uygulamalar özelliklede arama sonuçları içerisinde üst sıralarda çıkmak istiyorlar ise ciddi bir dezavantajdır. Prerendering sayesinde ise çalıştırılmasını istediğiniz js ya da ts önden çalıştırılır. Önden çalıştırılan bu kodların sonucu eğer ki arama motorlarında gözükecek bir takım sonuçlar ortaya çıkartacaksa o zaman prerendering gerçek anlamda işimize yarar. Sonuç olarak ise hem react hem de blazor prerendering destekler.

Debugging ?

Herhangi bir platform içerisinde JS kodunu ne kadar kolay debuglayabiliyorsanız react içerisinde de bu mümkündür. JS üzerinde çalışırken debug yapmak için çoğu browser içerisnde tool vb. yapılar oldukça fazladır. Blazor bu durumda react ile yarışamaz haldedir. Şu an içerisinde ki mevcut debug mekanizması ciddi anlamda sınırlıdır. Tam olarak piyasaya çıktığında browser desteğini ne kadar arkasına alacağı ile de doğru orantılıdır. Framework olgunlaştıkça bu sorunun ortadan kalkacağını düşünsemde bir parça tedirginlik söz konusu.

Özet Olarak ?

React ve blazorun çok ortak noktasının olmasına rağmen esas farklılıklar nasıl bir server taraflı kod yazdığınızda ortaya çıkacaktır.Şu an için client side yani istemci taraflı basit bir uygulama yazdığımızı varsaydığımızda ciddi bir fark ortaya çıkmamaktadır. Tabi özellikle tekrar etmek istediğim bir şey var o da blazor henüz tam olarak olgunlaşmamış bir yapıdır. Büyük uygulamalar içerisinde eksikliklerini hissettirecektir. Zamanla bu eksiklikler kapatıldıkça teknoloji açısından neye , nasıl karar vermemiz gerektiğini bir kez daha düşünmekte fayda var. Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise hazır yeni yılda geliyorken =) : Glee – Jingle Bell Rock
Sonra ki yazılarda görüşmek üzere hoşça kalın…..

0  

Web ve Desktop Uygulamaları Arasında ki Farklılıklar

Herkese Selamlar ! Yine bu yazımız tarafıma gelmiş bir soruyu cevaplamak ile alakalı. Peki soru tam olarak ne ? Aslında bir soru değil bir talep tam olarak şöyle;



Bu soru daha önce tarafıma çok soruldu ve her zaman ayak üstü cevaplamaya çalıştım elimden geldiğince sonra da dedim ki kendi kendime bir blog yazısı fena olmaz bu konuda. Kısa bir yazı olacak biraz hemen tek tek aklıma gelen önemli farklılıklardan bahsedip sonlandırmayı planlıyorum. Hadi hemen başlayalım !

Masaüstü Uygulama Nedir ?

Masaüstü yazılım uygulamaları, son kullanıcının makinesi üzerinde çalıştırılan, gereken tüm sistem kaynaklarını son kullanıcı makinesindeki işletim sisteminden alan, internet gereksinimi duymayan, milyonlarca veriyi yönetebilen, verileri güvenli bir şekilde depolayan, kullanıcıya, uygulama geliştiriciye ve yöneticiye tam hâkimiyet sağlayan, iş gücünü en aza indiren, analiz ve raporlama kolaylığı sağlayan, kapalı devre olarak çalışan ve web tabanlı yazılım uygulamalarından daha hızlı ve seri olan yazılım geliştirme uygulama türüdür.

Web Uygulaması Nedir ?

Web uygulaması, yalnızca ağ bağlantısı üzerinden HTTP protokolü kullanılarak erişilebilen, cihazın hafızası yerine internet tarayıcısı yardımıyla çalıştırılabilen uygulamalardır. Web tabanlı uygulamalar bilgisayarınızın depolama belleği üzerinde aktif olarak yer almaz ve internet tarayıcıları yardımıyla kullanılırlar. Buna karşın bazı web tabanlı uygulamalar istemci tabanlı olarak çalışabilir ve ufak bir kod parçanın bilgisayarınıza indirilmesi gerekebilir. Buna karşın asıl işlem sunucu tarafında gerçekleştirildiği için işlemlerin tümü yine karşı tarafta tamamlanacaktır

Arada ki Farklılıklar Nelerdir ?

1- Web tabanlı uygulamalarda deployment ve upgrade gibi durumlar söz konusu olduğunda bir ya da bir grup server üzerinde çalışmamız gerekir, desktop uygulamalarında ise bu durum bireysel olarak kullanıcıların makinelerinde tek tek gerçekleştirilir(individual client machines). Tek bir alandan kontrol etme durumu tabi ki de söz konusudur fakat ciddi bir zahmet gerektirir.

2- Web uygulamalarının aslında web uygulaması olma sebebi olan her koşulda ve herhangi bir cihazdan erişilebilir durumdadır. Desktop uygulamalarda ise tek başına ve sadece kurulu olduğu makine ile sınırlı olduğundan dolayı yalnızca hangi makinelere dağıtılmış ve kurulmuş ise o makinelerden erişilebilir.

3- Web uygulamaları platform bağımsız çalışır. Peki bu tam olarak ne demek ? Herhangi bir bilgisayar üzerinde herhangi bir işletim sisteminde ve herhangi bir web browserda doğrudan erişip istediğiniz zaman giriş yapabilirsiniz. Tabi her şey yolunda ise ! Desktop uygulamalarda ise makinenin donanım özellikleri ve üzerinde kurulu olan işletim sistemi sizi farklı platformlar için kod yazmaya zorlayabilir.

4-Bu madde web uygulamarı için en önemli madde diyebiliriz. Web uygulamarının doğal amacı her yerden erişilebilirlik olduğu için güvenlik riskleri çok fazladır ve bunun için her zaman tedbirli davranmanız gerekir. Desktop uygulamalarında ise genelde bireysel kullanıcılar üzerinden yürütüldüğü için güvenlik pek sorun olmaz.

5- Son maddemizde ise web app üzerinde çalışıyorsanız ve internetiniz yok ise uygulamanızın bir önemi yok demektir. Desktop uygulamalarında ise güncelleme ya da ona benzer durumlar dışında internete ihtiyaç duymazsınız. Bu da sizi kendi kişisel bilgisayarınız üzerinde özgür kılar tabi bu ne kadar iyi tartışılır.

Elimden geldiğince , klavyeden yazabildiğimce sizler için bu yazıyı yazmaya çalıştım.Yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: The Strokes – Last Nite
Sonra ki yazılarda görüşmek üzere hoşça kalın…..

Not:Yukarıda yer alan web ve masaüstü uygulamaları tanımlamaları wikipediadan alınmıştır.

0  

AngularJS ile Basit bir To-Do List

Herkese Selamlar ! Bugün ilk defa bir angularJS yazısı ile karşınızdayım. AngularJS’e ihtiyaç duymaya başladım ve bir taraftan da hoşuma gitmiyor değil açıkçası. O yüzden popüler ve basit bir uygulama olana bir adet ToDo List hazırladım. Bu yazıyı ise bir parça kolay bir angularJS yazısına dönüştürmeye çalışacağım. İlk aşamada ise angular nedir ? angularJS nedir ? Bunları açıklamak istiyorum sizlere.

Angular Nedir ?
Angular javascript tabanlı açık kaynak kodlu yazılım geliştiricilerin web, mobil ve masaüstü ortamda kolay uygulama geliştirmelerini sağlayan bir platformdur.

AngularJS Nedir ?
MVC yapısını kullanarak güçlü, dinamik, etkileşimli arayüzler yapmayı sağlayan bir javascript framwork’ü dür.AngularJS’de Data Binding,Routing,Templates gibi farklı birçok yapı vardır.Amaç arayüzde kod bloklarını minimum’a indirmek ve daha kararlı bir yapı izleyerek geliştirme süreçlerini kolaylaştırmaktır.

Angular ve AngularJS Arasında ki Farklılıklar Nelerdir ?
İlk olarak kesinlikle söylemem gerekir ki angular , angularJS’in temelden ve neredeyse tüm mimari özelliklerinin yeniden yazılmış versiyonudur.

Mimari(Architecture)
AngularJS bildiğimiz MVC (Model-View-Controller) mimarisi üzerine kurgulanmıştır. Angular üzerinde ise controller ve $scope kavramı componentler ve directiveler aracılığı ile değiştirildi.

Dil(Language)
AngularJS içerisinde çalışırken JavaScript’ten faydalanırsınız.

Angular’da ise Microsoft tarafından geliştirilmiş olan TypeScript’ten.
Image,property ya da herhangi bir event içerisinde angularJS üzerinde ng- directivelerini kullanmanız gerekir.
Angular üzerinde ise event binding için “()” property bindin için ise “[ ]” ifadelerini kullanırız.
Son olarak ise angularJS’in mobile desteği yoktur, angular’in ise vardır.

Gelelim uygulamamıza, uygulamadan tam olarak sizlere detaylı bir şekilde bahsetmeden önce içerisinde kullanmış olduğum directiveleri sırası ile açıklamak istiyorum.

ng-app:AngularJS’in tam olarak çalışacağı blok.
ng-controller:Attributes,properties ve functionları kullanacağımız alandır.
ng-submit: Form üzerinde submit edilmesi gereken alanların submit edilmesini sağlar. Eğer ki submit edilecek verilerde bir problem varsa submit etmez.
ng-model:Form üzerinden alınan verinin bind edilmesini sağlar.
ng-repeat:Belirli bir sayıda HTML tag’ini tekrar eder.
ng-bind:Bir HTML Tag’inin üzerine değer atanmasını sağlar.
ng-click:Bir elemana tıkladığımız da onun üzerine değer atanmasını ya da ona ait olan görevin yapılmasını sağlar.

Bunları sizlere açıkladıktan sonra uygulamadan bahsetmek çok daha kolaylaşacak benim açımdan.

 

<!DOCTYPE html>
<html>
<head>
    <title>Easy To-Do List Sample</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="todoCtrl">
    <div class="container">
        <h2>To-Do List Side</h2>
        <form ng-submit="todoAdd()" class="form-inline">
            <div class="form-group">
                <input type="text" class="form-control" ng-model="todoInput" size="23" placeholder="you can add new to-do !" />
            </div>
            <input type="submit" value="Add todo Something" class="btn btn-success"/>
        </form>

        <hr />
        <div ng-repeat="x in todoList" class="list-group-item list-group-item-warning">
            <input type="checkbox" ng-model="x.done"/><span ng-bind="x.todoText"></span>
        </div>

        <p><button ng-click="remove()" class="btn btn-danger" style="margin-top:10px">Remove Marked</button></p>

        <div class="panel panel-default" style="margin-top:20px">
            <div class="panel-footer" style="text-align:center"><a href="http://ozhangulal.com/" target="_blank">ozhangulal.com</a></div>
        </div>
    </div>
    <script>
        var app = angular.module('myApp', []);
        app.controller('todoCtrl', function ($scope) {

            $scope.todoList = [

                {
                    todoText: 'Brakfast with M.J',
                    done: false
                },
                {
                    todoText: 'Practice with Kyrie Irving',
                    done: false
                },
                {
                    todoText: 'Dinner with Derrick Rose',
                    done: false
                }

            ];

            $scope.todoAdd = function () {

                $scope.todoList.push({ todoText: $scope.todoInput, done: false });
                $scope.todoInput = "";

            };

            $scope.remove = function () {

                var oldList = $scope.todoList;
                $scope.todoList = [];
                angular.forEach(oldList, function (x) {
                    if (!x.done) $scope.todoList.push(x);
                });
            };

        });
    </script>
</body>
</html>
            

Script taglerinin içerisinde ki yazdığımız ifadelerden bir başlayalım. Aslında varsayılan olarak içerisinde 3 adet item ile gelmekte. Bunlar ise “Breakfast with M.J”,”Practice with Kyrie Irving”,”Dinner with Derrick Rose” ifadeleri işte bu listenin içerisinde dönecek işlemlerimiz o yüzden ‘todoCtrl’ ifadesi bir adet app.Controller olduğu için oraya bağlıyoruz. Bu listeye ihtiyaç duyduğumuz da yeni bir To-Do eklemek için script içerisinde yazdığımız todoAdd methodunu kullanıyoruz.Bir To-Do ifadesini complete haline getirmek için yani daha açık konuşacaksak tamamladığımız görevleri listeden çıkartmak için ise remove methodunu kullanıyoruz. Ardından ekran üzerinde göstermek için ise ng-repeat keywordünden faydalanarak ekran da değerlerin gösterilmesini sağlıyoruz. Tüm uygulama bundan ibaret diyebilirim. Angular üzerinde bir şeyler çalışmaya , çalıştıkça da sizler ile paylaşmaya devam edeceğim . Tabi bu aralar biraz .net core da bulaşmayı düşünüyorum onunla ilgili de bir kaç yazı gelebilir sizlere.

Bu yazılıkta bu kadar okuduğunuz için çok teşekkür ederim. Kodları ise github adresimden elde edebilirsiniz. Bu yazıyı post ederken dinlediğim şarkı ise: Korn – Another Brick in the Wall
Sonra ki yazılarda görüşmek üzere hoşça kalın…..

0  

Asp.Net MVC içerisinde Klasik Captcha Kullanımı

Herkese Selamlar ! Çok olmadı ama yine de ayrılık girdi araya fakat bu sefer bahanemi duyunca bana hak vereceğinizi düşünüyorum. Aranızda zaten bilenler vardı 1-20 Temmuz tarihleri arasında askerlik hizmetimi tamamladım. İyisi ile kötüsü ile bir şekilde tamamlandı artık ve önümüze daha rahat bir şekilde bakabiliyoruz. Bugünkü yazımız ise daha önceden tarafıma iletilmiş olan sorulardan biri yine fakat ufak bir farklılık söz konusu. Normalde tarafıma gelen soru google reCAPTCHA nasıl kullanılır? şeklinde ulaşmıştı bana ve o şekilde de bir örnek hazırladım. Sonradan google reCAPTCHA sayfasına girdiğimde bir problem olduğundan dolayı sonra tekrar denemem konusunda beni uyardı. Ben de başladım , ilerledim artık diye düşünüp klasik captcha üzerinden yoluma devam ettim. Problem çözüldüğünde onun için de bir örnek hazırlayabilirim belki henüz karar vermedim. Peki captcha tam olarak nedir ? Completely Automated Public Turing test to tell Computers and Humans Apart ifadesinin baş harflerinden oluşmuş bir kısaltmadır. Tam olarak Türkçesi ise Bilgisayarlara ve İnsanlara Ayrı Bir Şekilde Tamamen Otomatikleştirilmiş Turing Testi yani kısaca sistemi kullanan o an ki kişi bilgisayar mı yoksa bir insan mı bunun ayırt edilmesini sağlar.

Çeşitli captchalar var tabi google reCaptcha var ya da bir resmin içerisinde ki tabela olan alanları seçiniz gibisinden bir captcha var , basit matematiksel hesapların sonucunu bekleyen bir captcha var bir de örneğimiz de de yer alan klasik captcha denilen metinde gördüğünüz ifadeyi textboxin içerisine yazmak var ki benim en sevdiğim budur. Diğerleri bir yer den sonra bıktırmaya başlıyor özellikle de resim içerisinde bazı nesneleri işaretliyoruz ya o baya bir uğraştırıyor insanı siz de haliyle uğraşmak istemiyorsunuz. Buna ben de dahilim.
Örneğimiz de ise standart bir basit mvc üyelik formu gibisinden düşünebilirsiniz zor bir uygulama değil o yüzden kodları açıklamıyorum ama yine de ihtiyaç duyarsanız yorum olarak yazabilirsiniz ve ben de yazıyı güncellerim sizin için. Captcha kısmında ise manage nuget üzerinden daha önce de kullandığım CapthcaMVC.MVC5 aracini kurup doğrudan kullanıyoruz. Örneğimizin kodlarını ise github üzerinden temin edebilirsiniz. Yazıyı post ederken kulaklığımdan gelen şarkı ise: Arctic Monkeys – Do I Wanna Know ? .Bu şarkı en sevdiğim şarkıdır bu arada bilginiz olsun. Sonra ki yazılar da görüşmek üzere hoşça kalın….

0  
EnglishGermanTurkish