Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How to see a piece of hackage through from start to finish?
32 points by igravious on Nov 4, 2010 | hide | past | favorite | 40 comments
Hi there like-minded souls,

I taught myself to code in C at a young age. I am very much an auto-didact and everything I know about software development comes from learning on the job and through my own curiosity (I have Compilers ... by Aho et al. staring at from the bookshelf as we speak), not from a comp-sci higher level education. In fact, I have a degree in philosophy and mathematics.

I have a ton of ideas that I'd love to pursue. Ideas in electronic poetry, and idea for a wysiwig live web-page builder, an idea for a syntactically extensible functional programming language. An idea for an anti-social networking site. But I never get anywhere with them. I'm always tinkering but never crafting. I always find some excuse to drop one thing and start another. I've taught myself Ruby on Rails a few years ago because PHP was getting me down and though I've been keeping myself up to date with jQuery and now Rails 3 I have never completed a website in it!

I would love some advice. But moreover I think I just need to get this off my chest so thanks for listening.

How do I choose one set of technologies (and stick with them) and learn them inside and out? How do I choose a project that will reward me intellectually and financially? and most importantly how do I get myself to stick at one thing from start to finish?

Now where was that Haskell tutorial ...




Stop making excuses and ship something. Do arbitrary deadlines do it for you? A few of us are shooting for the end of November. Build a business this month, ship to customers at the end, support as required. Cut scope to the smallest thing worth money, but ship. Settle for a good implementation over a perfect one, but ship. Have regrets, but ship. Create technical debt, but ship.

(You have 28 days or so left, which is the original schedule for BCC plus twenty days.)


I love the "ship it" mantra. Great idea to keep focus.

One thing you mention though resonates. You mention perfection. What is it they say? Perfect is the enemy of the good? I really dislike the work of the dilettante or amateur, my ideals are set pretty high and I see myself failing to meet my own exacting standards and this cripples me productively. Also I am a very indecisive person, plagued with doubt. This is great in that I make up my own mind about a lot of things and I don't fall prey to herd-think but it again is a bit of a productivity killer as I flit from technology to technology and methodology to methodology. For instance I've gone from DOS/Windows to Linux fanboy to Mac owner and from C and C++ to the LAMP stack to Ruby on Rails and from nothing to SVN to Git. It's exciting but tiring and their isn't a project out there that I can call my own and there's a directory full of half-baked ideas and scraps of code in ~/Code


"Do the simplest thing that could possibly work" - then move on to the next thing. This is going to be painful for you to not stay to "perfect" it (it will take some courage) but bear in mind the following:

It's surprising how often the extra bits you were worried about turn out to not actually occur, once you've learnt more from the initial version, you've understood it better and therefore designed a better approach.

The first version is to understand the problem. The next version (a rewrite) is to understand the solution. Call them "exploratory drafts" if you like.


I can't support the arbitrary deadlines trick enough. I've set a deadline for the end of November for the project I'm working on. Consequently, I've been getting up an hour earlier every day to work on it, and then working an hour after work on it as well. The feeling of a pressing deadline forces me to get something out, instead of nothing at all. It also helps me with pushing past the "should I use this tool or this tool" problems.


"Shipping is a feature. A really important feature. Your product must have it."

http://www.joelonsoftware.com/items/2009/09/23.html


I agree.

This question comes up in different forms time and time again and the answers are almost always the same: Just do it. The only thing stopping you doing it is you so stop procrastinating and get on with it or just admit you're actually not that bothered / committed / whatever.


I've been following this site for a while and I've been paying attention. I haven't seen this specific question put in exactly this way. I'll have another root around though, thx! The whole thing kind of depresses me because at the moment I don't even have a job in IT, I've returned to university to get a master in humanities - digital culture studies in fact so it's not like I've left the tech world completely behind me. I couldn't succeed in the corporate world either as an employee or freelance. I would love to have some kind of part-time paying gig to supplement my income of 0 but my inability to do stuff for myself with just my dreams and desires as motivation is letting me down once again. I'm letting myself down once again. Don't get me wrong, this is not a Oh woe is me sob story, I'm doing okay, I know I could do better cuz I've got the smarts...


My father told me to be really smart. When I was a child I read volumes and volumes of histories of the united states, children's encyclopedias, regular encyclopedias, dictionaries, etc, etc. At some point the reading has to end. The learning has to end. You have to do it.

Also, smarts don't matter. You can be the smartest person in the world, but until you do it. It doesn't matter, because you're just like the kid who hasn't read it all. Stop being a theorist and start being the guy in the arena[1].

[1] http://www.theodore-roosevelt.com/trsorbonnespeech.html


well, these guys are giving the right advice. Doing it is the fastest way to succeed, even if it is a small step.


Who's going for the end of November? I'm building a new business right now and I'm aiming to ship it before the end of November. I have my MVP live already (landing page & pricing page), and I'm collecting some metrics which are showing promise so far, so now I'm working away on the actual product. I'll likely do a Show HN sometime soon to get some awesome feedback.

Love the idea of sharing and aiming for this target with others, bringing in accountability. Let me know how I can get in touch.


My brother is the Tuba chair with the Winnipeg Symphony. His rule is pure simplicity: "Pick up the instrument very day." Of course he devotes a lot of time to practicing, studying, he drives hundreds of miles to take master classes from expert teachers.

But underlying it all... Pick up the instrument every day. I think Paul Graham made a similar point about startups failing: That success was built on the foundation of not dying, of not stopping. It's far better to have an organized plan, to use Pivotal Tracker, to have a clearly articulated question you are trying to answer...

But if you do something every day, at least you won't come to a complete halt. So do something, no matter how small, every day.


I have heard that same idea applied to the likes of Jordan or Jay-Z. Be out there taking shots from the foul line or write a 16 every day.

I haven't figured out how to translate that to writing code or building a product. What would it be: Write a for-loop everyday on some code kata type stuff? Write down a business idea once a day?


Work on the next feature every day.


While I do think "stop making excuses and just ship" is correct advice, I'm not sure how useful it is to you.

You sound like you have a procrastination and/or executive function problem. I highly recommend reading a book called Procrastination [1]. The first step in changing your behavior is understanding why your behavior is the way it is. This is not a self-helpy book; it is written by two clinical psychologists relying on their lab work, patient work, and a wide breadth of historical research on the subject.

From the product page: "Based on their workshops and counseling experience, psychologists Jane B. Burka and Lenora M. Yuen offer a probing, sensitive, and at times humorous look at a problem that affects everyone: students and scientists, secretaries and executives, homemakers and salespeople. Procrastination identifies the reasons we put off tasks—fears of failure, success, control, separation, and attachment—and their roots in our childhood and adult experiences. The authors offer a practical, tested program to overcome procrastination by achieving set goals, managing time, enlisting support, and handling stress. Burka and Yuen even provide tips on living and working with the procrastinators you may know. Wise, effective, and easy to use, this new edition shows why for 25 years Procrastination has been an immediate must-have for anyone who puts things off until tomorrow."

[1] http://www.amazon.com/Procrastination-Why-You-What-About/dp/...


> http://www.amazon.com/Procrastination-Why-You-What-About/dp/...

Yeah that looks really great. I've bookmarked it. I'll check it out soon. Maybe tomorrow ...


Get a job at a small-to-medium sized startup. You will learn whatever technology you use ridiculously well, by necessity, because you're responsible for shipping the feature; and you will be forced to finish the hell out of whatever you're working on at that moment, by necessity, because it's a _small_ business; and you will need to understand the underlying code all the way through to the fancy polish and fixing of niggling minor bugs that QA finds, by necessity, because you're making a product. These things are all necessary because this is your job; that's your motivation to finish.

If you're stuck tinkering it might be best to get a real job for a year or two so you can learn to finish. Then when you start a startup you won't have to learn that particular lesson the hard way.

[Edit: reduce ambiguity]


Most smallish startups want to see a solid portfolio of projects and/or open source contributions.

I have similar problems to the OP, and don't have much of a portfolio. What I do have is boring stuff from my day job (the small amount I can share).

I desperately want to start my own venture or work for a small, early stage startup. And after seeing the HeyZap job ads yesterday, I got inspired. I planned out a small web app project for this weekend. I will have something launched by Monday morning, or else (I'm not sure what the `else` is, but it'll be bad).


