What is Knowledge?

December 6, 2013

Knowledge is a domain that encompasses contradictory traits; “knowing” describes knowledge of true or false statements to be absolutely true. Knowledge can be classified* in one of three classes: knowledge that I know I know. This is the knowledge that I am aware of, and do know very well. Knowledge that I know I don’t know. This is knowledge that I am aware exists, but I’m unfamiliar with it or I do not know it to be unequivocally true. Finally, the knowledge that I don’t know, I don’t know. This is the largest class of knowledge, and it is large simply because I cannot be an expert on every topic, and what I know spans a small percentage of it. So, I am going to claim that no one can have absolute knowledge, instead, we can only have relative knowledge that can be viewed as subjective or objective.

I hypothesize that there should always be knowledge that I don’t know I don’t know, and that is because if I believe that I know of the existence of all knowledge (knowledge I know I know, and knowledge I know I don’t know), then that means that there is nothing that exists beyond my knowledge or awareness. Since this claim doesn’t contradict the fact that there exists at least one thing that I don’t know that I don’t know, both claims can coexist at the same time. This means that the latter claim can possibly be true and cannot be proven untrue unless there is a source of absolute knowledge that can be used as a reference to my knowledge level. Thus, there is always the possibility that something exists that I don’t know I don’t know, and that cannot be proven wrong unless all knowledge is finite. However, if knowledge is finite, that means there exists a point in knowledge learning that I can reach where there is absolutely no chance that I do not know what statements I do not know. And since I’ve already shown above that I cannot verify the existence of things that I do not know I do not know, there is no way to prove the claim that knowledge is finite. Thus, knowledge is infinite because no matter how much I learn, the claim that there exists at least one thing that I do not know I do not know is still valid, albeit and due to it being intrinsically unverifiable.

Another argument to prove that no one can have absolute knowledge is that knowledge can be many versions of the truth. Different believers in different gods would have different knowledge versions of what a god is. If I possess absolute knowledge, then I must “know” all the different versions, which means that I have to possess all possible opinions of any topic, and “know” them to be true individually. This contradicts being opinionated or knowledgeable on a topic when you possess all possible opinions. This last statement can be simply proven by stating that such an opinion (of all opinions) can be a form of one opinion, with which there exists at least an opinion that disagrees with it (all opinions that “know” one version would implicitly disagree with all other versions), which forms one more opinion that is not included in this universal opinion, unless the universal opinion also includes opinions that do not agree with itself! Which shows self-admission of a weakly formed opinion, which doesn’t rise up to the strength of knowing something absolutely.

What is knowledge? Knowledge is “knowing” something absolutely. It could be viewed as subjective as it can be polluted with one’s opinion, although to that person, her opinion is truth. “Knowing” one’s god doesn’t mean that that specific god exists. I can “know” anything I want because it doesn’t have to be absolutely true, although to me specifically (in my opinion), it may be. It is easy to prove that knowledge is not always true, by looking at all religions and how they cannot all be true, especially given the contradiction among different aspects of those religions. Furthermore, if knowledge was always true, then knowledge does not exist today because I won’t know for sure if what scientists discovered today would remain standing (remain true) in future discoveries and I won’t know for sure that my understandings of the nature of things around me would hold. Unless I can prove that, knowledge does not exist until the definition of knowledge is relaxed and it can encompass true and false statements as well. Knowledge has to include both true and false understandings of a phenomena. For example, “knowing” Jesus Christ was resurrected, to be true for one person such as a Christian and to be false by a Muslim. Thus, “knowing” that Jesus Christ was resurrected can be simultaneously true and false in the domain of knowledge.

Also, another argument that knowledge doesn’t exist if it has to mean absolute correctness or trueness (invariant across people), is that my knowing of my god, and yours of your god mean that neither of us possess any knowledge, given that there are two versions of it and both cannot be true at the same time. So, knowledge can be false and subjective, and can have many versions of varying truthfulness.

How is knowledge different than opinion? Belief? Understanding? An opinion is a formulation or a result of a collection of knowledge elements or facts. A person formulates an opinion after acquiring knowledge of a certain subject. An opinion leads to an established or fixed belief that is no longer subjective to deviation. Understanding of something defines a weaker knowledge in the topic. “Knowing” is a most powerful understanding of something.

Knowledge is relative and subjective. In Plato’s cave, one learns a lot about other objects around him by observing. Sometimes what you observe is a minimal representation of the actual object or its original behavior. Maybe I just see shadows of the real object, and the object although fairly represented by its shadow, is significantly different in reality. My knowing of the object may converge or even diverge as more characteristics of the object are revealed. Furthermore, since the learning experience cannot be provenly bounded, there is no way to determine its ceiling, knowledge can only mutate and never be fixed. The moment knowledge is fixed for all topics, the moment we solve all problems in the world, observable and unobservable, and reach absolute knowledge.

Is there such a thing as absolute knowledge? Can it be attained by anyone? Can it be described? What is absolute knowledge? I know what knowledge is (defined above). And I know that knowledge does not always have to be true, correct, or complete. And I know absolute knowledge to be “knowing” all versions of everything. If all knowledge can be quantified and identified, then it must also be assumed attainable, which means that all knowledge has to be finite. I have already proven that knowledge is not finite and can never be proven to be finite due to the need of a proof to address the following contradictory statements:

1. All knowledge can be reduced to knowledge that I know I know, and knowledge that I know I don’t know after some learning.
2. There exists at least one thing that I do not know I do not know.

Thus knowledge is infinite since the first statement above cannot be proven given the second statement being unprovable since we cannot prove that all the things that we are not aware exist, do not actually exist. This implies that knowledge is infinite, and cannot be fully attained, and our knowledge is relative, and can and will encompass absolutely true or false things.

* The three classifications mentioned above are borrowed from a presenter at the No Fluff Just Stuff IT conference in 2009.

Advertisements

Summary of Instruction Level Parallelism Limitation

December 5, 2012

Limitation of ILP

1. Code is not mostly parallelizable. Upper limit on parallelization according to Amdahl’s law. ILP speedup may need to be in the 5 to 20 factor to be accepted generally given the VLIW processor complexity that needs to be introduced to achieve that [A]. During simulations, even with increased hardware available to processor, programs did not achieve a corresponding linear increase in performance by exploiting ILP [C].

