Düşük seviye programlama - benim için içinde ne var? [kapalı]


32

Yıllarca "düşük seviyeli" dilleri düşündüğüm şeyi kazmayı düşündüm. Benim için bu C ve montaj anlamına gelir. Ancak henüz bunun için zamanım olmadı, hiç de gerekli olmadı.

Artık ortaya çıkan bir gereksizlik göremediğim için, konuyu çalışacağım ya da planı sonsuza dek bırakacağım zamanları bir zamanlama yapmam gerektiğini hissediyorum.

Pozisyonum

Son 4 yıldır değişebilecek "web teknolojileri" konusuna odaklandım ve değişmesi muhtemel olmayan bir uygulama geliştiricisiyim.

Uygulama geliştirmede, kullanılabilirliğin en önemli şey olduğunu düşünüyorum. Kullanıcılar tarafından "tüketilecek" uygulamalar yazıyorsunuz. Bu uygulamalar ne kadar kullanılabilirse, o kadar çok değer üretmiş olursunuz.

İyi kullanılabilirlik elde etmek için aşağıdakilerin uygulanabilir olduğuna inanıyorum

  • İyi tasarım : İyi düşünülmüş bir kullanıcı arayüzü aracılığıyla erişilebilen iyi düşünülmüş özellikler.
  • Doğruluk : Doğru şekilde uygulanmadıysa, en iyi tasarım hiçbir şeye değmez.
  • Esneklik : Bir uygulama sürekli olarak gelişmelidir, böylece kullanıcılarının, A'nın uygulayabileceği yeni özelliklere sahip olan farklı bir B uygulamasına geçmeleri gerekmez. Aynı sorunu ele alan uygulamalar özelliklerde değil, felsefede farklılık göstermelidir.
  • Performans : Performans, iyi bir kullanıcı deneyimine katkıda bulunur. Bir uygulama ideal olarak her zaman duyarlıdır ve görevlerini oldukça hızlı bir şekilde yerine getirir (sıklıklarına göre). Performans optimizasyonunun, kullanıcı tarafından farkedilebildiği nokta dışındaki ötesinde sorgulanabilir.

Düşük seviye programlamanın performans dışında bana yardımcı olmayacağını düşünüyorum. Ancak performans uğruna bütün bir uygulamayı düşük seviyeli bir dilde yazmak benim için erken optimizasyon.

Benim sorum

Düşük seviyeli programlama bana ne öğretti, başka hangi diller bana öğretmedi? Bir şeyleri özlüyor muyum, yoksa sadece bir beceri mi, uygulama geliştirme için çok az kullanımı var mı? Lütfen anlayın, C ve montajın değerini sorgulamıyorum. Sadece günlük hayatımda, o dünyadaki bütün karmaşıklıkların benim için soyutlanıp yönetilmesinden (çoğunlukla C / C ++ ve montajın kendileri tarafından yazılan katmanlarla) çok mutluyum. Hiçbir şey göremiyorum, bu benim için yeni olabilecek, sadece kafamı doldurmak zorunda kalacağım detaylar. Peki benim için içinde ne var?

Benim sonucum

Cevapları için herkese teşekkürler. Söylemeliyim ki, kimse beni gerçekten şaşırtmadı, ama en azından şimdi, ihtiyaç duyulana kadar bu ilgi alanını bırakacağımdan eminim.
Anladığım kadarıyla, bugünün işlemcilerinde kullanıldığı gibi işlemciler için derleme yazmak sadece gereksiz yere karmaşık olmakla kalmıyor, aynı zamanda C meslektaşı performansından daha düşük çalışma zamanı performansı ile sonuçlanma riskini de taşıyor. OOE nedeniyle elle optimizasyon yapmak neredeyse imkansız, bir derleyicinin de otomatik olarak yapabileceği her türlü optimizasyonu alamazsınız. Ayrıca, kod ya taşınabilirdir, çünkü kullanılabilir komutların küçük bir alt kümesini kullanır ya da optimize edilmiştir, ancak daha sonra muhtemelen sadece bir mimaride çalışır.
C yazmak, geçmişte olduğu gibi artık gerekli değil. Eğer C'ye bir uygulama yazacak olsaydım, sınava kopyalanan yordamları, sıralama algoritmalarını ve üniversitede egzersiz olarak hizmet veren diğer tür şeyleri yerine getirmemi sağlayacak kadar test edilmiş ve kurulmuş kütüphaneler ve çerçeveler kullanırdım. Kendi kodum, tür güvenliği pahasına daha hızlı çalışacaktır. Ne normal uygulama geliştirme sürecinde tekerleği yeniden icat etmeye ne de ne çekirdekli dökümlere bakarak hata ayıklamaya çalışıyorum: D
Şu anda dilleri ve tercümanları deniyorum , bu nedenle yayınlamak istediğim bir şey varsa, sanırım C ++ 'ı işe yarayacak bir konsepte sahipti, ancak C ++ işe yarayabilirdi.
Cevaplarınız ve görüşleriniz için herkese tekrar teşekkürler.


