Udemy'de Yayınladığım Java ile Unit Test Eğitiminin Hazırlanış Süreci

Bu yazımda Udemy’de yayınlanan “Java, JUnit ve Mockito ile Unit Test Yazma Eğitimi” ni hazırlayış sürecimden bahsedeceğim.

Yapabilir miyim?

İnsanların öğrenmek için okumak ve dinlemek yerine izlemeyi daha çok tercih etmeye başlaması ile birlikte online eğitimler de, özellikle yazılım geliştirme sektöründe, çoğumuzun hayatına girdi. Eğitim deyince benim aklıma hep bu işi profesyonel olarak yapan insanların verdikleri eğitimler geliyordu, belki sınıf içi eğitim veren insanlardan kaynaklı oluşan bir algı. Youtube vb. ortamlarda eğitim tarzında içerik hazırlayan ve bu işi profesyonel olarak değil daha çok bir konferans’da veya meetup’da bir şeyler anlatıyormuş gibi yapan insanlar vardı ama onlarınki eğitimden ziyade bir paylaşım gibi geliyordu bana.

Yaklaşık 1.5-2 yıl önce Udemy’deki eğitimleri incelediğimde çok farklı niteliklerde eğitimler olduğunu ve hazırlayan insanların da bazılarının profesyonel olarak eğitim işi yapmadıklarını sadece bildikleri şeyleri yapısal bir şekilde anlatmaya çalıştıklarını gördüm. Kendi ilgilendiğim bazı konularda aradığım eğitimlerin bazılarının kalitelerinin çok da yüksek olmadığını ancak yine de yüzlerce öğrencinin o derse kayıt olduğunu gördüm. Yıllardır şirket içinde farklı farklı konularda onlarca sunum yaptığım için, insanlara bir şey anlatma konusunda fena bir durumda olmadığımı düşündüğüm için, ilk aklıma gelen, klasik bir tepki olan şu oldu; ben bundan daha iyisini yapabilirim :). Ama ciddi bir girişimde bulunmadım, o adamların farkı zaten o eğitimi hazırlayıp sunmuş olmalarıydı…

Bu yıl Ocak gibi bir kaç arkadaş ile konuşurken konu tekrar gündeme geldi. Tekrar Udemy eğitimlerini incelemeye başladım, İlk baktığım zamandan farklı olarak Udemy Türkiye pazarına yönelik de girişimlerde bulunuyordu, Türkçe içeriği arttırmak için. Türkçe içerik’ler vardı ancak konu çeşitliliği çok fazla değildi. Şubat ayında Udemy Türkiye’nin Udemy’de Eğitmen olmak ile ilgili bir meetup’na katıldım, yazılım geliştirme ile ilgili eğitimler için oradan çıkardığım iki şey oldu, birincisi Udemy’de başarılı olmak için yıllarını bu işe vermiş bir kıdemli yazılımcı olmak gerekmiyor, sadece birazcık bildiğini anlatmasını bilmek yeterli oluyor. İkincisi Türkçe içerikte başlangıç seviyesi konular daha çok öğrenci çekiyor, çünkü bu tarz konular lise öğrencilerine kadar öğrenci çekebiliyor. Bir diğer husus da İngilizce eğitim hazırlamak istiyorsanız native konuşanlara karşı büyük bir dezavantaj’a sahip olduğumuz.

Bir programlama dilini öğrenen kişinin o programlama dilinde yazdığı kodları otomatik olarak nasıl test edeceğini de bilmesini ben çok önemsediğim için bu konuda bir eğitim hazırlamaya karar verdim. Java dünyasında unit test yazmaya yönelik olarak Udemy içeriklerini aradığımda Türkçede 3 yıl önce birisinin hazırladığı bir eğitim dışında eğitim bulamadım, global’de bile bu konuda sayılı eğitimler vardı. Udemy’nin sağladığı trend analizi gibi bir şeyler yapan bir araç var, Udemy üzerindeki bir konu ne kadar rağbet görüyor, bu konudaki arz talep dengesi nasıl vs. gibi bilgileri size veriyor ancak bunu global ölçekte yapıyordu en son sadece Türkiye için yapmıyordu. Unit test ile ilgili çok fazla eğitim bulamamak biraz unit test’ler ile ilgili şu algımı da güçlendirdi; bu çok önemli bir konu ancak bir o kadar da insanların ihmal ettiği bir konu.

