I want to improve my personal efficiency. How better can I calculate my personal efficiency?
I am a programmer. I want to calculate my personal efficiency in programming.
There are far too many metrics to consider, especially if you want to see how much you're getting done instead of how much you're working. If you are a cook, you might want to see the rate of dishes out per minute, and so on. But from your profile, it seems you're a programmer, and you don't need an explanation why 'lines of code written' is a bad metric.
The much easier way is to calculate how much focused time you're able to put in. The key word here is focus, because most of the time we sit in front of our monitors and browse things unrelated to work, or constantly come in and out of focus every 5 minutes and accomplish nothing.
The base unit would be a Pomodoro, which is 25 minutes of uninterrupted work. Don't pick up calls. Don't talk to people. Don't open email. Don't look at unrelated sites. Focus completely for 25 minutes. Small breaks of less than 2 minutes (e.g. bathroom, telling someone you'll call them back) don't break a Pomodoro.
Just measure how many of these you do a day. Most people don't go more than 8 Pomodoros (200 minutes) in a productive environment (e.g. home, quiet office). Some hit 12 Pomodoros (300 minutes) at best for menial tasks. If you're fatigued or haven't had enough sleep, you'll get less. If you can't even hit 4 a day, you should consider what's causing so much interruptions!
For programming and design jobs, where you need time to 'get in the zone', you might want to go for longer timeblocks, as long as you can get that much time without being interrupted. If under fatigue, you may want to go a little less, but it's not optimal, unless you really can't focus for 25 minutes straight.
When does this not work?
I've made a few assumptions here. For one, the person being measured should not be trying to cheat - it's incredibly easy to fake this, so this isn't a great idea for project management.
Obviously, someone who is inefficient will spend a lot more time doing something. However, here, I'm also assuming that they're gaining some skill. There are plenty of methods to measure how much work has been done, but these do not often cater for things like long term gain or training. A person who is not trying to improve should not be measured this way.
Some effort can also be made in better measurement methods, especially results, but these will often have to be fine-tuned. More accurate methods will take time to set up. Some systems don't function so well with skill gain. A good programmer will be assigned to more difficult tasks, which will take them more time to accomplish. Without ranking and comparing the difficulty of tasks, one cannot easily measure this.
You will also have to put that effort in the right direction! Spending a thousand hours learning FORTRAN will make you a great FORTRAN programmer, but it might not actually help in your career.
Do you mean you want to get more done in a day or that you want to be able to solve programming problesm in less time than it takes right now?
The other answers talk about the first, I will talk to the second.
One way to get tasks done faster is to know how to do them without having to look up the answer. I see too many developers who throw away knowledge instead of storing it in their own brain. Looking up stuff you should know is inherently inefficient. (And incidentally knowing your profession without having to look up common tasks will make it easier when you have job interviews.) You certainly don't have to know everything about your profession, but if you are looking up more too much (note: this does not apply when you are learning a new area only for one you have been working in for awhile), or you find yourself continually looking up the same information then you need to start retaining knowlege not dumping it. I probably don't have to look up more than two pieces of professional knowledge a week and many weeks not even that. That is part of why I can often do things in minutes that take others hours.
Retaining basic knowledge gives the latitude to work on the harder problems too as you aren't spending so much time just to get the easy stuff.
Another way to improve your efficiency is to start to link knowledge together and look for patterns in how you solve problems and start to see how the problems you solve are similar. If you see each problem as something new to solve and don't use your past experiences to help you know where to look for the answer, then you are are not working efficiently or effectively. Further many problems have already been solved and the solutions are readily available. So knowing the available libraries and what they do (even if you have to look up the implementation details on one you don't use often) can save you a lot of time. Understanding that this an XYZ type problem will keep you from looking through ABC, DEF, and JKL for your solution.
Another way to improve efficiency is to really learn how to debug. If you can sort out the problem in code faster, you can finsh the project faster. There are some good books on debugging that will really help you understand that troubleshooting is far more complex than running a debugger.
Testing will help improve your efficiency as well. This is part of finding problems faster and before they get too embedded in your project that they are hard to root out.
Thinking about the design before you start to code will speed things up tremendously, esepcially if you find holes in the requirements that need answers. Better to think about how you are going to solve something, realize you need more info and get it before you start to code than spend hours building something and realize at the very end that you need more information and then when you get the new information, you have to scrap what you have done. It takes way less time to fix something in design than later inteh process.
Staying on top of your professional reading will help too. You can't use new more effective solutions unless you are aware that they exist.
Finally don't worry about efficiency very much. What you really need is effectiveness. If what you are doing is effective, the efficiencies tend to come naturally. But you can very efficiently do the wrong things. If I have a developer who codes fast but always misses in his understanding of what the product should do, I certainly am not going to prefer him to the slightly slower guy who gets the job done right.
Okay, here is my answer. Probably off topic and perhaps will be voted down!?
There are quite similar questions here and I think I want to give an perspective to one of them.
In my eyes, you should focus mainly on productivity. One past question was: how can I improve my programming productivity with a 10 finger typing system. That's the wrong question! I can program faster with one pinky finger, than most programmers.
Why? First the main activity in programming is reading. Second, the better you are, the better you can design you program, structure your code and apply high level concepts. This efficiency gain is much more than using 10 fingers compared to one.
Further, a meaningful measuring of the productivity of a programmer is almost impossible.
So how do you improve your productivity as a programmer? The goal is to become one of the best programmers in the world :-) Or just to become a top expert in the field. Your productivity will dramatically improve! Trust me.
So here are just some random tips that I would have given myself 5 years ago. To add some credibility, why I think I can give tips. Currently I am doing my PhD in computer science and my job is to create and design programming languages.
Random tip 1: Surround yourself with top programmers. If you work at a place where all programmers are 100 times better than you, instantly you will get better. I read that somewhere on this forum and it is so true. (But it might be not as much fun and it’s quite stressful!) What I did is I started my PhD and the Professor was just a mentor who was 100 times better. A PhD is just one way, but finding a work place where really everyone is that much better is the best oppertunity.
Random tip 2: Just ask people. I remembered that from an interview of Steve Jobs. He said, just ask! People are usually nice. So I nervously called a guy that I’ve met at a conference. He is really insanely better than me. I told him I was in the area (a lie, but a good intro) and if I could drop by for 1-2 day to work together. Guess what, he said yes, and I went there multiple times. And I learned more than I ever dreamed of.
Random tip 3:
This is the most important one, but also the hardest by far. Learn high-level abstract mathematics. It’s just programming is easy, mathematics is hard. The google founders both have a double degree in CS and Mathematics. Why is it important? Just look at a link what twitter is doing:
Random tip 4:
You can learn everything from YouTube.
Want to learn mathematics?
Random tip 5:
From time to time, listen to the greatest people on earth.
Random tip 6: Very important. Learn one (or more) of the top programming languages. This is similar to tip 1, as the experts like to program in the best programming languages. Thus, you surround yourself with the best programmers in the world (i.e., who write tutorials).
Other popular choices for top programming languages are:
Choices for somewhat okay languages:
languages that are not total garbage, and therefore are better than most languages: ruby (perhaps also python)
Programming books for an intermediate (or advanced level) are:
Okay, that’s it. If there are any questions please post a comment. In my eyes is the right answer for ‘I want to improve my personal efficiency.’ (as a programmer).
http://www.topcoder.com - This is a good site to understand where we stand as developers. The site has a lot of coding/design challenges. Most of them are real world cut-outs. So, you can get a very realistic estimate.
I am not a programmer, but I know there is a company, www.tenxer.com who have developed a product to help track efficiency and productivity in programming and other things. I've used it to track some other areas of my work and it's pretty good - but does seem more tailored for programmers.
Best case, quantifying this can only lead to some kind of approximate measurement. There are far too many inquantifiable soft nuances that need to be considered. That said, Matthew Cornell lists some metrics that could be used for measuring personal productivity and study trends over time: