#2015-11-14 Güncesi | Global Day Of Code Retreat

Bir hafta önce facebook üzerinden bir EventBrite adlı site üzerinde pair-programming konusu üzerine bir toplantıya rastladım. İçeriği olağan dışı geldi ve katılma kararı aldım. Bu linkteki adresten kayıt yaptırdım. Kafamdaki ilk düşünce gidip bir kaç insan tanıyıp gelmekti.


Günün Kuralları
  1. Oturum
    1. Her kişi 1 kişi ile Pair olacak ve 45 dakika boyunca bu konunun çözümü üzerine geliştirmelerde bulunacak. Bilgisayarda kod yazan bir kişi olacak diğeri gözlemci olacak.
    2. 45 dakika sonunda tüm kodlar silinecek.
    3. 10 dakikalık Code Retreat için 8-10 kişilik gruplar halinde 45 dakikada yaşadıklarımızın kritikleri yapılacak.
    4. 5 dakika çay ve kahve molası.
  2. Oturum 
    1. Pair olmadığımız yeni bir kişi ile pair olunacak..
      • Buradaki kriter sana bağlı ben C# yazıyordum , Java yazan bir pair buldum. Java üzerinde Eclips ve Test süreçlerini gördüm. #Beğendim.
    2. 45 dakika boyunca çözüm üzerine geliştirilecek. Fakat Bu Sefer Ping ve Pong eylemi kuralı var. Yani Bir yere kadar yazılacak ve arkadaşına pas atılacak oradan arkadaşı alıp devam edecek.
      1. Örnek olarak; GetModelCount() methodu 10 sayısını döndürmesi lazım şeklinde bir test yazdığımı varsayıyorum. Test şuan çalışmıyor çünkü method içi geliştirilmedi. Arkadaşımda alıyor ve method içini gerekli kodlarla dolduruyor. Oda bir test yazıyor ve bana teslim ediyor bende aynı şekilde dönüş yapıyorum. İşi bu şekilde sonuçlandırıyoruz.
      2. Burada iki kişinin o framework üzerinde kod tecrübesi etkili ama sonuç olarak 3-5 kere sonra alışılıyor.
    3. 45 dakika dolar yazılan kodlar silinir.
    4. 10 dakikalık Code Retreat yapılır.
    5. 5 dakika mola.
  3. Yemek Molası - Yemekler Beleş. :)
  4. Oturum
    1. Pair olmadığımız yeni bir kişi ile pair olunacak..
    2. 45 dakika boyunca çözüm üzerine geliştirilecek. Yine Ping ve Pong eylemi kuralı var. Ek olarak bu oturum üzerinde İf, Switch, For, ForEach, While vb. Condition ve Loop kullanılmayacak.
    3. 45 dakika dolar yazılan kodlar silinir.
    4. 10 dakikalık Code Retreat yapılır.
    5. 5 dakika mola.
  5. Oturum
    1. 3 oturum'a ek olarak yazılan her method içi 5 satırdan daha fazla  olmayacak.
  6. Oturum
    1. Yeni bir kişi ile pair olunur. 
    2. Bu oturumda tek kural vardır yanındaki kişi ile sözlü iletişim kurmayacaksın.
