Ask HN: Where do you get your inspiration from? - <AUTHOR> I always wonder what inspires different individuals....so basically what inspires you to build a particular tool?
Is it a problem? A passion for building something? Do you just randomly build stuff?
Would love your feedback, thanks! <comment><USER2> What inspires me is fear. Fear that I'm stuck in a dead-end job that won't give me any options or marketable skills. That I won't be able to pay for my children's education, that I'll be a burden to them when I retire. And most of all, the fear that if I get hit by a bus today I leave them with nothing.

That drives me to work harder, keep improving my skills and stay on the lookout for projects that will make me valuable on the developer market and maybe bring in revenue.

<comment><USER3> I'm in a similar boat.

Mine is driven by an eccentric fear of how the economy is changing and assumptions of what it will look like in 10 - 20 years, coupled with a pessimistic view of human nature (but not people, just the way non reflective people behave). I'm trying to financially secure my son's future.

</comment></comment><comment><USER4> In no particular order:

(1) Listening to lots of podcasts and audiobooks. Amazon's even offering a holiday discount on Audible subscriptions, so grab that while you can.

(2) Reading incessantly, both non-fiction and fiction. Let me emphasize the fiction. The scientists that brought us satellites were inspired by Asimov's fiction, and the same could work for you.

(3) Sitting and watching. Our friends and family (and total strangers) constantly put up with small annoyances and major blind-spots. Ask yourself: Why are they accepting these pains?

Oftentimes, they do so either because no one's engineered a fix, or because -- and this is often overlooked -- no one's found a way to _sell_ them on an existing fix. If you could find a way to get programmers to consistently write unit tests _first_ , for example, you'd have an engineering "miracle" on your hands.

(4) Make a habit of meditating and journaling. The first, so that you can _notice_ all the inspiring ideas already floating around inside your head, and the second so that you _capture_ those ideas.

