(1) Separate work from life, be able to walk away for a bit when work isn't going well. And do walk away if things aren't going well. If you haven't been able to write any code for the past few hours, odds are you won't be able to write any in the next few hours.
(2) Focus on process over results. IE have a good process to minimize the amount of time you spend thinking about what you should be doing, whether you did the right thing, etc. What honestly helps in these cases is just having a task list of "I need to get XYZ done today" and then blasting through it without leaving room for thinking about things too much. I like Getting Things Done (ie https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...) because it helps separate work from life.
(3) Take the long view of your life/career. The truth is that you are going to make mistakes, bugs will get into prod, you're going to get burned out, etc, so you need to accept that you will have "bad" days (or days, weeks, moths where you just don't care about what you're doing in which case it is obviously going to be crap) and focus on the process for improving them to minimize them over the long run. I think the important question here isn't "did I make mistakes" but rather "is my process resulting in a slower rate of mistakes/less severe mistakes.
(4) Never forget to eat, sleep, drink water, and exercise. Especially sleep. when things are bad we tend to sacrifice sleep, that almost always makes it worse.
Most of it I think is summarized as having a process you can trust so that when things do go poorly you can focus on the process in those moments. The process will get you out.
I use Things 3 for my check list.
I use Streaks for habits.
I use Bear for writing.
I use Pocket for read it later.
A while back I read "Getting Things Done: The Art of Stress Free Productivity" , and though I'm not completely sold on his methodology, the author has a few ideas and techniques I really liked, that have helped me get motivated.
One of them is to figure out the next concrete, actionable task that needs to be done to make progress, and do that. Don't think about a million edge cases, or a big rewrite, but instead focus on the single edge case that's blocking you right now, or the first thing you need to do to start a rewrite, and then go do that smaller, specific thing.
It will feel good to have it done, and it'll motivate you to get to work on the next small step.
 = https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...
