[written mostly from a student/programmer perspective, but can be useful for anyone]
Cut up the time you have in blocks that are your most effective time unit. For a programmer, working less than 1 hour for example will not allow you to get up to speed, working more than 8 hours on a single topic will most certainly degrade your productivity. For me, the ideal block size is probably 3-4 hours, your mileage will vary. Schedule your blocks in the week such that there is 30 mins to an hour of something completely different between them, preferably things you have to do anyway, such as lunch, or errands, instead of other computer activities, such as web or games.
Always schedule the hard work first. Assuming there is time in the day where you can do what you enjoy most, such as playing games, your day will be very satisfying if you first do 1 or 2 blocks of “work” followed by rewarding yourself with some hours of gaming. You will feel good about yourself for accomplishing something, making the reward all the more fun. If you do it the other way around, you will not enjoy the gaming as much as the nagging feeling of having to do work will ruin your fun to some extend. And you will be more stressed about the work afterwards because there is no flexibility in time left (see also discipline, below).
Use your class/lab time as high priority work time. You will have new material fresh in your head, you will have other students around doing the same thing, and the teacher available to ask questions, which accelerates your learning and your productivity. 1 on 1 time with a teacher is the most valuable thing for your personal progress, bar none. Each hour not spent working hard in class will cost you several hours outside class to get the equivalent work/learning done, meaning you are just throwing away time.
Scheduling of multiple projects / assignments: organize your blocks of time in the week such that it matches the relative load of each as best as possible: do NOT allow yourself to work an entire week on one project, and then the next week on another project. The more hours you stare at a single task in sequence, the less effective you become. Put as much variety in a day without cutting up blocks.
The secret to getting things done, is doing regular chunks of work on it. Letting large tasks accumulate is a surefire way of running out of time for it.
For certain kinds of activities, such as programming, it is possible to get “stuck” in a certain task. Give yourself a short amount of time (up to max 30 minutes) to try to overcome the problem, but don't allow yourself to stare blankly at a problem forever without progress. As soon as you detect that you are really stuck, switch to doing another task for the remainder of the block or day. Next time you revisit this task, you are more likely to able to tackle it. Two effects contribute here: first, when you are focused, you can forget surrounding issues and fail to see the problem. When you go back to a task you may have a better perspective. Second, the way the mind works, even though your conscious mind is occupied with a new task, the old task still is still lingering on in the back of your mind, and things may “click” even while working on other tasks! Or simply looking at other things may work inspirational to your background thinking on a previous task. In general, by interleaving tasks and projects during a day or week, you get a lot of thinking done “for free”, in terms of time, especially when more complicated learning / designing / problem solving is involved.
Be serious about tracking all your tasks/todo's. If you don't do accurate tracking, your mind will spend time constantly reminding itself that it must not forget to do a certain task. If it is securely tracked, your mind will be more at ease that you are in control of what you need to do and it will be more focused on executing the actual task.
You can use all sorts of software to track tasks.. if you tend to have a lot of tasks that involve other people / meetings / deadlines, then using a calender tool like Outlook can be efficient, but if your work simply has a lot of projects that spread out over larger amounts of time, then using some form of “todo list” software is probably more efficient: you can add dates to a todo list for deadlines, and it will give you a more direct overview over your tasks and priorities than a calander. Personally, I have found that the most effective todo list software is the text editor, having some kind of “todo.txt” sitting on your desktop/taskbar is all you need. In this file, simply order all your tasks from the ones requiring the most immediate attention to the ones that need finishing later. Put each item on a single line. You can mix items that have a date prefix (for a deadline), and ones that don't have a clear deadline. Remove items that are done, and once in a while after you added a bunch of new items, reorder the lines to better represent what is most urgent. Then whenever you have a block of time, all you need to do is look at the top items.
What should go into your todo list is determined by a simple factor: everything that stops your mind from thinking about wanting/having to do it, and provides enough information (generally should fit on one line). If you have tasks that have subtasks that don't fit in one line, you can choose to have it “inline” in your todo document (by indenting?), but if the amount of subitems becomes too big, you may be better off by creating as seperate todo list for that project (keep it part of the project files, such as in a main header file, or part of a project file).
Don't allow yourself to get sidetracked by doing items further down the list first, such as… writing this document ;)
There is no such thing as “not having time”, there are only priorities. In the end, it is all about choosing what you find most important, as there is no time to do everything in life. If you keep track of the above todo list, your may notice one alarming thing: it always seems to grow, it never shrinks and certainly doesn't ever clear entirely. This natural and should be embraced. Essentially what you are doing is keeping track of what you want to be doing, and only doing the highest priority items. Think about it, if you spend all your time doing the highest priority items, you will have spent your time automatically in the best way, assuming you assign priorities well. And there will always be something interesting to do, no matter what you do. You are never bored. Once you realize this, it is a liberating thing rather than frustrating.
One thing that you have the give up is the sense of wanting to be complete. You can't play every FPS that comes out, and you will never complete all the projects you come up with. Learn to cut activities short when they are not giving you enough bang for the buck in terms of what other things you could be doing instead that have higher payoff per time unit. This is why true perfectionists are relatively inefficient people in modern society, as they spend a lot of time on things that have diminishing payoff.
Keep track of what time certain activities cost in the week, and optimize accordingly. This holds for everything, not just work related tasks but also chores and social activities. If something costs you 10 hours each week, you'd better be getting something out of it relative to your goals. I run a program that records for all the minutes that you actively use the computer, which application has focus. It told me that what significant amount of hours in the week are spent in my web browser, email program, and IM program. It is these kinds of realizations that can help you change priorities. [ try: http://www.procrastitracker.com/, written by yours truly. All similar programs didn't give the stats I want. ]
Time and money are obvious duals. Be aware when you spend money and choosing between cheap and expensive options, how the options are affecting your time spent. An example is booking a flight… would you spend $500 extra to save yourself a 2hr stop? This would probably be too much for most people. But if it was only $10 extra, it would probably worthwhile for everyone. Your personal $/hr lies somewhere in between, and depends on your income and how badly you want your time to be useful. What most people don't see is that a LOT of purchasing options have varying time associated with it, some even recurring daily/weekly/monthly, making the time cost even more important. Yet many people purely look at money. I have seen people with busy schedules and good incomes drive around town in their gas guzzling cars to go to a specific shop to use a coupon that saves them $4. Realize what your time is worth, and aim to replace all activities that are only really “costing” you.
Email can be a significant loss of productivity if used incorrectly, as it can interfere at any time. The first step is reduce on time reading email, and being interrupted. Change your email settings to only check for new email once per hour. Any more frequently and you can be interrupted at any time. Any less frequently, and you will lose out on important things that you may need to know about during a day. If email arrives in a certain hour, allow yourself to look at it, but don't actually read emails with long texts. Only reply to emails at the time you read them when they are either clearly very urgent, or when replying to them is faster than returning to them at a later time (i.e. emails with 1 line answers).
The bulk of your emails are not urgent, and those that need replying to, can take from 3 to 15 minutes of your time each. Get into the habit of replying to the bulk of email only once a day at most, or even once every few days. If you reply to email when it arrives, not only does it cost more time on the whole since you are interrupting your normal work flow constantly, you are also accelerating the pace of communication, causing even more email overhead. Most people I email with appear to be of the type that respond quickly, meaning that if I would do the same, my volume of email overall would be several times of what it is now. Yes, you may appear less favorable to some people that email to you because replies often take a day. But this is a small price to pay to not drown in time spent on email.
Most people also suffer from the “ever growing inbox” syndrome. Don't do this. Not only does it make you ineffective at knowing what emails require your attention, you will regularly “lose” emails or tasks assigned to you in them, which is very unprofessional. Instead, create a new mailbox next to your inbox (call it “old” or something), and as soon as you have replied to an email, move it in there. Any emails that arrive that don't require a reply, are moved there straight away. This way, your inbox will always be the emails that still require processing, and it can function as a secondary “todo list”. Any emails that ask you to do a certain thing that you right now don't have time for, you can simply leave in there, because you are assured that you will get to them eventually. Once you get to replying the bulk of your emails every few days, your goal is simply to completely clear your inbox. Any longer running tasks resulting from email, move them into your real todo list such that you can clear the email. Any documents that you get sent over email which you are likely needing to refer back to, save them to a folder, don't rely on your old email to be your file storage. Ideally, you should need to look back at old email very infrequently.
In this context, IM (instant messaging) is your enemy. IM often takes the place of email between people, but unlike email, you can't regulate it like described above. The only tip I have here is to be careful who you allow on your contact lists. One good trick is to use a client that can deal with multiple protocols, and use one for “everyone”, and another for important people, that you either need for work or know how to respect your time. Have that one always on, and only turn the “everyone” IM on when you have finished your working blocks for the day.
This is the hardest one. All the tips above are completely meaningless if you can't overcome this hurdle. Pretty much all people I know suffer from procrastination to some degree.
The first step is recognizing the symptoms, which are typically some kind of weak excuse followed by a distracting activity (“I feel kinda tired this morning, I think I will surf the web a bit before starting the actual work”).
Procrastination can hide as an excuse for doing your todo list out of priority order. It is easy to pick a more fun item on your todo list because you feel that at some point you will have to do it anyway, since it is on the list. It is important to see that a LOT of what ends up on your todo list never gets done, not only is there not enough time for everything, certain things expire or become obsolete/irrelevant. This is a good thing, it saves you time. Spending time on items further down the list therefore wastes time. This system of convincing yourself that something will be useful in the future also happens with things outside of your todo list, your mind will search for any possible task that is somehow explainable as useful, to avoid starting with the highest priority task. Guess what, a LOT of things are useful. But you need a 1000 lives to do them all. So pick and choose, or be satisfied to waste most of the single one you have.
Some people recommend putting the distractions out of reach, such as disconnecting the internet, or deinstalling certain games. But this really doesn't work, as you are not really addressing the fundamental problem of you wanting to cheat on yourself. If you can't train yourself to do work even with a distraction at your fingertips, your mind will always find excuses to do something else, no matter how much you limit yourself.
So how do you stop yourself from doing it? If you recognize the symptoms frequently, it will become easier to kick yourself in the ass and put yourself to doing work. If you clearly see yourself going off in procrastination mode, it becomes easier to dislike it and stop yourself. But sometimes that even won't be enough. One thing that can help is working closely with someone else. Either someone that can “supervise” you, someone that can check what work your have performed at the end of a block. Repeatedly having to tell someone you haven't done anything for the last 3 hours really makes you feel stupid and hit the point home. Even better when you can team up with someone that does roughly the same work, and work blocks in parallel, screens right next to each other, so you can clearly see if someone is slacking. This will provide very strong motivation.
If you leave forcing yourself to work to the ultimate deadlines in your life that determine failure or success, you will spend most of your time procrastinating, and a small amount of time working real hard and stressing out. This may get you through life, but it isn't very satisfying. If you want to do more with your life, you can't rely on these “deadlines” to guide you, but you have to build up more discipline out of your own motivation. Again, this is HARD. Your first motivation should probably be, that you have too much pride not to be in control of your own mind. But more importantly, you probably want to get more out of your time than you get now.