Software Creation Mystery - http://softwarecreation.org

Archive for the ‘People’ Category

How to Become an Expert: Making Ideas Stick

Are ideas born interesting or made interesting? – Chip & Dan Heath
angelderoca

You have 2 options to communicate your ideas:

  1. Tell people what is interesting for you – easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
  2. Make your ideas interesting for other people – hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.
This post is devoted to people who are interested in the second option.

Why should a programmer care about communicating ideas to other people?

It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:

  • team – to contribute and explain your programming ideas
  • customers – to discuss and build trust in your solutions
  • end-users – to make your programming ideas useful for users
  • programmers of the world – to share your knowledge and exchange ideas
  • capitalists – to sell your ideas
  • low tech crowd – to promote technology ideas

Why is it so hard to make ideas interesting for other people?

  1. Curse of knowledge – once you know something, it is hard to imagine not knowing it and communicate to novices
  2. Resistance – many people ignore or resist new ideas
  3. Limited brains – people have short attention span and can be easily overwhelmed by new and complex information

Read full post >>

What do programmers really do?

Computers are useless. They can only give you answers. – Picasso

Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don’t have clear idea what they do.

In this post I want to provide some explanation to uninformed people what programmers really do:

Programmers are translators of human ideas into the language of computers.

They are a link between two worlds – human and computers. Do you think it is easy to maintain this link?

Read full post >>

Three Dimensions of a Software Programmer: How to get things done

What you are as a person is far more important that what you are as a basketball player. – John Wooden

People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting – all people are completely different in their attitudes and behavior. But this comes with price – it is difficult to understand people and even more difficult to find the best way to deal with them.
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.

I offer in this post a simple theory about Three Dimensions of a Software Programmer that could help to put relations with these individuals on some rational basis.

Axioms

There are two basic axioms in foundation of the theory

  1. Constancy - some programmers consistently outperform others under same conditions.
  2. Variability - performance of a programmer varies under different conditions.

Read full post >>

How to become an Expert. Embrace Reality.

Reality is merely an illusion, albeit a very persistent one – Albert Einstein

An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.

Models can be related to anything – software systems, business domain or your personal relationships. Read full post >>

How to Become an Expert. Top 7 Qualities

Experts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.

Definitions
rule: prescribed guide for conduct or action
intuition: instinctive knowing (without the use of rational processes)
tacit knowledge: automatic, unexpressed knowledge that provides context for people, places, ideas, and experiences. Tacit knowledge is not easily shared. As Polanyi said: “We know more than we can tell.”
context: the set of circumstances or facts that surround a particular event, situation, etc.

Problems with rules

Most rules didn’t come from heaven. They come from ordinary people. They are product of practice, theories, traditions and fear.
Problems:

  • context-free – rules reflect standard situations without considering your specific circumstances
  • limited verification – most rules are empirical and do not pass vigorous analysis, strict prove and experiments
  • time sensitive – many rules become outdated quickly in dynamic professions, industries and societies
  • overcautious – fear fuels many rules and seeks to protect from the worst scenario, often imaginable
  • low skills denominator – rules tuned to match capabilities of the majority without accounting for individual strengths and weaknesses
  • misinterpretation – tacit knowledge of experts, which forms base for many rules, is difficult to transfer in correct and understandable form

Read full post >>

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 >>

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 >>

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 - http://softwarecreation.org
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License .