Showing posts with label computational thinking. Show all posts
Showing posts with label computational thinking. Show all posts

Friday, November 11, 2011

Brief introduction about Wolfram Alpha

Pau Wing Hong
Wolfram|Alpha (also known as Wolfram Alpha) is more than a search engine like Google. Instead, it is an answer-engine/computational engine developed by Wolfram research. Traditional search engines like Google and yahoo, which are only capable of providing a list of links to information, don’t answer questions. They only take your keywords at face value and don’t always yield good results. What really makes Wolfram Alpha shines is that it can compute, just like a calculator. It computes solutions and responses from a structured knowledge database.

Since the day it starts, the Wolfram Alpha Knowledge Engine contains 50,000 types of algorithms and models and over 10 trillion pieces of data. It is still in development, and is always accumulating new information to its database. As Wolfram|Alpha is running on 10,000 CPUs with Mathematica running in the background, it is capable of answering complicated mathematical questions.

The service is built on four basic pillars: a massive amount of data, a computational engine built on top of Mathematica, a system for understanding queries and technology to display results in interesting ways. Wolfram Alpha is also able to answer fact based questions such as “When did Steve Jobs die?” It displays its response as date, time difference from today and Anniversaries for October 5, 2011.

There are a number of things that Wolfram Alpha vastly different from Google. First of all, it is capable of answering complex queries. If complex search queries are typed into Google, it will get confused. This is because it can’t compute, unlike Wolfram Alpha. Just like a calculator, it does not care at all how many arguments are given to it. That’s why concatenating many arguments in a query often works extremely well. Apart from it, the answers and calculation from Wolfram Alpha is very accurate and precise. There is no need to worry about the validity of the information. Thirdly, two sets of data can be compared with graphs easily using Wolfram Alpha in which Google cannot.

Nevertheless, Wolfram Alpha does have its limitations. Since its answers are based on its own software and knowledge database. Wolfram Alpha can only answer a fact based question that has a specific answer. So it is not able to answer open ended questions like “Is Wolfram Alpha better than Google?”

As written in its main page, Wolfram Alpha’s goal is to bring deep, broad, expert-level knowledge accessible to anyone, anywhere, anytime. Clearly, the “Google Killer” is quite ambitious. However, in my opinion, Wolfram Alpha is not a typical search engine in essence. Therefore it is not a Google Killer as people might say, but it can be considered as a giant calculating encyclopaedia of statistics and facts. I think the site poses more of a threat to sites like Wikipedia.

Tuesday, November 8, 2011

Leave the decisions to human beings, not machine

Kayson Wong

I love computers. Of the many reasons, one of them is that computers do not lie. It’s true. Computers are machines, they do not think, they have no feelings. Computers always give you the exact same output when given the exact same input. In fact, it’s all logic. 

What’s logic? Logic is something that everybody on this world agrees. You must agree, and you have to agree. That’s how logic is defined. When you ask everybody the same question, they always give you the same answer. Mathematics is a field that is derived from logic rules. For example, if you ask someone “What is 1+1”, they always reply “2”. It’s not because they think or feel the answer is “2”, it is because they’re told that the answer has to be “2”. By the definition of numbers and operations, “2” is the only answer to this question. Computers are designed with this same idea. At the core of a computer, logic operations are performed by the CPU. Computers will always produce the exact same output if they’re given the exact same input. This is the characteristic of any computers on this planet.

Today, many computer scientists are trying to push the limit of our computers further – to something so called “Artificial Intelligence”. Artificial Intelligence, or AI, is a term used to describe algorithms that simulate tasks that are normally accomplished by human beings only. As a result, decisions that were human-made in the past are now handled by computers, or to be more exact­, the programmers that came up with the algorithm. Some people today like to refer to this as “smart” technology. Camera manufacturers design AI algorithms so their cameras can “smartly” determine the “appropriate” shutter speed, aperture, focus and ISO speed for taking a photo. Translation software can translate an entire paragraph of text from one language to another. Robots can play table tennis. However, many AI algorithms are applied inappropriately, and in a lot of cases just make the problem worse. Professional photographers never use auto modes to take pictures; in fact professional cameras never include an auto mode, simply because the shoot settings calculated by the AI are far from the ideal settings for taking a photo. Language translators, up to this day, often distort the original meaning of the text, or even come up with grammatically weird sentences. As for the robots, I cannot understand why someone would design a robot to play table tennis. These ball games are designed for human beings for fun and health, not for the sake of ball games.

