Nobody else who can relate to that?
Nobody else who can relate to that?
The secret?
There is none. I'm just better at organizing myself for my goals. I used to go about cool programming ideas like this:
1. Have an initial idea and get really excited about it
2. Clearly see in my mind how I would implement it
3. Think "this can't take more than a week!"
4. Start coding frantically, making sure to have an elegant, modular, reusable code-base
5. On the way, come up with more and more super-cool features
6. Think about every little detail of every feature and make sure implement it "the way it should be done"
7. Give up after two weeks because the project has become overwhelming and despite a massive code-base is not anywhere near a first usable prototype
I think the problem starts at 3. (maybe at 2.) and then gets successively worse all the way down. These days, my workflow looks perhaps more like this:
1. Have an initial idea and get really excited about it
2a. Do a reality-check, find it's probably not worth bothering in the big picture and do something else instead
2b. OR: if I really think the project is small enough, go ahead and give it a go.
3. Think of what the really cool features of the idea are
4. Remove them all and thus come up with a stripped-down, barely even usuable version of the initial idea.
5. Implement it in the most minimal, hackish code base possible: hardcode everything, ints instead of enums, strings are your friend,...
6. Actually finish this bastardized version of the initial idea!
7. Only then decide if it's worth going on from there toward the initial bling-bling idea by means of refactoring and refining or adding more features
Usually, by the time I get to 7. I decide I don't need it - either the version is actually good enough already (meaning the initial grandiose vision was over the top) or it has become clear already that the excitement of point 1. was unwarranted and I probably should have gone for 2a. instead of 2b.
In rare cases, however, I do stay in step 7. and improve upon the initial prototype iteratively. This can even go on for an extended period of time. But even then I'm trying to make sure that I stay true to the same method which can probably be summarized with the following question you have to keep asking yourself:
How can I achieve my goal with the least amount of work?
For me, I've realized it's paramount that I get to a result quickly - that is more important than properties like "with the most beautiful architecture" or "with the best possible UX" etc. You might think that 2a would lead to less stuff done, but in the end I think it actually leads to more mini projects actually becoming a reality.
Might I suggest that whilst it's great to get to completion pretty quickly and have many completed mini-projects under one's belt, that there might be some value in younger programmers choosing the untenable-but-beautiful approach to the codebase in order to learn some more about ways that they could build such architectures?
Whilst in the long term (and when working with others) it seems almost always best to go with a codebase which balances well simplicity and expressiveness (no point using Python like Java!) mightn't it be valuable experience, being able to work freely on those mini-projects when younger and without the burden of having to design for those goals of simplicity?
And I think your point is fair: there's certainly merit in training oneself to write "beautiful" code. But I guess then your goal is simply different, your focus would be on improving your architectural skills rather than finishing the project. There's nothing wrong with that. And of course if you can manage to reach both goals at the same time, you win double.
I work on personal projects a few days or weeks at a time and then after solving the first set of big problems I generally let it slip and lose interest. The source code lives on my hard drive and then one weekend next year or a few years later I remember what I had been writing and I come to revisit it. Maybe I rewrite the program or extend it up to the next level, or just look at it and think "That's where I was, mentally, in 2010; I think I've made progress since, I'm not the same programmer anymore."
I place no intrinsic value on finishing the projects itself because then they would start to resemble work and I want my hobby projects to be fun.
At work I procrastinate too but that's mostly doing the more interesting tasks or tasks with the highest impact first and the less interesting tasks only when really, really needed. So I don't basically procrastinate, I just prioritize.
I think procrastination is prioritizing, really.
And sometimes you prioritize complete idling over doing anything at all which I think just tells that you were trying to do the wrong thing because if you weren't you would have forgotten to eat while staying up doing it.
Absolutely. The joy is mostly in the idea-making, building, and shaping process. Actually "shipping the product" turns the fun into work.
For better or worse though, most currently successful projects are one person's hobby that's eventually turned into a final product. And there is definitely some intrinsic value in success, and in providing something useful to others, even if it's a different kind of goal.
But during the last years I've been switching work places and having constant trouble fitting in to social constructions, and I keep thinking I would be much happier being self-employed. And to do that I need to start following trough.
I didn't do as well as I hoped in high school because my parents couldn't afford a tutor. Getting me there was hard enough. I'm not exactly stupid, or so I've been told, but failure after failure which can be attributed totally down to my lack of self-discipline certain makes me feel inadequate.
Hell, just implementing this very technique is one of my failures, amongst other failures to improve my self-discipline.
It's having a massive impact on both my work and home life. Even to the point of asking HN for advice. Nothing I try works.
I'm seeing a psychologist tomorrow for an extra perspective. I hope they can help (as long as the appointment doesn't slip my mind at the last minute!)
One thing I have noticed is that initially I thought all of my issues were unrelated and down to character flaws but they all connect like a 500 piece jigsaw puzzle when looked at with ADHD in mind.
If you want, email me on James at thefreshuk dot com and I will keep you updated on how things go :)
My little boy (adopted) seems to be showing signs of autism, which wouldn't be surprising since his dad suffers from it himself. ADHD, however, was mentioned as an alternative and his school said that could make more sense, so it's easy to see crossover here!
I think it's good to explore all possibilities. It's good to be educated about these things - especially since misdiagnosis seems more common in psychiatry (anecdotal).
On the flipside, for most people, treatment for ADHD works pretty well.
Anyway, good luck!
It's a bit different from the typical books on the subject, but does a good job (imo, of course!) explaining more about how ADHD appears in adults.
Either way, if you have any questions on ADHD, please feel free to ask; my email is dgurevich5 [at] gmail.com
Setting reminder alarms for important things like appointments helps too.
Random question- did you do really well in school when you were young? If yes, did you then get progressively worse as it required more prep?
I was okay in school, nothing out of the ordinary. Always did my best, but never a talent. But what I noticed is that the more I learn in a subject, the more of a perfectionist I become and the longer It takes to accomplish a task (which sounds like a paradox).
God it's depressing just typing that out.
I imagine there are a lot of us in the same boat.
There's an old saying that goes "Once begun, the job's nearly done" - STARTING the project is the hardest part.
So I use an egg timer or if I'm working with my headphones on the PC, I use Orzeszek Timer (it's free) - but the idea is I set it for 15 minutes or 20 minutes or 30 minutes (whatever amount I want to make sure I work on a task) and then remind myself that starting is the hardest part, and that all I have to do is work until the timer goes off, and I can quit.
The reality is that normally once we actually start working, we stick with it for a while, but I believe the timer allows us to 'check out' and just focus on work.
See, when we are working, there are a million things going on in our heads, reminders, deadlines, things on the internet we want to look at, but with a timer and an understanding that the timer will remind us when we can quit, we can just focus on working.
I feel like it may be due to ADD or something like it. Whatever it is, it's definitely quite annoying.
The key is to at least quickly get the project to a state where it's actually usable, and does something, even if it doesn't yet have all the features you envision right now. Over time, if you or other users seem to get some sort of utility out of the project, you'll eventually feel compelled to go back and make those changes and really make it more perfect. And if no one seems to get any utility out of it, then maybe you just saved some time you would've spent obsessing over making it perfect, and maybe it is good to actually lay it to rest.