Temel Seviyeler:
Her şeye en basit ve en temel düzeyde bakalım.
Matematik için biz var:
2 + 3 = 5
Bunu çok çok gençken öğrendim. En temel öğelere bakabilirim: iki nesne ve üç nesne. Harika.
Bilgisayar programlaması için çoğu insan yüksek seviyede bir dil kullanma eğilimindedir. Bazı yüksek seviyeli diller, C gibi daha düşük üst seviyeli dillerden birine "derlenebilir", daha sonra C, daha sonra Assembly diline çevrilebilir. Assembly dili daha sonra makine koduna dönüştürülür. Pek çok insan, karmaşıklığın orada biteceğini düşünüyor, ancak yapmıyor: Modern CPU'lar makine kodunu talimat olarak alıyor, ancak daha sonra bu talimatları uygulamak için "mikro kodu" çalıştırıyor.
Bunun anlamı, en temel seviyede (en basit yapılarla uğraşıyoruz), şimdi donanıma gömülü olan ve çoğu programcının doğrudan kullanmadığı ya da güncellemediği mikro-kod ile uğraşıyoruz. Aslında, çoğu programcı mikro koda (mikro koddan 0 seviyeden yüksek) dokunmaz, çoğu programcı makine koduna (mikro koddan 1 seviyeden yüksek) ve hatta Meclis'e (mikro koddan 2 seviyeden yüksek) dokunmaz. (belki de, kolej sırasında bir miktar örgün eğitim hariç). Çoğu programcı sadece 3 veya daha fazla seviye için zaman harcar.
Dahası, eğer Meclis'e bakarsanız (ki insanlar genelde normalde olduğu kadar düşük), her bir adım genellikle eğitilmiş ve bu adımı yorumlayacak kaynaklara sahip kişilerce anlaşılabilir. Bu anlamda, Meclis, üst düzey bir dilden çok daha basittir. Bununla birlikte, Meclis o kadar basittir ki, karmaşık görevlerin ve hatta vasat görevlerin yerine getirilmesi çok zahmetlidir. Üst seviye diller bizi ondan kurtarıyor.
"Tersine mühendislik" ile ilgili bir yasada, bir yargıç, teorik olarak her defasında bir bayt ele alınsa bile, modern programların milyonlarca bayt içerdiğini, bu nedenle bazı kayıtlar (kod kopyaları gibi) yapılması gerektiğini açıkladı. uygulanabilir olma çabası. (Bu nedenle, içsel gelişme, genelleştirilmiş "kopya çıkarmamak" telif hakkı yasası kuralına aykırı sayılmadı.) (Muhtemelen izinsiz Sega Genesis kartuşları yapmayı düşünüyorum, ancak Game Genie davasında söylenen bir şeyi düşünüyor olabilirim. )
modernizasyon:
286'lara yönelik kodlar kullanıyor musunuz? Yoksa 64 bit kod mu çalıştırıyorsunuz?
Matematik binlerce yıllara kadar uzanan temelleri kullanır. Bilgisayarlarla, insanlar genellikle yirmi yıllık bir işe yatırım yapmayı düşüncesizce boşa harcarlar. Bu, Matematik'in çok daha ayrıntılı bir şekilde test edilebileceği anlamına gelir.
Kullanılan Araçlar Standartları:
Bana (benden daha resmi bilgisayar programlama eğitimi almış bir arkadaş tarafından) C spesifikasyonlarını karşılayan hatasız bir C derleyicisi diye bir şeyin olmadığı öğretildi. Bunun nedeni, C dilinin temel olarak bir yığın amacı için sonsuz bellek kullanma olasılığını varsaymasıdır. Açıkçası, böyle imkansız bir gereklilik, insanlar doğada biraz daha sınırlı olan gerçek makinelerle çalışan kullanılabilir derleyicileri yapmaya çalıştıklarında sapmak zorunda kaldılar.
Uygulamada, Windows Komut Dosyası Sistemi'ndeki JScript ile nesneleri kullanarak çok iyi şeyler başarabildiğimi öğrendim. (Yeni kod denemek için gereken araç seti Microsoft Windows'un modern sürümlerine yerleştirildiği için çevreyi seviyorum.) Bu ortamı kullanırken, bazen nesnenin nasıl çalıştığıyla ilgili kolayca ulaşılabilecek bir belge bulunmadığını gördüm. Ancak, nesneyi kullanmak o kadar faydalı ki, yine de yapıyorum. Öyleyse benim yaptığım şey, eşek arısı yuvası gibi görünen bir kod yazıp, etkilerini görebileceğim ve nesnenin etkileşime girerken nesnenin davranışları hakkında bilgi edebileceğim güzel bir sanal alanda.
Diğer durumlarda, bazen yalnızca bir nesnenin nasıl davrandığını belirledikten sonra, nesnenin (işletim sistemi ile birlikte gelen) bir hata olduğunu ve Microsoft'un kasıtlı olarak düzeltilmemeye karar verdiğinin bilinen bir sorun olduğunu buldum. .
Bu gibi senaryolarda, programlı olarak yeni sürümler yaratan usta programcılar tarafından yaratılan OpenBSD'ye (yılda iki kez) düzenli olarak (yılda iki kez), 10+ yıldaki "sadece iki uzak delik" ünlü bir güvenlik kaydıyla güveniyor muyum? (Hatta daha az ciddi sorunlar için hatalı yamaları var.) Hayır, hiçbir şekilde. Bu kadar yüksek kalitede böyle bir ürüne güvenmiyorum, çünkü insanlara Microsoft Windows kullanan makineler tedarik eden işletmelere destek veren bir işletme için çalışıyorum, bu yüzden kodumun üzerinde çalışması gerekiyor.
Uygulanabilirlik / kullanılabilirlik, insanların yararlı bulduğu platformlar üzerinde çalışmamı gerektiriyor ve bu, güvenlik açısından son derece kötü bir platform (aynı şirketin ürünlerinin çok daha kötü olduğu bin yılın başlarında büyük gelişmeler olsa bile) .
özet
Bilgisayar programlamanın hataya daha yatkın olmasının ve bilgisayar kullanıcıları topluluğu tarafından kabul edilmesinin sayısız nedeni vardır. Aslında, çoğu kod, hatasız çabalara tolerans göstermeyecek ortamlarda yazılmıştır. (Güvenlik protokolleri geliştirmek gibi bazı istisnalar, bu konuda biraz daha fazla çaba gösterebilir.) Daha fazla para yatırmak istemeyen işletmelerin ve müşterileri mutlu etmek için suni son başvuru tarihlerini kaçırmanın sebeplerinin genel olarak düşünüldüğü gibi, bunun etkisi de vardır. Çok fazla zaman harcıyorsanız, eski bir platformda çalışacağınızı söyleyen teknoloji yürüyüşü, çünkü işler on yıl içinde önemli ölçüde değişiyor.
Sonuç olarak, strlen ve strcpy için bazı kaynak kodları gördüğümde, bazı çok kullanışlı ve popüler fonksiyonların ne kadar kısa olduğuna şaşırdığımı hatırlayabilirim. Örneğin, strlen "int strlen (char * x) {char y = x; while ( (y ++)); return (yx) -1;}" gibi bir şey olabilirdi
Ancak, tipik bilgisayar programları bundan daha uzundur. Ayrıca, pek çok modern programlama, daha az kapsamlı bir şekilde test edilebilecek, hatta buggy olarak bilinen başka bir kod kullanacaktır. Günümüzün sistemleri, kolayca düşünülebileceklerinden çok daha ayrıntılıdır, ancak daha düşük seviyelerde ele alınan ayrıntılar gibi çok sayıda minutinin el sallanması dışında.
Bu zorunlu karmaşıklık ve karmaşık ve hatta yanlış sistemlerle çalışmanın kesinliği, bilgisayar programlamasını, işlerin çok daha basit seviyelere düşme eğiliminde olduğu birçok matematikten daha doğrulamak için çok fazla donanım yapar.
Matematiğin içindeki şeyleri parçaladığınızda, çocukların anlayabileceği bireysel parçalara ulaşırsınız. Çoğu insan matematiğe güvenir; en azından temel aritmetik (veya en azından sayma).
Başlık altında neler olup bittiğini görmek için bilgisayar programlamayı gerçekten parçaladığınızda, sonuçta elektronik olarak yürütülen standartların ve kodların kırılmış uygulamalarına son verirsiniz ve bu fiziksel uygulama, üniversite eğitimi almış çoğu bilgisayar bilimcisinin sahip olduğu mikro kodun sadece bir adım altındadır. dokunmaya cesaret edemiyorsanız (eğer farkındalarsa bile).
Üniversitedeki bazı programcılar veya son zamanlarda mezun olan öğrencilerle, hatasız kodun yazılabileceği fikrine itiraz ediyorum. Olasılığı yazdılar ve bazı etkileyici örneklerin (gösterebildiğim) bazı ikna edici argümanlar olduğunu kabul etseler de, bu tür örneklerin temsili nadir rastgele şanslar olduğunu düşünüyorlar ve yine de sayma ihtimalini reddettiler böyle yüksek standartlara sahip üzerinde. (Matematikte gördüğümüz çok daha güvenilir bir temelden çok, çok farklı bir tutum.)