Putting computers into the seat of decision making is even worse when safety is a concern. In Netherlands, the Maeslantkering is a floodgate designed to protect the city from storm surges. The gates are entirely run by a computer; no human intervention can override the computer’s decision. The computer is programmed to close the gates if the surge height predicted by weather models is higher than 3 meters. During a storm, it happened that the computer predicted the surge height to be 2.99 meters, so it left the gates wide open. Obviously, no one living in the city would care if the water level is 1cm higher, but it matters to the computer!

Human beings must be involved in decision making processes, because unlike computers, humans can react to the situation creatively and come up with solutions that best resolve the problem. Despite the technology we have today, pilots remain essential in an airplane, because we believe that shall an emergency occur, pilots can react creatively and come up with the best way to solve the problem. Engineers cannot foresee each and every possible situation that can happen, so we need human beings in the cockpit to make decisions, despite of the fact that sometimes they make mistakes.

Another decision-making process that is more abstract and convoluted is the creation of arts. While some may argue that in the future computers can accomplish this job, they cannot. It’s not because of technical difficulties, it’s because this task is theoretically impossible to be achieved. Recall that computers are operated based on logic, every computer will give us the exact same response when the conditions we input to the computer are exactly the same. Can we convert the process of creating artistic materials into a logical process? No. Every one of us has a different feeling towards arts. I may look at a painting in a museum and see nothing; the guy next to me sees everything. We all interpret arts in a distinct way, a way that is based on things we have seen, the skills and talent that we have, our personal characters, and even our mood at that time. If we ask two persons to write some music, it’s very likely (if not for certain) that the two pieces of music will be completely different. Every person in this world gives us a different piece of music, because our DNAs are different, our experiences are also different. All the computers in this world, on the other hand, are always the same. This fundamental disparity distinguishes human beings from computers. So, it is not possible to come up with an algorithm that can replace human beings in art creation processes.

But what if we’re not trying to come up with an algorithm to write all music in this world, we’re trying to ask the computer to write the music that Beethoven himself would have wrote? If we are to simulate such creation process by a computer, we must answer the question of whether a human being is “computable”. That is, can be write an algorithm to simulate a human being?
The answer to this question is also no. To simulate a human being, we would have to simulate every physical and chemical change that occurs inside a human body. This requires simulation at atomic level. If we can calculate how each and every atom in a human body would behave, we can then work out all the chemical and physical reactions, and thus, simulate the human body. The truth is we cannot simulate every atom, because it is impossible to predict how a certain atom would behave in a given situation. It’s not even possible to measure the state of each atom. There is a theory in quantum mechanics called “uncertainly principle”. The short version of this principle is: if you measure the position of an atom to very high accuracy, then you would have a very low accuracy about its position, and vice versa. That is to say, we cannot theoretically take absolute accurate measurements; there are always errors to a certain extent.  Due to this error, we cannot exactly predict how each atom would behave. Quantum mechanics actually is a study of probability of atoms. For example, there’s 70% probability that the atom would pass through a certain region, and there’s 30% probability that the atom would be bounced back. It’s like throwing a dice, nobody knows the result. Fortunately, this probability is very useful because usually we’re dealing with a very large number of atoms when applying quantum mechanics. If we throw 6 million dices, then we can be quite sure that about one million of them will have the face “1” on the top. As we reduce the number of dices, this one-sixth prediction become less and less accurate. When it comes to one dice, it’s very hard to tell the result. The same applies to the atom case. This is why it is impossible to have physical simulations up to atomic level. Even if we can, we have to ask another question: is a human being a “computer”? That is, if I have two persons who are exactly identical, who share the exact same DNA and have the exact same experience, will they react exactly the same to a certain situation? I doubt it.

So at the end, what are computers good for, if they can never be as smart as humans? The answer is repetitive tasks. A lot of our economic activities involve mass production, which means producing a large amount of the same product to minimize cost. In the past, without technology, human workers are hired to this job. They have to repeat the same tasks over and over again, every day, every week, and every year. Unfortunately, human beings get bored at repetitive stuffs. As is turns out, these human workers do not enjoy much of their life. Today, these jobs are replaced with machines in factories. Machines can accomplish the same task over and over again, and more importantly, machines never get tired, get sick, get bored, or make errors. Machines are ideal for this job.

