This is a rant I felt I needed to have after coming out of an Agile Systems class.

When Agile methods and Scrum was first explained to me in this module I was told it was a fast paced way of working the delivering what the customer wants at the heart of its philosophy. Unfortunately though, after watching the lecture I just have (Agile Methods and Scrum) I’ve noticed that the uplifting manifesto is actually littered with small print and contradictions all over the place.

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

This is unhelpfully ambiguous. But, not to simply pick on semantics, I’ll discuss both interpretations and explain why I think they’re both ridiculous.

The first way to read it is to release the software early, or rather to release it before it’s finished. This sounds odd, and so I quickly decided that’s not what that sentence meant. However, looking at the general ethos of releasing features incrementally this actually looks like a reasonable thing for the makers of Scrum to have decided.

What are you expecting the customer to do with unfinished software? They can’t phase it into their business, or worse directly switch to it, just to find they can no longer merge records where they want to or something. They can’t even run this software in parallel with their current software if there’s gaping holes in it.

Even here though, at your first step, Scrum has contradicted itself in that another of its principles is not to release work until it’s been tested. That must mean finished. That makes this interpretation either wrong or contradictory.

For that reason the second is more likely; finished early in respect to the deadline you estimated. I’d argue that this is bad too. The few times I have handed over a completed project before my deadline (simple because I’m new to this freelance lark, and so bad at estimating how long it could take me) only once was the customer actually happy with that. On one occasion a customer was incredibly unhappy that I’d completed early, and so messed up his project plan timetable. (I thought he was incredibly out-of-order though, and probably unusual.) Another time a customer remarked that it was just unprofessional to have over estimated how long it would take me. Every other time the customer didn’t notice and probably didn’t recognise it as either an achievement nor disbenefit.

I’ve realised that customers are happy to get the work when you said you would give it them — after all you were both set on that deadline. Anything less is apparently unprofessional.

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

The fine print here is that the customer can only talk to you once every thirty days. This makes no sense. What else is the project manager (uhh, sorry, Scrum Master) doing with their time? They’re not coding, so they should be talking with the customers whenever the customer wants to talk to them. After any of those discussions take place, and the manger has decided on any extension of deadline or cost because of the changes, the programmers should be made aware immediately.

It’s the project managers job to decide what features need to be worked on now, and which can wait till later. His backlog should be incredibly flexible to any concerns the customer has to make.

Not only would that benefit the customer, but the programmers don’t have to wait 30 days before realising that that function they’re working on which is ridiculously complex actually isn’t even needed anymore. For a system that promotes its agility in an industry that works at lightning pace, a thirty-day buffer it insulting.

The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

This is completely ignorant to how people work. You should work like a machine, with a constant typing pace of 60 words a minute. There are times where you run into problems that the solution to is incredibly elusive. Problems you’re not even expecting. A customer of mine needed to have an interactive map, with pointers to variable places (according to where the user enters). That seemed pretty easy since I know of the Google API. Oddly though, there’s no “zoom to a view in such a way that I can see all the markers” method in the API, so I  had to spend probably an hour looking for one, before resigning and writing it myself. That was essentially a large chunk of paid time in which I was doing virtually nothing.

Sometimes people are unmotivated and need a few hours, or even a day, to get back into the swing of things.

This fairly communist view of developers is somewhat contradictory to the rest of Scrum though, which makes developers sound fairly demanding and lazy.

Simplicity — the art of maximizing the amount of work not done — is essential.

Simplicity and being lazy certainly aren’t interchangeable words. Procedural programming is maximising the amount of work not done (read: lazy), but it certainly isn’t the most simple or elegant. This just screams absurdly lazy.

The laziness of agile programmers is also shown in their language of choice. From the short time I’ve spent with it so far, Ruby is the most vile language I’ve yet come across. No brackets around arguments, no curly bracket encapsulation around methods and classes, (seriously, are you guys boycotting the shift key?). I natively write PHP, and even I’m annoyed with duck typing. Just throwing in white space wherever you want, with no real standards described for it.

Whilst embracing team work, you seem to be hell-bent on the idea of being completely left alone, despite one of the agile ideas being that you should work with the “business people”. The term “business people” is used almost as a derogatory term. None of them must be allowed to speak to any of the developers but through the ambassador Master, else we’ll become horribly infected with their illogical ways.

