
Ask HN: How to turn mindless browsing time into productive programming time? - snazz
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.<p>I see all these amazing side projects on HN that required months of self-directed, hard work.<p>What’s everyone’s secret to staying focused on a personal side project and pushing it to completion?
======
miguelrochefort
I have spent over 10 years obsessively thinking about the same project/vision,
and I have not executed a single thing.

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.

~~~
jsjsoaofnfn
I think many people here do 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.

~~~
em-bee
yup, i dread setting up a new computer. had to do that just this month. it was
a relief to finally get on with work and be done with setup and configuration.

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.

------
SubMachineGhost
A good thing is you are already, motivated to sit down and work on your side
project.

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.

    
    
        - Create the class that captures the Http Requests.
    
        - Create a function IncomingHttpRequest => ForwardedHttpRequest.
    
        - write tests for this function.
    

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.

~~~
em-bee
good one. i use large whiteboards to break down the tasks of my project(s). so
that whenever i want to work on the project, i can look at that task board and
quickly remember where i left off last time. that helps me for my paid work
too. so i can treat them side by side, and i don't spend a lot of mental
effort to switch. that is another issue that otherwise keeps me from working
on something.

------
jjk166
Writing code is like writing a book. You're not going to nail it on the first
draft. It's okay to use a library that's probably not right for what you're
doing but you can make something work, and then come back later and
reimplement it with a more appropriate library. In fact, the problems you run
into during the sub-optimal first draft will tell you what tools are really
the best for your project.

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.

~~~
em-bee
indeed, that also helps to address issues like finding a practical use for the
project. your friend can give you feedback on that, or they can be the
practical use case. it also helps if you don't like to work alone on
something.

------
ramtatatam
I'm similar that when I want to do something in my own time I need lots of the
time to set into the mood to actually open the editor and drop some lines of
codes. I found out sooner I open the editor more of my time I spend actually
doing something rather than listening to YouTube or reading Hacker News or
playing chess.

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.

------
virtualmemory
I believe breaking the big goal/task into tiny chunks of work items in Todo
list, paperbook is the most important first step.

And 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

~~~
em-bee
ticking off checkboxes releases adrenalin i think, that's definitely a
motivator. how many checkboxes can i tick off today?

------
rajacombinator
Just do it. It really is that simple, yet the vast majority are simply not
able to.

------
flatfilefan
Aim to produce a first draft on the first day. Quick and dirty, incomplete,
maybe just a wireframe with stubs. In any language or framework. Just whatever
has better documentation or examples. Then make it better every day.

~~~
em-bee
release early and often. even if just to yourself. i like to see something
working, and then gradually tweak it and add new features.

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.

------
em-bee
i am struggling with this too. one thing i am worried is that the sideproject
will consume me and let me neglect other work that i need to do. in a way that
is my fear of failure, not failing to complete the project but failing to give
it the appropriate priority.

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.