Bunları yapacağımız çalışmanın detayları ise şu şekildeydi;
  1. Conway's Game of Life isimli bir algoritma tanıtıldı. Bu algoritmayı bir kağıt aracılığı ile teslim aldık. Kağıt Eklerde Ek1.jpg olarak bulunmaktadır. Buradaki kurallar wikipedia içerisinden belirtilmiş durumdadır. Ancak ben buraya da yazmak istiyorum. Video'dan anlamak için tıklayın.
    • Any live cell with fewer than two live neighbours dies, as if caused by under-population.
      • Yaşayan bir Hücrenin 2'den daha az yaşayan komşusu varsa, Komşusu olmadığından ölecektir.
    • Any live cell with two or three live neighbours lives on to the next generation.
      • Yaşayan bir Hücrenin 2 veya 3 canlı komşusu olduğunda bir yeni cell doğumu olur.(Burada doğum nerede gerçekleşecek sorunu sordum bilmiyorum. Fikrim 3 hücrenin kesişim kümesi olması olabilir.) Burayı daha iyi anlamak lazım.
    • Any live cell with more than three live neighbours dies, as if by over-population.
      • Yaşayan bir hücrenin 3'den daha fazla komşusu olursa fazla komşusu olduğu için ölecektir.
    • Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
      • Ölü bir hücrenin 3 adet komşusu olursa Hayata Döner.
  2. TDD - Test Driven Development veya BDD - Behavior Driven Development kullanımı yapabileceğimiz kısıtlaması getirildi.
    • Benim burada TDD geliştirme ile ilgili biraz fikrim vardı fakat BDD ilk defa duymuştum.
Günün Kazanımları;
  1. Thought Works Şirketini tanıdım. Çalışanları çok sempatik ve zeki genç insanlardı. Mutlaka iletişimde olunması gereken insanlar.
  2. TDD öğrenmek için Kent Beck adlı adamı takip edebileceğim söylendi. Ayrıca kendimde bir eğitim buldum.
  3. CoderDojo adında çocukların yazılıma kazandırılması için ileriye dönük bir projeden bahsedildi.
    1. Ayrıca MBB ile görüşmemizde @sulhadin arkadaşımında daha önce bahsettiği Code Monkey adlı oyun mantığını çok beğendim.
      1. 15 bölümlük bir seriyi 6 yaşımdaki kızıma sadece 1-2 direktif vererek yaptırmayı başardım. (heyecanlandım)
    2. Karaköy veya Kadıköy tekrar bakmak lazım haftada 2 saatlik seansları oluyormuş çocukların yazılımları ile ilgili ücretlimidir bilmiyorum.
    3. Bize gösterilen Video buradaki gibiydi.
  4. Isaac Asimov ile ilgili bir kaç bilgi edindim.
    1. Ben Robot - IMDB filmi için öneri aldım. İzlemek için tıklayın
    2. System.Core.dll ile makinenin işlemcisine kadar kodlama yapabileceğimi öğrendim.
  5. Şuanki fikrimiz olan Günce yada Haftalık yazma mantığından bahseden @mbb abimizin önerisi ile Serdar Kuzuoğlu adlı kişinin takibine başladım. 
Kendime önerilerim.
  1. Haftanın en az 1 günü algoritma geliştirme çözümleme üzerine geçireceğim. Bunu yaparken TDD kullanmaya özen göstereceğim. SOLİD prensiplerini uygulamayada devam ediyor olacağım.
  2. Haftalık Çalışmalarını @MBB yönetimine benzer şekilde 1 ay dene ve feedbacklerini ver.
  3. Çalışma, Dinlenme, Aile ve Motivasyon zamanlamalarını yapılandırma için bir model oraya koy.

Yönetim Paneli Tasarlamada geldiğim son nokta !

Baktığınızda bu nedir demeyin sadece kafamdakileri yazdım yarın değişebilir bu fikirler pek takmayın yani :)


Projenin temel sorunu bir frontent mimarisinin olmayışı, bu mimari sorunun çözümü için aylardır bir çok şey denedik fakat tam manasıyla başarılı olamadık. Bunun temel sebebi kullandıığımız teknolojiler değildi, Bu güne kadar yanlış bildiğimiz şeyleri doğru olarak kabul edip ilerlemeye çalışmamızdı.


Yapılması gereken sadece işleri basitçe ele almaktı hepsi bu, bir tarih seçtirmek için koskoca kütüphanenin yüklenmesi yerine HTML5 kullanmak mesala çok basit bir değişimle performansa etki eden önemli bir adım.