6
@TheLQ: Sorum neden onu kullanmıyor, ondan ne öğrenebilirim ?
back2dos

1
Örnek: Temellere Dön .
rwong

Yanıtlar:


9

Düşük seviyeli programlama, normal masaüstü bilgisayarlarda hemen bulunmayan bir gereksinimin olduğu köşe durumlarda içindir. Bu bir hız darboğazı veya hafıza darboğazı veya tamamen farklı bir şey olabilir ve bu şartlar altında ne yapılabileceğini görmek çok ilginçtir.

Kısıtlamaları ilginç kılan Haikus veya Limericks olarak düşünün.

Bugün imkansız görünen şeyde neyin mümkün olduğu hakkında bir fikir vermek için, işte şimdiye kadarki en büyük hacklerden biri. 1 Kb RAM'de Satranç! http://users.ox.ac.uk/~uzdm0006/scans/1kchess/


1
Sanırım "kısıtlamalar onu ilginç kılıyor" için gerçekten gidiyorum. Burada belirtilen her şey arasında, muhtemelen bu en iyisidir. Okula döndüğümde, 32kB hafıza ve 8Mhz CPU'lu hesap makinemde oyun programlıyordum. Eğlenceliydi, ama bundan sonra faydalanabileceğim kadar bir şey öğrenmedim.
back2dos

Downvoter, lütfen nedenini söyle?

29

Son zamanlarda bunu düşünüyordum. Şu anda kendimi bir C # geliştiricisi olarak görmüştüm - ki kariyerim için gayet iyi.

Ancak, her zaman çok düşük seviyedeki şeyleri özlüyorum (aslında C'deki montajcı veya aygıt sürücülerini yaparak 'ellerimi kirletiyorum'). Sadece programlamayı özlüyorum. Bunun kariyerimde kitlesel olarak bana yardım etmesini beklemiyorum. Aygıt sürücüleri veya katıştırılmış sistemler sizin işiniz ise, o zaman çok yardımcı olabilir.

Soyutlanmış dillerde ne kadar çok program yaparsam, o kadar çok şey beni ilk önce bilgisayarlara çeken şeyleri özlüyorum: bilgisayarın etrafını dürtmek ve hangi seğirmeleri görmek. Assembler ve C alay etmeye çok uygundur :)

Eski dilleri kullanarak, hemen hemen her şeyi kendiniz yapmak zorunda kaldığınızı düşünüyorum. C # gibi bir şey yapabilirim myArray.SortBy(x=>x.Name). Bunu C'de yapabilmeme imkân yoktu, dilin benim için en iyi şekilde yapılacağını kabul ediyorum. C'de yapacak olsaydım, üniversite modüllerimin günlerine geri dönüp farklı sıralama ve arama algoritmalarımı gözden geçirebilirdim.

Bu yüzden, düşük seviyeli dillerin, tümüyle soyutlanmış olan uzun süredir unutulmuş parçalardan herhangi birini gözden geçirmenize yardımcı olacağını düşünüyorum. İlerleyen bir kariyerden çok kişisel bir zorluk.


15
Donanımda alay etme aşkını ve ne seğirmesi olduğunu görmek için +1 - gerçek bir inek
Gary Rowe

