Software Creation Mystery - https://softwarecreation.org

Author Archive

Dealing with programmers who are different and disagree

There is nothing either good or bad, but thinking makes it so. – Shakespeare, “Hamlet”


Generally, we are very tolerant and understanding. We appreciate to work with other people, listen and accept their ideas. Especially it is easy with people who completely agree with us. As for people who don’t… How could we appreciate people who disagree with your bright ideas, have own opposite opinion and don’t want to happily follow you? We can fight them, lure them and even force them to agree. There are many persuasion techniques, psychological tricks and political games that could make them to convert to your side. But should we always convert them? This post is devoted to the hard and ungrateful job of appreciating people who think, feel and behave differently.

There are three concepts that help me to deal with these people:

  1. Appreciate the difference
  2. Pygmalion Effect
  3. Seeing the Truth

Read full post >>

Introduction to programming for non-programming spouses

My wife worries about me. She worries when I’m staring at the monitor with the strange text for hours – sometimes desperately, sometimes in excitement. She worries when I skip movies, ignore parties and talk with my computer. She worries why I’m so excited about such boring activity as programming even outside my work. She shouldn’t worry – there are few good reasons to love programming. I want to take an opportunity to share these reasons with all non-programming spouses over the world.

Read full post >>

How to use search skills to become an effective programmer

No man is an island unto himself every man is a part of the whole – John Donne

It is possible to program a web page or small application with little knowledge of programming. Use Google to search for examples and if you are lucky, you will find ready code and your are almost done. Even experienced programmers often retreat to search to save time and effort for finding solutions for their problems.

Modern effective programming is unthinkable without using search, theย  Internet and collective intelligence. Therefore, search skills are becoming primary for an effective programmer.

Now we don’t need to know and remember how to solve many programming problems – we can use search. We are becoming more effective, productive and able to solve wider range of problems. But does it mean that good search skills are enough for building software? This post will review the role of search skills in forming programmer knowledge and how to use search effectively.

Types of knowledge and how it grows in programmer’s brains.

Read full post >>

Sections Update

I’ve updated site sections with more explanation and grouping of posts from this blog.

What can Software Development learn from Biological Evolution?

From the first sight biological evolution looks too unpredictable to have any value for the constrained software development. We just don’t have time, money and resources for these wild experiment, unlimited trials and errors. It really seems that Nature could learn from us how to make things fast and effectively.

However, there are some principles that helped evolution to come up with amazing and efficient designs that made life flourishing on the Earth. This post will explore what software development could learn from biological evolution. See my previous post for the review of evolution concepts and mechanisms and how they could be applied to software development.

Read full post >>

First Anniversary of SoftwareCreation.org

Dear Readers,

This June is the first anniversary of SoftwareCreation.org. I want to share few notes about this glorious event. I dreamed about having a blog for few years, but I didn’t want to spoil our great web space with just another miserable stream of poor writing. Even one year ago I had at least three good reasons why I shouldn’t blog:

  • I’m not a native English writer. Prepositions and articles are still rocket science and source of troubles for me (Russian doesn’t have any articles at all). Composition of good English sentences is a serious mental endeavor. I love English, but I’m missing a lot of language nuances, idioms, abbreviation (e.g. WTF) and touching expressions that children learn from fairy tails, TV shows, mischievous friends and cursing adults. English is not music for my right brain, but hard parsing work for my overloaded left brain, at least now.
  • I wasn’t born as a good writer. I don’t have natural talent to seamlessly compose beautiful flow of words that spark imagination, amaze people and make them forget about their work, wives and even computers. On the contrary, it is much easier for me to produce long boring and difficult to digest logical statements than to create masterfully prepared delicious food for your brains.
  • I don’t know much. I live not too long, I didn’t read as much as I want, I know only fraction of what other people know and I didn’t experience many software projects.