Bu çalışma ile SammyJs’den edindiğimiz bilgiyi, Metronic(Bootstrap) Admin Theme’den aldığımız tasarım düsturunu ve d3’dn altığımız grafik işleme mantığını doğru bir şekilde hayata geçirebileceğiz.


Bootstrap çıkar PureCss girer.

Bootstrap ile yaşadığımız birincil sorun bir dosya içerisinde tüm herşeyin gömülmüş olması test ve analizlerde bir sayfa kullanımında %99’u boşa gidiyor şeklinde ifadeler vardı. Bu durumu aşmak için 5’e bölünmüş PureCss kullanımı ile bir tasarım planlanması önerilmektedir. Forms, Buttons, Menu, Tables, Layouts olarak farklı başlıklara bölebiliriz.

Kullanım kolaylığı ikisi içinde makul seviyededir.


Jquery, Bootstrap Çıkar -> Pure Javascript + AngularJS girer.

Jquery ve Bootstrap teknolojileri çok güzel ve hızlı geliştirilselerde sayfa hızlarının büyük kısmını yemekteler. Performanslı bir çalışma için yapılması gereken jquery ve bootstrap componentlerinden kurtulmaktır.

DateTime, Time, Week, Month, Color, Number, Email , Range(1-5 arası bir değer seçtirmekgibi) Selectorler için HTML5 desteği mevcut durumdadır. Geriye modal popup, dialog gibi kullanımlar kalıyor. Bunların kullanımlarını tamami ile yasaklıyor olacağım bunlar mobil kullanımıda engelleyen teknolojiler. Artık sadece HTML5 + Javascript kullanımına odaklanıyor olacağız. CKEditor ile ilgili jquery bağlantısı yok kontrol ettim. D3 library kullanımına devam edilebilir. 


Kayıplarımız  olarak en önemli konu efeklerimiz, geçiş efektleri kullanabiliyorduk. Jquery gittikten sonra bu işi Angularjs bırakıyor olacağız.

http://www.nganimate.org/



Yönetim Paneli Yapımı İçin Gerekli Bilgiler

Bir Yönetim Paneli tasarlanırken gerekli temel tasarım özelliklerimiz harici çok fazla şatafat gereksinimi duymayız. Yapmak istediğimiz işler CRUD ekranları etrafında toplanırlar.  muhtemelen tüm benzer yönetim panelleri için gerekli tüm componentlerin listesini hazırlamaya çalıştım.

DateTime Picker (HTML5)

Time Picker(HTML5)

Color Picker(HTML5)

Week Picker(HTML5)

Month Picker(HTML5)

Email(HTML5), Number(HTML5-Max-Min özellikleri kullanılacak), Text(Single Line) (MaxLength özelliği kullanılacak – spellcheck gözden geçirilecek HTML), Textarea(Multi)(HTML)

HTML Editor(CKEDİTOR JS) kullanılacağı sayfada js eklenerek çözülecek.

Range Slider (HTML5) -> 1-5 arası bir değer seçmek istediğimizde jquery içerisinden kütüphane yüklüyorduk gerek yok artık.

Button, A, Image Button(HTML5)

File Picker

Table

Mega Menü (Full CSS olarak hazırlanmış sistemler mevcut)bknz: http://jsfiddle.net/fredthewebchap/maasz/

Async GET-POST bu işlerin tamamını ve sayfa geçişleri ile ilgili işi AngularJS üstlenecek. Sayfada bir şey gösterilecek veya gösterilmeyecekse bunlara Angularjs karar verecek.

Icon için resim kullanımı yapılmayacak font-awesome kullanımına devam edilecek.

Grafik gösterimleri için d3 library içerisinden gerekli kütüphaneler kullanılacak diğerleri kullanılmadan önce bilgi verilecek.


Tüm bu özelliklerin detaylı kullanım bilgileri SamplesController planlaması ile belirlenecek. Developer için gerekli tüm özellikler burada test edilecek.


