Yanıtlar:
Ne yaptığınıza bağlı.
Yerleşik bir geliştiriciyseniz (ve çok küçük bir cihazda metale çok yakın yazıyorsanız), sistemdeki her bileşenin her giriş ve çıkışını bilmeniz gerekir.
Bir sistem geliştiricisiyseniz (ve işletim sistemleri veya aygıt sürücüleri veya hatta veritabanları yazıyorsanız), düşük seviyeli donanım arabirimleri hakkında bilmeniz gereken her şeyi bilmeniz gerekir.
Bir oyun geliştiricisiyseniz ve projenizin sonlarındaysanız (işleri optimize ettiğiniz yerde), kullanacağınız CPU önbelleğinin ve grafik mimarilerinin giriş ve çıkışlarını bilmeniz gerekir.
Bir uygulama geliştiricisiyseniz, bellek kullanımını makul seviyelerde tutmak dışında bunların hiçbirini bilmenize gerek yoktur.
Bir web geliştiricisiyseniz, internet protokollerini bilmek kullanışlıdır, ancak bellek sorunlarıyla nasıl başa çıkılacağı dışında bunlardan hiçbiri gerekli değildir.
Uygulama geliştiricileri ve web geliştiricileri hakkındaki yorumların yanlış olduğunu düşünüyorum.
Örneğin, birisi ssh veya başka bir şifreleme algoritması gibi birçok güvenlik öğesi içeren bir web uygulaması geliştiriyorsa, makinenin gerçekten işleyip işleyemeyeceğini belirleyebilmeleri için ne tür bir donanım üzerinde çalıştıklarını bilmeleri oldukça önemlidir. iş yoğunluğu. Başka bir örnek, indirilen bir tür içeriği barındıran bir sunucu içerebilir. Disk sürücüsünün yeteneklerini ve oldukça büyük miktarda istek bekliyorsanız, hangi tür veri yolu arabirimine bağlı olduğunu daha iyi bilirsiniz.
Bir uygulama açısından, bir tür CAD programı veya 3d render yapan bir şey geliştiriyorsanız, bu uygulamanın hem algoritmik hem de grafiksel olarak yoğun hesaplama yapmasını bekleyebilirsiniz. Uygulamanın duyarlı ve kullanılabilir olduğundan emin olmak için donanımı anlamak akıllıca olacaktır.
PCI protokolü gibi bir şeyin giriş ve çıkışlarını anlamak kadar ileri gitmeniz gerektiğini söylemiyorum, ancak arayüz ve donanımın neler yapabileceğini daha iyi anlıyorsunuz.
Sonuçta, ne tür bir gelişme yaptığınızdan bağımsız olarak önemlidir. Anlamanız için gereken ayrıntı seviyesi tartışmalıdır.
Profesyonel bir programcı için, bir şekilde bakmak bütünsel tüm anlamanın yaklaşımı sistemini yerine sadece belirli bir programlama dili sözdizimi bilerek du jour . Programcıların (ve analistlerin) akıllı tasarım kararları almasına ve daha bilinçli algoritma ve veri yapısı seçimleri yapmasına yardımcı olduğunu düşünüyorum.
Kendi tecrübelerime göre, en iyi programcılar iç hedefler , değişen derecelerde, ister bir hedef platform için ayarlanan yerel montaj talimatını , ister okulda bir giriş bilgisayar organizasyonu kursunu, ilkel dijital elektronikleri anlayabilir veya ayrıntılı olarak anlayabilirler. En son modellerde CPU ve GPU çekirdeklerinin açıklamaları , en iyisi, daha az yıldız akranlarından daha eksiksiz bir bilgiye sahiptir.
Bunun işe yarayıp yaramadığından emin değilim, ama üzerinde çalıştığım sistem hakkında gerçekten ihtiyacımdan daha fazla şey öğrendiğimde kendimi daha rahat hissediyorum. Küçükken üzerinde çalıştığım sistemin montaj dilini bilmekten hoşlanmıyordum; Ya ben değiştim, ya da birçoğunun sisteme olan hislerimi fazla genişletmeyeceğini yeterince öğrendim. Daha önce hiç donanım adamı olamadım, ancak bir bilgisayarı parçalara ayırabilir ve farklı alt sistemleri ve bunların nasıl etkileştiğini adlandırabilirim.
Neredeyse 25 yıl önce bir bilgisayar mimarisi dersinde ve gerçek dünya dışı bir mimaride öğrendiğim az şey.
Öncelikle çeşitli platformlarda programlama uygulamaları yapıyorum. Sadece emtia x86 donanımında değil, aynı zamanda Sparc, PA-RISC ve diğer sunucu mimarilerinde de çalışacak kod geliştirdiğim bir dönem vardı. Yaptığım iş için bu düzeyde bilgi gerekli değildir.
Java programlamasını bir AP lise sınıfı olarak öğretiyorum. Öğrenciler bir bilgisayarın iç işleri hakkında bir şeyler bildiğinde, programlama kavramlarını anlamalarına yardımcı olduğunu buldum.
Ben aşırıya kaçmam - sadece bellekte nasıl saklandığı gibi basit kavramlar öğrencilere yardımcı oluyor gibi görünüyor.
Bunu başlıkta sorulduğu gibi cevaplayacağım:
Evet, bir geliştirici olmalıdır donanım iç işleyişini biliyoruz. Ne kadar geliştirici türü ve hedefleri, kullanılabilir zaman ve kişisel ilgi bağlıdır. Öncelik, elbette, kendi alanlarında kullandıkları acil araçlara, tekniklere vb. Bu görüş çok yönlü bir birey olma yolunda ilerliyor. Zanaatınızdan ödün vermeden zanaatınızın dışındaki şeyleri ne kadar iyi bilirseniz o kadar iyi olur.
Bu Cheese Whiz ile delirmen gerektiği anlamına gelmiyor. Donanıma, parçaların nasıl etkileşime girdiğine, işletim sistemlerinin bunları nasıl kullandığına ilişkin iyi bir genel bakışa sahip olun. Bu çizgiler boyunca, tüm geliştiriciler için bir işletim sistemleri kavramları kitabı okumanızı öneririm.
Bütün bunları biliyor muyum? Heck hayır. SCSI hakkında o kadar da işe yaramaz bilgiyi unutmuşum ki komik bile değil. Ancak, bunu öğrenmek çok değerli bir deneyimdi. Donanımla ilgili diğer birçok ayrıntıyı da unuttum, ancak bu bilgiden öğrendiğim önemli kavramları hatırlıyorum.
Bu yüzden, kesinlikle donanım hakkında bilgi edinmenizi öneririm. İhtiyaçlarınıza bağlı olarak makul bir hızda yapın. Detayları olabildiğince çok öğrenin, ancak kavramlara odaklanın.
Her geliştirici bilgisayar mühendisliği ile ilgili temel kavramları bilmelidir: ikili aritmetik, taban dönüşümü, Boole cebri, mantık kapıları, bir CPU'nun bileşimi (ve bileşenlerin ne yaptığı), önbellek, sanal bellek, sıkıştırma, hata algılama ve düzeltme ...
Bunların ne ölçüde bilinmesi gerektiği programcının işine bağlıdır. Diğerlerinin söylediği gibi, gömülü bir sistem geliştiricisinin donanım yeteneklerine ve donanımı en iyi kullanan yazılımın bir web geliştiricisine göre nasıl yazıldığına çok daha aşina olması gerekir.