Good for you. (You're right about your initial assessment - coding for a monthly paycheck is not the issue here as being my own boss through the lean times and seeing stuff through from conception to the drawing board and beyond.)


Sounds like you love tools. Remember that if you don't want to become a tool yourself, you need to tie your identity up with shipping a product more than with using any particular toolset.

EDIT: I do too! We can all use a reminder like this at some point or another....


I have this problem, too: I get excited by new ideas and the early stages of implementing them are pure joy.

Then, invariably, some of the details create unexpected problems, and I feel like I'm stuck on some tangential issue, far from the original concept.

What works for me is to focus on one small, specific aspect of your code: it could be a function or feature, but forget about everything else and get it done.

Do the same same for the next logical piece, and before long, you've gotten out of the rut.

Good luck.


> some of the details create unexpected problems

I get stumped on issues that crop up along the way, can't figure them out, don't no how to ask for help. I think that my projects are too special to reveal details about even though I eventually would release the code for every single one of them. I get disheartened far too easily, put the task down saying that I'll come back to it and then six months goes by and I've forgotten the details and it takes me ages to get back up to speed.


1. Try to express the problem as a question (sometimes that's enough to reveal the solution)

2. Google the question exactly as is (surprisingly often this works)

3. Ask your question at http://stackoverflow.com (actually, open an account right now, so it's ready for when you need it).


There are always places you can get help online: comp.lang.* is still pretty good (depending on the specific language), and sites like StackOverflow usually have good advice.


Same here, and another good motivator for me was also to be very, very sure to commit your changes very often.

Sometimes when I get really overpowered by one of these problems I tend to throw that out the window and it adds to my frustration in the end.

It's hard to tell yourself you didn't accomplish anything, when over the course of the evening you've got a couple dozen commits to show for it. Also it reduces any trepidation you have about getting in there and making a change, because you can easily roll back to where you were 5 or 10 minutes ago.


Dear igravious,

We're so much alike, it's scary. I, too, studied philosophy and math. I, too, am currently pursuing grad studies in the humanities (in my case, a philosophy PhD program). I, too, am a mostly self-taught programmer. And I, too, suffer from being unable to finish programming projects.

(I say this because I don't have a whole lot of advice to offer, but I am glad you asked the question, and I will eagerly follow the answers that others post. I wonder how many others like us there are here on HN?)

In addition to what others have said about setting arbitrary deadlines for yourself, here are a few ideas:

1) Get a job that has involves doing some programming. It doesn't have to be at a startup. Since you are in academia, a good place to look would be in labs. (I used to work in a psych lab, myself -- psychologists seem more willing to hire people with philosophy degrees.) I don't know what your research is on, but if there's a way you could connect it with empirical studies, there are probably many labs that would give you a chance to work on it in exchange for working in the lab. And labs always need better programmers. (My guess is that, if you have any sense of code aesthetics, you will be shocked and horrified by the code you find in any working lab. The effort involved in debugging it will be motivation enough to write your own, improved version.)

2) Become reliant on one or a few pieces of Free software. (For me, these are Emacs and Org Mode.) If they are totally indispensable to how you work, you'll notice problems more frequently, and you'll be motivated to fix those problems -- all the way to the end. Lots of people say, "if you want to learn to code, work on an open source project," but for me, that's hard advice to follow in the abstract. It's much easier to follow through when I know the fix will actually help me solve a problem.


Dear rwl,

Wow. A clone of me floating in cyberspace. You know I used to get funny looks from my philosophy classmates when I answered their question, "so what's your other subject?" (you take two subjects at degree level where I'm from). Nearly everybody combines philosophy and literature or philosophy and sociology or philosophy psychology, you get the idea. But math? What has philosophy go to do with math? I dunno, ask Bertrand Russel. Ask Frege. Ask Descartes. Ask Leibniz. :) And then I'd tell them that I used to work in IT as a software tester and developer and they'd look at me as if I had two heads. In some parts of the world this is considered a lot stranger than other parts. In Spain (where I've had the good fortune to have lived) people think you are _really strange_ if you study one discipline and work at something else. You get less funny looks in northern Europe.

I wonder what your PhD program is? I'm pursuing a Master (in Digital Culture as I mentioned elsewhere here) at the moment. For my thesis I'm combining my love of IT and math and philosophy by researching open source (free software I mean) mathematical tools. Like Richard Stallman I see free software as an ethical issue, which is how I rope philosophy into it :) For my Bachelor's degree I wrote a paper on the philosophy of the infinitesimal calculus and intuitionism! So I always manage to draw together the various intellectual pieces that make up the puzzle of ... whatever the puzzle is. Right now what gets me very excited is intuitionistic type theory and the Curry-Howard correspondence because again this area of logic/epistemology can be looked at through comp-sci glasses, philosophical glasses and mathematical glasses.

I realize all this is totally unrelated to my original question - apologies to all for that but it's not everyday one meets one's clone in cyberspace.


I wonder what your PhD program is?

Well, I haven't got a specific focus or dissertation topic yet. (Not sure how it works in Europe, but here in the U.S., a Ph.D. typically involves doing coursework first, which is where I'm at.) But I will probably do something in philosophy of language and/or philosophical logic.

Like Richard Stallman I see free software as an ethical issue, which is how I rope philosophy into it

Me too. So far, I haven't had a whole lot of luck convincing other philosophers that there is an ethical issue to be examined, though. Mostly, they see me as getting inexplicably cranky due to my esoteric interests...