Sayfa Planlaması ve Yönetimi

Yönetim Paneli içerisinde sayfa planlamaları için bir doküman hazırlanacak. Genel Mimari ile ilgili temel bilgilerde dahil tüm sayfaların dokümantasyonu değiştirilmeden geliştirilmesi yasaklanacak. 


Sayfa geliştirmesine başlanmadan önce çizimler ve tasarımsal geliştirmeler tamamlanacak. Her sayfa yerleşim ve fonksiyonları Ekip onayından geçirilecek. İcon kullanımlarına özen gösterilecek.


Sayfa hazırlandıktan ve dokümantasyonu yazılıp gerekli resimleri dokümana eklendikten sonra Sayfaların detay bilgilerinin bulunduğu excel içerisine eklenecek.


Sayfa Başlığı – Sayfa Url – Hangi Rollerin girebileceği – Sayfanın Local Açılma Hızı – Sayfanın Live Açılma Hızı – Yapılma Tarihi – Sorumlu Personel 


Formatında doldurulduktan sonra sayfa tamamlanmış olacak.


Burada hazırlamış olduğumuz birinci dokümantasyon bölümü her sayfanın görünür bir bölümünde (?) butonu şeklinde bir erişimle müşteriye açılacak. Müşterinin sayfa ile ilgili detaylı bilgileri alması buradan sağlanacak. 


Bu kısım otomatize olacak eklenen her dokümantasyon otomatik olarak sayfa ile bağlanacak. View/Home/Indexcshtml – Documentation/Home/Index.html şeklinde bir mimari basitçe çözer.


Documantation bilgileri düzenleme panel olabilir file düzenlemelerini basitçe yapabilmemiz için.

ASP.NET Web Sitenizin Hızı Yavaş Mı ?

Web sitenizin hızını arttırabilmek için yapabileceğimiz çok şey ama basitçe aklıma gelenleri hızlıca yazıp uzatmadan kapatcam konuyu.

  1. JS, Css dosyalarınızı sıkıştırın ve tek dosya halinde getirin. Örnek 30 adet js ve css dosyanız var. Bunları 15 js, 15 css düşünün. Sunucunuza ayrı ayrı 30 çağrı atılmasındansa tek dosya olacak şekilde ScriptFiles.js ve StyleFiles.css olarak iki çağrı atacaktır. Dosya boyutlarınız büyüyecektir fakat bu sorunuda StaticFile Caching ile çözebilirsiniz. Bu konu ile ilgili araştırma yapacağınız anahtar kelime grupları şöyle; Bundle And Minification ayrıca bu link içerisinde anlatılanları eksiksiz yapın derin çok faydalı oluyor. Ayrıca Javascript dosyalarınızı kesinlikle body'nin sonuna koyun head içerisinde olduğunda sayfa açılma beklemesini etkiyor.
  2. Server Gücü, İnternet Hızı ve Server Region Seçimi; Bu konuda da Amazon Web Server(AWS) kullandığımız için en ucuz server olan OREGON Serverlarını tercih ettim fakat Türkiye'deki bir sunucu 1 kb dosyayı 10-30ms civarında getirebilirken ABD(Oregon) sunucusu 230ms ve üzerinde cevap veriyordu. 
  3. Web Sitenizi klasik mantıktan kurtarın en azından Yönetim Paneli için söyleyebileceklerim şu yönde;
    Her sayfa açılışında en az 1-2 MB scriptiniz ve yönetim panelini kullanan kişiler size küfür ediyorlar :) Çok yavaş diye. Burada çözüm ilk açılışta Scriptler yüklendikten sonra sayfa geçişlerini Ajax ile Bir div içerisinde gerçekleştiriyor olmak. bu bize ne kadar diye düşünelim. 
    2 MB Script, 400kb Style, Sayfanın normal açılma hızı 500ms olsun. 1mbps internet hızı olan birisi server iyi durumdaysa bunu 3-5 saniyede indirebilecek ve düşünün kü bir rapor sayfası Sayfa açılma hızı 2-3 saniye üzerine çıkmaya başladıkça üzerinde birde 3-5 saniye binecek. Eğer dediğim şekilde bir yöntem tercih edersiniz. sayfa geçiş hızınız 500ms olacak. 5 saniye yerine... Konu ile ilgili AngularJS Routing veya SammyJS önerebilirim. Bence performans için ve maliyetleri düşürmek için önemli büyük bir bandwith bu sayede ortadan kalkıyor.
