October 30th, 2009 by adam

The problem

It’s a great piece of openness to put your bug lists in the public domain. It makes it easier for your customers and partners to make decisions that save you time because they can see what’s coming and when (and save you money in reduced support requests). It saves you money in that you get free QA / testing from your users.

The downside is that it exposes to the world the places where you are especially incompetent, lazy, or just plain self-centred.

This is a recurring theme I’ve seen with corporates looking at both Open Source and also Web 2.0:

We say we’re the best, but secretly I believe we’re the worst; if we expose ourselves to the public, people will ridicule our mediocrity, and refuse to do business with us.

Also … I will probably get fired because my colleagues and my boss will finally realise what a clusterfuck I preside over on a daily basis

Eclipse, and a tale of two bugs

I was going to log two high-impact bugs that Eclipse has had for several years. Then I did a search on that area of Eclipse, and realised that the current Eclipse maintainers don’t give a **** about this whole section of the IDE – some of the core bugs we see every day were logged in 2001, and are still open:

https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&product=&content=syntax+coloring

What you find when you do some basic research

If you go looking through the bug history for some of the more “obvious” bugs there, you often find little gems of passive-aggressiveness from maintainers. That’s an exceptionally effective way of making sure people stop helping and supporting any Open-Source project…

You’ll also find endless re-logging of the same old bugs from 10 years ago, revolving around the basic problem that Eclipse lets you set everything you could possibly imagine … EXCEPT the colours that it prints text in.

(all IDEs let you set the colours; most dont give you enough control over the other parts; Eclipse fails on the basic challenge, and succeeds on the advanced challenge)

This wouldn’t be so bad, except that its default is very bright with low-contrast – i.e. very hard to read on laptops when outside, and bad to read for long periods of time. As of about 5 years ago, you are finally “allowed” to set the colours yourself – except that the app breaks if you do, because they “didn’t bother” to allow you to change the colours on 20% or so of things.

Final thoughts

The next time someone – especially at a corporate – resists openness and transparency … in any form … ask yourself this:

What have they got to hide?

Often, once you ask yourself that question of the right person at the right time, it very quickly becomes obvious what they’re hiding (if not why). A little more digging, and you can pry open the can of worms, and see what trouble they’ve been up to…

(Incidentally (and unsurprisingly), in the face of the point-blank refusal of Eclipse developers to make basic usability concessions across the board, I didn’t bother logging either of the two bugs I’d found)

March 13th, 2009 by adam

I just received an “invite” to a pay-for event in London about “smartphone development”: an evening in a bar with a couple of speakers and some networking.

So … you can go and listen to an iPhone developer, an ex EA person, and an ex Motorola person, and pay for the priviledge, organized by non-developers. The cost is 50% more than you pay to go to world-famous VC/angel/investor networking events such as First Tuesday.

Or … you could go to one of the many near-identical networking + speaker events that are free, and run by real developers. Here are four examples which show that Upcoming, meetup.com – even Facebook and LinkedIn – are your friends here, with loads of stuff going on.

The issue of “how” you organize these things and “what” you provide has been on my mind a lot recently, as we’ve just started a fortnightly one in Brighton (for anyone and everyone interested in commissioning, designing, developing, and launching iPhone apps). I’ve been trying out all the above sites for arranging this (I can write up some notes about the pros/cons of the different sites if anyone is interested). If you can’t find something in your local area … why not start one of your own, all it takes is making a page on Upcoming.com, and emailing the local game / mobile / iphone / OS X developer communities … takes about 30 minutes, max?

Personally, I find the grassroots events organized by people actually making this stuff on a daily basis the far more compelling option. I also find that “special name speaker” events tend to focus on the audience being expected to shut up and listen, rather than share and learn collectively – which isn’t much use to me these days. Unconferences for the win!

Of course, sooner or later, if your event gets popular, you’ll have to start charging because the only venues big enough require large payments, and the organization effort becomes too much to do in your free time. But for the small events? My advice: if it ain’t free, don’t go.

March 2nd, 2009 by adam

