Why IT/Software makes our world more human

When we are choosing the topic of the first CBSA Panel Discussion, we mainly hope to use this chance to introduce IT world to the business students. So they can have a general picture of the IT world and such understanding may help them if they want to enter IT enterprises. In the recent two weeks, I felt that if I use “why IT/Software makes our world more human” as the topic, I can connect all the exciting things I have witnessed in the Computer Science field through these two years’ study. So suddenly I felt I can talk a lot. Thus I will occupy more time in today’s panel discussion.

Let me first talk about the limitations of my talk today. The first limitation is that this is what I felt recently and it has not gone through a long time’s filtering. I need time to explore all the logics inside it. On the other hand, I may not have enough examples or I may not be able to explain things sufficiently or in an appropriate way. The second limitation is that I haven’t gone back to the society for many years. Staying at school for so long probably make my talk more academic (theoretical) or bookworm-like. It may not suit the reality very well. So these are the limitations.

Now I will begin my talk.

Let me start with a little story. When I was applying college, I don’t know which major to choose. My elder brother asked me one question: do you like to do things related with human or related with physical world? I don’t know how to answer this question. I guess I am more interested in human being. But I have always been very good at Math and Physics, and I like them much although they take harder mental work. I also have a science/engineering family background. I don’t want to totally give up on this aspect. But I surely don’t want to lock me up in the science/engineering for my whole life. On the other hand, I don’t feel that I need to study the human science in the school. So-called major study in human science without real practice is useless and dangerous. At least I can teach myself human science by reading a lot and practicing a lot. The threshold of physical science, however, is much higher. What you learned in school on physical science is more reliable. Also science/engineering training is important. Thus I chose engineering at that time. But for some reason, I didn’t choose computer science.

But the question my brother asked me left in my mind. In college, I read all kinds of books and get to know about individualism. I had contact with computer. And right from first touch with computer, I started to like it and knew that this is what I want to do for my life. I saw that I can transform the ideas in my brain into a concrete form and can execute it and get result. That it is really exciting. I saw a bridge, bridging the gap from physical world to human. I also see that computer science major can participate in all kinds of walks. This is exactly what I want. At that time, the Internet boom and many people were talking about the so-called revolutions brought by Internet. Thus I went extra way to change my major. Now two years have passed. I have seen many exciting things in the Computer Science world. Just as I have expected, Computer Science makes the world more human. From my studying and hard working in CS, I also penetrate deeper into the meaning of individualism. Now I am going to use the topic “Why IT/Software makes our world more human” to thread all the things I have seen.

Let’s first talk about how the programming languages developed. We, CS people, always have a dream. The dream is that we hope one day everyone can program. But this dream is impossible. We need some modification. How? Let’s change it to: all people, who has a good Math background and expertise in domain knowledge, should be able to program in this domain after some minimum programming training. Human language is too ambiguous. All concepts are mixed up. With human language, human brain is not trained and things are not looked through. If you don’t know how to do something logically, how can you expect the computer to do it right? Thus you have to have a very good training in Math, know how to express your ideas with clean logics. Also you need to understand a domain and have the full experience in it. Thus you will know the logics in this domain. If you have these two perquisites, our job, as CS people, is to let you be able to express you domain expertise by programming after a minimum training. This is our dream.

Let us jump over the machine language and the assembly language. We only talk about the high level language. First is the procedural language, represented by C. Then we will have the object-oriented language, represented by Java (java.sun.com). Then we will have pure interpreted language, represented by Python (www.python.org). (This is only a simple classification. The real situation is more mixed up). We will mainly focus on these three languages. The three, the former, more tuned to machine and running faster; the latter, more tuned to human and running slower.

Procedural language (C) is very flexible. It can do a lot of things related with the computer itself, such as memory management. The performance of program written in C is best (run fastest). But programming in C requires you a lot of knowledge about the computer itself.