Bu konu ile ilgili aklıma gelenler şimdilik bu kadar sorularınız olursa müsait olduğum zamanlar yazarım onlarıda...

Devam Eden Projeler...

Bir projeye hevesle başlarsınız, harika planlar, harika tasarımlar yaptığınızı düşünürsünüz. Yazdığınız kod, kurduğunu model ve mimarinin harika olduğunu delinmez olduğunu düşünür sistemi yazarsınız. aradan 1 sene geçtiğinde şöyle geri dönüp bir baktığınızda genelde gelişme sürecinden kaynaklı yazdığınız kodun ne kadar gereksiz yanları olduğunu görürsünüz veya tasarımda ne kadar büyük hatalar yapmışsınız onları anlarsınız. 
Sonra bir refactoring sürecine girişmek istersiniz tüm kodlarınızı ve tasarımlarınızı elden geçirmek istersiniz. Ama İşler ilk başta yazdığınız gibi kolay değildir. Live bir sistem ve binlerce müşteriniz vardır. Her sayfayı kafanıza göre değiştiremez yenilikleri kafanıza göre kararlaştıramazsınız. Yenilerini yapıp yavaş yavaş bir geçiş yapmak zorunda kalırsınız.

bu yazıyı bir yere bağlayamadım. Fakat böyle bir sürecin içerisinde olduğumu biliyorum. Ben kendimce buna Devamlı Gelişim Modeli diyorum. Durmadan gelişiyoruz. Geliştiriyoruz. 

Bunun sonucu olarak, geçmişi beğenmiyor, geleceği hayal ediyoruz. Bunun aksi beni güçsüzleştiriyor ve yoruyor.

Projelerinizi başlayıp bitirmek isteyebilirsiniz. Fakat Yazılım dünyasındaki ürünler çikolata gibi değildir. Yaşayan Canlılar gibidir. Bu nedenle Projenize başlayın yapabildiğiniz en iyi planlamayı yapın. Harika bir mimari kurgulayın, Harika kod blokları yazın, Harika tasarımlar gerçekleştirin..

