Analiz ve doğrusal cebir bir sistem programcısı için nasıl faydalı olabilir? [kapalı]


10

Sistem Programlama için kalkülüs ve lineer cebirin gerekli olduğunu söyleyen bir web sitesi buldum.

Sistem Programlama, bildiğim kadarıyla osdev, sürücüler, yardımcı programlar vb. İle ilgilidir. Kalkülüs ve lineer cebirin bu konuda nasıl yardımcı olabileceğini anlayamıyorum. Kalkülüsün bilimde çeşitli uygulamaları olduğunu biliyorum, ancak bu özel programlama alanında, hesabın nasıl bu kadar önemli olabileceğini hayal edemiyorum.

Bilgiler bu sitedeydi: http://www.wikihow.com/Become-a-Programmer

Düzenleme: Burada bazı cevaplar algoritma karmaşıklığı ve optimizasyonu hakkında açıklıyor. Bu soruyu sorduğumda Sistem Programlama alanı hakkında daha spesifik olmaya çalışıyordum. Algoritma karmaşıklığı ve optimizasyonu, yalnızca Sistem Programlaması'na değil, herhangi bir programlama alanına uygulanabilir. Bu yüzden soru anında böyle bir düşünmeyi bulamadım.


6
Düşünce sürecinizi değiştirmek kadar doğrudan bir uygulama değildir.
SomeKittens

3
Çok fazla sistem programlama yapmıyorum (tamam - hiç yapmıyorum), ancak bir dizi performans testi çalıştırıyorsanız ve sonuçlar üzerinde istatistiksel analiz yapmak istiyorsanız, matematik ve lineer cebirin yapabileceğini hayal ediyorum. oyuna gel. Ayrıca algoritmaların karmaşıklık analizini yaparken bunlara ihtiyaç duyulabilir.
FrustratedWithFormsDesigner

2
@Telastyn: Gerçekten mi? İlginç. Bu nasıl çalışıyor?
FrustratedWithFormsDesigner

2
Web sitesine link verebilir misiniz? Daha spesifik bir yanıt almanıza yardımcı olacak bir bağlam ekleyebilir.
Caleb

2
@FrustratedWithFormsDesigner - Bir değerden bir işaretçiye benzetme türetmeye benzer. Bir işlevle başlarsınız ve başka bir şey anlamına gelen yeni bir işlev elde etmek için türetirsiniz (sayı yerine bellek adresine başvuran bir int). Hatta aynı şey anlamına gelen ama farklı olan ikinci türevi (bir işaretçiye bir işaretçi) bile alabilirsiniz. Daha sonra bunu geri almak için, bazı uyarılar (nesne dilimlemeye karşı bir işlev türetirken kayıp sabit) olan tümleştirmeniz (işaretçiyi serbest bırakmanız) gerekir. Umarım bu mantıklı, çağlar oldu ...
Telastyn

Yanıtlar:


6

Modern bir işletim sisteminin üzerine GUI olmayan yardımcı programları, içleri üzerinde çalışmadan yazıyorsanız, bunun çok önemli olmadığını hayal ediyorum. Modern bir işletim sistemini değiştirmek veya yeni bir tane geliştirmek için çalışıyorsanız, muhtemelen farklı bir hikaye.

Video donanımı veya çıplak bir metal pencere sistemi ile çalışıyorsanız, grafikleri verimli bir şekilde güncellemek için doğrusal cebir bilgisine ihtiyacınız olacak. Kendime bakmadım, ama eminim X, KDE ve Gnome için kaynak kodunda örnekler bulabilirsiniz.

Dijital sinyal işleme ile ilgili donanım ile çalışıyorsanız, hesaplama çok önemli olacaktır. Yerel bir mikroişlemci yerine sistemin CPU'su ile ağır kaldırma yapan bazı cihazlar olduğunu ve bunların genellikle analog elektrik sistemlerine arayüz oluşturduğunu hayal ediyorum.

Ayrıca, verilere uyan eğri girişimi sırasında sadece lineer cebirin yanı sıra performans analizi de önemli bir rol oynar.


Sadece directx veya opengl programlama yapmak bile bazı lineer cebir anlayışını gerektirecektir.
Rig

@Rig: Gittikçe öğren, ben böyle yaptım. Matematik tarafından öğrenmek, IMHO, bas-ackwards.
Coder

8

