June
21

Get info

Update1 [6/25/08]: Welcome Stumblers & Reddit readers!

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:

Extra Credit:

Languages:

Computer Science Fields:

General CS articles:

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:

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.

Related posts:

  1. Computer Science Is No More About Computers Than Astronomy Is About Telescopes
  2. History of Computer Chess (video)
  3. Word of the Week: Quine
  4. Speech In The News
  5. News Links: From Computer Science To Pirates!

Related posts brought to you by Yet Another Related Posts Plugin.

113 Comments

An excellent collection! Everyone should bookmark this page.

Wikipedia has been my constant companion throughout undergrad and grad school, but it’s hard to get a big picture when doing the random walks like you described at the beginning. I wish I’d had this list four years ago!

Thanks for the comments fellows. I’ll definitely be falling back on this post over time to continue my education. :)

Tons of links to wikipedia computer science pages, categorized into common groups to help those that are self training in the subject or just want to learn more.

[...] Who Needs aComputerScience Degree When There s Wikipedia? [...]

[...] Who Needs aComputerScience Degree When There s Wikipedia? [...]

I have to agree with the sentiment that pretty much everything you learn in a computer science course can be easily found on the internet, BUT!

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.

Second, what would make employers hire you during a job interview: “I’ve got a Master’s degree in computer science from an X-year education at renowned university Y” OR “I’ve spent a few days looking up articles on Wikipedia”? I’d go for the first one.

Not only would it give at least a basic guarantee of actual knowledge, but it would also show that the possible employee is both willing and able to learn, to be able to handle himself in a team-based environment (i.e. group projects), and that he has the determination to spend up to 6 years or more learning a certain job type, something you can’t be sure of when someone has spent some time looking on Wikipedia, since all of the above articles can be read in probably a week or so.

Not only what Henk says, but the biggest thing missing from reading Wikipedia is practical application.

About half of the computer science people I’ve asked have agreed that programming is more an art than a science. You need to be able to conceptualize the final result and be able to understand the steps to get to it.

We’re all correct! :)

At the top of the article i link to henk’s article here, continuing his train of thought left in the comment above: http://greatjustice.info/university-versus-self-taught .

If the purpose of the self training is to get a job as a coder, then you absolutley positively have to code. Night and day. You need the experience and the passion. For a self taught person just getting started i highly recommend downloading the free version of Visual Studio from MSDN. I also recommend leveraging the many online tutorials at the VS site on MSDN, watching the videos then downloading the projects and coding right along with the tutorials.

There’s much more after that of course but i think we’re all in agreement here that simply reading Wikipedia isn’t going to get you a job. :)

SORRY! wikipedia is not notable!

you fail.

ps> i edit wikipedia all the time and i put in bullshit

As soon as I read the title I wanted to write a comment, but Henk pretty much covered everything.

This is way cool, just as cool as eating POOP!

if jas really does write bullshit on wiki then he is one of the pinheads we need to get off the internet. “Ha ha ha I mislead people using a reputable resource. Idiots” What’s your game, pinhead?

Anonymous 21/06/08 @ 8:44 pm

Hm, Joey, I didn’t realize you are someone who greatly enjoys eating fecal matter or is enamored with the action of doing so.

Pretty nice index. You should definately add Perl to the language list. Also, there’s no article for ‘internet computing’. I’m not sure what that refers to.

Getting lost in wikipedia seems to be my favorite hobby these days.

sure, wikipedia can tell you the syntaxes for the various languages, but wikipedia knows nothing of the real world, but its not a substitute for real human to human teaching, for the same reason that you don’t just turn up on the 1st day of a semester, get handed a textbook, and go home and study the textbook for 6 months.

Speaking as someone who is actively studying a computer science degree, and as someone who regularly compares and supplements his lecture notes with the information on wikipedia, I have to say, wikipedia is severely lacking. I have hundreds of pages on notes relating to the study of one computer language alone, where wikipedia has the equivalent of maybe 5 or 10 pages, which may or may not relate fully.

wikipedia cannot teach you teamwork, wikipedia cannot set you assignments, wikipedia cannot share with you the same insights you get from interacting with real people who have been in the business for longer than I have been alive. wikipedia can’t inspire you, it has no personality.

wikipedia cannot provide feedback, wikipedia can only help you to copy and perpetuate the ideas of others.
We don’t need an army of clone programmers, we need innovators, we need people who have been taught how to solve problems, not given a catalogue of all the current known solutions, because what happens when wikipedia doesn’t have the answer, and there’s nobody left to add to the entries. The knowledge stagnates, and progress stops.
If you can’t understand the information you find on wikipedia, there is nobody there to explain it.