Here are the founding principles of my next startup. It’s incomplete and imperfect, but for where I want to go … it’s a start. Incidentally, if you share them, and want to work with me, you should get in touch (adam.m.s.martin at gmail.com). I’m sure we can find a way to work together.

EDIT: if you’re interested in these ideas, have ideas of your own you want to discuss, or are just looking for other like-minded people … I’ve set up a Google Group for this at: http://groups.google.com/group/game-studio-manifesto

30 hour working week

  1. 4 days a week, 7.5 hours a day
  2. Salaries are 20% below the going rates; we aim to employ 20% more staff than usual for a given project size; cost is the same, output is the same (modulo an output-reduction/cost-increase due to increased overheads/inefficiencies for larger team size)
  3. everyone takes the same day off. I’m thinking Friday. Friday sound good? Let’s make it Friday. You know that if you’re in the office, so is everyone else (modulo normal holidays, off-sites, illness, etc).
  4. if we ever have to “crunch” and work unpaid overtime, I’m afraid we’ll all have to start coming in 5 days a week. I know, it’s tough.

Self ownership

  1. you own your work: no-one will chase you; informing people of your status, and of delays, is *your* job
  2. you own your project: everything works on Scrum (where the “team” owns the entire process – no producers, no project managers); NB: if you claim to “know Scrum” or be a Scrum Master, or “have used Scrum” and you don’t understand/believe this team ownership thing, here’s a big fat hint: YOU MISSED THE POINT
  3. you own the company: everyone has vested equity (not options) in the company

Mentors not managers

  1. increased organizational power is based on your ability to bring others up to your level. It’s based on your contributions to the other individuals. It’s not based on your organizational prowess
  2. if you cannot mentor, cannot explain complex/new things simply and clearly … you will not advance in the management chain (you should become a Domain Expert instead!)

Your value is what you are paid

  1. This is an implicit assumption in all salary negotiations and performance reviews.
  2. It will also be required to be *stated* explicitly in all negotations and reviews
  3. If your manager believes you’ve got better, they have to increase your pay
  4. If they do not increase your pay, they’re not allowed to give you a positive performance review
  5. There is no point in your career where “Becoming a Manager” is a requirement to get your salary any higher; the only benchmark is “can you further increase your usefulness to the company?”

You have a duty to become the best you can be

  1. Playing games, during company time, is an expected part of most jobs, since we are a “game development company” and you *need* to know what our competitors are doing
  2. Learning new skills, during company time, is an expected part of most jobs, since we’ll always be looking to make use of any “better” new technologies and tools that become available
  3. Not going on paid training courses, not increasing your understanding of our industry, allowing your personal skill progression to plateau … makes you sink behind what your peers in other companies are doing, people who would like your job. Get too far behind and we’ll give it to them. You owe it to yourself, as well as all the rest of us, to make sure YOU, as an individual, are constantly getting better, and learning new things
  4. The structure of the company is explicitly designed to support as many people as possible to become the best they can be. If in doubt, or in difficult situations where no alternative is “easy”, we will err on the side of helping people to improve themselves.

100% Organization-level transparency

  1. knowing what is happening in the organization is a right, not a priviledge
  2. knowing the reasoning behind organization decisions is a right, not a priviledge … from the reasons behind a marketing campaign being run the way it is, to the reasons for the product strategy, to the reasons that one particular tech is being used rather than another
  3. being informed of the progress of ongoing processes / issues is an expectation, not a priviledge … that means that people working on things are expected to proatively inform the rest of the company what they’re up to
  4. transparency overrides privacy (unless forced otherwise by explicit legal requirements)
  5. e.g. the salary someone earns is a personal and private matter – but the salary the company pays to each of its staff is not, and every member of the company has full free right to see that info. The company knows additional things – e.g. thanks to tax law, companies may know of other income their staff are receiving – but those are not part of the company, hence they are not part of the transparency