SomeKittens'in yorumu parayla ilgili: Matematik ve doğrusal cebire ihtiyacınız var, çünkü bu kurslar düşünme şeklinizi ve dünyayı anlama şeklinizi değiştiriyor. Doğrusal cebir tamamen bir alandan diğerine eşleme ile ilgilidir; matematik fonksiyonların davranış biçimlerini kapsar. Kendileri güçlü araçlardır, ancak bu alanları incelerken öğrendiğiniz teknikler de dünya zihinsel resminizin bir parçası haline gelir.

Bu kurslara da ihtiyacınız var, çünkü insanlar bu terimlerle düşünmenizi bekleyecek. Meslektaşlarımın beyaz tahtalarında bir polinom türevini aldıklarını sık sık görmüyorum, ancak sık sık tanjantın ilginç bir noktada çizildiği veya eğrinin altındaki alanın gölgeli olduğu fonksiyon taslaklarını görüyorum. Gerçek değerleri hesaplamayı rahatsız edecek kadar umursamıyoruz, ancak değerlerin nasıl değiştiğinin anlaşılması ve günlük konuşmaların bir parçası olması.

Herhangi bir lisans bilgisayar bilimi derecesi, programcıların teknikleri doğrudan düzenli olarak uygulaması gerektiği için değil (ne yaptıklarına bağlı olarak), ancak buna ihtiyacınız olduğu için hesap, doğrusal cebir, istatistik, mantık ve diğer matematik derslerini gerektirir. daha sonra gelen materyali anlamak için bilgi.


2
Eğer bunu bir kereden fazla oylayabilirsem yapardım.
Mr.Mindor

Olumlu bir cevap olsa da, soruyu cevaplamıyor. Buraya geldim çünkü son zamanlarda eğlence için r600g sürücüsünde biraz hack yapıyordum ve aynı zamanda zayıf matematik arka planını iyileştirmekle ilgileniyorum. Matematik bilgimi, tercihen soyut cebir, topoloji dışında bir şey genişletmek gerektiren sürücü için uygulamak için bir fikir bulmak gerçekten iyi olurdu, ama mutlaka sınırlı değildir. "Sürücü geliştirme matematiği" gibi bir grup sorgu tek bir yazı ile gelmedi, bu sayfa alabildiğim en yakın sayfa.
Hi-Angel

@ Merhaba melek katılmıyorum. Bu beklenen bir şekilde soruya cevap verebilir ve bu soruyu "Ben matematik becerilerini geliştirmek için neler çalışabilir" olarak ayrı ayrı cevap olmayabilir, ama ben ileri matematik bir sistem programcısı için yararlı olduğunu iddia esas onu değiştirmesi halinde ve daha derin bir anlayış sağlar. Grafik programcılar aslında kullanmak daha az, düzenli olarak sistem programcıları analiz ve lineer cebir. Ancak bu konuları anlamak hala önemlidir.
Caleb

6

Devam edeceğim ve matematik veya doğrusal cebirin sistem programlaması için önemli olduğunu düşünmediğimi söyleyeceğim.

Ben kesinlikle kalkülüs ve lineer cebirin genel olarak öğrenmeye değer olduğunu düşünüyorum - ben bir matematikçiyim! Ve diğer cevapların da işaret ettiği gibi, performans analizi ve algoritma tasarımı ileri matematik kullanabileceğinden dolaylı bir ilişki vardır. Ancak, sistem programlamanın, genellikle matematiksel olarak düşünülmeyen diğer alanlardan daha fazla matematik türüne daha fazla bağlı olduğunu düşünmüyorum.


Hiç GPU gördünüz mü? :) Biraz matematiksel, esp. bunun için sürücüler yazmak için ... ama bu doğru: sıkışmışsanız, her zaman math.stackexchange.com :) kullanabilirsiniz
Aadaam

Ben de bilgisayar grafik adamıyım; Bu söze benziyorum! Ve haklısın: grafik kartı sürücüsü yazmak isteyen herkes, bilgisayar grafiklerini (ve beraberinde gelen doğrusal cebir ve temel hesabı) ve sistem programlamasını anlamalıdır.
comingstorm

Görebildiğim kadarıyla, grafik API'sı dışında yararlı bir şey yapmak için trigonometri ve lineer cebiri bilmek gerekiyor, ancak bu API'yı bir grafik sürücüsünde uygulamak için değil. Burada çoğunlukla başvuru taleplerine göre bir grup kayıt değiştirmeyle ilgilenirsiniz. Tahmin edebileceğim grafik sürücüsünde matematik uygulamak için tek yer, derleyicisine yapılan optimizasyonlardır. Yanlışsam beni düzeltin - olmak istiyorum. Aslında buraya geldim çünkü matematik geçmişimi geliştirmek istiyorum ve ayrıca r600g'de çok az hack yapıyorum ve her ikisini de birleştirmek güzel olurdu.
Hi-Angel