2
Eğer isterseniz sıralama işlevini C # ile kendiniz yazabilirsiniz. İsterseniz C'de sıralamak için bir kütüphane işlevini de kullanabilirsiniz: gnu.org/s/libc/manual/html_node/Array-Sort-Function.html. Eski dilleri kullanarak bile, kendin daha az şey yapmalısın derdim. Çünkü çoğu sorun zaten çözülmüş durumda. Bu, insanların tekerleği yeniden dengelemelerini engellemez:
back2dos

15

Benim önerim, entelektüel bir merak olarak C ile oynamak. Ağır bir zaman yatırımı yapmayın çünkü buna değmez.

Önerilen hedefler:

  • Temel veri yapıları ve algoritmalar hakkında hafızanızı yenileyin .
    • Cebir ve geometri gibi sadece bilmek iyi bir şey.
    • Kolej ders kitabı alıştırmaları veya C programında program yapmayı deneyin.
  • CPU önbelleğinden transokeanik ağ gecikmesine kadar bellek (bant genişliği) sıradüzeninin daha iyi anlaşılması . Bu, uygulama geliştirme becerilerinizin her seviyede yardımcı olacaktır.
    • En önemlisi, hangi senaryolar hakkında bilgi edinmek için iyidir bir küçük üst düzey kod göze çarpmayan yeniden düzenlenmesi neden olabilir dramatik hız iyileştirilmesi .
      • Bazen neden yalnızca bellek hiyerarşisi bağlamında düşük seviyeli uygulamada anlaşılabilir.
      • Bu olasılığın doğal nedenini anlamamak, üst düzey geliştiricilerin bu tür bir optimizasyona başvurmanın yanlış olduğunu düşünerek cehalet , korku ve nihayetinde inkar etmeye yol açar . Gerçekte bunun yanlış bir tarafı yok.
  • C / C ++ / Assembly'de geliştirilen düşük seviye bileşenlerin yüksek seviye sistemler tarafından kullanılmasını sağlayan bileşen tabanlı yazılım sistemlerinin estetiğini takdir edin .
    • Estetik, yazılımın kullanılabilirliği ile tamamen aynıdır:
      • İyi tasarım (güçlü, kullanımı kolay, iyi düşünülmüş)
      • doğruluk
      • Esneklik (her biri net bir şekilde tanımlanmış bir amacı olan mevcut parçaların bileşimi ile genişletmeler ve yeni davranışlar)
      • Performans (kullanılabilirliği karmaşıklaştırmadan)
    • Kendi düşük seviyeli bileşenlerinizi tasarlamamanıza rağmen, anlayışınız, üst düzey projelerinizde kullanılacak iyi bileşenleri değerlendirmenize ve seçmenize yardımcı olacaktır.
  • Son olarak, düşük seviyeli bileşenlerin uygulamalarında hemen hemen her zaman daha karmaşık olduklarını , sadece arayüze bakarak kolayca aşındırıcı olduklarını takdir edin .
    • Düşük seviye her zaman karmaşıktır. İyi bir kütüphane, karmaşıklığını gücünü azaltmadan gizler.
    • Bileşen geliştiricileri tarafından yazılan ve üst seviye bileşen kullanıcılarına bileşenleri en iyi şekilde nasıl kullanacaklarına dair öneri olan "teknik notları" okumayı öğrenin.

8

Makinenin nasıl çalıştığını ve sadece üst seviye dilinizin dayandığı sanal makineyi anlamak istemiyorsanız , Meclis bunu size öğretecektir.

Eğer ilgilenmek için bir nedeniniz yoksa - ve çoğu programcı bugünlerde gerçekten yok - o zaman endişelenmeyin.

kuruluşunuzu geliştirecek, ancak muhtemelen web uygulamalarınızı geliştirmeyecektir


6
C neredeyse iyi çalışıyor. Çoğu C kavramı, makine diline kolayca çevrilebilir. C'yi öğrenin ve assembler'a hızlıca bakın; formdasınız.
David Thornley