Begin self taught at anything is extremely impressive, and I’m not saying it isn’t possible to teach yourself something and become very proficient at it, but it is a rare gift to be able to truly do this.

Computer programmers, computer scientists, are not just tools, people with an encyclopedia of syntax in their heads, to whom you issue the order to code, they need to have a deep understanding of their field, and to understand such a wealth of knowledge as that which applies to computing, you need help from people who already know. To learn and understand everything that has come before, even within the scope of only one programming language, alone, would be almost impossible, and would take far longer than the 3 years in which a computer science degree can teach you far far more.

Great comment Dan, thank you. You make a good case to get a formal education as opposed to self training.

Zach, thanks for pointing out Perl (added) and that bad link (removed).

Hey, good find Pete! The intent of that page and my sets of links appears to be the same. Looks like there’s quite a few dupes, but there’s many more missing on that page, perhaps we should merge some of the links here into that page? The downside is that, like my page here, it turns into more of a glossary than anything else.

The world has changed a lot in even the past 5 years.

College is little more than a business.
They sell you information and, if you can learn it, give you a paper that will make it easier to get a job to get a house…whoo!

If someone wants to learn something…its online right now, in great detail for FREE. The internet is the greatest thing ever.
Its not just for porn, ebay and Myspace. At least for some people.

I think its more important to an employer to hire someone who teaches themselves.
It shows they have a real interest in the subject. Often people get an education just to make mommy and daddy proud…thats BS

There less and less control over the worlds information.
-and if you think a lot is online now, imagine the (near) future.
Its an exciting thought. Thank you technology.

Down with college! Up with Internet!

This is all a collection of dick and shit, eat cock and let it ride in your mouth bitches….

That’s a great collection of links, thanks ! I love wikipedia, but of course one does need to be watchful for junk that is sometimes in there.

Cool links. I agree that knowing how to write code is one thing, writing code is another. It’s about solving problems. Having said that, you have to respect the programmers who are self-taught and who actively write programs to sell or for their own utility. The internet is computers, so it makes sense to learn about computers there and not in some dry, dusty classroom. I think this is the essence of being a hacker (in the original sense of the word).

Wikipedia is a good reference to refresh memory, but real
learning and discovery happens in that ‘aha’ moment when
one mentally grapples with a non-trivial problem and
comes up with a non-trivial solution.

Even though you can pretty much learn everything you need to off the Internet, it is very hard to learn computer theory without going to lectures and classes where you are forced to take examinations and write papers to get the material. If you are a self-starter and you can make yourself interested in the material, more power to you. But only in school will you get a broad scope of all the technologies to pick up and learn in the future. Sometimes you just need that extra push, then I guess you can drop out ;-)

I cannot say that I’ve read all comments deeply, but what I can definitely say is that learning stuff from Internet is no more different than going to library than *going and searching the books yourself*.
The difference is that you don’t have Google handy in case it becomes difficult to find smthing.
The degree is a pro because someone acknowledged your quite definite skills.
Who can do the same when you have spent some time surfing the Internet.
BTW, how many graduated students do you think could achieve their degree self-studying in the Internet and in how much time? I think the answer would be “a little”, and here you get “2 of 20 in the last 4 years”

Also I agree with Dan that what is more important over knowledge is a teamwork, sharing and communication with other humans, that cannot be experienced over the Net.

It would be a sad world if anyone was just sitting near the PC. When you enter a college, it’s like your life is changing, and you LIVE…, again when you graduate, you go through the same and this is what can’t be done in front of the monitor.

Yeah, nice list you’ve got.

But one can only rely on this materials after he/she already KNOWS what’s CS is all about.

‘who needs a computer science degree whtn there’s wikipedia?’
….

yeah, cause you know…wikipedia is the most accurate, comprehensible, reliable information source on the internet. especially given that it’s edited by users.

by the way, i wonder how many ‘experts’ will edit out these entries you liked to? just for the fun of it.

Hi jake, thanks for the feedback. Am i concerned that some random maliciousness will occur on anything i’ve linked here, just to prove a point? naw, I’m not worried, neither should anyone else. I’ve seen the community within wikipedia resolve those often enough.

Am i worried that just because i linked to these it’s attracting a certain element to edit out these entries within Wikipedia? I wasn’t, until you put that idea out there for someone to pick up :-)

Seriously though, you make a valid point in that the trustworthiness of the articles on wikipedia may not be as great as what you get in a text book or in a classroom. But for free content, is this acceptable? It depends on what you want to do with that information. If it’s to use as the foundation of an education to decide on a career course, then I would say that anyone that deems themselves intelligent and well rounded enough to launch themselves towards CS as a career opportunity is probably already educated and informed enough to decide for themselves how they leverage the information gleaned from free sources on the internet.