The buck stops with the directors

  1. any issue that necessarily has to be handled by an individual, that can’t be handled by the “team ownerships” etc, or e.g. is “sensitive” or a private personnel issue, WILL be handled by a named director instead
  2. no manager can accrete decision-making power, unless they are a company director
  3. e.g. if too much power is taken away from teams by directors, by accident or device, the directors will become overworked and will have obvious incentive to push decision power back to the teams

Google 20% time

  1. Problem: it’s either half a day, 12.5% time, or 1 day, 25% time. I’m not happy with either – one whole day makes things much easier mentally for the person to switch, but I’m afraid that converting it to 25% time and having people available only 3 days in every 7 would be too destructive?
  2. As per Google, this is not a right, it’s a priviledge
  3. all 15% time projects require sign-off by the person’s direct manager (with appeal to a director)
  4. all 15% time projects require monthly status presentations to show what’s been achieved, and the manager has to approve or deny continued work on the project

Team budgets – food; drink

  1. every project team has a weekly budget for food, and one for drink, and is expected to on average have one team lunch a week, and one team evening social (with free alcohol) per week

Healthy food; healthy environments

  1. the office will not have Cola vending machines, or ChocolateBar vending machines. *If* it has any vending machines, they’ll be majority subsidised – free, or practically free
  2. the office will have a surfeit of fresh fruit, renewed every day, starting at or before anyone gets into the office
  3. any meeting called before 11am will have some free small fresh food with substantial sugar content (for anyone who missed breakfast. Until they recharge their blood sugar, they’re probably cranky and irritable – and irrational – or simply silent and unthinking, like a robot, and make everyone else suffer because of it)
  4. choosing to hold meetings physically outside the office, e.g. in local cafes, and having the company pay for coffees and snacks, is a right, not a priviledge, for all employees

Remote working, and Online Working

  1. at any given time, we aim to have a substantial minority of staff working remotely / telecommuting, e.g. around 20%
  2. remote workers can expect slightly lower salaries than their full-time equivalents; the company gets more value out of people who are co-located – but it makes all of us work better to have a mix of co-local and remote colleagues, so we welcome the presence of remote workers
  3. all employees are required to be online and available *and reactive* on IM during all working hours
  4. all development systems and tools will support remote working by default (e.g. remote compilation, remote builds, remote deployment, remote access for all internal systems). This is one of the ways that having remote staff makes our overall operations better: better tested, more robust, more adaptable
  5. all employees will have their own password-protected SSH keys stored on a free USB key; all company systems will work on SSH key-based auth; all workstations will be configured to do single-sign-on using the individual’s SSH key – no passwords required

Guards against the unscrupulous

  1. all ownership is only part-vested, tied to time served AND ALSO personal performance targets. This will take substantial time to invent/negotiate on a per-person basis (I know, I’ve tried. Sometimes, I’ve given up on it, because it was so much effort. But … in the short and long term, its worth it)
  2. managers have more time to look for problematic individuals, as they’re freed of some of their normal duties in other companies
  3. teams, being self-owning, have the power and the incentive to reject any failing members. Over time, failing individuals will either change, find teams that do welcome them, or find themselves conspicuously under-employed, making them an easy target for management attention (this does not imply “firing”, it’s up to the management what action they take, but they clearly now have staff they’re paying for and getting nothing from)
  4. directors have a lot of burdens of responsibility under this system; they also have a lot more visibility into the company’s status than in a standard company, so more chance to fulfil their responsibilities
  5. most of the processes are designed to be self-healing/recovering when encounting unforseen problems: the teams and individuals that do the bulk of the actual *work* are self-owning, the managers whose roles are mostly shepherding are largely disempowered to break anything, any unusual problems fall into the laps of the Directors who already have total legal power to enact whatever is needed anyway, etc.

Next steps

Please help me debug this thing … add your own suggestions, or highlight the flaws in what I’ve written, or point to evidence both for and against the realities of what might work … etc, etc, etc.

February 26th, 2009 by adam

(4 posts in one day? Yeah! Too busy to be regular right now. GDC is on the way)

At the end of my commentary on the formation of NC West, I added almost as an afterthought a little comment about Europe and the MMO industry:

