What Computer Science concepts should I know? [closed]
What concepts in Computer Science do you think have made you a better programmer?
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:
Language Features
- Pointers & Recursion (Thanks Joel!)
Data Structures
- Linked Lists
- Hashtables
Algorithms
- Bubble Sorts
Obviously, the list is a little short at the moment so I was hoping for suggestions as to:
- What concepts I should understand,
- Any good resources for properly understanding them (as Wikipedia can be a bit dense and academic sometimes).
Solution 1:
Take a look at this blog post by Steve Yegge (formerly of Amazon, now at Google):
- The Five Essential Phone Screen Questions
It goes into some detail about the the five most important concepts that developers should be required to know:
- Basic programming (including recursion, file I/O, formatted output, loops etc)
- Object oriented design (including design patterns etc). You should be able to produce sensible OO designs as well as understanding the concepts.
- Scripting and regexes.
- Data structures -- lists, sets, hashtables, trees, graphs, and so on -- as well as Big O notation and algorithmic complexity.
- Bits, bytes and binary numbers -- how numbers are represented within the computer, and how to manipulate them.
Solution 2:
You definitely should understand the Big-O notation and Big-O estimations of algorithms - what it is, how it is used, why it is important, how you compare two algorithms given their Big-O estimations, how you build Big-O estimations for the simple algorithms.
Solution 3:
I find it a little funny that you're looking for computer science subjects, but find wikipedia too academic :D
Anyway, here goes, in no particular order:
- The relational model: Introduction to Database systems
- Object orientation : Object Thinking
- Complexity and computation theory (think Turing machines and automata): Introduction to theory of computation
- A little compiler design: The Dragon Book, although this might be a little over too in-depth for your needs.
- Operating system concepts: Modern operating systems
- People skills: How to win friends and influence people
- Teamwork: Peopleware
- User interface design: The inmates are running the asylum