These good reasons and my sanity didn’t stop me and I’ve started blogging. I wasn’t able to keep to myself my interest, amusement and passion for creating software.
Software development is much more than writing code for computers, implementing design patterns and algorithms (I should admit – this is very interesting part too).

  • People. They add vibrant life into this dry process. Software development without people is similar to the birthday party without beer and guests. People bring power of human intellect, creativity and ability to solve impossible problems. But they add many exciting difficulties: we should understand each other, learn to work and think together and deal with our irrationality, personalities and feelings. Oh, yes, I forgot to mention that people write programs.
  • Problems. Customers and users expect that software could solve their craziest wishes. And they are right – software becomes important part of our human civilization: it empowers businesses, science and societies, and makes life of kids and adults much more fulfilling (and entertaining). The problems become more wicked and interesting as we are building systems for unending people needs and push limits of what is possible for computers. Our civilization becomes hooked on software more than on oil, gas and coal. Therefore, civilization need smart guys who could deliver software for challenging demands to keep the whole world going ๐Ÿ™‚
  • Craft. Software development is one of the few remaining professions that still brings enjoyment of building the product from idea to a complete solution with own hands. This profession requires pride for own work and traditions of craftsmanship combined with high level of mastery, knowledge and skills. Good programmers are intelligent creators and masters and aren’t narrow-minded pluggable work units for solving purely technical tasks. Software development is so complicated that we won’t see serious competition from soulless AI soon.


What are results after one year?
52 posts, more than 45,000 visitors and more than 400 feed subscribers.

And I found much value for myself:

  • Better knowledge – most of the articles are product of my learning. As I don’t know much, I find interesting questions and problems and try to answer for myself. In addition, presenting an answer for other people is much more challenging and require much deeper understanding. My blog is one of the best Universities for myself ๐Ÿ™‚
  • Improved communication – I’m becoming more comfortable with English and its expression power – my brains become tuned to this music and even sometimes cooperate to produce nice sentences. Also I learned that the way information is delivered determines what people will get and understand. I’m trying to enhance methods of delivery (visuals, concise ideas and better organization) and make my writing more approachable and interesting. And yes, I know, I’ll never be Shakespeare or Tolstoy, but I’ll be happy if people find something worth of their attention in this blog.
  • More meaning – this blog adds more positive moments to my predictable and sometimes boring life. Opportunity to share, discuss ideas and connect to others people makes my life more meaningful and interesting. And this inspires me to spend more time writing than playing on a computer or drinking beer.


What do you think about this blog? What I can do to make it better?

My Dear Readers, thank you very much for your valuable time spent here! I’ll do what I can to make this blog worth even more time from your busy lives.

Happy birthday! Cheers…

Truly yours,
Andriy

P.S. I have another blog-related dream that I want to implement soon. I want to create separate blog where other people could share their stories about software projects, interesting situations and software development crowd, their managers and customers. What do you think? Does anybody want to share any stores? Please write me to andriy@softwarecreation.org if you are interested, have stories, comments or ideas about this new blog.

Comparing Intelligent Software Evolution to Chaotic Biological Evolution

Software Evolution is similar to a Bible Story: we, software creators, have a plan and goals and pursue them to create the perfect solution. We carefully select and add new features according to our grand design. We try to keep design clean and optimal. Things sometimes go wrong and the software system goes berserk, but we intentionally intervene and fix the problems to continue fruitful functioning of the system.

Biological Evolution is a different story: chaotic raise and fall of different species, without any plan and goals. New traits and variations appear all the time and many are useless or even harmful. Small modifications accumulate over time, cause significant changes and emergence of new species, better adapted for the evolving world. Survival of individual organisms and species is the matter of chance, pressure from environment and competition with other organisms.

Intentional growth of software versus chaotic evolution of organisms… Do they have anything in common?

Biological Evolution

In biology, evolution is the process of change in the inherited traits of a population of organisms from one generation to the next.