Sonra bir gün dönün ve yaptıklarınıza bakın, Egonuzu bir köşeye atın ve ne kadar kötü bir iş yapmışım diyebilin(dünya'nın en harika işi olduğunu düşünseler dahi etrafınızdakiler) Sonra oturun ve daha iyisini yapmak üzere işe koyulun...

Başka nasıl gelişilebilir ki ?

Tarih Aralığı Kontrolü Problemi Çözümü | Date Intersection - Kendime Not

Projemde kullanmak üzere oluşturmuş olduğum MonthSelector Aracım ile Kutuları kullanarak tarihi ileri ve geri alarak aralık belirleme işlemi yapıyordum. Buna bağlı olarak görev tanımlarımın getirilmesini sağlıyorum. Görev Başlangıç ve Bitiş ile bu iki tarih aralığının kesişmesi ile ilgili kontrolü yapamadım. Sonrasında biraz araştırma yaptıktan sonra bunun "Date Intersection" konusu olduğunu öğrendim. Bununla ilgili bir kaç makale aradıktan sonra http://www.danesparza.net/2011/07/find-out-if-2-date-ranges-overlap-using-javascript/ adresine rastladım. Sorunumu başarılı bir şekilde çözdüm. 


var e1start = e1.start.getTime();
var e1end = e1.end.getTime();
var e2start = e2.start.getTime();
var e2end = e2.end.getTime();

return (e1start > e2start && e1start < e2end || e2start > e1start && e2start < e1end);


Yazılım Sektöründe Stajer ve Naylon Stajer Olmak !

Merhabalar, 

Bugün bir mail aldım. Mail içeriği şu şekilde:

Merhaba,
Sitenizi sevdim son yazınız gerçekten faydalı. Teşekkürler.
Ben Konya'da Mevlana Üniversitesinde Bilgisayar Mühendisliği 2.sınıf öğrencisiyim.Bu yaz staj yapmam gerekiyor. Sizinde Bilge Adam'da staj yaptığınızı okudum sitenizden. Staj başvurusu kabul süreci yada ücret talep ettiler mi? Yeni başlayan pek bilgisi olamayan ama istekli biri için önerir misiniz ? gibi sorularıma cevap arıyorum 
Şimdiden çok teşekkür ederim 
İyi çalışmalar 

Öncelikle sorularımızı bir toparlamak isterim.

  1. Staj Başvuru Süreci var mıdır ? Nasıl İşler ?
  2. Staj Yapmak için ücret öder miyim ? Staj yapmak için ücret alabilir miyim ?
  3. Yeni başlayan arkadaşlara öneriler var mıdır?
Öncelikle bu arkadaşımıza teşekkür ediyorum. Bu sorulara kendi tecrübelerim ile cevap verebilirim ancak benden daha iyi düşünen daha iyi yerlerde staj yapmış arkadaşlarımızda var tabii ki fakat ben sizlere kendi penceremden durumu anlatmaya çalışıyor olacağım.

İlk olarak staj süreci vardır ve aynı zamanda böyle bir süreç yoktur.

O nasıl oluyor diyebilirsiniz. Ben Ticaret Meslek Lisesi Çıkışlıyım. Bilge Adam Stajımı lisede okurken gerçekleştirdim. Durum şu ki sınıfın 36'da 3-4'ü harici Naylon Staj yaptı. (Naylon Staj : siz stajerlik yapacağınız yere uğramaya bilirsiniz demek oluyor. Firma sadece sizi çalıştırmış gibi gösteriyor ve dosyanıza imza atıyor. Genelde bunu tanıdık amcalarınız yapmaktadır. Benim kesinlikle önermediğim tarzda bir staj türüdür.) İşin doğrusunu söylemek gerekirse istekli olan inek öğrenci olarak biz vardık diyebilirim. İnek Yazılımcı öğrenciler olarak her derse çalışır azim gösterirdik. Yazılıma özel bir çalışma yapmazdık çünkü yazılım bir çalışma gerektiren iş değil eğlence durumundaydı daha çok.

Benim sürecim Google, Microsoft, Bilge Adam gibi kurumsal büyük firmalara mail göndermek ile başladı. Aynı bu arkadaş gibi bir mail yazdım. Zorlayarakta olsa Bilge Adam'a giriş yaptım. Benim için büyük bir başarıydı o zamanlar.

İlk Görüşmeye gidişimde ceketimi giydim. Güzelce hazırlandım. Beni bir odada beklettiler ve sonra yazmış olduğum cv üzerinden sorular sormaya başladılar. Sonrasında görüşme bitti ve haber beklemeye başladık.

Neyse daha fazla hikaye anlatmayacağım.. 

Sürece dahil olabilmek için bir CV hazırlayın tertemiz olsun. Çünkü kariyeriniz tertemiz. Sadece temel bilgileriniz ve aldığınız kurslar olsun. Atıp tutmayı sakın denemeyin çok komik duruyor. 

Staj Yapmak için ücret öder miyim ? Staj yapmak için ücret alabilir miyim ?

Diyorsanız iş gerçekten çok yeni demektir. Staj yapmak için para ödemezsiniz. Stajerlik biraz Cem Yılmaz'ın dediği gibi kölelik demektedir. Gözünüz korkmazın çay taşıtmaktan bahsetmiyorum. Yazılımda da angarya denilen işler ilk sizin elinizden geçecek diyorum.

Yazılımda angarya iş tabirini ben şöyle yaparım. Yazılımcı olarak kod yazmaktan zevk alıyorum. Fakat öyle zaman geliyor ki bir sürü statik değişkenliği olmayan copy-paste yapılarak saatlerce uğraşılacak bir işe denk geliyorsunuz. Bu süreçte sadece badaj çekiyorsunuz. İşte bu işler çoğu zaman takımın stajerine yaptırılmaktadır. Tabii ki bu her zaman için geçerli olan bir şey değildir.

Ama yinede stajer olamak sabrın sınandığı bir dönemdir. Eğitim almanın karşılığında o adamlara bu tarzda hizmet verirsiniz ve öğrenmeye devam edersiniz.  Bu nedenle stajer olarak para beklentiniz olmasını tavsiye etmem. Kafa rahat olur. :)