The decision making part is the part that should be left to humans. We’re not just living in this world for the sake of living; we’re living because we want to enjoy life. If the machines can create music, make paintings, feed us and talk to each other, why do we need to live? We’re not making computers into humans; we’re trying to make them help humans. Machines are merely the tools we use to accomplish our goals. In this context, it’s best to let computers or machines take over the dirty, dangerous or boring jobs on this planet, and let humans enjoy the sunshine at our beautiful beaches.

References
  1. Borel, Brooke. A Ping-Pong-Playing Terminator. 2 16, 2010. http://www.popsci.com/technology/article/2010-02/ping-pong-playing-terminator.
  2. "Maeslantkering." Wikipedia. n.d. http://en.wikipedia.org/wiki/Maeslantkering.

Tuesday, October 25, 2011

The Wolfram Alpha search engine

A new search engine called Wolfram Alpha is launched officially on May 15, 2009. In fact, it is a computation knowledge engine rather than a search engine. Instead of giving users some websites which may contain the information they look for, Wolfram Alpha can compute answers and relevant visualizations to factual queries from its knowledge base of structured data. The designer of Wolfram Alpha, Stephen Wolfram, believes that it will change the way people use online data.
   
This short survey will focus on the principle of Alpha’s question answering feature and how it will affect other weds.

With the help of sophisticated Natural Language Processing algorithms, Alpha can understand the meaning of input fed by a user and try to provide answers from its vast repository of data relevant to the likely cultural stance of the user. For example, even two users enter the same word "Cambridge", the one with a UK-based IP address  will receive the data about the Fenland City while the one with a US-based address will receive the data about the Massachusetts Town.

The performance of Wolfram Alpha greatly depends on the scale of its curation system. It stores huge amount of information and algorithms. Mathematica, a powerful tool for scientific computation, is used to manage such a large-scale data curation system and help Wolfram Alpha compute answers.

Mathematica does not only include algorithms for mathematical computation, but also the whole spectrum of logical, numerical, graphical, symbolic, and other computation. Meanwhile, the fundamentally symbolic nature of the Mathematica language allows an unprecedented degree of interoperability between different parts of the system, and between different algorithms and data sources. For example, if you search for "China GDP", Wolfram Alpha will generate a graph and other relevant economical data to you.

Inside Mathematica, a technology called Automatic algorithm selection enables Mathematica to select and apply the best algorithm(s) for a given task. So Wolfram Alpha can generate answers with high order of accuracy. For example, "lim(x->0) x/sin x" yields the expected result, 1, as well as a possible derivation using L'Hôpital's rule.

In terms of technology, Wolfram Alpha is entirely developed and deployed with Mathematica and Mathematica technologies. It is built on top of 5 million lies of Mathematica code which currently run on top of about 10,000 CPUs. In order to serve the public, a software called gridMathematica which increases the number of parallel processes that Mathematica can run at once is introduced. By increasing the number of tasks available, some types of problems can be solved in less time

Wolfram Alpha is an amazing product combining computational capabilities with linguistic processing capabilities. Due to its direct answering feature, many people compare it with Google search and call it "Google killer". Although Wolfram Alpha is powerful, it may not beat Google. Wolfram Alpha can only turn generic information into specific answers for factual queries. If we use it to search for a song called "sad but true", it will provide us the information about depressed. Furthermore, Google is a company but not a technology. In addition to its quality, the success of Google search also rely on its marketing, sales, customers, developers, brand reputation and luck.

However, Wolfram Alpha will probably be a worthy challenger for Wikipedia and many textbooks and reference works. Since users can get a direct answer to their question together with a nicely presented set of graphs and other information when they look for basic encyclopedic information, people will gradually replace them with computation knowledge engine like Wolfram Alpha.

In conclusion, even though Wolfram Alpha is not a perfectly mature technology, it shows the future trend of search engine. It is foreseeable that future search engines will like AI. Humans can normally communicate with them through natural language and they can respond to us with satisfactory answers directly. 

Reference
1.    http://news.bbc.co.uk/2/hi/technology/8052798.stm
2.    http://en.wikipedia.org/wiki/Wolfram_Alpha
3.    http://www.theregister.co.uk/2009/05/18/wolfram_alpha/
4.    http://www.readwriteweb.com/archives/wolframalpha_our_first_impressions.php
5.    http://blog.wolframalpha.com/2009/05/01/the-secret-behind-the-computational-engine-in-wolframalpha/
6.    http://www.wolfram.com/technology/guide/AutomaticAlgorithmSelection/
7.    http://www.wolfram.com/mathematica/how-mathematica-made-wolframalpha-possible.html
8.    http://en.wikipedia.org/wiki/GridMathematica
9.    http://bits.blogs.nytimes.com/2009/03/09/better-search-doesnt-mean-beating-google/