there’s a gaping hole in the MMO sphere. For someone bold enough to step into that hole, you could “own” Europe’s online gaming industry for the next decade.

Since I wrote that, surprisingly many people have commented on it both by email and in person, either along the lines of “look who else missed the opportunity” (Jagex, Ankama, Bigpoint, Gameforge), or along the lines of “yeah!” (count me in) … or both.

So, I wonder: what *would* it take, right now? If you have ideas, post them here. I’ll be at GDC in 3 weeks time, and I’d be more than happy to pitch this as a credible plan, if you come up with a comprhensive-enough plan. It’s a lot more expensive than any of my own humble plans, but in many ways I find it a lot easier to justify, financially. And I’m not even trying (it’s just a game for me right now, idly imagining what I’d do, if I were Jagex, or Ankama, or Gameforge, etc).

Wishlist time. Over to you, Dear Readers…

February 26th, 2009 by adam

http://upcoming.yahoo.com/event/1917163/?ps=5

If you have any interest in iPhone development (you have ideas for apps, or you want to start coding for your iphone, or just want to meet other like-minded folks over beers), then come along.

Bring friends. Bring iPhones (I’ll bring my laptop so you can download and try my current work in progress)

If you’ve got anything you’ve made yourself, definitely bring it along!

We had a quiet first meetup last night, I’ll be adding screenshots / app descriptions for the two apps shown on the night to this post later.

EDIT:

Snooker Scorer

snookerscorer1 This is a simple app that keeps score of a snooker match. You can use it in a club, watching a match live or even following on tv.

Just tap the ball that has been potted. Hit the ’swap’ icon to swap players. If a foul happens, hold the ‘foul’ icon and tap the ball fouled. Free balls can be added as well through the popup actions icon.

Future additions will make the information line adapt to show the most relevant info such as current or maximum break, difference and points remaing, balls potted in current break, match history, undo mistakes, and whatever else I can think of.

February 12th, 2009 by adam

Mark Cuban’s blog is an odd one; I really can’t remember why I started reading it (presumably linked by a VC blogger would be my guess), and yet even though I read very few blogs I’ve stuck with his. It’s not like the standard SiValley other investor/commentator blogs. It’s a lot more based in the real world, and a lot closer to my experiences of running the business side of a business as opposed to the “building to flip” side of running a startup without ever being profitable just to sell it to someone else.

Anyway, advert over. He’s posted an interesting challenge: want money for a startup? Right. You have to publish the entire business plan, and let everyone else copy it. If – as many people are fond of saying – it’s implementation that matters, not the idea, then this shouldn’t be a problem for you. But it may bring wider-world benefits to everyone else, intangible virtuous-circle stuff.

I will invest money in businesses presented here on this blog. No minimum, no maximum, but a very specific set of rules. Here they are:

1. It can be an existing business or a start up.
2. It can not be a business that generates any revenue from advertising. Why ? Because I want this to be a business where you sell something and get paid for it. Thats the only way to get and stay profitable in such a short period of time.
3. It MUST BE CASH FLOW BREAK EVEN within 60 days
4. It must be profitable within 90 days.
5. Funding will be on a monthly basis. If you dont make your numbers, the funding stops
6. You must demonstrate as part of your plan that you sell your product or service for more than what it costs you to produce, fully encumbered
7. Everyone must work. The organization is completely flat. There are no employees reporting to managers. There is the founder/owners and everyone else
8. You must post your business plan here, or you can post it on slideshare.com , scribd.com or google docs, all completely public for anyone to see and/or download
9. I make no promises that if your business is profitable, that I will invest more money. Once you get the initial funding you are on your own
10. I will make no promises that I will be available to offer help. If I want to , I will. If not, I wont.
11. If you do get money, it goes into a bank that I specify, and I have the ability to watch the funds flow and the opportunity to require that I cosign any outflows.
12. In your business plan , make sure to specify how much equity I will receive or how I will get a return on my money.
13. No mult-level marketing programs (added 2/10/09 1pm)

