Bu yazının amacı çeşitli programlama tekniklerini anlatmak değil, genelde başlangıçta göz ardı edilip daha sonra hayal kırıklıklarına ve hatta projenin başarısızlığına yol açan çeşitli faktörleri sıralamaktır.
Açık Kaynak Kod Yazılımcısı Olmak İçin Ne Gerekli?
Aslında öğrenme yeteneği, merak ve sabırdan başka hiç bir şey gerekli değil. Bir bilgisayar, üzerinde açık kaynak kod geliştirmeniz için gerekli araçlar minimum gereksinimler. Internet’e erişim bunlardan sonra gelen ikinci en önemli gereksinim. Geriye kalan teknik bilgileri (çeşitli programlama dilleri, teknikleri, işletim sistemleri vb) bilmeniz elbette faydalı olur, fakat bunları öğrenebilme imkanı da açık kaynak kodlu sistemlerin iyi taraflarından birisi.
Nereden Başlanır?
En iyi başlama yöntemi, ihtiyaç duyduğunuz bir şey olmasıdır. Bu, ne kadar ufak olursa, o kadar iyi. Çok büyük projelere başlamak, bunları tasarlamak elbette güzel, fakat özellikle başlarda yapılabilir minimumlarda gezinmek en doğrusu. Öbür türlü işin yükünü kaldıramayabilir, yarı yolda bıkıp bırakabilirsiniz. Eğer iş ve özel hayatınızda açık kaynak kodlu sistemleri (örneğin Linux) kullanıyorsanız, "şu da olsaydı" dediğiniz noktalar olmuştur. Buralardan başlamak en doğrusudur. Gerçek bir ihtiyacınıza cevap veren bir yazılım, hem sizin ilginizi uzun müddet çeker, hem de sistem analizini doğru yapma fırsatınız olur.
Kendi İhtiyacınıza Cevap Veren Bir Konu Seçin
Bir kaç sebepten dolayı açık kaynak kodlu yazılım geliştirebilirsiniz: Bir şeye ihtiyacınız vardır ve bulamazsınız, çözüm yoktur. Veya bir hobi olarak bu işle uğraşmak istersiniz. Burada zor olan şey aslında hobi olarak uğraşmak. Çünkü yazılımı geliştirmek ve daha sonra ayakta tutarak devam ettirmek uzun soluklu bir iş. Dolayısıyla gerçekten kullanacağınız, ihtiyaç duyduğunuz bir şey bulmaya gayret edin. Sizin yazıcınız Linux üzerinde desteklenmiyor olabilir. Kurban ve Ramazan Bayram’larının tarihlerini şaşırıyor ve "iki hafta önce haberim olsa da kart atma imkanım olsa" diyor olabilirsiniz. İlk Internet üzerinde kamera yayını (webcam), yazılımcıların laboratuarın öbür tarafında duran kahve makinasına kadar gidip boş bulduklarından dolayı yazılmıştı ve kahve makinasını Internet’te gösteren bir kamera düzeneği idi. Sizin ihtiyacınıza cevap verdikten sonra gerisinin önemi yok.
Eğer bankacı değil iseniz, banka sistemleri ile uğraşmıyorsanız, ilk açık kaynak kodlu projeniz için Linux üzerinde bir banka sistemi yazmayı tercih etmek, %99 başarısızlıkla sonuçlanacak bir projeye başlamak demektir. Hem proje fazla büyük (bankacılık sistemleri milyonlarca satır kod içerir), hem de sizin bu projenin sistem analizini yapacak bilginiz ek******.
Ama Benim Hiç Bir İhtiyacım Yok?
Emin misiniz? Muhakkak vardır, biraz düşünün. Yok sahiden aklınıza hiç bir şey gelmiyor ise, en sık kullandığınız yazılımın geliştirildiği web sitesine gidin ve yapılacak işler listesine (TODO List) bakın. Oradaki işlerden birini yapmayı deneyin. Mevcut bir yazılım üzerinde değişiklikler yapmak tecrübe kazanmak için iyi bir yoldur.
Konumu Buldum
Tebrikler. Şimdi lütfen Google, SourceForge ve Freshmeat’e gidin ve bu konudaki yazılımları arayın. Yazmak istediğiniz yazılım birileri tarafından zaten yazılmış ve yaygın kullanımda olabilir. Veya doğru başlamış ve doğru yolda (sizin gitmek istediğiniz yolda) giden bir çalışma grubu olabilir. Konunuzla ilgili bulduğunuz yazılımları gözden geçirin. İsteklerinize az değişiklik ile cevap verebiliyorsa, o projeye katılın ve yazılıma o değişiklikleri katın. Türkçe olması, ufak tefek görüntü değişiklikleri, hatta ciddi değişiklikler katkı olarak verilebilir. Bu şekilde katkılarda bulunmak sizi küçültmez. Aksine, mevcut bir yapı içerisinde ciddi katkılarda bulunmak, sıfırdan bir proje geliştirmekten çok daha kolaydır ve ilerideki projeleriniz için ciddi tecrübe edinirsiniz.
Mevcut Projelerin Hiç Biri Benim İstediğimi Yapmıyor
O zaman siz bir proje başlatacaksınız. Uzun, bir hayli yalnız ve sıkıntılı bir yoldur, ama yapılamaz bir şey değildir.
Hemen Bir Proje Kurup Gönüllü Arayayım
Bulamazsınız. Daha önce ciddi başarılara imza atmış (C dilini geliştiren yazar vb) kişiler bile sıfırdan ve planlama aşamasında ciddi bir gönüllü grubu toplayamazlar. Gönüllüler ne yapacak? Hiç beyni olmayıp çok sayıda midesi olan tek canlı komitelerdir. 🙂 Komite ile dizayn yapılmaz. Protokol oluşturan konsorsiyumlar bile bireysel olarak protokol örneklerini hazırlar, bu örneklerin üzerinde çalışıp hepsinin iyi taraflarını toplayarak protokolü oluştururlar.
İlk başta kendiniz oturup yazılımınızı iyi kötü yazacaksınız. Herşeyi hemen yapması gerekmez, fakat en azından yapmak istediği şeylerin bir kısmını yapar hale getirin. Yapmak istediğiniz diğer şeylerin mümkün olduğuna emin olun – bazen yazılımın yapısı bazı şeyleri imkansız kılabilir. Yazılımınız en azından bir "beta" kalitesine gelsin.
Yazdım, Şimdi Ne?
Kullanıyor musunuz? Bir ihtiyacınıza cevap vermek üzere yola çıkmıştınız. İyi kötü kullanmaya başladıysanız, artık bunu bir proje haline getirmeyi düşünmeniz gerekebilir.
Proje Oluşturmak
Neden Internet’e Koyayım?
Bunun çok açık seçik nedenleri yok. Eğer sizin işinize yarayan bir şey ise, başkalarının da işine yarayabilir. Bir kullanıcı kitlesi oluşturmak hem proje gelişiminde size yardımcı olacak gönüllü grubunu bulmak için, hem de yazılımınız hakkında hata raporları gibi sizin tek başınıza kullanışınızda bulmanız zor olan şeyleri bulmakta işinize yarayabilir. Daha önce faydalandığınız açık kaynak kodlu yazılımlara bir karşılık olarak bunu kullanıcılara sunmak isteyebilirsiniz. Belli bir miktar "şan şöhret" kazanabilirsiniz.
Bir Lisans Seçtiniz Mi?
Yazılımınızı dış dünyaya sunduğunuz zaman hangi lisans altında sunacağınıza karar vermeniz gerekli. Benim tavsiyem GPL. Bir yazılımı GPL altında nasıl yayınlayacağınız hakkında İngilizce bilgi burada mevcut. Kısaca, yazılımın her dosyasına bir telif hakkı ibaresi, ve bu yazılımın GPL altında yayınlandığına dair bir iki paragraf koymanız ve GPL’i paketinizin içerisine ayrı bir dosya halinde koymanız gerekli. Bunlar İngilizce olmak zorunda.
Yani her dosyanıza:
/* Copyright 2002 Adım Soyadım
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
şeklinde bir telif hakkı ve lisans bildirim ibaresi eklemeniz gerekli. Ayrıca, GPL’in orjinal metnini yazılımınızın içerisine ayrı bir dosya olarak koymanız gerekli. GPL’in Türkçe çevirisini okumak isteyebilirsiniz, fakat bağlayıcı olan İngilizce metindir, yazılımlarınız içerisine İngilizce metni koymanız gereklidir.
Bu işlemleri yaptığınız zaman yazılımınız için telif hakkı almış ve yazılımınızın dağıtımını GPL’in koruması altına sokmuş olursunuz.
Yazılımınız Derlenebilir mi?
Yazılımınızı rahatça derlenip kurulabilecek hale getirin. Kimse sizin yazılımınızı derlemek için gereken seksen adımı yapmaz. ./configure ; make ; make install en fazla bekleyebileceğiniz işlemdir. Bunları nasıl yapacağınızı bilmiyorsanız, autoconf ve make paketleri hakkında bir şeyler öğrenin. Eğer yazılımınızı yaygın dağıtımlardan birinin paket sistemi (RPM, apt vb) şeklinde dağıtabiliyorsanız, bunu tercih edin.
Eğer yazılımınız derlenmeyen bir dilde yazılmış ise – perl, PHP vb, yine de uygun ve anlaşılır bir kurma yöntemi olmalıdır. Genelde paketlerin içinden README (benioku) ve INSTALL (kurma) dosyaları çıkar, bu dosyalarda paketin ne olduğu, ne iş yaptığı, nasıl kurulacağı hakkında bilgiler bulunur.
Yazılımınıza Sürüm Numarası Verin
Bunu ilk başta yapın ki, daha sonra sorun olmasın. Yazılımınıza ilk başta 0.1 veya 0.9 (ne kadar kullanılabilir vaziyette Internet’e çıkarıyorsanız) vermek faydalıdır. Oturmuş olan ilk sürüm 1.0 olur, ufak tefek değişiklikler noktadan sonra olur. Yani 1.2, 1. sürümden yapı olarak çok farklı değil, ufak tefek değişiklikler içeriyor manasına gelir. 10 yıllık Linux çekirdeğinin 2. sürümde olduğunu düşünerek sürüm numaralarınızda fazla bol keseden davranmayın..
Web Siteniz var mı?
Yazılımınızı başkalarının kullanmasını istiyorsunuz. Bunu sağlamanın ilk adımı yazılımınızın Internet’te bir sayfası olmasını sağlamak. Yazılımınızın Internet’te kendine ait bir sayfası olmaması için hiç bir neden yok. Sourceforge veya Savannah’ta bir proje açmak size bir web sitesi de sağlar ve maliyeti sıfırdır. Üstelik, ihtiyaç duyacağınız e-posta listesi, CVS sunucusu, FTP sunucusu gibi hizmetleri de veriyorlar. Veya Türk kaynaklı gruplardan yardım alabilirsiniz: Linux Kullanıcıları Derneği, AçıkKod Org gibi gruplar Türk açık kaynak kod projelerine yardım ediyorlar. Size de bir web sitesi ve ihtiyaç duyduğunuz diğer imkanları sağlayabilirler. Temasa geçin. Eğer tamamen kendinize ait olmasını istiyorsanız, Internet’te bir alan adını kaydettirmenin maliyeti yaklaşık 35 USD, web hizmetlerini bir yıllık kiralamanın bedeli ucuzunda yıllık 36 USD’dir. Geocities vb gibi bol miktarda reklam barındıran ve esas olarak kişisel web siteleri için hazırlanan bedava hizmetleri kullanmayın. Proje bağlamında olacak olan indirme (download) trafiği bu siteler tarafından hoş karşılanan bir şey değil. Size web hizmeti ve hatta daha fazlasını bedava verecek olan bir sürü grup var Internet’te, onlarla temasa geçin.
Web sitenizin süslü püslü olması, arka planında kullanıcı girişleri, chat sunucusu vb olması gerekmiyor. Kolay okunabilir, sade, amaca yönelik bir web sitesine ihtiyacınız var. Amacınız ise, bir şekilde buraya ulaşan bir potansiyel kullanıcıya sizin yazılımınızın onun derdine nasıl deva olacağını anlatmak.
Bu amaca yönelik olarak web sitenizde yazılımınızın ne iş yaptığını, eğer başka paket/yazılımlara gereksinim duyuyorsa bunların ne olduğunu anlatmalısınız. Eğer çeşitli standartlar, protokoller ile uyumlu iseniz bunlardan bahsetmelisiniz. Çoğu yazılım web sitesi, kendi konusundaki diğer alternatif yazılımlar hakkında da bilgi ve link verir.
Yazılımınızı indirmeleri için kolayca anlaşılır bir link vermelisiniz.
Bir Posta Listeniz Var Mı?
Yazılımınızı kullananlar için ilk başta bir tek e-posta listesi açın. Buranın fazla suskun/sessiz olmasına aldırış etmeyin. İkide birde "madem kullanıyorsunuz, insan bir haber verir yahu" tarzında e-posta atmayın. Yazılımınızın yeni bir sürümü çıktığı zaman web sitenize yerleştirdikten sonra buraya bir duyuru geçin. Kullanıcılardan gelen soruları cevaplayın. Yazılımda değişiklik taleplerini en azından okuyun. Bu değişiklik taleplerinin hepsini hemen yapmak zorunda değilsiniz, fakat kullanıcılarınızın ne istediğini bilmek, yazılımın nasıl şekilleneceğine karar vermek için faydalıdır.
İleride posta listelerinizi çoğaltabilir ve anonslar (yeni sürüm vb anonslar), kullanıcı listesi (yeteri kadar popüler bir yazılım olursa, kullanıcılar birbirlerine yardım ederler, bırakın etsinler), ve geliştirme listesi (gönüllüleriniz) olarak ayrı listelere bölünebilirsiniz. Baştan bunları uygulamak listelerin hiç birisinin hayata geçmemesine sebep olabilir. Trafik çok artıp insanlar farklı listeler talep edene kadar tek listede kalın.
Yazılımınızı ve Web Sitenizi Çok Dilli Hazırlayın
Açık kaynak kod felsefesinin bir uzantısı da yerelleşmedir. Yazılımınızı İngilizce hazırlayıp en fazla kullanıcı kitlesi olan gruba hitap etmek isteyebilirsiniz. Ama bir yazılımı çok dilli hazırlamak bundan daha zor değildir. Kullanacağınız araç seti gettext. Gettext’i kullanırken yazılımınızın içerisine serpiştirdiğiniz dizgeleri normal C dilinin dışında, biraz farklı bir yöntemle yazıyorsunuz. Ondan sonra yazılımınızı gettext araçlarından geçirip POT dosyasını elde ediyorsunuz. POT dosyası yazılımın çevrilecek dizgelerini içerir. Yazılımınızı gettext kitaplığı ile bağladığınız zaman, gettext, sistemde kurulu olan öntanımlı dil hangisi ise, onun çeviri dosyasını bulup kullanmaya gayret eder. Eğer yok ise, İngilizce’sini kullanır. POT dosyası elde ettikten sonra, bunun 36 dile çevrilmesi için GNU Çeviri Projesi ile temasa geçebilirsiniz. Açık kaynak kodlu tüm yazılımlar kabul ediliyor ve çeşitli dillere (Türkçe dahil) gönüllüler tarafından çevriliyor.
Web sitenizin çevrilmesi için benzer bir çeviri projesi yok. Fakat kullanıcılarınız içerisinden bunu yapmak isteyecek olan gönüllüler çıkabilir. Bu tarz gönüllülere teşvik edici olun (bol teşekkür edin, adlarından web sitenizde emeği geçenler olarak bahsedin).
Yazılımınızı salt İngilizce olarak hazırlamanızın size hiç bir faydası yoktur. En azından yerelleşebilecek (gettext kullanır) vaziyette hazırlayın ve çevrilmesi için gerekli temasları yapın. Gönül elbette hem İngilizce, hem de Türkçe hazırlamanızı arzu eder. Bu ülkede İngilizce bilmeyen binlerce bilgisayar kullanıcısı var.
Ben İngilizce Bilmiyorum, Yazılımımı da Salt Türkler Kullansın İstiyorum
İngilizce bilmeme tarafına GNU-TR Türkçe Çeviri Grubu yardım edebilir. Yani sizin Türkçe yazılımınızı ve web sitenizi İngilizce’ye çevirecek gönüllüler çıkabilir. Temasa geçin.
Yazılımınızı salt Türklerin kullanmasına gelince.. Maalesef ülkemizde açık kaynak kodlu yazılım mantığı bir hayli yeni. Yazılımınıza yeterli bir kullanıcı kitlesi ve bunlardan çıkacak gönüllü grubu bulamayabilirsiniz. Başka, biraz da pragmatik bir problem de, marjinalize olmak. Çok kullanıcıya sahip yazılımlar yaygınlaşıyor, gönüllüler tarafından düzeltilip geliştiriliyor ve yeteri kadar yaygınlaşırsa dağıtımların içerisinde yer alıyor. Günün sonunda standart bu şekilde oluşuyor. Türkiye’deki kullanıcı kitlesi yeterli kadar büyük olmadığı için burada 100 kişi tarafından kullanılan bir yazılım, kendinden iki-üç yıl sonra başlayan bir enternasyonal efor tarafından zaman içerisinde geçilir ve o 100 kişilik kullanıcı kitlesini de kaybeder. En iyisi yazılımınızı çok dilli olabilecek şekilde hazırlamak.
İngilizcem Kullanıcılarla Yazışmak vb İçin Yeterli Değil
Bu konuda rahat olun. İngilizce’yi iyi kullanmaya ülkece gereğinden fazla önem veriyoruz. Bir şekilde meramınızı anlatabiliyorsanız, grameri falan önemsemeyin. Sonuçta kullanıcılar sizinle anlaşabilmek için uğraşacaklar. Siz değil. Çok bunalırsanız İngilizce bilen bir Türk kullanıcınızdan yardım istersiniz.
Yazılımınızı Duyurun
Bir web sitesi hazırladınız, bir posta listesi açtınız. Şimdi yazılımınızı duyurmalısınız. Eğer konu ile ilgili bir newsgroup var ise oraya bir duyuru yapın. Freshmeat’e duyurun. Linux Kullanıcılar Derneği’nin web sitesine bir haber yollayın. Türk Linux Listesi’ne yazın. Eğer benzer yazılımlar için Google’da bir kategori var ise, o kategoriye DMOZ’dan ekleme yapın.
Eğer yazılımınız KDE veya GNOME kullanan bir grafik yazılımı ise, onlara duyurun. Yeteri kadar yaygınlaşırsa, KDE veya GNOME’un "desteklenen" yazılımlarından biri haline gelebilirsiniz.
Yazılımınız her derde deva bile olsa, kullanıcılar varlığını bilmez ise kullanamazlar.
Bunların Hepsini Yaptım ve Bir Şey Olmuyor
Bu işler zaman alır. Genelde bir yazılımın kullanıcı kitlesine yayılmaya başlaması neredeyse bir yıl sürüyor. Yani siz yukarıdaki adımları yapıp duyurduktan bir yıl kadar sonra geniş kitle tarafından "bu işi yapan bir yazılım vardı" diye bilinmeye başlar.
Yazılımınız yaklaşık 2-3 bin defa indirildikten sonra bir iki tane gönüllü yardımsever çıkar ve "şurasına şunu ekledim, kabul eder misiniz" diye sorar. Hemen gönüllülerin oluşup heykelinizin bir meydana dikilmesini beklemeyin. Siz bu güne kadar kullandığınız yazılımların kaçına gönüllü olarak bir katkıda bulundunuz?
Bir veya iki yıl kadar bir süre yazılımınızın bütün geliştirmesini yalnız başınıza siz yapacaksınız. Bu zaman zarfında yavaş yavaş bir iki kişi ortaya çıkar. Bunlar genelde projenize destek olayım diye ortaya çıkmaz, hata bildirir. Siz bu hatayı çözersiniz. Daha sonra bir hata daha bildirir, çözümünü beraberinde yollar. Siz bunu eklersiniz. Yavaş yavaş aranızda bir ilişki oluşur. Bu ilişki zaman içerisinde "gel beraber geliştirelim"e gidebilir. Sabırlı olun.
Gönüllülerim Oluştu
Tebrikler. Çok az sayıda projenin başarabildiği bir noktaya geldiniz. Bu noktada CVS kullanmak (aynı kaynak kodunu birden fazla kişinin yarı bağımsız değiştirebilmesi için), sürüm tarihleri belirlemek gibi yöntemleri kullanmaya başlayacaksınız. Birden fazla kişi ile çalışmak için bunlar gerekli teknik yöntemler. Geri kalanı ise insan ilişkileri tarafı, ve çok önemli.
Karşınızdaki kişilerin GÖNÜLLÜ olduğunu unutmayın. İnsanlardan bir şey talep ederken hep nazik olun. Bir görev dağıtımı yaptığınız ve bu dağıtıma uyulmadığı zaman sinirlenmeyin. İnsanların yapmak istedikleri şeyleri yapmalarına izin verin. Bol miktarda teşekkür ve gönüllülerden bahsetmek sizi küçültmez, yüceltir. İnsanların size katkıda bulunmalarına karşılık verebileceğiniz tek şey kredi. Katkıda bulunanların isimlerinden bahsedin. README dosyanıza katkılarını listeleyin. Web sitenize isimlerini koyun. Gönüllülerinizin yazılımınız konusunda sizin kadar becerikli olabilmelerini sağlamak için gereken bütün bilgiyi verin. Paylaşımcı olun. İlk başlarda gönüllülerle bir işi yapmak, kendi başınıza yapmaktan daha uzun sürer ve daha zordur. Fakat sabrederseniz, ileride kendi başınıza yapamayacağınız kadar çok şeyi yapma imkanını elde edersiniz.
Sıkıldığınız Zaman Devredin
Yazılımınız sizin bir ihtiyacınıza cevap vermek için hayata başlamış idi. Bir gün bu ihtiyacınızın üzerinde yeteri kadar uğraştığınızı düşünebilirsiniz. O ihtiyacınız kalmamış olabilir. Eğer yeteri kadar paylaşımcı davranmış iseniz, gönüllüleriniz arasında yazılımı sizin kadar bilen, sizin güvendiğiniz birileri olacaktır. Kendisi ile temasa geçin ve yazılımınızın proje liderliğini devredin. İlginizi kaybettiğinizden dolayı ölmesine müsaade etmeyin. Bugüne kadarki çabalarınız, sizin bireysel emeğinizden doğan bir şeyin yaygınlaşması ve kendi başına bir hayat kazanmasını sağlamak için idi. Bu hayatın devam etmesini sağlayın. Bırakın, sizden daha iyi yapan birisi çıkarsa, o devam ettirsin.
Projenin Hayat Çizgisi:
– Doğuş: İhtiyaç. İhtiyaca cevap verecek bir alternatifin olmaması
– Başlangıç: Kendi başınıza, ihtiyacınızı karşılayacak bir yazılım geliştirmek.
– Kamusal Ortama Geçiş Hazırlığı:
Yazılımınızı temizlemek. Kaynak kodunuza açıklamalar koymak. Dizin yapınızı elden geçirmek.
Bir lisans seçmek, yazılımınızı o lisansa uygun hale getirmek.
Yazılımınızı başkaları tarafından, başka sistemlerde kolay derlenir, kurulur hale getirmek. autoconf, make gibi yazılımları bilmek. tar.gz halinde, kolay derlenir şekle sokmak.
Paketlemek. Eğer uygun ise, çeşitli dağıtımların paket biçemi haline getirmek. (RPM, apt vb)
Çok dil destekleyebilir hale gelmek. Gettext’i kullanmak.
– Kamusal Ortama Geçiş:
Bir web sitesi edinmek. Yazılımınızı anlatan, kullanıcıya yönelik, bilgi veren bir web sitesi hazırlamak.
Bir posta listesi açmak.
Yazılımınızı ilgili bütün yerlere duyurmak.
– Kamusal Ortamda Büyümek:
Sabır
Kullanıcılara yardımcı olmak
Bol bol teşekkür
Gelen hata bildirimlerini ve değişiklik taleplerini dikkate almak.
– Kamusal Ortamda Kod Geliştirmek:
Gönüllü kitlesi oluşturmak ve tutmak.
Gönüllüleri yetiştirmek, yardımcı olmak.
CVS kullanmak. Yetkilendirme, görev paylaşımı, test süreci, sürüm tarihleri vb gibi kavram ve yöntemleri kullanır hale gelmek.
– Kamusal Ortama Devir: Zamanı geldiği zaman devretmesini bilmek.
belgesi-1123
There are two kinds of questions: yes or no questions and wh- questions. You ask…
A positive sentence tells you that something is so. A sentence that tells you something…
Use the base form of a verb to give commands or make direct requests. This…
A sentence is a group of words that expresses a complete thought. A sentence must…
An interjection is a word that expresses a sudden, strong feeling such as surprise, pain,…
A conjunction is a linking word such as and, or, but. Conjunctions are used to…