[...] Geeknews » Who Needs a Computer Science Degree When There’s Wikipedia? (tags: computerscience cx) [...]

[...] Geeknews » Who Needs a Computer Science Degree When There’s Wikipedia? (tags: education computer programming wikipedia computer-science) [...]

I have bookmarked it.

[...] Geeknews » Who Needs a Computer Science Degree When There’s Wikipedia? (tags: article articles blogs computer computers computing cool education classes cs computer-science wiki wikipedia programming) [...]

[...] Who Needs a Computer Science Degree When There’s Wikipedia? (tags: education learning list wikipedia) [...]

There’s always some Negative Nancy out there who has to chime in about how inaccurate Wikipedia is. It’s so passe. How about a new article…”Who Needs a Computer Science Degree When There’s Books.” I’m sure some dullard will find something wrong with this idea as well.

Quote:
“How about a new article…”Who Needs a Computer Science Degree When There’s Books.””.

Hahahaha! Thanks Brady, I love it.

[...] Geeknews » Who Needs a Computer Science Degree When There’s Wikipedia? (tags: toread programming computing computerscience wikipedia reference) [...]

I would like to say thanks for writing this and inspiring me. Thats a great list of computer science topics found on wikipedia

-w

Yeah its okay that CS is there on wikipedia, but same is true for Mechanics, Electronice, Civil engg.. right ?

[...] Who needs a computer science degree? [...]

Great comment Dan, thank you. You make a good case to get a formal education as opposed to self training. Excellent page every one should bookmark this page.

richard b 23/06/08 @ 4:37 am

I find the notion that you can replace a good Computer Science degree with wikipedia unimaginable. Currently I am a Java Developer with a large bank. I am still thankfull 12 years after my degree for the knowledge I gained during my course. While I admit that you can probably find everything online now (The online CS MIT resources are fantastic) it would take so much longer than 3 years to get the same depth of knowledge and understanding if not presented to you by someone with complete mastery of their field. I just don’t understand where people are coming from when they say a Computer Science degree isn’t necessary. I suppose it doesn’t make much difference if your blinkered view of the world involves programming in a high level language (e.g. Java) in a corporate environment and you consider it just a job.

[...] at DZone, I saw an article titled “Who Needs a Computer Science Degree When There’s Wikipedia?“. It suggests that you can learn as much from Wikipedia as you can by pursuing a formal [...]

or you can browse through Wikipedia categories such as http://en.wikipedia.org/wiki/Category:Computer_science. There many other relevant categories.

I’m putting together an online class called “Learn CS!” - it’s at http://learn-cs.pbwiki.com/ and leverages Wikipedia content, books, other online resources, and curriculum from Stanford, MIT, and others. Let me know what you think.

Perhaps you could spruce up: http://en.wikipedia.org/wiki/Portal:Computer_science ?

Your collection and the actual Wikipedia collection seem to have a lot in common. They do not have a history section, however.

[...] Boot Process Diary of a failed Startup Who needs a Computer Science Degree when there’s Wikipedia Programmer Insecurity Metaclass Programming in [...]

I’ve been graced with a (relatively) large amount of comments on my own blog, and apparently, most of the posters on there disagree with my sentiment that self-educated programmers are not as good (or, more strictly speaking, not as likely to get hired and not as common) as those with an actual degree. And it seems that, at least on here, there’s a couple of people that actually agree, although that more relates to Wikipedia.

In my opinion, Wikipedia is a very valuable source of information, offering large amounts of useful information concerning loads of subjects, ranging from computer science to history to whatnot. However, as is also stated in one of the comments here, it simply does not beat experience. As I’ve said (either on here or on my own blog), you can read through all of the above articles in about a week, but that does not make you a computer scientist, programmer, or whatnot, it takes loads of experience - as also stated on here -, loads of putting the theory into practice.

On a university, and the people that finished it, you have at least some guarantee that the ones that finish it are able to put that knowledge into practice. Of course, it also depends on the university itself, and its policy for testing people. On my own uni, for example, people are assessed individually at the end of a project, so that they have to be able to prove they know their stuff, in terms of programming and, probably more importantly, the train of thought behind it, and/or the design of the program itself.

A large amount of young, self-taught programmers have only themselves to answer to. They won’t get grades or their code checked by others unless they work on, for example, open source projects with patient co-programmers that explain things to them such as the basics of OO design and whatnot. There’s quite literally hundreds of blogs out there by self-taught-wannabe-programmers that write tutorials on various subjects, that teach others how NOT to solve a particular problem. I have a serious problem with such people, since, because they’re not often told they’re doing it wrong, they’re teaching other people how to do it wrong, which results in the average knowledge and skill of all programmers to decrease.

