
How to be a sane programmer - nicholascloud
http://www.nicholascloud.com/2014/03/how-to-be-a-sane-programmer/
======
tedkalaw
I still find the pressure to work on side projects in your free time difficult
to come to terms with. There's often discussion about how if you don't like
what you're doing, then you should find a new job - and easily, if you're in
the bay area. I know a lot of really talented devs that don't work on side
projects because they are completely consumed by, and love, their work and
can't imagine doing anything else. What if your passion is your day job?

Having a github full of side projects is helpful when pursuing a job, but I
find it difficult to go hard at work and put 100% in and then come home and
work on side projects. Usually, I'd rather spend time with friends and family.

This seems to disqualify me from a lot of job postings.

~~~
AznHisoka
Personally I find it insane to go home and work on a side project after work,
if it's not something you hope to make money from.

~~~
chriswarbo
If a side-project did make any money, what would you spend it on? Perhaps
you'd spend some on entertainment, or to further your education, or to finally
fix those minor annoyances that you come across day to day. Maybe you'd invest
some in a project that you think has great potential to change the world?

Pro tip: many people work on side-projects for exactly those reasons. They
just cut out the middle man (money).

~~~
AznHisoka
Valid point. I guess I'm greedy and could never derive enough enjoyment from a
side project, given the energy involved to justify the time investment. I need
the million dollar payoff so I can enjoy hacking on whatever I want 40 hours a
week.

------
Duhck
Heres the problem I have with this entire discussion -- and this post does
address it a bit -- but programming IS a creative role and needs to be treated
as such.

Many organizations hire programmers as technical roles, but they are generally
creatives. A lot of them are night owls, who ebb and flow between long
productive stints and proverbial 'writers block'.

Many of the best developers I know have a creative desire and just writing
code for 10 hours a day doesn't satiate it.

I think we need to start treating developers as creatives and giving them the
processes they need to be successful and not be stressed, overworked,
stretched thin, etc.

~~~
dropit_sphere
This will never, ever, ever happen. There is too much money, for both sides,
in pretending this isn't true.

The business side has been entrusted with a lot of money, its own or someone
else's. _Success has already been achieved_. As such, it approaches things
from a mindset of risk reduction. And the absolute worst thing possible, from
a risk-reduction standpoint, is creative work. It's unpredictable, you don't
know when you've got an end product, and it involves dealing with workers who
have egos, who often work on things you don't understand. It is _unmanageable_
, which obviously troubles those whose job it is to manage.

The most common approach, so far, has been to ignore this scary possibility:
Keep projects as low-level as possible, spread responsibility far and wide (to
reduce risk, not for optimal efficiency), and keep everyone wearing business
casual.

Developers are (often) in the weird position of Ozzy Osbourne and other rock
stars: potheads whose potheadery became valuable. What the developers know,
however, is that businesses don't _really_ want what they have to offer. They
don't want to see the full effect of a bad trip. For every Bieber who turns
crappy branding to gold in the teen girl demographic, there's Joe Concept
Artist who's experimenting with some new grooves, but will never catch on. For
every Zuckerberg who can bang out a social network in PHP, there's some
dedicated open-source hacker whose dream is to make Lisp accessible to the
common man.

And yet: the money guys are offering money. Just swallow your pride, play
"Stairway to Heaven"[1] at the wedding, and pretend you've never had crazy
eyes when talking about homoiconicity, and the rent will be paid.

[1]Nothing against the song.

~~~
mstone4
Say one is starting a software company.

How does she go about structuring it to take this into account?

What are things which are inherently a problem and what things creating
problems because it is business as usual.

~~~
dropit_sphere
I knew someone was going to ask this. I certainly don't have all the answers,
but I have thought about this a lot.

First: software is _nearly always_ a dicey proposition. There are so many
variables that it's just impossible to predict much about it with any
regularity. The best approaches that I've seen so far accept this, and say,
"Trial and error? So be it: we will do trial and error as best as it can
possibly be done." YC and the lean startup model (aim low, accept that most
things will fail) are good examples.

The other approach is the "tried, no error" method, which cares intensely
about the past. Hiring a web developer? Portfolio first, examples of use of
specific technologies, examples of specific features. Find no one who meets
your exact qualifications, and proceed to either a)raise salaries a lot, and
constantly (banks, hedge funds), or b) complain to Congress about a "talent
shortage" (everyone else).

I think YC is the better model, and is a sort of company-less version of
michaelochurch's "open allocation." The key insight is: if you want 10x
engineers to ride up on their white horses and save you, you can't presume to
tell them what to do. They're cars, not faster horses. Beating a car with a
whip won't make it go faster---and this is a _feature_ , not a bug.