Sunday, October 23, 2011

The Wolfram Alpha Search Engine

Wolfram Alpha is a brand-new search engine. One expert said it "could be as important as Google". What is so special about this new search engine?

Wolfram Alpha is developed by Wolfram Research. Scientists is already using this company’s previous creations, the computer program Mathematica, to help them with their work. Same as this former program, Wolfram Alpha is also mathematic. But this “answer-engine” not just can help you with mathematic works. It can do something more.

The term “answer-engine” means that Wolfram Alpha is “question answering”. The engine would understand your question, then answer your question. For example, typing “which is the tallest building in the world?”, Wolfram Alpha will answer you “Burj Khalifa”. Searching for “lim(x->infinity) (x^3)/(x+5)^3”, Wolfram Alpha will answer you “1”. When compared with Google, or other ordinary search engines, which would gives you websites containing your keywords, Wolfram Alpha’s results would truly amaze us.

Wolfram Alpha is expected to be successful, even can be compared with Google. Before this search engine appeared, it was far more inconvenient to find the answer of our question. Searching on Google gives us a lot if irrelevant results; Reading and searching on books is very time consuming; asking teachers or lecturers is not always possible as we seldom meet. Thus, Wolfram Alpha will be the best choice of search engine when we are looking for answer of a certain question.

Wolfram Alpha also outstands with its sophisticated knowledge. We can easily search for accurate and detailed physics or chemistry data on it. It can also act as a dictionary, giving us several definition of a certain English word. Stephen Wolfram, developer of this engine, also showed us searching examples for nutritional information, weather, and census data in a demonstration. The abundance and flexibility of Wolfram Alpha is astonishing.

Although it has some advantages over Google and other search engines, it is quite different from other search engines. Sometimes what we are looking for are some webpage, some photos, some articles, some wider variety of information, rather than an exact solution. Therefore, there would not be direct competition between these engines.

With its unique and convenient features, it is believed that Wolfram Alpha would become as famous as Google. Its success can even induce other companies to develop new technologies of search engines, not just blinded to the old format webpage search engines.

References
  1. http://blog.wolframalpha.com/2009/05/15/wolframalpha-is-launching-made-possible-by-mathematica/
  2. http://www.readwriteweb.com/archives/wolframalpha_our_first_impressions.php
  3. http://en.wikipedia.org/wiki/Wolfram_Alpha
  4. http://www.wired.com/epicenter/2009/05/wolframalpha-fails-the-cool-test/
  5. http://www.guardian.co.uk/technology/2009/mar/09/search-engine-google
  6. http://blog.wolframalpha.com/2009/05/12/going-live-and-webcasting-it/

Thursday, September 22, 2011

Applications of the greedy approaches

“Greedy approach”, or more technically, “greedy algorithm”, is a useful method to tackle some of the optimization problems. In optimization problems, they usually involve step-by-step decision making. The “greedy” sense of the “greedy algorithm” actually comes from the idea that we ignore what decisions have made in previous stages, and simply focus on the sub-optimal solution in every single stage. In this way, we attempt to derive the overall optimal solution. Take the “activity selection” problem as an example:

“There are N activities for someone to choose for participation. Every activity has its starting and ending time. Activities may clash in time. For instance, activity A is from 2pm to 5pm, while activity B is from 3pm to 6pm. In this case, only one of these two can be chosen. How to choose the activities so that one is able to join the maximum number of activities?”

In this problem, we can see that we need to choose activities one by one, and when choosing each activity, we need to consider which activities are still available at that moment. One may come up with a single rule of thumb to make each decision. For instance, we could repeatedly choose the currently available activity which starts at an earliest time, without making any time clashes. However, “greedy algorithm” may not be always correct. Let us consider the “greedy” method mentioned above, i.e. we keep on choosing the earliest starting activity, and try to use this algorithm to deal with the situation below:

Number of activities (N) = 3

If we adopt the above method, we can only choose activity A. But obviously, this is not the optimal solution, because we can choose activities B and C instead. What should the correct method be? We observe that if one can choose an activity which ends earlier, then more time could be allocated for choosing other activities. Thus, we can raise another “greedy” method, i.e. repeatedly choose the earliest ending activity, without making any time clash. By considering again the above situation, we would firstly choose activity B, because it ends most early (2:00 pm), and then choose activity C (ends at 4:00 pm). This seems working. But does this always work?

The answer is YES. The explanation is as follows. Consider a list of activities as time intervals drawn in the diagram below:

 
In the diagram, all the activities are sorted in ascending order of ending time and the red intervals are the chosen activities by the above method.

Suppose the contrary that the above method does not yield an optimal solution, i.e. there exists an activity X (green in colour) within the above diagram and it is not chosen. 3 cases are considered:

Case (i): Activity X ends earlier than start of 1st chosen activity OR starts later than the end of last chosen activity.
This is impossible because if such activity X exists, the “greedy” method mentioned is able to choose it, and this contradicts to the real situation.

Case (ii): Activity X lies between end of a chosen activity and start of next chosen activity.
Similar to case (i), if activity X exists like this, the “greedy” method is able to handle such case. Thus case (ii) also leads to contradiction.

Case (iii): Activity X has time clash with at least one of the chosen activites (red one).
This can be a possible situation. But the problem now is to find out a better solution than the “optimal” one found by the above “greedy” method. Case (iii) obviously does not yield a better solution, since if activity X is chosen instead, at least one of the activities in “red” must be discarded.

As a result, such “greedy” method is correct.

In this example, we learn that “greedy” methods may be very intuitive, efficient, yet wrong. To figure out whether a “greedy” method is correct, one should either provide a logical proof, or a counter-example to the method.

Sometimes, the “greedy” algorithm behind requires more thorough thinking, and the proof could be quite subtle. Let us come to another problem below.

[Modified from the problem “Saving Endeavour” (see reference)]
“There are N toys. Each toy needs to pass through 2 main processes: moulding and painting. Obviously, moulding must be done before painting. The time for moulding and painting(mi and pi respectively for ith toy) for every toy may be different. Now we only have 1 moulding machine and 1 painting machine. How should we produce the N toys in a suitable order such that the total production time is minimized?”

For example, now there are 6 toys in total. Their times for moulding and painting are tabulated as shown:

If we manufacture the toys in the order B, E, F, A, D and C,

Total time required would be 28 minutes, and this is minimal for such case.

This problem is much more complicated than the “activity selection” problem. It is because one can come up with even more possible “greedy” approaches:
  1. Choose the toy with minimum time for moulding first?
  2. Choose the toy with minimum time for painting first?
  3. Choose the toy with minimum sum of times for moulding and painting first?
  4. (And more……)
Unfortunately, the first three approaches mentioned above are all wrong. Many counter-examples can be constructed and are skipped here. But why could we think of such a lot of incorrect approaches? This is because we have not yet considered the key properties in this problem.

We can observe that we should try our best to make the moulding machine complete one job as soon as possible, so that it is readily available for production of other toys. In other words, the moulding machine should produce toys with the shorter moulding time first.

But this is NOT enough. The painting time should also be considered. As the start of painting is solely dependent on the completion of moulding, the painting machine may sometimes need to “wait” the moulding machine to finish its job. Therefore, to utilize the resources well, it is not difficult to see that we should minimize the “idle time” for painting machine. To do this, we should always produce the toys with shorter painting time as late as possible, so that the painting machine could somehow work while the moulding machine is still working.

By combining these two factors, we could then derive a “greedy” approach. We can sort the toys in an order such that for every pair of toys a and b (a < b), then min(ma, pb) < min(mb, pa). This is complicated, but makes sense, because as mentioned, we should produce the toy with shorter moulding time first, and delay the production of toys with shorter painting time. If we compare any two toys by using such mathematical expression, if either ma or pb is small enough, it would lead to earlier production of toy a.

Take the comparison between toy 2 and toy 4 as an example. Since min(1,4) = 1 is smaller than min(5,2) = 2, toy 2 should be produced before toy 4.
The proof is shown below.

Suppose toy a is produced, and let D be the time required for painting machine to be available again (counting from start of moulding toy a), then there are 2 cases:

Case (i): D is smaller than ma.
Case (ii): D is greater than ma.
Thus, the time required to finish painting toy a would be max(D - ma, 0) + pa.

Suppose toy a is produced prior to toy b, and let D’ be the time required for painting machine to be available again after painting toy a, then

