Years of going through the American public school system have taught me that I should always put 100% of my effort towards everything I do. I was encouraged by my peers to get perfect grades, be a perfect leader, and have the perfect resume. In high school, I was able to block out that toxic mentality and work at my own pace. Then, I got into college, and suddenly, it became that much harder to ignore the competition around me. Whether out of intellectual curiosity or the desire to be the best, my peers were working ten times harder than I was, and I had already started at a lower level of understanding than they had. Maybe it was the pressure of being in an honors program, or maybe it was the fact that I no longer had other friends who were as indifferent as I was towards results, but suddenly, I found myself working so much harder to turn in perfect assignment submissions each week.
This was only made worse by the fact that I chose a major in computer science. As computer scientists, we are taught to aspire to perfection. We spend hours upon hours upon hours ironing out the smallest bugs and optimizing our code to be the fastest, the cleanest, the best. An assignment isn't good enough if it doesn't pass all the test cases and surpass all other submissions in the class. An assignment is never truly done, not even when you submit it. You can always improve; you can always make your code better. We work long hours and pay no attention to our own physical and mental health as we toil away in front of the computer screen, trying to reach an impossible standard.
People say that reaching high means you'll fall closer to where you want to be, but frankly, this mentality is exhausting. It is so tiring to spend so much time working on something that, in the end, may not teach you many useful skills. If I'm not going to go into systems work, then there is no value in perfecting my heap once I understand the general concepts behind it. On the other hand, if systems is my passion, there's more value in perfecting every step of the process, but again, it's still more important to learn the concepts and skills that you need to work on an operating system. One small program doesn't mean much in the grand scheme of things, and it's not the end of the world if I leave a few bugs in, provided it doesn't cause me to become a lazy programmer. As I said last week, my health is more important than meeting the impossible standards of perfection. I'm content with a less-than-perfect grade and a less-than-perfect program because I recognize that there is no way for me to be good at everything. If I've understood to the best of my ability, and the mental cost of putting in more effort isn't worth paying, then I am even okay with a less-than-perfect understanding.
One place that I think school fails us as computer scientists is that we aren't shown the full story of the development cycle. We're given a problem, and then we're told to write a program to fix it. We spend 1-2 weeks writing the perfect program, spending extra hours to fix all the bugs, and we're expected to turn in a perfect program by the end. But in industry, nobody makes a perfect product on their first try; that's virtually impossible. You'll always be adding new features, fixing old ones, and updating your software to be better and more robust than before. So why is it that we expect ourselves to achieve perfection in our schoolwork, or even in our daily lives? Perfection might be a good long-term goal, but it's pretty hard to be perfect if you've lost the mental capacity to function due to overworking yourself.
Let yourself fail. Encourage it. Let yourself fail over and over and over again, and don't let yourself feel bad about it. It's normal to fail. It's human to fail. It's productive and cleansing and rewarding to fail, to know you didn't succeed, and to realize that in the long run, it doesn't matter. Don't bind your self-worth to a standard that is impossible to achieve, or it will only hurt that much more when you inevitably don't achieve as much as you had hoped. Failure is something to be learned from, sure, but it's also a good reminder that you don't have to be at 100% all the time. Treasure the moments when you refuse to continue debugging and submit an incomplete solution. Make the decision that might hurt your grade but will certainly be beneficial for you. If you're busy like me, then allowing yourself to fail might be the difference between having no free time and having the free time to recover from a long week of stress.
Let yourself fail. You can always fix it later with a software patch.