Slide 28 talks about accept no help at all unless it’s asked for. No developer will unbiasedly judge his own work, and his team mates probably won’t critique them either. An external person must be in the ring to offer that service. Refusing help is just rude, and incredibly unhelpful.

Whilst I do have other points, this is becoming somewhat depressing, so I’ll go and get on with something more uplifting.

Sometimes change is bad. :(

Sometimes change is bad. :(

I remember before, I had a post that showed me downloading at like a megabyte a second. *sigh*

I can’t remember the last time I’ve just been sat around, being bored. (Though, that’s probably accountable to my awful memory.) I’ve either been working, or doing university work, or just general being around friends. And I’m not annoyed or bored of any one of them; I think I’ve found a really good balance.

I don’t feel stressed at all either. Knowing that there’s a safety net of a few hundred pounds overdraft available if I need it is really calming. I have spent a little more than I wanted to so far this month, but it’s nothing that I can’t afford thanks to the work I’m doing. Also, living with girls has definitely made me start eating more. Especially since Laura continually offers to make food, so I typically eat at least one good meal a day, which is an improvement on snacking when I’m hungry.

All in all, I have a pretty good life at the moment.

I didn’t realise that this was a two hour lab, and was about to pack up before checking my timetable again. Since I do have another hour in here, I may as well do this personal blog that we need to be doing for this module (and most modules, actually). Usually these are private between student and lecturer, but since I’m all about being open, why not share it here too? (Plus, this is a much nicer editor.)

This class is Agile Software Development, so it naturally uses Ruby on Rails, which is known for it’s fast pace, don’t-repeat-yourself development cycle. Pretty perfect fit then. I’ve never used it though, but it’s getting more and more popular. All the hot projects on Github are ruby ones, so it looks like the in language at the moment. I remember when Twitter changed from Rails to some other language though, because Rails just wasn’t scalable enough for them.

In the labs we’re using Instant Rails, but I think I’ll likely just install Ruby and Rails myself on my laptop manually, since I already have MySQL and Apache running. Hopefully that won’t be too hard.

We’ve mostly been playing around with the IRB today.

Coming from PHP, it’s pretty obvious how variables are treated differently. Doing something like

$foo = "blah";
var_dump ($foo * 10);

Would output 0; $foo is assumed as an integer, since * is an operator that works with numbers, and it’s assumed 0. 0 * 10 is 0.

But on Rails

foo = "blah"
foo * 10

Here the * is treated as more of a method, than an operand, in that it takes notice of it’s context and has been overloaded, sort of. Because it’s a string in context, it has a different functionality. That code would return “blahblahblahblahblahblahblahblahblahblah” (“blah” repeated ten times).

It feels like values are treated more as objects can just … values, really. Literal values can have methods too (inherited from their value type, I guess).

I needed to round up to two decimal places for currency (you always round up when using money), but for some reason the internet didn’t want to share that information with me, so here it is.

PHP:

//  Takes a decimal and rounds up (never down)
function round_up($val, $precision) {
  return round($val + pow(10,-$precision-1), $precision);
}

Javascript:

function round_up (val, precision) {
    power = Math.pow (10, precision);
    poweredVal = Math.ceil (val * power);
    result = poweredVal / power;

    return result;
}

So, using round_up (1.432, 1); would return 1.5. For currency you’d want to set the precision (the number of decimal places you want) to two.

Last year I wrote about my classes, and although it probably wasn’t, I felt I talked about the tutors in a negative light to start with. Mostly because I think I was being moody. But either way, it turned out Matthew Dean — my old course leader — found my blog, and then I felt somewhat awkward. I’ve decided though that if he read the feedback then he could use it. There’s nothing wrong with it. With that in mind, I had my first classes of the year today.

First class was software design and development. Which is a weird way of saying Java. I’ve not used Java, but I’m pretty sure it’s as easy to pick up as every other language. I’m trying to stay enthusiastic about learning more about it, but looking through the list of topics for this module there’s only one or two things I don’t already know about. I’m worried this is going to be another module where we spend a year learning something that should be taught in a week’s worth of lessons.

Really; learning a language once you already know how to program isn’t hard. They don’t change much.

Second lesson was database design and implementation. Which I’m really worried is the exact same module as the database one last year. In fact, I have the course book which I’ll look though later.

Anyway, it’s still nice to have classes to go to now, I guess.

My new desktop got delivered today! I’m pretty damn excited by it. It’s like a new toy.

CoolerMaster SILEO 500 Mid-tower Case
Gigabyte GA-G31M-ES2L Motherboard
Intel Core2 Duo E8400 3GHz Processor
2GB DDR2 800MHz Memory
Western Digital 500GB SATA Drive
DVD-RW Drive
PNY GeForce 9 9500GT 1GB Graphics Card

That’s the best machine I’ve ever owned… I mostly wanted it for gaming, because I really want to be able to play WoW and MMOs in general again, really. Also, awesome games are coming out this and next year, so I figured I could do with getting a machine that can actually run them.

That’s kind of backfired on me a little though; The internet here has so many ports blocked it’s unreal. They apparently really don’t like people playing games and slowing the network down (it’s a shared line for all the few hundred people in the flat, which is a bit dumb), so they’ve banned commonly used ports and just about every other port. Only letting a few obvious ports through.

That means that this expensive machine is essentially useless to me now. All I can do on it is exactly the same as anything I can do on my laptop. I’m going to have to find a way to proxy all these connections, or get a better internet connection.

Virgin Media are apparently doing a few checks for us now to see if they can install a line into the building, and what speeds we’ll get if they can. Even then though, the installation of a whole new cable might take months, and could probably cost me and my flatmates… We don’t really have much money, we’re only students!

Mobile internet is far too slow and way too expensive, so that’s not really possible.

The only other way then is using a proxy. I’m not even sure if that’s possible. If we ignore the technological setting up of a proxy, I’ll still have to suffer the ping times being pretty much doubled. I really don’t know what to do.

Unless I get this fixed, this is a massive waste of money. I’m really regretting it now.

I’d like a problem that for once hasn’t already been solved by someone else.

I had a set of markers which needed to be all on screen, and for some reason there’s no .zoomToShow method. Fortunately it’s pretty simple to create yourself.

//  Make an array of the LatLng's of the markers you want to show
var LatLngList = array (new google.maps.LatLng (52.537,-2.061), new google.maps.LatLng (52.564,-2.017));
//  Create a new viewpoint bound
var bounds = new google.maps.LatLngBounds ();
//  Go through each...
for (var i = 0, LtLgLen = LatLngList.count(); i < LtLgLen; i++) {
  //  And increase the bounds to take this point
  bounds.extend (LatLngList[i]);
}
//  Fit these bounds to the map
map.fitBounds (bounds);

And that’s pretty much it. Then, of course, I found that someone had already done this before, but for version two of the API.

After lurking in #javascript for a while I noticed that a lot of the developers there look down on people using jQuery and Prototype. Their view is that you’re just getting one step away from the actual language, and you’re leaving key programming skills behind.

I acknowledge that that’s true, but I don’t see why it matters. All languages are essentially frameworks of a lower level language. PHP is basically a framework for a load of C libraries. C is just a framework for assembly code. Assembly is just a framework for binary programming. Yes, by using PHP you lose a lot of functionality of C, but that’s just because PHP is filling a market with no need for hardware manipulation and the like.

Same with jQuery. If you use $.get() you lose the ability to do the request synchronously (I’m aware that you could just use $.ajax(), but I’m making a point), which isn’t really a big loss to most people when compared to the benefits.

Javascript isn’t exactly the most uniform language around, which IE not supporting half the stuff Opera does, and Safari doing things differently to Firefox it’s a really hard language to code for. You spend more of your time finding work-arounds for each browser than actual logic. The frameworks available all do that for you, making sure that there’re no compatibility issues between browsers, and that $(‘#element’).slideUp() does exactly the same on every browser.

I’d go as far as to say don’t even bother learning about document.getElementById means. It’s so clumsy and awkward when compared to $().

Due to those functionality additions though it’s obviously a little bit slower. I’ve not noticed any speed decrease, but in an “every microsecond counts” environment there would be a noticable difference. But Javascript engines are getting faster and faster so does it really matter? The average person doesn’t even notice a difference.

It’s just programming evolution. It happens to every language. I wouldn’t be surprised if a few forward thinking browsers decided to just store a copy of the latest framework versions locally, so they’re instantly available to every website without having to download the same file hundreds of times from different servers.