But yar. I need a computer science degree, books, AND wikipedia, in order to become and remain a good programmer / software engineer / computer scientist. That, and you won’t be allowed put a neat title to your name if you’re self-taught.

[...] Who Needs a Computer Science Degree When There’s Wikipedia? [...]

[...] all the information available online do you really need a computer science degree?read more | digg [...]

Hello there,

I’m just the guy you’re talking about. High-school education, no college, and 100% self taught. I’ve developed a number of profitable apps and websites. A pretty good track-record for someone with no education :)

I think I am better than or equivalent to most degree-holding computer programmers with similar experience.

Cheers!

it’s going to be funny when some sap believes this post to be true and pulls up wiki during a real world assignment and gets fired on the spot.

[...] Geeknews » Who Needs a Computer Science Degree When There’s Wikipedia? (tags: wiki cs) [...]

Hey, I love the fact that you marked ALGOL 68 and Simula 67 as being obscure, but didn’t do so with LISP.

Just kidding.

I don’t believe that university degree is worth that much as some of the people here do (Henk, etc.) In my opinion, the most valuable asset a young programmer can have is his (I’m assuming here of course; her as well) attitude towards programming - whether it’s his passion and he loves to code at nights or not. Most people go to the university to get a degree and a good job. Sure, go ahead, learn C, asm, OO, whatever, write your papers, pass your exams. But most of those people will _never_ have what makes a true and unique programmer - the will to evolve and continuously learn new things and the passion for programming as an art.
You can either be a craftsman who can duplicate what he was taught and he leaves work at 5:02pm or a passionate artist who will stay up late not just because the deadline is close but because he want to solve the problem and it’s extremely satisfying for him.

Now, I’m not saying that people with a degree can’t have it, it’s just the degree doesn’t determine whether one is a good programmer. IMHO, there’s a bigger chance that a self-taught enthusiast, who contributes to open source applications or has written applications by himself (and can prove it with *good* code) is often worth much more than a person with MS in CS who’s interested in gardening.

Anonymous 24/06/08 @ 3:22 am

“I think its more important to an employer to hire someone who teaches themselves.
It shows they have a real interest in the subject. Often people get an education just to make mommy and daddy proud…thats BS ”

Yeah because sitting on your arse in front of wikipedia for some weeks shows way more dedication than actually going full-time college for 3 or 5 years.
Wait…

Nice post… I like it like Milk and Company

I went through an extremely theory based Computer Science undergraduate program and am in graduate school part time, pursuing a Masters in Computer Science. I’ve also worked in the financial sector for about 5 years developing software. One thing I’ve noticed is that people seem to use the terms Computer Scientist and Software Developer interchangeably. Software Development is only a small subset of Computer Science and I feel as though the actual Scientists (researchers, academics, etc.) are completely overlooked.

I think when people say “I taught myself to write really great, efficient, loosely coupled apps” they are not self taught Computer Scientists but self taught Software Developers. I have met some brilliant self taught Software Developers… but few of them have had a handle on the math or theory behind what they are doing. Concepts like Turning Machines or The Halting Problem are completely foreign to these developers. It doesn’t make them a poor developer by any means but I do feel like it prevents them from being a true Computer Scientist.

At the same time, I have also met many academics who are just not equipped to handle the challenges that a Software Developer faces on a daily basis (client expectations, trade offs between deadlines and efficiency). However, the beauty that these academics find in problems like the NP-Completeness is almost poetic.

With that said, I do believe it is possible for someone to become a self taught Computer Scientist. However, I don’t believe Wikipedia is the answer. Will Wikipedia really get you through the discrete mathematics needed to get a handle on true theoretical Computer Science? I highly doubt that. However, I don’t think a professor standing in front of a classroom is really all that necessary. I think there are people out there who have the discipline to learn this stuff on their own. One of my graduate professors was actually one of these people. However, I think people who want to learn “Computer Science” in order to get a job rarely care to also become a borderline mathematician.

I think a lot of times academics and practitioners in a given field are lumped together and an incredible amount of friction builds up between the two. It offends me to my core when I hear wonderful coders call themselves Computer Scientists because it makes me feel Computer Science is being reduced to a subset of what it actually is. Those are just my two cents, hopefully I didn’t offend anybody.

Before the web, you could just as easily say ‘who needs a degree when there are books?” and give a list of the relevant textbooks in a field, i.e. a syllabus. The difference is that wikipedia makes the knowledge more accessible and uniformly presented.

