ref:
What do programmers really do?
Programmers are translators of human ideas into the language of computers.Translation Between Humans and Computers
There are three main challenges in translation:
- Language ambiguity. Human language is vague,
complex and ambiguous – for example: “This program doesn’t provide good
user experience”. Culture, background and context affect communication
and meaning. On the contrary, any computer language is exact,
straightforward and context-free.
- Levels of details. Humans communicate often in
general terms without many details – for example: “I want this f*
program work right”. It allows them to save time and energy, but cause
two big problems – misinterpretation and possibility that important
details are missing. And a computer requires all details – everything
should be spelled out.
- Thinking style. Humans often think in terms of
needs, outcomes and solutions – for example, “This report should run in 2
seconds instead of 2 hours”. However, computers need algorithms –
sequence of steps how to achieve desired outcomes.
In order to write good software, programmers have to overcome these
challenges, understand humans and translate their ideas into the
computer language.
Skills of a Super ProgrammerAs we can see a super programmer should have two distinct sets of skills to deal with both worlds.
Understand humans and create solutions:
- Communication -ability to establish contact with humans, talk with them without alienating and even heroic attempts to share own opinion.
- Meaning - extract useful information from conversations with humans, decode and make sense from it
- Logic - clearing, removing ambiguity and controversy from human ideas for uncompromising reality of computers
- Creativity - dig, twist and play with human ideas to create good solutions
- Design - wrap programming ideas with human friendly interfaces and convenient interactions
- Big Picture – know how solutions fit into world of users, business and Universe to make your program useful.
Tell computers what to do and build solutions:
- Logic (again) – organize programmer’s thoughts into cohesive software ideas and instructions for computers
- Technology - uncovering and understanding the black box of technology (black box for 99% of population)
- Programming Languages – learn the beautiful, logical and unambiguous languages for feeding computers with programmer’s ideas
- Algorithms - master the most effective ways how a computer can accomplish a task
- Modeling - create abstractions and models for grasping and manipulating ideas in software code
- Practices (as Refactoring, Unit Testing, Continuous
Integration) – recurrent activities to keep system solid, healthy and
possible to change
阅读(996) | 评论(0) | 转发(0) |