Benzer bir cevap göndermek üzereydim. C'nin özellikle bellek yönetimi söz konusu olduğunda makinenin nasıl çalıştığını da takdir edeceğini iddia ediyorum. Ek olarak, soyut makine karmaşıklığının birçok dili C dilinde yazılmıştır. En azından, kişi ne kadar şımartıldıklarını gerçekten anlayabilecektir :)
Tim Post

1
@Jorg: ilginç. ve Intel x86 veya 6502'lere kıyasla bu CPU'ların kaç tanesi aktif ticari kullanımda?
Steven A. Lowe

1
@ Jörg, bu işlemcileri nerede buluyorsun?

1
@ At: Hız burada sorun değil, eğitim.
Steven A. Lowe

8

Her programlama dili, genel olarak programlama hakkında ne düşündüğünüz konusunda biraz değişir. Size verebileceğim somut bir örnek, haskell'i öğrenmeye başladığımda ve aniden javascript, ruby ​​ve python'un işlevsel parçalarını daha da anlamlı hale getirdi. Daha önce kodlarımın hiçbirinde foldl kullanmamıştım ama haskell'den sonra dizileri gördüğüm her yerde hemen hemen görüyorum. Bu nedenle, bazı C öğrenirseniz, en sevdiğiniz dilde çeşitli yapıların göreceli performans özelliklerinin çok daha fazla farkına varacağınız için yüksek ihtimaller vardır. Birkaç dakika önce hızlı ve en iyi duruma getirilmiş javascript yazma hakkında bir konuşma dinliyordum ve konuşmacı "C'de yapmak zorsa o zaman javascript'te çok yavaş olacak" dedi. Javascript'in tercüme edilmiş bir dil olması ve tercümanın ya C ya da C ++ dilinde yazılması niyeti.


2
Her dilin düşünce şeklini nasıl değiştirdiği kavramı için +1.
Sean

7

Eğer sadece eğlence için yapmazsanız, çünkü geeksler donanımları üzerinde tam kontrol sahibi olmayı gerçekten seviyorlar, en azından Java yerine C dilinde yazıldığında bir programın ne kadar hızlı olabileceğini daha iyi hissedebilirsiniz. Ayrıca, çöp toplama gibi üst düzey dillerin özelliklerini gerçekten takdir etmeyi de öğrenebilirsiniz.


1
Geek eğlencesi için +1. Söylemeliyim ki, pek fazla inek değilim. Ve ben donanımdan nefret ederim :)
back2dos

1
Hız farkı genellikle alakasızdır. Bu, özellikle sunucu tarafı işlemenin genellikle tıkanıklık olmadığı web uygulamaları için geçerlidir.
David Thornley

David: Ortalama ekmek ve tereyağı web uygulamaları için tamamen katılıyorum. Diğer alanlarda, fark çok alakalı olabilir.
user281377,

1
@ back2dos, donanıma yakın programlama fikri size çekici gelmiyorsa, o zaman onunla uğraşma derim. Latince öğrenmeye zorlamak gibi olur, çünkü daha sonra birçok Romance dilinin temelini oluştururdu.
tcrosley

2
yeterli bellek verildiğinde Java, C'den daha hızlı veya daha hızlıdır

5

Merak için Yaşasın!

Karmaşık bir sistemin en düşük seviyelerinde gerçekte neler olup bittiğine dair bir fikre sahip olmak, birinin günlük görevlerini bilmek için mantıklı bir ihtiyaç olmasa bile, çok iyidir. Şimdiye kadar işleri bit seviyesine getirmenin en iyi yolu kendi işlemcinizi oluşturmaktır. Makine dili seviyesindeki kodları düşünmeniz, ortogonal komut setlerinin neden bu kadar iyi olduğunu anlamak, kesme işleminin komplikasyonları, karmaşık devreler arasındaki değişimler (mikro çarpma (örn. Çarpma birimlerinde)) ve ah diğer eğlenceli!