PS: I love Mark’s attitude that comes across in his blog. E.g. in one of the first comments to this blog post:

Would you be open to reviewing pitches on your blog and then details privately?

From MC> No. This is an open source opportunity. Not a pitch Mark opportunity

February 4th, 2009 by adam

PHP is weak, crappy, and encourages people to write terrible code. But … if you know what you’re doing, all of those might actually be really really good things.

(by the way, if you haven’t already, you should read Eric Ries thoughts on PHP…)

“Best Practices” are one of the best guides you can get for sailing between the Scylla and Charybdis of “crap code” and “over-engineering”.

So I’d like some, please.

Perfection

Anyone with zero computer science education can write crap code; that’s easy. At the other end of the spectrum we have the people who write Perfect code.

Anyone who writes perfect code is either:

  1. a liar
  2. too rich to work for money
  3. works in an industry that is immune to marketing

…because marketing is always a cheaper and more effective way of making more money, compared to writing “perfect” code.

(disclaimer: in the past, I’ve been the first, and lusted after the third, but never quite managed the second)

The skill that marks out the difference between a competent programmer and a good (or great) one is knowing which of the language’s strengths to play up, and which to play down. Sometimes, the fact that a language allows extremely sloppy code is a very good thing. e.g. most scripting languages – especially any that run on an “intelligent” runtime like the truly Awesome JavaVM – where being grossly inefficient is not only “OK” but in fact “doesn’t happen”, because once it notices what stupid thing you did, the runtime silently recompiles everything into decent C code while you’re not looking.

So … how the heck do you win?

You look for Best Practices, language-specific (and domain-specific, but that’s obviously of more niche value).

I recently did two moderate sized PHP projects. I figured: OK, so PHP is very easy to hack code together knowing very little about the platform (and I’d been using my Perl experience most of the time when writing PHP) – but Perl showed us that Best Practices are damn useful and not too hard to stick to. There must be lots that the PHP community has worked out by now!

(as Quake3 would say, in a bass rumbling voice:) Denied!

Um, no. Apparently not. Google – with *considerable massaging* – threw out a few dozen attempts from different people.

There was some interesting stuff in there. I found some obscure bits of standard and near-standard extensions I hadn’t noticed previously when reading the manuals.

But, to be honest, nearly all of it was a waste of time – it simply wasn’t PHP specific. Telling people that they should “document function headers” is meaningless as a “PHP Best Practice”. It’s not a PHP Best Practice, it’s a general programming practice. You can find it in *any* textbook (and if you don’t know stuff like that, I suggest you go read a few key books like Code Complete, for starters).

There’s also – and this quite upset me – a lot of BAD practice out there being passed on from PHP programmer to PHP programmer and hailed as if it were “a good thing”, when often it’s about as wise and valuable as staring down the barrel of a loaded gun so you can see better while you clean the inside.

What is PHP good for? Why?

I have recently realised that the majority of PHP programmers cannot answer these questions, and that many of the rest aren’t great at answering them either. If you can’t answer them, you can probably never be a great PHP programmer, and it’s debatable exactly how “good” you are. (/me ducks and runs for cover)

I’ve not done enough PHP to know what it does from the inside.

But I’ve done tonnes of code in “languages that are not PHP”, and I have a really really good idea what it does from the outside. And most of the Best Practices I saw for PHP were stolen from other languages (especially C derivatives) and are totally inappropriate for PHP. Because PHP is not C, and PHP programmers will never be decent C programmers, no matter how big their inferiority complex, and no matter how hard they slave to try and write “high quality code”.