Maalesef yazılım projelerinde gözlemlediğim, bir çok günü kurtarma, uzun vadede ise bunun cezasını çekme problemi unit testler için de var. Projeler yapılırken hep aynı senaryo, zaman kısıtımız var, unit test yazarsak işler yetişmez…Merak ediyorum unit test yazmadığı için başarılı! olan bir proje var mı? Bunları söyleyen insanların kaç tanesi unit test yazılan bir projeyi bitirmiş ki, unit test yazdığı için projesinin yetişmeyeceğini söylüyor. O projeler kısa vadede yetişse bile uzun vadede son kullanıcıya, müşteriye, yazılım geliştirme firmasına, yazılım geliştirme ekibine nasıl geri dönüşleri oluyor bunları ölçen var mı? Yok, dolayısı ile hep aynı döngü çoğu zaman devam ediyor. Açıkcası ben de bunu daha önceki iki yazımda anlattığım projemdeki deneyimime dayanarak söylüyorum. Şu anda yaklaşık 900 test, yaklaşık 3dakika’da çalışıp code base’imdeki kodların %80’inden fazlasını çalıştırıp bana bir sorun olmadığı geri bildirimini verebiliyor. Bu konu başka bir yazının konusu olabilir, eğitim hazırlama sürecime geri döneyim.

Aslında ilk başta eğitim konumu Test-Driven Development(TDD) olarak seçmiştim, aynı eğitim içinde hem unit test yazmayı hem de bu unit test’leri TDD mantalitesi ile yazmayı anlatacaktım. Ancak ilerleyen zamanlarda ders’in çok büyüdüğünü görüp, bir arkadaşın tavsiyesi ile TDD yapabilmenin ön şartı olan unit test yazmayı tamamen ayrı bir eğitim olarak hazırlamaya karar verdim.

İçerik Üretmeye Başladım

Eğitim içeriği ile ilgili hiç bir çalışma yapmadan Udemy’de eğitim hazırlamak için sağlanan, bulabildiğim dökümantasyonları, video’ları inceledim. Bu konuda Udemy’nin sağlamış olduğu bir eğitim var, onu izledim. Çünkü bir şeyleri yanlış, eksik yaparak sonra tekrar yapmak zorunda kalarak, hem sabrımı kırmak hem de zaman kaybetmek istemiyordum, özellikle video çekimleri ile ilgili. Video ve ses konusunda problem yaşamamak için Udemy göndereceğiniz bir test video’sunu inceleyip size geri dönüş yapıyor. Bir kaç dakikalık bir test video’su çekip inceleme için gönderdim, hemen ertesi gün video ve ses’de herhangi bir problem olmadığına dair geri dönüş yapıldı. Ancak burada test video’sunda bir eksiklik vardı, sadece icinde sunum olan bir video gönderdim ancak benim çekeceğim video’ların çok büyük bir çoğunluğunda kodlama olacaktı yani IDE üzerinde çalışacaktım, sonradan bu eksiklik ile ilgili sorun yaşadım ve bazı video’ları tekrar çekmek zorunda kaldım.

Sonrasında dersimin ana hattını çıkarmaya başladım, ilk başlarda 20’nin üzerinde bölüm vardı, TDD kısmı çıkınca bu 11’e indi. Ders ana hattı hiyerarşisi 2 seviyeden oluşuyor, bölüm ve ders şeklinde. Ders ana hattını çıkardıktan sonra sıra video’larda kullanacağım içeriği üretmeye geldi. Video’larda kullanacağım içerik sunum, konuşurken söyleyeceklerim ve yazacağım kodlar olmak üzere 3 farklı kategorideydi. Video’larda duraklamadan akıcı bir şekilde konuşabilmek ve daha az emek ile daha az hatasız video’lar çekebilmek için söyleyeceklerimizi yazmamızı tavsiye ediyorlar. Dolayısı ile benim yöntemim her ders için sunum, kodlar ve konuşacaklarımı çıkarma şeklinde oldu.

