Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Task #488

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open

Task #488

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added odev/gorseller/gif.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added odev/gorseller/görsel6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
112 changes: 112 additions & 0 deletions odev/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Programlamayı Yeni Öğrenenlerin Öğrenmesi Gereken İlk 8 Terim
![](gorseller/görsel1.png)

Bilgisayar bilimiyle ilgisi olmayan birçok tanıdığım ve aile üyelerinden farklı farklı konseptler ve terminolojiyle ilgili sorular aldığım için, bu yazıda bazı bilgisayar bilimi konseptlerini olabilecek en basit şekilde açıklamaya çalıştım.

Bu kısa giriş yazısının sonunda, aşağıdaki terimler/konseptler ne anlama geliyor ve neden önemliler, hepsini öğrenmiş olacaksınız.

- Backend Development
- Frontend Development
- Programlama dilleri
- Algoritmalar
- API
- Bug
- Open Source
- Crowdsource

Yazının sonunda, bilgisini genişletmek isteyenler için bulduğum kaynakları da paylaşacağım.

## Backend Development
Backend Development kavramının her yerde, özellikle LinkedIn gibi platformlarda sıkça kullanıldığını görmüşsünüzdür.
“Backend” yani “arkauç” yazılım iskeletinin bir tabakasına verilen addır. Bu arkauç genelde dataları tutmak için bir veritabanı bulunan herhangi bir web servisini yazmayı veya sürdürmeyi gerektirir.

![](gorseller/görsel2.png)

Backend development sık sık Java, Scala, Python, DynamoDB, MongoDB, nodeJS, MySQL, MapReduce gibi teknolojilerle birlikte anılır.
Frontend development ise tam tersine, kullanıcı arayüzü yani müşterilerin kullandığı yazılım katmanıyla ilişkilidir.
### Neden Önemli
Frontend ve backend development arasındaki farkları anlamak bir uygulama (app) tasarlamadan önce hangi bileşenlerden yararlanacağınızı bilmeniz açısından önemlidir.
## Frontend Development
Frontend development genelde kullanıcıyı ilgilendiren arayüz özelliklerinde çalışmayı gerektirir. İnternet siteleri, iOS veya Android’le uyumlu uygulamalar bunlara örnektir.
Bu kategoride HTML, CSS, JavaScript, jQuery, React, Angular, Swift gibi birbirinden farklı teknolojiler işin içine girer.
Bu teknolojiler uygulamayı programlarken bir temel oluşturmanızı sağlar ve sizi yönlendirirler ancak programlama dilleri değillerdir. Bu yüzden onları teknolojiler olarak adlandırıyorum. React ve Angular bunlara verebileceğimiz örnekler.
Programlama dili basitçe insanların bilgisayarlarla iletişim kurmasında köprü olurlar. Bazıları HTML’i programlama dili sayarken kanımca bu ayrıma girmek için bugün biraz erken.👍
### Neden önemli?
Frontend development öncesinde sadece HTML, CSS ve JavaScript’dan meydana geliyordu. Bugünse kendi yazılım iskeletine ve kurulum araçlarına sahip olan devasa bir yapı. Frontend teknolojisi ışık hızıyla ilerliyor. Bugünkü yazılım dünyasını anlamak için Frontend araçlarını öğrenmenizi şiddetle tavsiye ederim.
## Programlama dilleri
Bilgisayarlar verilen emirleri uygulamada çok yeteneklidir. Biz insanların bir bilgisayarla iletişim kurabilmesi için iki tarafın da anladığı ortak bir dil setine, yani bir yönergeler dizisine, ihtiyaç vardır.
Biz insanlar olarak, iletişim için İngilizce, Mandarin, İspanyolca gibi diller kullanırız. Bilgisayarlarla iletişim kurmamız gerektiğinde ise programlama dili kullanırız. Programlama dili insanlar ve bilgisayarların iletişim kurmasını sağlar. Örnek olarak Java, C++, Python ve daha birçokları gibi programlama dillerini sayabiliriz.
### Neden önemli?
Bir programlama dilini öğrenmek İnternette gördüğünüz bir şeyin arkaplanda nasıl meydana geldiğini görmenizi sağlar. Arabanızın nasıl bir mekanizmayla ve ne amaçla çalıştığını bilmek gibidir. Biraz gayretle Twitter, Candy Crush uygulamaları gibi siz de kendi uygulamanızı programlayabilir hale gelebilirsiniz.

