Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Siber ortamda,yazılımda sınır var mıdır ?

Konu, 'Yazılım Geliştirme' kısmında Laemon tarafından paylaşıldı.

  1. Laemon

    Laemon Yeni Üye

    Kayıt:
    11 Mayıs 2014
    Mesajlar:
    23
    Beğenilen Mesajlar:
    0
    Merhaba arkadaşlar,bilgisayar mühendisliği 1. sınıf öğrencisiyim,bölüm derslerimiz tam başlamadı,2. dönem yavaş yavaş başlayacak,ben ise aklıma takılan bazı şeyleri sormak istiyorum.
    Şu anda forum olsun,yazılımlar olsun her şey 0 ve 1 lerden oluşuyor.
    Programlama dilleri,algoritmalar hepsi sonuçta 0 ve 1.
    Aklıma şu takılıyor,evet iyi güzel şu an sanal ortamdayız,ancak bu sanal ortam donanım sayesinde var oluyor.
    Aslında tamamen sanal ve soyut bir ortam da değil,0 dediğimiz şey 0 volt, 1 dediğimiz şey ise 5 volta karşılık geliyor,yani aslında fiziksel sanal değil,evet baya kafa karıştırıcı.
    Sorularımı stackoverflow tarzı sitelerde sormak istedim,ancak ucu çok açık uçlu sorular olduğu için forum ortamında tartışmalı bir şekilde ele alınırsa farklı görüşleri de görmüş oluruz diye düşünüyorum.

    Aklıma şunlar takılıyor benim,bilgisayar ortamında kurulabilecek algoritmayı donanım sınırlar mı ?
    Bilgisayarın donanımını yöneten yine yazılım,yani 0 ve 1.
    Peki bu 0 ve 1 ler ile nasıl ekrana çizgi çizdiriyorlar,grafik motoru yapıyorlar ?
    Programlama dilleri sadece matematiksel algoritmalar için mi varlar ? Örneğin ruby bir programlama dili olmasına karşın,grafik kütüphanesi olmadığı taktirde grafiksel işlemler yapılamıyor,ve sıfırdan grafik kütüphaneside yazılamıyor,bakın bu çok büyük bir sınır
     
    Son düzenleme: 3 Ocak 2017
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    675
    Beğenilen Mesajlar:
    185
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    bravo, sorguluyor olman çok mutlu edici. niye bu kadar sevindim bende bilmiyorum, sorgulayanların sayısı dünyada azalıyor ve yıllar ilerledikçe insanların büyük çoğunluğu sorgulamayı bırakıyor ve sadece anlatılanı ezberliyor ve yapıyor...

    bilgisayar dünyası aynen seninde yazdığın gibi sıfır ve birlerden oluşuyor, 1988de bilgisayar başına geçtiğimde telexler hala kullanılıyordu. Telex dediğimiz şey bir yazıyı bir yerden başka yere postalamanın bir yoluydu ve kağıt üzerindeki deliklerden oluşuyordu. Delik veya delik değil. Aynen 0 ve 1 ler gibi... Şu ana kadar bu aşılamadı.

    Ancak önemli gelişmeler var. Tabi biz ülke olarak gelişmelerden çok kopuğuz... Küçük bir mutlu azınlık gelişmeleri takip edebiliyor.

    Bilgiler insan beynindeki hafıza hücrelerinde bulunan elektrik yükleri içinde tutuluyor. Ancak beynimiz bu elektriği kullanırken 0 ve 1 lerle kullanmıyor. Çok daha farklı kullanıyor. Görüntü olarak saklıyor ve farklı sorguluyor.

    Çok uzun süredir bunun üzerinde çalışıyorlar ve çözümde henüz başlangıçtalar. bazı düşünce gücü makineleri yapıldı ancak onlarda 0 ve 1 temelli. Asıl önemli olan beyindeki görüntüleri alabilmeleri. Bunda epey yol kat ettiler.

    Sanıyorumki bu başarıldığında, 0 ve 1 dünyasından elektriğin gerçek doğasına geçeceğiz ve sınırlar kalkacak... keşke bizim ülkemiz bunu başarabilseydi ancak böyle bir ihtimal artık kalmadı. Bir Türk çocuğu başarsada bunu yurt dışında bir ülkede yaşayan Türk çocuğu başaracak. Tek ihtimal o kaldı.

    Şu an 0 ve 1 lere bağlısın, ancak onlarla yapabileceklerin çok fazla. Büyük ihtimalle hayat boyu yapabileceklerinin ancak %1 ini başarabileceksin. hepimiz öyle... alan çok geniş demek istiyorum.

    sınırları zorlamak istiyorsanda C ve java gibi dillere hakim olmanı tavsiye ederim. Yapamayacağın hiç bir şey yok...

    ruby batıda akademik çevrelerde yeni ortaya çıkmış bir akım.. bir şey moda olunca hemen yayılıyor... ne kadar doğru tartışılmıyor...
    kullandığı dilde hoşuna gitmeyen bir şey gören hemen oturup yeni dil yazmaya başlıyor. Çevresi genişssede o dil yayılıyor.

    Para sıkıntısı çekmek istemiyorsanda yaygın olan dillerden en az 2 tanesini hakim olmasanda rahat kullanabilmen gerekiyor.
     
    yunus bunu beğendi.
  3. Laemon

    Laemon Yeni Üye

    Kayıt:
    11 Mayıs 2014
    Mesajlar:
    23
    Beğenilen Mesajlar:
    0
    Hocam okulumuzda algoritma dersine Java ile başlandı,şu anda Java görüyoruz.
    Bölümüm bilgisayar mühendisliği olduğu için ben de işin temeline inmek istiyorum,sonuçta mühendislik diploması alacağız bunun hakkını vermek lazım,sonuçta programcılardan farklıyız,programcılar kod yazmakla meşgul iken,bilgisayar-yazılım mühendisleri tüm sistemi tasarlıyor bunun için de programlama dilinin dışında geniş kapsamlı teknik bilgi lazım.
    Bu yeni trend olan,Python,Ruby,Go gibi diller bana oyuncak gibi geliyor.
    Neden oyuncak gibi geliyor açayım,birileri bütün kütüphaneleri yazmış,diyor ki lego gibi parçaları birleştir istediğin şekli oluştur.
    Bu dilleri yazanlar da parçaları C dilinde yazdıkları için,sizin yeni parçalar yazmanız için de yine C dilini bilmeniz gerekiyor.
    İşin ucu hep C diline varıyor.
    Örneğin ben Java veya Python dilinde,OpenGL gibi bir grafik kütüphanesi yazamam,bu diller donanıma ulaşmaktan acizler.
    Mesela askeri amaçlı(aselsan gibi kurumlarımız),bir savunma sistemi yaptılar gemiler için.
    Gemiye havadan gelebilecek her türlü tehdidi simule etme kapasitesi olsun diyelim,bunun için de grafik kütüphanesi,grafik motoru yazmak gerekecek,ne kadar yerli olursa o kadar avantajlıyız.
    Bunu kim yapacak,bilgisayar mühendisleri yapacak,e biz bu 0 ve 1 lerin mantığını bilmezsek,nasıl mühendis olabiliriz,yeni teknolojiler yaratabiliriz ?
    Direk Javadan,Pythondan başlarsak,tek yaptığımız legoculuk oynamak olur.
    Birileri bu parçaları üretiyor,üretilen parçaları birleştirerek insanlar nasıl kendi mesleğinden tatmin oluyor bunu anlayamıyorum.
     
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    675
    Beğenilen Mesajlar:
    185
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Kütüphane olayı kötü değil.

    Eğer anne babamız, kendi hayat bilgilerini bize aktarmasa, karnını doyurmak için sokakta fare ve tavşan kovalayan, konuşamayan hayvanlar olurduk. Örnekleri var.

    Anne baba, atalarından öğrendiği kendi hayat bilgisi kütüphanelerini bize aktarırlar. Onlarla aynı seviyeye geldiğimizde kendi kütüphanemizi yazmaya başlarız.

    Kütüphaneler geçmişin birikimidir. Öğrendiğinde kendi kütüphanene başlayacaksın.

    Kütüphaneyi teleferik olarak ele al. Dağın ortasına kadar teleferik seni ulaştırır. Oraya, yürüyerek gelenlerden çok daha çabuk varırsın ve devamına gücün kalır.

    Sonra dağın tepesine giden yolu yürüyerek devam edersin. teleferik yani kütüphane sana zaman kazandırır ve sonraki zorlu yol için gücünü saklamana yardımcı olur. Yola teleferiksiz çıksan, kendi dağının tepesine asla ulaşamayabilirsin.

    Bu yazdıklarım normal biri için geçerli... istisnai biri ne yürür ne başkasının inşa ettiği teleferiği kullanır. beyni ona ip ucunu verir. Eğer o ip ucunu araştıracak vakti ve enerjisi varsa kendi yolunu yaratır ve oradan gider...

    Sen ip ucunu görmüşsün. Bunu anlayacak ve yakalayabilecek aşamaya gelmen için, okulda öğretilenin dışına çıkmanın yolunu bulman gerekir. Ve zaman, artı azda olsa para desteğin olması gerekir...
    para sıkıntısı çeken biri asla sınırlarını aşmayı bırak, sınırlarına yaklaşamaz bile... maddi açıdan gelecek korkun olmamalı... mucize buluşların sahiplerinin hepsi maddi gelecek korkusu olmayan orta sınıf çocuklarıdır... Burada ailenin önemi ortaya çıkıyor..
     
    roser137 ve yunus bunu beğendi.
  5. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    675
    Beğenilen Mesajlar:
    185
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Yukarda epey felsefi takılmışım.

    tabi senin gibi genç bir beyne her şekle sokup kullanabileceği soyut değil ,
    tam istediği şeyi yapacak somut bilgi vermek gerek... bunuda nasıl yaparım bilmiyorum...

    sıfır ve bir ler bir araçtır... o aracın nasıl yapıldığını bilmen gerekmiyor... o araçla neler yapabileceğini bulacak bir hayal gücüne ve isteğe sahip olman gerekiyor..

    gene felsefi oldu...

    kendi işime döneyim.. openCV kütüphanesi kullanarak nesne tanıma konusunda bi fikrimi hayata geçirmeye çalışıyorum...
     
  6. yunus

    yunus Daimi Üye

    Kayıt:
    26 Şubat 2015
    Mesajlar:
    521
    Beğenilen Mesajlar:
    126
    yine @sedirAğacı ndan meyveler... ne güzel anlatmışsınız...

    @Laemon sorduğun onlarca sorunun arasından iki tanesini seçiyorum.
    eğer mesleğin son kullanıcı için yazılım geliştirmekse, yani bu işten para kazanıyorsan, işini hızlı ve sağlam yapman gerekir. bunun için frameworkler hazır kütüphaneler kullanarak hem daha hızlı sonuca ulaşırsın, hemde daha önce defalarca testlerden geçmiş güvenilir ve sağlam parçalardan oluşan bir yapı inşaa edersin.

    Yani her seferinde, doğal kalker taşları ve kil karışımının yüksek sıcaklıkta ısıtıp öğüterek, bunu doğru oranda agrega ve suyla karıştırmaya uğraşmak yerine hazır beton kullanmak gibi.

    Bazı insanlar nasıl bina inşa ederim diye düşünür, bazıları daha nasıl kaliteli beton üretirim diye düşünür. bu yüzden kimi mühendis kimi mimar olur, kimi okuyamaz ama inşaat ustası olur.

    Yaklaşık 20 sene önce siyah ekranda program yazarken ekrana nokta koymak, bir noktadan diğerine çizgi çizmek, merkezi ve çapını verip daire çizmek gibi basit komutlarla grafik işlerini hallediyorduk. bir programcı gözüyle belli bir kordinata bir nokta koyabilmek için gerekli komutun varsa gerisini matematiksel fonksiyonlarla halledebiliyorsun. kendi 3d motorunu yazmak için sadece biraz matematik, geometri ve trigonometri yeterli.

    ama sen daha alt seviyeye inmek istiyorsan assembly dili ve turing makinelerini araştırabilirsin.

    Bilgisayarların oda büyüklüğündeki hesap makinelerinden, avuç içine sığan akıllı makinelere dönüşmeleri birden bire olmadı. düşünsene önceden monitör diye bişey de yokmuş.

    mönitör dediğimiz cihazın eski modellerinde vga standardı kullanılıyordu. 15 pinden oluşan bir soket. her pin üzerinden geçen elektrik sinyallerinin belli anlamları var ve ekran kartı ile bu analog sinyaller dijital veriye dönüştürülüyor. ekran kartının yapısı işlemciler entegreler ve elektronik elemanlardan ibaret. Mönitörde birşeyler göstermek için ekran kartına bazı komutlar gönderirlir. grafik kütüphaneleriyle komutlar standartlaştırılmıştır.

    işin içinde ne kadar çok teknoloji var değil mi. hepsine hakim olmak oldukça zor. bazılarını olduğu gibi kabullenip kullanmak lazım.
     
    Son düzenleme: 5 Ocak 2017
    sedirAğacı bunu beğendi.
  7. roser137

    roser137 Daimi Üye

    Kayıt:
    27 Aralık 2008
    Mesajlar:
    697
    Beğenilen Mesajlar:
    3
    Sorular gerçekten çok güzel. Aynı zamanda çok genel ve öznel yoruma da açık. Öznel olacak ama ben de fikirlerimi söyleyeyim.

    Bence bilgisayar mühendisliğini bir kenara koyup yazılım açısından bakarsak 0 ve 1 den değil, işlemci seviyesi dillerden yani assembly'den başlayabiliriz. asm bize tek bir işlemci mimarisine yönelik çok basit komutlar veriyor. Mesela ram'in şurasına şu veriyi al, ordan getir. şunla çarp ekle şuraya yaz gibi. İşletim sistemleri bu seviyede çalışıyor ve bilgisayar üzerindeki her şeye erişebiliyor. C de asm seviyesine çok yakın bir dil. İyi bir işletim sistemi programcısı c koduna bakıp asm çıktısını görebilir, tahmin edebilir deniyor. Bu nedenle donanım açısından bakarsak, dediğin gibi python, ruby gibi diller C'nin yanında oyuncak gibi kalabilir. Çünkü bu dillerin bir çoğu bırak donanıma müdahale etmeyi, işletim sistemi üzerinde bile kendi kendilerine çalışamıyorlar. Bu dillerin sanal makineleri üzerinde çalışıyorlar. Yani araya epey bir katman giriyor ve bu da sınırlandırıcı görülebilir.

    Burada atlanmaması gereken konu şu, bu avantajlar C iyi her iş için ideal dil yapmıyor. Farklı işler için farklı diller, araçlar var. Teknik olarak C ile her şeyi yapman mümkün fakat işin ucu bu işler için tasarlanmış araçları kendin yazmaya kadar gider.

    Grafik motoru konusu da şöyle. Eğer sistem seviyesinde grafik çizdirmiyorsan yani ortada bir işletim sistemi varsa bu işletim sistemlerinin kendi grafik arayüzleri oluyor. Diyelim ki windows ortamında ekrana çizgi çizdirmek istiyorsun. Bu iş için Windows API'leri var. Daha gelişmiş bir şey istersen openGL, directX apileri var. Yani senin programcı olarak kullanman için yazılmış hazır fonksiyonlar ve yapılar. Bunları C ile kullanabileceğin gibi python, ruby vs. ile de kullanabilirsin. Ama ben kendi OpenGL imi, DirectX'imi yazacağım dersen dediğin gibi C seviyesinde hatta asm seviyesinde kod yazman gerekiyor. Bence bugün gelinen noktada bunu bilgisayar için yapmanın bir mantığı yok. Ama özel entegre devreler, sistemler için olabilir. Bunlarda da bildiğim kadarıyla donanıma özel kod yazıyorsun.

    Programlama dilleri yalnızca algoritma üretmek için yoklar ama işin çekirdeği aslında o. Geri kalan hazır kütüphaneler vs. sadece kolaylık için diyebiliriz. C ile beraber bile hazır bi kütüphane geliyor. Mesela C ile ekrana çıktı veren printf fonksiyonu kodu derlediğin işletim sistemine göre windows apisi ya da linux apisini çağrıyor. Ya da mesela bilgisayarda bir hesaplama yapmak için RAM'den alan istersen malloc fonksiyonunu kullanıyorsun bu da derlenen işletim sistemine göre farklı kod üretiyor. Yani C ile kod yazarken bile bunlara müdahale edemiyorsun, işletim sistemine ekrana yazdır diyorsun yazdırıyor, ram'den yer ver diyorsun veriyor. Bunları da kendin yapmak istersen her işlemci her bilgisayar sistemine göre değişen assembly'ye girmen lazım. İşte programlama dilleri en temel anlamda bizi bu külfetten kurtarıyor. Sistemden bağımsız kod yazmamızı sağlıyor. C'yi mesela her işletim sistemi her işlemciye göre derleyebilirsin. Benzer şekilde sanal makine üzerinde çalışan oyuncak dediğimiz diller de bunun üzerine bir tuğla daha koyuyor ve işleri daha da kolaylaştırıyor.

    İşin aslı şu, her dilden üstün genel geçer bir dil yok. Python, Ruby, Go yu mesela genelleyip oyuncak deyip geçmemelisin. Bunlar kendi alanlarda oldukça başarılı diller. Bence şu mantığa girme, bunlarda yapabileceğimiz her şeyi C ile de yapabiliyoruz, öyleyse bunlar basit C ile uğraşmak istemeyen kullanıcı seviyesi herkes tarafından kolayca kod yazılmasını sağlayan oyuncak dillerdir. Böyle bir şey söz konusu değil. Bence bilgisayar mühendisliğinin hakkını vermek istiyorsan bunlar başta olmak üzere popüler olmaya başlamış her dili inceleyip neden böyle bir şeye ihtiyaç duyulmuş, nerelerde kullanabilir bunların da üzerine düşünmelisin. Hatta burada da bitmiyor, yine son zamanlar trend olmaya başlayan NoSQL akımı var. Her yer farklı farklı veritabanı oldu. Üstelik veri tabanları 80 lerden beri standartlaştı diyorduk, SQL dili bile böyle doğdu. Birden her şey alt üst oldu. Bugün bildiğimiz son kullanıcıya yönelik tüm popüler sistemler google, facebook, twitter, netflix NoSQL bazlı sistemler üzerinde çalışıyor. Benzer şekilde bu büyük sistemlerin üzerinde çalıştıkları bilgisayara olan yaklaşım da değişti. Eskiden veritabanı sunucusu, web sunucusu, yük dengeleyici vs. gibi ayrı ayrı bilgisayarlar vardı. Ardından sanallaştırma çıktı. Bu fiziksel bilgisayarlar yerine vmware, kvm, openvz gibi araçlarla sanallaştırılan sanal makineler, sanal ağlar çıktı. Şimdi bu da yetersiz görülüyor, işletim sistemi üzerinde, işletim sisteminden tamamen izole çalışan daha hafif sanallaştırmaya izin veren Docker, rkt gibi sanallaştırma araçları var. Bu araçların kullanımını kolaylaştıran CoreOS gibi işletim sistemleri apache mesos gibi araçlar var. Bence Bilgisayar mühendisleri 0 ve 1 lerin mantığı bildikleri kadar bu alanlara bu araçlara da hakim olmalılar. Bugünün bilişim dünyasında tek makineye hükmetmekten ziyade binlerce makineyi etkili şekilde yönetebilmek daha büyük bir problem. Bu işleri daha kolay yapmamızı sağlayacak araçları, dilleri de takip edip hepsinde uzmanlaşamasak bile genel bilgi sahibi olmamız gerekiyor. Bir kaç dil, araç öğrenip köşemize çekilemeyiz.

    Çok teorik oldu, bir de kısa kısa dillere bakalım. Mesela python veri analizi konusunda çok önde. numpy, scipy, pandas gibi çok kuvvetli analiz kütüphaneleri var. Jupyter notebook diye bir araç var mesela, tüm bu karmaşık hesaplamaları yapıp çok güzel bir arayüzde browser görmemize olanak sağlıyor. Bunun dışında satır satır kod çalıştırıp sonucu görebileceğimiz IDLE aracı var, bunlar büyük kolaylıklar ve yapılan işte verimliliğin artmasını sağlıyor. Yapay zeka ve makine öğrenmesi alanında da python çok önde. Google destekli tensorflow diye bir sistem var, python ile entegre çalışıyor farklı makine öğrenmesi, yapay zeka gibi alanlarda geliştirme yapmayı oldukça kolaylaştırıyor. Kısacası python veri analizi ve yapay zeka gibi alanlarda çok ciddi bir birikime sahip. Bu alanlara yönelmek isteyenler sıfırdan başlamaktansa python'a göz atabilir.
    Ruby özellikle esnekliği ve yazım tarzı ile ön plana çıkıyor. Javascript gibi çok esnek bir ve yazımı javascriptten çok daha güzel. Bu özelliklerinin hakkını veren ruby on rails web kütüphanesi ile meşhur oldu diyebiliriz ruby için. Belli bir alanda kendi işini yazımı güzel bir şekilde yapan bir dil geliştirmek istersen Ruby'den faydalanabilirsin mesela.

    Go ise programlama mantığını günümüz bilişim dünyasına göre ciddi anlamda değiştirmeye yönelik bir dil. Açıkçası ruby, python gibi dillerle aynı kefeye koymamak lazım. Bir kere script dili değil, sanal makine üzerinde çalışmıyor, C gibi doğrudan işletim sistemine derleniyor ve yine C gibi çok hızlı çalışıyor. Bunun dışında C de olmayan (ya da çok zor olan) özelliklere sahip. C'deki thread ve threadler arası veri paylaşımı gibi çok temel özellik ve potansiyel sorunlara karşı çok güzel çözümleri var. Bunlar kesinlikle çok önemli özellikle bence her yazılımcının, bilgisayar mühendisinin go'yu kullanmayacak, kullanamayacak olsa bile üzerinde kafa yorması gereken şeyler. Bununla beraber aktif olarak bir çok şirket go ile yazılmış yazılımları sistemlerinde kullanıyorlar.

    Çok uzun oldu, sorular gerçekten güzel. Umarım bu merağından zamanla vazgeçmez araştırmaya böyle şeylere kafa yormaya devam edersin. Çünkü hepimiz bir yerde bıraktık böyle soran olunca açılıyoruz, yazdıkça yazıyoruz :D .
     
    yunus ve sedirAğacı bunu beğendi.
  8. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    675
    Beğenilen Mesajlar:
    185
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    vay be forumda güzel insanlar varmış... ben boş sanıyordum.