Software Creation Mystery - http://softwarecreation.org

Archive for September, 2007

Can Computers Beat Human Programmers? Part 2. Becoming intelligent

Intelligence is what you use when you don’t know what to do. – Jean Piaget

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers

Computers blindly follow our instructions. They are much faster than humans, but still computers are stupid things dependent on our algorithms and knowledge how to solve problems.
Even huge processing power is not enough to start programming. Non-trivial solutions require understanding of ideas, problem solving, learning from experience and much more – everything what we can define as intelligence. Can computers become smarter than human programmers?

What intelligence is required for building programs?

Read full post >>

How to Be Happy At Work. Short tutorial.

Then God said to Adam, “You listened to your wife and ate fruit from the tree. Cursed is the ground because of you. Through hard work you will get your food, every day of your life.”

This Adam curse continues and now – we have to work hard every day to earn our food. It is inevitable fact – most of us spend at work more than half of conscious adult life. How well do you spend this half of our life? Are you unhappy, stressed or bored on your job?

Why people are unhappy at work?

  1. Conflicts with other people and especially your boss. We all humans and, surprisingly not only you, but everybody has own agenda, interests and needs. Conflicts often happen, because we forget about this. Care about people around you and you’ll enjoy their company much more.
  2. Burnout – too much pressure, too much stress, too little time to think about yourself. Stress comes from inside – we are creators of own stress. There are hundreds ways to relieve – better organization, delegation of responsibility, better communication with co-workers. External factors are most important: enjoyment from family, home, physical activity and leisure, fulfilling personal life and achievements. At the end, we work to live, not living to work.
  3. Lack of variety and challenge. And first step to have interesting and enjoyable job is to design your job.

Read full post >>

Can Computers Beat Human Programmers? Part 1. Gaining processing power

Part 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
Part 4. Building useful programs
Part 5. Future of human programmers


Word Freak

Can computers compete with us, human programmers, in the near future? The short answer is yes – if computers will gain enough processing power, become intelligent, could effectively interact with humans, build useful programs and… still be interested to serve humans.

Computers take over more and more people jobs and areas considered exclusively human. Deep Blue beat the human best chess champion Garry Kasparov, it is not possible to win checkers against computers, they create drugs, carry 70 % of foreign currency trades and will do 50% of stock trades in 2010.

But to become better than a human programmer, a computer should compete with very powerful processing machine – our brains.

Read full post >>

Evolutionary Software Architecture or Why Developers Are Not Janitors

Opinions about developers varied from janitors to “prima donnas” in comments to my previous post Do We Need Software Architects? 10 Reasons Why Not .
Beside discussion about the role of the software architects, the underlying philosophical problem is whether software development is primarily top down (centralized and planned) or bottom up (emergent and adaptive) process. If software development is top down, the architects are essential and crucial people on the project, who concentrate knowledge, establish technical leadership and guide development teams. If software development is bottom up, the developers become primary force for evolving the system, make key technical decisions and care about the architecture; architects (if they still needed) play coordination and mediation roles.

As Goethe said – between two opposite opinions you’ll find not the truth, but the problem. I incline to consider software development as a bottom up process, which occasionally (often in time of changing direction or crisis) needs centralized effort and top down approach.

Evolutionary, adaptive and emergent development of the software system leads to the most optimal solution. However, any software project usually has specific business goal, constraints and cannot evolve forever as natural systems do. Therefore, the main architecture concern is how to balance these two approaches.

Dynamic of the Complex Systems

Complex Adaptive System
Complex Adaptive System

Many complex systems show organization – galaxies, biological, market, society, etc. These systems can be explained and studied by referencing their parts, properties and laws (gravitational, supply / demand, etc.). Another approach is to look for the system as a whole, studying dynamic of the elements interaction and system properties – the science of self-organization.

Can we say that the development of the software system has features of self-organization? Mostly yes, as we have

  • Fluctuations – optimal solution is not obvious and needs search; many useful vs. noise factors affect this search
  • Local interactions – the software solution emerge from local interactions between involved people, business needs, technical platform and IT environment
  • Dissipation – a software project consumes energy to keep going, mostly in the form of money 🙂
  • Instability – software development deals with constantly changing situations
  • Multiple equilibria – there are many possible satisfying solutions
  • Complexity – any non-trivial software project has complexity
  • Hierarchies – there are many perspectives and levels – organizational, technological and solution domain

The only fundamental property, which sometimes is missing for true self-organization – autonomy or absence of external control. Traditional corporation will always exercise some form of the control over software projects. And this is important to resolve – self-organized systems (evolving bottom up) achieve better solutions than rigid controlled systems. But why self-organized systems can produce better solutions? And what is the best way to control them?

Read full post >>

Software Creation Mystery - http://softwarecreation.org
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License .