Update1 [6/25/08]: Welcome Stumblers
Update 2 [11/20/08]: I stumbled on this GREAT list of Algorithms, highly recommended reading.
I was looking up a computer science term on Wikipedia the other week and as is wont to happen, one thing led to another and I was about 5 or 6 articles deep on a trail of discovery and research to build up my knowledge.
As I realized I was randomizing myself and getting way off the original track, I decided to start assembling the links in one location for my own reference if not some other geek without the funds for their own degree.
Yes, there’s much more that I don’t have below, I wound up throttling back quite a bit after a while to leave it as is…for now.
History:
- History of computer science
- difference engine
- Wilhelm Schickard
- Ada Lovelace
- Charles Babbage
- Edsger Dijkstra
- Grace Hopper
- Kurt Gödel
- Alan Turing
- Dartmouth Time-Sharing System
- IBM System/370
Extra Credit:
Languages:
- assembly languages
- structured programming
- procedural language
- Fortran
- BASIC
- Python
- Perl
- Java
- C#
- C
- C++
- Lisp programming language
- Pascal
- COBOL
- PHP
- Ruby
- ALGOL 68 (obscure)
- Simula 67 (obscure)
Computer Science Fields:
- Theory of computation
- Operating Systems
- Numerical computation
- Compilers
- Software Engineering
- Databases
- Real-time computing
- Distributed system
- Computer Networking
- Data Communication
- Computer graphics
- Artificial Intelligence
- Multimedia
General CS articles:
- Abstraction (computer science)
- address space
- alphanumeric code
- array
- artificial intelligence
- atomic
- big endian
- binary tree
- bit array
- buffer overflow
- call stack
- Cheney’s algorithm
- Class (computer science)
- compiler
- computability
- computation
- computational complexity theory
- computer programming
- Concurrency (computer science)
- context switching
- Coupling (computer science)
- cryptography
- dangling pointers
- data
- data structure
- deadlocks
- Design pattern (computer science)
- Digital Revolution
- dynamic memory allocation
- exceptions
- exploits
- function
- function prototype
- Garbage Collection
- halting problem
- Hashing
- Heap overflow
- heuristic
- Heuristic algorithm
- Information Age
- Inheritance (computer science)
- Instruction (computer science)
- Integer (computer science)
- Kernel (computer science)
- Library (computing)
- linked list
- little endian
- Lock (computer science)
- malloc
- memory allocator
- Memory leak
- Memory management
- memory pool
- Method (computer science)
- Microsoft .NET Framework
- Modula-3
- Object (computer science)
- object inheritance
- object-oriented programming
- opcode
- paged memory
- Persistence (computer science)
- Polling (computer science)
- polymorphic code
- polymorphism
- process
- Process (computing)
- programming language theory
- quantum computing
- real-time
- Reflection (computer science)
- Reversible computing
- scheduler
- semipredicate problem
- serialize
- shared memory
- software engineering
- sorting algorithm
- Stack buffer overflow
- stack frame
- Standard Template Library
- state
- String (computer science)
- struct
- syntax
- system call
- system call
- thread
- type inference
- virtual memory
- void pointer
- Weak reference
- Whitespace (computer science)
Mathematical foundations
- Mathematical logic
- Boolean logic and other ways of modeling logical queries; the uses and limitations of formal proof methods.
- Number theory
- Theory of proofs and heuristics for finding proofs in the simple domain of integers. Used in cryptography as well as a test domain in artificial intelligence.
- Graph theory
- Foundations for data structures and searching algorithms.
- Type theory
- Formal analysis of the types of data, and the use of these types to understand properties of programs, especially program safety.
- Category theory
- Category theory provides a means of capturing all of math and computation in a single synthesis.
- Computational geometry
- The study of algorithms to solve problems stated in terms of geometry.
- Numerical analysis
- Foundations for algorithms in discrete mathematics, as well as the study of the limitations of floating point computation, including round-off errors.
Theory of Computation:
- Automata theory
- Different logical structures for solving problems.
- Computability theory
- What is calculable with the current models of computers. Proofs developed by Alan Turing and others provide insight into the possibilities of what can be computed and what cannot.
- Computational complexity theory
- Fundamental bounds (especially time and storage space) on classes of computations.
- Quantum computing theory
- Representation and manipulation of data using the quantum properties of particles and quantum mechanism.
Algorithms and data structures
- Analysis of algorithms
- Time and space complexity of algorithms.
- Algorithms
- Formal logical processes used for computation, and the efficiency of these processes.
- Data structures
- The organization of and rules for the manipulation of data.
Programming languages and compilers
- Compilers
- Ways of translating computer programs, usually from higher level languages to lower level ones.
- Interpreters
- A program that takes in as input a computer program and executes it.
- Programming languages
- Formal language paradigms for expressing algorithms, and the properties of these languages (e.g., what problems they are suited to solve).
Concurrent, parallel, and distributed systems:
- Concurrency
- The theory and practice of simultaneous computation; data safety in any multitasking or multithreaded environment.
- Distributed computing
- Computing using multiple computing devices over a network to accomplish a common objective or task and thereby reducing the latency involved in single processor contributions for any task.
- Parallel computing
- Computing using multiple concurrent threads of execution.
Software engineering:
- Algorithm design
- Using ideas from algorithm theory to creatively design solutions to real tasks
- Computer programming
- The practice of using a programming language to implement algorithms
- Formal methods
- Mathematical approaches for describing and reasoning about software designs.
- Reverse engineering
- The application of the scientific method to the understanding of arbitrary existing software
- Software development
- The principles and practice of designing, developing, and testing programs, as well as proper engineering practices.
System architecture:
- Computer architecture
- The design, organization, optimization and verification of a computer system, mostly about CPUs and memory subsystems (and the bus connecting them).
- Computer organization
- The implementation of computer architectures, in terms of descriptions of their specific electrical circuitry
- Operating systems
- Systems for managing computer programs and providing the basis of a useable system.
Communications:
- Computer audio
- Algorithms and data structures for the creation, manipulation, storage, and transmission of digital audio recordings. Also important in voice recognition applications.
- Networking
- Algorithms and protocols for communicating data across different shared or dedicated media, often including error correction.
- Cryptography
- Applies results from complexity, probability and number theory to invent and break codes.
Databases:
- Data mining
- Data mining is the extraction of relevant data from all sources of data.
- Relational databases
- Study of algorithms for searching and processing information in documents and databases; closely related to information retrieval.
- OLAP
- Online Analytical Processing, or OLAP, is an approach to quickly provide answers to analytical queries that are multi-dimensional in nature. OLAP is part of the broader category business intelligence, which also encompasses relational reporting and data mining.
Artificial intelligence:
- Artificial intelligence
- The implementation and study of systems that exhibit an autonomous intelligence or behaviour of their own.
- Artificial life
- The study of digital organisms to learn about biological systems and evolution.
- Automated reasoning
- Solving engines, such as used in Prolog, which produce steps to a result given a query on a fact and rule database.
- Computer vision
- Algorithms for identifying three dimensional objects from one or more two dimensional pictures.
- Machine learning
- Automated creation of a set of rules and axioms based on input.
- Natural language processing/Computational linguistics
- Automated understanding and generation of human language
- Robotics
- Algorithms for controlling the behavior of robots.
Visual rendering (or Computer graphics):
- Computer graphics
- Algorithms both for generating visual images synthetically, and for integrating or altering visual and spatial information sampled from the real world.
- Image processing
- Determining information from an image through computation.
Human-Computer Interaction:
- Human computer interaction
- The study of making computers and computations useful, usable and universally accessible to people, including the study and design of computer interfaces through which people use computers.
Scientific computing:
- Bioinformatics
- The use of computer science to maintain, analyse, and store biological data, and to assist in solving biological problems such as protein folding, function prediction and phylogeny.
- Cognitive Science
- Computational modelling of real minds
- Computational chemistry
- Computational modelling of theoretical chemistry in order to determine chemical structures and properties
- Computational neuroscience
- Computational modelling of real brains
- Computational physics
- Numerical simulations of large non-analytic systems
- Numerical algorithms
- Algorithms for the numerical solution of mathematical problems such as root-finding, integration, the solution of ordinary differential equations and the approximation/evaluation of special functions.
- Symbolic mathematics
- Manipulation and solution of expressions in symbolic form, also known as Computer algebra.
Latest posts by Andy (see all)
- U.S. Navy Has Patents on Tech It Says Will ‘Engineer the Fabric of Reality’ - February 5, 2021
- The Best Features You Can Find on An iPhone in 2021 - January 25, 2021
- Understanding Online Slots RTP - January 25, 2021
Nice article.. 🙂
im by no means a comp e, cs or otherwise but with a science background i’d be really curious to run a study, considering the near endless debate about self-learning in the information age…
let’s say you took this curriculum, or created a curriculum comparable to the material at a prominent university for the subject (obviously you would have to control for self practice by some means or measure in the variable set to balance the labs, assignments, etc). then have these folks take the certification/bar/board/etc. that college grads would take and see who’s scores end up higher.
on a completely separate note, not to say self-taught is by definition a different kind of thinker, but the need for a creative talent becomes more favorable when you account for the risk to be outsourced. another consideration- how many classes would you never have taken that later provided more breadth and depth that you never would have recognized prior?
great page, great debate, thanks!
That’s very true my fren, i also did learn a lot from wikipedia and did get job learning wikipedia… Bravo WIkipedia…
Regards,
Simple
I looked at the title and thought it was a joke LOL
A lot of wiki answers are very incorrect or inaccurate.
It is true you dun need a degree always…
But Wiki is not going to help lol.
Some is accurate but they have a lot of contents that is very inaccurate.
If I was to go and search for ”God” on wikipedia would that mean I have understood the whole idea and ideal of God ? That is just silly. Philosophers and scholars have been trying to come up with that answer for thousands of years.
You couldn’t possibly be an expert by reading every single wiki article on the NET and these articles are constantly changing.
To be a expert one must do extensive studying (years) and real hands on experience.
@ Henk …
”First, you’ll have to establish your own order of learning stuff – if you learn about, say, polymorphism before you learn the basics of OO programming, you won’t get it and, more importantly, be discouraged”
Object Oriented is not always the preferred first choice in my experience. Why ? It handles a lot of different styles of coding, which can leave a newbie first time confused, especially if they’re new to computers in general.
OOP is only recommended for Coders who need to build, manage, structure big projects.
First one, learns the key basics, syntax wise and parameters.
All programming languages are based on a similiar syntax just different styles and procedures
First language I recommend is [Procedural programming] ”Pascal” or standard ”C” Which focus’s a bit more on the algorithms and data structures.
this one is the best…..
Wow – thanks so much for this. You must have put a lot of work into it. I’m doing an IT Diploma – your references will be referred too I promise you.
Thanks so much again.
True story folks. My second year at a major university I took a programming course just because I was interested in it. Several times during the semester when the Prof. was asked a question (like how to add a print function to a program) we were told to just Google it. Well I did Google it, the whole of the course actually. Code that we were supposed to be writing (copying from textbook) as our assignments readily available to copy and paste. Got an A in the class.
Wow Chris, it sounds like you got hosed with a Prof that didn’t care, that’s sad.
Excellent article!
Didn’t read the comments, so this may have already been posted: Didn’t see encapsulation on the list, and that’s a pretty important concept.
To the individuals claiming that Wikipedia is not a reliable source: Remember, it was written and peer reviewed. Does that make it 100% accurate? No, but you shouldn’t outright reject it just because you don’t like it. CS is 100% independent research, which is why self-taught programmers have a leg-up on those who are good students, but bad programmers. If you want to solve all programming issues without any online research and waste 20 hours on something I spend 5 minutes on, go for it and watch while I get promoted. Okay, let’s be honest; you’ll probably get promoted because everybody thinks you’re a hard worker even though you’re stupid.
IT TOO BAD MOST PEOPLE NEED A DIPLOMA OR DEGREES. I DONT HAVE ANY, BUT I’M THE ONLY PERSON ON EARTH THAT FIGURES OUT SOLUTIONS TO NATURE’S DISASTERS AND HAVE BEEN FREELY GIVING EACH AWAY TO THOSE IN NEED WORLDWIDE AND BEING HONORED FOR IT BY WHO’S WHO SOCIETIES FROM SOUTHERN FLORIDA TO NORTHERN NEW YORK STATE, MAN OF THE YEAR AND MY PICTURE IN STRATHMORE’S WHO’S WHO SOCIETY, NOW MY GLOBAL TEAMS ARE USEING MY PROCESS TO ATTEMPT TO DELETE GLOBAL WARMING. NOW A SOLUTION TO GROW 4 TIMES THE AMOUNT OF FOOD PER FARM PER YEAR. MIKE
EARTHQUAKE/QUAKE RELATED TSUNAMI SOLUTION, FIRE, FIRE CONTAINMENT IN 96 HOURS. FAST FLOOD RELIEF, FIRE/SMOKE SOLUTION, HURRICANE, TORNADO, TYPHOON, CYCLONE, GLOBAL WARMING. FARMING 4 TIMES MORE FOOD PER FARM, PER YEAR. TREE/ TIMBER 30 YEAR GROWTH IN 12 TO 15 YEARS. AS IS PEOPLE IN 44 COUNTRIES HAVE IMPLEMENTED MY GLOBAL SOLUTION 42 MONTHS AGO TO KEEP ALL THE OCEANS DOWN UNTIL MY TEAM IS ABLE TO DELETE GLOBAL WARMING. I HAVE ONE SOLUTION THAT WILL TAKE 4 CONTINENTS AND TURN THE ECONOMY AROUND FOR THE BETTER FOR ALL CONCERN, BUT ITS COSTLY. MIKE
Yes, much of the content on Wikipedia can be inaccurate, however, intelligent use of Wikipedia is not about finding the Wiki article and reading it. It is about using Wikipedia to find various sources of information.
Information that is more easily acquired or more common knowledge tends to be rather accurate on Wikipedia due to peer review limiting the opportunity for nonsense being permitted. Even with the more accurate articles, it is best used to find larger and more in depth sources of information.
Point of note, the vast majority of textbooks are assembled by peer review. Their information is not always accurate either. At least with Wikipedia, we have a source of fluid information which can be updated or corrected as information warrants.
I believe Wikipedia is a very effective gateway to a plethora of information, or should I say Wikipedia is a plethora of gateways to a plethora of information.
Who needs a medical degree when there’s webmd?
Here’s a list of articles I found;
Looks like I’m 5 years late to seeing this article! I came to it through…Wikipedia; checking the discussions on the Hello, World program. I’ve scanned through the majority of of the responses to this article. From the responses I’ve read I agree with the ones posted by Tina.
I have an Associate’s degree in Computer Technology and working on my BS.. in Computer Science; mind you I started in 1997 (with working full-time and health issues, my degree study has fanned out futher than I planned). I actually started my B.S. first before the Associate’s. The majority of my professional career has been in higher education. It is really amazing that I’ve been able to have not one, but several full-time positions in the IT field and/or doing IT work while working on my B.S. that are not workstudy and/o internships, even though I did a workstudy position in the college IS dept that I got my Associate’s degree from during my time working on that degree. The positions I’ve had in higher ed ranged from managing college/university computer lab to working with professors and academic divisions to assist them with helping their students use the technology that they use for their studies *like desktop publishing programs to general application programming for non-CS majors to gathering information from academic databases).. The problem many professors I’ve worked with had with Wikipedia when it first became operational, was that their students would go to Wikipedia, reference it, and think it was the end-all be-all to the information they nedded. I believe Wikipedia is a very good place for information..BUT, it’s where you go to START..not to END.
Yes, you can get information from Wikipedia about CS…but it does not teach you or prepare a person to apply the knowledge. And I agree that WIkipedia information isnt always correct, the great purpose for it being peer-reviewed. The problem is the persons who do the reviewing may not have the actual knowledge and experience to post correct information or to correct incorrect information. CS is a broad title for a large set of areas. And it really gets to me that a programmer, software developer, etc is a CS person. The problem is that all of these ambiguous connections are due to people who do not understand CS. Even the work I’ve done isn’t true CS, it’s been more IT; IT is basically the application side of CS in the non-science world. I may work in IT, but my mindset, my passion, my interest is in CS.
What’s so ironic and funny yo me is that people fail to realize or even know that self-taught programmers (for example) did get all of theor knowledge by being self-taught. Mark Zuckerberg, Bill Gates, Steve Wozniak, Marc Anderssen, and many others, they were CS, Engineering, Physics, etc majors. They may have started off self-taught, but they had CS education as well. Even the movies that see about hackers, one that comes to mine the move Hackers, high school kids who took a programming class. I’ve had classes with many self-taught computer persons (whether programming, networking, etc). When they took a class, and especially if it was an advanced class..they did terrible. Why? Because they never had a grasp of the basic fundamentals. Yes..you can gather information from Wikipedia about advanced CS topics and try to learn them. But, as another commenter said, if you don’t understand the fundamental first, you really aren’t learning anything. CS, like any of the sciences, isn’t just about learning knowledge…you also have to be in a certain mindset..thinking logically. Sure, you can looking up how to write a computer program. . But, will you understand the logic of it? Can you understand how to debug it if it doesn’t compile correctly, ot it runs in a way that it isn’t supposed to?
These are just some of the deep discussions about this topic that have gone on forever. And it’s a very good dicussion to have the self-taught persons of today are not the same as the self-taught persons who work with computers in the past decades.
This is amazing! Thank you for taking the time to put it together.
Thank you for your info. I will share it for my friends.
Big thanks to you for sharing such great information.