4

Kenarlarda doğru olduğundan şüpheleniyorum. Sistem programcılarının performans ve güvenilirlik konusunda çok daha fazla endişe duymaları gerekir, bu nedenle algoritma analizi önemli olabilir ve Big-Oh analizinin kanıtları için bazen hesaplama gerekir. Kuyruk teorisi ve ayrık optimizasyon (kod optimizasyonu değil matematiksel optimizasyon) gibi konular da rol oynayabilir. Ancak bunların çoğunlukla USB 3.0 sürücüsünde çalışan kişi için değil, işletim sistemlerinin ve ağ protokollerinin kanama kenarında çalışan insanlar için geçerli olacağını düşünüyorum.


Optimiz ayrık optimizasyon için ilginç ve ilgili görünmektedir.
Hi-Angel

1

Sistem Programlama tanımınız Wikipedia'daki cevaba çok iyi uyuyor.

Ne sağladığını düşünüyorsanız - yani. bir yazılım arayüzü donanım içine, o zaman neden matematik ve lineer cebir sahip olmak için kullanışlı beceriler mantıklı başlar.

Düşük seviye arayüzün soyutlanması, cihazın nasıl çalıştığını anlamanızı gerektirir. Elektronik cihazlar hala fizik yasalarına tabidir. Analiz ve doğrusal cebir, cihazın davranışını modellemek için bir araç sağlar. Cihazı modellemek, işlevselliği için bir hizmet sunmanıza olanak tanır.

Bununla birlikte, bu iki alan Sistem Programlama için her şeyin sonu değildir. Kalkülüs ve lineer cebir ile de iyi sonuç vermeyen ancak cihazın ne olduğunu oldukça açık bir şekilde açıklayabilen birkaç EE biliyorum.


Sistem Programlama'nın tanımı doğru mu yanlış mı?
Victor

2
Bu çok doğru değil. Bir CPU ile arayüz oluşturmak için sadece verilen talimatların bilinmesi gerekir.
DeadMG

@DeadMG - CPU durumunda tartışamam. Bir ivmeölçer veya doğrudan bir IO arayüzü gibi ham donanım terimleri üzerinde daha fazla düşünüyordum. Bununla birlikte, bunların çoğu, arayüzü sağlamak için bir çeşit çip ile ön taraftadır. Yorumlarımın yonga içindeki mantık için belki de aygıt sürücüsü katmanından daha uygun olduğunu düşünüyorum.

1

Genel web uygulaması ve / veya idari programlama, lineer cebir veya hesabın fazla uygulanmasını içermez, ancak birçok uzmanlık alanı bunu yapar. Eğer geometri ile uğraşırsanız, lineer cebire koşarsınız. Çoğu fizik programlama aynı zamanda hem cebir hem de matematik ile ilgilenir. Ses ve radyo programlama gibi dalga formu manipülasyonu ile ilgili olan her şey. Genel olarak, diğer şeylerin yanı sıra, küme teorisi, grafik teorisi ve bilgi yönetimi, veritabanları ve verilerin ve / veya mantığın birleştirildiği diğer uygulamalarda yararlı olan biçimsel (boolean) mantıkla ilgilenen ayrık matematiği anlamak daha önemlidir. . Sistem programlaması durumunda bu kadar çok uygulama görmüyorum.


2
Bence çoğu programlama alanında kalkülüs veya lineer cebir kullanmadan "geçebilirsiniz". Bununla birlikte, kavramlardan memnunsanız, kaç farklı soruna uygulayabileceğinize şaşıracaksınız. Saat sapmasını ölçmek ve tahmin etmek, pil tutma süresi, son zamanlarda matematik kullandığım şeylere akla geliyor. Nirengi ve yol tahmini geçen yıl üzerinde çalıştığım bir problem için doğrusal cebir içeriyordu. Bu konuların başkalarının kullandığı önceki aşırı karmaşık ve zayıf yaklaşım yöntemleri olarak kullanılmasını gerektirmeyen sorunların hiçbiri ...
Dunk