Species – a group of organisms that can reproduce with one another and produce fertile offspring.
Population – a localized group of individuals belonging to the same species.
Traits – particular characteristics of an organism.
Genes -portions of DNA molecule, which control inherited traits.
Genotype
– complete set of genes within an organism’s genome.
Phenotype – the complete set of observable traits that make up the structure and behavior of an organism. These traits come from the interaction of its genotype with the environment.
Variations – the variation in phenotypes in a population reflects the variation in these organisms’ genotypes.

Most of the genome of a species is identical in all individuals of that species. However, even relatively small changes in genotype can lead to dramatic changes in phenotype: chimpanzees and humans differ in only about 5% of their genomes.

Read full post >>

The Happiness. Programmer’s Edition.

Happiness is a direction, not a place. – Sydney J. Harri


tookie

Happy programmers are more productive, healthier and live longer. It is pleasure to work with happy programmers. Are you a happy programmer? Do you have feeling of joy and satisfaction every day? Do you want to know how to become happier?

This post considers programmer’s satisfaction with live as a whole (I had another post dedicated to happiness at work).

Programmers as other people are happier if they have

  • more money
  • successful marriage
  • excellent health
  • good friends
  • live in a beautiful place with wonderful weather


But we have what we have. It is not easy to achieve all of this: become rich, find perfect spouse and friends, be completely healthy and move to the best place on the Earth. But the most nasty news is that even after achieving all of this happiness is not guaranteed to last forever.

Read full post >>

The Secret of Building Effective Software Systems

I can’t wait to share this simple secret with you right now.

The Secret: Effective Software Systems are the systems that easy to understand and operate with human brains.

Programmers are more productive with effective software systems. Programmers can better learn and grow these system. Programmers have less problems, work faster and make better decision with them.

Now, you can avoid spending time reading this post if you already know this secret and you know how to avoid building the software system that:

  • almost impossible to understand in reasonable time
  • has confusing and convoluted swamp of logic and structure
  • scary to change as nobody has any clue what will be broken, but sure that it will be broken


If you are still interested, lets find out what makes software systems effective.

Software Development is a pure mental endeavor (except typing on keyboard) that includes 3 main activities:

  • Understand – learn and know system concepts and implementation
  • Evolve – build, modify and support growth of the system ideas in the code
  • Share – communicate and exchange ideas about the system


Programmers should care about 7 areas to make the system better suited for our brains:

  1. Knowledge Creation and Retention – parsing, memorization and comprehension of the system ideas
  2. System Organization – elements, relations and structure in the system
  3. Sustaining Emerging Order – support evolution of the system and gain control over chaos
  4. Minimize Noise and Purify – avoid adding unnecessary stuff to the system
  5. System Discovery and Learning – making sense of the system
  6. Mental Models – our internal explanations for how things are working in the real system
  7. Shared Knowledge – ideas exchange, reconciliation of opinions and creation of mutually enhanced knowledge.

Read full post >>

Top 10 Qualities of The Perfect Programmer

Who are the perfect programmers?

Popular blogger Alex Iskold answers in Top 10 Traits of a Rockstar Software Engineer:

  1. Loves To Code
  2. Gets Things Done
  3. Continuously Refactors Code
  4. Uses Design Patterns
  5. Writes Tests
  6. Leverages Existing Code
  7. Focuses on Usability
  8. Writes Maintainable Code
  9. Can Code in Any Language
  10. Knows Basic Computer Science


It is a solid list, but this list concentrates on the secondary traits, which are just consequences of the deeper set of qualities. And it is an idealistic list. Do you expect the same qualities from a Flash programmer for kids websites and a software engineer for B2B financial transaction services? But how can we recognize a perfect programmer in the crowd of developers?

The Ultimate Criteria for finding The Perfect Programmer: The perfect programmer delivers good software that meets client’s expectations.

Therefore, the shocking truth is that perfect programmers could know only one programming language, don’t have any idea what are design patterns and don’t program all nights in their basements creating the next Google. We cannot objectively measure the programmers perfection like you could measure diameter of your biceps. The perfect programmers are simply perfect if they deliver a quality, usable and maintainable software system [a good system] in time and meet client needs.

Read full post >>

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