However, it’s easy to get lost and discouraged in trying to assimilate knowledge by simply reading, since so much practice is involved. The classic conundrum in teaching first-year CS is how much programming vs theory to introduce: if a class focuses all on programming, students tend to conclude that’s all CS is about. If you focus on theory, they lose interest and miss the thrill of building something.

A good teacher knows how to create class discussion about this interplay. A great teacher knows how to get the class to feel they have realized the connection between theory and practice themselves.

Reading a bunch of textbooks or wiki blurbs really is no substitute for learning CS in a group setting from a good teacher.

Great comment Tina, people do equate computer science with software development. I think this is because the degree has become so ubiquitous today, along with software development that people (sometimes myself) unconsciously assume one means the other, or CS degree always leads to SW development which is not necessarily the case. I’m sure most of know of cases where a degree in say electrical engineering led someone to a career in SW development. :)

The language list is redundant.

Thanks Andy. I just realized that all I really commented on were other people’s comments… I didn’t really say anything about the actual post, lol. Your list is a good starting point for the types of people I mentioned who actually do have the discipline to become a self taught Computer Scientist. However, I would hope that Wikipedia is only used as a starting point and that textbooks, journal articles and other resources are thrown in to the mix.

My biggest concern with someone learning any discipline through Wikipedia is that it tends to hand you the answers. A large portion of learning is done through self discovery… textbooks encourage students to not just accept Theorems as facts but to prove them. Wikipedia usually hands proofs and explanations to the reader on a platter, which I think often hinders the learning process.

This really is a wonderful list. As a student in a Computer Information Systems program it will prove to be very helpful.

As for the debate which is better, self-taught or formal education it really has to do with what you expect from your future employee. My program claims to teach us not only the basics of C#, but of OO programming so that if a future employee needs us to develop a program in any other language, we have been taught how to teach ourselves.

This thinking has been applied to all aspects of our education. We are being taught how to teach ourselves. Although, I might be of a biased opinion, just had to say thanks and put my two cents in.

Anonymous 25/06/08 @ 4:05 am

A somewhat nice collection (nothing special though), but do yourself a favor and don’t use stupid titles like “Who Needs a Computer Science Degree When There’s Wikipedia?”, since one could say the same about ANY field (”Who Needs a Degree in Quantum Physics When There’s Wikipedia/The Internet(/Star Trek)?”).

Reading a Wikipedia doesn’t turn you into a code guru, just like simply knowing what a Fourier Transform is doesn’t mean you fully understand the theory (nor does it it any way imply that you will be able to actually use it in a practical way).

Furthermore, people who train themselves informally using Wikipedia/The Internet often tend to cherry pick the topics that they consider worthwhile/important (e.g., programming in C++ and computer graphics) while neglecting/ignoring topics that are just as - or even more - important (e.g., formal logic and (linear) algebra).

Thinking that you can become (the equivalent of) a computer scientist by simply stumbling through Wikipedia is the same kind of error in judgment that leads a whole flock of (arrogant) business/finance guys with an MBA to think that they are true “IT specialists” after following some course on Information Systems. It simply doesn’t work like that. There is actually (still) some merit in getting an official university degree.

I agree with Henk and the last post. There is solid merit on gaining a university BSc(Hons) degree in computer science as the process of taking classes and particularly tutorials, continually tests a students abilities. It is this mechanism, which finesses students abilities, and gives them an approach and roundness of abilities which a self taught programmer doesn’t have and could never have. Generally if they pass the course, you can say with some confidence that that they know how to do a particular job at a particular skill level. This is simply not true for self taught. They tend to be very good at some subjects, bad at others (like most people I hear you say), and only tackle those subjects which strikes a cord. For instance, if I said Axiomatic Semantics, which would lead to Denotational Semantics. What would that mean to a self taught student, if they didn’t have any tutorials or test for the knowledge they had. Virtually nothing. They also tend to be bumble bee types, and if you get them to to a job which is outside their comfort zone, then quickly become useless.

Let me tell you an allegory. I have a friend, call him Biscuit.
He is a Biscuit class engineer. Before he went to Uni, he was extremely good assembly programmer on 68000, Z80 and 8086 stuff, being in the computer club at school, understood BASIC and PASCAL, (this was late 80’s) but didn’t use it as it was an high level language and of no use. When I met him, (he’s now a good mate) he used to harp on about how it was unlikely he would ever learn anything. Well I’ll tell you, this guy completely changed his mind by the time he had his degree, he had multiple epiphanies all the way through uni.

