CS alanında yeniyim ve okuduğum birçok makalede ampirik bir sonuç olmadığını (kod yok, sadece lemmalar ve ispatlar) gördüm. Neden? Bilgisayar Biliminin bir bilim olduğunu düşünerek, bilimsel yöntemi izlememesi gerekmiyor mu?
CS alanında yeniyim ve okuduğum birçok makalede ampirik bir sonuç olmadığını (kod yok, sadece lemmalar ve ispatlar) gördüm. Neden? Bilgisayar Biliminin bir bilim olduğunu düşünerek, bilimsel yöntemi izlememesi gerekmiyor mu?
Yanıtlar:
Matematik de bir bilimdir ve bu alanda yayınlanmış ampirik sonuçları bulmak için uzun bir süre aramanız gerekecek (sanırım biraz olmalı). Kuantum fiziği gibi "lemmalar ve ispatların" deneyimle değer kazandığı başka bilimsel alanlar da var. Bununla birlikte, birçok bilim teori ve pratiği karıştırmaktadır (çeşitli oranlarla) ve Computer Science bir istisna değildir.
Bilgisayar Bilimi'nin matematikte kökleri vardır (bakınız Turing'in örneğin http://en.wikipedia.org/wiki/Alan_Turing ) Bazı hesaplama modelindeki bilgisayarların belirli bir işlem miktarında bazı problemleri çözebilecekleri (örneğin, FOCS, STOC, SODA, SoCG, vb. gibi konferanslar). Bununla birlikte, bilgisayar biliminin diğer birçok sonucu, deneysel sonuçların analizi yoluyla bu teorilerin pratik hayata uygulanabilirliği ile ilgilidir (örneğin, WADS, ALENEX, vb. Gibi konferanslar).
İdeal olanın teori ve pratik arasında iyi bir denge olduğu önerilmektedir, “Natural Science” da olduğu gibi, deneylerin izlenmesinin yeni teorilerin ortaya çıkmasını sağladığını ve bunun da bunları doğrulamak veya doğrulamak için yeni deneyler önerdiğini: Konferanslar hem deneysel hem de teorik sonuçları (örneğin ESA, ICALP, LATIN, CPM, ISAAC vb.) kabul etmeye çalışır. Bilgisayar biliminde "Algoritmalar ve Veri Yapıları" alt alanı, "Teorik" konferansların genellikle deneysel olanlardan daha fazla sıralandığı anlamında bir dengesizlik yaşayabilir. Bunun HCI veya AI gibi diğer bilgisayar bilimlerinde doğru olmadığına inanıyorum.
Umarım yardımcı olur?
Algoritma algoritmaları, sadece teoremleri kanıtlamaktan farklı bir takım araçları alan bir beceridir. Teori topluluğu tarafından keşfedilen birçok algoritma gerçekten pratikte uygulanmıştır (teorik topluluğun bu süreçte daha büyük bir rol oynadığını görmek istemesem de). Fizik aynı araştırmacılardan teorik ve deney yapmalarını istemez, ancak iki grubun iletişim kurması beklenir. Neden bilgisayar biliminde aynı ayrılığı görmeyi beklemiyorsunuz?
EDIT’E EKLENEN:
Suresh’in yukarıda "rol" derken neyi kastettiğime dair yorumumun genişlemesi, Bell Laboratuarlarında ve AT&T Laboratuarlarında, algoritmalardaki araştırmacıların gelişimdeki insanlarla konuşmaları teşvik edildi. Muhtemelen yapmam gereken kadarını yapmadım, ama en az bir kağıt aldım ve üniversitelerdeki teoriye uygulayıcılar ile uygulayıcılar arasında daha fazla iletişim olsaydı bu alan için iyi olacağını düşünüyorum. . Bu, bir algoritma ile gelen herkesin (pratik olsa bile) kodlaması gerektiği anlamına gelmez.
Öte yandan, pratik olabileceğini düşündüğünüz kodlama algoritmaları (veya bir öğrencinin kodlaması) uygulayıcılar tarafından uyarlanmasında yararlı olabilir. Bir örnek düşünün. Lempel ve Ziv, 1977 ve 1978'de yeni veri sıkıştırma algoritmaları hakkında iki teknik makale yazdı. Herkes onları görmezden geldi. 1984 yılında Welch , LZ78 üzerinde performansını biraz artıran hafif bir bükülme veren çok daha az teknik bir makale yazdı ve performansını diğer veri sıkıştırma yöntemleriyle karşılaştıran küçük bir çalışmanın sonuçlarını verdi. Birkaç programcı tarafından okunan bir dergide yayınlandı ve algoritma birkaç satır sözde kodla verildi. Metot hızlıca birkaç yerde uyarlandı ve sonuçta rezil bir fikri mülkiyet anlaşmazlığına yol açtı.
Tabii ki, araştırmacıların pratikle iletişim kurmaları için algoritmaların en iyi yollarından biri, Google, IBM veya diğer şirketlerde çalışan ve çalışan yüksek lisans öğrencileri üretmek ve bunu zaten yapıyoruz. Bir başka yol da bu forumdaki uygulayıcıların sorularını cevaplamak olabilir. Umarım, bununla da makul bir iş yapıyoruz.
Teorik Bilgisayar Biliminin deneysel yöntem ve yöntemlerini kullanan bir araştırma alanı "Deneysel Algoritma" veya "Algoritma Mühendisliği" olarak adlandırılan alandır. Chris'in dediği gibi, yüksek performanslı bilgi işlem büyük ölçüde buna dayanıyor, çünkü modern sistemler zor zaman modellemede zorlandığımız karmaşık önbellek ve gecikme sorunlarına sahip.
Gerth Brodal ve Peter Sanders , hem “kanıt” hem de “ampirik” alemlerde ayak tutan araştırmacıların güzel örnekleridir.
- Güncelleme 1/20 / 2013-- Robert Sedgewick’in harika bir sunumundan da bahsedeceğim .
Bu, içinde bulunduğunuz disipline bağlıdır; Jeremy'nin dediği gibi, pratikte teoriye karşı bir yelpaze var
Karmaşıklık gibi konular teori tarafına göre ağırlıklandırılmaya meyillidir, çünkü çoğu zaman amaç mekan veya çalışma zamanı için bir sınır bulmaktır. Bir algoritmayı C ++ 'ta uygulamak ve ardından birkaç kez çalıştırmak bir sorunun NP tamamlanmış olduğunu kanıtlamaz.
Kutupsal karşıt olarak, yüksek performanslı bilgi işlem ( Süper Bilişim gibi konferanslarla ) hepsi ampiriktir; bellek hiyerarşisi ve çekirdek yükü bakımından çok fazla değişkenlik olduğu için hiç kimse bir HPC yayınına kanıt sunmayacaktır.
Peki (ne kadar süre bir şey almak çalıştırmak mu?) Gol, teknikleri, toplum, vs. bağlı olarak birbirinden tamamen farklı şekilde yaklaştı olacak aynı soru gibi görünüyor bakın Poul-Henning Kamp bulunuyor Sen O Yanlış Yapıyorsunuz bir örneği için uyumsuzluk.
Programlama dillerinde, yeni programlama dili yapıları veya yeni tip kontrol mekanizmaları için birçok fikir araştırılmaktadır (teorik olarak belki de uygulamadaki tecrübeyle bilgilendirilmektedir). Genellikle bu mekanizmalar hakkında resmi / teorik / kavramsal açıdan bir makale yazılır. Bunu yapmak oldukça kolay. Sırada ilk engel var: Yeni yapıları mevcut bir derleyici bağlamında uygulamak ve verimlilik veya esneklik açısından denemek. Bu da nispeten kolaydır.
Fakat programlama yapısının programlama biliminde bir ilerleme oluşturduğunu söyleyebilir miyiz? Program yazmayı kolaylaştırdığını söyleyebilir miyiz? Programlama dilini daha iyi hale getirdiğini söyleyebilir miyiz?
Cevap hayır. Bu tür soruları yanıtlamak için deneyimli programcıların uzun süre boyunca puanlarını içeren uygun bir ampirik değerlendirme gerekli olacaktır. Bu araştırma neredeyse hiç yapılmamıştır. Bir programlama dilinin (ve onun yapıları) değerinin tek yargısı, dilin popülaritesidir. Ve programlama dili uzmanları için bu, hipotezlerimizin bize söylediklerine aykırıdır.
Belki de sorunuzun motivasyonunu özlüyorum ama araştırmayı, algoritmaları ve diğer sonuçları motive eden birçok ampirik sonuç örneği var.
MP3 kullanımı psiko-akustik insan kodlama için bir algoritma optimize etmek.
Aynı çizgi boyunca, Bailey ve Borwein, deneysel matematiğin büyük savunucularıdır. Diğerlerinin yanı sıra " Pota Olarak Bilgisayar: Deneysel Matematiğe Giriş" , "Sayı Teorisinde Hesaplamalı Geziler" bölümüne bakın . Biri bunun daha deneysel bir Matematik olduğunu iddia edebilir, ancak bu seviyede tartışmanın ayrımsal bir anlam ifade ettiğini iddia ediyorum.
NP-Komple problemlerin faz geçişleri, ampirik sonuçların yoğun olarak kullanıldığı başka bir alandır. Bkz Monasson, Zecchina, Kirkpatrick, Selman ve Troyansky ve Gent ve Walsh pek çok fazlası (bkz olmasına rağmen, yeni başlayanlar için buraya kısa bir anket için).
Teorik Bilgisayar Bilimi veya Matematik seviyesine tam olarak bakılmasa da, burada unix yardımcı programının grep'in ortalama vaka çalışma zamanının nasıl en iyi duruma getirilmiş en kötü durum algoritmalarını aştığı hakkında bir tartışma var çünkü insanca okunabilir metinleri aramaya dayanıyor (grep kötü veya İçlerinde rastgele karakter bulunan dosyalarda en kötüsü).
Gauss bile , Asal Sayı Teoremi hipotezini vermek için deneysel kanıtlar kullandı .
Veri madenciliği ( Bellkor'un Netflix Ödülüne daha iyi bir öneri sistemi oluşturmak için sunduğu çözüm ) tamamen ampirik kanıtlara dayanan bir teori olduğu iddia edilebilir. Yapay Zeka (genetik algoritmalar, sinir ağları vb.) Büyük ölçüde deneye dayanır. Şifreleme, kod yapıcılar ve kod kesiciler arasında sürekli bir itme ve çekmeye devam ediyor. Gerçekten sadece birkaçını adlandırdım ve ampirik tanımınızı gevşetirseniz, daha da geniş bir ağ oluşturabilirsiniz.
Sorunuzu cevaplarken çok dağınık olduğum için özür dilerim ama umarım yardımcı olabilecek en az birkaç örnek verdim.