Blunder Dome Sighting  
privacy 
 
 
 

Hangout for experimental confirmation and demonstration of software, computing, and networking. The exercises don't always work out. The professor is a bumbler and the laboratory assistant is a skanky dufus.



Click for Blog Feed
Blog Feed

Recent Items
 
Republishing before Silence
 
Command Line Utilities: What Would Purr Do?
 
Retiring InfoNuovo.com
 
Confirmable Experience: What a Wideness Gains
 
Confirmable Experience: Consider the Real World
 
Cybersmith: IE 8.0 Mitigation #1: Site-wide Compat...
 
DMware: OK, What's CMIS Exactly?
 
Document Interoperability: The Web Lesson
 
Cybersmith: The IE 8.0 Disruption
 
Cybersmith: The Confirmability of Confirmable Expe...

This page is powered by Blogger. Isn't yours?
  

Locations of visitors to this site
visits to Orcmid's Lair pages

The nfoCentrale Blog Conclave
 
Millennia Antica: The Kiln Sitter's Diary
 
nfoWorks: Pursuing Harmony
 
Numbering Peano
 
Orcmid's Lair
 
Orcmid's Live Hideout
 
Prof. von Clueless in the Blunder Dome
 
Spanner Wingnut's Muddleware Lab (experimental)

nfoCentrale Associated Sites
 
DMA: The Document Management Alliance
 
DMware: Document Management Interoperability Exchange
 
Millennia Antica Pottery
 
The Miser Project
 
nfoCentrale: the Anchor Site
 
nfoWare: Information Processing Technology
 
nfoWorks: Tools for Document Interoperability
 
NuovoDoc: Design for Document System Interoperability
 
ODMA Interoperability Exchange
 
Orcmid's Lair
 
TROST: Open-System Trustworthiness

2004-07-02

 

Why Learn Assembly Language

[dh:2004-08-31T20:59Z This article is the one that failed to be uploaded to my blog site on July 2, causing my turtle-paced flurry of remedial activity.  I didn't think about it showing up in my RSS feed once I had this blog up and running again.  It seems new because it had not been seen in the feed before.  Nevertheless, the supposedly-posted page at the permalink is still a quarantine page because Blogger has no indication that the July 2nd posting failed.  In the two months since I wrote this, I see some tuning that's needed.  That editing will, with Luck's good favor, have the article be reposted at the permalink too.]
ONLamp.com: Why Learning Assembly Language Is Still a Good Idea [May. 06, 2004].  This Slashdotted blurb by Write Great Code author Randall Hyde is a lengthy paen to exceeding expectations and also understanding the performance that is possible in applications developed with an understanding of the underlying machine. For me, this treatment is a bit overboard.  It works better, in my experience to consider (1) why and how to read machine language, (2) why and how to learn assembly language, (3) and who, what, when, where, how, and why to write assembly language in software delivered to someone else. There is extensive discussion on the article, and numerous trackback links as well, so the article is a great resource. I agree completely that knowledge of machine architectures and good sense of what is probably happening underneath your higher-level programming language are valuable possessions.  It is often useful, as one commenter suggested, to read the assembler that some compilers will produce.  There are also settings where employment of assembly language is required, including computer forensic work and the creation of low-level elements such as BIOS software, Virtual Machine implementations, and certain high-performance library codes. If someone asked me where to go to learn about machine language and how assemblers work, I would have them do something simpler than learn to work the native 80x86 system.  That's a little too hands-free, though hands-on experience is crucial.  I have two recommendations:
  1. MIX First.  Start with Donald E. Knuth's Art of Computer Programming, vol. 1: Fundamental Algorithms (TAoCP) and use one of the simulators that are available for the MIX computer.  Check out the MMIX computer that is being used for later volumes too.  The key takeaway from this treatment is learning to know what the performance of your software is, rather than blindly believing that development tools -- including assembly language -- assure it.  The next level of comprehension involves knowing when enough performance is enough.  For that, you need to know what the software is for and the context of usage that makes a particular level of performance important and sufficient.  Along with MIX and TAoCP, I would develop working familiarity with any popular scripting language for quickly expressing algorithms and learning how to test and apply the valuable computational mathematics related to performance predication and analysis.  That is good preparation for understanding the bridge between higher-level languages and the underlying machine.
  2. VM Next.  Learn a Virtual Machine Language.  My recommendation would be to work with the CLR of the Mono Project, since it follows the public ECMA specifications and interoperates with .NET.  There are ample materials and tools available for working with the Intermediate Language (the VM's "native" machine language), including assemblers and disassemblers.  The use of a VM as an integration and just-in-time compilation vehicle provides for a rich experience.  Experience with the CLR and its Intermediate Language machine is an useful access to how Object Oriented Technology is delivered these days.  Here is an excellent way to comprehend what this important layer provides by sitting between underlying physical machines and the abstractions that are enacted on behalf of higher-level programming systems.
I am not adverse to programming the native machine.  One can't operate at the MS-DOS level forever.  There are also many techniques that are difficult to grasp by starting from bare-bones assembly programming.  Simply put, assembly-language programming doesn't scale efficiently as an exclusive development methodology. It is important, in becoming a proficient developer, to learn what is important as opposed to merely efficient.  Sometimes the opportunity cost of exceeding expectations is just too high.
dh:2004-08-31T21:30Z There is another angle that I must confess.  There are skills that I have mastered around performance and reliability of software that I am not willing to give up.  I am so jealous of my proficiency that I even apply those skills where they are not needed, as continuing practice, rather than allow myself to become careless and indiscriminate.  That sometimes means that there are assignments I must avoid and decline simply because they would cost too much in putting me off my game for what matters to me in the long run.  And it is rare for me to be in a situation, these days, where resort to assembly language is called for.  I see one prospect coming up.  We'll see about that when the time comes.
Oops!  This article failed to be posted back on July 2, and I thought that more-recent postings would refresh the quarantine page that has been sitting in its place since I declared a site-update corruption that day.  Well, no, the feed and the default page were refreshed properly, but not the archive location of this post.  So I am changing it enough so that it will repost, so will its archive page, and unfortunately, so will the site feed.  Then I will fix my development site to not keep putting the quarantine page back on top of the good page!  Announcement, in that great Darth Vader voice: "This is Blunder Dome."
 
Construction Structure (Hard Hat Area) You are navigating Orcmid's Lair.

template created 2004-06-17-20:01 -0700 (pdt) by orcmid
$$Author: Orcmid $
$$Date: 10-04-30 22:33 $
$$Revision: 21 $