Ancak, açıkçası, elektronik bilgisini alıyor ve zaman alıyor, bu yüzden bir sonraki en iyi şey antika bir 8-bit işlemciye sahip oyuncak. 8051 gibi mikrodenetleyiciler hala yaygın bir şekilde kullanılıyor ve hobiciler tarafından kullanılabiliyor. Bu, hala hayvan sürüsü elektroniği ve LED'lerin sigara içmeden parlamasını sağlamak için hala biraz bilgi sahibidir ve eğer zaten elektronik için donanımlı değilseniz, maliyeti düşürür.

Bundan sonraki en iyi şey: bir CPU simülatöründe oyuncak (emülatör? Bu terimleri karıştırıyorum) - bunlar Z80, 6502, 8086 ... tüm eski 8-bitler için var. Bu, lehimleme ucunun hangi ucunun tutulacağını bilmeyen bir uygulama programcısı için en eğitici ve eğlenceli olabilir (biri çok hızlı öğrense de :) :) Metin, video belleğine nasıl yazılır, montaj kodlarının performansa nasıl yardımcı olduğunu. .. Bu seviyede keşfedilecek çok fazla eğlenceli şey var.

CPU'nun iç işleyişini anlamadan önce C'yi başka bir dil olarak öğrenmekten pek emin değilim. Bitlerin CPU kayıtları arasında nasıl gönderildiğini ve belleğe nasıl erişildiğini bilmek, gerçekten işaretçiler ve diğer C dili kavramları elde etmede müthiş yardımcı olur.


+1 çünkü işaretçilerden bahseden tek cevap buydu. Bunun 1 numara olacağını ve cevapların kabul edileceğini düşündüm.
Erik,

4

Bir kelimeyle, eğlenceli. Assembler ile uğraşırken (VB'den C ++, C vs'ye kadar), işlemcinin bir kısmından diğerine veri taşımak harika bir şeydi. İşlemcinin içinde neler olup bittiğini tam olarak bilmek , altında ne olup bittiğinden endişe duymamak harika bir duyguydu . Ayrıca büyük bir özgürlük hissi - hemen hemen her şeyi yapabilirsiniz, çünkü daha yüksek dillerde bulduğunuz yerleşik sınırlamalar yoktur.

Ayrıca, başka bir dilde programlanmış olanlara etrafta dolanıp, “yeterince sağlam değilsen…” çocukça, çocukça eğlenceliydi.


4
Aslında CPU içinde assembler göremediğiniz bir sürü şey oluyor. Sıra dışı çalıştırma, aşırı tarama ve bellek önbelleğe alma gibi şeyler CPU tarafından otomatik olarak yapılır. Maddenin temel parçacıklarına ulaşana kadar her zaman bir adım daha aşağı inebilirsiniz. Yoksa madde sadece enerji midir?
Kevin Panko

Biri transistörlerden ve mantık yongalarından kendi CPU'larını oluşturarak böyle bir gizemli gizemi önleyebilir: D (En sevdiğim teknoloji fantezilerimden biri!) Yine de harika bir cevap için +1.
DarenW

Doğru tespit! Gerçekte en son kullandığımda assembler hyperthreading muhtemelen CPU'lardan ziyade hızlı dikişe atıfta bulunulduğundan beri ...
Dan O

2

Düşük seviyeli programlamayı öğrenmek / uygulamak için herhangi bir iyi sebep var mı. Bağlama bağlı olarak kendime çeşitli cevaplarım var.

Öncelikle, C programlamayı öğretiyorum (aynı zamanda OCaml ve Java), öğrenciyi zor taraftan programlama öğrenmeye motive etmek, görevin en zor kısmıdır. Şimdiye kadar bulduğum en iyi argüman "anlama" dır: yüksek seviyeli diller birçok altta yatan mekanizmaları gizler ve bazen iyi değil, ayrıca bazı düşük seviyeli hileler gerçekten faydalı olabileceği zaman bile sizi daha üst seviyede kalmaya zorlarlar ( performans için, çoğu zaman.) Ne kullandığınızı anlamak, onu daha iyi kullanmanıza yardımcı olabilir. Öğretim deneyimim, düşük seviye programlama öğrenen öğrencilerin (ve diğer kullanıcı odaklı olmayan, bu tür derleyiciler) daha uyarlanabilir olduğunu ve yeni yüksek seviye kavram ya da araçları daha hızlı öğrendiklerini kanıtlıyor.

