Reader’s digest April month issue made a cover story on why multi tasking is inefficient and risky. I liked the way they presented their views, one example is to write A to Z and 1 to 26 in a paper; alphabets all at one time and numerals the second time. I clocked 20 seconds to do both tasks one by one. Next was to write A and then 1, B and then 2 and go on. This took me more than 30 seconds and I was not able to write as neat as I wrote in the previous attempt. This shows two simple tasks are inefficient when we switch contexts.
They then gave some examples people trying to multi-task and getting into car accidents or falling off the stairs etc (Mostly cell phone distractions). I have observed people who multi-task a lot to be more absent minded. My inclination is also to concentrate on one task at a time and for years I have been reading emails at the start of the day, lunch and end of day & switch off instant messengers at work. I like to compare working on a task to falling asleep, on an average it takes about an undisturbed 13 minutes for an individual to fall asleep; any disturbance before that is going to delay the onset of sleep. I can assume that a task that requires concentration at work will also need that undisturbed time (7 to 13 minutes) to settle into the mode and get going where the instincts take over the conscience (That is the point where I have been the most efficient).
Sadly the work places now are getting livelier and noisier, I mean it literally. Inviduals have begun to dive into multiple streams of work and often have to switch contexts. This leads to inefficiency and puts some individuals into a vicious cycle of coffee, long hours and lack of sleep until they go on vacations. If the environment is also micro management friendly then that adds more fuel to the vicious cycle of inefficiencies.
In my workplace I have observed people concentrate the most when they play a team game like AOE, where the only conversations are brief messages and status exchanges as the goal is to keep moving until you win. The work place core hours should be inclined that way to cut out not only literal noise but also disturbances which will make us switch contexts too often. Some rigidity in the schedule is required as it helps to get people into a rhythm, the schedule should also keep in mind the team’s composition to accommodate different individuals as they peak at different times during the day. Try getting your team and members work on a mutually agreed schedule of no meeting times and feel the difference it makes to every individual.
Like the memo function in programming our brain tends to get conditioned over time to provide immediate output to inputs. A good example is learning to drive. Earlier one is too conscious about the steering, vehicle’s response to throttle and brakes; over time people forget the fact that they are driving and indulge in nice music or a conversation as driving becomes automatic to them without having to think.
Doing the same thing again and again makes the task etched so well into our brain. This is true for any given task whether it is good in nature or bad, the subconscious does not differentiate and it keeps trying to make you efficient. Therefore it is important for us to make sure our exposure from friends. books, tv and workplace is generally positive and our attitude is generally positive.
Over the years I had a chance to work under different kinds of people and subsconsiously they have shaped me to what I am today. I have observed often that the bad habits gets passed from the peers than the good ones as they have an illusion of short term gains. The bad habits gets passed on mostly in the form of gossip and getting the bad views and thoughts over and again is so powerful that it can create illusions that can last a life time as the real data wont be verified.
For example, the resistance to change was so powerful that it took me about 6-7 months for me avoid the words ‘actually’ and ‘basically’ when I talk. After I decided to get rid of them, I kept a conscious watch of when I use those two words. For the first few weeks I used to say those words and kick myself because I keep repeating the mistake. About a month later I was successful in controlling those and forgot tracking that after the first couple of months. After 6 months or so I noticed that I had got rid of it, unlearning was far more tougher and time consuming process than learning.
The difficulty to unlearn is due to the brain’s inclination in making the input/output super responsive that most of them would be cached. The instincts are the ones which mostly controls and the conscience is a mere supervisor. We should make sure to check that we dont form any habit that make us look incompetent and will make us pay a lot to unlearn.
Not only we should avoid negative influence, we should also keep learning and try to increase our skills in depth and breadth, as over the course of time the brain will make the learning process more efficient and we will get better and quicker in picking up new things.
Practice makes a man perfect. Keep learning every day.
I was very curious whether the way you think and act is directly related to the language you speak. I did some Bing search and stumbled on few blogs which mentioned about the lack of left or right in a language called Kuuk Thaayorre. They have to refer everything in terms of cardinal/ordinal directions. There were interesting examples in Scientific American. I was impressed by the fact that in the language Kuuk Thaayorre it is impossible for someone to refer something without knowing the direction. This forces them to be oriented always and that is because of the language they speak. It even affects the way people think about time and space, the English say the future is ahead and Chinese say the future is down there or the English say it is a long day and the Chinese say it was a big day. So a person’s thinking is influenced by the language s/he speaks.
Will these be applicable to programming languages? Is a programmer’s thinking influenced by the first language s/he learns? It seems it could be true. I observe that Java as a language did not change much (faster) but polyglot programmers have contributed to bring in efficiency and elegance which they learnt while using other languages. An example which I also stated in my older post (Don’t make me think) is LambdaJ, which helps in writing expressive code in Java when working with collections while not worrying about writing obvious for-loops. Frameworks like Roo help us to avoid mundane Java boilerplating and concentrate only on functionality. There should be many more out there which has helped Java developers but influenced by the features of other languages and frameworks.
A programming language has an option to keep growing through upgrades unlike the spoken languages. I am not sure why a spoken language need to be restricted from acquiring parts from other languages. I am the one who missed asking the question “How manyeth candy are you having?” when I started learning English. It took me a while to understand how to ask similar questions when I had to translate from Tamil to English.
Which developer thinks better? Java or Ruby or C#…..?
EDIT: Some bloggers pointed me to http://en.wikipedia.org/wiki/Sapir-Whorf_hypothesis and http://lambda-the-ultimate.org/node/1067#comment-11228
I was fond of playing music instruments from my school days and whenever I got a chance, I tried my hands on some hit film songs. For years I was just memorizing the notes of film songs and kept trying on software pianos and small kid’s keyboards. I would say I was at the same scratchy level of playing the instruments even after 10 years of knowing what the notes meant and the physics behind them.I continued to do that in college and even after getting a job until I met two individuals in my new job who could potentially have a career in music.
They saw my enthusiasm and referred me to a professional instructor who in turn made me sign up for grade exams from trinity. I was vary of investing 20,000 rupees in an electronic keyboard and 15,000 more for the school fees as I had doubts whether I could learn anything very new when I am so hard pressed with office work and frequent travel. I anyways signed up for the classes and made a resolution that I will try at least an year.
The first few weeks had been the toughest, I was not able to concentrate on the instructions as I was always preoccupied with something else; but I made it a practise that I will use the keyboard once every day for at least 30 minutes. After the inertia I felt the learnings were progressive and my interest grew stronger to move ahead. I also started reading a lot of theory about music and a semester later my instructor said I was ready for the exam. The exam day was the most interesting, I had been rehearsing both in the mind and the keyboard for good deal of time and when I went into the hall I performed with amazing clarity (I was surprised how smooth that was because I have never played any lesson continuously and flawlessly before). I cleared the exam with a distinction and my instructor allowed me to skip a grade level for the next exam.
What I gained in that one year of learning music
- If you are interested, then no matter how busy you are; you will find the time to learn.
- Learning along with friends helps you get off the inertia and keeps you going. It creates a peer pressure when you advertise what you are up to.
- 30 minutes every day in an activity is far better than 5 hours at a stretch every week, as it provides a continuous feedback on where you are.
- Competitions, deadlines, goals prepare you to learn a lot better than learning something as a pastime.
What are you waiting for if you are interested in starting something new? Advertise what you want to do and start doing it every day, one fine day you will realize or be surprised how far you have come off from the starting point.
Get over the idea that only children should spend their time in study. Be a student so long as you still have something to learn, and this will mean all your life.
Is abstraction is what which makes code look smaller, simple and easy to understand? I was looking for the dictionary meaning of the word abstract and found that abstraction is some thing like “You flip the switch and light comes on”; as an end user I do not worry about the internals as long as I flip the switch the light comes on. While this is very applicable for the end user what about the electrician?; does he need to deal with this level of abstraction? The electrician needs to have an understanding of the internal wirings and the load the switch is capable of handling, in order to maintain or make repairs.
In software world I have observed something similar, whenever my peers refer to bring an abstraction, mostly they meant to find a word to compress the steps of doneness. Abstraction means you as a developer becoming an end user of a part of the solution, where you do not need to worry about the internal workings. Compression is finding a term to represent the entire process underneath which will be commonly understood by all the developers. An analogy of this to a restaurant kitchen is the word ‘marinate’ is not an abstract term, every one in the kitchen understands this and the chef merely has to say “marinate the meat for 20 mintues, use the secret sauce”. The situation would be different if the process of marination is automated and you have a machine to do that, in that case the staff is end user of that process and not part of it and hence s/he is abstracted from what marination is.
What holds good in a regular development life cycle, abstraction or compression?