Some things PHP is good at: (in no particular order!)

  1. It’s a Scripting Language (like JavaScript, and ActionScript, and Perl. But not like C, and not like C++, and not like Java)
    • It’s intended to be trivial to read and write code; the core language is “easy for a non-programmer to grasp”
    • There’s no feature in the language that requires thinking to understand what’s going on, by design (unfortunately, some of the libraries broke this. c.f. the great Register Globals disaster too)
    • idiots can code effectively…
    • …which means that highly intelligent individuals who were never trained as programmers can ALSO code effectively, with minimal pain and suffering
    • …and that changing (modifying, fixing, extending) other people’s PHP code is trivially easy
    • There’s no compiler. No cached builds. What you see is what you executed, literally.
  2. It’s very easy to grasp two of the three most important structures of a web application (the third one is “data flow” – PHP sucks at that one). The two it does great are “program logic” and “program inputs + outputs”; together these sum to “execution structure”
    • One page == one source file : you read an output (FORM or A link) to an HREF? Or a page is crashing in the browser? You know exactly which file to find it in
    • One source file == one page : all the logic (PHP tags) and the input/output parts of the user-interface (HTML tags) are in one file. So you can’t make assumptions and the resulting mistakes
  3. It’s a context-free language. This is a by-product of being so tightly integrated with HTTP/HTML. It is one of the things that “real” programmers sneer at PHP for – how can you have a context-free language that isn’t Functional and expect it to be any good? That’s some kind of mutant offspring of Fn and Imp that ought to be strangled at birth. Or … maybe … just maybe … it’s one of PHP’s greatest strengths (although admittedly it is a mutant offspring too)
    • When a single source file is executing *there cannot be any other context* (except for the Session, sadly – but this is a strange piece of context-that-is-not-context because of all the rules about what can and cannot be in a session)
    • Oh, OK: there cannot be any context from other threads, other users, other simultaneously executing code. This is one of the hardest, nastiest parts of all systems languages, the multi-threading stuff. And PHP completely wipes it out as a problem. Nice.
    • All source files – hence all user-interaction points – are (semi-)atomic by definition: either they execute, or they don’t (by default, if they start, they dont stop, not even if a crash-level event happens; more on that later)
  4. Code is mingled with presentation, but is “together but apart” because it’s guarded (in the computer science meaning of that word, sort-of) by enclosing magic PHP tags
    • You can copy/paste move around code without the risk of it becoming part of the presentation code (this problem happens A LOT (and causes some awful security holes and application crashes) in some languages, especially in templating languages, even though it seems like such a simple thing. I kid you not.)
    • Any decent IDE (/wave at Eclipse (download PDT to add PHP to it)) can do a lot better at second-guessing what the programmer wants to type next, thanks to the explicit context of being either “in code” or “in presentation”. Saves a lot of time, in very small pieces many times a day.
  5. It’s a mainstream scripting language: very very fast to write code, code is very very fast to read + understand (it CANNOT DO complex things like STL or Operator Overloading), and you can “make it up as you go along” when writing a program – it doesn’t expect you to plan ANYTHING in advance
    • No declarations : you don’t have to plan your variables in advance
    • No declarations = faster “flow of mental programming” : you can aribtrarily change your mind “mid sentence” when writing code, and not have to move backwards in the source file to fix a declaration as a result
    • No memory management : you don’t have to plan the LIFECYCLES of your variables in advance
  6. Writing basic imperative code. Fast. (Imperative == “not Functional”; if you don’t know what that means, look it up – Fn programming is awesome)
  7. Templates for pages.
    • If you’re going to use a template method (or, god forbid, “library”) in PHP, make sure that its source code looks *exactly like PHP*. Because PHP is an excellent templating language.
    • This begs the question of “why aren’t you just using PHP in the first place, fool?”. The answer to which is usually “I didn’t read Adam’s Best Practices on this website and wrote long waffling PHP source that no-one could understand”, or “I have some truly stupid accomplices who will overwrite the PHP tags whenever they see them, just for fun” (anyone using DreamWeaver has almost certainly done this at some point, without even realising it; in that case, it’s not the human’s fault, it’s the fault of their editing software – DW – but the PHP programmer can’t really tell the difference, it’s the same net effect)

