Friday, November 7, 2008

Multi-threaded programs have been marked as the next big thing. With the recent shift in processors from improvements in speed to improvements in number of cores instead, there is a stronger push for creating more multi threaded applications.

The problem with this is that creating multi-threaded applications is hard, except for a few classes of applications where this already occurs. Things need to happen in sequence, and there is only so much that can be done to change that. The processor companies want programmers to create applications which can get better by just adding more cores, so that they can sell more.

That is not the best use of the programmers time. In general, a programmer may have to work harder to improve performance, and a program may only get faster by making it smarter, rather then the underlying processor just getting faster.

But with the proliferation of smart phones (iPhone, Blackberries, ect.), subnote books and netbooks, pure speed is no longer the driving factor. So programs will have to be made to run with lower speeds, and not multi core. So the focus should be on creating tools to help programmers improve performance in general, not just for a specific optimzation of multi threading.

There are plenty of applications where multi threading will be beneficial, and nothing special needs to be done to take care of. A great example is webservers and web applications. Having mroe threads means it can server a larger number of people. As more and more new and existing applications are ported to the web, servers will need to handle more and more demands. So you have this split of writing applications for the personal computer, in what ever form only have limited resources and needing to optimize for that, then the big computers running the web based software which will naturally benefit from the increase in cores with out much additional effort of the programmers.

There is no real crisis coming up. Yes programmers will have to work harder to improve performance, but the performance increases will not come in the means of multi threading (in most cases anyways) but from other areas. They will still receive free performance enhancements as SSD drives become prevalent and disk speeds start to scale, along with increases in performance in memory in general.

Edit: I came across this after writing this entry about P-Completeness here and here that talks about issue of some problems just being inherently serial and that there is no way to create a solution using parallel processes.

Wednesday, October 15, 2008

I have been reading a number of interesting articles over at Paul Graham's website about wealth creation. For me, the most new point that I picked up is that wealth is created. Many, along with me consider the point of view wanting to make money. But rather then consider making money, the point of view is of creating wealth. Since wealth is a more general view, and money is just a medium of exchange.

When you consider it from the point of view of creating wealth, then the idea of money being limited and only having so much to go around, goes out the window. To create a wealthier society, the society needs to be creating more wealth then it is consuming.

One of the main components of this is being able to have enough intrinsic reward to what you are doing that you are being satisfied by the process of wealth creation. Not only that, but the person who is being driven by a love of what they are doing will far outperform another person who is just doing it as a job, even if they are of comparable skills and ability.

Of course, the ability of someone to be rewarded based on their performance varies from profession to profession. Because for one to be rewarded based on performance, the performance needs to be measurable. Trying to reward excellent teachers is hard. How does one identify excellent teachers? It would have to be related to the students and having a positive impact on their lives. Even if one is created, how do you prevent teachers from gaming the system.

This pattern can be repeated from job to job. I think that any solution would require at least two parts. A way to measure and link performance and reward, and a policing type mechanism to reduce or discourage gaming of the system.

Tuesday, October 7, 2008

The world does not need to be that way that it is. Much of how it is, we just take for granted and assume that is the way it should be. We have this basic template of going to school when we are young, graduating from high school, then moving onto college, getting a job, getting married and then having kids.

Yet at every step along the way, we lose people. Not everyone finished high school, not everyone finishes college, not everyone gets a steady job and not everyone gets married and has children. At every step of the one, on needs to wonder is this actually the best way to be doing this in general and is this the best thing for me.

On of the strongest clocks in our society is the school schedule. We all feel the ebb and flow of the school season, with or with out any direct connection to the schools. During the summer, the commutes are easier with out all of the school buses, and as the school season starts the traffic increases. Parents and children alike are transitioning from the lazy days of summer back to the hectic days of school.

The parents are governed by their daily work schedule and the children theirs. This is not unreasonable given the basic idea of central control. The only way to organize the movement and scheduling of people, parents and teachers is to have a strongly regulated schedule.

I wonder how much of it has to be this way. We have built up this concept of the hugely central schools with a massive number of children that need to be governed and monitored. If we were to some how decentralize this, could we alleviate some of the problems of having so many kids together.