I recommend pen and paper (or a stand-alone voice recorder: [http://www.amazon.com/gp/product/B00COF74E4/](http://www.amazon.com/gp/product/B00COF74E4/)) when doing both at once. That protects you from the "I'll only check Twitter for a minute" trap of using a phone or computer.

Good luck!

</comment><comment><USER5> For me it always starts as a need to automate something or frustration at a software that doesn't behave like I want.

I usually say "it's no that hard to do this" then to later discover once I am knee deep in code that in fact it's especially hard to do it right.

<comment><USER6> Agreed, but I do love that moment where I'm thinking, "This should do X" and then realize, "Hey, I can make something that does X!". Then months later, I wonder what the heck I was thinking...

</comment></comment><comment><USER7> Whenever something else sucks.

I have never built anything when there is already something acceptable available. That's probably why I've never spent much time building low level stuff like platforms, utilities, and tools. People way smarter than me have that covered really well already.

But when a customer needs something and examining their options causes me to vomit, I am highly motivated. "I can do way better than that!"

</comment><comment><USER8> 'Inspiration is a word used by people who aren't really doing anything.'

</comment><comment><USER9> I get emotionally inspired by Art or sometimes even just block colours.

However on a logical level my inspirations come from analogies between different domains. I have one of those minds that accidentally splices ideas together when I daydream so I read a lot to give myself material.

The paintbrush is applying the language of one topic onto another: this is an early stage, later you read these thoughts back and sometimes something clicks. It occasionally leads to ideas that have some game-theoretical economic value. Other times they remain poetic/fun.

The problem with inspiration is that it only leads you part of the way. Convincing yourself to forgo other interests to pursue them is a whole other thing. Additionally not all surface-level "good" ideas are economically viable today or (if they are) within my reach.

Practical ideas are a whole other deal. You need to empathise with your own and others pain. Personally I think it's often not worth creating these however unless they are partnered with ideas that can be executed to significantly alter the underlying economic reality.

I am interested in granular ideas and insights that can be used in the pursuit of better products. Not just the idea that "a product to do X should exist", but the ideas that would allow it to work well.

I would love to meet and discuss thoughts like these with others that live or work around Central London by the way?

</comment><comment><USER10> My inspiration comes from the knowledge of my mortality, literally, not in a poetic romantic artsy way. If I am not going to give up on everything and die, then I will try my hardest in learning to live. There is nothing really that I can build that matters more than caring about my life. So, I just try to amass as much skill as I possibly can, pretty much all I do is study and try to develop skill and add more skill on top of existing skill, I relate almost everything to mathematics, computer science, logic, and code, aside from trusting a small subset of individuals with my physical presence. I hug my family and talk to my cat. That's my life. Sit at computer, code, food, sleep, exercise. Maybe it seems like I have no inspiration because there is no 'push' I need to do. I just 'do that' and 'that' is mostly, more or less, what I want my life to be. I could also say 'the world' is my inspiration but that's redundant, although much more humble, but it 'was' very hard getting my mind aligned into this particular habit sequence.

This is just in general. When I find particular projects to obsess over I have elevator speeches about them that could last decades. I get really really excited, super hyper, I like to explain why 'this tool' is the best thing in the world, and promptly forget my rant after I've finished it. I don't know 'why' I do it. I just 'want' this to be my life, because it's what I am passionate about, what clicks for me, what lights up my brain, what paints pretty pictures in my head, and what I love to think about, observe, learn about, and so on. Every explanation I could give for it in words doesn't do it justice.

</comment><comment><USER11> I have to enable "ideas mode" and I when I do start looking at my day to day life with more critical and objective eyes. I run a software company too, so I'm not short of people throwing ideas at me!

Here's a couple of examples, one business focussed and one more personal.

Story one...

A few years ago one of my developers quit because I forgot their job review. Bad times followed as we were busy and replacing a good developer is not easy.

Once the dust had settled I looked for a web app to ensure this problem never occurred again. I couldn't find anything, and so my company built a HR app to simplify our HR processes and automate the heck out of them. A couple of years later www.staffsquared.com was born. So this was us building a tool to scratch our own itch, which is a common approach.

Story two...

My other half is obsessed about checking her bank account. She logs in twice a day to see what's happening and to ensure that her card(s) haven't been used. She's worried about identify theft. Thinking about this, I came to the conclusion that it'd be really cool to have a text message service that alerted my partner to any "strange" transactions. Some banks in the US provide this, but in the UK it's not a thing. I haven't had the chance to pursue this idea any further just yet.

So my approach is scratching a personal or professional itch. My co-founder and CTO at my software company takes an entirely different approach. He likes to build things because he gets a kick out of making cool technical shit work. I can't roll like that, I have to have an understanding of the problem and how my proposed solution will fix it. It needs to address a pain. I am technical, but I don't get a kick out of building things for the sake of building them to learn, experiment etc.

</comment><comment><USER12> In a very general sense, the great systems of the past: Multics, ITS, the Lisp Machine, the Alto, UNIX(TM) and 2/4.x BSD, and early Windows NT. (Linux not so much.) Xen nowadays, perhaps. TeX, and let's add TCP/IP, Ethernet, and CHAOSnet. Public key cryptography and RSA. Colossal Cave Adventure and Zork. The Whirlwind computer.

Hmmm, and of course the great languages, LISP, Scheme and Clojure nowadays, C, FORTRAN (each in their niches, of course). (C++ not at all, and I've sworn never to write another line of Perl after heavy use for more than half a decade. Hopefully the same with C++, but then there's LLVM....)

People who I only know through their books:

The great students of project success and failure: Fred Brooks, Gerald Weinberg, Richard Gabriel, Joel Spolsky, Ivar Jacobson, the Anti-Patterns crew.

The great explainers: Guy Steele, W. Richard Stevens, Harold Ableson (actually knew him, and we share first names :-) and Gerald Sussman, Bjarne Stroustrup, Andrew Appel (compilers) and Richard Jones (GC), Paul Graham, Alan Kay, David Moon, some more Structured Programming types who's names may be less familiar: P. J. Plauger, Brian W. Kernighan for that (not the C book), and Edward Yourdon.

But to actually do something, it's to build something that's needed and has a shot at being enduring. From Perl scripts to manage my email, whatever a company needs to survive and thrive, to something open source.

I don't think any _particular_ person inspired me in an overwhelming way, so much as the generally quiet competence of the programmers and system administrators I've worked with since 1977, the teachers and professors who knew their subjects, how to teach them well, and respected sincere students like myself, salesmen who could sell, small businessmen who could keep their companies afloat, etc. Solid competence with or without flair is highly underrated.

</comment><comment><USER13> I think another interesting question would be "where do you NOT get your inspiration" to which i 'll start: Not from techcrunch or similar blogs.

</comment><comment><USER14> Freedom for me/security for the people close to me, I guess. I was one of the lucky few who made a lot off Bitcoin, and paid off my dad's mortgage with the profits. I think I work harder now than if his house had ended up being foreclosed, as now I realize what an outlier that opportunity was.

It's becoming increasingly hard to find inspiration for the things that conflict with my personal ambitions(school, getting an internship at a megacorp etc), I regret to admit. As I'm typing this I'm sitting in my last networking lecture of the semester, and it's difficult to find inspiration to pay attention to this to say the least ha. If I'm working on a freelance project I actually care about, I will work at 100% for days at a time without any need for external contributing factors. I'd be content at a startup living out of my car working 16 hours a day coding/moving boxes/anything for peanuts(I mean as long as everyone else was doing the same of course), but I want my parents and other immediate family to be financially secure.

I guess it's hard to find inspiration until I'm willing to sacrifice to attain whatever goal I have in mind. I first went the business route, wanted to become a quant and wore suits with the rest of 'em. I then realized that if I really wanted something, I wouldn't have to watch corny youtube videos to motivate me to go do it.

</comment><comment><USER15> Inspiration comes in fits and spurts. The main cause of that is because ideas happen when different hunches or problems I have meet interesting opportunities or enabling circumstances. When that happens I get an idea and I work on it.

I find ways to maximize my exposure to new ideas. I read novels, poetry, and plays. I read humanities-focused introductions to new areas of maths that I haven't yet explored or histories on the maths-related discoveries that I had no previous exposure to. I then dig in deeper to subject matter that I find interesting or am curious about... or are fundamental. I play quite a lot and make one-off programs that have no function or purpose; often inspired by phenomenon I've read about. I keep journals of my explorations so that I can recount the threads that led me to particular ways of thinking and see where I am missing out: I then seek out the gaps. I meet new people in different fields and have no shame interrogating them about their ideas, passions, and inspirations. Sometimes you just need to stand on a desk.

 _Update_ : I have the advantage, now, that most of the CS fundamentals have been burned into my brain and I have a lot of experience writing software... it's almost reflexive now.

</comment><comment><USER16> All of mine successful projects was created while learning new thing. I did learn Portuguese and can't find flashcards tool that I like, so I create mine, did learn to play piano and needed some way to practice sheet reading skill, so I created tool for that.

I am also wine maker and in need of one analytical tool and found out that it costs 30k, amount I can't afford (or even justify for business my size) so I found a way to create same tool that will costs just 3k.

First category is kind of simple: I do need it and the app is simple enough I can do it in few evenings so I just do it. The second category is something I really need and will be really happy if somebody else created it and because there is nothing like that on the market I have to do it by myself (and then sell it to other winemakers who I am sure need it as well).

The problem for me is the middle ground: something I found quite interesting (say nicely formatted tabs app with timing, sounds, fretboards...) and might use it from time to time. But the novelty wears off soon and I am not desperate to have it in my life. Still these kinds of projects need sustainable effort to make it work so I just keep working less and less on it and then quit.

<comment><USER17> Hey where is your tool for learning sheet music? I never finished mine :(

<comment><USER16> [http://notationtraining.com](http://notationtraining.com)

It is actually really simple, just answer the notes displayed using keyboard or buttons bellow.

</comment></comment></comment><comment><USER18> My ideas stem from conversations with friends. We'll either have chats that start with "I've been struggling with X" or "Wouldn't it be amazing if we could do Y" because those are the things we know. Occasionally we've tried to think of problems that other people will have, but without any (direct or recounted first-hand) experience of a problem working out a solution is exceptionally hard.

</comment><comment><USER19> My inspiration for all of my work is a fear that no one else is going to look at the things I'm looking at, think about the things I'm thinking about or discover the answers I'm trying to find. This is less ego-maniacal than it sounds (I think), there just aren't many people pursuing my particular passion, so I genuinely feel like I need to do everything with it I possibly can before I die.

</comment><comment><USER20> 1\. Real world issues that I personally encountered: hard to find a flat to rent? → build a zen process around this individualistic race, disappointed with your city lifestyle? → build the city of tomorrow, difficulty to learn how to sing b/c you have a visual memory? → build an app to visualize your voice, etc.

2\. Whatever gets me in a state of free association:

\- Semi-randomly browsing HN/wikipedia/the-web while learning new concepts got me a fair number of new ideas.

\- Running or any physical activity (preferably outdoors) that occupies my body while not requiring a lot of thinking so that my mind is free to wander.

Now those are only ideas in my head. Right now I obviously can't launch three businesses and learn many hobbies while rebuilding my city, wish I could, I'm already committed to other things. So I write them down for later when I'll be asking myself "what's next?" otherwise I can't focus on the task at hand.

</comment><comment><USER21> I normally end up building things that are useful to me. Storytella[0] was started for a Nanowrimo one year. I wanted something which would allow me to write at home or at work without having to worry about losing anything or having to keep files in sync. It also needed to make it really easy to change character or place names because I'm often indecisive about these things.

Sunstone[1] was built (and still needs a lot of love) because I'm a role- player and I often need to make maps. There are plenty of cartography tools available but they all seemed mediocre or required a Java install.

[0]: [https://storytel.la](https://storytel.la) [1]: [http://sunstone.stoogoff.com/](http://sunstone.stoogoff.com/)

</comment><comment><USER22> Ideas come from somewhere, not sure from where it is. I do believe that everything you read, watch or listen is somehow "stored" and influences how you think and the ideas you have. Once I have an idea, I try to share it with friends and/or colleagues to see if they approach the problem/idea as I did and how differently they look at it. I usually write it down so that I can go back months later and think about it again. Sometimes they seem ridiculous, other times they seem just different.

Keep reading, watching, listening and sharing your knowledge and ideas. Keep your eyes and your mind open and try to understand how other people think and how they see the world (traveling and getting to know different cultures might help a lot on that).

</comment><comment><USER23> A bunch of Chamath Palihapititya interviews. There are other people who I'm sure I would take inspiration from if I knew everyone, but it's easy for now to just point at someone with a lot of money who I feel is very focused on real value creation in philosophy and wants more investment opportunities that fit that philosophy.

I pretty well believed that the world would become meritocratic. At 25, things looked very non-meritocratic. Check boxes, hang your hat on superficial measures of success, stop thinking because you'll be wrong because you never took enough risks to learn to get anything difficult right.

I feel like there's this built-in notion among people who get their first taste of greed and fall victim to success bias where they start thinking that the highest aspiration in life is to build Comcast, be the cybernetic CEO for 400 years, outlive all the rest of the shareholders, and by virtue of becoming the entrenched player with all the cards stacked in their favor, have all the money on Earth at some point. If we can just hold onto our rent-seeking empire...

Meanwhile nothing interesting happens whatsoever.

As a simultaneous complete rejection of this nightmarish aspiration and an attempt to live as close as possible to the centers of real value creation, I find it very easy to stay devoted to a technology career with some entrepreneur splashed in.

If your highest aspiration is to own something and sit back comfortably as a good citizen, you should first fight for a strong social safety net, perhaps even guaranteed income, and then give away all your excess to people who will do things with it that add real entertainment to your life by building cool things that weren't possible with people like you clogging up the pipes.

I find entrepreneurship to be the one career where I can wake up, be at one with dissatisfaction or ambition because I feel very close to direct pathways of action instead of acceptance or just ranting on social media somewhere. Even ranting becomes an exercise in synthesizing knowledge together into a vision of a better solution. You can't lose.

</comment><comment><USER24> Ah, I just published a blog today somewhat related to this. But it's more about Startups that inspire me, personally.

It goes like this: \- There are various aspects of a startup that can inspire us. Be it; good team, good culture, great product with exponential growth. But one thing that personally inspires me is the self-sustaining business model of a startup to create success."

Continued: [https://medium.com/@aatifh/companies-that-inspires- me-6f382d...](https://medium.com/@aatifh/companies-that-inspires- me-6f382d40bd6)

</comment><comment><USER25> The darkness and the silence. I have to turn everything off and just sit with my eyes closed. Well, going for a walk helps, too. Or laying on the couch, staring at the ceiling. Being anywhere near anything that involves a computer is pretty much a no-go.

Sometimes, I break out a quill pen and an ink well and I "think out loud" on paper. Something about how slow the writing process is when you have to refill my pen after every sentence gives me space to think. Typing just doesn't work the same.

</comment><comment><USER26> I do Morning Pages[0], and then the inspiration comes automatically. I've more than plenty information sources shouting at me to be inspired by, but I need a clear head to be able to turn it into concrete ideas. I find that the clearer my head, the more creative I get. So Morning Pages.

[0] [http://juliacameronlive.com/basic-tools/morning- pages/](http://juliacameronlive.com/basic-tools/morning-pages/)

</comment><comment><USER27> Jimmy DiResta. You can laugh as it's not exactly related to CS but you can't help yourself when you watch him. You wanna build stuff, it doesn't matter what. He really makes you want to just build stuff... to solve a real problem... with the right tools for the job... the way you know how... and be proud of building it.

</comment><comment><USER28> For me, it's mostly when I need something and I don't find a good solution. That's why I started hashtagify.me - I needed to find good hashtags to publicize a different website I had created about mortgages (that too, because I couldn't find a good one) and didn't find any good solution...

</comment><comment><USER29> This is a great talk from somebody at Ideo about finding inspiration. If I recall the idea was to try to look at things like a child.

[http://ecorner.stanford.edu/newsletter_iphone.html?material=...](http://ecorner.stanford.edu/newsletter_iphone.html?material=2054)

</comment><comment><USER30> Depends on the project. Either that it has the potential to make money, or to help/inspire people (my blog), or it allows me to learn a particular skill (doing something lately to learn Backbone and other JS technologies), or it's just plain fun for me (game development).

</comment><comment><USER31> I draw off of Statisfy questions. The data I get from this new web app has been really helpful. For example, this poll about Uber's market worth really intrigued me..[http://www.statisfy.co/q/2082](http://www.statisfy.co/q/2082)

</comment><comment><USER32> Watching people bungle through life and then go all emo Skywalker. "I can't, it's too hard."

Try or try not, etc. I want to be the person that makes people feel that anyone can do anything in their life. I'm a blundering idiot. If I can do it, you can too.

<comment><USER33> >" _Try or try not, etc._ " You mean: "Do or do not; there is no try".

You got a Trekkie to fix your Star Wars quote!

Though I definitely agree with the sentiment of what you were trying to say. I don't find myself any less of an idiot than most people around me. It's just that I sat down, self-inspected, and made the necessary improvements. I guess some would say that that sort of thing ultimately does make you less of an "idiot" than others, in that 'introspection' is the thing that separates the two.

</comment></comment><comment><USER34> The fact that my industry is full of a bunch of idiots who execute at 25% efficiency. They rely on their first-mover advantages and allow me to gain huge market share. I have to act quickly before they figure it out.

</comment><comment><USER35> Creating something that has never been created before. Combining the latest technologies. Open sourcing it so the world can contribute. All outside of the corporate realm. So that all beings may be happy and free.

</comment><comment><USER36> The student loan debt crisis we are dealing with as a country. It's just starting. Figure we are in the 3rd inning. Want to figure out how to dampen the blow it will have on middle class entrepreneurs.

</comment><comment><USER37> A prominent author Steven Johnson tries to answer this question in his 2010 book: 'Where Good Ideas Come From: The Natural History of Innovation'... Interesting read!

</comment><comment><USER38> Hmm,

It's always nice to build a tool for solving a problem. If some idea will make people life more easier, then it's great to start building that tool.

</comment><comment><USER39> I just like to build stuff with computers, and always have since I learned some BASIC on a Commodore PET and subsequently Commodore 64.

</comment><comment><USER40> For me it's just curiosity. I have an idea and I want to see if it's useful to somebody.

Usually I'm more inspired when I travel

</comment><comment><USER41> I get my inspiration from other peoples work, and in my case mostly Github.

</comment><comment><USER42> I have an interesting story about inspiration.

Fresh out of Brigham Young University, a man named Stephen Hales was having trouble figuring out a logo for his design agency, Stephen Hales Creative. He had spent weeks working on concepts for the logo but nothing felt right, until one day he was getting into his car when he accidentally spilled a drink of coffee or something similar. When he looked at the ground where the beverage had splashed, he saw what appeared to be the silhouette of a bearded man clutching at his scalp, a representation of the design process: both frustrating and enlightening. He used the spilled drink as inspiration for what would become — and is still, today — the company logo.

Anything can be inspiration, depending on the lens you have on when you encounter it.

Research has shown that even subtle things we don't consciously acknowledge have an impact on our ability to solve problems or generate ideas (i.e. to "inspire" us). The trouble is that, because we aren't always consciously aware of what is inspiring us, we credit creative "sparks" to current conditions and stimulus, even if what really sparked that solution or idea in your mind was really inspired by a billboard you passed on the freeway four days ago or a book you read when you were younger.

As a result, we waste quite a bit of time "seeking" inspiration. We feel like understanding where others gets their inspiration will somehow magically help us to find it ourselves more often. But that's not always the case.

More often than not, the best way to be inspired is to bury yourself in the problem or task you're working on.

To quote smashLAB co-founder Eric Karjaluoto:

 _" The problem with inspiration is that it's random, which leads you to focus your hope on outside influences you can't rely on...These stimuli aren't under your control, available on tap, or always relevant to the work at hand. Thinking you can find ideas elsewhere leaves you flipping through magazines and browsing the web, hoping you'll stumble on a magic cure."_

Of course asking what inspires others can be enlightening and entertaining. I'm not going to bash any of that outright because that's a battle already won (just look at the thousands of books that sell each year around how to "find" inspiration).

Perhaps I'll leave you with another quote from Merlin Mann:

 _" Joining a Facebook group about creative productivity is like buying a chair about jogging."_

For more thoughts on the subject, consider:

[http://everythingisaremix.info](http://everythingisaremix.info)

[https://medium.com/@mikula/its-okay-to-be- dumb-d536915238cd](https://medium.com/@mikula/its-okay-to-be- dumb-d536915238cd)

[http://jamesclear.com/schedule](http://jamesclear.com/schedule)

<comment><USER43> >silhouette of a bearded man clutching at his scalp

Can you show the logo?

<comment><USER44> A quick Google search revealed this page - [http://www.halescreative.com/](http://www.halescreative.com/) \- I think that's the logo the parent is referring to.

<comment><USER42> That's the one!

</comment></comment></comment></comment><comment><USER45> Drugs. LSD and Adderall.

</comment><comment><USER46> Lives of ignorant - those who have never tried to study or even read.</comment>


Open Astrophysics Bookshelf - <AUTHOR> http://open-astrophysics-bookshelf.github.io/

<comment><USER2> Amazing. The hydrodynamics text is very clear and concise. The stellar physics seems to be a short summary of Stellar Structure and Evolution, 2nd. Edition (by R. Kippenhahn, A. Weigert, and A. Weiss).</comment>


The History, Controversy, and Evolution of the Goto Statement [pdf] - <AUTHOR> http://web.sonoma.edu/users/l/luvisi/goto/goto.pdf <comment><USER2> This is an excellent article that sets context for, and summarizes, the "goto debate".

I know modern programmers who have simply absorbed the received wisdom that "goto is terrible" and wonder why there even is/was a debate; this short and concise article should show what goto was used for.

At the time Dijkstra wrote (the letter that the editor titled) "Go To Statement Considered Harmful", his proposal would have meant programming in a C-language (of course I know C didn't exist then...) _without_ any `break` or `continue` in loops, and without `return` except at the end of a function. There are very few languages today that don't have `break` and `continue`, and in them (Lua for instance) `goto` is still used.

As the article mentions, it takes much from Knuth's wonderful summarization paper "Structured Programming with Go To Statements", and if you find this interesting you should definitely read it! [https://pic.plover.com/knuth- GOTO.pdf](https://pic.plover.com/knuth-GOTO.pdf) (Also reprinted in his book/collection titled _Literate Programming_.)

<comment><USER3> The funny thing is, it became a cargo cult in many ways. I once worked with a guy who persistently wrote things like these in C++:

       do {
          ...
          if (...) break;
          ...
       } while (false);

It took me a while to realize what this was about. But, basically, he invented a way to goto (so long as it was forward) without actually spelling it out. When I asked him, he gave the usual creed about how "goto is bad", and wouldn't be convinced that break _is_ goto, especially given how he used it.

Needless to say, this kind of code is actually less readable than if it were written with a goto in it, because it looks like a loop, but actually isn't one. With goto, at least it's very clear what it's for, even when there was a better way to do the same thing.

<comment><USER4> I've seen and use that. It's perfectly readable once you understand it's not a loop. It's handy on c, where you can't try...throw (or don't want to in c++) where you want to do a few things which you want to treat in a transaction- like manner. You would return success from the last line in the do loop and handle errors outside the loop. It's not just about mindlessly avoiding goto; it's about writing clean structured code.

<comment><USER5> The problem is trying to understand that it's not a loop. The first line of the block says "this is a loop". The last line of the block says "this isnt't a loop."

The code is, if not outright lying, at least misdirecting.

<comment><USER4> You could always add a comment "this is not a loop" if you find it puzzling that the language allows you to loop zero times.

<comment><USER5> This is wrong in so many ways. First, I know the language. I've been doing this for almost 50 years. This isn't a question of what the language allows but what the coder is trying to do.

Second, experience has taught me that code and comments often don't agree. Too, if you have to comment that a loop really isn't a loop then this is an indication that something is wrong.

Third, it isn't a loop: while(false) never loops. That's the point. Having to use a forward reference to understand the beginning of something is bad practice.

Fourth, this construct is almost always a sloppy way to prevent if-else creep. The code is invariably improved by a) not lying about the loop and b) refactoring.

</comment></comment></comment></comment></comment></comment><comment><USER6> My father wrote a BBC Basic interpreter for MS-DOS and lectured at Coventry University for a while. I remember discussing the Dijksra article with him. He agreed that goto should generally be avoided, but said he'd used them for very deep loops where a for loop would have run out of memory. That basic interpreter was written in assembler, so he was very used to managing program structure manually with no high level constructs. On early computers, and even today, sometimes there are constraints other than clarity of the code that need to be considered. Having said that, I've not used a goto statement for at least 30 years.

<comment><USER7> I kinda understand the feeling your father had. I'm currently tutoring a friend and while I was reviewing a bit of code from the assignment they had written, a simple goto would halved a lot of the complexity involved. Instead I recommended a complicated flag based system that was probably unnecessary. Although goto is harmful, perhaps it should be taught again as an advanced technique once more?

<comment><USER8> > Instead I recommended a complicated flag based system that was probably > unnecessary.

That's the trigger for me: after more than one flag and the complex states involved, I may refactor the code using goto because it can actually be a cleaner solution. Programmers need to be less dogmatic about this case.

<comment><USER6> Sounds like a state machine implementation might work. Hard to say in the abstract.

</comment></comment></comment></comment><comment><USER9> Looking at this from an Assembler point of view, isn't everything really just a GOTO?

Instruction Register + 1 = GOTO next memory location

If A then B = Branch if equal = GOTO ADDR B

call function = put currebt address in stack and GOTO this address, then GOTO address on stack.

It seems to me that it is just GOTO all the way down. In fact there really is nothing else but Memory and GOTO.

Sort of ironic that the very foundations of machine computing is not a very good idea....

<comment><USER10> "GOTO considered harmful" doesn't mean you should program in assembler without JMP (and without CALL, for that matter, since the ability to CALL into the middle of a function is equally problematic).

All flow control is really just GOTO in the same sense that all programming languages are just assembler. By beginning of the century, most programmers had realized that this is not the case.

</comment></comment><comment><USER11> Too many people took the wrong lesson from Dijkstra: that typing out "goto" in your code was wrong! The point is that structured programming helps you maintain invariants in your code, and reason from the syntax alone without having to know the entire dynamic history of the code's execution.

This lesson applies equally well to Angular's "watches" for example, or the heavily event-driven style seen in some Backbone applications, but these weren't spelled "goto" so people didn't notice.

</comment><comment><USER12> Original author here. This was a handout for a computer science colloquium talk that I gave many years ago.

It's fun to see this show up on Hacker News, and thank you all for not holding it to the same standard as a proper academic paper!

<comment><USER2> Thanks for a great article/talk!

Many people misunderstand the _goto_ debate and I'd like to point them to the great Knuth article for a summary but I can't; it's far too long and contains a lot of implicit context of its time. Now I have something much better to, well, ask people to go to.

</comment></comment><comment><USER13> In John Reynolds "The Discovery of Continuations" paper he cites an interesting observation by Doug McIlroy:

"So while van Wijngaarden said that goto's were unnecessary ... , Dijkstra stretched the point to say that goto's were inconvenient. The latter lesson stuck."

Essentially Van Wijngaarden was talking about a continuation passing style, where the _remainder_ of a program is represented as a function, so at the end of a function you always call another function and no function ever returns! Read the paper: [https://homepages.inf.ed.ac.uk/wadler/papers/papers-we- love/...](https://homepages.inf.ed.ac.uk/wadler/papers/papers-we- love/reynolds-discoveries.pdf)

</comment><comment><USER14> Funny this should show up, since I am just in the planning stage of implementing common lisps "tagbody" in scheme. It is mentioned in the article, but not really explained. It is a neat little localised goto that is explicit. You can only jump withinthe tagbody.

Why is this useful? Well, goto is a nice little primitive for some things. Tagbody is used in CL to implement the iter (and maybe loop) macro. Because sometimes all you want is unconditional jumping around :)

<comment><USER12> Original author here. Funny you should mention that. I once made an attempt to do the same. You can find it at [http://web.sonoma.edu/users/l/luvisi/scheme/prog.scm](http://web.sonoma.edu/users/l/luvisi/scheme/prog.scm)

One fun thing about this implementation is that labels can be passed to other functions, or returned from functions, and even used to jump back into functions that have already exited, since they are based on continuations.

Good luck!

</comment></comment><comment><USER15> The statement that jumping to an error handler evolved into modern exceptions (2.4) is a bit misleading. Exceptions as we know them today have three properties.

(1) The target is not necessarily known at compile time.

(2) The catcher is likely not the same function as the thrower, with several other functions in between.

(3) The stack is unwound as part of the throw/catch, including things like destructors.

Even the uber-powerful "goto" that Dijkstra railed against didn't have these properties, let alone the tamer "goto" of modern languages like C. Personally I think (1) and (2) are reasons why exceptions are far worse than gotos, but if you're going to have them then you'd best have (3) as well. What I always find strange is people who look down their noses at code with gotos carefully used for error cleanup, but have no qualms about flinging exceptions around in their own code. I guess those who do not learn the lessons of history, etc.

<comment><USER12> As I recall, my goal was merely to point out that unstructured jumps are still used for error handling. I was in no way attempting to claim that the two features are the same.

I'm sorry for any confusion.

<comment><USER15> No need to apologize. I didn't mean to suggest any failure of intent or diligence. The problem is only that people who have grown up in a culture of both "goto is evil" and "exceptions are free" has a poor lens through which to view the comparison. It's just one of those things that might need to be clarified in a later version as time marches on around us. In general, I found the article very well written and helpful.

</comment></comment></comment><comment><USER16> An observation just for fun: if you really want to, you can solve the "average of integers, terminated by 99999" problem _without_ needing any of { goto, break, duplicated code }. Here's one way:

      int sum = -99999;
      int count = -1;
      int last = 0;
      do {
        scanf("%d", &last); // scanf is kinda evil but is what article uses
        sum += last;
        count += 1;
      } while (last != 99999);

Or you can initialize sum and count to 0 and correct them after the loop instead of pre-correcting before as the code above does. This results in code that is a little longer, very marginally slower, and somewhat easier to read.

(There is still a little bit of duplication there: the magic number 99999 appears twice. For this reason I would _actually_ use break, unless required not to like some of the students in the experiment.)

</comment><comment><USER17> I was once in a long online debate about whether "software engineering" was about machines and math, or the human mind ("wetware"). I leaned the "wetware" direction. As a "test", I asked the machine/math side to "objectively prove" that goto's are inferior to blocks (under most circumstances). (To be fair, the machine/math side was not uniform in their view; I'm oversimplifying for brevity.)

It was a fascinating debate, but ultimately degenerated into a dispute over the definition of "go to" and "block", because the boundary is actually quite fuzzy being that hybrid structures can be created. One would probably have to settle on specific existing languages first in order to compare.

</comment><comment><USER18> GOTO [https://news.ycombinator.com/item?id=18485598](https://news.ycombinator.com/item?id=18485598)

</comment><comment><USER19> I think old style basic is very easy to learn because of goto, you can do a lot of stuff just with goto and if statements. I guess this 'goto is harmful' mantra made it much more difficult to get started with programming as you are now forced to learn more syntax before it is possible to express anything meaningful. The lack of goto has created something of an artificial barrier.

<comment><USER20> > you can do a lot of stuff just with goto and if statements

You can do _all_ stuff with goto and if, but then again, why should you? Initially it sounds simple, but as the complexity grows it becomes unmaintainable (especially when goto is unstructured, or non-local, such as the "On Error GoTo ..." statement). For some time, I had to fix hundred-line legacy VBA functions and it was _hard_ (i.e. forget trying to do it without a debbugger).

<comment><USER19> I was talking about educational programming: you still have to teach variables, expressions, assignment, a bunch of library functions, etc. etc. The job of teaching is not being made easier if you also have to add a lot of non trivial syntax on top of that.

</comment></comment></comment><comment><USER21> GNU C's cleanup attribute and nesting of procedures is better than GOTO in most of cases.

</comment><comment><USER22> For a relatively recent problem caused by use of goto: [https://en.m.wikipedia.org/?title=Goto_fail](https://en.m.wikipedia.org/?title=Goto_fail)

<comment><USER23> The problem is not caused by the use of goto though. It could have been any other statement and it would still be a bug. The problem is lack of braces or the misleading indent. If anything this example is a case for Python, not a case against goto.

<comment><USER24> > _If anything this example is a case for Python, not a case against goto._

You'd be surprised how many times I've got the indentation wrong in Python.

If a body gets > 20 lines or so, it's easy to miss one statement that ought to be intended.

<comment><USER25> _that ought to be intended._

That ought to be "indented".

<comment><USER24> Yeah, that mistake was inindented

<comment><USER25> Sometimes (like now) I wish I could give a +10 or +100 on HN! Thank you :-)</comment></comment></comment></comment></comment></comment>


Why SSDs are worth the money - <AUTHOR> http://www.boingboing.net/2011/06/17/why-ssds-are-worth-t.html

<comment><USER2> Something to consider before going the SSD route: failure rates are high right now.

The Intel X-25 series seem to be doing OK, but the Vertex2 and Vertex3 (brand new SandForce 2k-based drives) have really terrible failure rates. I've heard mixed things about the Crucial drives.

I am sure you guys have read Jeff Atwood's post[1] about how every SSD they've put into machines in the last year has failed. I shared that around with a group of friends scattered around Chicago and the bay area - the friend in Chicago has a company with 30 employees. They have put SSDs in 12 of the developer machines, by the end of the year 10 had failed (Vertex2 drives).

I think SSDs have a lot to offer, the performance is there for the right use- cases (which is almost every disk I/O scenario save for a few), but for a lot of folks the idea of having drives fail _regularly_ is a suicide-inducing though (current company included).

I'm sitting on my hands for an SSD not because I don't think they are awesome, too expensive or not big enough... I'm waiting because the failure rate seems to be painfully high in these things. I want some more time in the oven before I start sticking them in my work machines.

There also seem to be other non-failure related issues as seen with the Vertex3 launch that everyone jumped on; Lookup "Windows BSOD Vertex3"[2] for a long list of issues. At least enough to make you take pause in buying one.

I have a 11 year old Fujitsu drive that is still running, an 8 year old Seagate 15k SCSI drive that is still chugging and the two SATA's in my desktop now are both 3 years old (no RAID)... I expect 5 years out of a drive at this point, turning the speed up to 11 at the expense of digging back into my workstations or servers to replace busted drives and rebuild RAID arrays... uggggg... at least for me that sounds super painful.

The only SSDs I would consider at this point if for some reason I had to get one are the Intel series, namely the 500 series. The X-25's (as mentioned) are still going strong with low failure rates and there is nothing to suggest the newer releases are any different. I'd rather see some 5-year results from those things before pulling the trigger though, which is why I haven't yet. I also haven't needed the insane speed.

[1] [http://www.codinghorror.com/blog/2011/05/the-hot-crazy- solid...](http://www.codinghorror.com/blog/2011/05/the-hot-crazy-solid-state- drive-scale.html)

[2] [http://www.google.com/search?sourceid=chrome&ie=UTF-8...](http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=windows+bsod+vertex3&qscrl=1)

<comment><USER3> Anybody have some detailed technical insight into why the failure rate has been so high? (i.e., I can guess as well as the next guy, I'm asking for knowledge.) One of their initial promises was reliability due to not having moving parts, and, well, that sounds pretty reasonable as far as marketing copy goes. Why isn't it true?

<comment><USER4> It is a physical quality of flash memory that each flash cell has only a limited number of writes it can handle before it fails. If you want to know the dirty details, what happens is that electrons eventually get trapped in the dielectric of a flash cell and ruin everything. This cannot be fixed unless someone invents a new electron capture proof dielectric.

Flash memories use all kinds of electronics to ameliorate this problem, but in the end most they can do is try to equalize the number of writes each cell experiences, which results in the drive working at close to its full capacity for as long as possible but then failing very quickly afterwards.

<comment><USER5> If this was the failure mode experienced by most drives that fail, though, it wouldn't happen for years and even after you were no longer able to write to the drive you would still be able to read from it. This might be how the more reliable Intel or Samsung drives end up failing, but all evidence is that the failure modes of the highest performance but less reliable drives seem to be more interesting than that.

<comment><USER4> Why do you think it would not happen for years? As I mentioned in a previous post there is a trade off between price memory size and failure rate so some of the higher density memories will have much lower life than what you may be used to.

And no you would not be able to read from it. When a flash cell wears off the ability to read it degrades or disappears. Depending on the memory you still may be able to recover the data using ECC or the like, but this ability tends to disappear as large numbers of cells start dying.

</comment></comment></comment></comment></comment><comment><USER6> Amazing how many people are commenting about how SSDs don't help much. I am stunned by how long it takes to do anything on any of my computers that don't have SSDs now. IOPS matter to me.

<comment><USER7> It sounds like a bunch of people who havent experienced the difference first hand, trying to convince themselves that they dont care.

<comment><USER8> I have a laptop with SSD at work and an almost identical laptop at home, except it has a hard drive. There are unquestionably a lot of operations that the SSD makes much faster. But in normal day to day use, I can barely tell the difference. Booting is fast as hell, but how often do I reboot? I don't compile much on either machine, but neither do most normal users. I don't think the average laptop user is i/o bound most of the time (unless they're swapping, and then the solution is more RAM not an SSD).

To me, the biggest benefit SSD gives is battery life. I like that it's quieter too. But neither of those is worth the price premium. Which is why I haven't stepped up for my home machine even though I get to compare it on a daily basis.

<comment><USER9> SSDs aren't going to help you compile faster anyway... Other than network I/O, disk I/O is the slowest operation on a computer, speeding that up does speed up most operations for most people. Everyone is I/O bound all of the time.

</comment></comment></comment></comment><comment><USER10> Since I posted this link last year: <http://news.ycombinator.com/item?id=1584998> .... I've put a few DBs on SSD (Postgresql and Filemaker Pro). The real-world performance on extreme concurrent usage was been insane, ie something like a order of magnitude faster. For instance, a query on FileMaker Pro that would take up to 10 minutes on a heavily used instance (100 people accessing at one time) now takes seconds.

</comment><comment><USER11> Dropbox is an awesome way to offset the failure risk. I keep all my development projects on Dropbox, so the moment I write to disk, it's syncing with at least one other running workstation plus the Dropbox remote storage.

(The brains of my homedir are symlinked to Dropbox as well: all dot files including shell history)

<comment><USER12> A very expensive way, though? My notebooks HD is 250gb, almost filled.

<comment><USER11> Sorry to see this and respond late, but yeah, mine is pretty big too. Most of that doesn't change hour-to-hour in my use case luckily, so incremental backup to disk is good enough for the bulk. If you work mostly with code or other text, you can probably find a few folders of frequent business that fit on a small Dropbox plan and just sync those.

</comment></comment></comment><comment><USER13> If your servers were doing as much write as reads, then SSDs might not be as fast. I had (raid10) 4 intel 80gb ssd vs (raid10) 4 15k rpm scsi drives, and the scsi drives were faster with heavy innodb writes. You might wanna do some stress benchmarking before going into production if you have heavy writes. Now I'm sure the FusionIO line of drives will probably be faster than SCSI's, though I haven't tested them.

</comment><comment><USER14> High failure rate, high price, low capability, but great speeds. So the ideal setup is SSD for your OS and programs and a spinning disk for your documents?

<comment><USER15> SSD for your OS, apps and documents where speed matters backed up to your spinner.

</comment></comment><comment><USER16> here's something I'm curious to know - how often do you reboot your computer? I've got two I use daily, one has an uptime of 47 days, the other (a little macbook that spends all day on the road with me) about 32 days. They're just never off. Do people still turn their machines off?

<comment><USER17> My Macbook comes out of sleep mode almost instantaneously, so I come out of it with uptimes that are similar to yours. My PC desktop, meanwhile, gets rebooted when Windows Update demands it, so it varies.

There are workplaces where people might be rebooting daily, I don't know. I just know that at home or at work, I don't.

</comment></comment><comment><USER18> Everybody keeps talking of boot drives - and the guy in the video boots his laptop. Do you really boot often enough to make a difference?

I think I see my machine boot about 10 times when I reinstall Windows (used to be yearly 10 years ago, much less frequent now), then basically never, modulo city-wide power failures and stealthy Windows Update ninjas in the night.

Is it something peculiar to laptops, e.g. when you forget to charge them and they shutdown completely instead of sleeping?

</comment><comment><USER19> Running 3 raided SSD drives on my home workstation . . . seriously considering upgrading to one or more raided hyperOs DDR2 Ram Disk Drives. The write latency is nasty on compile time.

<comment><USER20> Curious about this, is it RAID-0 for speed or some other variant?

<comment><USER19> Raid 0, Although I've heard something or other about a larger performance gain being realized by other raid configurations.

</comment></comment></comment><comment><USER21> My Macbook Air screams. I bought a macbook pro about 1 year ago and my brand new MBA (top model) is noticeably faster. Not only boot and shutdown times but overall snappiness of the machine. The main reason for this is the SSD inside. I love it and will be installing one in my PC desktop soon enough. I can live with the high failure rate although I haven't run into any problems myself yet.

</comment><comment><USER22> I have seen the light and been converted to the Church of SSD. The expense /is/ worth it. I routinely run Windows 7 and Windows Server 2008 (running Windows Deployment Server to reimage computers at different physical locations) on my Macbook Pro via VMWare Fusion at all times (in addition to all the other random apps I have open on the Mac). I haven't noticed /any/ performance penalties day-in-day out. Compare this to my previous Macbook Pro from three years ago, which begged for mercy booting Windows XP. Sure, I have more RAM and an i7 now, but it was always disk thrashing that killed me.... that's not a problem any more.

</comment><comment><USER23> I have only good things to say about the Corsair SSD's. I'm all SSD now, and they're very fast with very good reviews for a very decent price.

</comment><comment><USER24> I recently bought from OWC to be shipped internationally. It took 32 days and arrived a DOA drive and had consistent kernel panics (even when doing an initial clone). YMMV but if you're wanting to do an SSD upgrade, get ready to take into account failures.</comment>


How Zano Raised Millions on Kickstarter and Left Most Backers with Nothing - <AUTHOR> https://medium.com/kickstarter/how-zano-raised-millions-on-kickstarter-and-left-backers-with-nearly-nothing-85c0abe4a6cb <comment><AUTHOR> From the TL; DR at the bottom

\- "Torquing did mount a serious, well-intentioned attempt to develop, manufacture, and deliver an intelligent autonomous consumer drone along the lines of their promises in the Kickstarter campaign. A seemingly dedicated staff couldn't, in any case, meet the over-ambitious deadlines and specifications."

\- "Personally, I do not believe that the creators possessed the technical or commercial competencies necessary to deliver the Zano as specified in the original campaign."

\- "Kickstarter, and other crowdfunding platforms, should reconsider the way that they deal with projects involving complex hardware, massive overfunding, or large sums of money. There should be better mechanisms to identify weak projects before they fund, as well as new processes to provide mentorship, support and expert advice to newly-funded projects."</comment>


An empirical study of working speed differences between software engineers [pdf] - <AUTHOR> http://page.mi.fu-berlin.de/prechelt/Biblio/variance_tse2000.pdf <comment><USER2> Initial implementation speed is one of the least important parameters in software engineering. Senior engineers are generally a bit slower but produce higher quality code.

It's MUCH better to have an engineer which takes 3 days to implement a feature in such a way that it doesn't need to be revised/fixed again for at least 1 year than to have an engineer which takes 4 hours to build that same feature but in such a way that the feature has to be revised 10 times by 5 different engineers within the course of the year.

The second approach actually consumes much more time in the medium and long term. By putting too much pressure on engineers to implement features quickly, you encourage them to create technical debt which another engineer will have to deal with later.

It's basically a blame-shifting strategy.

<comment><USER3> How do you explain that to companies that follow the Google interviewing model?

<comment><USER4> What do you mean by "Google interviewing model"? Are you suggesting that this is a problem at Google and companies that interview the way it does?

</comment></comment></comment><comment><USER5> I would think the speed ratio between the best and worst programmers has to be infinite. Some programmers simply cannot accomplish a task. Once they die you may as well divide by infinity.

For every task you need some minimal iq. Some tasks need higher iq than others. A programmer is someone who can at least do the least iq requiring task. He will fail on some more difficult tasks.

Iq just a standin for mental compute capacity.

<comment><USER6> Surely you must realize how ridiculous that sounds. You can build basically anything (including a kernel) by working from tutorials and starter projects, then hacking through it. Someone's solution may be extremely sub-optimal, but I've yet to see a programming task that wouldn't to googling and persistence.

Inventing Calculus was hard, but virtually anyone can learn to pass a Calculus test given enough time and incentives.

<comment><USER7> Tutorials don't cover things like corner cases, and they neglect nearly every aspect of designing and integrating a large system, particularly scaling it. Some of the worst code I've ever seen was "tutorial code."

I've encountered concurrency challenges in my day-to-day work that have no cookie cutter solutions, are specific to my application (particularly in constraints and requirements), and I haven't even been able to fully convince myself of the correctness of my own solution, let alone contrive a way of systematically proving or even testing it.

On the other hand, programmers faced with solving technical challenges such as optimizing and approximating in the face of limited resource, where heuristics and intuition only discovered and learned through experience and trial-and- error (pattern building and "finding" at its best). These meta "design patterns" aren't found in any books yet, especially because they are pretty hard to articulate using the English language.

There is an inventive element to the sort of problem solving that good programmers perform that goes well beyond pasting solutions from StackOverflow. This is why duct tape and bubble gum cobbling of out-of-the-box solutions rarely works in practice (and why good engineers are paid so well). Clever hacks are actually pretty damn clever.

It's scary how many "best practices" I've only learned through building my own production systems and having actual users test what I've coded -- having already done a fair deal of sitting in classrooms being inundated with CS theory from the very minds who conceived it -- even years of building pet projects of my own haven't prepped me for the challenges I am encountering now.

<comment><USER7> I might add that the difference between a hacked together kernel and the Linux kernel is HUGE. "Hacked together" projects are full of weird bugs, incorrect concurrent code that still works 99+% of the time but then rarely crashes and burns when that ill-anticipated failure case execution interleaving randomly strikes -- to say nothing of problematic and unrefined UX. Well-designed projects are a work of beauty.

<comment><USER8> > full of weird bugs, incorrect concurrent code that still works 99+% of the > time but then rarely crashes and burns when that ill-anticipated failure > case execution interleaving randomly strikes -- to say nothing of > problematic and unrefined UX.

That sounds like an accurate description of 95% of existent software in the world.

<comment><USER9> Closer to 99.99999999%, i would estimate.

</comment></comment></comment></comment></comment></comment><comment><USER10> In summary, the difference between "fast" programmers and "slow" programmers is not 28 (as per Grant and Sackman folklore), but more in the range 1--7. Specifically, _The work time variability tends to be larger for task type "test /debug" (SF50 = 2.4, SF25 = 3.2) and even more for "programming" (SF50 = 2.4, SF25 = 7.1) than it is for "maintain" (SF50 = 1.7, SF25 = 2.4) or for "understand" (SF50 = 1.8, SF25 = 2.9). Task type "review" is special. It exhibits both low variability (SF50 = 1.1, SF25 = 1.3) and low skewness._

<comment><USER11> It also say this:

"Thus, if we ignore the most extreme cases, the differences between the slowest and the fastest individuals are by far not as dramatic as the 28:1 figure suggests"

Why would you ignore the most extreme cases?

</comment></comment><comment><USER12> I want to start the "Slow Code" movement after the slow food movement. Yesterday at a clients code base I was under pressure to fix a thing, and the obvious approach was adding gobs more code, quickly implementing the most obvious route.

And after a (inordinately long) time reading, the light bulb moment happened and I added a single line of code.

In my view, when you are in the business of making Seven-League Boots, you don't need to sprint.

Yes we want to deliver products quickly, but the link between good products, effective business and speed of code writing is tenuous at best. Take your time, line up your shots, and be sure you are a value multiplier. (That's the real 10x programmer. 10x as valuable. That might mean using good SEO techniques to get paying customers, but using boring old SQL back ends)

(Link to the years old article I have not written yet, comments welcome [http://www.mikadosoftware.com/articles/slowcodemovement](http://www.mikadosoftware.com/articles/slowcodemovement))

<comment><USER13> That's so true. The 10x programmers are those that make everyone else's work faster and more accurate.

To me the main job of a lead dev is setting up all the boring processes of build scripts, continuous deployment, package libraries, testing environments etc., that make the other developer's jobs easier.

</comment></comment><comment><USER14> I suspect that the most important difference between great and typical engineers is that the great ones make a better product, not that they make it faster. If my hunch is correct, worrying about concepts like "10x" is missing the point.

<comment><USER15> I'm not saying anything about you here, but I feel like this is what a typical engineer would like to believe to make themselves feel better, but getting things done faster leaves more time for doing them better. Once you're at that stage, it's a simple matter of discipline.

<comment><USER16> > getting things done faster leaves more time for doing them better

It's the other way around. If you take the time to do things better, then you build up momentum and make future work easier. If you want to improve productivity, slow down and do things right, consistently. It'll pay off in the long run.

<comment><USER17> One example of this I see all the time. You need some new functionality, but altering database tables is a pain in the arse, compared to adding more code. So you add more code. Rinse repeat until you have an unwieldy mess of code. Changing the database model would have been more difficult initially but its often worth the effort.

</comment></comment></comment></comment><comment><USER18> I think they still found a large difference between the best and worst developers. Another summary (quotes that I can't seem to format):

The main findings from this investigation of the dataset variance.data can be summarized as follows:

      The interpersonal variability in working time is rather dif- ferent for different types of tasks.

      More robust than comparing the slowest to the fastest in- dividual is a comparison of, for example, the slowest to the fastest quarter (precisely: the medians of the quarters) of the subjects, called S F   .

      The ratio of slowest versus fastest quarter is rarely larger than 4:1, even for task types with high variability. Typ- ical ratios are in the range 2:1 to 3:1. The data from the Grant/Sackman experiment (with values up to 8:1) is rather unusual in comparison.

      Caveat: Maybe most experiments represented in variance.data underestimate the realistic interper- sonal variability somewhat, because in practical contexts the population of software engineering staff will often be more inhomogeneous than the populations (typically CS students) used in most experiments.

      Still only little is known about the shape of working time distributions. However, variance.data exhibits a clear trend towards positive skewness for task types with large variability.

      The effect size (relative difference of the work time group means) is very different from one experiment to the next. The median is about 14%.

      The oft-cited ratio of 28:1 for slowest to fastest work time in the Grant/Sackman experiment is plain wrong. The cor- rect value is 14:1.

</comment><comment><USER19> "The ratio of slowest versus fastest quarter is rarely larger than 4:1, even for task types with high variability. Typical ratios are in the range 2:1 to 3:1. The data from the Grant/Sackman experiment (with values up to 8:1) is rather unusual in comparison."

<comment><USER20> Even if it isn't the mythical 10x ratio, hiring somebody that can do 3 times more than the next person is a no-brainer. Although I honestly wonder if that baseline is dragged down so hard by all the people that really can't do the job they are supposed to be doing. Programming is hard, and doing it well is even harder. "Everyone can code" movements are great propaganda, but I'll be honest, I've never known anybody that actually could code who wasn't a couple of standard deviations smarter than the average Joe or Jane.

<comment><USER21> I'm much slower these days than I used to be, and it's because I'm bored. That I need to do my work with a web browser, usually necessarily with internet access doesn't help.

<comment><USER22> For the last year I've been working on a project that has a complex toolchain, such that every time I hit cmd-s I have to wait 2-5 seconds before I can reload the browser to see the changes. It's remarkable how easily I can get distracted in that short interval, especially if I experience it dozens of times per day.

For the last couple days I've been doing Project Euler with Ruby and the lack of lag time translates into much better focus.

</comment></comment></comment></comment><comment><USER23> The Grant Sackman experiment, often quoted, rarely reproduced.

To «prove» a 10x programmer existence you would need a bi-modal repartition on the percentile of workers/speed.

The grant sackman/peopleware/The Mythical Man Month all try to answer a question that is tricky : what makes someone creative productive?

People focus on the speed. But they are just forgetting the most important part of the experiment.

One of the most important part of G/S experiment that everybody forget is the lack of correlation between performance and

1) diploma

2) experience after 2 years of practice.

Having done more than one job, other fields of works that are also creativity based, the «feeling» was that it is not only about coders but musicians, intellectual professions, journalists, project manager...

What are the implication of the lack of relation between diploma and experience?

1) Diploma are overpriced, the job market is artificially skewed in favor of those who have the money for it;

2) New devs are underpaid, old devs overpaid.

The burden of the proof that a diploma/experience is relevant for a job should be in the hand of the one selling diploma. Diploma especially in computer science seems to be a SCAM

The effect of this scam is :

1) young workers enslaved by loans in jobs they may not be good at/liking;

2) a rigid job market that prevent people from moving hence artificially creating difficulties to have full employment

3) an artificial exacerbated competition resulting in cheating from both sides.

</comment><comment><USER24> I'm pretty sure that I'm a "slow" developer. Not in terms of actually coming up with the core fix to a problem that I'm working on (that's actually the most straightforward part of any project) but everything else that follows. That is to say writing clean, well-tested, documented and maintainable code. Is this something to be concerned about long-term or should I just accept that my work will always take a little longer to complete than my fellow developers?

<comment><USER25> Find fast people to pair program with. You'll learn some good speedup techniques.

<comment><USER26> This is really a fantastic suggestion! Pair programming can't be advocated enough. I used to think it was stupid many years ago, and then I made friends with a guy who'd been programming longer than I'd been alive. We'd both stay late and shared an office, and in the evenings he started mentoring me, and we'd pair program. I think there is _no_ better way for bringing programmers up to speed (whether junior-senior or slow-fast or new-old or whatever). Also, having tried a variety of interviewing techniques, I find pair programming to have one of the highest concentrations of useful information about a candidate. Work sample being another.

<comment><USER25> Are you not allowed to pair during the day?

<comment><USER26> Well, this was years ago, and we were working on different tasks during the workday. It started with me asking questions and him showing me how to do something that ended up being pair programming. Like many workplaces, there wasn't much time for teaching moments during the workday.

</comment></comment></comment></comment></comment><comment><USER27> From the article:

> [] Three of the twelve subjects did not use the recommended high-level > language JTS for solving the task, but rather programmed in assembly > language instead. Two of these three in fact required the longest working > times of all subjects. One might argue that the decision for using assembly > is part of the individual differences, but presumably most programmers would > not agree that doing the program in assembly is the same task as doing it in > a high-level language.

In my experience, making the right decisions like that is the real difference between good and not so good programmers. Good programmers do on average better choices that results in less code, code that is easier to maintain and reason about, and choosing language and architecture that fit the problem at hand. It is not that good programmers develop so much faster usually.

</comment><comment><USER28> It would be interesting to have biographical sketches of the best and worst developer in this study.

</comment><comment><USER29> I have a feeling that implementation speed is an instance of Goodhart's Law ([https://en.wikipedia.org/wiki/Goodhart%27s_law](https://en.wikipedia.org/wiki/Goodhart%27s_law)). If you keep everything constant (code quality, amount of tests, documentation, etc) then a faster engineer is obviously better. However, if you start using speed as a criteria to judge engineers, then the easiest way to increase speed is to sacrifice things which make code maintainable and modular.

Finding metrics which work well even when people try to game them is incredibly difficult (if not impossible).

</comment><comment><USER30> I think that this test is only indicative, and the long time real world ratio is much higher.

Inefficient and complicated solutions build up and the mediocre developer ends up fixing old problems.

(slow is just an indication of mediocre)

Unfortunately the long term effects are not visible until after a long time (duh), hiding the individual differences.

</comment><comment><USER31> (2000)</comment>


Ask HN: What web/desktop apps do you use to manage your startup? - <AUTHOR>

What set of utilities and services (online or offline) do you use to manage your startup? There are obviously many possible needs, like book-keeping, private and secure sharing and backing up of files, communication between co-founders and partners, customer care and ticket handling, etc... I'm not clueless about these subjects, but I'd like to hear what the HN community recommends. <comment><USER2>
      Planning: VIM
      Blogging: VIM
      E-mail:   VIM
      Coding:   VIM
      Finances: VIM
      VCS: Git .. with comments edited in VIM ;)

<comment><USER3> Out of curiosity, how do you do your email and finances from Vim? Is there an awesome email plugin for vim that I don't know about =]

<comment><USER4> Have you seen this:

<http://vimperator.org>

</comment></comment></comment><comment><USER5> Planning: Pivotal Tracker.

Finance: Kashflow.

Todos: Basecamp.

SVN: Beanstalk.

Tickets: Zendesk.

Files [internal, collaboration & sharing]: Dropbox.

Email: Google Docs.

</comment><comment><USER6> This wiki was created to list what tools are used by which startups. <http://startuptools.pbworks.com/>

</comment><comment><USER7> Github, Campfire & Basecamp, and Google Apps for Domains.

</comment><comment><USER8> In no particular order:

Bitbucket (mercurial hosting), Gmail, Komodo Edit, Dropbox, Gtalk, Zoho Docs

For the record I know Komodo isnt really "management" but as it's the most crucial part of my workflow.... :)

</comment><comment><USER9> PM: Basecamp

Finance: OSX Numbers

Billing: iBiz

Files/Hybrid SVN: Dropbox

External Com: OtherInbox.com

Internal Com: GTalk, Skype, iChat, etc.

Documents: OSX Pages and Google Docs

</comment><comment><USER10> Just to mention, Microsoft office offers some pretty nifty services in this regard. Check out Office Live Small Business. You get a workspace with 5Gb of file storage. You can view docs, ppts right in the browser and with a plugin you can edit them right on your desktop MS office.

There's also Live Mesh service (seperate 5 GB) that allows you to sync files across different computers. You can use it as a documentation, file sharing tool. .

.

.

We have a Team of 5. We started with a google based solution for now.

Conference Calls: Skype 3$ accounts(to dial into US) + <http://www.freeconference.com/>

Mailing List: Google Groups

Collaboration: Google Docs

Scheduling: Google Calendar

Project Mgmt: Google Sites (with different task list), with widgets showing our docs + calendars on google services.

Files: Google groups has 100 MB, so does Sites.

VCS: git/svn on pvt server.

</comment><comment><USER11> Do we seriously have to re-ask this question every few weeks?!

<http://www.gabrielweinberg.com/startupswiki/Ask_YC_Archive>

</comment><comment><USER12> I'm not happy with my mix yet, and spend too much time trying out new things. Here's what I'm currently using:

PM: Google notebook, Google calendar, "Stickies app" (Tomboy)

Finance: _sigh_ still looking

Files: Dropbox

Communications: GMail, Skype (NOT Twitter)

Documents: Mix Google Docs & OpenOffice. I've started using Etherpad quite a bit as well.

Invoicing & Billing: Still looking for something that fits my needs, Spreadsheets & Docs for now

Source code: Local SNV server, thinking about Github

<comment><USER13> Give a try on CurdBee (<http://curdbee.com>) for invoicing and billing. It would fit perfectly for your startup if you are looking for a smart and low cost solution (you can start using it for Free!)

</comment></comment><comment><USER14> A couple of FREE products I would recommend are:

Simply Accounting First Step Express for accounting <http://www.simplyaccounting.com/downloads/firststep/express/>

and

Billing Boss for invoicing <http://www.billingboss.com/>

</comment><comment><USER15> I am a single programmer startup. Still working on my website.

TortoiseSVN (source control) is the only thing I am using as of now.

I have a to-do.txt in my desktop to remind me of what next. I use Gmail to communicate and StackOverflow to get help. Since I haven't completed building my application, I never needed other services to manage the work.

</comment><comment><USER16> As a freelancer:

Misc: Backpack

Project proposals: Writeboard

Invoicing: Freshbooks

Source control: Github

Bugs: Redmine and Pivotal Tracker

Other docs: Google Docs

To dos: Things

Files: Dropbox

<comment><USER17> As a freelancer :

Project management : BaseCamp

Personnal GTD improvement : RescueTime

Invoices & estimates : Freshbooks

Accounting : my accountant uses Simply Accounting (Windows app on my vmware box)

Files : dropbox

Source control : Git on RepositoryHosting.com (6$/month and i can manage any number of SVN/Git repositories. And it just works)

Synch iCal with google calendar

Synch contacts with Plaxo

<comment><USER18> Thanks for the tip on RepositoryHosting :-)

Their price rocks.

</comment></comment></comment><comment><USER19> Book-keeping: Saasu Issue/Bug Tracking: Lighthouse SVN hosting: Beanstalk Backups: Amazon S3 Site Monitoring: Pingdom

All of which I'd recommend - Saasu especially if you're based in Australia.

</comment><comment><USER20> Project management: Trac Versioning: SVN/Trac Monitoring: Nagios, Pingdom Support: Get Satisfaction Newsletters: Campaign Monitor Communication: Gtalk, Email

</comment><comment><USER21> We use <http://www.helpspot.com>

</comment><comment><USER22> Pivitol Tracker, Harvest, Google Apps for Domain.

</comment><comment><USER23> Jira & FishEye.</comment>


Techcrunch comes to India - <AUTHOR> http://www.techcrunch-india.com/

<comment><USER2> This is fake , seems like a link bait , better to avoid.</comment>


Ask HN: Legal startup pre-incorporation document resources? - <AUTHOR>

Can you point me? I would like to get some ideas about forming contracts with people that will help me but their status as co-founder or adviser or freelance paid hourly is not crustal clear. I intend to incorporate later. <comment><USER2> I suggest that you search for examples on websites like [http://www.docracy.com/](http://www.docracy.com/). Be aware that laws vary by country, state, province, etc., so make sure you speak with a lawyer.

<comment><AUTHOR> That was _precisely_ what I was looking for!!!!

<comment><USER2> What other resources have you been using?</comment></comment></comment>


The year of the disappearing websites - <AUTHOR> http://blog.nuclearsecrecy.com/2013/12/27/year-disappearing-websites/

<comment><USER2> I wonder governments shouldn't have the duty to regroup all those website and host them somewhere? Something like archives.org for governemental websites.

<comment><AUTHOR> I think governments can, and _will_ , argue that this kind of maintenance is outside of their budget and abilities. Given debacles like the Healthcare.gov website, they're continuing to make a strong case for that.

<comment><USER2> You have a point. Nonetheless, this kind of information should be thought as the same thing as books in library, and governments do have the budget for libraries. It could very well be a matter of time and perspective.</comment></comment></comment>


Why Finding Technical Cofounders Is Hard - <AUTHOR> http://rob.by/2010/finding-technical-cofounders-is-hard/

<comment><USER2> Does anyone have any advice for finding and attracting a technical cofounder? As a hacker, what would you look for in a startup where you take the lead technical role and build most of the product?

I would consider myself a hacker, but I'm not very good at writing code(I only know PHP) and I don't enjoy it. I prefer to work on marketing/bizdev problems, which are my areas of expertise.

How do I avoid getting dismissed as just another "business guy"/suit by hackers?

<comment><USER3> Well. What _do_ you bring to the table?

Edit: I ask not because I want to be impertinent, but because no one here is going to make you a successful cofounder. Think about what it is that makes you want to be involved in a startup, and what you think your role would be. I find that thinking about that sort of thing both helps you figure how stuff works, and where you are in relationship to that.

<comment><USER2> As mentioned above I(and, I imagine, many business cofounders) would bring marketing, monetization, and bizdev. This isn't vague writing a business plan strategy stuff, but rather concrete steps to take a startup from a side project to a business where you put in $X and get $2X back- in other words, the exact thing investors are looking for.

The problem I've seen is that many hackers view the above "softer" skills as insignificant bullshit compared to actually building something.

I'm asking for ways to overcome this misconception and present myself as equally valuable as a coder in an early startup team.

<comment><USER4> Don't talk generalities, talk particulars. Don't say "monetization", say "I've surveyed customers and they will pay $40/month for this".

<comment><USER5> Even that is pretty thin stuff. How long does it take to survey people, or come up with a business model that will likely change a few times over? The cofounders should be honest and ask how they are going to help push this boulder over this hill. That means getting hands dirty and pushing, not dreaming up strategy, marketing ideas, and other things that can't help get a product out the door.

</comment></comment></comment></comment></comment><comment><USER6> Maybe these people are looking in the wrong place, or for the wrong person. If you want to hire me, here's how.

I'd love to be part of a startup, but I have a family and a day job that I can't quit easily. I'm sure I'm not the only one.

I'd be willing to work on a project with the goal of making money with a non- technical co-founder, given the understanding that I'd be working on the project in my free time at night.

If you're a "business" guy then you could provide me with the continuity to ensure the project gets off the ground. You could do customer service. You could market the product. If you do your part, then eventually I could quit my day job and we're both all in.

If you want to accept the financial risk while I do all of the technical work for the initial few months, I think that's a fair trade.

Plenty of people want to do this, but the risk is too great. Make that risk smaller and you've got a partner.

</comment><comment><USER7> This is a nonsense discussion. Finding a cofounder is hard because everybody is looking for a cofounder. Nobody wants to be a cofounder in a social news site like Hacker News.

Is there anybody who wants to be a cofounder?

I think a good approach to find a cofounder is to look for someone who is solving a similar problem on your startup's industry or just a similar problem in the academic field, for example.

<comment><USER8> _This is a nonsense discussion. Finding a cofounder is hard because everybody is looking for a cofounder._

If that's the case, I would think it would be easy to find a match, not unlike drunk college kids looking to hook up (but hopefully a little more discerning in this scenario).</comment></comment>