Some things PHP is bad at: (in no particular order!)

  1. NOTE: just because PHP is “bad” at something does not imply that this is a bad thing about PHP!
  2. OOP. PHP is poor at OOP. It’s not as bad as Objective C (which is terrible) nor Perl (which is horrifically awful at OOP), but it’s not part of the core language, and it shows.
    • Actually, I don’t even know what to say here. Go on a long rant about how it should look like C++? Hmm. Not really helpful. I’ll just leave it at that. If you *really* need to ask why PHP’s OOP is bad, it’s going to take more than a couple of bullet points to explain it to you.
  3. It’s an “old fashioned” scripting language; it lacks some so-called modern features (many of them are older than the microchip but took a few decades to make it into mainstream programming)
    • Closures? Where are my closures? : without this, it’s much harder to write self-adapting code, and much harder to write code “for other programmers to extend and alter without needing to change my source code”
    • No OOP scripting : without this, OOP is a pain in the ass, taking a lot more typing, and standing out like a sore thumb inside any PHP file
    • No modern Array derefence syntax : (you have to do: “${arr['var']}” instead of: “$arr.var”) this makes getting data out of arrays so hard that people go out of their way not to use arrays in PHP.
  4. Data flow (the third prong of three mentioned in the Good bits section)
    • SQL in PHP is not fun : it’s all manual SQL statements, with practically zero language-level support (check out Perl::DBI for an example of how funktastic language support for SQL can get; I didn’t say “good”, I said “funktastic”. There’s a difference)
  5. Distribution
    • There isn’t any. PEAR doesn’t count – and if it did, well … PEAR has one of the most appalling distribution systems I’ve seen in about 10 years. The fact that I had to hack PEAR’s installer – in 2008 – just to “not crash” let alone to get it to “start installing” says it all, really.
    • No package management. No bundling. No metadata. No repository (PEAR or CPAN? take your pick. I find both fine as manual systems, and frequent failures as automated systems).
    • (if you still don’t believe me, find yourself a Debian sysadmin and ask them to show you Aptitude, a worn-out decade-old text-based front-end to apt. And marvel at how fantastic it is despite all that!)
  6. Register Globals fiasco : the maintainers killed some core features of the language in an attempt to fix a security hole, instead of just fixing the security hole
    • Sadly, the core libraries now force you to use Arrays for evertying, because the language maintainers panicked over Register Globals and destroyed the whole input-sampling system.
    • …which is bad because of the lack of Array-de-ref syntax in the language (see above)

A quick retrospective

If you’re a PHP programmer, I hope you’ve already noticed the implications of some of the good/bad points I hilighted.

There are things that a lot of the PHP community loves with a lack of reasoning that sometimes borders on obsession/fetishism, but which – from the above analysis – are inappropriate for PHP. I’ve tried some of these, and confirmed: whoever thought this was a good idea was either smoking crack or didn’t understand how to build web applications.

Some quick examples:

  • Page Caching. You gotta be kidding me. There’s are plenty of reasons that all other languages push this OUT of the language, and OUT of the application, and most of them apply equally to PHP. Use Memcached instead, and learn to use it properly – that is, externally, not internally.
  • Separating Code from Data. As a gross generalization, if you do this, you should stop writing PHP, because you just threw away most of the benefits of PHP, and you’d be better off writing J2EE from this point on – you’d get the benefits of J2EE and of the Java language AND of the Java standard libs (which kick the living daylights out of PHP’s weak set of “Extensions”) – and you’d hardly lose anything in the transfer.
  • M/V/C architectures. If you do it the way we do it in other languages, then it’s equally stupid as the above point. It *can* be done, conceptually, in ways that fit with PHP – but the majority of PHP systems I’ve poked inside didn’t get that clever, they just tried to do it the traditional ways.

By The Way: I’m probably wrong on some of this. I haven’t spent much time thinking about it. Unfortunately, I’m not sure at this point which points are where I’m Totally Right, Dude, and which ones are where I’m Smoking Something Funky.

Sorry.

Too many words! Argh

I keep being told off (nicely) for writing blog posts that are too long.

In petty revenge, after making you read through the rant-tastic introductory bits (I have my Asbestos suit at the ready…), I’m splitting the rest into a separate post. I almost feel bad about doing this. Almost.