He eventually worked on Lemmings game, and then later for Sony on PS3 hardware.

Also another point which disturbs me, is that Computer Science is super set of software engineering and development.

Also, quick point about the list above. Although I find the formation of the list quite admirable, The meta taxonomy of Wikipedia regarding computer science and all the subjects relating to computing is a complete mess, and will take years to sort out. This list above, seems to reflect this reality, as it is extremely disorganised, and as final point, if you had a decent CS degree you would realise this.

One could make this argument about any subject, history, english, math, whatever. Wikipedia covers articles on a multitude of subjects, as we already know, however lets not under estimate the value of higher education. Of course the motivation and yearning for knowledge that self educators possess is extremely important, but the added bonus of guidance from an expert, possibly from a person mentioned in some of these pages, the pressure of assignments tests and inquisitive classmates certainly help a great deal. Also, the classroom environment lends itself to problem solving in general that applies to far more than just computer science, a wikipedia page can’t teach that.

Problem solving, my friends. It’s all in the art of problem solving.

Well said Andy. Problem solving. And that’s not going to come from a degree or from wikipedia.

In my opinion it’s coming from experience. I think the debate above could probably be restated as how best to get your foot in the door to get that experience; from a degree or could you be just as successful getting the foot in the door by self-study?

Wow, what a great article, with great resources !

did u read all these resources ?

can u make another article with business administration learning resources ?

Regards,
Mohamed M. Hagag

Anybody that thinks that Wikipedia is the be all end all of world knowledge is seriously mistaken. If anyone can go in and edit the descriptions of Wikipedia then the entire thing is corrupt and not one thing can be trusted as being true; but I guess that’s life for ya!

seems that you don’t know the technical side of wikipedia and its software, all what i can say is if any corruption happen to the wikipedia content it can be reverted to the latest good stat in less than a second ;).

for more info. see the mediawiki.org website - this is the software running the wikipedia websites and related projects.

Regards,

I’m looking at this discussion from a slightly different perspective. I’d guess that I earned my Master of Science degree in CS before a number of the readers of this post were born. I spent over 35 years designing, programming, testing, training, and managing software projects, and am now retired.

I agree strongly with those who argue in favor of the college degree vs. self-study. Yes, with self-study you may learn some theory, you may learn to code to the point where you get the results you wanted, etc. But you don’t get feedback from those with more experience and knowledge as you would in a college setting.

Not that you’ll emerge from college or post-grad with “perfect” knowledge! LOL! I learned even more during my first few years of working in the “real world” than I did during my formal education. You never stop learning — that is, unless you’re satisfied with being simply “adequate” at your computer science work, whatever that work may be.

I love being able to study new aspects of programming, design, etc. on the web. But I also know that I am, at best, just a hacker managing to get things to work, but often not knowing if I’m getting things to work as efficiently, cleanly, or elegantly (one of my favorite programming adverbs!) as I could.

THE THING IS…

The articles may not be correct always. So be careful when using these in Exams, lolzzzz :D

what you don’t get in the internet is that you are forced to learn stuff u don’t like at first… that’s why the topic is bull***.
i studied computer science in germany at the university of Bonn. so what you forgot is the complete mathematical background you need. 2nd who guarantees that you actually read all the articles and 3rd who guarantees that you understood them.. nobody..
and btw. there is so much missing, but i won’t start adding things. it’s simply too much

Just because there is information available for you to learn by yourself, it doesn’t mean that you will truly learn the subject.
Whilst teaching computer scientists at uni, one of the biggest problems I encounter, are self taught students who think they already know the subject.
Most of these students learned many things incorrectly, but because they taught themselves it was impossible for them to realize the error of their ways.
Therefore getting a degree is essential for you to properly learn the subject.

But the learning process in computing science doesn’t end after you get your degree. If you truly are a computer scientist you never stop learning and improving, and the degree serves as the bases for your learning.

Although the collection of Wikipedia articles is quite good, there are much better resources around the internet.
Also these articles do not convey the scope of computing science and the range of differing areas within the field. Meaning that self taught students don’t even know about the areas of specialization available.

I completely agree with Jas.

[...] Who Needs a Computer Science Degree When There’s Wikipedia? [...]

You’ve missed the difference between computer science, the history of computing, and programming.

You can teach yourself how to program from online tutorials. It’s not hard to throw together some Ruby or PHP or whatever based on an online guide.

You can teach yourself the history of computing from Wikipedia, no doubt. You can learn about each famous algorithm and concept, from Quicksort through a Turing Machine, from reading about it online.

