Problem Solving / Algorithm Skill - skill or can it be developed with practice?

Every time I start a difficult problem, and if I can’t determine the exact solution or can’t get started, I get into this endless discussion with myself, as shown below:

  • This problem is gifted with solution / mathematics / algorithms (not that you can learn by practicing, by practicing, you only master the problems that you have already solved before)

  • only those who went to good schools can do this because they learned it early.

What are your thoughts, is it possible to achieve awesomeness in solving problems / algorithms simply by hard work, or do you need to have this extra gene in you?

+58
algorithm
Jun 11 '10 at 17:45
source share
8 answers

I spent most of my life wondering if the talent was something you developed, or something you were born with. Then it occurred to me that the answer was irrelevant, at least if you want to achieve something yourself. Even if you have talent, it will only help you if you act as if the talent came only from practice, because you will work much harder.

As for algorithms, as well as any other really complex skill, practice is required to achieve good practice. Regardless of whether you need to have a certain talent, I do not know. However, I do know that people have significantly improved competitions like TopCoder by practicing. I myself have learned a lot from this.

If you create a systematic training program, you will be ahead of it, even if it is not perfect. I wrote several hundred programs on TopCoder, and this seriously influenced my thinking. I learned a lot of things that you could ever learn by making them wrong, and then fixing my mistake. My friend wrote several thousand programs on TopCoder, and he is much better than me, although his statistics were worse when he started than mine. This is not a coincidence.

EDIT:

I just stumbled upon this answer in a math.stackexchange file. I think this is one of the best explanations for how to learn the algorithms that I read, although he writes about chess and mathematics.

+49
Jun 11 '10 at
source share

1) Do not try to solve the problem in its most general abstraction.
2) Choose the right time when your mind is at its peak.

I got the first point as a tip from a math teacher. It is working! try to make different examples and scenarios of the problem. This helps a lot in identifying the extreme cases that are most difficult to understand in most problems.

My favorite time to solve such problems is dawn (4-6 in the morning). Sleep well the night before, and awakening is ready to solve the problem. Silence is your friend.

I believe that some people have extra intelligence than others, but this is not the most important factor. how do you use this intelligence to solve a problem.

+23
Jun 11 '10 at
source share

I took magical lessons in a group when I was twelve years old. The name of the wizard is Joe Carota. Once he did a magic trick, and I blurted out: "How did you do this?" He said something that day, which has been stuck with me since then.

Joe's answer: "Michael, if you really want to know how to do this, you must figure out how you do it yourself."

Well, of course, this is not what I wanted to hear, but it made me focus on problem solving. This was a problem from my point of view. If my first attempt to solve the problem took seventeen steps and was really a clone, the good news was that I solved the problem.

Then, looking at the solution that I developed and looking for ways to refine this solution, I learned how to optimize the final result. Later in my computer life, I found out that this process is called "Phased refinement."

He worked back in 1971, and he still works today.

+16
Jun 11 '10 at 22:00
source share

For me, I think this is a little talent, but experience and practice are much more important. If you know a lot of problems and the best solutions for them, you can easily solve a problem with a new problem.

An example from my past: there was some programming competition (good for training, by the way), and I did not find a good solution. The winner solved the problem mainly with the help of KD-Tree. To come up with this, you first need to know what, in this case, KD-Tree, and where it is useful. Today it is clear to me, and if I were faced with a similar problem again, I could quickly solve it.

+7
Jun 11 '10 at 17:54
source share

Hardwork surpasses talent if talent does not work. This statement above determines what the true potential for perseverance is. Any skill in this world can be developed by practice. This process is similar to a nail nail in a wall. It requires not only the right size, but also the appropriate direction.

+1
Jul 25 '15 at 10:39
source share

To answer the question, we first need to find the ingredients to solve the problem.

  • There is a so-called natural talent. This is the talent with which you are born. This determines your potential. People born with a grayer thing will work better than people with whom nature has been less generous. This means that a person with a better talent is more likely to perform better than a person who is not so talented if they had the same parameters (education, personality, resistance to stress, willpower). If someone notices that he or she tends to consume a great time to absorb new information until he or she can apply it, then the wisest decision for a person is to leave programming and prevent a life full of frustration. Naturally, one cannot expect a novice to instantly understand the most difficult phenomenon, but if a novice is too slow to understand the concepts of novices, then programming is not his cup of tea.

  • Developed talent. A person has a natural talent, but this alone is not enough to solve problems. I have never seen newborns writing code. Need to get an education. The earlier the better. In addition, the quality of the school is of great importance. We should never deny the fact that a person who has not had the opportunity to learn programming in a good school before, then he or he has a flaw in the race for success. However, if someone misses good schools early, then the handicap may be covered in hard work. For example, my wife studied in another field, but after graduation she did not find the proper job. So I started teaching her. A month later, she learned to learn and could solve almost any problems that presented to her, but she was not yet effective. She gradually began to study in automatic mode. A year later, she was already a professional coder. She doesn't have paper from school that she can encode, but she does a fantastic job. Thus, she skipped early education, but later was able to neutralize the obstacles. Developed talent can be characterized as a combination of information received and known with the right attitude, a scientific approach to new types of problems.

  • Practice: Practice is good for raising the level of developed talent, but it SHOULD NOT be the only source of talent development. Along with practice, theoretical horizons should be regularly expanded.

  • Working strategy: you can be extremely talented, have a lot of knowledge. If he does not have the right working strategy, he or he has a flaw. Whenever a new task is asked, the right questions must be asked:

    • What was the immediate task for this? Can I reuse my solution?
    • What should I learn to solve this problem?
    • How can I write clear and efficient code to solve the problem?

So the answer is this: although it’s good to have an excellent education as early as possible, this is not necessary. Do not forget that life is the best school, and you can restore the missed opportunity later if you have talent, willpower and a source of information. Practice not only shows you the right steps to solve a problem, but also expands your horizons. For example, if you understand the number systems, then he or she will be able to understand many things later, for example, colors in CSS, PSD or overflow of numbers. If you learn how to code in Java, then he or she will very quickly understand C #. Thus, practice gives you knowledge about solving this type of problem, but also gives you new theoretical knowledge that will be useful in various fields. The main skill that needs to be developed is the ability to learn quickly.

+1
Jul 25 '15 at 13:42
source share

There were many examples of people with extraordinary talent with minimal success. You see such examples in sports, politics, business, and also around you in general. So, I feel beyond a certain limit, talent is a meaningless virtue. His mostly difficult word that rewards you with great success. If you follow cricket, here is a link with a good example. I feel the same principle applies to the algorithm and problem solving. A year ago, I use to solve algorithmic problems, to solve and use, to completely get lost. The year spent reading algorithmic books, solving his exercises, and also studying some programming problems, I am sure that now I can solve most problems (I still have a long way to go to make myself effective in it). But the fact is that smart work is enough to develop this dexterity of problem solving.

0
Jan 18 '14 at 16:36
source share

Talent is cheap and useless without hard work. Talent can only bring you to a certain extent, but with hard work and practice, anyone can reach great heights

- Josh Vaytskin, eight-time national chess champion, 13-hour national and two-time world champion

He himself says it in his voice in the Chessmaster Grandmaster Edition

0
Jun 04 '14 at 13:19
source share



All Articles