So, on to … PART 2: Best Practice for PHP Programming!

November 20th, 2008 by adam

Lots of ideas and detailed explanation from games industry Producers and production staff on the IGDA Production mailing list here.

Unfortunately, I’m afraid that the people who run the Production SIG don’t believe in allowing you – the public – to read their conversations. So all I can do is tell you that there’s good stuff that would probably help with improving the quality of the process in the industry – and hence improve the quality of life of everyone involved – and give you a link to go and apply to be allowed access to this secret world.

Sorry. Good luck with justifying your existence enough to be allowed in; I hear they are pretty generous with it (hey – they let *me* in :)), so you should be fine, I think.

(”IGDA: hiding information that would help people break-into the games industry, or improve their own level of professionalism, since 2004
“)

PS: because it’s password-protected, and uses random passwords, I can’t even get hold of the direct link to the emails in the archive – I have to wait for their mailman server to give me my password. That can take several hours (I know there’s nothing they can do to improve it: I run one of the other lists on the same server, and have the same problem :( ), so I’ll edit-in the direct link if/when my password arrives)

May 1st, 2008 by adam

(I’m quoting a very handy short extract from Clinton Keith’s December 2007 Gamasutra article, so that I can find it again easily later. Clinton is/was the CTO of High Moon Studios, and is probably the most well-known proponent of Scrum in the games industry. Rather than wade through the whole article when I want to pass on some of his advice, I wanted to be able to copy/paste the relevant sub-bits)
(more…)

May 1st, 2008 by adam

(I’m quoting a very handy short extract from Clinton Keith’s December 2007 Gamasutra article, so that I can find it again easily later. Clinton is/was the CTO of High Moon Studios, and is probably the most well-known proponent of Scrum in the games industry. Rather than wade through the whole article when I want to pass on some of his advice, I wanted to be able to copy/paste the relevant sub-bits)
(more…)

April 21st, 2008 by adam

Computer grammars, Unicode in Eclipse, and problems with Java’s XML parsers…
(more…)

March 17th, 2008 by adam

a.k.a. how some Publishers view independent Developers

This is a quote found buried in the middle of the otherwise completely unrelated, but sometimes highly amusing, “rant to end all rants” about the rise and fall of the talent and skill of the people within the Ruby on Rails development community:

I have a few pieces of advice for people about to hire any company like ThoughtWorks. There’s just a few simple strategies you can follow to make sure you get the most out of them and get your money’s worth:

1. Make sure you have the right to see every resume and interview each consultant they place. Treat them like new hires and don’t let anyone who’s not worth the rate you’re paying on the team.
2. Demand a variable rate based on the position of the person and their experience.
3. Demand that no employees can leave the project to work on another project. These placements have to be for the life of the project or until the employee quits.
4. Require that you have the right to have someone replaced if they are not immediately capable. Part of what you’re paying is that a ThoughtWorker should be able to drop in commando style and just start working. The reality is they are usually totally lost anyway.
5. Seriously consider recruiting one full time employee as a team lead, another as a project manager, and then staff the rest of your team with independent consultants. You’ll find that you get more control and better quality at a lower price.

Having employed one extremely famous web-design consultancy, run by some of the most famous world experts in using XHTML/CSS (and doing so attractively), and had very similar discoveries/realizations about their dodgy business practices when we were charged 5-figure sums for 3 webpages that were thrown together in around half an hour … in 2005 … I found the list above quite a good starting point for anyone considering paying an external team of experts :).

At some point, I’d like to followup with my own lessons learnt from what to do and what not to do on the publisher side of the game-publisher/game-developer relationship.

November 30th, 2007 by adam

Is it a completely hopeless task, caused by a fundamental lack of understanding in how to ask the question appropriately?

September 14th, 2007 by adam

No, it’s not, it’s really not. In fact, source code is probably the worst form of documentation, it fails in most of the roles that documentation is actually required to fulfil (see bottom of this post for a shortlist).

But something else is…
(more…)