But you can’t become a computer scientist by either route above. Computer science is more than programming or knowing famous algorithms. It’s being able to transform any problem into an N-P complete form, something you’ll never learn without practicing. It’s knowing how to write a complier, something you’ll never do without understanding the theory of computing. And its about knowing how to use your knowledge to solve problems in almost any domain, something you can only do through rigorous study and practice.

So, no, they’re not the same at all. You can learn to program and get a cocktail party knowledge of computer science, but you can’t become a computer scientist without practicing it.

Those who wish to learn, learn. Those who wish a degree, get it. They are never quite the same. A degree is a degree no matter how much learning has actually been retained, and those who know, know- no matter if they have a degree or not.

A lot of what can be learned exists outside of formal learning, especially in CS where the tech constantly changes. Self study is a must.

Now, Wikipedia is a useful reference, but not the only source of information. It is a companion to learning, not the only source of it.

[...] Who Needs a Computer Science Degree When There’s Wikipedia? - ????? ?????? ???????? ?????? ?? ?????? ??????? ? ?????????. ???? ???????, ??? ??? ?????????, ??? ??????? ??????? ?????? =)))) [...]

I make the words of Hank, Dan, and others my own.

[...] of the Geeknews articles recently topped 80+ comments and I figured it would be interesting to turn on Gravatars to see what popped up beside the names. [...]

I’m 34 and left ’schooling’ at the end of high school.. the end for me was when they were unable to teach me anything more and at the time I was 14 and completing year 9.

I’ve raised 2 children, been the of Australia’s only ad-serving platform to make it offshore and compete with American and European technology, have owned 2 record labels, cut one of my own productions at London’s Abbey Road studio’s and rolled out around a dozen albums.

I never undertook a single music lesson in my life and can play most instrument’s to a fair degree. with I had a bit of an edge being that my first PC was loaded with MS-DOS v1.1 and DEBUG and were my only options at the tender age of 11, I failed to see what was so ‘complex’ then… having been working with programming and watching it’s evolution from C, Small Talk, Pascal, and some perhaps more popular but less secure framework’s ie; what evolved from Rasmus Lerdorf’s “personal home pages” (accounting for 48% of Internet vulnerability’s according to S.A.N.S)

http://www.sans.org/top20/#s1

Sorry Rasmus, indeed it is true that anything that can be engineered can be reverse engineered, especially if you give away the source code and the malice of people will never fail to amaze, just as the ignorance of people of low intellect has never phased me in the slightest.

Schooling does not prommise “education”, the latin root of the word “EDUCO”, simply means to develop from within. Schooling can aid and also can hinder in this process. Ultimatly we all stand on the shoulder’s of giant’s however and going to princetown or broadmeadows, really has nothing to do with anything other than social anxiety.

For the record, Plato, Jesus, Socrates we all criminal’s also. If you think that the justice system has matured much more than the education (pardon schooling system) over the past few thousand years, perhaps you should read more and worry less about the distraction and anxiety of the “have’s” and “have not’s”, that is more for people in posession of truly great minds such as Nikola Tesla, J.P Morgan and Bill Gates to do something about.

I don’t want to come across as attacking, but to me, Inner’s post actually proved that there are times when formal education is a necessary evil. For someone who stopped benefiting from a high school education at age 14, I felt like the spelling and grammatical errors in Inner’s post made it difficult for him or her to convey knowledge. I write this with the assumption that English is Inner’s primary language, if that’s not the case I apologize. Going by the previous comment alone, if debating higher education can somehow lead to debating high school education… that’s a slippery slope I hope to stay far away from.

yes,i agree with hank and dan.

Hi Tina, thanks for commenting here, you take the discussion in a new direction that I think is relevant.

I would tend to give the benefit of doubt when trying to assess whether someone is educated or not when all we have to go on is a single communication via the internet.

I sometimes find myself, I hope I’m not alone in this :-) , becoming a little less concerned about getting my punctuation or grammar correct when commenting on posts, especially for a long comment.

However, you make a valid point in that, being able to effectively communicate your point of view can be a good indicator of one’s education. And when educating yourself, you may neglect key aspects of that education that a formal method of education wouldn’t miss. Lacking the ability to communicate to your audience could just as well put off a hiring manager as it would a stranger on the internet.

Thanks again.

Soothsayer 06/07/08 @ 8:33 pm

The debate over whether it is better to have a formal education as opposed to being self-taught is pointless. HOW you know what you know is irrelevant. WHAT you know, and whether or not you are able to APPLY what you know, is essential.

With that being said, many employers look at a college degree (especially an Ivy League degree) as a sort of certificate of authenticity. Given the choice between a self-taught programmer and a programmer with a degree, with all else being equal, most employers will choose the programmer with the degree.