![](gorseller/görsel3.png)
![](gorseller/görsel4.png)
## Algoritmalar

> “Bilgisayarların gerçekleştirdiği hesaplama ve diğer problem çözme operasyonlarında takip edilecek kurallar seti veya süreç.” Google :)

Bilgisayarlar komutları gerçekleştirmede müthişlerdir. Yazılım mühendisleri olarak bizler de zaten bilgisayarların gerçekleştireceği komutları yazarız. Algoritma spesifik bir problemi çözmek için bilgisayar tarafından veya bilgisayarsız takip edilecek komut ve adımların listesidir.
Bilgisayar bilimi öğrencileri olarak öğrendiğimiz ilk problemlerden biri sınıflandırma problemidir. Bu problemin en önemli adımı item koleksiyonu veya setini en verimli şekilde oluşturmaktır.

![](gorseller/gif.gif)

Sınıflandırmanın çok fazla çeşiti vardır. Karşılaştırmalı sınıflandırma olarak da bilinen [Bubble Sort](https://en.wikipedia.org/wiki/Bubble_sort) en ünlülerindendir. İki itemdan büyük olanı seçmeyi, genel bir karşılaştırmayı ve bunu bütün öğeler için yapmayı gerektirir. [Insertion Sort](https://en.wikipedia.org/wiki/Insertion_sort), [Merge Sort](https://en.wikipedia.org/wiki/Merge_sort) ve daha birçok başka çeşit de vardır.

Bunlar hakkında bilgi edinmenizi kesinlikle öneririm. Sınıflandırma algoritmaları algoritmaları öğrenmek için harika bir başlangıçtır. Sınıflandırma algoritmalarını çalışabileceğiniz bir Youtube videosunu aşağı bırakıyorum.

[![](http://img.youtube.com/vi/pkkFqlG0Hds/0.jpg)](http://www.youtube.com/watch?v=pkkFqlG0Hds "")

### Neden önemli?
Algoritmalar Bilgisayar Bilimi’nin özünü oluşturur. Algoritmaların ne olduğunu ve nasıl işlediklerini anlamak sizi daha iyi bir yazılım mühendisi yapar, nokta.

## Uygulama Programlama Arayüzü (UPA / API)
API, veya Türkçesiyle UPA, veya uygulama programlama arayüzü, basit tabirle bir bilgi kaynağı. Daha somut açıklarsak, düşünün ki evde bir limonata kuyunuz var. Komşularınız bundan bir yudum almak istiyor ama siz kuyunun kirlenmesini istemiyorsunuz. Böyle bir durumda ne yapmalısınız?

![](gorseller/görsel5.png)

Evinizin dışındaki küçük bir hortuma bağlanan bir hortum yaptırmaya karar verdiniz. Sizin müthiş limonatanızdan tatmak isteyen bütün komşularınız bu hortum vasıtasıyla, kuyuya dokunmadan limonataya ulaşabilirler. Limonatayı ne zaman pompalayacağınıza veya kuyunun kuruması durumunda limonatayı boşaltmaya da siz karar veriyorsunuz. Dilerseniz çok fazla limonata içenlerden ücret alabilirsiniz.
Günümüzde birçok şirketin çalışma şekli de budur. Bu şirketler değerli bir veri kuyusu inşa ederler ve onu bir UPA vasıtasıyla veri edinmek isteyen kişilere satarlar.
### Bu neden önemli?
Bugünkü internet ağı, farklı web servisleri arasındaki uçsuz bucaksız iletişime dayalıdır. Bu şekilde birbirleriyle etkileşimde olan araç ve websiteleri kurabiliyoruz. UPA bütün bu iletişime imkan tanıyan temel zemindir. Bu yüzden internette iletişimi sağlayan araçları ve onların çalışma koşullarını öğrenmek önemlidir.
## Bug 🐛
Aşağıdaki meme’i sosyal medyada görmüş ve ne anlama geldiğini anlamamış olabilirsiniz.

![](gorseller/görsel6.png)

Bug bir bilgisayar programının alışılmış işleyişi bozan hatanın adıdır. Mesela bulunduğunuz yerin hava sıcaklığını Fahrenheit cinsinden gösteren bir iOS uygulaması indirdiğinizi farzedelim. Uygulamanın hava sıcaklığını, beklendiği gibi Fahrenheit değil Celsius cinsinden gösterdiğini fark ederseniz, bu program beklendiği gibi çalışmıyor demektir ve o zaman programda bir ‘bug’ yani hata var diyebiliriz.

Bu yazılım camiasında çok sık yaşanır, bu yüzden bu konuda yukarıdaki gibi komik meme’ler yapılmıştır. (It’s not a bug, it’s a feature = O bir hata değil, programın kendi özelliği).
### Neden Önemli?
Buglar her zaman oluşabilir. Bu bilgi bir şeyler ters gittiğinde fark etmenizi ve internet’i doğru yönetmenizi sağlar. Bir dahakine bir ‘bug’ gördüğünüzde ‘şuraya tıklayınca çıkmayan şey’ yerine doğru bir biçimde ‘bug’ demeyi öğrenmiş olacaksınız.

## Açık Kaynak Yazılımlar
Açık Kaynak yazılımları kendi bulduğum bir benzetmeyle açıklamaya çalışacağım :)

Bir limonata standınız olduğunu ve şehrin en iyi limonatasını yapmak için elinizde özel bir tarif olduğunu düşünün. Bu tarifi müşterilerinizi kaptıracağınız korkusuyla kimseyle paylaşmıyorsunuz. Bu durumda gizli tarifiniz “Kapalı Kaynak” gibidir. Çünkü bu kaynağa siz dışında kimse erişemiyor.

Veya tam tersi bir şekilde, limonata tarifinizi ücretsiz olarak internet üzerinden herkesle paylaştığınızı ve bu şekilde internetin gücünü kullanarak limonatanızı herkesin beğeneceği bir hale yükseltmeye çalıştığınızı farz edelim. Bu durumda ise limonata tarifiniz “Açık Kaynak”tır çünkü ücretsiz olarak herkes erişebilir, kullanabilir dahası katkıda bulunup, üzerinde değişiklikler de yapabilir.

Bu terim Facebook ve diğer teknoloji şirketlerinin yükselişiyle çok fazla popüler hale gelmiştir. Facebook gibi şirketler yeni ve heyecan verici teknolojilerin geliştirilmesini İnternet kullanıcılarının da katılabileceği bir süreç haline getirdi.
### Neden Önemli?
İnternet son yıllarda bu kadar hızla gelişebilmesini Açık Kaynaklara borçlu. Bu bir devrim ve herkes ücretsiz bir şeyler yaratmanın ve bunu tüm dünyaya açık hale getirmenin neden bu kadar önemli olduğunu kavramalı.
## Crowdsourcing
_Crowdsourcing — Geniş bir topluluğun belli bir proje için aktardıkları bilgilerini veya katkılarını genellikle internet üzerinden bir araya getirmek._

Crowdsource temelde büyük bir grubun ortak bir amaç için katkıda bulunması fikridir.

Yine aynı limonata standından örnek verelim. Farz edelim ki müşterileriniz yeni bir limonata aromasını talep ediyor. Sizin de aklınıza İnternetin gücünden ve bir grup insanın beyin fırtınası yapmasından yararlanarak en mükemmel limonata tarifini elde etmek geliyor.

Bunun için tek yapmanız gereken şey bir Twitter hesabı açıp dünyanın farklı yerlerinden insanları en iyi limonata tariflerini paylaşmaya ikna etmek. Buna Crowdsourcing deniyor ki anlamı ortak bir amaç için insanları katkıda bulunmaya ikna etmek. Örneğimizde bu amaç limonata yapmak.

### Neden Önemli?
İnternet milyonlarca insanı bir araya getirmeyi ve en iyi fikirlerini bazı zorlu projeler için kullanmaya ikna etmeyi başarabildi. Crowdsourcing ise bunu İnternet üzerinden sorunsuz bir biçimde yapabilmemize olanak tanıyor. Bence bu insanlık için büyük bir ilerleme.
## Kaynak Önerileri
- [Stanford’s Online CS 101](https://online.stanford.edu/courses/soe-ycscs101-sp-computer-science-101) — bu online kurs size Bilgisayar Bilimi’nin başlıca kavramlarını tanıtıp internet mekanizmasının nasıl işlediğini gösteriyor. Dijital görüntüler nasıl oluşturulur ve süreç nasıl işler, hepsini bu kursta öğrenebilirsiniz. En güzeli de ücretsiz olması.
- [Python Crash Course](https://www.amazon.com/gp/product/1593276036/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=zrecommended-20&creative=9325&linkCode=as2&creativeASIN=1593276036&linkId=883395cb5bc26ff7275d79ee9779dbbd) — Python programlamasına başlamak için en iyi kaynaklardan biri. Programlama için kollarınızı sıvamayı düşünüyorsanız, Python ve birazdan bahsedeceğim kitapla başlamanızı tavsiye ederim.
- [Python, Practical Guide](https://www.amazon.com/gp/product/1593275994/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=zrecommended-20&creative=9325&linkCode=as2&creativeASIN=1593275994&linkId=2c371452495fb9295a0ffa2e575b236f) — Bu Python Crash Course’u bitirdikten sonra edinebileceğiniz bir kitap. Bahsedilen kurstaki örneklerin birçoğunu bu kitaba başvurmadan da yapabileceğinizi düşünüyorum ancak kitap detaylı bir şekilde adım adım neler yapmanız gerektiğini anlatıyor. Örnek görerek daha iyi öğrenen insanlar için müthiş bir kaynak.
- [Introduction to Algorithms](https://www.amazon.com/gp/product/0262033844/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=zrecommended-20&creative=9325&linkCode=as2&creativeASIN=0262033844&linkId=478b4c605397e2a51dd10a45199c467b) — Bilgisayar biliminin temel prensibi olan algoritmalar hakkında bilgi edinmek isterseniz bu kitabın çok yararını göreceksiniz. Kitap ayrıca farklı farklı bilgisayar bilimi kurslarında ders kitabı olarak kullanılıyor.
- [Acing the Coding Interview](https://docs.google.com/document/d/1ppHix7p9knzaal-Edn3GHQMcx1MM_USY6zPcsbBpR3U/edit) — Bu benim koçluk kursum. Bu kursta iş görüşmeleri için nasıl hazırlandığımı, görüşmelerde karşı tarafı etkilemenin yolları ve daha birçok şeyi bulabileceksiniz.

> Zhia Hwa Chong tarafından [medium.freecodecamp.org](https://www.freecodecamp.org/news/these-are-the-top-computer-science-terms-you-should-know-if-youre-new-to-programming-fc8592242622/)'ta yayınlanan bu yazı Gizem Yılmazer tarafından çevirilmiştir.
>
> Görseller: [medium.freecodecamp.org](https://www.freecodecamp.org/news/these-are-the-top-computer-science-terms-you-should-know-if-youre-new-to-programming-fc8592242622/)