Materials, Books, and Topics to Create a Computer Scientist (Updated Apr 21, 2017)
A computer programmer is not guaranteed to be a computer scientist. And a computer scientist may not be a scientist. Some people argue that computer scientists are not really scientists at all. What is science is sometimes not so clear based on many definitions. For example, many physicists I have talked to dislike the normally given version of science (the scientific method [which is only part of science]).
Professors in the majority of my "science" classes did not cover a definition, nor did they mention what of science we were using at the moment -- at least not explicitly. Most of the classes I went through just repeated previously established information with very little skepticism. Of all the courses taken only the biology, physics, and the compilers class addressed aspects of what science entails.
Personally I think computer science (with emphasis in computer science) is closer to mathematics than many other fields. However, computer science does depend highly on the products of physics, chemistry, and engineering. Furthermore, in things like artificial intelligence we employ aspects from neuro science and biology. So, while "computer science" may not fully satisfy a definition of science it does rely heavily from science. It does differ from the "natural" sciences in some aspects as I will cover below.
What is science?
- According to one of my physics professors science is: "First, take a guess. Second, say how much." I would say that his definition is very easy to memorize. Although, it probably disregards many of the aspects that deal with what is considered modern science.
- If one is to say that science is a way of explaining only the current observable universe then that is to say that something is true because it's true. Only assertions of the present and the past are valid. I agree that we cannot fully predict the future with science, as the universe does not have a responsibility to continue behaving in the way that it has. But, the version of science that is used in many fields tends to have some say in predicting what can happen.
Here are some points that cover science:
- You must have a model of how something works. This means that you generally start with observation. From that observation we can break down concepts into smaller pieces, then formulate the model of how it probably works, then join the smaller pieces to see if it can match the real world. This process usually has aspects of deduction and induction. This process must be reproduced by others. For the majority of scientists to accept something one must rely on evidence, and therefore the claims must be testable and put to scrutiny.
- Observations are generally fine for many fields, but not good enough if we are to take some action that can affect the future. The model we created earlier allows us to have an amount of prediction. We can know if the prediction is wrong if the actual outcome differ drastically, we must change the model. If the outcome is close to our prediction but is not spot on then usually we can consider to have some error, but with repeated tests we can gain confidence in the model. It is unlikely that a model is perfect, so we are always open to improvement.
- Like a physicists a computer scientists can model many real-world aspects. But, a computer scientists can model abstractions that go beyond reality. Similarly to mathematical abstractions, computer scientists often generate some weird abstractions of their own. These mathematical abstractions are NOT falsifiable. So, this is one reason why "computer science" is probably not science -- some aspects cannot be tested to be proven false. An example of this, is the following: a rubber tire (real object) has a circle shape (abstraction); you can test that something is not a tire because of their measurable qualities, but what do you do with abstractions? You could test that some shape is not a circle shape mathematically, but you are still dealing with only abstractions -- therefore nothing that is real yet.
I can assume that most scientists at least share the notion that whatever we are doing we are trying to interrogate and explain the universe. But, many aspects of computer science are not locked into the observable universe -- there are a lot of abstractions that are simply in the mind. So, if one argues that if computer scientists are not doing "science" then that is fine. The fact that we can utilize abstractions to eventually produce something that affects reality in the universe is good enough. Just look at the progress achieved since the introduction of computer systems and computer scientists -- amazing isn't it?
Without further due, here's some material.
- You are likely going to need some very basic information. Everything from kindergarten to high-school are building blocks. Yes, many things are useless, but some will prove more useful than others. If you are out of practice with simple concepts a good tool to try out is an ACT Prep service.
- ACT Prep Web Software package.
- Reading and writing are essentials, there is no way around it. In college a big emphasis comes into rhetoric techniques, estimating source credibility, not stealing (plagiarism), and the tedious citing standards. Punctuation, to me, is far less important but some people are grammer nuzis.
- Introduction to Writing
-- The Little Penguin Handbook by Faigley, shows how to cite things.
-- Allyn & Bacon Guide to Writing by Ramage and Bean, the main English book.
- Intermediate Writing Science and Technology
-- From Inquiry to Academic Writing by Greene and Lidisnky.
ART, HISTORY, POLITICS, SOCIOLOGY, PHILOSOPHY, ETHICS, ART
- Technical people are often not very good artists. If you browse many forums you will always find programmers in need of media. Then there are artists that need programmers. It is rare, I think, when there is an individual that is both a great artist and a great programmer.
- It is difficult to determine truth, and often it is said that history is the picture given to the public by those who won. History and politics is dirty business. The value of history is to not repeat previously committed mistakes, the problem is that there is too much of it to be retained in the brain for present and future use. Anyways, these are some of the topics and materials covered.
- Introduction to Visual Arts: The Power of Art by Lewis.
- American Heritage: 1776 by David McCullough.
- Introduction to Sociology: Introduction to Sociology by Giddens and Duneier.
- Ethics and Values: Moral Philosophy by Bulger.
- Global Social and Ethical Issues in Computing: A Gift of Fire: Social, Legal, and Ethical Issues for Computing Technology by Baase.
- Technical ideas are often hard for common people to understand. Saying something like "Apple's iPod has 16GB of memory" was very useless to most common people, but saying "Apple's iPod can hold 1000 songs" is easier to understand. Many great ideas often go to waste because of our inability to communicate, and for this reason public speaking can be useful.
- Public Speaking
-- The Quick & Easy Way to Effective Speaking by Dale Carnegie.
-- There are many more modern books regarding this topic.
- Interpersonal Communication: Interpersonal Communication by Floyd.
- These two fields are some of the most eye-opening that college has to offer. If you are an individual who has a very religious background then it is likely that you will be challenged in what the modern world has discovered, and very little is supported with concepts related to God(s). The support that science has is far greater than what belief systems have, and that's why real scientists begin here.
- General Biology: Essential Biology by Simon and Dickey.
- Physics for Scientists and Engineers 1 and 2: University Physics by Sears and Zemansky.
- Additional: Darwin, Newton, Faraday, Maxwell, Tesla, Sagan, Tyson, Einstein, Bohr, Feynman, Krauss, Coyne, Dawkins, Patterson, Henderson, Pasteur.
- For programming you generally only need to know how to add, subtract, multiply, divide, and know how to do modulus operations. However, for the advanced stuff then matrix multiplication, exponents, functions, and many more math concepts will be useful. Furthermore, if you are to program games then trigonometry and physics may come in very useful. Sadly, for a lot of math courses the word problems tend to be downplayed in favor of repetition of stuff that you think "I'll never use this in real life". The word problems are the most useful in developing a mindset for solving real problems.
- Intermediate Algebra: MyMathLab, is a very likely possibility if you are in college.
- College Algebra: College Algebra by Larson.
- Trigonometry: College Trigonometry by Aufmann and Barker.
- Calculus 1, 2, 3: Calculus by Stewart.
- Principles of Statistics: Statistics: Informed Decisions Using Data by Sullivan.
- Finally we get to do some computer science! A computer scientist understands how computers work, know the limitations and the possibilities. We can speak to a computer in a primitive language that only uses zeros and ones, although this may change with newer developments. A computer scientist is not just a coder, but an individual with a superb tool set. Modern living requires computer science.
- Fundamentals of Programming: Any basic C# book will work because of the C-like syntax.
- Object Oriented Programming: Big C++ by Horstmann and Budd.
- C# .Net Software Development: C# in a Nutshell by Albahari.
- Java Software Development: Core Java (vols 1 and 2) by Horstmann and Cornell.
- C++ Software Development: C++ Primer by Lippman.
- Discrete Math Structures 1: Essentials of Discrete Mathematics by Hunter, or Discrete Structures, Logic, and Computability by Hein.
- Discrete Math Structures 2: An Introduction to Formal Languages and Automata by Linz.
- Database Theory: Databases Illuminated by Ricardo.
- Computer Networks 1 and 2: Computer Networks by Peterson and Davie.
- Computer Organization and Architecture: Introduction to Computing Systems by Patt and Patel.
- Introduction to Algorithms and Data Structures: Data Structures and Other Objects Using C++ by Main and Savitch.
- Software Engineering 1: Software Engineering: Principles and Practice by Vliet.
- Introduction to System Administration -- Linux/UNIX: Unix and Linux System Administration Handbook by Nemeth and Snyder.
- Operating Systems Theory: Operating System Concepts by Silberschatz and Galvin.
- Principles and Patterns of Software Design: Head First Design Patterns by Freeman and Bates, UML Distilled by Fowler.
- Numerical Software Development: Numerical Analysis by Sauer.
- Analysis of Algorithms: Foundations of Algorithms by Neapolitan.
- Analysis of Programming Languages: Modern Programming Languages: A Practical Introduction by Webber, The D Programming Language by Alexandrescu.
- Advanced High Performance Computer Architecture: Any good Computer Architecture book will do.
- Artificial Intelligence: Modern Intelligence: A Modern Approach by Russell and Norvig.
- Compiler Construction: Compilers: Principles, Techniques, and Tools by Aho, et al..
- Additional: Von Neumann, Dijkstra, Babbage, Eckert, Mauchly, Turing, Berners-Lee, Ritchie, Torvalds.
This is enough for a bachelor's degree, but of course there is far more to computer science than this brief list of topics and materials. Learning never ends in a technical field.
- Competitive Programmer's Handbook by Antti Laaksonen.
- Programmer Competency Matrix.
- Khan Academy, contains a wide variety of courses and very useful videos.
- Coursera, variety of technical courses.
- PluralSight, great courses on software, IT, data, architecture, cyber security, and more.
- Lynda, lots of courses, generally for art.
- Teach Yourself Computer Science.