And with THAT being said, given the choice between a self-taught programmer and a programmer with a degree, both with demo code that they’ve written… well, the better code gets the job.

Ultimately, performance is all that matters.

Oh dear me! Regarding my poor grammar (At least someone has the ability to pay attention and take notice!), you will have to excuse me as I have recently been the victim of a serious accident, which has left me blind in my right eye and while awaiting surgery am on rather heavy duty pain killers and suffering from A.S.D - Acute Stress Disorder.

The injury’s are serious enough to have had an 87 contract (for 4 months work) pulled, due to these medical conditions and I might also add am starting to suffer from a rare disorder called “Sympathetic Ophthalmitis” - I believe that there is an entry in Wikipedia regarding the subject, a condition which deteriorates the active ‘normal’ by a process where to quote: “Autoimmune inflammatory response toward ocular antigens”

Indecently Tina, line break’s are form of grammar and make your writing more legible (clearer to read) and for the record I speak 6 languages and am able to program in over 20 variants. Your point does have some grounding however and was intentionally made to bring this chain of conversation back on track.

Soothsayer - “Ultimately, performance is all that matters.” is in fact not quite correct. ‘Monkey see - Monkey do’. That much is simple enough for anyone with an I.Q-@-100 to grasp.

However the previous statements regarding the “certificate of authenticity” is also highly speculative as a self educated person, generally has mastered technique’s that even the pupil’s teacher could not grasp an hence work’s as a teacher opposed to working in the field actively, at typically much higher rates of remuneration.

Once again I missed something - to “87″ = (87k) or $87,000 for four (4) month’s work - do the math, leaving school at 14 or not does not imply in any sense that I am an ignorant man, or that by doing so any person cannot prosper and do well or in some cases better than the highest formerly educated people, from the most reputable establishments, even excel far beyond their mediorce achivments as their drives, reasoning and determination is totally different.

Most university degree’s are not worth the paper they are printed on. What people are looking for is “Ability” and “determination”, which I have not seen a whole lot of in people who never had to battle to learn / earn anything and have been handed it on a plate, which they really have little care or value for in the first instance, school’s are simple money making factories and the student’s is, little more than ignorant “pieces of meat” through society grinder.

In the second instance, the internet is ‘allegedly’ the sum total of all human knowledge. If you believe this notion, then perhaps your parents, may have read you too many fairy tales, more likely and quite sadly, not enough. Neglect is neither the fault of the student or the teacher, it is both their duty to enlighten one another.

The reason, arrogance is in my humble opinion the reason the schooling system fails. Equally as the list of languages and technologies described at the head of this document has failed, being that they are arcane (antonym is exoteric) and historical (please refer to “The History of a Lie” on project Guttenberg)

Bernstein, Herman, 1876-1935
http://infomotions.com/etexts/gutenberg/dirs/1/9/2/0/19200/19200.htm

“Ignorance is ignorance; no right to believe anything can be derived from it.” - Sigmund Freud

Inner, I am sorry for what you are having to deal with. I hope you and your doctors are able to do what is needed to help you recover.

Taishi28012 07/07/08 @ 12:58 pm

In Eric Raymond’s article “How to Become a Hacker” he points out a few areas of mathematics that should be focused on and a few that shouldn’t. Notably absent from your article is combinatorics and finite-set theory. Might want to add those for future readers. Also of some note is Robert Reed’s article “How to be a Programmer.” It points out some of the more pratical aspects of programming, such as good teamwork and working with management.

Links:
http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
http://www.catb.org/~esr/faqs/hacker-howto.html

Wow Taishi! Those are really good links, thank you! When I work on a follow-up post summarizing all the great discussions here, I should call those out as well.

ultramanjones 07/07/08 @ 11:52 pm

TRULY self-taught experts can be amazing, HOWEVER << and that’s a BIG however -

The guy with the degree has access to everything the self-taught guy has — the wiki and the blogs and the forums and every kind of free resource — AND he also has formal training and a piece of pretty paper with a happy gold seal on it. While the guy with the degree CAN have everything the self-taught guy has, the self-taught person simply does not.

No matter how you cut it the self taught guy is a gamble in comparison. That said, if I were doing the hiring I’d let the self-taught guy try and prove it to me if he wanted the job. Mind you that would be on his watch, I wouldn’t pay him a penny until he proved one way or another that he had the skills to do the job.

OH BTW, nice list. Thanks for compiling. Nice.

Vijay Veeraraghavan 08/07/08 @ 1:58 am

excellent organizing the topics… starting with wiki gives really a good start… but as we do lots more research in the particulars it will really land us in the core