İkincisi, belirttiğiniz gibi, performans kullanıcı deneyiminin bir parçasıdır. Çoğu zaman, performans bir yazı karmaşıklığı ve makine kodu yakınında görülür. Bu her zaman böyle değildir, performans daha çok algoritmalar ve veri yapıları konusudur, aynı zamanda algo ve veriler arasındaki etkileşimdir. Konuyla ilgili özel bir proje kullanıyorum, temelde basit bir yol bulma, ancak asıl mesele verilerin boyutu: grafik sonsuz. İniş performanslarını elde etmenin ve belleğe sığmanın tek yolu, özel bir bellek ayırıcısı yazmaktır (aslında iki, bir havuz ayırıcısı ve geri dönüşüm ayırıcısı). Aslında, çoğu çöp toplanan dilde performans ve bellek sorunları olacaktır.

Muhtemelen daha düşük seviyeli dillerin "yutturmaca" dillerine karşı (tarih ve uzun ömür anlamında) istikrarı (programlama açısından gelecekteki referans olarak kabul edilen bir dilin birkaç yıl içinde ortadan kalkabilmesi gerçeği) gibi çok daha fazla tartışma vardır. hikaye, yeni bir öğenin ömrünü tahmin edememekle birlikte, bu argüman eski diller için de geçerlidir ...), elbette bir zevk meselesi veya en üst düzey dillerde yapılabileceklerin de olabileceği gerçeği var. düşük seviyeli dillerde yapılır, ancak tam tersi olmaz (ama bunu göz önünde bulundurarak, sadece tüm derleme sırasındaki kodları yapmalıyız…

Kendimi her iki dünyada da tuzağa düşürdüm (oldukça farklı), birkaç yıl boyunca teorik programlama kavramı, tip sistemleri tasarımı ve ispatları üzerinde çalışıyorum ve bunu yaparken sadece çok yüksek seviyeli dilleri kullandım ve çalıştım (çoğunlukla işlevsel olan, aynı zamanda saf) nesne yönelimli.) Son zamanlarda diğer tarafa dönüyorum (çoğunlukla sistem ve çekirdek programlama) ve bu alanda kendimi oldukça rahat buldum, çok eğleniyorum! Benim için bir sonraki adım, ortak noktayı bulmak: alt seviye programlama için üst seviye dil özellikleri! Şimdiye dek bunun için bir dil yok (belki de google kullanıcının sistem programlamasına gidiyor) ve kendi dilimi oluşturma fikrini düşünüyorum, ama bu başka bir hikaye.


1

Etki alanınızda çok fazla neden olmadığını söyleyebilirim, ancak yüksek performanslı bilgi işlem (örneğin Oyun, Bilim, vb.) Yapacak olsanız bu doğrulanacaktır.


1
Kalan birçok yüksek performans alanı olduğundan emin değilim. Oyun kesinlikle düşük seviyeli dilleri gerektirmez. Oyun oynamak için genellikle motor kullanıyorsunuz veya en azından OpenGL veya başka bir şeyle başlıyorsunuz. Ve bilim için paralelleştirme çok önemlidir ve doğruluktur. Sanırım OCaml veya başka bir şeyle daha iyi olursun. Performans açısından kritik alanlar artık çok fazla sayıda çığır açan alan değildir, ancak bunlar çekirdekler, sürücüler, depolama motorları ve benzeri gibi çok sık kullanılanlardır. Sanırım tüm geliştiricilerin% 1'inden azı gerçekten bunlara dokunuyor.
back2dos

4
@ back2dos, oyun motorları sadece hiçbir yerde görünmüyor - birinin yazması gerekiyor. Sizce OpenGL ne yazıyor? C değil#. Bugünlerde çoğu uygulama için düşük seviyeli diller kullanmak zorunda değilsiniz ... ama birçok insan bunu gerektiren diğer alanlarda çalışıyor.
GrandmasterB

1

