52 karma · joined January 31, 2011
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 :)
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.
> 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.
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?
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.
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 :)
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 :)
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.
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.
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.
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?
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 ...
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.
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.
Racket has a decent repository (PLaneT) for libraries and easy ways to wrap C libraries.
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.
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?
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 TLDR Libraries make a big difference!
I consider that the Pascal's Wager :) Everything to gain, nothing to lose. http://en.wikipedia.org/wiki/Pascal%27s_Wager
- 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? :)