Getting Things Done, David Allen . Useful toolkit for getting things out of my head and onto paper (or org-mode or OmniFocus) so that I can properly focus and prioritize my time on the things I need to get done.
Communicating Sequential Processes, C.A.R. Hoare . Strongly influenced the way I think about programs in general, but specifically in the embedded field where I work. (NB: I've not actually read or worked through the full text, but mainly taken what was needed to properly communicate ideas in my designs or to analyze designs and systems others have produced. This is a task for myself for early next year.)
Moonwalking with Einstein, Joshua Foer . I've always had a good memory, I actually picked this up to give to a girlfriend who had a terrible memory and read it in a couple days before giving it to her (she was out of town when it arrived). Helped to explain methods that I'd somehow developed over the years, and gave me concepts and a better understanding of other methods of memory acquisition (for either short or long term purposes). If you really want to improve your memory, there are probably better resources to learn specific techniques, but this was an informative and entertaining overview. WRT work, we have to keep large systems in our minds all the time, and potentially dozens of different systems written in different languages. Memory is critical for this, even if it's just the memory of where to find the information and not the information itself.
Fluent Forever, Gabriel Wyner . This one is my current read. Goes back to Moonwalking with Einstein. While the book is itself about language acquisition, it's actually given me quite a bit to think about with respect to general learning and memory acquisition (in this case, specifically for long term retention and recall). We have a couple training programs (we need more) for our new hires on development and testing. There are some concepts in here and in related readings that I think would greatly improve how we teach these folks what they need to know and in a way that would improve their retention of that information. We have a lot of people retiring in the next 1-3 years, so this is actually quite critical right now, though management is quite lackadaisical about it.
The Toyota Way, Jeffrey Liker . I grokked Lean from this. Hardware focused, but the concepts can be (and have been) generalized to other process focused fields. This has helped with understanding what business processes really need to be codified, what feedback mechanisms need to be present for improvement, the criticality of bottom-up feedback and improvement (employee investment in the company/product cannot be overvalued if you want quality and good craftsmanship).
The Little Schemer, Friedman & Felleisen . Going back to the comments on Fluent Forever. The structure of this is fantastic for conveying and helping students retain information. The Socratic method is very useful, and structuring courses and introductory material in this format is useful, this happened to be my introduction to it (well, I'd heard it before, but my first time really encountering it in practice). It's a useful tool for solo-study of a topic (pose your own questions and construct answers), and as a method of guiding someone to a conclusion or better understanding. Also useful in debugging software or decoding software you didn't write, after a fashion.
Boagworld has a great video on his setup and how it all works: https://boagworld.com/working-in-web/omnifocus-2/
Getting things done book: https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...
I tried GTD (https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...) for 7 years before declaring it a failure. It does have some good ideas that I still use, but the TODO management didn't work for me. I think it'll work only for people who have fewer goals than I do. It doesn't handle large lists very well.
Some things I kept from it:
1. Filing cabinet - Instantly useful from day 1.
2. Calendars are only for hard deadlines. Don't put stuff in there that you merely want to do. I know this is the opposite of the submission here. For me, planning everything in the calendar, including things I could ignore, led to a mess. Keep it for things you really cannot ignore.
In general, any obsessive time based planning like this submission fails for me. GTD is not time based. I prefer planning my tasks for the week, not for the hour.
I like the idea behind Kanban, but I do not think it fits most of our personal lives. Very good for certain work environments, though.
Pomodoro technique: It's good, but not really for task management. It's just a good technique to stay focused. Worked for a few months until I got used to it. Now it does not keep me focused and I can easily get distracted by the web, etc.
These days I'm trying this:
I think it works better than GTD, and fills the gaps in it. If you do not want to buy the book, a condensed, down to Earth version is available as the 1 Minute Todo List:
Personally, I feel the book is better than the PDF at explaining the rationale behind the 1 minute todo list. Reading it was very calming. It explained all the problems I had had with GTD and similar techniques.
1. If you cannot examine your todo list inside of a minute, it is too long. So spend a lot of effort ensuring your daily todo list is not long.
2. Urgency and importance are not the same. We're hard wired for focusing on urgency, so do not try to make a TODO list purely based on importance.
3. Every week, identify everything that must be done in the next 10 days and put it on your list that you'll examine daily. Things you decide not to do in the next 10 days, keep in your "list to examine weekly".
4. Every day, multiple times of the day, look at the short list and do tasks from among them. If new tasks come in, add them, but keep the list short (no more than 20-25 items). If your list is getting too long, identify things to move to the "list to examine weekly" and get them out of the way.
5. If something needs to be done today, put it on the top of your list!
6. You'll also have "the list to examine monthly" as well as quarterly.
Very simple idea - works a bit better than GTD.
I think my biggest problem is that I need to reduce the goals in my life and focus on only a few. I have more goals than time in my life, and I keep jumping from one to the other. No task management system will work until I do this. Tough decisions need to be made!
* The Now Habit - http://www.amazon.com/dp/1585425524
* Getting Things Done - http://www.amazon.com/dp/0142000280
* Simply Christian - http://www.amazon.com/dp/0061920622
* Surprised by Hope - http://www.amazon.com/dp/0061551821
* The Great Divorce - http://www.amazon.com/dp/0060652950
* Mere Christianity - http://www.amazon.com/dp/0060652926
* The Meditations of Marcus Aurelius - http://www.amazon.com/dp/048629823X
* Tao Te Ching - http://www.amazon.com/dp/0060812451
Books from the Bible that I like:
* Everything written by John
Here is an introduction page that he posted for newcomers: http://www.sebastianmarshall.com/?page_id=288
You can see that there is many topics under "Want to get more done?"
Though I know that most books are a waste of time, these were actually filled with great information, in my opinion:
So that I can read more and do other things :)
I've spent a decent amount of time reading self-improvement books/blogs, and for me the stuff that made the most impact were things that were tailored to the problems I was having at the time.
Here's an overview of what I've read over the years that have helped me to some extent:
I Can Do Anything if I Only Knew What it Was: http://www.amazon.com/Could-Anything-Only-Knew-What/dp/04405...
Paul Graham's Essays: http://www.paulgraham.com/articles.html
How to Win Friends and Influence People: http://www.amazon.com/How-Win-Friends-Influence-People/dp/14...
Four Hour Work Week: http://www.amazon.com/4-Hour-Workweek-Escape-Live-Anywhere/d...
Randy Pausch, Time Management: http://www.youtube.com/watch?v=oTugjssqOT0
Steve Pavlina: http://www.stevepavlina.com/
7 Habits of Highly Effective People (reading this now): http://www.amazon.com/Habits-Highly-Effective-People/dp/0671...
So I would say "it depends" on what you want out of life and where you are now. Self improvement is a life-long task and you will need advice that changes as you progress.
Read the book, then get a tool like "Things" (for OSX) or try web software like http://vitalist.com/ that works cross platform and supports some group collaboration too.
And about those software project management books -- the guy who evangelized software engineering for the past three decades just published an article saying he was wrong: http://bit.ly/pRrkd (links to PDF).
Fresh book recommendations delivered straight to your inbox every Thursday.