Then we have object-oriented language represented by Java. So the concept of Object-oriented (OO) is brought up in the history and this is a very important advance in programming. This concept is more appropriate for human thinking. If we want to make a software used by the school for managing the student. We would have a object called student. This student has many fields such as name, student ID, major, grade and so on. This student object can do some things. So it implements some methods, such as registering for school, paying the tuition and so on. So in object-oriented language, it is a bottom up thinking. The procedural language is like top down thinking. To so something, it has to find the top problem first and then divide it to several functions. But in reality, many problems don’t have top. So in object-oriented programming, you need to first identify the objects, what are the attributes of the objects, and what functions they need to carry out. Each object should be independent and relative complete. Only after each object is independent and functionally relative complete, is it possible for it to cooperate with other objects. Otherwise cooperation is impossible (Isn’t this very much like the individualism?). So object-oriented language is important. It enforces us to do the object-oriented programming, thinking what objects are needed and how they cooperate. With procedural language, it is also possible to write a object-oriented program, but it will be extremely difficult and only masters can grasp it. The code written won’t be easy to read. So learning object-oriented language is not just to learn some syntaxes and some control statements. It is a whole thinking process. How to analyze the system? How to design and how to implement? This requires a lot of training. It is a training of mind in fact. This training is necessary and essential because the world is just so complex. Object-oriented language just let us have the opportunity to face the real problems. Otherwise, with the procedural language, we will never be able to address these problems. I would say this is this first time in history that we human have the chance to really face those real, essential and interesting problems. Because of its ease in implementing clean logics, the object-oriented language is more scalable. It is easier to build a big system with object-oriented language. (Similarly in the human world, democracy and freedom are just to protect each individual to be himself/herself (independent). Our true challenging problems are how to let each individual fully develop himself/herself, how to let individual to cooperate freely. Democracy and freedom themselves are meaningless. They are not our aims.)

