Learning To Work And Learn
Dr. Frank Schacherer

As a legitimation for this document, this is the first rule. Just like Paracelsus said, though, "The dose makes the poison". Spend too much time just planning how to become efficient, and there will not be enough time left to really be efficient.

To expand your knowledge and understanding, you need to do three things. If you do not even know of a solution, you cannot learn how to use it. Therefore, it is important to snoop around and widen your horizon. Stay informed. The most effective way to do this I know of is reading computer journals like c't or CACM, for Java checking the JDC regularly seems ok. Journals have lots of staff, who do nothing else than look around for new products, methods and technologies, and filter the interseting ones for easy consumption. Of course formal training visiting a university, can be very helpfull here, too. There you are fed preselected information to give you an overview. Any first idea you get on how to solve something you do not know anything about, will be naive. There you go, programming a bubblesort, since you never heard of quicksort or heapsort. You can save lots of time, get better results and deepen your insights by looking on how some wizard did that stuff. Then you have to practice, practice, practice, to understand why he did things that way and not another way. All real understanding comes from practice. There may be some solution that is so far out that nobody else in the world before tried to apply it to your problem, like it was the case at some time with Markov models, or the application of genetics to programming in genetic algorithms. To be able to discover something like that, you have to think laterally and also have interests different from your problem field. The limiting resource here again is time. Getting informed and snooping around can usually be done as a spare time activity, but will take more then half a day per week.


Learning

It helps immensely if you have masterful works to inspire you and help direct you in your practice. One has to stand upon the shoulders of giants to achieve something in a field so complicated and large. And contrary to Perlis' epigramm, you should sometimes try to change your behavior patterns if there is a better way to do it.

The bottom line is, that you are learning the best if what you do is fun and if you learn to solve a direct problem - problem oriented learning. When you are working on a project you'll experience problems. Since you want to solve the direct problem, you understand the problem, and you are highly motivated to learn and understand what to do to tackle it.


Working

You get work done fast by doing the work that has to be done. It is very easy to get distracted by all the marvelous toys that are out there, and many of which probably are even worth looking at, like compiler compilers, how compilers work, metadata, grammars etc. All of these, if mastered might make it possible to do your work in a much better way - but mastering them, or even grasping the concepts, takes time. Time you will not spend on your actual work, which wont progress. And without the feedback of work, what you look at cannot be truly understood.

Try to structure and automate your data and work processes, so you do not have to spend time re-thinking stuff you thought about before. Organize your information, so you do not have to search for that address again etc. When working with the computer, look out for repetitive tasks that eat up time. It might be worth to automate them with a small shell or perl script, if possible.


Hunting Down Problems

To learn the right things, you first have to understand what the problem is. You have to ask yourself the right question, have to limit the options. Maybe in the very beginning when you do not have enough information to see what is important at all, you have to just skim around , looking here and there, until some kind of map builds up in your mind. It will do this automatically, don't worry about it. Your brain will do this for you. Then, when you recognize the crucial points, you look there.

Also, if you want to eliminate a problem, first you have to find out what the problem really is in a complex system like a computer. If something won't work, there can be lots of reasons. Check out the different levels from low to high with elementary tests, to find out where things go wrong.


Contents taken from www.schacherer.de