Software Creation Mystery - http://softwarecreation.org

Archive for the ‘Skills’ 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 >>

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

How to Become an Expert. The Effective Way.

experts are made, not born – Scientific American

Disclaimer: This post is devoted to a person who wants to become an expert – the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to be the best.

If you want to become an expert, it is not enough to follow your work assignments or occasionally play with interesting stuff at home. You have to push yourself hard in specially designed way.

@Work
Your paid work tasks and projects are not designed to make you an expert. Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal – make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods. We cannot blame our organizations – this is part of the deal – they pay for your work and expect specific results. But… is this the best way for you to become an expert, acquire new skills and gain knowledge? To become an expert, you have to make many mistakes, learn from them, experiment with alternatives and work hard on your weaknesses. How many organizations do allow this risky, unproductive and unreliable way of working?

@Home
Your play at home with interesting stuff has problems too. To satisfy your programming instincts and curiosity, you will probably select what you enjoy to do and eager to try. You’ll immense in this activity and find great satisfaction from doing it. But…  is this the best way to become an expert by doing only what you like? Becoming an expert requires hard, sometimes unpleasant work, specifically designed to improve your performance and push you over comfort zone. Read full post >>

The Elements of Pragmatic Programming Style. Composition.

A really great talent finds its happiness in execution.Johann Wolfgang von Goethe

source

Qualities of well composed code:

  1. Quick discovery and understanding of programming logic and components
  2. Clear organization (for human brains)
  3. Ease of reuse, modification and evolution
  4. Close connection between customer ideas and system implementation

Read full post >>

Pair Programming: To Do or Not To Do

Pair Programming is a great way to build software systems. When Pair Programming works, it has significant benefits:

  • better ideas – continuous brainstorming, larger knowledge pool, less gaps in understanding and more brain power to solve design problems;
  • better quality – fewer bugs, instant validation of ideas, consistent approach and stricter adherence to team conventions;
  • better knowledge – experience and knowledge sharing, deeper understanding of why, how and what was done;
  • increased productivity – better focus and higher intensity, pushing each other and motivating to achieve best results, less procrastination and wasting of time;
  • more enjoyment – most people like to work in groups and solve together interesting problems.

Extreme Programming leaders insist that all significant development should be done in pairs. But can we say that Pair Programming is the best method in all situations?

Read full post >>

The Elements of Pragmatic Programming Style. Approach.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. – Antoine De Saint Exupery

The approach to programming is concerned with finding the best ways to translate programmer’s intention into the good system design and code.

The programming is communication. The programmer continuously add, change and refine ideas in the code. Source code has two important goals: tell a computer what to do and tell people what the computer should do. The program code is the only true medium for storing and communicating ideas about the software system behavior. Quality of the ideas expression in the code directly affects overall quality of the system.

So, what are characteristics of the good code?

  1. clear - easier to work with ideas;
  2. minimal - less effort to understand and change ideas;
  3. testable - easier to validate ideas.

These are 6 top reasons for bad design and code:

  1. lack of expertise
  2. unrestrained technical curiosity and creativity
  3. missing big picture: system purpose and customer goals
  4. blindly following popular methods and over-using technology
  5. sloppiness; lack of attention to details
  6. over-complicating design to have more work or increase job security

The programmer can write better code (and avoid most of these problems) by improving programming style and approach.

Read full post >>

The Elements of Pragmatic Programming Style. Intention.

“I made this program longer than usual because I lack the time to make it shorter.” – paraphrasing Blaise Pascal

The Elements of Pragmatic Programming Style is the collection of rules for pragmatic programmers. This collection doesn’t pretend to be comprehensive guide how to program. Rather it concentrates on fundamentals: how any programmer can build better software for the customer. Some of the rules are obvious, but, surprisingly, many programmers don’t even think about them. They make same mistakes over and over again. I hope this post will inject a healthy dose of pragmatism into your programming style and make it a bit better .

Style Components:

  • Intention - understand your task and how to get it done
  • Approach - basic principles of writing code
  • Composition - organization of code
  • Expression - expressing ideas in code
  • Object Oriented Pragmatic Style

The goals of Pragmatic Programming Style are

  1. Building reliable software fast.
  2. Delivering maximum value for the customer.
  3. Writing code that is easy to understand, change and share.

Intention

“Everyone hears only what he understands.” – Johann Wolfgang von Goethe

Understand your task and how to get it done


Sidereal
Read full post >>

Top 5 non-traditional traits for survival of in-house programmers

undefined

Can in-house software programmers become extinct?

Companies spend millions dollars  on in-house software development. There is no easy escape for business – they must use software in today world. Companies need in-house programmers for specific for their businesses applications and pay hefty ransom. But will it continue forever? Companies are not happy. And there are few trends that can put in danger a large population of in-house programmers:

Thought experiment

 

Lets imagine the worst scenario. Suppose the dark day came – somebody invented a machine that can program. Non-programmers can use the machine for building software for their business needs. Technical knowledge and programming skills are no longer needed – just tell machine what you want and get a software program. Will it be the end of in-house programmer’s era?         Read full post >>

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