Bir gelir ve her şeyi kavramaya başlarsınız. Junior yazılımcı statüsüne girersiniz. İşte o zaman işler birazcık daha keyifli olur. Çünkü artık daha aktif bir takım elemanı olamaya başladınız demektir. Para kısımı burada ucundan kendini göstermeye başlar. Türkiye'deyiz çok yüksek miktarlar beklemeyin :) Fakat öğrencisiniz kendinize yetecek kadar kazanabilirsiniz. Ve tabii ki en güzel yanı öğrenmeye devam edebilirsiniz.

Yeni başlayan arkadaşlara önerim bu blog'ta yazdıklarımı okumaları ve stajerlik yapmak için para mı eğitim mi sorularını sormalarıdır. Eğer Para öncelik diyorsa ben bir fikir sunamıyorum. Çünkü hiç bir patron baba hatrına çalıştırmaz kimseyi hadi gel sana bir şeyler öğreteyimde üzerinede şöyle bir para vereyim demez. Taktir edersiniz ki sizde bilgi kadar kıymetli bir şeyde yoktur.

Lise, Üniversite eğitimleri şuanda yeterli seviyede piyasaya eleman yetiştirmeye vakıf değil. Bu nedenle yapabileceğiniz en güzel şey internet üzerinden eğitimler almak ve devamlı öğrenmek. Google abimiz bize her sorunun cevabını veriyor ben 6-7 senedir içinde bulunduğum bu sektörde cevapsız sorum olmadı. Yaptığımız iş zor değil emek istiyor o kadar.

Siz emek verin yazılım sizin için kendini öğretecektir.

ASP.NET MVC 4 Projenizi ASP.NET MVC 5 Yapmak !

Asp.NET MVC 4'den Asp.NET MVC 5'e geçerken dll değiştirmek yeterli olmuyor. Ben ReCaptcha yüklemek isterken 5 versiyonu istedi ve otomatik yükseltim. Bu nedenle aşağıdaki hatayı almaya başladım.

[A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Users\MyName\AppData\Local\Temp\Temporary ASP.NET Files\root\63e7ff36\a1cb775d\assembly\dl3\8f568c18\9b7ddacf_d04dcf01\System.Web.WebPages.Razor.dll'.
Sonrasında; 
http://stackoverflow.com/questions/22793322/asystem-web-webpages-razor-configuration-hostsection-cannot-be-cast-to-web
kaynağına eriştim. Buradan edindindiğim bilgiler ile;
http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2 bu linke ulaştım. 

Bu linkler sayesinde çözüme ulaştım.

Kısaca Root içerisindeki web.config içerisindeki kullanımları değiştirdim.
Views\web.config içerisindeki kullanımları değiştirdim.

Değişimleri nasıl yapacağınız ikinci verdiğim linkte yer almaktadır. 

sorunu aşamazsanız iletişim kurabiliriz.