Why do we as adults need to be on such a regulated schedule. I know that I find that my productivity and motivation can vary from day to day and week to week. Right now it is evening and I am feeling motivated to write and do this, yet during the afternoon I was mostly not wanting to much of everything.

So much of the way we currently live our lives runs against the way we are currently built to work. I would not go so far as to say unnatural, because that implies that there is a certain way we have to be. But rather that the environment that we are currently living in is different from the environment we as humans developed in, that we have created a number of inefficiency's where we are having to constantly fight ourselves and who we are, with little benefit and great costs.

Tuesday, September 23, 2008

We recently bought a new oil painting for our apartment. As I was examing it, I was struck by the fact that, when looking closely, the picture itself looses focus and you are only able to notice the individual paint strokes. Only once you have backed up enough do you see the picture again. This is most likely due to the fact that when you are too close, your brain is unable to group the brush strokes making up the tree and identify them as representing a tree. If you back up, your brain is able to see enough to fire 'tree' in your brain.

Much of life appears to be like this, examine something too closely and it starts to fall apart. For example with language and words, when examined they start to look and sound like nonsense. This can easily be experienced by saying the same word over and over again out loud. We start to pay attention to the sequences of sounds we are producing, rather then the meaning behind the word. The picture we are creating with our words starts to fall apart and look like nothing.

A similar phenomenon can be witnessed by looking at matter. The closer and closer we look, the less and less it looks like anything. Seems to be mostly empty space scattered with probabilities of something being there and that something turns out to be not much of anything as well.

Yet there still appears to be something there. Just so long as I am not looking too closely.

Tuesday, September 16, 2008

I wonder if the current method of teaching in the University system is the best way. To a degree, seperating knowledge and skills into different areas, makes a lot of sense. Group like with like. But in most cases, life invovles an intersection of multiple disciplines and experiences.

I remember taking two math courses and a physics course one year, and all three spending the begginning of the courses talking about the same subject - vectors and basic matrix math. That just seemed to be a waste of time, teaching the same lesson three times in three different courses. The advantage of this is the ordering of the courses and the option of them being required is flexible, because none of them are dependent on the others, creating a more flexible and modular structure. Given the central importance this subject was to the course, having them taught in each class ensures that a certain level of competance is reached. But how often does this pattern occur through out the courses, and with subject areas and related subject areas being so intertwined, does breaking them up into seperate and discrete classes really make sense. Do alternate models of education exist which are more efficient and capable of producing higher quality of graduates?

I found the intersection of math/computers and human activity/life to be a bit of a quandry. Essentially math and computers like to be nice and tidy, where as life tends to be messy. One cannot put life and human activities into nicely organized boxes and theories. Yet computers become most useful when they support and create useful human activities. Something simple like this blog/journal entry for example.

Yet in the teaching of computer science, most students are only presented with math type tpy problems. This does make sense, because these types of problems are easy to understand and can be used to convey certain concepts about programming, but I wonder if this limits the way we think. Expressing human activity as math and functions, does not seem to be the best fit. This is just a germ of an idea, that will need further developing.

Tuesday, September 9, 2008

I have been reading "An Introduction To Systems Biology - Design Principles of Biological Circuits" by Uri Alon, over the past while and I am finding it fascinating. My first reaction was seeing how much DNA is like code, only so much more. DNA and all the surrounding mechanisms, are like code which writes code which writes code, that then finally executes to do something useful. This produces a system with a high degree of flexibility that is capable of dealing with the many variations of life. The other realization is that life is not random, or at least not completely, that life is the way it is for a reason. This does not mean that, if we were to start all over again that everything would happen the same, but that common motifs and themes would arise, similar to what we see today.

Everything around us is there because it works and does something useful. It may not always be optimal and free of negative consequences, but when you consider the sum total of everything, it come out positive. If it did not work, then the behavior would be changed by random mutations, that could happen at anytime.

For those of you who have stumbled over to my corner of the world, I thought I would give a quick introduction about my blog. My primary purpose is to record my thoughts in some fashion and give them some life outside my head. I am writing for myself, but hope others my benefit from them. I am a Software Engineer by profession, but I spend most of my time thinking about and observing life in general during my free time, and what follows are my ramblings on the interconnected web of life, with concepts grounded in my profession and other experiences.