D’ = time required to paint toy a = max(D - ma, 0) + pa
 
As a result, time required to finish painting toy b would be
max(D’ – mb, 0) + pb = max(max(D - ma, 0) + pa - mb, 0) + pb

Suppose toy b is produced prior to toy b, then time required to finish painting
toy a would be max(max(D - mb, 0) + pb – ma, 0) + pa

If we claim that a shorter total time can be reached when we produce toy a prior to toy b, then

max(max(D-ma, 0) + pa-mb, 0) + pb < max(max(D-mb, 0) + pb-ma, 0) + pa
max(max(D-ma, 0), mb-pa) + pb + pa - mb < max(max(D-mb, 0), ma-pb) + pa + pb – ma
 max(max(D-ma, 0), mb-pa) - mb < max(max(D-mb, 0), ma-pb) – ma
max(D-ma, 0, mb-pa) - mb < max(D-mb, 0, ma-pb) – ma
max(D, ma, ma+mb-pa) - mb - ma < max(D, mb, ma+mb-pb) – ma-mb
max(D, ma, ma+mb-pa) < max(D, mb, ma+mb-pb)
max(ma, ma+mb-pa) < max(mb, ma+mb-pb)
max(-mb, -pa) + ma + mb < max(-ma, -pb) + mb + ma
max(-mb, -pa) < max(-ma, -pb)
-min(mb, pa) < -min(ma, pb)
min(ma, pb) < min(mb, pa)

This is exactly what we have proposed.

From these two problems, we learn that “greedy” approaches could be useful in our daily lives. The “activity selection problem” is a very good example. Due to limited amount of time for most people, we often encounter situations of time clashes for various events. In order to attend as many events as possible, “greedy” approach could be used and this could optimize the utilization of time. For the “toy manufacturing problem”, it is particularly important because resources are scarce and so we need to make sure that the machines are working in the most efficient way in order to reduce the production cost.

Despite the fact that both “activity selection problem” and “toy manufacturing problem” oversimplify the real situation (since attending different event may have different satisfaction, and more machines and stages are involved in manufacture), such “greedy” approaches could serve as a simple, rough, yet efficient estimation.

References
  1. “Activity Selection Problem” http://en.wikipedia.org/wiki/Activity_selection_problem
  2. “Saving Endeavour” http://poj.org/problem?id=2751

Thursday, September 15, 2011

The nature of computing

Comment 1:

Artificial intelligence (AI)?

Follow-up:

AI is a big topic. We will explore some aspects of AI in later parts of the course. However, one thing that is useful for us now is: How would you define “intelligence”? Is playing chess an intelligent action?

Comment 2:

Weather forecasting?

Follow-up:

Weather forecasting is a grand challenge in the computing field. The reason is that the calculations involve using thousands of variables and complicated differential equations. Furthermore, the time line has also to be finely divided (e.g., in units of milli-seconds) in order to come up with accurate results. Thus, weather forecasting requires great amount of computing power. We will talk about the kind of computing power it needs. Moreover, we will pay a visit to the HK Observatory later to take a look at the machines used there.

Comment 3:

Playing football by robot is meaningful? I personally think that playing football is just a small step, and this small step will contribute a lot in the later development in robot design.

Follow-up:

Good point! Thank you!

Comment 4:

Would like to know the extent of technical knowledge needed/will be taught in the course.

Follow-up:

We will try our best to balance the need of technical knowledge versus the usefulness of the materials taught in the course. Your comments and criticisms are mostly welcome!

Comment 5:

I major in linguistics and I think speaking a language can be regarded as computing.

Follow-up:

Yes sure you are right! Very insightful comment!

Comment 6:

Google and Apple are not the only companies doing searches and smart-phones, respectively. Should not single out these companies.

Follow-up:

Thanks for the comment! I just thought that they are “representatives” in their industries and the names “Google” and “Apple” nowadays have become house-hold names. Yet you are right in that we should not pay too much focus on them, with respect to the technologies that they use.

Tuesday, July 19, 2011

Links of Readings

Required Reading

Recommended Reading 

  • Feynman, R., Hey, A., & Allen, R. (2000). Feynman lectures on computation. Cambridge, MA: Perseus Books.
  • Schneier, B. (2004). Secrets and lies: Digital security in a networked world. Indianapolis, Ind.: Wiley.
  • Wing, J. M. (2008). Five deep questions in computing. Communications of the ACM, 51(1), 58-60.