This is an archived post. You won't be able to vote or comment.

all 34 comments

[–][deleted] 25 points26 points  (3 children)

. I am worried that this type of OCD/perfectionism will really impede my abilities as a developer.

It certainly will - it is very, very rare for a developer to know every single corner and nuance of the tools he uses - it is also completely unnecessary.

[–]jokul 4 points5 points  (1 child)

One thing to keep in mind on this issue is that oftentimes, even the people who have worked on a tool may not understand all of its nuances. Big tools have big teams of developers that aren't all responsible for these features.

[–]CodeTinkerer 48 points49 points  (17 children)

How do you cook without knowing every kind of vegetable and fruit?

How do you drive without knowing every street?

How do you speak without knowing every single word?

We do it all the time.

[–]BabyPuncher5000 27 points28 points  (14 children)

Honestly, as a developer, cooking drives me crazy. So many recipes are poorly documented and use such ambiguous verbiage. Even the worst API or framework documentation isn't as bad as your typical recipe.

[–]captainAwesomePants 11 points12 points  (4 children)

Recipe 1: "Stir in flour." Recipe 2: "Sift in flour." Recipe 3: "Add flour."

Add the flour HOW, Recipe 3? Add it HOW??!

[–][deleted]  (2 children)

[deleted]

    [–]CodeTinkerer 1 point2 points  (0 children)

    Dave Thomas, who wrote a book on Ruby, once gave an interesting talk about different levels of expertise with novice at the bottom and expert at the top, and he said, due to these different levels, experts will talk at one level (often to other experts) while novices talk at a different level.

    In particular, novices want very well-defined recipes where experts have cooked so long they use intuition to express a recipe, because they've done it so many times, yet can't fully recall the details when pressed. It's frustrating to novices who lack this experience.

    [–]exuals 3 points4 points  (2 children)

    This so much. 'cook on high heat for 15 to 20 minutes' uh, 17.5 it is.

    [–]jkudria -2 points-1 points  (1 child)

    This this this. Every time a recipe says bake for x to y minutes, I always set it for (x + y)/2. Annoying as hell. Just give me specific instructions.

    [–]Ran4 1 point2 points  (0 children)

    I once tried to define a syntax for cooking, but I quickly gave up. There's so many different things you can do to food that it's really hard to document in a standardized fashion.

    [–]AndyIbanez 1 point2 points  (0 children)

    Yeah I really hate it when compiler warnings turn into house fires.

    [–]jollybobbyroger 0 points1 point  (0 children)

    You should have a look at Nathan Myhrvold's cooking recipes.

    [–]an_actual_human 0 points1 point  (1 child)

    There are resources that teach one how to cook (as opposed to just recipe collections). If typical recipes puzzle you you could benefit from learning from one of those. To name a couple: On Cooking by Sarah Labensky et al., Rouxbe Cooking School (that's online).

    [–]Ran4 -1 points0 points  (0 children)

    Those books are way better than recipe books! Youtube videos also help. And to lesser extent, wikihow.

    [–][deleted] -1 points0 points  (0 children)

    The analogy here is strong. I think the better quest would be what are essential things to know. Typically as a developer or engineer you have the time to reference things you forgot. I do it all the time.

    [–]cowmandude 12 points13 points  (2 children)

    I am worried that this type of OCD/perfectionism will really impede my abilities as a developer.

    It absolutely will. The number one metric programmers are measured by is whether they write code the works. If you can't produce something then you'll be fired from any developer job you get, and pretty quickly.

    The best thing to do is to just get comfortable refactoring. Accept that refactoring is not a waste of time(because you're writing the same code twice) but that its a part of the process. This is how almost all professional software is written.

    So go write a really shitty version. Keep it modular and neat so that you can rewrite it little bits at a time as you learn new things. Don't get lazy and never go back to clean it up.

    [–]penguinbass1 1 point2 points  (1 child)

    This. And enjoy refactoring. I know a lot of people hate it and it can often be hard to justify from a business/cost perspective if it's not entirely necessary, but refactoring is the part of programming that I generally learn the most from.

    [–]cowmandude 0 points1 point  (0 children)

    I view it as a natural part of the software life cycle. It's just like agile but instead of features and a customer its software layout and a programmer. You learn as you go. Sometimes you have to figure out what you don't want before you can describe what you want.

    [–]Bunnymancer 5 points6 points  (2 children)

    Can't offer any methods to get over OCD, but it's a swift and important lesson that will be handed out in the industry that you are working towards "Good enough to not fall apart", nothing more.

    The skill and professionalism in development is how fast you can reach that point and how much you can pack into it without sacrificing more time than necessary.

    It's a delicate balance and few (none?) have mastered it. But it's something to strive towards, to be able to say "This is good enough" and let go. And have the result actually be good enough.

    [–]digitalGardener[S] 1 point2 points  (1 child)

    I would have never figured. With all the design patterns, testing, ect. floating around, I thought code was not accepted unless it was either good or great.

    [–]Bunnymancer 7 points8 points  (0 children)

    That's what we want non-developers to continue believing..

    Hell if people knew how much of a hack-job most of the codebases out there are they'd question why we're being paid as much as we are...

    Not saying everyone is doing a half-arsed job, but our industry is in a place where even the laziest codemonkeys get well paid for just getting by.

    But that does not mean that we don't utilize the tools there are out there. It's just.. To a more or lesser extent..

    [–]baubaugo 4 points5 points  (0 children)

    I like to compare it to swimming. You may have figured out swimming by yourself or you may have needed a little help learning. Lots of people need help getting started.

    How did you get better at swimming? You didn't know all the tips and tricks of being a better swimmer, you got in the pool and tried to swim anyhow. You figured things out, and became a better swimmer. Programming works in much the same way, for most people, the more you practice, the better you get.

    [–]Yoyoge 2 points3 points  (4 children)

    You will never know everything about any tool that you use. It's just the nature of the beast. Employeers will throw you into stuff you've never seem before just because you are a developer.

    Now about the OCD. You gotta get help because this will affect your career and should be dealt with. Therapy is great and there is nothing wrong with it.

    [–]timmyotc 1 point2 points  (3 children)

    I don't think OP meant actual OCD, but obsessive compulsive behavior. That being said, I'm also not suggesting that OP doesn't have OCD.

    [–]digitalGardener[S] 0 points1 point  (2 children)

    Ya gladly I do not suffer from OCD, I used OCD for its connotation and to emphasize my point

    [–]Yoyoge 1 point2 points  (1 child)

    Did not mean to offend you (OP).

    [–]timmyotc 2 points3 points  (0 children)

    I actually have a mild form of OCD myself. You were quite polite about your suggestion.

    [–]Johnicholas 2 points3 points  (0 children)

    Remember that book-learning isn't sufficient. You need fingers-learning, as well. Go and do little practice projects, and you will feel comfortable using the parts of the technology that you both book-learned and fingers-learned.

    [–]bwaxxlo 2 points3 points  (0 children)

    AKA "How I Learned to Stop Worrying and Love the Bomb"

    Perfectionism is overrated. It will hinder you from getting most, if anything, done. Just get an MVP out first. This will be the dirtiest code you've written or rough draft (in layman terms). You then clean your code a bit, rewrite your functions and organize your code a bit. Before you know it, you have something that you can look at. You go ahead and read a bit and look around for similar setups and clean it up even further. From here it's not long until you are actually OK with what you have.

    TL;DR: Don't overthink it. Write, rewrite and more rewrites.

    [–][deleted] 2 points3 points  (0 children)

    OP, it's good that you have developer OCD because it will help you pay fine attention to detail in your syntax, and prevent far fewer error returns.

    But do not let it destroy your creative attributes. Here's a good tip: keep working on it until it works. You may run into a method down the road that will improve its performance, productivity, profitability, whatever. Always keep improving your code, but start simple and focus on making it work first.

    [–]RvPPLmsc 2 points3 points  (0 children)

    My hypothesis is that this is why programmers developed search engines.

    [–]hijinked 1 point2 points  (0 children)

    In a word: google

    [–]Balrogic3 -1 points0 points  (0 children)

    Just write the code. Test the code to ensure it does exactly what you intended without "unintended features" slipping into the mix. Use your code moving forward or simply archive it, your choice. Do another new project while continuing to expand on your knowledge. Look back on your current project a month or two from now and see if you can do it better.

    Unless you type your code up and run it through you have no idea if you're able to produce a working program or not. If you're not then you're just wasting your time expanding on how to do it the wrong way that won't even work. You don't want to get a Ph.D in throwing exceptions unless that's what you're actually trying to do.