title: What Computer Science concepts should I know?
body: <p>What concepts in Computer Science do you think have made you a better programmer?</p>
  
  <p>My degree was in Mechanical Engineering so having ended up as a programmer, I'm a bit lacking in the basics. There are a few standard CS concepts which I've learnt recently that have given me a much deeper understanding of what I'm doing, specifically:</p>
  
  <p><strong>Language Features</strong></p>
  
  <ul>
  <li>Pointers &amp; Recursion (Thanks Joel!)</li>
  </ul>
  
  <p><strong>Data Structures</strong></p>
  
  <ul>
  <li>Linked Lists</li>
  <li>Hashtables</li>
  </ul>
  
  <p><strong>Algorithms</strong></p>
  
  <ul>
  <li>Bubble Sorts</li>
  </ul>
  
  <p>Obviously, the list is a little short at the moment so I was hoping for suggestions as to:</p>
  
  <ol>
  <li>What concepts I should understand,</li>
  <li>Any good resources for properly understanding them (as Wikipedia can be a bit dense and academic sometimes).</li>
  </ol>