2. Data dependency. Either stall and waste resources (and have a simple hardware), or:
2.1. Data speculation [B] – complexity of handling predictions (serialized and non-serialized methods), handling spurious exceptions, memory disambiguation/aliasing, and misprediction undoing penalty.
2.2. Forwarding – does not completely avoid stalling, and increases hardware complexity.
2.3. Instruction reordering (compiler and/or hardware) [C]. This technique is used to remove data dependency mostly originated by waiting for a memory operation to finish (memory operations account for 30-40% of total code [C]). This approach introduces hardware complexity such as reorder buffers to allow out-of-order execution but in-order retirement of instructions [C]. Memory delays could also be shortened through the use of I/D caches. However, those present their own sets of challenges and limitations (limited size, enforcing data coherency across processor caches, managing efficient cache replacement policies overhead, etc.) Generally speaking, there are many ways to accomplish instruction re-ordering:
2.3.1. Compilers can tag instructions with dependency flags (all instructions this current instruction is dependent on) such as in dependence processors (Dataflow). This can also be accomplished by the processor itself without the help of the compiler such as in sequential (superscalar) processors (although they may also use suggestions from the compiler but will not guarantee using those suggestions) [A].
2.3.2. Compilers tag how many instructions within the last M instructions that this current instruction is dependent on (such as in Horizon processor) [A].
2.3.3. Compilers can group instructions together in traces (this will include moving and duplicating instructions in various basic blocks of execution to allow executing (early) instructions as part of a basic block that would definitely be executed regardless of control decisions between. More code size, but higher performance overall.
2.3.4. Compilers can use register renaming and loop unrolling to remove data dependency across iterations, and speed up execution (sending separate loops to execute in parallel), this is referred to as software pipelining [A]. This adds a trade-off between how many loops to get higher throughput versus increasing code size (many loops) when some of those loops may end up unnecessary (iterations end earlier than unrolled code). Software pipelining goes beyond loop unrolling, it also brings code not dependent on looping outside of the loop (some to the top [prologue] and some to the bottom [epilogue] of the middle which is truly iterable code [kernel]), and then the true iterable code will be re-rolled. This type of compiler scheduling is called Modulo scheduling [A]. This approach can also cause register spilling (more registers needed than absolutely necessary for program execution), condition prediction (we need to speculate on whether the loop would be executed at least one more time to unroll – static prediction), true dependencies in data used in iteration i after being written in iteration < i, memory aliasing issues (will some pointers in one iteration write to the same address as in subsequent iterations?), etc.

3. Control dependency. Either stall and waste resources, or:
3.1. Branch prediction – complexity of handling predictions, handling spurious exceptions, and misprediction reversal (reservation station, instruction caches, and instruction commits are used to allow this).
3.2. Simultaneous branch execution (branch fanout) – more functional units, more registers, waste of resources that otherwise could have been used somewhere else, more management of what gets committed, and what gets to be discarded, etc.
3.3. Compilers and hardware working together to add more delay slot instructions, reordering of instructions.

4. Optimizing and parallelizing programs depend on knowing which basic blocks (or portions of the code) would run more frequently than others – execution frequency of basic blocks [A]. This can be achieved via analysis of the control flow graph of the code through the use of profilers. This is not a straightforward process, and it is highly dependent on the workload at runtime.

5. Basic block ILP limitation [A] can be mostly attributed to (aside from data dependency already mentioned above) limitations of functional hardware units due to similar operations within the block (albeit independent). For example, if the processor has 5 ALU units available to execute 5 adds in parallel (same cycle), but a basic block has 6 independent adds, then we need two cycles to execute instead of one. That is why VLIW instructions will include differing operations that can execute in the same cycle rather than many of the same operation (dependent on what is available in the hardware). Furthermore, ILP could be limited to 3-4 parallelizable instructions out of around 10 in a basic block (high limit) [F]. This is just a limitation of parallelism in the code itself.

6. Naming dependency (except for true dependencies). This can be resolved with register [C] and memory (except for ones with alias problem potential) renaming which is usually done by the compiler [B]. It is still limited by register availability and management (besides potentially introducing register spilling issues, we may also run into bandwidth issues in register files due to more reads and writes on the expanded list of registers).

7. A big reason why code is hard to parallelize is address calculations [D]. Eliminating or reducing long dependency chains of address calculations via compiler optimized code is seen to increase ILP. The paper [D] refers to some techniques in other resources to address addressing computation optimization, so I will have to do more reading.

8. Most of the data dependency that limits ILP comes from true dependencies (read after write dependencies) because the other two types (anti-dependencies [write after read] and output dependencies [write after write]) can be managed with renaming [E]. Those true dependencies come primarily from compiler-induced optimizations to support the high level language abstractions [E]. The compiler will introduce a high usage of the stack to reflect activation records corresponding to function calls and private variables, introducing a true dependency that would significantly reduce parallelization [E]. The true limitation is not based on the time it takes to allocate or deallocate the stack pointer register for an activation record, but based on the long chain of dependencies introduced [E]. [E] shows that even if all dependencies were completely eliminated, leaving only those that update the stack pointer, the total performance gained is nearly unchanged (controlling the absolute limit for achieving ILP). Removing stack update dependencies, however, have shown to provide significant performance gains even compared to perfect prediction and renaming – use heap based activation record allocation instead of stack allocation (accept higher overhead of allocating to enable multi-threading and true parallel execution of program traces). Other suggestions may include the use of multiple stacks or switching between stack-based versus heap-based at compile time based on the depth of the stack calling chain (the deeper the call stack, the more benefit gained from using heap-based activation record allocation) [E]. Some papers show that by increasing the window size, more parallelism can be exploited, while [E] shows that while that may be true, “distant” dependencies (beyond the window size) cannot be exploited with out-of-order instruction issue by superscalars, and other methods are needed under a reasonable window size limitation.

Things to look for or read about

1. Window size adjustments. How about compiler-controlled variable sizes?

2. Perfecting branch predictors, very important since it has a major impact on exploiting ILP. Most papers I read have done simulations under unreasonable assumptions such as perfect prediction, unlimited resources, unlimited bandwidth, unreasonably low penalty cost for mispredictions, ignoring spurious exceptions, etc.

3. Handling memory aliases at compiler time.

4. Choosing stack based or heap based activation record allocation at compile time. Maybe even considering multiple stacks – addresses true dependencies introduced by the compiler via deep chain of function call dependencies. A major performance increase can be gained here.

5. Clock rate per operation variation to increase throughput for faster operations. This can potentially increase a low ceiling on potential throughput even for embarrassingly parallel operations on the same CPU.

6. Generation of per-thread-based traces by the compiler, taking into account shared versus dedicated on chip memory, possible proximity to shared caches, etc.

7. Can traces be concurrent rather than parallel? Allowing for concurrent execution rather than parallel execution (allowing values to forward or be written to shared caches rather than waiting for a complete trace to finish before another one to start even on separate cores).

8. Maybe enforce convention by the compiler to allow predictable address fanout (range of memory address) for given functions or programs. For example, for dynamically allocated objects, the compiler may enforce via hints to the hardware how far apart they need to be on the heap, which will allow the hardware to take advantage of locality when loading a cache line from memory. Those can only be hints due to memory allocation and page replacement strategies, but a cooperation from the hardware and hints from the software can increase this utilization.

9. Exploit the nature of sequence analysis algorithms to optimize performance.

10. A hybrid processor approach to realize ILP and DLP (combining VLIW/superscalar and vector processors).

Sources

A. Instruction-Level Parallel Processing. Joseph A. Fisher, B. Ramakrashna Rau.
B. Limits of Instruction Level Parallelism with Data Value Speculation. Jose Gonzalez and Antonio Gonzalez.
C. Exploiting Instruction- and Data-Level Parallelism. Roger Espasa and Mateo Valero.
D. Limits and Graph Structure of Available Instruction-Level Parallelism. Darko Stevanovic and Maragaret Martonosi.
E. The Limits of Instruction Level Parallelism in Spec95 Applications. Matthew A. Postiff, David A. Greene, Gary S. Tyson, and Trevor N. Mudge.
F. Limits of Instruction-Level Parallelism. David W. Wall.

Are you efficient?

November 16, 2012

We excessively talk about efficiency (such an inefficient use of the word I may add) when we refer to things like an efficient car because it consumes less gas. We use the word everyday without a full appreciation of its meaning (compared to the alternative), and how it can be attained. However, once understood fully, addressing it in our everyday life can make a big difference. Efficiency can make our life easier, more productive, and allow us to, well, spend time writing blogs. Efficiency means an optimal use of your time. Not less, not more than what is absolutely needed at doing something. It doesn’t mean that you have to be working all the time. It just means that you are more productive so you can have more free time for yourself.

I keep hearing people blame technology for the diversion of our attention from things that matter. I am one that always uses his phone for work, maintaining a social presence, and browsing the Internet for “stuff”. However, as the things I do on the phone increased with the years, I ended up spending a lot of “wasted” time on my phone. For example, when I hear a “ding” when an email arrives, I immediately go to unlock my phone, and check my email. However, a lot of times the email turns out to be a spam or not so important. Unfortunately, that is not the end of it. I found myself, once I unlocked the phone, browsing other applications such as twitter, facebook, wordpress, etc. It almost seemed like I unconsciously felt that since I unlocked my phone, I was entitled to use it for a few minutes before it went into “locked” mode again. To generalize, I found myself going to my phone all too often, and wasting the few minutes to follow most of the time. All started because of a stupid email from travelocity regarding how it only cost $10 to fly round trip to Hawaii. One day I realized just how much time I spent on my phone doing nothing but wasting minutes checking things I already checked, and doing things I don’t really need to do. So, I made a decision one day that I will make my time on the phone more “efficient”. Being efficient can only happen with me unlocking the phone ONLY when I really need to. So, basically, I wanted to minimize how often I unlock my phone. But how could I do that? I decided to do a few things:

1. I started using custom ringtones to everything that I usually respond to on my phone. I customized ringtones specifically for family versus friends versus co-workers, etc. On iOS 6 you can customize ringtones per email account that you have. Not only that, I could group certain email addresses within a VIP group (a concept on the iPhone) and give that group a special ringtone. I distinguished notifications from various applications by assigning them different tones than default ones which are usually re-used across many applications. This customization change I applied to my phone allowed me to place the phone locked and only head to unlock it when I heard a tone that I knew was important enough given the time of the day. I noticed my browsing time on my phone was cut by multiple folds. I don’t spend less time on my phone, I just spend my time more efficiently.

2. I removed all notifications from applications that I don’t care much about.

3. I created filters on my incoming emails across all email accounts to archive and make read all emails that I am not too interested to read right away. Of course when you have spam emails coming in, try to see if you can unsubscribe from the sender (only if it is a legit sender!) so you can kill the excessive emailing at the root. Those filters allow me to hear less dings (when an email arrives) on my phone, which leads to less time on the phone.

Furthermore, I decided to take advantage of technology to make my overall time more efficient, even away from browsing my iPhone. So, basically I decided to use technology to save me from technology in ways such as:

1. I bookmarked all my useful and most frequently visited websites. This helps a lot. Once I open my browser, I have all my shortcuts to most frequently visited sites in my favorite list, and I can just click on the site that I want to load. Now, because I have a username/password to unlock my laptop, and another one to load my virtual machine, I can afford to not worry about saving my passwords on the browser, so I save all my passwords and I don’t have to log in with them manually. That speeds up my process of loading a page. If you have a lot of those pages, organize them into folders so they are easily accessible.

2. Un-clutter your paper space by changing all your statements to online statements. This way you can receive them via email or access them via their website. What I also do is add those websites and my login information (encoded) to the calendar entry for when the statement is issued (when the bill is automatically paid). This way I have all the information about a statement/bill right there on the calendar entry.

3. I write things like my driver’s license number, plate number, frequent flyers, etc. on an app on my iPhone so I can retrieve them when needed.

4. I use an app on my iPhone to sign incoming documents and re-email the signed document back to the sender without printing or scanning anything. I proudly say that I haven’t needed to print anything in months 🙂

5. You have a bunch of tasks to do? You keep thinking about when you will be able to get to them? Well, thinking too much about when you will be getting to a task will consume your time, and you will end up spending less time doing fun things, and at the same time you haven’t even started on your task. So, create a task list and keep adding items to it. Items that are deadline driven can be added directly to your calendar. If you know you will need to start working on a task X number of days before it is due, add a reminder to that calendar entry that will pop up X days before it is due. This way, you forget about the task completely, and when you will need to start working on it. Your calendar will let you know! Once you have that list, completely forget about everything you need to do. You will be notified when you will need to start working on one of those tasks.

6. I tend to drive a lot. With the crazy traffic in Chicago, it is a great opportunity to plan my tasks to take care of phone calls on my car bluetooth as I drive. It is a wasted time anyways. You may ask me: Don’t you want to listen to some music?? To which I answer: You must have not read the beginning statement of this paragraph because with Chicago’s traffic I have enough time to cover all my calls for the day and listen to music.

7. The single most useful special case I would like to share is the use of online tax preparation software like TurboTax. I have been using it since 2008 and I am in love with it. Not only do I get to learn a lot of things about how taxes work, but I have found it very handy when I needed to get my tax papers from two or three years earlier. All I have to do is log on to TurboTax and retrieve my taxes for any year, and download it.

8. Thinking efficiently pushed me to optimize other things in my life. For example, I like to read books, and there are so many books I would like to read. Specifically in theoretical physics, computers, astronomy, cognition and brain functions, etc. I, however, found myself taking way too long reading one book. I found the reason why, and shut up it is not because I am a slow reader! It is because sometimes I just don’t feel like reading about how the neurological system in our brain works, and instead I would like to read about quantum physics and how simultaneous particles synchronization works even when the two particles are across galaxies from each other! So, what I ended up doing is not reading about what I want to read at the time, and the book that I started reading is being put on hold. So, I realized that the most efficient use of my reading time is to start reading a book whenever I would like to read it, even if I end up having many books partially read. This way, depending on my mood, I can switch between books and overall I end up being more efficient in reading!

I am crazy you say? Well, applying the things above, and always looking to make my life more efficient allows me to have plenty of time to myself. I play basketball, soccer, and get to do other things outside of my full schedule. You may say that I am only able to do all those things because my schedule is less busy than yours, to which I reply no, my schedule is full of things to do and worry about. However, thanks to my task list, at the moment I have no worries at all and the only thing I am thinking about right now is how the hell I am going to end this post so I can go and have my tea!

Use technology to save you from technology and make your life simpler!

Evolution: Nature versus IT

June 20, 2011

I’ve always wished I had an eye on the back of my head every time I attempted a shot on goal while playing soccer, and someone slide tackled me from behind and striped the ball away. I always wished that my legs and feet moved as quick as my eyes blink. Instead of accepting the lack of human “features”, I got to thinking about why evolution stopped here. We always came to understand evolution as a process through which living organisms evolved into the next level of their species. What is not always talked about or instantly realized is that evolution is not really “the” process of evolution. It is rather a process of acquiring just enough “features” to allow the species to survive and continue to reproduce. It is a concept of survivability (a very specific and limited type of evolution). That is why humans, like me, never needed to have an extra eye grow out of the back of their heads just to be better at playing soccer. Soccer, despite being a great sport, is not a necessary factor in evolution. Which I may disagree with because I am a soccer fanatic, but aside from the point (distraction susceptibility is not a factor in evolution?), evolution stopped at what was absolutely needed for the human kind to survive. And a third eye was not a main consideration. It is a great concept and a good way of looking at things. However, coming from the digital world myself, it made me think: is man made evolution more efficient than nature controlled evolution?

What is efficient? New features added in order to lower risks of extinction may be considered efficient. But it is not efficient enough. Thus, not efficient. Why not have more of a leathery skin to avoid the risks of abrasion? Maybe because skin injuries are not devastatingly dangerous to the human kind. I always thought to myself, what if software delivered just enough to make the software work? And just freeze the version that works and fire your entire IT team afterwards. This raised two interesting questions in my mind:

1. Why is software evolution different from nature’s evolution?

2. Why is it that nature is “better” at introducing less “buggy” product while software tends to be relatively very buggy in comparison?

So, I decided to get off the IT wagon for a second and try to understand why nature stopped at providing just enough to survive while software continues to innovate beyond necessity. I thought to myself; well, maybe they are not different. Maybe, software’s “new” features come out of the necessity for survivability. After all, there is much fiercer competition among software providers than, well, nature evolution providers. Nature has a monopoly on evolution, and hey, if you don’t like the fact that you cannot have a third eye on the back of your head, go to another planet, that runs its own rules of evolution based on a different chain of accidental environmental events that led their species to where they are today; unlike here where soccer players lack the ability to see all around them at the rare occasion of facing the goal one on one. So, software evolution is exactly like nature evolution, except, it has the requirement of having to evolve much faster than nature. It has to. To survive the competition. So, why don’t I have an eye on the back of my head? Simply put, because I cannot go buy another three-eyed head from another evolution store.

What about question 2? Why does nature manage evolution better than we manage software evolution? You can argue that software is always introduced with more bugs than nature introduces with a new feature. Take eye lashes for example. When eye lashes release 1.0 became public hundreds of thousands or more years ago, do you think it was buggy? Maybe hair was too long it kept scratching the eye? Maybe too short to prevent sand from attacking the eyes? Maybe too thick which got the eye lids tired from blinking the eyes with such heavy weight lashes? Maybe a different color than other parts of the body? Etc. Well, we weren’t there to know for sure, but we can conclude that eye lashes today are pretty much perfectly designed (putting the God discussion aside for now). Why can’t software be that, well, perfect? So, I got on the IT wagon again and thought; well, if I were the designer of a software application and was asked to evolve it over millions of years by introducing one small change at a time, then maybe I will create the perfect software? After all, it is not really a fair comparison because evolution is allowed to introduce a small change once every some hundreds of thousands of years. This allows it to quickly fix the small release over a much longer period of time. So, if I can introduce one feature at a time, separated by 100,000 years, then I can definitely perfect it like nature did, and maybe even better. Think about it, your new feature is being tested by millions of samples (unit tests or people) in a real practical environment for many many years, delivered in a perfectly authentic agile process. And the change is so small that it can immediately be fixed without major changes. So, maybe nature is not better than us after all. Maybe we possess the same power to evolve things just as perfectly. I would argue that we can even be better because unlike nature, we don’t carry the element of experience so that our next evolutionary step can be better calculated. Nature has existed and controlled evolution over its various courses. Software is not only controlled and evolved by mortal beings, most of the time the developer leaves to another company with a different plan and type of evolution every two or three year cycle. So, without our limited time of control, and the ability to operate without pressure from competition, we may be better at evolving software than nature at evolving us. Mind you I am still on the IT bandwagon drinking the coola-IT.

In my opinion, the lack of competition in the natural evolution field changes the name of the game from evolution to survivability. While software is purely evolutionary. To continue to be in the competition, software has to go beyond what is necessary to what is convenient. Which makes it more efficient as a tool. If my program needs a third eye to allow it to function “better”, I will add an eye. If a woman wanted to go through pregnancy in two minutes and get back in original shape immediately, I can and will do that (I remember those days when I had time for Sims). While nature is stuck in the very much, very mechanical process of having the baby grow in the womb and pushing all other poor organs out of the way, and stretching others for an extended 9 months period. We are used to it. We grew with it. It doesn’t kill the mother. We believe it is the only way, but it is inefficient.

Maybe humans will be better and more efficient at evolving computer brain than nature was at evolving humans’ brains?

Speak Customer: Why Business Specific Languages Will Revoluntionize IT

January 27, 2011

For many decades, IT was regarded as a support engine for many business functions. However, the actual role of IT was a lot more than that. It became the master of business processes, and it imposed a new way for business domain experts to do their work. It forced those experts to change the way they approach their own work. The best example of this horrible crime is health IT. For many years, IT was set out to convince people in the medical domain that they should use software to conduct business. They need to use a program to express themselves, and document patient’s history and present treatment plans. After all, it is so much easier for the doctor/nurse to pull up the patient’s records all in one place than to search among endless papers that are all over the office. It is also easier to transfer information to other locations to ensure faster and more efficient treatment experience.

This is all beautiful. The medical domain bought into it. And it was all for a good cause. However, medical software became more and more complicated. We have also run out of acronyms to describe all the programs created to support what used to be a simple medical workflow. Today, we have EMRs, EHRs, PM (Practice Management), PHM (Practice Health Management), etc. Doctors and nurses found themselves lost in a big jungle of software navigation mess. Thousands of fields to fill out. Fields spread over hundreds of pages and forms. Fields whose names change periodically, as well as their location. Fields whose values are hard-coded in drop downs that made sense to a computer programmer who created them. If I collected a penny for every complaint I heard from a nurse or a doctor over how a field name or value did not make sense to any of the medical staff but it was imposed by the programmer who was responsible for that page…

There is a major move in the IT industry toward the promise land of IT. The land where IT knows its role and responsibilities, and what it needs to deliver in order to support (not take over) the business. This move is specifically led by the adoption of DSL (domain specific languages). Software developers started to realize that maybe business experts are the best at expressing business rules and workflow. Maybe, the business expert should not just hand a requirements document to the IT person to implement. Instead, maybe the IT person should create the tool necessary for the business person to be able to express those rules herself. DSL delivers just that. It adds a new layer above the technical implementation by software engineers. A layer that allows business experts to write their own rules in simple enough to understand language. Then, a software will run to convert those expressions into more computer-like language that IT understands, just enough to run and govern those rules.

With DSL, many technologies blossomed such as scripting languages (Groovy, Ruby on Rails, etc.) because they are very simple to use, and they eliminate all the ceremony in code writing. This made it easy for less-technical staff to write rules and logic, that was later enforced by a deeper technology (typically the technology that compiles and runs those rules expressed using those scripting language). Other technologies such as BRMS (business rules management systems) allow software engineers to create an environment where the business expert can create business rules to be enforced later using a business rules engine.

2011 will be the year where IT moves out of the way, and back to behind the curtains, driving the support engine rather than steering the car wheel. This is the year where business experts will have a bigger role controlling their own business rules, and data flow. This is not just an opinion, but an observation by the more than obvious move to DSL in various industries.

At MedCPU, we are pushing the bar higher, or farther. We founded the company just about two and a half years ago because we believe that DSL is not good enough! It is not enough for IT to create the tools necessary for business experts to create their rules and flow. This is a good step, but not deep enough. At the end of the day, DSL was intended to push the work to the business unit in describing the rules and data flow in simple enough language terms that not only the business expert understands, but also the application itself. With DSL, not only IT has to compromise by allowing the business to express their own rules, but also the business person involved by having to learn something outside of their domain so the software they are using can understand what they are trying to say! At the end of the day, the business expert is not going to write her rules using her own language that she is used to write with, because the software is not capable of understanding her native language. She is still using a new language imposed by IT, albeit a simpler one than before. At MedCPU, we continue to realize that the business person is the end goal. However, we believe that to accomplish the ultimate goal of IT (working as a stepping stone and not an obstacle), we need to allow the business expert to speak her own language without compromise. It is IT that will have to do all the compromise needed to analyze and interpret what the business person is saying, and translate this into what the application can process.

Domain specific languages are too generic to express how one specific domain speaks. However, a business specific language (BSL) is the language of business that IT will have to learn (and not vice-versa). No need to use a language that is generic enough to support multiple business lines within the same domain if we can write code that speaks the language of the specific business line. This is the future of IT, being an enabler rather than the driver of business.

Using the medical example I pointed out above, at MedCPU we raised the bar of IT. Instead of requiring all medical staff to understand the language of IT and type data into structure fields so IT applications can understand it, we tell the doctor/nurse to type data using their own language they learned at school in free form. It is the job of the IT to take free form text, lab orders/results, pharmaceutical orders, and convert into structured format before processing the application on the data. The MedCPU system connects to all data repositories at our clients’ sites, and “listens” to all incoming data in real time. This data is mostly in free form, but that is no problem because with our Medical Text Processor (MTP) component, we can analyze the text and extract medical elements within the context of the patient case. Sometimes it is hard to understand the context from within the text, but that is no problem. Our Protocols Processor (PP) unit massages the data, and puts all extracted keywords within context. We spend most of our time learning how the doctor or nurse does their job, rather than impose our own rules or language on them. A doctor/nurse collects all information they can find from various repositories, and then run their own medical logic to make sense of this data. EFW (estimated fetal weight) is relevant until the baby is delivered. And that is no problem. Context processing after text extraction and analysis allows to put things into perspective. What did you say? Start pcn (penicillin)? Here is a contraindication alert because we remember what a doctor documented in a field that is never interpreted or read by any software in the world, last year. He documented that the patient is allergic to penicillin in the all but forgotten comment field towards the bottom of a 100 field form. Does the doctor have to manually go into the allergies field and document that the patient is allergic to penicillin? Does the doctor then have to manually go and check that list of allergies every time she prescribes a drug? Why not have everything in one place that is easy to document and read from at the time of treatment? If that is what you are used to, if you like to document everything in one place, and read everything from one place, then we are going not only to support that, but enable you to easily make sense of this data that is sitting right in front of you. That is what IT is about. It is about continuing what the business expert used to do, but “add” more value. Not take away what the business user used to do and replace it with another framework, methodology or approach. A doctor or a nurse is not used to knowing where each data element needs to go in a heavy weight EMR system with thousands of fields. That is not their job. That is not what they get paid to do. That is not what they were trained on. Yet, to be able to do their job, they need to be experts in navigating complex software that continues to evolve and change. That is, counter-intuitive.

2011 and beyond will be the year where IT will continue down the path of changing its ways. Moving from low level languages, to general purpose and easy to read languages, to scripting languages that are more to the point without the ceremonies of programming, to domain specific languages where all the ceremonies of irrelevant syntax is out of the way, to business specific languages where the business entity will “continue” to write their business rules in their own natural (business specific) language. It will be the responsibility of IT to evolve and understand this language with higher and higher rates of accuracy, and provide additional tools to enable the business expert to do their job better and more efficiently.

Constant Re-factoring Over Design

January 27, 2011

When the waterfall methodology ruled the streets of IT for so long, developers gave so much weight for design. Everything must be generic enough to satisfy every single possible need from the business in the future without major code changes. However, as the old saying goes: Jack of all trades, and a master of none. I have had many discussions with colleagues over the past over how much weight to put into the design phase. Being the IT leader in my start-up, I understand how quickly business requirements change, and even worse, how they may actually become something contradictory to what they initially set out to address. That is why as a successful developer you must always opt out for an agile development approach where you introduce changes gradually. Don’t over-think the design to handle anticipated future changes in requirements. Just do what’s enough to handle the problem at hand.

That being said, there are a few rules to follow. First, just because you are only addressing the problem at hand, that does not mean you should write bad code. You should not introduce hacks or shortcuts just because you are trying to fix the problem of today. Staying away from creating generic implementation that can satisfy every single possible turn and twist of future business requirements does not mean we should write code that will only work for today! We must make sure as developers that we write good code that is capable of change. We need to introduce the proper loose coupling when needed. It is an art to write code somewhere between over-engineering and just plain bad code.

The second thing to keep in mind is to not be afraid of having to re-factor your code. If you are adding more and more incremental changes, and then you reach a point where you feel like your base may not have been created to support the direction where you are going right now with your incremental changes, don’t be afraid to stop, and re-factor. As a matter of fact, having to constantly re-factor your code is a healthy sign that you did not over-engineer to begin with. It is also a good thing in terms of forcing you to re-evaluate some of the legacy ways that you implemented to handle things a few months or years ago. Things change, and having to re-factor may provide an opportunity to clean up some of those old legacy bad habits that were introduced initially.

That said, make sure that you are not constantly re-factoring with every single new incremental change. This means that you are never creating good enough code that is sustainable to begin with if you are always re-factoring. Re-factoring should only be needed after many incremental changes to the same base code to the point where you feel like you are starting to create many one-off cases. Only then you need to go back and re-factor to ensure more of a smooth transition of your data flow throughout the system while supporting the latest business requirements.

Having to constantly re-factor is not a free pass. It comes with responsibility. You must have the proper unit testing in place to ensure that problems reported in the past do not show up again just because you have re-factored your code. This transition should be transparent to your end user. You also have to make sure that your re-factoring is also done incrementally. Just because you have identified that you need to re-factor part of the code, that does not mean it is a good idea to start a code re-factoring revolution and you have to re-factor the entire application. Introduce re-factoring incrementally as well.

To summarize, always write incremental code that is necessary to satisfy the current business requirements. Don’t over-engineer and never over-think about possible future turns and twists. Continue to unit test and add more and more unit tests. When you get to a point where you feel like your base code is becoming a little shaky with your incremental changes, start re-factoring, and make sure your unit tests continue to run successfully. Finally, make sure you introduce your re-factoring incrementally as well so the impact is negligible. The most important thing to remember is to never over-engineer, and to never be afraid of going back to re-factor frequently.

The Grand Design (Part IV)

December 28, 2010

This is a continuation of my last post (The Grand Design (Part III)).

There are many other aspects covered in the book but I don’t see as necessary to state here to make the summary comprehensible. For example, the concept that if you have two theories arriving at the same conclusion, then neither one is more correct than the other. You could actually have multiple forms of the same real law and all forms are correct. This approach is called Effective approach, and is necessary to justify the variations in string theories do not necessarily invalidate them. Additionally, the book argues a model-dependent approach to understanding the universe where you cannot separate the observer from the observed (that nothing exists out of our observation capabilities). That the universe is behaving the way it is because we are observing it to be behaving that way (either through direct observations or indirect ones that come from convenience of such assumptions/observations to make the physics work). This seems to be a strange concept but take a simple example that was in the book. If you observe a sofa in the living room then you know it exists. If you then walk out of the room, does the sofa still exist? If you say yes because you just saw it one minute ago, would you bet your life that it wasn’t removed the moment you left the room (thus it doesn’t exist in the living room anymore)? However, while you are observing the room from the outside and notice that no sofa was taken out, you can “conveniently” assume it still exists because it makes your math correct and the other possibilities are not very significant. This is necessary to justify using M-theory (highly conceptual and unproved theory) as the basis for the conclusion of the book. Although it is unproved yet, it does make sense, and it has predicted accurately many other phenomenon.

Another less obvious but very interesting example is the two-slit with delayed-choice experiment. If you shoot a single particle beam of light through a board that has two slits in it, with another board behind it (where the light lands) you will see that the light exhibits a wave-like behavior because it doesn’t travel in straight line (each of the two slits act as a new source of light shooting light beams in various directions – this is called interference). Feynman explained this by saying that the single particle line did not just travel from the source to the final board, but it traveled to the board then back to the beam source through the other slit, then back again and back again to the beam source, etc. He explained that the beam had traveled every single possible path simultaneously as it reached the final board. Not only that, but the single particle actually interfered with itself as it traveled back through the other slit!! This caused interference! He then took the experiment further and added an observation point to see the particle the moment it passed through the middle board (with the slits). He observed that the light was not a wave, but a particle (he noticed a single particle traveling through the slit). But observing the whole system altogether (without the observation point on the middle board) showed the light to act as a wave and thus exhibited the interference behavior. Wheeler took this experiment even further and moved the observation point to right before the light hit the destination board (instead of observing the middle board). He noticed that when he started observing one slit from the destination board perspective, he saw the light going through that slit. When he changed the observation to look at the second slit he saw the light traveling through the second slit! When he stopped observing he noticed the light had traveled through both slits causing interference on the destination board! This has major consequences because remember we only have a single particle beam that was shot against the middle board. This means that this single light particle (photon) had the choice to travel through either slit one or two. When we did not observe the slits, the photon traveled through both simultaneously causing the interference effect! When we chose to observe slit one, we seem to have changed the photon choice of which slit to take AFTER it had already made the choice to travel through the slit we later decided to observe! When we started observing through slit two, we seem to have told the light to choose slit two to go through AFTER it had already traveled through slit two! Thus, our delayed choice affected the decision made by the photon in the past!

Those concepts of simultaneous existence and simultaneous position at every possible point in the universe (although only one path wins at the end with the highest probability, and this path is referred to as the Feynman sum over histories with every possible path being a history since it has already been traveled!) are very hard to imagine or to comprehend. However, those phenomenon have already been observed in experiments. Their explanations are theories, but they are the most probable theories because they are consistent in explaining the behavior and “weird” outcomes.

When I dove into those concepts mentioned above individually to understand them in more depth, I came to the realization that I had to accept them not because they make sense but because they provide reasonable answers to those weird observations. However, I couldn’t escape adding my own questions to how some of those things are stated or formulated. Since there are a total of 11 dimensions, before any universe is allowed to come from nothing into existence, this means that all possible physics laws (each of which is only unique per universe, but is contradicted across all others) existed in the same 11 dimension fabric. One of which is squeezed out into each universe as it comes out into existence. Does this mean that there was some sort of a “space” that has dimensionality, that already existed prior to any cycle of creating any universe? What is this space made up of? Did it have energy?

Another thing that bothers me is why do care so much about conservation of energy principles when the universe did not exist yet (for this coming cycle)? Why couldn’t the universe start from a plus or minus initial amount of energy? I know that religious people would love my argument because they would then conclude that for such “extra” energy to exist there must have been a super power to “add” it to the system as an initial state. While this maybe true, but then we are AGAIN using the principles of physics to say that this extra energy couldn’t have come without God’s intervention. But if physics did not apply then, then this makes God’s intervention, again, unnecessary to justify the extra added energy. Again, this is not to say that God did or did not exist. This is just saying that the universe explains itself. But like newton believed, maybe God creates the equation and lets the universe work using it without ever interfering with it (i.e. miracles). But that is outside the scope. The reason why I think my question is “extremely” valid is because that would explain all the extra energy that we have in the universe today that doesn’t have a matching canceling energy (to bring the total to 0). If the initial state if the universe was an initial +X or -X, then no matter how many virtual antiparticles you create that are equal in charge to existing matter, you will still end up with excess energy and that may be OK! Of course if this turns out to be true then those antiparticles may not even be necessary!!! Now, if what I am saying is true, that still doesn’t necessarily mean that all energies we came to know don’t need to cancel each other out or the observable balance of energy (a.k.a. First law of thermodynamics) is not true. This is after all artificial energy that was just transformed from existing energy and better be equal to what the object has lost. But that doesn’t mean the entire universe initial energy state couldn’t have started with an initial amount. I don’t understand why that is not possible or entertained.

Another thing that I don’t understand and would love to learn more about is, if objects cause dents or warps in the space-time fabric to cause gravitational effect on surrounding much smaller objects, are only certain objects allowed to make such warps? What is the minimum size or mass that is needed to cause such dent? If curvature is only relative, meaning that every object in existence will curve space around it but that depends on the mass of the object then does that mean that we, humans, can also cause curvature and instantly force smaller molecules to orbit around us? If no, why not if the ratio of mass between us and molecules is comparable to the difference between the sun and earth? If only “large” objects are allowed to dent space-time, doesn’t that imply that it is the mass of the object that transforms the dimensions of its environment and not vice versa? Think about it. Dents mean that you are creating a third dimension on a two dimensional space (think pulling a nicely folded tshirt upward to form a pyramid like shape, and you would notice that you just changed a two dimensional object (folded tshirt) into a three dimensional system). That means that the initial mass of the big bang particle (infinitely massive) is what forced the number of dimensions into existence (from a pool of 11 total dimensions). This has many implications. One of them means that as you travel close to the speed of light (and your mass approaches infinity), you will create your own dimensions similar to what the big bang particle did, and thus YOU will explode much like the big bang particle to form your very own universe!!

This is a very fascinating field. I hope to continue reading (and hopefully writing) about it 🙂

The Grand Design (Part III)

December 28, 2010

This is a continuation of my last post (The Grand Design (Part II)).

We know how to visualize a three dimensional world. With Einstein, we added time as a forth. Einstein argued that time does not exist on its own, and neither does space. They both exist together and relative to each other. As you reach the speed of light, time seems to go slower on your ship (time passes much faster with someone that is observing your ship). As time goes slower, distances shrink (you cover more ground per the same time period). This was stated in Einstein’s special relativity back in 1905. To simplify things, let’s assume you are on a plane. Let’s say you start walking one yard forward and that it took you one second to do that. For a person observing you from outside the plane, you actually traveled tens if not hundreds of yards over the same amount of time. Space and time are relative here to the observer and not absolute. So, Einstein came up with the space-time concept that shows that space and time co-exist and affect each other. That is our fourth dimension. As we reach the speed of light, time comes to a halt (the time dimension is “folded” away) and we only have the concept of space (no time), and this is exactly what happened during the big bang when particles were traveling at the speed of light. That is why it is laughable to start talking about what happened before or during or even shortly after the Big Bang because time is not absolute and it was totally irrelevant as all those events above happened “simultaneously” and not in a simple subsequent chain of events. As the universe expanded and started cooling off, things “slowed” down away from the speed of light, which initiated the time dimension as it became “relevant”. A few things I mentioned and I need to quickly address before you continue to scratch your head. First, you may ask, I thought we said that the universe was shown to be accelerating away rather than slowing down. Wouldn’t that mean if we start with a speed that is equal to the speed of light, wouldn’t that mean that now we should be way ahead of that? Actually, that is correct, but it is the space in the universe that is expanding and accelerating, not particles. Think of it this way, some very strong force may come to your neighborhood and start expanding the space between homes, which effectively expands the total area your neighborhood is occupying. This doesn’t imply that each home will be bigger. As a matter of fact, at the same time your neighborhood is expanding a home may actually become smaller if you were in the middle of downsizing your home (to save taxes on livable space maybe) by removing rooms.

Now, you may ask another question and say: what do you mean by time dimension being folded away? That is good that you asked this question, because it brings me back to my initial point about the multiple dimensions in the universe. I want to start by throwing a bomb first and say: M-theory states that there are a total of 11 dimensions (10 space and 1 time dimensions). after I leave you to scratch your head for a few moments, I come back and go on to describe how to even visualize what that means. Let’s say you have a box that exists in three dimensions (obviously). Let’s say you start pressing against the top of the box to reduce the depth of the box until it reaches very close to 0. You will notice that your three dimensional box is starting to look like a two dimensional square. Just because the height or depth of the box is not entirely and visibly clear to you, that doesn’t mean it doesn’t exist! Physicists call this “dimension folding”. We have folded the third dimension of the box until it appeared as if we only had two dimensions. The other thing to keep in mind is in a two dimensional world, we cannot even begin to comprehend what three dimensions mean (since we are not allowed to escape the xy coordinate system, there is nothing you can do to explain three dimensions to a two dimensional object. Keeping those two things in mind, now the idea that we may have 11 dimensions but all are folded except four (three space and one time dimension) does not sound “as” crazy as it did a few sentences above. Now, according to Einstein (through general relativity), gravity doesn’t exist! It is space curvature or dents that make an object exhibit what we know as gravity. The earth doesn’t rotate around the sun because the sun is “attracting” it. The earth rotates around the sun because the sun makes a dent or warp in the space-time “fabric” causing earth to fall right into an orbit around the sun. That is how Einstein explained why light seems to curve (or bend) around the sun to reveal stars that are located directly behind the sun. The light doesn’t bend, but its space-time path is bent. Think of an airplane traveling around earth in a straight line. From an observer’s perspective who is located on the moon, the airplane is going around in a circle and not in a straight line. To understand how an object can affect another object’s path by just curving the space around it, take an example of the game Curling. This is a game where a player slides a heavy stone down an icy path, and two other players skate on both sides of the stone and keep “sweeping” on both sides to induce curvature in the path to force the stone to slide left or right as it is moving down the path. They are not allowed to touch the stone, but they can affect its path by just sweeping around it causing a smoother incline in one direction or another to change the linear path of the stone to one that obeys changes in curvature.

Now, why did I start talking about space-time curvature? The Grand Design states that the curvature and the number of dimensions that are unfolded, together make up the laws of physics “for that universe”! There are a few assumptions here. First, that all natural laws observed by us come from very few (or just one) physics equation. Everything else was derived as an approximation to understand the behavior of the complex object (human beings, planets, etc.) The real law(s) that started the universe do(es) apply at the quantum level only since the universe started with quanta particles. The simple law(s) of physics that started everything else is (are) a direct consequence of the space-time curvature and number of dimensions. With higher number of dimensions, curvature is changed such that gravitational forces appear to be weaker. While with smaller dimensions they appear to be much stronger. With four dimensions that we have, forces are what we came to know and observe today. According to M-theory, there are 10^500 possible universes based on number of dimensions and their space-time curvature. The book states that ours is the most stable because with higher dimensions, gravitational forces would have been weaker and thus planets would have escaped their orbits (and earth would no longer have rotated around and enjoyed the heat of the sun). If they were stronger (less than four dimensions) planets would have collapsed onto themselves due to the stronger gravitational forces pulling objects together. That is why our universe lives longer and its “bubble” does not burst soon enough for us to not be able to exist. And that also explains “why” the physics laws are what they are.

So, does that mean we have found The answer to our existence? Not yet. There are so many assumptions that were used to come to the conclusion that the universe creates itself over and over again out of nothingness. Which means God is not “necessary” to allow this to happen. First, we are assuming the general relativity of Einstein is correct. It hasn’t been proven to be correct but it has correctly predicted many phenomenon in nature that nothing else was able to explain such as the bending of light with accurate equations, the unification of gravitational forces between big objects and small (quanta) particles, etc. It is also assumed that string theory is correct where matter and force is the same thing (this is necessary to explain how we can cancel the energy that exists in matter by assuming an equal energy exists in force fields that exist around the matter itself). That particles are not particles or waves but small strings that exhibit particle AND wave behavior based on how they vibrate. Strings were never seen in a lab simply because they are way too small to be observed using today’s technologies. It is also assumed that M-theory which encompasses versions of string theory is the correct set of equations that unifies all of string theories (there are many versions and explanations of string theory although they all arrive at same results). What stops us from “confirming” the statements made by the book (and those statements in no shape or form were initiated by the authors, but have been around for a long time), is the fact that we cannot use M-theory to explain how the infinite energy stored in matter is canceled out so we can reach at the fundamental 0-energy balance we were talking about. We assume it is all canceled out, but the only way to confirm this through the math is by proving that M-theory is finite ad solvable. By doing so, M-theory would not only have a mathematical proof, but it would have answered all questions about how the laws of physics came into existence. And if those theories labeled collectively as M-theory, can be reduced to a single equation, then that would be the one equation for everything that Newton, Einstein and physicists were chasing for centuries.

— To be continued here

The Grand Design (Part II)

December 28, 2010

This is a continuation of my last post (The Grand Design (Part I)).

Those virtual particle pairs are existent in theory only where it makes other physics equations balanced. No one has seen them, and if our physics laws are correct, no one will ever see one! The reason is because of Heisenberg uncertainty principle which states that you cannot pinpoint the existence of matter in space with high confidence since mass is energy and energy is mass, and they continuously move into and out of existence simultaneously. This is of course the simplified explanation. The more detailed explanation is out of scope and relevance at this point.

Advanced: Heisenberg uncertainty principle states that you cannot know both the position of a particle as well as it is momentum / velocity at the same time. The higher the certainty of knowing one of those two quantities, the higher is the uncertainty of knowing the other one.

Now, if we are past all the controversy of total energy being 0 in the universe, then it is easy to explain (at least mathematically) that you can have no universe at all one second, and all of a sudden you have one with -X and +X energy coming into existence which is OK because they add up to 0 anyways so we haven’t introduced anything new into or took anything out of the system. Now, we solved the existence from nothing, and collapsing into nothing, in an endless cycle. How does this apply to the big picture (universe) as opposed to just referring to the individual elements of it (particles)? The Grand Design states that the universe did not know anything about big and complex objects when it came into existence. It was all about particles (quantum physics as opposed to classical physics). So, the only laws that applied were quantum physics laws (laws that apply to small matter rather than big matter). It just so happened that our universe “lasted” beyond a critical point where complex life developed as we know it today (as opposed to immediately going back into nothingness). I am going to summarize billions of years worth of events into the next paragraph.

So, the universe was condensed in a very small particle about 13 billion years ago (we know of that value from various observations including microwaves that we receive today from the big bang, and from other observations such as the speed at which galaxies are moving away from each other today and when they might have all been close to each other before they started moving away, etc.) Energy expanded away from the position of the particle in all directions. “space” between those “newly” generated particles expanded faster than the speed of light (only space can travel faster than the speed of light). Stars formed from those highly charged particles (hydrogen -simplest form of atom). As hydrogen existed, so did helium (an isotope of hydrogen). Two helium atoms came together to form beryllium. This atom can only exist for a very short period of time and only under extreme temperatures, and that is why it can only exist temporarily in a star. Another helium comes with a beryllium to form a carbon atom (the only element that we know that is capable of making up a live cell). This process of three helium atoms coming together is called Triple Alpha process. Carbon atoms were and continue to be shot into space after the star explodes in a process known as Supernova. Those atoms then cooled off (slowed down) to become planets. Higher entropy and suitable surroundings (temperature, water and right amount of gases) allowed certain combination of atoms to form single live cells, which evolved over millions of years to what we know today as human beings. All of those are just theories that were postulated using observations of microwave rays that “told us” how the universe expanded and became what it is today, and how long it was evolving for before it reached its state today.

Advanced: By measuring the distances between us and the nearest galaxies and stars, and how fast they are accelerating away from us, we can back track to see how “close” all those objects were going back in time to 13 billion years ago (a number we estimated from observing microwaves that traveled to us from the big bang moment). That is how we came to believe that all those cosmic objects were so close to each other that they were all condensed into a small particle.

Now that we are experts of how the universe came into existence, this only naturally leads us to another logical question (actually, of many logical questions): how is it going to end? When is it going to move out of existence into nothingness again? Physics has no answers for those forms of the same question but there are a few theories. One of which says that as the universe expands, its attraction to the center (where the big bang started) is only getting stronger (like a rubber band, the more you stretch it, the more it wants to go back to its “stable” position). Some believe that the expansion is slowing down until it reaches a point where it comes to a stand-still, then it will all collapse back to its very small and dense particle to non-existence then back. More modern theories claim this is not possible because our observations show that the universe is accelerating in its expansion, rather than slowing down. So, how can the universe just disappear when it is ever expanding and becoming more “complex”? The Grand Design addresses where the universe is going (into non-existence), but it doesn’t address how it will get there. It gets away with saying that we should think of our universe as a bubble forming on the surface of boiling water, expanding then bursting then another one forms, etc. Actually, the book says many universes are born like those bubbles “simultaneously” and some burst sooner than others (thus not last long enough for life to develop) while others last longer (like our universe). This brings up an interesting point. Does that mean there are other universes that co-exist with ours? The answer is yes! Confused yet? Let me try harder to confuse you. Those universes do not “really” exist simultaneously. They are all possible paths our own universe could and has already taken. Let’s first address the “could have taken”, then we can address the “has already taken part”. Think of it this way. If you were on top of a mountain, and decided to throw a rock in one direction with certain force. That rock will end up somewhere in the valley. Now, think of how many possible combination of directions AND forces this rock could have been thrown with. All those are called possible paths that depend on initial state and certain conditions (force and its direction). The same with our universe. It could have taken any of many paths (we will save the other part of the universe having had taken all possible paths to when we mention the Feynman sum over histories later). Precisely, it could have taken any of 10 ^ 500 possible paths! That is 1 with 500 zeros to the right! Now, The Grand Design uses Feynman’s sum over histories principle to state that our universe has taken the “most natural path” which has the highest probability. This is nothing but the average of all possible paths it could have taken. The Grand Design goes on to state that our universe is actually the most stable of all, that is why it has the highest probability (a stable state). Now, what is the difference between our universe ad other universes in a multiverse system? Nothing but the number of dimensions and curvature of space-time. Tighten your seat belts even more.

— To be continued here

The Grand Design (Part I)

December 28, 2010

I have always loved theoretical physics. I have been wanting to grab a physics book and read about any new theory or principle (chaos theory, string theory, M-theory, etc.), especially in quantum physics (the physics of small matter). New principles and theories started to accumulate and I felt like I was getting “behind” and I needed to catch up. But, a person in my position at a young startup finds it hard to allocate those precious moments of reading and researching. And coming from a computer science background, I have to do more reading and understanding than any physicist (and forget about the complexity of math that is associated with it). I came across Hawkin’s latest book “The Grand Design”, and wanted to read it. My fascination in physics was revived and I made a promise to myself that I will not just read the book, but I will also read about all the theories that it references until I have a good understanding of the whole concept proposed. Now that my laptop went crazy, I had to send it back to Dell to diagnose, and I found myself sitting here for a few days without coding. This was the perfect opportunity to finally get the book and start my quest. This post is not meant to be for scientific research. This is just my recollection of all the things that I read in the past few days from various books (I had to go back to read about Einstein’s general relativity to understand space curvature for example). I wanted to make this post as simple as possible, but sometimes it is hard to escape the “big words” that may confuse the average Joe. So, I decided to keep the post simple, but if I wanted to reference the big words, I would include a side note that starts with “Advanced”. You may skip those side notes if you are not fairly comfortable reading them and you won’t lose out.

The Grand Design is another physics book that was set out to explain the laws of the universe, to edge us closer to finding the Holy Grail of physics, the equation of everything, which is famously believed to be so simple and short that it would fit on a tshirt (and that is slowly changing to believing that maybe it is not just one equation but a few of them). Or, at least that is what physicists hope it would be. There are so many things to cover ahead of describing what this book is about, and so many things to say afterward. However, I am writing a post, not a scientific paper or a book like I said earlier. You will still have to do the further reading yourself to validate what I am saying or to learn more in detail.

In a nut shell, Hawkins (if you have never heard of him before then maybe you should stick to my other posts instead) states in his book that the universe did not need a helping hand from a divine “someone” in order to start rolling (or expanding). The biggest argument against physicists who are proponents of the new physics (string theory, general relativity, the big bang, etc.) was well if everything came from an extremely dense particle which exploded and expanded over a very short “period of time”, to form the universe, where did this particle come from? A very valid question given that physics itself firmly states that nothing comes from nothing (well until string theory came about, and I will describe it briefly in this post, where this line changed to: something can actually come from nothing provided that its total energy continues to be nothing). Then physicists replied and said: just because we don’t know the answer yet, that doesn’t mean we should give up trying and hand the credit to a divine “something”. Plus, if there was a God, who created him? And so on and so on. This debate was going on for thousands of years. With the new set of string theory variations (collectively referred to as M-theory), physicists now argue that they found the answer. Everything came from nothing and is going back to nothing! Very interesting considering this violates the first law of thermodynamics. Or, does it? How can energy come into “being” without coming from somewhere? The book took a bottom-top approach, by addressing all theories and laws that eventually contributed to the Grand statement toward the end of the book. I will do the exact opposite. I will make the statement, then dive into the corresponding explanation. If you have hung with me so far, put on your seat belt. We are going to address this right about…now.

The simplest possible term this can be put in is: “0 energy” is what this universe has in total! Even as we exist today, there is positive energy such as when work is being done on particles or objects, and there is negative energy when the particle does work and thus radiates energy away. The sum of those quantities across the universe is 0 as all positive energy cancels out the negative energy. The positive energy used to create matter as the universe started to expand was offset by the gravitational energy that wants to collapse the system back into a black hole.

Advanced: As for the matter itself (since mass and energy are interchangeable), no one knows what would cancel it out. That is where supersymmetry or super gravity theories (M-theory) came to be accepted because they state that the negative energy that is present in vacuum cancels out the positive energy of matter (although the math cannot be worked out yet with all the infinities, which is why M-theory is just a theory although with a lot of potential if proven to be finite).

Now, I am not going to dive into another big and controversial area which is “space” and “vacuum”. What is space made up of? There are many theories such as those that say space is occupied with small amounts of “virtual” particle pairs whose total sum of energy is 0 (this is what the M-theory proposes by suggesting that matter and force are two of the same, and thus there must exist something to cancel out the energy in all the matter that occupies the universe and its space). Those pairs include one particle and one antiparticle (of opposite charge) that simultaneously exist and then collide and disappear again (while radiating gamma rays). In summary, everything in the universe goes from mass to energy, back to mass, etc. And that we have equal amounts of positive energy as there is negative energy, totaling to 0.

— To be continued here