Foreword  Educators,  generals,  dieticians,  psychologists,  and  parents  program.  Armies,  students,  and  some  societies  are  programmed.  An  assault  on  large  problems  employs  a  succession  of  programs,  most  of  which  spring  into  existence  en  route.  These  programs  are  rife  with  issues  that  appear  to  be  particular  to  the  problem  at  hand.  To  appreciate  programming  as  an  intellectual  activity  in  its  own  right  you  must  turn  to  computer  programming  you  must  read  and  write  computer  programs  --  many  of  them.  It  doesn't  matter  much  what  the  programs  are  about  or  what  applications  they  serve.  What  does  matter  is  how  well  they  perform  and  how  smoothly  they  fit  with  other  programs  in  the  creation  of  still  greater  programs.  The  programmer  must  seek  both  perfection  of  part  and  adequacy  of  collection.  In  this  book  the  use  of  ``program''  is  focused  on  the  creation,  execution,  and  study  of  programs  written  in  a  dialect  of  Lisp  for  execution  on  a  digital  computer.  Using  Lisp  we  restrict  or  limit  not  what  we  may  program,  but  only  the  notation  for  our  program  descriptions.  Our  traffic  with  the  subject  matter  of  this  book  involves  us  with  three  foci  of  phenomena:  the  human  mind,  collections  of  computer  programs,  and  the  computer.  Every  computer  program  is  a  model,  hatched  in  the  mind,  of  a  real  or  mental  process.  These  processes,  arising  from  human  experience  and  thought,  are  huge  in  number,  intricate  in  detail,  and  at  any  time  only  partially  understood.  They  are  modeled  to  our  permanent  satisfaction  rarely  by  our  computer  programs.  Thus  even  though  our  programs  are  carefully  handcrafted  discrete  collections  of  symbols,  mosaics  of  interlocking  functions,  they  continually  evolve:  we  change  them  as  our  perception  of  the  model  deepens,  enlarges,  generalizes  until  the  model  ultimately  attains  a  metastable  place  within  still  another  model  with  which  we  struggle.  The  source  of  the  exhilaration  associated  with  computer  programming  is  the  continual  unfolding  within  the  mind  and  on  the  computer  of  mechanisms  expressed  as  programs  and  the  explosion  of  perception  they  generate.  If  art  interprets  our  dreams,  the  computer  executes  them  in  the  guise  of  programs!  For  all  its  power,  the  computer  is  a  harsh  taskmaster.  Its  programs  must  be  correct,  and  what  we  wish  to  say  must  be  said  accurately  in  every  detail.  As  in  every  other  symbolic  activity,  we  become  convinced  of  program  truth  through  argument.  Lisp  itself  can  be  assigned  a  semantics  (another  model,  by  the  way),  and  if  a  program's  function  can  be  specified,  say,  in  the  predicate  calculus,  the  proof  methods  of  logic  can  be  used  to  make  an  acceptable  correctness  argument.  Unfortunately,  as  programs  get  large  and  complicated,  as  they  almost  always  do,  the  adequacy,  consistency,  and  correctness  of  the  specifications  themselves  become  open  to  doubt,  so  that  complete  formal  arguments  of  correctness  seldom  accompany  large  programs.  Since  large  programs  grow  from  small  ones,  it  is  crucial  that  we  develop  an  arsenal  of  standard  program  structures  of  whose  correctness  we  have  become  sure  --  we  call  them  idioms  --  and  learn  to  combine  them  into  larger  structures  using  organizational  techniques  of  proven  value.  These  techniques  are  treated  at  length  in  this  book,  and  understanding  them  is  essential  to  participation  in  the  Promethean  enterprise  called  programming.  More  than  anything  else,  the  uncovering  and  mastery  of  powerful  organizational  techniques  accelerates  our  ability  to  create  large,  significant  programs.  Conversely,  since  writing  large  programs  is  very  taxing,  we  are  stimulated  to  invent  new  methods  of  reducing  the  mass  of  function  and  detail  to  be  fitted  into  large  programs.  Unlike  programs,  computers  must  obey  the  laws  of  physics.  If  they  wish  to  perform  rapidly  --  a  few  nanoseconds  per  state  change  --  they  must  transmit  electrons  only  small  distances  (at  most  1  1/2  feet).  The  heat  generated  by  the  huge  number  of  devices  so  concentrated  in  space  has  to  be  removed.  An  
Purchased by unknown, nofirst nolast From: Scampersandbox (scampersandbox.tizrapublisher.com)
            







