You can't think of a programmer as being good enough to push him to the position of a system analyst, software designer, or even a software architect.
If you want to find a person in a team or company that is competent for a software architect or an important position as a designer, first of all, the idea that appears in your mind, I think, is usually the best choice for a programmer. But I think you'd better not do that. This position is not random to find a good programmer can be competent. It may not be appropriate to promote your most senior programmer to this position.
Maybe it's absurd to hear you just now. Why can't I have a programmer do system design? After all, they're all design programs, aren't they? Yes, indeed. But one thing you need to understand is that designing software is relative to writing a program, and it needs a completely different set of skills.
Let's see why a good programmer may not be a good software designer. But first, let's ask ourselves a question, what makes a programmer good or even outstanding? To be a good programmer, you need to have the ability to achieve important software in the real world. It is not enough to write a simple text editor.
To be able to solve major, complex programming problems, a programmer needs to accumulate years of experience in a specific programming language. In other words, in order to be proficient in the use of this language, familiar with the various characteristics of the language, he must focus on the language. That's the problem.
For the man with the hammer, the problem he can solve is nails.
If you focus on one language and you can master it, the problem pattern you encounter is likely to be limited to areas related to this language. In short, if you know PHP, all the problems are basically related to web development. In the same way, if all your knowledge is concentrated in Java, you will be able to solve all problems in an object-oriented direction, even if you use procedural programming to solve your problems better.
A programmer who knows only one or two programming languages can severely limit his ability to solve problems. For example, if your programming language is C, you will never come up with an object-oriented solution to the problem at hand because your programming language does not provide such language features. Unlike Haskell programmers, C + + programmers cannot think of functional solutions. Your programming language provides structure and enumeration types that can seriously affect the way you dissect a problem. If the language you use is weak, or if you only know a few languages, your ability to solve problems will be weakened accordingly.
Language shapes the way we think
Some say our language shapes our way of thinking and understanding the world. I basically agree with this view. When a person's native language has a gender-specific noun, he is not necessarily a man to mention the word "policeman" in the same way as other native speakers. When a person's native language does not distinguish between blue and green, his perception of the world is very different from that of those who distinguish.
If we look back on the three disciplines of medieval schools, they are described as: how grammar-solving concepts and objects are manifested in writing and discourse, analyzing them logically, and ultimately communicating with others for the purpose of rhetoric. For us, the programming language also has syntax. If our programming language is not strong enough, our understanding of things and concepts and how to express them will not have a complete vision.
Language, the function we use to communicate with people and computers, obviously affects the way we think. The richer and more we know about language, the more we can help to improve our ability to solve problems.
So, what kind of person is more suitable?
Well, a programmer with expertise in some one or two programming languages will have some limitations when he solves a problem. He would confine himself to the things he used to allow him to do. Therefore, he will not be a good software designer or analyst.
If we do not use these excellent programmers, who can play the role of software design? Of course, it's not the people who don't know anything about programming. What we need is a generalist. A good software designer must be proficient in programming, object-oriented, functional, and logical programming languages-and also includes a variety of excellent software development methodologies. He could not be familiar with just one method pattern, as in a professional field. Of course, he can't write complicated programs himself, because his knowledge is too broad. However, he can correctly determine what kind of design is the right solution. If the problem is dealing with a nail, he will find a person who is skilled in using a hammer; if the problem is dealing with a boulder, he will call the demolition force instead of wasting your energy with a hammer in vain.
SOURCE Link: Programmers make bad designers