Bu aşama için yaşadığım zorluklar şunlar oldu; çıkardığım kodları video’ları çekerken kullanmamaya başka kodlar kullanmaya karar verdim, çünkü ilk başta çıkardığım kodlar anlattığım kavramı çoğu zaman anlamlı bir şey yapmayan rastgele sayılabilecek bir kod parçası üzerinde anlatıyordu, bu yöntemdeki kodların hem gerçek hayat bağlantısının kopuk hem de öğrencinin dikkatini toplamasını zorlaştıracağını düşündüm ve daha derli toplu, daha sabit bir domain üzerinden, dersin başından sonuna yavaş yavaş gelişen bir proje üzerinden örnek kodları yazmayı istedim, o yüzden içerik hazırlarken yazdığım kodlar çöpe gitti, video çekerken tekrar kod içerikleri hazırladım bu da epey extra zaman harcamama neden oldu. Bir diğer zor gelen iş de konuşacağınız her şeyi yazmak, bu gerçekten zaman alan bir şey, yazmak için yazmak ile konuşmak için yazmak arasında da fark var, yazılı iken normal görünen bir cümle seslendirildiğinde çok uygun bir cümle olmayabiliyor.

Video’ları Çekmeye Başladım

İçerik konusunda belli bir seviyeye geldiğimi düşündükten sonra video’ları çekmeye başladım. Test video’su çekerken kullandığım notebook’daki built-in kamera ve microfonu, yazılım olarak da quicktime player kullanmıştım. Built-in microfon kullanmak Udemy tarafından tavsiye edilmiyor, benim çektiğim video’larda da ses çok kötü değildi ancak bir kuyudan geliyormuş gibiydi. Built-in microfon ile ilgili başka bir problemim de kod yazarken oldu, kullandığım notebook’un klavye sesi çok fazla çıkıyordu ve video’larda rahatsız edici bir efekt oluşturuyordu. O yüzden bir yaka mikrofunu almaya karar verdim, Amazon’dan 30$'a Audio-Technica’nın bir yaka mikrofonunu aldım. Bu yaka mikrofonununu da ağzınıza yeterince yakın tutmaz iseniz, yakanızda olsa bile, ses çok zayıf çıkıyor, o yüzden ağzınıza yakın bir yerde olması gerekiyor ancak çok yakına gelirse de, rahatsız edici efekt’ler oluşuyor, ‘p’ harflerindeki patlamalar vs. Nihai olarak bir şapka ve kızımın bir kaç çeşit saç tokasından oluşan bir düzenek ile ona çare buldum fena olmadı :).

Video’larda sadece screen casting, yani ekran/sunum görüntüsü kullanmayı düşünüyordum. Konuşan Kafa, “Talking Head”, öğrencilere güven verdiği için Udemy tarafından tavsiye ediliyor ancak benim video’larımın büyük çoğunluğu kodlama ile gececeği ve kod yazarken konuşan kafa olması izlediğim video’larda bana biraz “garip” geldiği için bu şekilde bir karar verdim. Sadece giriş video’sunda kendimi çektim. Kullandığım sunumda çok fazla resim yok, defalarca sunum hazırlamış birisiyim, hatta sırf fotoğraflar’dan oluşan, flickr benzeri sitelerde saat’ler harcayarak çıkardığım sunumlar oldu ancak burada anlattığım konuların çoğu resime dökmeye çok elvirişli değilmiş gibi geldi bana, o yüzden sunumda minimal vakit harcayıp en kısa sürede kod’a geçmeye odaklandım.

Video çekerken paralel olarak da önceden hazırladığım içerik de değişiklik yaptığım için aslında bu süreç hem video çekme hem de içerik hazırlama şeklinde geçti. İlk video’larda çok hata yaptım, o yüzden sil yeniden çekler epey fazla oldu ancak ilerledikçe daha az hata yapar oldum, küçük küçük bazı hataları da video’lardan sildim. Bu içindeki bölümler split edilerek oluşturulmuş bazı video’lar Udemy’ye yüklerken sorun oldu, Udemy video’ları işlerken ses ve video senkron değil hatası verdi ve bu video’ları tekrar, içinde silinen bölüm içermeyecek şekilde çekmek zorunda kaldım.

