Ask HN: How to turn mindless browsing time into productive programming time?
I’m not a programmer by trade; it’s just a hobby for me. When I set out some time to sit down and write code, I spend most of it browsing the web to compare languages and libraries to make the project instead of actually working on the project. I usually get as far as a repository and a README, but after lots of thinking and mindless thumb-twiddling-web-browsing-time-wasting, I just shelve the project for another time and look for another idea that I’m convinced that I’ll be more passionate about.
I see all these amazing side projects on HN that required months of self-directed, hard work.
What’s everyone’s secret to staying focused on a personal side project and pushing it to completion?
17 comments
[ 2.7 ms ] story [ 19.8 ms ] threadAnd then day by day when I complete the tiny task, I strike them which makes me motivating.
This way has increased my productivity. Ofcourse I still browse but after completion of tiny task
I spent hundreds of hours agonizing about every detail (name, domain, programming language, framework, database, text editor, operating system, computer). For weeks at a time, I'll seriously consider (without actually doing anything) designing and implementing my own programming language/operating system/IDE/database, because none of the existing ones are "good enough". I regularly come back to the old Vim vs Emacs debate. When I need some challenge, I look at the Millenium Prize Problems and take a stab at P-versus-NP. Rinse and repeat, ad infinitum.
Every time I buy a new computer, switch to a new Linux distribution, setup a new IDE, go through a new programming language tutorial, I think that's the last step. I think that I'll finally be able to be productive. This is never the case.
I think we use procrastination as a defense mechanism to avoid facing a reality in which we might fail. I think that's a problem with our ego. What if we're not good enough?
I don't know what the solution is. I'm still struggling with this.
I think people who actually build stuff just make arbitrary decisions and don't care if things aren't perfect. They'll stack a bunch of hacks and anti-patterns, and look at the output rather than at the process.
Maybe I'll try that.
Let computers be the tool you use. You don't profit from imaginary "elegance" in parts of the computer that you don't need for your daily work. Be a regular user. Develop only what you're good at.
Think about return on (time) investment. If you take weeks to configure your editor and learn how it works, it's most likely not worth it.
It's okay for software to be intuitive and easy. It's a tool, after all. If there is no proper onboarding and the software doesn't explain itself, the developers didn't get the UX right. You shouldn't rely on them for your work.
for the same reason i like to use programs at their defaults and not spend hours tweaking them.
instead i'll do that very slowly over time whenever something bugs me enough that i feel the need to change it.
i'll definitely not create a new programming language if my goal is not the creation of the language itself. (i do have some ideas for a language, but they are not the project in my vision.)
i too have a project that i have been working on for more than a decade. i am still working on it, but instead of directly aiming for the big vision, i have been searching for smaller side goals that i could reach with that project.
so instead of starting with a road-trip across the country, i look for a reason to get to the next block. once there i find another and another, until i worked enough on it that i could work up the courage to aim for the next city. i am still far away from the actual goal, but in the meantime i crossed a state line, and i have at least achieved something.
I think this is because setting stuff up is cool, like playing with a new toy, whereas finishing something is more like work, like shoveling a massive pile of snow.
I agree with this. I also did this for years. Then a couple of years ago I buckled down, built an MVP (mininamal viable product) in the most brain dead way possible, and put it out there. And... nothing, my idea received zero interest.
So the really cruel thing here is, all the dithering and indecisiveness really do amount to nothing, none of the decisions you mentioned matter; language, framework, db, etc. If something you build does gain users, then worry about it!
I suffered from the same issue and the problem was, i lose focus really easily, so what helped me overcome this is for each session i take to work on my side project, i should first define a concrete and an achievable task, so for example if the side project i am working on requires me to use a library that i am not familiar with, the tasks that i will define are :
- find out which resources are recommended to learn this library, and pick the most recommended one.
- read sections A, B and C from the chosen resource.
- read sections D, E and F from the chosen resource.
...
And examples of programming tasks are :
- Create an Http end point that forwards requests to two configured hosts.
Do not be afraid to further decompose your task into sub-tasks, and to define really small tasks.Other things that helped me :
- having a desk that i only use to work on my side project.
- meditation
- listening to podcasts when i am doing a task that does not require a lot of focus.
i just went though that exact motion with a small app that generates math exercises for my son. i needed an inputbox for parameters. i was searching through the documentation of pharo spec for the smallest example that would let me get started. once i had it, adding new features as i learned more about the framework became a breeze.
It can also help to have someone else to keep you on track. Find a friend, a family member, a mentor, etc who is willing to take a few minutes every week to play around with what you create and give you some feedback. Having someone who you can show off to when you work hard, and who will be disappointed if you don't, is a pretty good motivator.
so this is one thing to look at: is there something that you are afraid of that might happen when you engage in this side-project.
find out why that is, and then try to address that fear.
if you are afraid that you will spend to much time on it, maybe schedule your time. only one hour a day, or only on one evening a week, or saturday afternoon, or only when you get to a particular location. in the Beijing GNU/Linux User Group, i started a monthly "Coding for Fun" event, where we'd meet to hack on our projects. a perfect space for a side-project.
if you are afraid of working alone on something, find a hacker/geek/linux user group that engages in related activities and find someone to join you on that project. again, our Coding for Fun afternoon was a perfect venue for that.
are you afraid of not completing the project, maybe try changing your goals, so that completing it is not the goal, instead have a goal that can be achieved even with a partially completed project.
another one of my fears is that the project is of no practical use to anyone. so i search for that practical use.
for example i have been wanting to learn smalltalk for years. but without a practical use, i could not do it. i'd download pharo images and then not get around to doing anything with them. in the meantime, i discovered that recreational coding is in itself a practical use. an hour of dabbling around, trying out something, learning something just for fun, without a customer being on my case, or without the pressure to get it right.
i now set up a pharo smalltalk environment so that i am be able to use it every day for a mundane task (it runs a commandline terminal), and now, whenever the mood strikes i can go off on a tangent and play. but i am not afraid of it consuming me (see above) because i'll still get to use it every day even if i don't go off to explore. compare that to learning linux by simply using it to read your email and browse the web without doing any focused learning activity, learn by getting used to having it around, then slowly find new activites. i can use smalltalk as a calculator for example. (i used to fire up pike or python for that before)
to bring that back to your project. find one good reason to work on that project, and as you go you may discover more reasons that help you to continue working on it.
But recently I came to realize that I must change how I utilize my spare time as, you know, we are not getting younger and I'm not one of those lucky ones who worked for unicorn startup. I reflected on how to be better at not wasting time and one idea that popped in to my mind was to get somebody else involved and build something together. A little bit like pair studying in high school or at uni. I'm just kicking in so can't provide more feedback, but I'm moderately optimistic about the idea.