Especially in this Ludum Dare case, development practices or implementation details do not matter as much as results. And he did get results. That's why it was interesting. I'd like to hear of what you think was wrong and why? This was his show of productivity and results. Other people have other ways and other circumstances can be completely different. And should be different.
HN user
Markku
I learned some things too. However, even if you have a tiny piece of software, like a game that you can reliably complete manually in 20 minutes, completely playing it through after every change is way too slow for "live coding". You should see your results instantly. Just like your test suite should run in seconds. If you have to wait minutes to compile, deploy and test your productivity will fall. A full integration/acceptance test suite can take longer, but it should be as automatic as possible and you can't use it for rapid feedback like this, but more for regression/acceptance testing.
Notch was able to take advantage of immediate feedback for the most part of his coding. The first hours spent on the rendering was tested by watching the world being rendered live. I've been doing the same developing a game in Clojure. When he got as far as the gameplay, he slowed down considerably, since he had to wander around in the game world to test each new feature. He for example made temporary shortcut passages, so he was able to test the boss monsters, without actually having to pass through the levels.
He is a person who can concentrate on delivering results and hack away at code for long stretches. This is the kind of code he presumably has done again and again for years. Who professional web developer can't hack together a small site as quickly? Where most people fail is attention span and drive! I know my unfinished projects speak of that :)
Most interesting part to me, of watching Notch code, was to see how he used his tools. And it was inspiring and motivating to see the progress. The actual code was very hackish but quality code is not important in a throw-away project anyway :)
This is really not a good example as games have (read should have) entity systems. See e.g. these two links for an introduction. http://t-machine.org/index.php/2007/09/03/entity-systems-are... http://www.purplepwny.com/blog/?p=215
There should be no Draw() in your game object (read entity) base class. Not every entity is rendered. You should have instead a component Renderable. And if it happens to be so that your special snowflake has a Renderable component then you can render it on screen. E.g. AI pathing nodes would not usually have one unless you are debugging them you can add one.
In your example you end up with Movable extending GameObject, Camera extending GameObject and then you have no way of combining these two behaviours.
> >The main developer is very responsive and helpful.
> Well, here I must concede a point. I have no idea how responsive the developers of Racket are, for I never had cause to contact them.
They are very responsive and helpful and the mailing list is active.
Thanks for the details! Here's what happens to me.
Planning for a month. How detailed really? I would imagine that such a plan doesn't survive life. How do you cope with changes? I don't plan so much ahead now because other people influence my doings too much.
Always the keys, phone and wallet are in the same location. Take the same buses always so I remember the schedule. I store my stuff in the same location always. Shelves are organized, everything boxed and labeled. Plastic bags stacked by size and tied with rubber bands :) That's just being an organized person. Bookshelf has no particular order because it's acoustically better. Only the to-read -books are in one place in order of interest.
No need to decide in what order I eat stuff, I just put stuff in mouth :) Actually, rotating between the parts, trying to put meat and other stuff in each mouthful.
So far I haven't decided to wear the same clothes every day, or wear my stuff in any order. But this takes only a minute each day.
I'm also always in time. That means I usually wait for other people, I use that time to observe other people or read something on the phone. To work I almost never need to be on time but just come at my usual time +- delays in traffic.
Inbox, I answer stuff when I read it. Should mark some items as followup I guess.
Holidays are difficult to plan for me, never know when can take, should take, need to synchronize with other people, work etc. Besides it feels good to waste time on days off. That's when the brains come up with new ideas. Wasting a day typically means spending it on something that I then thought was most interesting, which is the right thing, yes? If I'm bursting to do something, I do it.
I guess for me the same that plan x -> y -> z doesn't work. Such processes are inflexible. It should be possible to do x, y and z in whatever order I feel like and all of them should be possible to finish in one go. Or not do at all. Now how to string a bigger project together ...?
Cooking part is interesting. What do you do with fresh foods or they are just no on the menu? We cook for 2-3 days at a time and it does take more time than to heat stuff up.
Many of your choices require commitment not only from you but from your family and friends. How does that go?
I used numbers that are reality to me. Plug-in your own numbers for comparison.
For a 10 minute commute today, I would have pitch in another 100K for living. My experience at the moment is working 5 years for same client/location on average.
P.S. If I move out I can reclaim some of that 100K, some go to tax, fluctuating prices, I don't calculate inconvenience of moving and stressful location etc. details.
A rough example. Moving closer costs 100K more, working for 200 days a year, less commuting provides 1.5 hours more time per day, same client (place of work) for five years. Cost of hour of free time is (/ 100000 200 1.5 5) = 66.7 units of money per hour.
Worth it? Don't think so.
Working remotely is often impossible because of security policies and also not the same in terms of presence.
Difficult :)
Online banking is easy. But then it's easy to forget how much money you waste on said auto-paid bills every year. Sometimes it's good to have to work for something to realize maybe it's not necessary after all. I cut my magazine subscriptions to half, twice, and still get a bit too many to read ;)
I am thinking along the same lines. If something is not "policed", then it won't happen in the long run as interest shifts. Includes programming practices, testing coverage and the usual stuff. And more effective to automate such things and spend code reviews on interesting issues, not "punctuation".
I wonder if anyone has examples for or against of running such checks against your codebase? I can imagine some horror stories of how those tools would slow down all useful work. But some success stories? I guess I have to try on myself first :)
Can you give more examples of things you have automated and how they worked out? And what didn't?
Yeah I sometimes get off the bus earlier and walk home to combine the two. I'm considering running sometime too but have to get the gear with me. And sometimes I walk home from a shop for the same exercise.
In the winter I mostly slept/meditated in the bus but now I have enough energy to read. I found out that coding is practically impossible in the bus because of the sun.
You seem to stay up quite late. Unsustainable for me. Also making and eating breakfast takes for me at least 30 minutes at the moment.
Three years ago I had exactly the same 10 minute walk to work and then I did have more time available. However have to consider that:
1) Consultant usually works at client's location and client may change often, though I'm a counter-example of that myself. Moving often is not worth it. I consider my current location pretty optimal. A more central location creates more stress and costs way too much. I would believe it's more effective to just decide to work less hours every week for reduced pay but I'm not yet strong enough to commit to it :)
2) I do not spend any time travelling to shop, to exercise location or to do fun stuff. My travel time maximum is 2 hours every day - the shops, bars, movies, etc. are along the same route and do not increase time spent travelling in a day at all.
3) Car would not improve the situation. In fact it would be slower due to traffic. Or I would have to leave at 06 from home, way too early. And the tradeoff of money to time is ridiculous with so few other uses for a car. And there's the maintenance.
Thanks for the example. Maybe somebody else can chime in too.
1) I don't work 10 hours every day, 8 hours twice a week at least. Like this I'm saving a couple hours every week to have some time off later. Year ago I was at -50 hours but now I'm at over +50 already. A small reserve is good. I never work overtime for money.
4 x 10 might be nice to have a longer weekend. Have to think about it since now 5 days are mostly spent working, exercising, eating and sleeping :)
2) Well that was an example day. Instead of the shopping it might be cleaning, cooking or other housework that takes half an hour to an hour. I shop two or three times a week. I also don't cook every day but cook for two or three days at a time.
I don't own a car, bike or skis because the maintenance would take time :)
3) I keep a rest day once a week and on weekends I might do two kinds of exercise in a day. Still 6-7 times a week is fine counting the occasional extra walk back from shop. That totals it to 6-10 hours a week on physical activity.
I don't spend any time going to exercise since all the equipment is either at work (gym, pool), at home (cross-trainer, weights) or I go running.
A simplified example day:
07:15-08 Wakeup, shower and breakfast
08-09 Commute+reading
09-19 At work, includes lunch and snack
19-20 Exercise
20-20:30 Grocery shopping
20:30-21:30 Commute+reading
21:30-22 Dinner
22-23:30 Hacking
23:30 To sleep (slightly late)
This routine gives a small amount of extra working hours to use for time off later. Cutting work to 8 hours gives 2 hours of which 1 usually goes to a longer exercise and 1 is retained as free time. So these days get 2-2.5 hours free.How does that work out for you?
I've been considering a 4 x 10 hours week.
But really, commuting is impossible to avoid if you work in consulting, where your customer changes from time to time. You can't expect to move as often. My work used to be only 10 minute walk away ...
After dumping my TV some years ago, there are still some problems with time. Working, commuting, exercising and eating seem to take about 15 hours in total. Now with 7-8 hours of sleep it leaves approximately 1 hour for hacking or time with other people. A bit too little, no?
Sometimes it might be possible to combine commuting and exercising, but at the moment it's not worth it, since commuting and meditation, as well as commuting and reading, are possible with public transport.
One thing I can recommend is to get a cross-trainer or exercise bike and watch some interesting stuff while exercising. Recently I've been reviewing open courseware, Clojure webcasts etc. Saves time.
I would say working less for money is the single biggest thing people can do to be more productive, or to have more time.
Yes can be. My typical approach is to write down what I want to say in an as idiomatic way as I can. Then I go on to implement the notation that I have come up with.
The code I write is usually very high-level code. It can be written like an acceptance test or feature test. I essentially try to model the business domain of the software as cleanly as possible. I might refactor the code until I can express the domain clearly, with DRY etc.
Implementing all the bits of my DSL is often then the actual problem. Often I meet areas of the domain that are tricky because I have never solved such problems before. I think only my the third implementation of some idea can be something usable. So sometimes it takes a long time to get there! :)
This is only a problem in my personal projects because, well, the main goal is to advance my capabilities and thinking and finishing the project is secondary.
Yes, Java is not elevated to great language status by the wealth of libraries. It gets the job done and it is possible to be productive with it, but many times you have to fight it. The language drags the libraries down in this case. In most other modern languages, I would say the libraries are what matters.
Racket has a decent repository (PLaneT) for libraries and easy ways to wrap C libraries.
Yeah, I agree that good people can be successful with any tools, but I also think that good people with decent tools are even more successful. And good people will quickly see what is wrong and with what tools they can be expressive enough. And I think modern languages generally fall close to each other.
If you go into a significant company with any significant developer culture, they would have their own libraries and tools, which you would use because then you can deliver. So when those are written in f.ex. Python you would use it. Sometimes this also means that you use e.g. Eclipse though it has numerous problems because at least those problems are shared with most other developers and you don't have to fight them alone.
Google undoubtedly had great programmers pre-MapReduce et al. so they already had great stuff to use.
If we consider libraries part of the language, then I would say yes. All lisp implementations lack something for someone. And a language with great libraries may appear to be higher than others in some perspective because they offer a set of great existing tools. As far as limiting your thinking, Lisp in itself does no such thing, the libraries do it.
As a thought, I have sometimes wondered, why is it difficult for me to do something in Racket? It is not because a library is missing (though it could happen), but because it does not limit me. So it does not guide my thinking as much as let's say a strict language like Java.
When I don't have to think about classes with single inheritance and single-dispatch methods, I start to think about class systems, generic methods, multiple dispatch, may ditch classes altogether, go to a great unified graph of data or something crazier. I end up thinking how I should be modeling something and not doing the modeling itself. It does go overboard sometimes :)
Does anybody else face this problem?
To add some detail.
Programming languages live and die by their libraries, i.e. vocabulary. The differences in grammar are in my opinion rather small, when we talk about how expressive a clever programmer can be. Can a person be even more expressive in Lisp? Perhaps but it's not essential. The library support on the other hand is essential. You want to stand on the shoulders of giants for the next step. In all modern languages you can write elaborate, expressive libraries (read DSLs) for your pet problems.
I think my TLDR summarizes the original author's post but if someone disagrees, then we can have a fruitful discussion :)
Disclaimer I use Java and Racket daily.
TLDR Person found out other people can be immensely productive with other languages. Then person learned languages X, Y and Z with cool libraries and is now very productive and happy using them.
TLDR TLDR Libraries make a big difference!
I could, if I considered the chance of receiving the big money positive. Or if you would be in such a need that it'd be charity :)
My point is that I do not consider the net sum negative. It is so small that it is inconsequential to my life. It does not affect my finances whatsoever. Only hitting the jackpot would, and that would be a definite positive effect to me. Like I said life-changing.
I consider that the Pascal's Wager :) Everything to gain, nothing to lose. http://en.wikipedia.org/wiki/Pascal%27s_Wager
I spend a tiny amount on lottery every week (almost minimum). The reasoning is like this:
- If I never win, there is no practical loss (total spent sum too low)
- If I win the jackpot, it's life changing
- If I never play, life never changes (or at least there is not such a chance).
- Most of the spent money goes to charity anyway
Why not play then? :)