Proje Günlükleri: CVDL(CV Description Language)#1

Alperen Keleş
6 min readJan 11, 2022

Merhabalar, Proje Günlükleri konseptinin ilk yazısı olduğu için projenin kendisine girmeden biraz daha serinin konseptinden bahsetmek istedim.

Üniversiteye geldiğimden beri sürekli farklı alanlarda farklı tarzlarda projelerle ilgileniyorum. Geldiğimiz yıl 4 kişi yurt mutfağında matkapla aluminyum deldiğimiz zamanlardan oturup kendi programlama dilimizi tasarlamaya çalıştığımız zamanlara pek çok farklı insan grubuyla pek çok farklı işle uğraştım. Bunların hepsini yaparken çok farklı tecrübeler yaşadım, her tecrübeden yeni bakış açıları kazandım. Maalesef ki bunları kimse ile paylaşma şansım olmadı, hatta ve hatta yazıya aktarmadığım için bu tecrübelerin ciddi bir kısmı benim bilinçaltımda kayboldu gitti, ben bile hatırlamıyorum.

Bu sebeptendir ki çok uzun süredir aklımda içinde bulunduğum projelerle ilgili günlüğümsü yazılar yazıp bunları paylaşmak vardı. Hem yaşadıklarımı dokümante etmek, gelecekte geriye baktığımda hatırlayabileceğim bir anı defteri oluşturmak; hem de kendi projesine girişeceklere yol haritası olabilecek öneriler ortaya koymak, bakın bunları bunları yapabilirsiniz belki aklınıza gelmemiştir diyebilmek, karşılarına çıkabilecek problemlere önden hazırlıklı olmalarını sağlamak istiyorum.

Bu noktada kendi başıma girmeye çabaladığım ilk açık kaynaklı proje olan CVDL ile başlamanın güzel bir fikir olduğuna karar verdim. Nedenlerini aşağıda açıklayayım.

  • Normal şartlarda şu zamana kadar yazdığım hiçbir açık kaynaklı kodun birileri tarafından kullanılması gibi bir amacım olmamıştı, bu zamana kadar ya şirket/ödev/proje kapsamında kapalı kaynaklı kodlar yazdım; ya da açık kaynaklı yazdığım herhangi bir kodu yalnızca portfolyom genişlesin, Github hesabım dolsun diye yazdım. İlk kez başkaları tarafından kullanılmasını beklediğim bir yazılım projesine giriştiğim için oradan alacağım tecrübelerin bunu sonradan deneyeceklere ışık olabileceğini düşünüyorum.
  • İlk kez kompleks bir projeye tek başıma giriyorum, teknik yükü üstleniyorum. Bu zamana kadarki çok basit bir karmaşıklığın üstündeki tüm projelerde yanımda birileri oldu, ben de genel olarak kod yazmayı, yazılım mühendisliği yapmayı sevmeyen birisi olarak kaçabildiğim kadar kaçtım teknik yükü üstüme almaktan. Algoritma tasarımı, genel sistem mimarisi, iş modeli gibi kodlamanın kendisinden uzak taraflara doğru kendimi ittim hep.
  • Neden bu sefer bunu bozdum, çünkü fikri satabildiğim kimse yok. Herkes iyi ya güzel fikir demesine rağmen fikri en çok benimseyen hala benim. Ben de dedim madem böyle bir durum var dene bakalım, en kötü ne kaybedersin ki. 2–3 kişiyle birlikte ilerleyeceğiz gibi duruyor, teknik liderlik tarafında onlara iş verme, kod inceleme, açık kaynak proje yönetimi gibi taraflarda da tecrübe kazanmam gerekecek, çok muhtemel ki bir sürü hata yapacağım, sizlere yazacağım, siz de okuyup ya ‘A evet çok mantıklı iyi ki okumuşum’ diyeceksiniz, ya da ‘Salağa bak şunu bile düşünmemiş bi de oturmuş blog yazıp bir şey anlatmaya çalışıyor’ diyip güleceksiniz, her halükarda sizlere ya bir şey öğretmiş ya da güldürmüş olacağım.

Proje sürecinin detaylarına girmeden önce projenin ne olduğundan bahsedeyim.

CVDL açık kaynaklı bir CV Formatı oluşturulması için bir inisiyatif. Hepimiz şu zamana kadar CV hazırladık, pek çok web sitesi(CV Builder), Latex, Word, Canva… gibi farklı metotlar izledik. Bu metotların hepsinin problemleri var.

CV Builder

  • Çoğu paralı
  • Bayağı kullanışlı
  • Kullandığınız siteye limitlisiniz, onun verdiği özelleştirmelerin üstüne çıkamıyorsunuz. Buna ilaveten CV’mi ordan alayım da başka yere çıkarayım diyemiyorsunuz, size yalnızca bir adet PDF veriyor
  • Para vermeyi bıraktığınız anda CV’niz kayboluyor, sıfırdan hazırlamak için tüm o eforu harcamak zorundasınız
  • Ortada bir veriden ziyade bir hesap olduğu için, gel ben senle CV’mi paylaşayım sen otur aynı şablondan yap diyemiyorsunuz bir arkadaşınıza, çoğu zaman aynı siteden üyelik alsa bile sıfırdan her şeyi hazırlaması lazım
  • Aynısı sizin için de geçerli, eski CV’nizden kurtulmaya karar verip yenisini hazırlamak isteseniz başınız ağrıyor
  • Hata kaza site kapansa, şu zamana kadar yaptığınız her şey kaybolacak

Word/Canva/Latex

  • Üçü de ücretsiz
  • Canva ve Word’de hazırlanan CV’lerin estetik olma ihtimali inanılmaz düşük
  • Latex öğrenmek zor, o spesifik şablonda nasıl CV yazıldığını öğrenmek daha zor, 3 yıldır aynı şablonu kullanıyorum hala bir şey yaparken zorlanıyorum
  • Üçü de çok fazla efor istiyor, aşırı kullanışsızlar

CVDL

  • CVDL ile amacım bu iki farklı tarafın iyi özelliklerini birleştirmek.
  • Kullanışlı bir web sitesi olsa, ama CV’nin ham haline de ulaşabilsen, isteyen herkes şablon tasarlayabilse, para ödemek zorunda kalmasan, bunların hepsi de senin elinde olsa bu sayede site kapansa hiçbir şey kaybetmesen tadından yenmez değil mi?
  • Yenmez tabii. Ben de oturdum başladım acaba bunu yapabilir miyiz diye.

Sistemin kendisine girmeden önce kodunu da şöyle bir bırakayım.

Mantık şu şekilde çalışıyor, 3 tane ayrı dosya var arka planda.

(Eğer yazılımcı değilseniz aşağıdaki dosya açıklamalarını atlayabilirsiniz)

1- CVCD(CV Content Document) Dosyası

Bu dosyada aslında sen CV’nin içeriğini yazıyorsun. Hangi okullara gittin, nerelerde staj yaptın, hangi dilleri ne derece biliyorsun… Nasıl Word’e yazıyorsan aynı şekilde yazıyorsun. Tek fark şu, normalde Word’e yazarken başlığı ayarlıyordun, neyin nerde duracağıyla ilgileniyordun falan, onların hiçbirisi yok; sadece içerik var.

2- CVSD(CV Schema Document) Dosyası

CV’yi yazarken aslında yazdığımız her bir bilginin bir anlamı var, arkada bağlı olduğu bir kavram, konsept var, mesela örnek vereyim.

Yukarda benim CV’mden okulda öğretim asistanlığı yaptığım bir kısmı görüyorsunuz, bu aslında 4 e ayrılmış durumda.

1- Organizasyon Adı: University of Maryland — Computer Science Department

2- İş Tanımı: Teaching Assistant for CMSC351 — Algorithms Class

3- Lokasyon: Maryland, USA

4- Tarih: August 2021 — Present

CVSD dosyası bu şekilde şemalar tanımlıyor. Mesela bu eleman tipi aşağıdaki şekilde tanımlanmış durumda.

["Organization"]
name = "Short Text"
location = "Short Text"
text = "Long Text"
role = "Short Text"
start_date = ["Short Text", "Date"]
end_date = ["Short Text", "Date"]

Bu şemalar birazdan tanımlayacağımız üçüncü dosya tipinde kullanılacak, şu an için önemli değiller. Genel olarak içeriklerimizin tipini, hatta adı üstünde şemasını tasarlıyorlar.

Bu şemalar CVDL sisteminin açık kaynak tarafını besleyecekler. İnsanlar Şema/Dizayn çiftleri oluşturup paylaşabilecekler.

3- CVDD(CV Design Document) Dosyası

CVCD ve CVSD dökümanları CV’nin içeriğine dair bazı betimlemeler yapmışken, CV’nin görünümüne dair herhangi bir tanım yapmamışlardı. CVDD bu tanımları içeriyor.

Hangi içerik nereye yerleştirilmeli, boşluklar, fontlar, renkler… CV üzerinde yapılması gereken ne kadar tasarım kararı varsa bunların hepsi CVDD dökümanında sağlanacak.

Bu dosyaların içerikleri kimleri ilgilendiriyor, tema/şema yazmak isteyenleri, kendi CV’sinin en küçük detayına kadar kontrol edebilmek isteyenleri, tabii ki genel popülasyon bunu yapmak istemeyecek. Bu noktada bizler yazılan tema/şemaları paylaştığımız, arkadaki koda dokunmadan ücretsiz bir şekilde şu anki CV yaratıcılarının ara yüzüne sahip bir web sitesi oluşturacağız. Bu sitedeki tüm şemalar, temalar açık kaynaklı olacak, oluşturulan CV’lerin arka planındaki dökümanlar da kullanıcıyla paylaşılacak. Bu sayede kimse bir siteye, bir kuruma bağlı olmayacak, projeyi ben yarın bıraksam ertesi gün başkası toparlayabilecek.

(Eğer yazılımcı değilseniz buradan devam edebilirsiniz)

Projenin ne olduğunu anlattığıma göre, neler yaşandığına değinebilirim.

Peki bu zamana kadar projede neler oldu?

1- Fikir aklıma geldi(taaa ne zaman önce), çevremdekilere anlattım, fikrin kendisi de aşırı ham olduğundan güzel bir tepki alamadım.

2- Oturup gerçekten kodlamaya başlamaya çalıştım. Kendimi limitlememek için öncelikle tamamen sıfırdan bir dilmiş gibi davrandım. Gerçekten yazmaya başlayınca bu kadar özgürlüğe ihtiyaç duymadığımı gördüm, betimleme dili olarak TOML kullanmaya karar verdim.

3- Bu noktada daha TOML kararını vermeden önce aşırı heyecanlı ve sabırsız bir insan olduğumdan projeyi Twitter ve Reddit’te paylaştım. Twitter’dan 0'a yakın dönüş aldım, Reddit’ten çok güzel dönüşler aldım. Öncelikle hiç tanımadığım insanlardan projenin gerçekten yararlı olabileceğini duyma fırsatı duymuş oldum, bu motivasyonumu inanılmaz arttırdı. Buna ek olarak ilk kez Github’da 3'ten fazla yıldız aldım, o da çalışmam gerektiği inancımı büyüttü. Ayrıca schema.org ve jsonresume.org gibi fikrimi geliştirebileceğim benzer inisiyatiflerden haberdar olma şansım oldu. Eğer benzer bir durumdaysanız, heyecanlı olduğunuz bir fikriniz varsa belli bir olgunluğa eriştikten sonra Reddit’te paylaşmanın çok faydalı olacağını düşünüyorum. Twitter tarafındaysa doğru (projeyle ilgilenecek) bir Twitter çevresine sahip olmamamdan kaynaklı olarak böyle oldu muhtemelen, gelecekte nasıl tepkiler alırım bilemiyorum tabii.

4- Projede benle birlikte çalışmaya gönüllü 2 kişi çıktı şu ana kadar. Onlarla nasıl bir görev paylaşımı yapmalıyım, yazılan kodlar nasıl test edilmeli, genel sistem nasıl dizayn edilmeli gibi gibi pek çok kararsızlıkla karşı karşıyayım. Hata yapacağım muhtemel değil, kesin. Sabırsızlıkla da bekliyorum bu süreçte neler yapacağımı, büyük ihtimalle vakit kazanmak yerine üstüne vakit kaybedeceğim bunu yapayım derken, ama öğrenmek için kesinlikle değeceğini düşünüyorum.

5- İlk aşamada daha basit bir sistemle küçük bir prototip çıkarmayı umuyorum. Sonrasında geri bildirim ala ala büyür, ilerleriz gibi geliyor. Bu süreçleri de mümkün olduğunca sık ve şeffaf bir şekilde bu günlüklerde paylaşıyor olacağım.

Benim için de yeni bir konsept olduğundan her türlü yoruma minnettar olurum açıkçası. Eleştiridir, ‘bak böyle yapmışsın ama çok da olmamış gibi’ dir, her türlü yoruma açığım. Şimdiden çok teşekkür ederim, sağlıcakla!

--

--

Alperen Keleş

PhD Student at University of Maryland College Park working on Programming Languages. Chess player, coder and your friendly neighborhood writer!