Bugünlerde düşük ve yüksek seviyeli programlama oldukça ayrılabilir diye düşünüyorum. Temel olarak bu, C ve assembler'ı hiçbir problem yaşamadan bilmeden tüm profesyonel yaşamınızı yaşayabileceğiniz anlamına gelir. Bununla birlikte, C programlama dili size programlama ve tasarım açısından size çok şey öğretemez.

Sadece meraktan, işlerin daha düşük seviyede nasıl çalıştığını öğrenebilirsin. Örneğin, Üniversitedeyken, C ++ 'dan assembler kodu üretmek için gcc kullanmaktan zevk aldım. Polimorfizmin ve istisnanın nasıl uygulandığını anlamak yararlı oldu. Fakat bunun dışında bugünlerde C'den öğrenebileceğiniz tek şey:

1) kirli hafıza püf noktaları. C programcıların deliliğinde alttan aşağı olmadığını anlamanın en iyi yoludur :)

2) GOTO, hataları geri almak için gerçekten kullanılır (ve faydalıdır)

3) bellek tahsisinin nasıl çalıştığını daha iyi öğrenir (yığın ile yığın arasındaki fark nedir?).

Temelde benim tezim: Üniversiteyi zaten bitirdiyseniz ve hala C'ye ihtiyacınız yok, öğrenmiyorsanız :)


2
İşlerin nasıl düşük düzeyde çalıştığını bilmek için C'yi bilmek, sızdıran bir soyutlama olduğunda neden işlerin yanlış gittiğini anlamaya yardımcı olabilir.
Michael Shaw,

1

Düşük seviye dilleri anlamanıza gerek yoktur, ancak seçtiğiniz yüksek seviye dilin kapaklarının altında neler olduğunu anlamanız gerekir. Düşük seviyeli bir dil kullanmak size bunu öğretecek, ancak tek yol bu değil.

İşte yüksek seviyeli dilleri etkileyebilecek düşük seviyeli konseptlerden bazı örnekler.

İşaretçiler:

List<object> listOne = new List<object>();
List<object> listTwo = listOne;

listTwo.Add(new object());

Debug.WriteLine(listOne.Count); //do you know what this will be?

Teller:

string initial = "initial";
string another = initial;

another = "changed!";
Debug.WriteLine(initial); //what about this?

Listeler:

Bir listeyi bağlantılı listeye göre ne zaman kullanıyorsunuz? (Bir listenin nasıl çalıştığını oldukça düşük bir seviyede anlamadan bunu bilmek neredeyse imkansız)

-

Bunca şeyi bilmek gerekli mi? Hayır, ancak bunun bir etkisi olabilir ve yüksek seviyede bir dilin ustası olmak istiyorsanız, içsel çalışmalar hakkında oldukça iyi bir fikre sahip olmanız gerekir.


1

Düşük seviyeli programlama bana ne öğretti, başka hangi diller bana öğretmedi?

En önemlisi, bilgisayarların gerçekte nasıl çalıştığını öğretecektir. Bunu öğrenmenin düşük seviye programlamadan başka bir yolu yoktur. Ne tür uygulamalar programladığınızın önemi yok, bu her zaman yardımcı olacaktır. Aslında tüm bu web şeyler altında derinlerde neler olup bittiğini anlayacaksınız. Ve eğer Windows ile çalışıyorsanız, tüm API C dilinde yazılmıştır, bu yüzden bu dilin bilinmesi, mevcut dillerinizin ve kütüphanelerinin eksik olduğu bir özelliği kullanmanız gerektiğinde, doğrudan işletim sistemi ile iletişim kurmanıza olanak sağlayacaktır.

Tabii ki düşük seviyeli programlama, gömülü programlama ve asm / C / C ++ 'ın şart olduğu gerçek zamanlı programlama gibi tamamen farklı şeyler ile çalışmanıza olanak sağlayacaktır. Bu tür uygulamalara ilgi duymuyorsanız, asm / C / C ++ öğrenmeye gerek yoktur.

Ayrıca, bit ve bayt öğreneceksiniz. Bit manipülasyonları, onaltılık vb. Şimdi ve sonra web / masaüstü programlama yaparken bile karşılaşabileceğiniz bu şeyler. Şifreleme algoritmaları, kullanıldığı yerlerde bir örnektir.

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.