Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Reflections on Skills of the Skillful

by biohisham (Priest)
on Jun 29, 2009 at 22:13 UTC ( #775845=perlquestion: print w/replies, xml ) Need Help??

biohisham has asked for the wisdom of the Perl Monks concerning the following question:

I have been asking myself many a times these couple of weeks that how can the strongest of programmers be able to program the way the do. I knew some C++ once upon a very recent time, but now it has totally evaporated, no exaggeration, now I am learning Perl with much more focus, but I find myself that it takes me time to come up with code, and I wonder, how does it not seem to take them established programmers that much of time and how amazingly do they go about it when they were learning Perl. I think I am looking to hear about SUCCESS STORIES..... Anyone?

Replies are listed 'Best First'.
Re: Reflections on Skills of the Skillful
by eyepopslikeamosquito (Bishop) on Jun 30, 2009 at 05:00 UTC

    From Peter Norvig's Teach Yourself Programming in Ten Years:

    Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967.
    There are many other useful tips in Peter Norvig's essay, such as: make it fun; learn by doing; talk to other programmers, read other programs; work on projects with other programmers; be involved in understanding a program written by someone else; learn at least half a dozen programming languages; and many more.

    If you have the passion and the ability, the results will come. Be patient. And good luck in your journey.

      Another nice read on this topic is this Scientific American article from awhile back: The expert mind (Ross, August 2006)- "Experts are made, not born."

      It's more enjoyable with the original typesetting and art work, but the text is freely available here.

      It makes the same point of working on problems at the right level:

      "Ericsson argues that what matters is not experience per se but "effortful study," which entails continually tackling challenges that lie just beyond one's competence. That is why it is possible for enthusiasts to spend tens of thousands of hours playing chess or golf or a musical instrument without ever advancing beyond the amateur level and why a properly trained student can overtake them in a relatively short time. It is interesting to note that time spent playing chess, even in tournaments, appears to contribute less than such study to a player's progress; the main training value of such games is to point up weaknesses for future study.

      Even the novice engages in effortful study at first, which is why beginners so often improve rapidly in playing golf, say, or in driving a car. But having reached an acceptable performance--for instance, keeping up with one's golf buddies or passing a driver's exam--most people relax. Their performance then becomes automatic and therefore impervious to further improvement. In contrast, experts-in-training keep the lid of their mind's box open all the time, so that they can inspect, criticize and augment its contents and thereby approach the standard set by leaders in their fields."

Re: Reflections on Skills of the Skillful
by moritz (Cardinal) on Jun 29, 2009 at 22:41 UTC
    and I wonder, how does it not seem to take them established programmers that much of time and how amazingly do they go about it when they were learning Perl

    Do you remember back when you were in school, and learned how to add numbers, it was quite difficult? And yet there are people how solve differential equations on a daily basis.

    Or do you remember how hard it was to keep balance when you first learned how to ride a bike? And yet there are people how can keep balance on a unicycle, and juggle at the same time.

    How? Through practice, of course, and by taking small steps, and getting good advice and looking at good examples.

Re: Reflections on Skills of the Skillful
by GrandFather (Saint) on Jun 29, 2009 at 22:33 UTC

    Innate skill and experience, but mostly experience. As with most things the more you do, and the greater the variety, the better you get (probably).

    It's largely to do with building up tool sets. As you become more experienced you have more past solutions (experience / tools) that you can bring to bear on the current problem and better understanding of the different trade offs each possible solution may entail.

    Since you have already discovered PerlMonks you are already in a good position to gain useful experience: delve into the Seekers of Perl Wisdom archives and try your hand at solving the various problems presented there. When you feel confident, contribute answers of your own to current questions. This is an excellent place to gain experience at almost any level!

    True laziness is hard work
Re: Reflections on Skills of the Skillful
by Your Mother (Archbishop) on Jun 29, 2009 at 23:21 UTC

    What moritz said++. He implied it but I'll spell it out: learning which follows intentional, purposeful steps is learning that sinks in the fastest and is the easiest to build. Practice isn't enough. In fact practice, if done incorrectly, can be a huge, crippling hindrance. This is counter-intuitive to most, I think, but any good teacher knows it.

    We also learn better when learning is enjoyable. This is why I'm a Perl critter instead of anything else. No matter how hard it's been at times, it's almost always been fun.

    Stick with the monastery and participate as much as you can. Try answering questions; even if you don't always post your attempts. Read anything in here that is of interest. This place changed me from a clumsy, chainsaw-style hacker into one sincerely interested in doing things right and in ways that will outlive the first draft.

      Practice isn't enough. In fact practice, if done incorrectly, can be a huge, crippling hindrance. This is counter-intuitive to most

      I blame that saying about "practice makes perfect". Practice doesn't make perfect. Practice makes routine, and practice makes consistent, but, if you practice doing something wrong, the practice will not make you perfect, it will make you routinely, consistently wrong. (Well, unless you distort the meaning of "perfect" enough to say that your wrongness will be perfect, I guess...)

Re: Reflections on Skills of the Skillful
by eyepopslikeamosquito (Bishop) on Jun 30, 2009 at 07:50 UTC

    I think I am looking to hear about SUCCESS STORIES.....
    Further to my earlier general response, I remember a few specific anecdotes that helped me improve as a programmer:
    • Read books. Be careful to read only top quality books. Especially avoid books with titles like "Learning Perl in 24 minutes Unleashed, in a Nutshell for Dummies". Reading those can do more harm than good. When I learnt C, I chose K&R; for Perl, The Camel; for C++, anything by Stroustrup. I deliberately chose books written by the creator of each of these languages so as to get the most out of my limited time. The creator of a language usually has greater insights, especially into the why of a particular language feature. Another book that changed me as a programmer is The Pragmatic Programmer and I still heartily recommend it.
    • Study a large body of high quality code. Learn from the masters. For C, I remember how studying the source code to Andrew Tanenbaum's Minix operating system was an eye opener for me. It taught me how to structure a large body of C code.
    • For Perl, writing a CPAN module taught me a lot. After all the reading and the theory you've got to practice. Doesn't matter that I wrote a frivolous module. I learnt a lot about the CPAN, pause, CPAN testers, dependencies, Kwalitee, module naming, how to design a module's interface, how to test a module, POD and how to document a module, and various tools (e.g. Devel::Cover, Test::Pod::Coverage) that I could never have learnt as well without actually doing it. Researching how others wrote CPAN modules, browsing many CPAN modules looking for a good model for mine was also a great learning experience.
    • My final anecdote is that posting code for review to a public forum (such as Perl Monks) is a great way to improve as a programmer. To get the most out of this, you must develop a thick skin and not be overly sensitive to criticism ... or even being flamed. Goes with the territory. But if you can develop a thick hide, it's a great way to improve as a programmer.
    These are just a few things I remember that worked for me. You'll need to tailor your learning program based on your own personal likes, dislikes, strengths and weaknesses.

      Although I agree with all of the points above, I should also point out that it is possible to learn from reading low-quality code as well, provided you understand that the code is bad.

      Reading other people's code with an eye towards what works and what doesn't is a very important skill. Pay attention to the points that are hard to change or understand, these are things you don't want to do.

      Negative examples can still help.

      G. Wade
Re: Reflections on Skills of the Skillful
by ELISHEVA (Prior) on Jun 30, 2009 at 08:45 UTC

    Thank-you for a thought provoking thread that is stimulating lots of good responses.

    In the late 1990's Justin Kruger and David Dunning did a series of studies demonstrating that the less skillful had a tendency to overrate their abilities and failure to recognize expertise in others. The paper where they presented these results, "Unskilled and unaware of it", makes an interesting read and won them the ig nobel prize in psychology.

    They blame the reluctance of people to give negative criticism; the ambiguity of failure (bad luck? lack of effort? lack of skill?); and a certain catch-22. The less competent are also less able to identify competency in others. They can't see their mistakes or why others are better and hence can't learn from those more expert. They are likely to see the opinions of those more knowledgeable as foolish or silly, rather than insightful. Thus even exposure to experts does not correct their misunderstandings.

    The challenge then is how to break out of that vicious circle. I think deliberately seeking out people who challenge you is one way. The deliberateness helps create an open minded attitude. This can be done many ways: reading the greats (several suggestions have already been given), participating actively in a community like Perl monks, working on an advanced degree, or seeking out the best people at your workplace. If you ever become that "best" in your group, watch out - and seek further. There is always someone who knows more than you or can challenge you with a different take on things. When people start seeing you as "best", they become afraid to challenge you. It is time to look elsewhere to find stimulation.

    Another trick I use is to read widely enough until the material the material I read starts raising the same points over and over. Focusing on the different criteria people use to decide what is right or wrong also helps me learn.

    Best of luck in your learning journey, beth

Re: Reflections on Skills of the Skillful
by sundialsvc4 (Abbot) on Jul 01, 2009 at 02:56 UTC

    During one of the pre-semester teacher's meetings at a local community college where I taught for many years, one of my colleagues frankly said, “there are those who get it, and the rest who don’t and never will.”

    I nodded my head vigorously.

    Computer programming was something that I was interested in, literally, since I was five years old. (The PC would not be invented for another fifteen years...) Because of my interest, and my aptitude, I focused my attention upon it almost exclusively and loved every minute of it. I've broadened my interests quite a bit since those days, but I still basically love what I do and I am proud to do it well.

    The people who are truly good at any sort of skill are people who were naturally drawn to it ... strongly enough to make them willingly invest the time and effort necessary to master it. They might, later on, forget just how much time they have spent. But it wasn’t “magic.” They just did it because they truly wanted to; truly loved it.

      “there are those who get it, and the rest who don’t and never will.”

      I fully agree. But I think the difference between those two groups is neither genetical nor does it involve some kind of god (if you like to believe in god(s)). From what I've seen, it seems to be a problem of the way how and why people learn, and how they where taught to learn.

      The first sub-group of the "don't getters" are those people who are simply frustrated because they learned that learning does not pay. I think their parents and teachers either had no time to teach them learning, or no motivation. And that's a shame.

      Another sub-group of the "don't getters" are people who think (or were made to think by social pressure) that being stupid is a good idea. This is even worse.

      Then, there are those unfortunate people whose teachers insisted that they learn thousands of useless facts by heart, just to forget them as soon as possible after the following test. In the worst case, this was repeated through their entire school career. Those people think that "learning" means stuffing a phonebook into your head so that you can recite every phone number in L.A. during a test. Some people actually become pretty good in mindlessly reciting nonsense. Ask them WHY something happens and they don't have a clue. They never learned, and they never understood. And it's the fault of the teachers and the school systems that allow or force this nonsense. I had teachers for history, english and french that insisted in learning "names and (year) numbers" / german-english / german-french word pairs. History was boooooring, English and French were just fatal. I really learned history years later and I'm still learning, and my english was only improved because someone told me to read english texts instead of the stupid word pair lists. That way, I "got it".

      The people who "get it" have successfully learned how to learn, and they have fun learning new things. In mathematics, they understood how algorithms work instead of learning huge tables. In history, they got a feeling for political and social trends instead of learning dates. In english (or any other foreign language), they understood the "inner workings" of the language instead of memorizing word-pair lists. And in computer science, they understand the ice cold logic of the machine where other people start babbling about magic.

      From my experience, only those "lucky" people can explain what they learned, and they can explain it in a way that others can learn the same. And as soon as they have learned how to express themselves in one of the synthetic languages we use to instruct our computers, they can also explain a computer what they have learned.

      Teaching is a really hard job, and especially the first years require much attention for each of the learners to keep them interested and motivated. But what I see around me is just wrong. Class sizes grow bigger and bigger each year, leaving less time for each individual. There is no money for education, except if rich parents spend it. Buildings crumble, and motivated teachers are rare. Teachers are old and try to get the job done with as less efford as possible. Those learners that really need motivation and support are stamped as dumb or useless. And motivated learners get a lot of social pressure. We are breeding an entire generation of "don't getters" with a few lucky ones that "get it", either due to rich parents or due to motivated teachers, or a combination of both.

      And the teaching problem also ends up in the job. "Training on the job" is often offered here. But it just means that: You get trained to push the left button when the red light flashes, and to push the right button when the green light flashes. Nothing that a properly trained chimp could not do, or ten lines of perl code. You don't know WHY you push the buttons, and you don't know WHAT happens. And everyone panics when suddenly a blue light flashes, or both red and green flash simultaniously, because nobody told you what to do in that case. If you had learned the job properly, you would know what the buttons do and what the lights mean. And you could react properly when something unexpected happens.

      There were some reports in the last months that all told the same story: The crew was trained to make a complex machine work inside a set of defined parameters, the machine ran out of the parameter set, and nobody knew how to get the machine back to normal - simply because no crew member had an idea how the machine works. That just scares me - because those machines were airplanes or nuclear power plants.


      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
Re: Reflections on Skills of the Skillful
by targetsmart (Curate) on Jun 30, 2009 at 09:49 UTC
    I agree to all the above posts in the point 'experience/practice', learning in some form has to be there till you die, but practice is very important otherwise as OP mentioned it will get 'totally evaporated', I did simple things after my initial learning of perl, I wrote lots of perl scripts which helped me to manage my routine work at the bash(shell-*nix) prompt, after some amount of practice, accidentally some search in google about a problem in perl script has brought me here to this perlmonks site, after that it is never looking back. Everyday I am seeing(learning) problems & solutions which I wouldn't see at all if I would have been in my nutshell. I learn more; than I actually was able to contribute here, that is the beauty of this site
    You are in the right place now.
    Utilize it to the fullest possible extent.
    Happy perl learning; Cheers :)

    -- 'I' am not the body, 'I' am the 'soul', which has no beginning or no end, no attachment or no aversion, nothing to attain or lose.
      I agree on all of the above, let me begin by saying that I did not think my little meditation would actually get me such supportive replies, I really used to wonder a lot and even wander around a lot sometimes not knowing where to head next. I Keep Forgetting some of the things I learn , not until somebody points it out in a reply to a code i seek advice for, that is when I remember and sort of bang my head with my hand "Oh I knew this!!!, I passed it across in this book, man!!!!" so this is the learning curve process for it, forget it, get reminded of it, remember it for a long time to come.....Practice makes perfect, I am a bit of a chainsaw-style hacker so far, disciplining myself on using srtictures and warnings and scoping variables, Everyday I spend hours in Perl Monks trying to look for someone I could advice in Seekers of Perl Wisdom, I wanna teach and learn, and everybody, it is just passionate I am that all of us are here in this refuge exchanging and supporting each other. The Monastery, the SOPW, The Meditation..etc everything about this site makes me feel home. Thanks to Everybody and With all of Us around we won't lose the way!!!
        It gets easier if you keep notes and check them before asking/answering questions. You'll be amazed how many times you answered the same question (or wondered how to do something), and eventually you'll stop typing it from scratch every time :)
Re: Reflections on Skills of the Skillful
by Anonymous Monk on Jun 30, 2009 at 00:42 UTC
    skill n 1: an ability that has been acquired by training [syn: {accompl +ishment}, {acquirement}, {acquisition}, {attainment}]

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://775845]
Approved by Arunbear
Front-paged by Arunbear
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2022-01-20 16:30 GMT
Find Nodes?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:

    Results (57 votes). Check out past polls.