But Java is still not human enough, especially when compared with Python. When writing Java program, you have to write the full program with the complete structure. Only so, can the machine read it in and compile it. Thus Java is still tuned to machine. Python instead is very suitable for human programming (http://www.linuxjournal.com/article.php?sid=3882, http://altis.pycs.net/2003/07/21.html, http://altis.pycs.net/stories/2003/04/16/whatIsPythonAndWhyPython.html,). You don’t need to write a complete program with the full structure, you can do whatever you want, for example, let it tell you what is the result of 3 plus 3. Python has all the elements of programming and is suitable for human being. Thus now many high schools use Python to teach the students programming, because the students don’t have to face the computer related problem and they only need to learn “programming” (http://www.ibiblio.org/obp/thinkCSpy/ ). Python is a full features language. It is suitable for all types of programming. You can use it as script to manipulate other objects. You can also use it to write a big system. Python’s executing speed is very slow because Python’s assumption is that the machine will be fast enough eventually so we only need to care about how the human would like to program. But the big web server Zope (www.zope.org ) written in Python is said to run even faster than Apache (written in C). So people estimate that probably it is because Python program is very clean logics thus very few lines of code, which makes it runs faster. There is a project using Python (http://www.python.org/doc/essays/cp4e.html), whose goal is to let everyone be able to program. They think that programming skill is equivalent to reading as an important advance in human history. They think that the advance of the modern society is due to the invention and spreading of printing tech. Thus knowledge can be spread around by publishing. But computer program is more suitable for expressing ideas. The computer program can prove itself. By reading masters’ code, we can learn the great ideas. We communicate and share knowledge via programming. Programming is a better tool for communication and expressing ideas. So they said in the future the illiteracy is determined by whether you can program.

I should also mention several other key techs as we are matching toward realization of the dream. One is XML(http://www.w3c.org/XML/, http://www.xml.org/), the other is open source movement (http://www.opensource.org/). XML is an open standard for data. Thus we can communicate in the same standard of data. The most difficult part of programming is heterogeneous implementation because many people will have different ways of implementation for doing one thing. It is very difficult to let the different implementation to talk with each other. For example, we have different operating systems. Thus we need to write different programs for different operating systems. In addition, XML is more suitable for expressing the logics. We are exploring whether XML can be tomorrow’s programming language.

Open source movement (I skip the introduction of open source here. For more information, you can view the following web sites: http://www.wired.com/wired/archive/11.11/opensource_pr.html,http: //www.wired.com/wired/archive/11.11/linus.html,http: //technetcast.ddj.com/tnc_catalog.html?item_id=1242,http://www.gnu.org/ ,http://www.gnu.org/philosophy/ ) is a global cooperation. Their dream is that on the earth if one person has solved a problem, no second person on the earth needs to solve it again. Through several years’ development, the open source has developed an effective model of global cooperation in programming (The Cathedral and the Bazaar:http://www.catb.org/~esr/writings/cathedral-bazaar/). Python mentioned above is open source.

There are also many other great ideas we can talk about open source/free software, including Richard Stallman’s (http://www.stallman.org/) pursuit of freedom of software (http://technetcast.ddj.com/tnc_catalog.html?item_id=1242 After reading this article, I am so touched that there are people pursuing freedom so enthusiastically and endlessly). Here I want to talk about one thing: the relation of open source/free software with our dream (let all people be able to program). In software engineering, the most important is the requirement analysis, knowing what the customers really want. Many difficulties in the design and implementation phases of building software can be traced back to our uncertainty in the requirement analysis. Thus we have to have a clear requirement analysis. We have to locate the target customers, knowing their profiles. We have to find them and ask them directly what they want. Furthermore, we have to analyze the information we collected from the customers and find out what they really want (very often, we don’t know what we want), what are realistic and the priority of various requirements. We need to “understand” the problem, the nature of it. We design out of this understanding. The difficulties we come upon in design and implementation help us understand better the problem and we bring back the understanding to the requirement analysis to have a more complete requirement specification. We also need to have many testing plan to test the software in all the phases of development. So if you need any software, you need to find us programmers. Then we need to do all the above work to build the right software. What open source/free software tells us is that let’s build the software by ourselves (software DIY). Many people in the open source are building software out of personal enthusiasm. They build software to solve their problems. Because they are building software for themselves, they are the customers and know what they want. Even if they are not clear about what they want, they can find it out by programming (such as prototyping). Also the software is used along in developing, thus is tested intensively. One saying in open source is that if there are enough eyes no bug can hide. Thus open source software is more reliable and effective. But open source so far is only for those programming masters. Our dream is to extend this model to all people (with good Math background and domain knowledge), thus the great potential of creation in a society can be released.

I want to talk a little more about Extreme Programming (XP) (http://www.extremeprogramming.org/) and Agile Programming. In general, their goal is to achieve the maximum flexibility in programming. For example, if I want to build a prototype to test my ideas, there should be sufficient techs for me to build it very quickly. As I said above, the software engineering process is a repeated spiral process. You often need to bring the understanding achieved from exploring the difficulties faced in the later phases (such as design and implementation) to the former phases (such as requirement analysis). Thus we need tools or methodologies compatible with such pattern of programming. That is Agile Programming. In

XP, team cooperation is heavily emphasized, for example, pair programming. If you study more about XP, you will have a much deeper understanding about cooperation.

I have talked about our dream in the software and the progress of the programming language. Now I want to talk about the paradigm shift in software. We know that Microsoft’s strategy is to control the IT via their monopoly in PC operating system. Bill Gates ignored networking at the beginning and got punished for this ignorance. Many people criticize Windows for the fact that it is not suited for networking environment. It is not designed with the network at its root. The great strength of Unix/Linux lies in their networking characteristics. JINI (http://www.artima.com/articles/index.jsp?topic=jini ) is totally networking, object flying in the network. There is no OS in the JINI vision (http://www.artima.com/jini/jiniology/vision.html). Built on top of networking is the service/content providers such as google and Amazon. O’Reilly (famous book publisher in the CS world) mentioned paradigm shift in software (http://www.itconversations.com/transcripts/50/transcript50-1.html). It points out the software will shift from the dominance of companies like Microsoft to the dominance of companies of companies like Google and Amazon. Why? Because the network provides a platform for people to communicate and cooperate. This platform extends to the whole world. The success of Google rely on its taking advantage of the human cooperation on the web. Google’s Page Rank algorithm rank a page according to how many web pages in the world has link to that page. So it is like a global voting for one page. If you think that page is valuable, you may put that web page as a link on your own web page. Thus you add that web page some weight in the Page Rank algorithm. So this is a global cooperation of human beings. Google has many other searching services such as Froogle (searching products), searching for news, images, catalog and so on (http://www.google.com/options/index.html). Many companies are using the API provided by google to build their services on top of google’s searching service (http://www.wired.com/wired/archive/12.03/google_pr.html). If you visit Amazon.com, you will see that Amazon is actually a platform of global cooperation. It offers many very valuable information. For example, if I am studying one domain and wanting to look for some good books in this domain, such as software engineering, I can find out the best books in this domain very quickly. By reading those voluntary reviewers’ comments, I know the strength and drawbacks of each book, what kind of learners they are suited for, what level of learning they are suited for. Then after reading the expert reviewers’ wish list, I get to know what books they usually read. Thus I may find out what other areas might be related with this domain. I can also find the related websites. So I can find the material/tools I need on the web to achieve my present learning goals. This is the great benefit the global cooperation has brought.

What would be after Google and Amazon? I think it would be something like elearning and knowledge management. These are closer to the core values of human being. We need to find out all the basic components and explore how the components cooperate with each other to achieve a common goal. We build on top of the content providers like Google and Amazon. We provide the standard attributes for them so they can provide more effective services. So utilizing the global cooperation on www, to achieve a certain goal (such as learning), we can find all kinds of tools/material to progress layer by layer. Elearning or management is to find what are the basic components of learning, what layers are needed to progress through. Thus we can categorize the material on the web to combine the components freely. For example, we talk about learning style in elearning. So basically we may say there are two type of learning style. Some people can endure all the pains and thus in programming they won’t be afraid of all the tough debugs. So they can feel very deeply and have the real experience. Some people cannot endure the pains and are afraid of the debugging process. They only like to read general stuff and want a quick effect. So these two types of person surely need different materials. (Learning Computer Science is like learning any arts. We can discuss this another time.)

The above are what I see as the trend line in the software world. Let’s come back to our topic today. What is the meaning of “human”? Why I say IT/software makes our world more human? Talking about “human”, I think of one word: cooperation. As CS people, we heard the most about this word. In programming, teamwork is important. How to let programmers to cooperate is very difficult, but is very essential. There is a book, which by reasoning with Game theory it supposes when people are closer and closer to each other, the best strategy to maximize his/her personal interest is not competition but cooperation (I haven’t read this book yet. But here is the book website on Amazon: http://www.amazon.com/exec/obidos/tg/detail/-/0465021212/002-1173777-2565664?v=glance) I have read a book about the culture of the silicon valley. It says that the difference between the traditional enterprise and the new IT enterprise is that the former addresses more on competition and the latter addresses more on cooperation.

Here I want to bring the topic to a larger scope. Let me talk about “separate and connect”. This world is zero, empty. But from zero, the positive and the negative can be generated. They cancel out each other. If not separate, the individual cannot be formed, thus there would be no individual experience. But all the individuals are connected. This fact makes our experience as individual important, but not a big deal. Itself is zero. Cooperate is “connect”. “Separate” and “connect” are the same thing.

Let’s come back to the CS domain. Let’s look at the separate and connect in this domain.

We said that Python’s assumption is that the machine will be fast enough thus we only need to concern how human being program. This is “separate”. We trust the bottom (machine) to do a good job, thus we can focus on our work (human programming).

Object-oriented programming is all about “separate and connect”. Each object needs to be full function and independent. Yet many objects cooperate to accomplish a common goal. There can be many forms of cooperation. They cooperate under the understanding of the nature of the problem.

The cooperation for our human being has two dimensions. One is intra-cooperation, the other is inter-cooperation.

Intra-cooperation is the cooperation inside one person. How the various components of one person’s logics cooperate. If they can cooperate well, we will have a clean logics. The progress of programming language is to help people have clean logics. Each individual has to learn many different domains and has experiences in different aspects. How to let experiences of various aspects to collide is very important to achieve the common goal and to make breakthrough. You have to understand the underlying principles, thus you are able to connect various things. The efforts to connect all the things, on the contrary, help you understand the underlying principles. We learn many different things. We should separate. Learn each thing separately, focus on it and learn it well. After we understand one domain, it will help us understand other domains and grasp the underlying principles. By this, it again helps you understand the original domain. So separate is for connect. Connect is for separate.

In addition, intra-cooperation helps bridge the human world and the physical world. These two world have been separate historically. Programming force us doing scientific research have to know what problems our research is trying to solve instead of creating problems by ourselves. People learning liberal arts should use the programming to test their ideas. Give the idea a concrete form (Bill Joy). When we are doing object-oriented programming, many difficulties are due to the fact that our logics are not clear yet and that we don’t know the true nature of the problem yet. So object-oriented programming is to force us to penetrate through the true nature of things in the human world. For example, “transaction”. Since we need to program to realize “transaction” and the execution must be correct, it forces us to understand the true nature of transaction. This understanding of “transaction” is tested in the practice. Show me the code. Let the code speak. Human world has to be connected with the physical world.

The software paradigm shift talked above is the inter-cooperation. The “revolution” of networking relies on its significance on cooperation. It greatly expands the scope of cooperation (global), The development of computer science makes various kinds of cooperation possible. Google, Amazon, open source/free software are all models of global cooperation.

So from the progress of programming language and the software paradigm shift, we see that the development of CS is closer and closer to the human being, to the core values of human being.

The significance of XML is the openness (open data). Cooperation needs openness. I have read an article on the web, which mentioned that if the government’s data are all represented by XML, we may have a new understanding of the openness of the democracy (open data).

These trend lines have also appear in the politics field. In the 2004 Democratic Party primary election, Howard Dean’s popularity is brought by the so called Internet Democracy and open source. (http://deanspace.org/, http://www.blogforamerica.com/,http://dean2004.blogspot.com/,http: //www.worldchanging.com/archives/000184.html,http://www.meetup.com/). Joe Trippi (Howard Dean’s campain manager) mentioned that mass production prevent the individual’s participation in the politics. The mass producion makes politics become the tools manipulated by the big corporations. Howard Dean uses Internet cooperation and open souce bring the individuals back to the politics (http://www.itconversations.com/transcripts/transcript80.html,http: //www.changeforamerica.com/blog/,http: //www.oreillynet.com/pub/a/network/2004/02/10/digdemo.html). There is a symbolic event in Howard Dean’s event. His supporters suppose through the web that if the web donation to the campain has reached a certain amount (I have forgot the number), Howard Dean should wear a red hat, holding a baseball bat in hand and run to the stage. So Howard Dean’s campain manager saw this message and their web donation has just reached that point. Thus they rushed through seveal streets to find the red hat and baseball bat. They finally found them and passed them to Howard Dean right before he is going to go up stage. So Howard Dean put on the hat, held the bat, ran up the stage and announce to the audience: You’ve made it! All supporters saw this via the TV. This becomes a symbolic snapshot of the Digital Democracy.

I believe the modern society is the best society we have in the history. We can have all these great development is largely due to the advance of technology. It breaks all the boundaries and obstacles, make the world smaller and smaller, make people’s contact with each other more and more, make the cooperation becomes more and more important, more and more choices are available.

Many people disagree that modern society is the best society. They have their doubts, such as the world war, mass production and so on. But I think mass production is still a historical advance. I can regard it as the first advance brought by tech. For example, in the very isolated primitive villages, many terrible tragedies such as massacre cannot be known by the outside and be stopped by the outside. Compared with that raw violence, you would feel that although the hypocrisy in the modern society is bad, it is still better than that ruthless violence. The modern society at least let us know these things thus provoke our thinking. But due to the limitation of our technology, we have to rely on mass production to reduce the cost. We are thus in the control of the big corporations and big press. TV and radio, these one way media make individuals become passive objects receiving propaganda. The new tech, especially IT/software tech, bring us the second unprecedented advance. This advance is to empower the individuals after all the mass production. We want to empower each individual, let each individual fully develop, let individuals cooperate freely with various forms. In the history, we only have a few ways of cooperation, such as company and government. But IT/software powers us to challenge the core values endlessly and to obtain our core values through various forms. The so called e-commerce, elearning, e-journalism, e-democracy are all challenging their core values using IT. If you ask what are those core values, I can talk about it briefly here (For more, please read the other article: Zen practice and comments on Lung Yingtai’s articles). It is that everyone should focus on one domain of art to pursuit. This art can be literature, can be martial arts, can be painting, music or even computer science, or other engineering. We want to build for each individual a superb comprehensive environment for learning arts and individuals can freely share arts and cooperate in creating arts. Pursuing arts is to experience “separate and connect”. It is to experience all is zero and from zero everything is generated. Democracy and freedom is just to protect the individuals pursuing arts, sharing arts and cooperating in arts. Thus I would say through these two years’ study in CS, I understand more about individualism. Everyone must develop himself/herself fully (That is the significance of elearning). This would need separate and independence thus everyone can develop himself/herself and individuals can cooperate in all kinds of forms (cooperation beyond race, country, gender and so on). (The so-called Feminism is also about separate and connect. Because traditionally the female doesn’t have her own independent values, they cannot be themselves. Thus they are fighting for “separate”, for their right of choices. After gaining these rights, it is time to go back to the core values, face herself, and ask what she really wants. Thus we can have true females. And these true values will again contribute a lot to the society. There can then be the true cooperation between two genders.) So separate is for connect. Connect is for separate since by connect the individuals can develop themselves fully. Is there actually a thing called “separate and connect”? Everything is originally zero. “separate and connect” is only relative concept made by our minds. Positive and negative cancel out each other. But as we have seen, as a human being to understand separate and connect is important (but human being is again not a big deal). If we go deeper, is there zero? Zero and non-zero, are they different, are they the same?

When Bruce Lee talked about martial arts (http://www.brucelee.com/jeet.htm), he said that the biggest difficulty of martial arts is the stickiness and stoppage. People stick to set patterns and cannot change according to the situation. Any style is just a form, suitable for a certain situation. The true freedom is to decompose martial arts into basic components and learn well each component. A kick is a kick. Do well on the kick. Learn various kinds of kicks. Understand the situations under which they are used. Let them flow freely. Express yourself freely.

Bruce Lee was talking about martial arts. Every art is the same. We need to find the basic components, complete each complete and let them be combined freely. Computer programming is an art. It has all the adventures and beauty you can find in other arts. In programming, there is a so-called component based programming, which is to let each component be independent, full function and be combined flexibly.

Now I think it should be clear why I say IT/software makes our world more human. No matter what we do, we have to come back to “human”. All concept should be evaluated under “human”. Individualism just realizes that it is easy to tell whether a thing is beneficial or harmful for an individual, but it is difficult whether it is beneficial or harmful for the group or the country because we don’t know who will benefit in the name of the group or the country. The history tells us that collectivism or nationalism often benefit just very few people and become tools used by those few people to exploit the majority. Thus individualism says let’s evaluate things mainly based on whether it will harm or benefit an individual. When we are not sure whether if a thing is beneficial for a country, let’s first make sure it won’t harm any individual. This is the spirit of individualism. Of course in the situation when the group will certainly be harmed, the individualism’s answer is very clear. Let’s look at the example of Qiu Shaoyun. If he rolled over, he could have pulled off the fire on his body. But that would expose all his ambushing army under the fires of the enemy. Thus he chose to stay still and let the fire burned him to death. In individualism, every individual is equal. It is better to sacrifice an individual for the lives of a group of individuals. I hope this can answer the attacks on individualism. IT of course gives us new ways of evaluating the group interests and more ways to deal with the group and individual relations. We also have more ways of making contribution to the society. For example, writing book reviews on amazon.com. Every time I hesitate on whether to join the public arguing, I would remind myself that I haven’t finished my 100 Amazon reviews yet.

Throughout the human’s history, IT/software is the human being’s first chance to own a technology to break all the boundaries, bridge all the gaps, explore all core values, combine all basic concepts freely and to fully experience the meaning of human life. The present development of IT/software is only the beginning.

Some of you will leave school and enter the business soon. I hope what is said today can provide some guidelines for your future.

Reading the following article may help you understand the content better.

Zen practice.

Zen practice and comments on Lung Yingtai’s articles

Advertisements

1 Comment

Filed under About Software, Chan/Zen, Cooperation, Essay, Liberal Arts, Programming

One response to “Why IT/Software makes our world more human

  1. Pingback: For IDProject friends « A hacker of the Internet for the purpose of growth, fun, and creation

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s