2
(devam) ... ama nasıl olması gerektiği konusunda çok daha özlü ve doğru uygulamalar için yapılmış daha gelişmiş matematiği kullanmak. IOW, kalkülüs ve lineer cebir, bunları nasıl uygulayacağınızı öğrendiğinizde güçlü araçlardır ve çoğu okulda yeterince matematik öğrenmeyi umursamadığı için diğer tüm programcılara kıyasla zirveye çıkmanıza yardımcı olurlar. Benim için, sıradanlara karşı gerçekten harika projeler üzerinde çalışmak demekti.
Dunk

0

Diğerlerinin de belirttiği gibi, üniversitedeki herhangi bir matematik dersi problem çözme ve tümdengelimli akıl yürütme becerilerinizi keskinleştirebilir. Bunlar neredeyse herkes için önemlidir.

Ancak bazen bazı doğrusal cebirleri bilmek, özellikle de bazı iyi iş fikirleri için yararlı olabilir .


0

Sistem Programlama, bildiğim kadarıyla osdev, sürücüler, yardımcı programlar vb. İle ilgilidir. Kalkülüs ve lineer cebirin bu konuda nasıl yardımcı olabileceğini anlayamıyorum.

Analiz ile ders içeriğine daha yakından bakıldığında oldukça kolaydır . Algoritma karmaşıklığı, Big-O gösterimi ile yakından ilgilidir - bunun gibi, programlamada oldukça temeldir.

Denklemler algoritma karmaşıklığını tahmin ederken elde ettiğiniz şeydir. Üç seviyeli iç içe döngüler 0içinN N olan 3 iki seviyeli iç içe döngüler N olan 2 bir sen gibi görünebilir olsun N. Değerlendirilmesi olduğunu (N 3 + 2 * N 2 + N) - bir denklem olduğunu.

Şimdi, N arttığında yürütme süresinin ne kadar hızlı büyüyeceğini daha iyi anlamak istiyorsanız, bu türevler / farklılaşma ile yakından ilişkilidir. Yararlı bulabileceğiniz hesabın diğer kısımları, limitler ve asimtotik analizlerdir - bunlar sizi Big-O notasyonunu, programlama görüşmelerinde daha iyi puanlama ve muhtemelen daha iyi sistem programlama yapmak için yönlendirecektir.

  • Dosya ayırma tablosu tasarlamaya atandınız, hangi veri yapısını kullanacaksınız? Nadiren değiştirilen birçok küçük dosya olduğu varsayılarak, ne tercih edilir? Sonunda her zaman eklenen nispeten az miktarda büyük dosya varsayalım, aynı yapıyı mı kullanacaksınız? Nasıl karar verirsiniz?

Gelince Lineer Cebire , burada programlama uygulamaları ilk resimden size ateş eder.

http://pad1.whstatic.com/images/thumb/c/c4/LaTeX-2m.jpg/251px-LaTeX-2m.jpg

Raster grafiklerle (örneğin video sürücülerinde) uğraşmak zorunda kalırsanız , yukarıdaki gibi resimler en kötü kabuslarınızda size gelecektir.

  • Nasıl oluyor da # 12345 testi eksik pikseli gösteriyor? Bresenham'ı uygularken yanlış bir şey mi yaptım ? Test tasarımında, yuvarlama hatalarını doğru şekilde hesaba katmamak sadece bir hata olabilir mi?

Bildiğim her üniversitedeki CS'nin matematik bölümlerinden ayrıldığı bir eğilim var. Bence çok akıllıca bir hamle. Ayrıca, CS öğrencilerinin mevcut çözümleri kullanarak çözüm buldukları düşünülmektedir. İyi bir CS öğrencisi kapsayıcıdaki bir belgeyi okur, O (bir şey) görür, wikipedia'yı açar, grafiğe bakar ve kapın uygun olup olmadığına karar verir. Bu, bazı API işlev çağrısı için yeniden giriş ve parametre gereksinimlerini kontrol etmek gibi 2 dakika sürer. Ve IMHO, bir profiler teorik matematikten neredeyse her zaman daha iyi bir çözümdür.
Coder

2
@Coder, elbette bazı bilgisayar bilimleri öğrencileri en başta kapları ve algoritmaları tasarlamak zorunda olan öğrenciler oluyor. Onlar için matematik ve profil oluşturucu tamamlayıcı araçlardır: matematik çalışan bir uygulama sunmaz ve profil oluşturucu sizi test verilerinizin sadece bir şans olduğu konusunda uyarmaz.
Charles E. Grant
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.