Why do Drupal Form Builder properties have hash marks (#) in the key?
If you don't add a hashmark you're not setting that property, but are instead defining another level of a render array element. Consider this example:

$form['your_name'] = array(
  '#type' =&gt; 'textfield',
  '#title' =&gt; 'Your Name',
  'title' =&gt; array( // I am an entirely new element, whose key is "title".
    '#type' =&gt; 'textfield',
    '#title' =&gt; 'Your Title',
    '#description' =&gt; 'Example: Sir, Mr, Bossman, Chieftan',
  ),
);


This example is silly, but it should describe why a hashmark is used to set a property. If your question is really "why use a hashmark instead of an exclamation point, an ampersand, or some other random character?", well, I don't know. I've seen the hash symbol used to define properties in other languages and APIs.