Video çekerken atladığım şeylerden en önemlisi şu oldu, çektiğim video’lardan bazılarını Udemy’ye yükleyip nasıl göründüğünü test etmek. Maalesef bunu tüm video’ları çektikten sonra yaptım ve klasik developer feryadı olan “Benim bilgisayarımda çalışıyordu ama …” ile yüzleştim. Video her iki ortamda da çalışıyordu ama bilgisayarımda 3840x2400 çözünürlükte çekilen video’larda her şey çok net ve berraktı ama bu video’yu Udemy’ye yükleyince ve Udemy bunları 720p’den yukarıda göstermeyince benim berrak video’lar biranda silikleşti. Sunumda problem yoktu, sadece kod yazarken küçük font kullandığım bir kaç video biraz göz yorucu görünüyordu. Zaten video’ları çekerken bir kaç video’dan sonra IDE’deki font’u büyütmüştüm onlar da fena değildi. Sonuc olarak küçük font olan bazı video’ları yeniden çektim.

Udemy’de Kursun Oluşturulması ve Video’ların Yüklenmesi

Nerdeyse her şey tamamlandıktan sonra Udemy’ye kursun ana hattını, açıklamalarını girmeye ve video’ları yüklemeye başladım. Burada beni en çok yoran aktivite video upload etmek oldu. Eksik yaptığım şey video’ları hazır oldukça yüklememek ve video’ları 720p veya 1080p’ye export etmeden ilk cektigim hali ile dolayısı ile yüksek çözünürlükte olduğu için çok büyük boyutlu dosyalar halinde yüklemeye çalışmak oldu.

Bu aşamada kopan bağlantıdan sonra devam etmeyen upload işlemleri dolayısı ile sil baştan tekrar upload. Upload başarılı oldu bu defa da Udemy işlerken, bazılarını anladığım bazılarını anlamadığım farklı nedenlerden dolayı işlemin başarısız olması, sil baştan tekrar upload et. Üst üste 2-3 denemeden sonra başarılı olan video’lar, kaç defa denediğimi bilmediğim ama yine de başarısız olan dolayısı ile tekrar çektiğim video’lar gibi, sabır zorlayan bir süreç oldu.

Bir Kullanıcı Olarak Udemy Deneyimim

Bunun tam ismi nedir bilmiyorum, Lean yöntemlerde “Conceptual Integrity” diye bir şey vardı sanırım ona karşılık geliyor, yani bir sistemi kullanırken her şeyin sizin istediğiniz yerde, akışta olması. Yani ben olsam ben de böyle yapardım dediğiniz, gayet doğal hareketler ile o sistemi kullanabilmeniz. Ben Udemy’de bunu çok yakalayamadım. Beni en çok yoran şeylerden bir tanesi de istediğim bilgilere hızlı bir şekilde ulaşamam oldu, eğitimcilere yönelik çok yoğun bir içerik var evet ama ben buna kolayca ulaşamadım, içerikler arasındaki bağlantılar hep başka içeriklerin içerisinde. Yani “Table of Contents” gibi bir şeye ihtiyaç duydum hep.

Bu içeriklerin hep başka içerikler ile bir birine bağlanması sanırım bazı noktalarda içeriği kontrolü de zorlaştırıyor. Bir kaç tane karşılığı olmayan link ile karşılaştım bir keresinde de Türkçe bir sayfadan, tıkladığım bir link beni İspanyolca bir sayfaya götürdü, oradan gözüme kestirip tıkladığım link de beni İngilizce olan ancak asıl gitmek istediğim içeriğe götürdü.

Video yüklerken yaşadığım zorluklardan olsa gerek kullanırken beni korkutan bir tasarım da kurs proğramı oluşturma sayfasında kitaplıktan bir video seçerken, “Seç” ve “Sil” in iki küçük icon ve yazı olarak bir birlerine çok yakın olması. Seç yerine sil’e tıklarsanız video’nuz onaysız bir şekilde siliniyor. Onaysız olması garip geldi, geri almak için bir yöntem var mı bilmiyorum.

Bunlarla beraber kurs hazırlama ara yüzü hızlı bir şekilde kursunuzu oluşturmaya olanak verecek şekilde kullanışlı olarak tasarlanmış. Bölümleri, dersleri oluşturup içeriklerini belirlerlerken bunu rahat bir şekilde yapabildim.

Comments

comments powered by Disqus