For my Bachelor's degree I wrote a paper on the philosophy of the infinitesimal calculus and intuitionism! ... Right now what gets me very excited is intuitionistic type theory and the Curry-Howard correspondence

Sounds fascinating. I have been thinking about intuitionism a bit lately too. I'm on the fence: classical logic clearly proves too much; but doesn't intuitionism prove too little? :)


Sorry for the late reply.

I think (but am not 100% sure) that by the time your PhD comes around you have all your coursework out of the way and only attend department seminars for PhD candidates, post-docs, professors and the like.

I'll send my research into the matter as it goes forward where I take a proper look at the ethical nature of free software. It's not just some philosophers and programmers and business managers who don't see it as an ethical issue. But this is the case for a lot of social conventions that aren't widespread, like vegetarianism.

"classical logic clearly proves too much; but doesn't intuitionism prove too little?"

I've never seen the difference formulated like this. But I see what you mean. Intuitionism restricts your proofs (in mathematics anyhow) to constructive proofs so, for instance, proof by contradiction is generally not permissible. But my feeling is that classical proofs don't tell you very much. For finite models they both work, where potential infinities (or stuff with recursive properties) are involved I feel that intuitionism stops you coming to needlessly silly conclusions. Sorry if this is all a bit vague. I'd have to show you what I mean by addressing it to a particular area.


I definitely have this problem, but it is not intractable.

My advice: plan more. Don't just jump in. I know "ship" sounds like you should just jump in. But it doesn't. It means plan, execute, and ship.

Planning means thinking about what the smallest, simplest, easiest path from where you are now to shipment is. Execute means doing it according to plan. Shipping just means put it out there whether you like it or not.

It's so easy to tinker and get lost in a project, especially if you like it. That always gets me. But when I plan it, I have focus. And I usually see that it's not that much work to just pull it all together.

Sure, lots of features get left out, but I'll get to them when I have time. But at least I ship something in the meantime.

To toot my own horn a little: http://www.lispcast.com/software-engineering/how-to-write-so...


You are fighting a losing battle. Drive and focus are either an integral part of who you are, or they aren't. Enjoy tinkering around, but you should adjust your expectations on the outcome. I know and work with lots of 'dabblers'. They are nice people, but don't have any understanding of what goes into mastering something. Same holds true for musical instruments. Lots of people 'dream' of playing, but have no clue how many thousands of times you have to repeat hand movements and listening until you rise above that and can work on the 'music'. Countless hours, constant trade-offs, and arguably abnormal mental faculties are required.


If you have a ton of ideas and they're all, for the most part, general, vague, novel, and abstract, practice prototyping. Make it really dirty, don't over-think it, and keep a closed-mind while in the beginning stages of a project; IOW, don't pre-optimize your project by recursively worrying about other edge cases, write for a single case and get something on the screen.

Given your background, I'd scratch all these "big picture" or "overly ambitious" ideas and return to a domain you're more confident in, pick something (axiom, rule, theorem, etc.) specific, and see if you can express or simulate an example of the "thing" in action.


You need to wear the project manager and developer hat but at different times. Using a tool like Pivotal tracker really helps. Let me explain why.

For me the real problem is that when I am done with a task and don't know what to work on next, I tend to lose steam. If you have enough work lined up for a week, you will probably keep going. If you stop to think about what to do next after every small task, you will have a tough time keeping up the momentum.


Pivotal tracker. I'll check it out. Thanks. I've used Trac for different commercial projects and tried out BaseCamp. but I think you already need to be a bit organized to use these tools in the first place.


Choose tools that are part of the world you want to be in. Choose culture, not tech. You will help change the world in that direction.

http://wingolog.org/archives/2008/07/10/how-to-choose-betwee...


This is very interesting, though somewhat tangential to the specific problem I am giving voice to. That being said, the master thesis I have set for myself is exploring the use of open source tools used by mathematicians so the blog post you have referred me to is surprisingly relevant to a different part of my life so _thank you_ :)


My problem always is that I care way too much about the quality of my code, and that wastes way too much time for me to get anything done. My other problem is that I need to write quality code, otherwise there is no point for me doing anything in software. I'm retarded, I know.


“Master your instrument, Master the music, and then forget all that bullshit and just play.”

-- Charlie Parker


I'm in exactly the same boat with you here. I always try something and keep asking myself if this is the right way to do it. And then I put it off for a couple days pondering over it and essentially never go back...


I hear you and I'm sorry to hear that. A (naughty) little part of me is happy that I'm not alone in this boat, maybe the answer given here can help you as much as me? Chin up :)


I'm on the same boat as you. One minute I'm working on my website, the next minute I'm doing Processing/Python/etc. tutorials. And soon after I'm designing other stuff.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: