Programming Paradigms
In the past I enjoyed the concept and practice of programming because it provided an opportunity to explore a way of thinking about a problem without the usual constraints that one may face in the real world. The greater challenge (hence satisfaction) is in defining a model that will account for any potential failures and still be able to accomplish its intended purpose. As time passed, I have come to focused specifically on design and the resulting architecture. Designing anything is a process of creating a model that can account for the solutions to aspects of the problem specified. That is reductive in and of itself but there are much more insightful aspects of problem solving that need to be taken into account in designing and developing a solution.
In any design effort, the ability to abstract from the problem remains imperative while the generally accepted adage of too much of [take-your-pick] is a poison applies, abstraction done right can provide a practical solution to a multitude of problems. Programming paradigms have always been about creating models that either provide a way for us to give instructions to computers or a way for us to describe the world in a manner that a computer can comprehend and hence process. Programming languages remain a way for humans (programmers, software engineers, etc) to interact with a computer – giving it instructions on what to do and how to handle the particulars of our reality. The models that are implicitly encoded into programming languages represent our thinking as far as the machine-like view of the world or bringing the machine closer to the way we appreciate the world.
What are generally referred to as low level programming languages were essentially intended to enable us to communicate with computers and as such they bare close relationship to the way in which computers operate. Think of the assembly language and how you program in it.
With time, additional abstractions were added that allows us to focus more on giving computers instructions as opposed to prescribing the manner in which the computer carries out our instructions. This focus on instructions gave raise to what are generally referred to as procedural programming languages in which the emphasis was on results of the operations that need to be accomplished. The ability to focus on what you want done and how it is achieved in steps, obviously led to a greater interest in using computers to carry out what are essentially repetitive tasks that could easily be encoded in a number of functions which can then be executed and produce the desired result (or report errors, if any).
This focus on the procedures that are needed to accomplish a task leads to a huge codebase that is both hard to maintain and/or evolve to meet new and/or changing circumstances. This great problem would apparently seem to come from the fact that the procedural way of software development, does not adequately account for how the real world operates. In the real world, things exist and operate as a single unit – there is no difference between what something is and what it does.
Personally, I get the impression that this is the time when programming became a bit more philosophical in a sense that there is a deliberate effort to model the world in terms of its nature and its essence. The nature of the world, describes what the world is: in OOP, this is simply described as the state of the an object which is typically denoted by properties/attributes/fields, depending on the terminology of your platform of choice. You may notice that the nature of objects so defined does not need to change in order to make things happen because OOP relies on message passing to get Objects with the appropriate nature to carry out the intention of their essence as defined by their nature (what you do is defined by your nature and your nature defines what you do).
While OOP allows for a better abstraction from the real world, the manner in which it has been implemented thus far has a serious short coming. All the OOP languages that I have come across are rather verbose as the design process need to describe any application elements of the problem space in code. With increasingly large programs, it comes much more challenging to maintain large programs or ensure that they are tested to the satisfaction of end users. So, testing frameworks have mushroomed around OOP languages such as Java with JUnit (among so many others).
For all intends and purposes, OOP still bears some lingering association with how a machine would go about processing instructions. The so-called Fourth Generation Languages (4GL) like the Structured Query Language (SQL) has shown us to go about expressing our intention to the machine and have the machine figure out the means of getting to our intentions or at the very least least as close to it as possible. The oft-referenced Moore’s law continues its march into ever more powerful machines albeit in a slightly different way. With powerful processors, driving our computers we do not have to be chained to the vagaries of machine type thinking.
Another more poignant point to consider is the increased use of computers for entertainment (gaming etc), business and socializing. The nature of the problems that face social networking applications are markedly different from what have faced businesses at the advent and development of the current mainstream programming language. A business environment invariably has some kind of structure around it which is encoded in policies, procedures, organization structure and the processes that the organization run. Starting from such a foundation, it is then possible to formulate a few procedures which can be executed at regular or ad hoc basis to great effect. However, consider the way in which social networking sites are used – a single person would have a Facebook account, a Twitter account, YouTube account in addition to web mail accounts. These applications have become people centric and the number of people involved an quickly become a challenge for social networking sites that have managed to garner a big enough following.
The social network craze reveals an interesting dimension of how programming languages have evolved over time. At the outside, a few academicians used computers to help with research and then the business world caught on and now we have to face the reality that perhaps programming languages need to be less rigid. Often when discussing IT related subjects, less rigid may easily lead to less secure though in this context less rigid but more robust would be the best outcome in the evolution of programming languages. Objects are good as way to model the world but they lack a certain degree of expressiveness in effectively illustrating and modeling the state of the world as a seen a person who cares more about getting things done and less about the steps taken to get to the end.
Evil (being nothing?) must presuppose Good
How possible is it to be nothing? That is the question that has been going through my mind for the better part of the day. Don’t get me wrong, it is an interesting question in and of itself for the meta-physical ramifications are quite interesting to say the least. Before, I go any further, I am not suggesting any kind of formal training in philosophy but thinking about the meaning and reason of things interests me.
In common usage, nothing generally means the absence of something. So the being of nothing is that it is not something. I am not entirely sure if nothing is evil or not so let me spend some thought on being evil; what exactly does being evil mean? Some time ago I was going through an introductory book on theology and I had a mentor so to speak with whom I held discussions after reading the book. The idea that evil does not really exist struck me as odd – evil is a part of life as everyone well know: droughts, famine, epidemics, war etc. So saying that it does not exist seems like a contradiction of terms.
The explanation for asserting that evil does not exist comes from the premise or observation that anything evil is always a corruption of something that is good – either too much of it or too little of it. Hence the aforementioned list would read like insufficient rain (rain is good in the right quantities), insufficient food (food is a good), absence of a cure to a disease that destroys perfectly good cells, using lethal weapons to engage with other people instead of exploring more peaceful means.
In a sense, then evil could be a corruption of something good but it also begs the question of why such corruption of good is common and pervasive? In all these the main actor(s) remains a rational being, like in the case of war and perhaps even drought and famine. There are countries on this earth where their ability to produce food is exceptionally phenomenal but even within their own borders there is still hunger. I doubt the world lacks the ability to feed itself.
So, evil is nothing hence it is not able to sustain itself in a pure form but supposedly good can sustain itself without any evil in it – I suppose that is what God is then. However, how does that contribute to idea of being nothing? The phrase “being nothing” is rather meaningless in itself in a sense that the moment you talk of being, you are already asserting an existence and so you cancel it out by stating that the being is not? I keep hoping to make sense of a much higher abstraction than the notion of being nothing in a sense that nothing can exist hence the foundation seems rather shaky.
Life Imitations of Fiction?
Edited: Corrected title!
Ok, that should probably be life imitates art but I am increasingly seeing a potential fictional future being constructed right before our very eyes. I like reading fiction, mostly because they provide a chance to examine events from various hypothetical perspectives. It is true that most fiction are based on some kind of reality and that is what make them fiction as opposed to taking leave of one’s faculties.
Movies like Terminator, the Matrix etc bring to life the possible threat that artificial intelligence and robots in general pose to humanity at large. Besides Hollywood having a special effects orgy there are some interesting works of fiction that touch on such subjects. So far I have been an avid reader of the works of Isaac Asimov; one of the good aspects of Asimov works is that humanity is the focus – there are no alien races and the like but the novels focus on the triumphs and failures of the human race as time passes. In the Robot series, the three laws of robotics are prominent to a greater degree as such laws are amended and explored by seemingly intelligent machines.
The three laws of robotics are not in themselves perfect and the amount of materials available (both in support of and against these laws) is quite vast. However, the continued improvements and developments in the fields of artificial intelligence may perhaps lead us to soon require similar guidelines in the implementation of these effective merger of artificial intelligence and robotics. As we assign increasingly complex tasks to automated machinery, it becomes important and efficient to allow these robots to be increasingly autonomous but that autonomy must also not be unlimited.
Until such time that we can successfully create artificial sentience, we are the only species that are capable of a moral (thus ethical) act – judging good from bad and being removed from the chance to make such judgment does present grave threat to how our societies function. What happens when a robot running a factory kills people? Who is responsible for the robot’s actions? They do indeed remain the properties of their respective owners but what kind of liability does the owner have over the actions and decisions of a contraption that seeks to carry out its task as efficiently as possible.
These are weighty issues that authors like Asimov have delved into in a number of books but increased developments in AI and robotics suggests a need for practical and implementable safe guards. Such safe guards become more important in the context of battle robots. These are robots that make life and death decisions will affect their owners (the soldiers in the field) as well as anybody who is in the wrong place at the wrong time. There is a pretty disturbing irony when you consider the fact that a machine (robot) has all the capacity to be as efficient as possible when a robot makes a mistake, it is likely to have a big impact. On the other hand discussions about code of ethics for our creations kind of says a lot about us as creators. Who would be surprised if such code of ethics are designed for our benefit largely while entirely ignoring the potential of a machine?
As someone who is physically handicap, the possibility of an intelligent (albeit artificial) robot enabling the enjoyment of life to its most complete and abundant potential is certainly attractive.
Abstract Wondering
This year has been interesting so far though the things that I am experiencing and will hopefully experience are diverse and thrusts me to an entirely different level of personal development. I am passionate about technology and would talk anyone’s ear off but of late I have been more open to business ideas. With regard to transforming myself into a consummate businessman, it is a challenging under taking as being physically handicap can quickly get in the way of the scale and success of implementing a business idea. I have found a work around which I hope to devote resources to and see how far all these take me. The underlying concept is to take more risks though of course these will be calculated risks.
While on the subject of risks, I have decided to pursue an evolution of character and personality. A while back, I spent time defining, in broad terms, what my understanding of myself was and over the last 3 or so years I have had trials upon my understanding of myself. Looking back, everything seemed to have worked out; I am not saying that I have reached the epitome of personal/character development but I have managed to define a fundamental understanding of myself that can handle adjustments when needed and can successfully navigate pit falls on the way. However, in all that evolution there is an element of risk-taking which I didn’t quite incorporate into it all. That’s the reason why this year shall be different and geared towards addressing my aversion to personal risk taking. There are those who will differ with my self assessment but I tend to think that long term I need to take more risk and that is one of the only ways I can truly reach my potential.
Aversion to risk taking could stem from so many other forces which can range from a fragile ego to simply an inability to handle any failure. However, it is quite possible that aversion to risk might also be caused by a fear to succeed wherein success more often than not leads to additional responsibility for your creation and its effects. It is akin to one day you are a nobody and the next day you have responsibility to a number of other people or businesses. That can sure lead to some doubt about any under taking. Perhaps, I could say that I am of this group – those who are afraid of success. From this perspective, it would seem that success can possibly rob me of my personal freedom but at the same time it is much more rewarding to be responsible for something that has far greater ramifications than anything whose effects are limited to an individual.
It is another year: Happy belated New Year!!
Wow, I have really been keeping to myself in the last couple of weeks; it can all be chalked down to life acquiring a more emergency feel to it so in such situations I usually clump down and focus. I am back on the blogsphere, as they call it but that does not mean that the emergency is over; I suspect I am finally getting the hang of it. I have always been thinking that I should have a recap of what the previous year was like.
The Previous Year …
Don’t you just like what hindsight does to events? It was an OK year which is not to say that it was all roses and party all through but all the things that didn’t pan out and those that did work out all came to balance each other out. Each variety of these events led to a new discovery which almost always leads to a better way of doing things. Please note that better does not always mean a positive improvement but even the attempts at doing less of a good thing is equally an improvement in a certain sense.
At the start of 2007, I setout to gain a much better understanding of people at their own level while at the same time asserting myself when it was necessary and important that I do so. In the process I have met several new acquaintances and perhaps in my own understanding came across a number of things that can and/or can’t stand. In this regard, without going to specifics, I have stuck to the notion of not fixing that which is not broken and of course the interpretation that can be had from that perspective are as varied as the motives and intentions of the interpreter.
One of the more challenging aspects of the previous year was the amount of complication that my life has amassed; yes, I am probably doing too much but then again without reaching that critical point (the breaking point), I can’t be sure that that is all I am capable of. Broadly speaking, I had to contend with school work and at the same time work out the ideas that I have in mind of how I am going to put that education to good use after it is all said and done. I am almost done with this school business which is not the main worry that I have in mind; I am more concerned about what happened when I am suppose to be applying my education to productive (and hopefully wildly profitable) endeavors. I should probably share my thoughts about my approach to how I am intend to make use of my education, given the limitations that I have. Well, calling them limitations may not be that accurate since I prefer to see them as challenges and all challenges go there is usually a way of overcoming them.
In a way, I am still waiting for my Christmas to come around; last year’s festive season kind of snuck up on me while I was not looking. I have been told that the festive season is usually important for the kids and I think I am finally accepting that the last three years had nothing to do with my circumstances at the time. Anyhow, so it came and it went and after it comes the new year which was not that new.
Technology wise, it was an interesting year (like there is any year that is not interesting in the tech sector!). This was the year when I decided to get very personal and intimate with Linux; I am happily running Ubuntu at the moment and gradually gaining know-how though there is room for further exploration. It was in 2007 that I came to recognize the power of concurrency and how it fundamentally changes software development from a fundamental perspective. Multi-cores processes are one of the main ways through which Moore’s Law will continue to be relevant but these processors brings with them concurrency which is relatively new to bulk of programmers who are producing software for the past 20 years. These corporate programmers are not particularly interested in the computer science behind it and in some instances some CS graduates who should know the fundamentals of computers are happy using tools like Visual Basic and others while proudly proclaiming that they are programmers. Anyhow, the free ride of performance increases purely from Moore’s will be coming to an end soon. Please note that this is not something that is necessarily new but it has occupied my thoughts in a fundamental way in the previous year. My response to it was to gain a better understanding of concurrency and its future implications on software development and what the industry is currently doing to prepare the masses to adopt.
One of the key ways of leveraging the power of multi-core processors is making tools that are amenable to concurrency; functional programming have been around for a while as illustrated by existence of functional programming languages like Haskell and Erlang (Wikipedia). Functional programming and features inspired by functional programming languages can give us the tools that are necessary in a multi-core world; this has been happening in a number of R&D departments in large corporations as well as in campuses around the world. Microsoft announced the include of their F# programming language in their .NET Framework. At the heart of all these are ideas that are central to the running of current systems in the name of shared state and mutability.
Mobile Phones certainly was the source of a sizable number of headlines. The now infamous iPhone hit the market and of course towards the close of the year Google took an interest in the mobile phone sector by releasing Android. All of a sudden it looks like mobility is the thing to be and it may well be where it is going to be. The so-called developing countries and/or emerging economies are dominated by mobile telephony and associated services that are consumed through mobile devices.
Note: this is not all that happened last year but these are just the highlights that I can put in any semblance of order of the top of my head.
… New year: 2008
Only one digit has changed in the sequence of the supposedly new year. Look at it this way: how many Jans, Febs … etc have you done already? If you are in the group of people who thing that Christmas is just some kind of a global mass hysteria, then you have probably done a couple of the aforementioned list. So, this year is new because of a change in a single digit; please contrast that with something as monumental as the sun rising from the west and setting in the east or perhaps a brand new sun appearing on the horizon. Well, no matter the change it is as new as it gets and the next new year will build on this very concept as it has always done more than 2000 years (depending on your Calendar of choice) before.
So … let’s see what happens this year. The much that have happened already may be the subject of a future post.
Personality Profiles
It is interesting noting how people behave in general and what they think of themselves as well as their ideas about other people. A person can be described as outgoing or perhaps even reserved though I think extrovert and introvert respectively sounds more appropriate in describing such types of character. It goes without saying that it is not a bad thing to be an extrovert or an introvert for that matter but it is imperative that each person understand himself/herself sufficiently enough to identify which kind of profile fits his/her particular disposition.
The following is a description of Introverted iNtuitive Thinking Judging (INTJ) kind of a personality profile. It is from typelogic.com and credited to Marina Margaret Heiss:
To outsiders, INTJs may appear to project an aura of “definiteness”, of self-confidence. This self-confidence, sometimes mistaken for simple arrogance by the less decisive, is actually of a very specific rather than a general nature; its source lies in the specialized knowledge systems that most INTJs start building at an early age. When it comes to their own areas of expertise — and INTJs can have several — they will be able to tell you almost immediately whether or not they can help you, and if so, how. INTJs know what they know, and perhaps still more importantly, they know what they don’t know.
INTJs are perfectionists, with a seemingly endless capacity for improving upon anything that takes their interest. What prevents them from becoming chronically bogged down in this pursuit of perfection is the pragmatism so characteristic of the type: INTJs apply (often ruthlessly) the criterion “Does it work?” to everything from their own research efforts to the prevailing social norms. This in turn produces an unusual independence of mind, freeing the INTJ from the constraints of authority, convention, or sentiment for its own sake.
INTJs are known as the “Systems Builders” of the types, perhaps in part because they possess the unusual trait combination of imagination and reliability. Whatever system an INTJ happens to be working on is for them the equivalent of a moral cause to an INFJ; both perfectionism and disregard for authority may come into play, as INTJs can be unsparing of both themselves and the others on the project. Anyone considered to be “slacking,” including superiors, will lose their respect — and will generally be made aware of this; INTJs have also been known to take it upon themselves to implement critical decisions without consulting their supervisors or co-workers. On the other hand, they do tend to be scrupulous and even-handed about recognizing the individual contributions that have gone into a project, and have a gift for seizing opportunities which others might not even notice.
In the broadest terms, what INTJs “do” tends to be what they “know”. Typical INTJ career choices are in the sciences and engineering, but they can be found wherever a combination of intellect and incisiveness are required (e.g., law, some areas of academia). INTJs can rise to management positions when they are willing to invest time in marketing their abilities as well as enhancing them, and (whether for the sake of ambition or the desire for privacy) many also find it useful to learn to simulate some degree of surface conformism in order to mask their inherent unconventionality.
Personal relationships, particularly romantic ones, can be the INTJ’s Achilles heel. While they are capable of caring deeply for others (usually a select few), and are willing to spend a great deal of time and effort on a relationship, the knowledge and self-confidence that make them so successful in other areas can suddenly abandon or mislead them in interpersonal situations.
This happens in part because many INTJs do not readily grasp the social rituals; for instance, they tend to have little patience and less understanding of such things as small talk and flirtation (which most types consider half the fun of a relationship). To complicate matters, INTJs are usually extremely private people, and can often be naturally impassive as well, which makes them easy to misread and misunderstand. Perhaps the most fundamental problem, however, is that INTJs really want people to make sense.
This sometimes results in a peculiar naivete’, paralleling that of many Fs — only instead of expecting inexhaustible affection and empathy from a romantic relationship, the INTJ will expect inexhaustible reasonability and directness.
Probably the strongest INTJ assets in the interpersonal area are their intuitive abilities and their willingness to “work at” a relationship. Although as Ts they do not always have the kind of natural empathy that many Fs do, the Intuitive function can often act as a good substitute by synthesizing the probable meanings behind such things as tone of voice, turn of phrase, and facial expression. This ability can then be honed and directed by consistent, repeated efforts to understand and support those they care about, and those relationships which ultimately do become established with an INTJ tend to be characterized by their robustness, stability, and good communications.