To get the best out of developers, you have to accept that they bring risk,
and _manage around that_ , rather than blindly trying to reduce it. That's why
I think Apple is _really fucking smart_ to have a huge cash cushion like they
do: with that cushion., it frees you to go for long shots. Apple is nearly
riskless in its financials, and so can afford to be _very_ risky in its
product development process.

If I were starting a software company, and knew exactly what I wanted to
build, I'd hire people with proven track records, pay them a bazillion dollars
each, and give them zero autonomy. _Or_ , I'd hire a bunch of college dropouts
who've obssessed over some kernel of good ideas (Tufte, Hickey, FRP, ML), pay
them nothing, and let them run wild (this is basically YC's business model).

If you're really serious about this---and I think it's worth it to be---I'd
read everything on michaelochurch's blog. He exaggerates, has a chip on his
shoulder, uses weird analogies, and has a better understanding of these issues
than anyone I can think of.

~~~
mstone4
Thanks for pointing me to the blog. I wish he wrote fewer words while making
the same points. I am guilty of the same thing.

Here is where I arrived to so far on this subject from my own reading,
thinking and experience:

Each person changes over time - they want varying degrees of responsibility,
working on new things, improving existing skills, who they want to work with
etc. People age and with that their personal situations change as well.

Change is inevitable.

A company, group of people executing a process which provides value and
receives more money than they spend to provide that value, can only survive if
it can adapt to change. Both the change coming from individuals in the company
and external change coming from the market.

There seem to be almost no companies ( maybe Valve, Semco and few others but I
never worked in any of those ) which try to adapt to both the internal changes
of their people and external changes of the market.

The current situation is this:

The rigid hierarchical companies with what Michael Church calls "Closed
allocation" fail to adapt to both internal and external changes and then they
eventually die. What the guy on the ribonfarm blog called - the clueless take
over and the losers and sociopaths just jump ship - then the company dies.

In the startup phase, the people make the company change until market fit is
achieved.

After market fit is achieved, it causes the company to resist any personal
internal change so that the achieved market fit can be optimized. If there is
no external change in the market the company thrives and can simply replace
any "failed" individuals who no longer fit with external ones which will fit.
The company puts in place new individuals to fill the rigid self perpetuating
hierarchy which can still provide the same value from the market fit. The
company does not care if a great female employee had a child and needs to work
4 hours a day - she is underperforming and needs to be fired for the good of
the company. Bigger offices need to be leased and a small group of people who
now live far away can just quit and be replaced etc. Many of the people are
not happy but need to pretend they are still the right fit - they just punch
in and out - "this is just a job" now.

In case the market fit does not last long but the company has made internal
changes impossible - the company will die. If there is still possibility of
internal change the company might adapt - but very unlikely if this happens
after market fit was once achieved.

Here is my current solution to this.

Recognize that change is inevitable. Embrace it. Create a system which can
adapt faster than the change that can cause either personal unhappiness or
loss of market fit or profit if you will. The only way to achieve this is to
let people inside the company make their own decisions for as much as they are
comfortable with.

One way is democracy. People vote and tyranny of majority rules. If you do not
show up to vote, whatever is voted gets selected. Every decision is put to a
vote or voted to be delegated to people with a finite time limit. The limit
passes and a vote needs to happen again. You can even vote for a monarchy in
case of crisis - have someone make all the decisions for a period of time. The
crucial thing is that any vote has a time limit and another vote is forced -
to adapt to change.

Democracy depends on informed participants. No internal company information
can be hidden. Salaries are an example of something that needs to be open.
Salaries get chosen and budgets get voted for. You select your salary but
everyone gets to vote on the budget that salary is in.

Every part of the company should have a time limit - die - and be assembled
again. No group should live for more than some time limit without have a vote
on who is part of it, what the budget is, what the focus is. Is this done
every month, every quarter, every 6 months or a year depends on the situation.
But companies need to reinvent themselves.

The time limit on votes forces the answer to "WHY". Is this group needed, did
we select the right leader, right people, do we need more, do we need to
change the market, product, the janitor ...

------
yangez
> Programming, like writing, painting, and music, is chiefly a creative
> endeavor not a technical one. Practice... will not make you a substantially
> better programmer. It will just make you more efficient with your tools.

Show me a world-class writer who doesn't obsess about his writing with every
waking moment.

Show me a master painter who doesn't paint every single chance she gets.

And show me a music prodigy who hasn't slogged through 15 years of mind-
numbing practice every single day.

Only then will I believe that these artists are just getting more "efficient
with their tools".

In creative fields, it's even _more_ important that you put in a huge volume
of work. That's the only way to connect the dots and create something truly
unique.

~~~
noname123
Consistency my friend. Murakami's routine which involves him running for the
first half to the day, then write and then chill with sexy-time Jazz music at
time at night and turning in,

[http://dailyroutines.typepad.com/daily_routines/2007/07/haru...](http://dailyroutines.typepad.com/daily_routines/2007/07/haruki-
murakami.html)

I could give you more examples of writers, Joyce Carol Oates , Michael
Crichton but same thing basically. Also note that Murakami didn't start
writing until 29 and loafed around at the public library chill in' and
reading' and at Japanese jazz cafes. As far as I'm concerned, I'm a prodigy
and workaholic at 27 for starting so early.

Also in regards to music, others can comment as I'm not an expert. But I've
wasted 2 years of my life doodling around scales, ear training and music
theory focusing on speed, dexterity and memorization, attempting to learn how
to improvise like the greats. That I never taken the time to listen to the
groove of the great pieces, sounds wonky but I decided that if I never can
become a good musician, at least I could slow down and learn to enjoy the
music as opposed to the idea. And I enjoy listening and playing much more now
and don't give two-shits about how my solo's sound and just keep playing. And
in the small moments of self-delusion inspired by bluesy turns, my own playing
gives my deluded mind a self-congratulatory chill to the spine.

And in regards to programming, let's be real. CRUD or iOS apps are not going
to change the world. We are like the capitalist work-bees, shoveling digital
snow around like escorts shoveling sensual snow. If we are really secure
enough to want to dive into our craft, then learn Linux kernel, compilers,
advanced algorithms and contribute to the bottom of the stack for a change
instead of fluffing snow at the top.

~~~
okal
Everything you said was golden, until the last paragraph.

<sarcasm> Picasso really should have stopped faffing about with his silly
brushes and gone to work in a canvas factory instead. The world really didn't
need another bloody painter. </sarcasm>

------
qwerta
I think problem are working conditions. Modern programmer is expected to work
in coffee shop on tiny laptop, practically worst conditions imaginable.

If I ask for decent private office and 3x32" screens I just get blank faces
and bullshit excuses. Since I started working for myself remotely, I can
sustain 10 hours of uninterrupted concentration. Before in office it was more
like 30 minutes of concentration per day.

~~~
themodelplumber
How much of your productivity gain from the 3x32" screens is attributable to
extra space for persistent applications (i.e. always keeping an IDE open on
screen N)? Just curious.

~~~
qwerta
I had 4x22" until recently, second screen adds 50% productivity, third 25% and
forth about 12.5". Upgrade to 3x32" is underway, so I can not provide data for
those. I will probably keep old 22"s around for some statistics,
visualisations etc.

I use screens in portrait mode, so it fits more code.

I usually keep left screen for navigation (file managers, terminals), center
screen for IDE and right for documentation, notes and communication. I also
use virtual desktops to switch window layout for various tasks. For example I
consume twitter and rss feeds in separate configuration.

I am not saying everyone would benefit from this setup. I analyze large heap
dumps and do lot of concurrent debugging. But quiet office, decent screen and
chair should be a starter for any self respecting programmer.

------
einhverfr
I used to find, btw, the pressure of programming difficult to deal with on an
ongoing basis. Then one day it occurred to me:

 _Perfection in the big projects doesn 't matter. The world is full of crap
software. Perfection in the little pieces however really matters, and this
makes it possible to build better software._

I still have stressful days, usually involving bug reports and unhappy users.
However, for the most part that realization meant that rather than the stress
being an ongoing thing, sometimes lasting days or weeks, it became an
occasional thing usually lasting only hours, and the sense of beauty in seeing
successful things come together has become more common. That doesn't mean you
spend time chasing perfection on every little detail because a lot of things
are legitimate tradeoffs and you won't know some deficiencies until it is
actually used.

To me that is craftsmanship.

------
stcredzero
_Imposter Syndrome_

So, when I was growing up, where the family had to drive 50 miles to visit
other Asians, I started to realize there was a pattern to how bumf#cks would
come circling in for what was in their minds the justified pleasure of
humiliating a non-white person. Most people were decent, but I and my family
members stuck out.

I notice the same sort of circling at some programmer meet-ups here in the bay
area, though I don't think it's my race that prompts it. Programmers make good
money, are highly sought after, and in many companies are positively coddled.
Just about every group that found itself in such a position has developed some
small sub population of arrogant, entitled jerks. In retrospect, I may have
been guilty of being a little bit of that myself.

One might like to think that good programmers are also good at thinking
rationally in general. That's not how it works. Being good at programming just
trains us to think rationally in a very specific context. The rest of the
time, we're primates vying for a place in the social hierarchy. The best we
can hope for are social structures and patterns that co-opt such tendencies
for the uncovering of truth and the good of the group. Seeking social contexts
that humanely succeed at this should underly one's seeking for a place of
work.

It's hard to do this, and most of the time, people find a situation that
achieves group cohesion and effectiveness through an "us vs them" dynamic.

------
Bahamut
I recently felt the pinch of stress at work...it wasn't due to being
overworked though - it was due to being overstressed, due to insane work
deadlines that had me concerned about getting stuff done on time. I'm starting
to balance that aspect of my life better, with the realization that I
shouldn't drive myself crazy just to meet the deadlines given to me. It's ok
to let deadlines slip by if they were unreasonable to begin with, but still do
the best I reasonably can.

------
chris_mahan
"Programming, like writing, painting, and music, is chiefly a creative
endeavor not a technical one. "

Yeah, like writers, painters and musicians aren't also crazy...

------
channikhabra
Disclaimer: Off Topic

I am feeling like this (burnout/mental sickness of programmers) is becoming a
successful theme on HN lately. Many-many posts are popping up to front page.

Not like it's a bad thing, being myself a victim it feels good to read
experience of fellow coders who has seen what I am about to see or how to
avoid seeing it, but still, it is becoming a theme. I am imagining hordes of
posts on this topic coming up. Or may be we already have 'em, just the good
ones are popping up to front page.

There are actually more than one pattern emerging. I think I gotta hint of for
writing posts more likely to hit front page.

------
agentultra
Programming has been at times my sole obsession.

However in the long run it has been and always will be a means to an end.

I think the advice to look afield is good. Gerald Sussman seems to agree as he
often looks to biology for new ideas. Ideas are not born in a vacuum after
all. They need to form hunches and meet other hunches and be given time to
cook. That's a number of metaphors... but I think you get where I'm going with
this. I hope.

Spend time learning the fundamentals for sure but branch out as soon as you
can.

------
orkoden
How very true. Abstract reasoning and pattern recognition from other areas
help programming hugely.

------
daphneokeefe
Wow, thank you for this #iamdoingprogramming

------
michaelochurch
Impostor syndrome is an artifact of dimensionality. There are hundreds of
answers for "What does it mean to be a good programmer?" We have back-end and
front-end, "devops" and "DBA" and "data science". We've let the colonizers
(business guys) divide us for _their_ purposes (not ours) and we're muddled.
It's hard to know if we're good at our jobs because our jobs are constantly
changing (and, sometimes, in ways that leave capability and success negatively
correlated). The colonizing gendarmes who are supposed to be able to evaluate
our work are even more clueless.

What we do would be highly dimensional (i.e. specialized) if we weren't a
colonized people. But we'd be able to come to peace with it. We wouldn't fret
others knowing more than us (which happens to everyone) if we weren't
constantly watching our backs. We are constantly meeting people who know more
about certain topics than we do (and, reciprocally, so are they). It wouldn't
be an issue if we had more career and income security.

It's not something about _programming_ that makes people sick. It's not an
intrinsically stressful activity. It's far _less_ demanding (speaking of the
work itself, not context and social dynamics) than over 75% of paid labor.
What's hurting us is that we're a lost, conquered, and scatterd tribe. We
think we're elite specialists, but we've done such an obnoxiously bad job of
fighting for ourselves and our own value as to let ourselves be typecast to
business subordinates, and it's horrible.

It would actually be a win for the more progressive business people (as well
as us) if we could get ourselves out of this. Would you want to be operated on
by a doctor with the pay and social status of an average programmer? Of course
not. Well, similarly, we'd make better products if we got ourselves out of the
"business subordinate" trap, and pretty much everyone would win.

~~~
ForHackernews
> Would you want to be operated on by a doctor with the pay and social status
> of an average programmer?

I don't care about the social status of my medical providers, I care about
their competence.

The last few times I've been to a clinic, I've been seen by nurse
practitioners instead of MDs. They've been very capable, and noticeably less
expensive than an MD visit. Lots of the rules around medical practice are
nothing more than the AMA acting as a guild system to artificially restrict
supply and inflate salaries.

