Yesterday I was fortunate enough to attend the Summerside 'instance' of the Global Day of Coderetreat (my first ever) and already I can't wait for the next one.
The day is very difficult to describe without sounding like a cultist, to be honest :) There's something very awesome about being able to slowly, precisely and correctly write code without having any pressure to just 'get it done'.
For those that aren't familiar with the process, ours went something like this: partner up, write some code for 45 minutes then delete it. Add a constraint and repeat. While the goal seems to be "implement Conway's Game of Life", the actual goal, in a way, is to never quite get there :)
For our particular retreat, we started with basically just trying to implement GoL correctly. This means using TDD properly, and slowly implementing the code bit by bit. My first round I got to do it in Java, which is always fun.
After deleting the code, we added the constraint of 'no conditionals'. This time my 'pair' wrote in PHP and surprisingly enough got to the exact some point in the code as the first round (which I found humourous).
After lunch, we added 'use no primitives' (and 'no PHP' :) ). This time my partner and I decided to use Ruby, which was fantastic as I am an absolute beginner, and my team mate was definitely not an expert. We got to spend some time learning RSpec (for testing Ruby code) and we spent a lot of time simply discussing what the constraint meant. It was definitely a difficult thing to wrap our heads around, but this was the point where I suddenly realised that some of our constraints are not necessarily possible with all of the languages that we choose to use. This was definitely a pivotal moment for me. To be honest, it had been brought to my attention at the end of the first constraint, but this time it was me making the realisation by myself :)
Delete. Break. Try again. This time using JS and 'only return self'. Delete. Break. Back to Java and 'no more than 4 lines per method, ping pong coding' (and maybe something else). By this time, for sure, I was completely beat. My brain stopped working around 2:30PM and so to be honest it's quite possible that the constraints I listed may be out of order, wrong, or incomplete. Also, by the end of the day (and quite naturally) we were getting less and less code done, but there was more and more conversation around how we would do the code.
While these constraints may seem random or simply designed to annoy, each session ended with some really good discussion as to how these constraints actually make our code more testable, easier to develop (with some practice!) and ultimately better.
Lately I have been reflecting on my time at university. "Youth is wasted on the young", they say, and I believe, sometimes, that "university is wasted on the uneducated". The more I have been able to think about what I learned there, it seems, the more it is that I'm relearning all of these lessons again.
And that's a good thing.
I've also been reminded that I need to extend my knowledge of languages again!
Thanks especially to the City of Summerside for giving us the venue (and gigabit internet to boot!) and all of the organisers (especially Steven Baker and Derek Campbell).
I can't wait for the next one!
Sunday, December 15, 2013
Wednesday, September 18, 2013
Please... No More Rock Stars!
Let me cut to the chase: I'm so sick and tired of seeing people advertising for software developers and using nouns to describe these future employees as something they are not.
As a possible candidate for this position, here's why I don't match what you're hiring...
I'm not a rock star. I don't have any recording deals, and I don't have groupies. More importantly, I don't turn around and leave you in the lurch at crunch time because I would rather do something shady at the hotel when I'm meant to be wowing the fans.
I'm not a ninja. For one I have very little martial arts training. More importantly, I don't come in in the middle of the night and drastically upset things so that when you come back the next morning you wonder "what the hell just happened?!?"
Finally, I'm not Chunk Norris (yes, I just saw this advertised!) I don't think I have to actually say anything about this but I'll tell you what... well, I'm not Chuck Norris.
I get it's all about advertising and marketing and all that crap but as far as I'm concerned, you're trying to impress the wrong people! Software engineers aren't about showmanship. We're not about trying to seem hip and happening and all that. We're about getting it done and doing it well.
I also get that there are some instances when you need what may be defined as a rock star. However, if you're not planning on paying that person a heap of money to always be on the road at conferences, selling your brand subconsciously, then I think you're doing it wrong. Alternatively, maybe, a rock star is someone you're hiring because you're hiring that person... in which case, you're not really going to advertise for them!
As far as I'm concerned, there aren't many people that look at an advertised position and think to themselves "you know what? I am a rock star!". As far as I'm concerned, the people that look at your ad and get their ego stroked that way are exactly the kinds of people you shouldn't want to hire.
Stop please. For my sake. Stop stroking the wrong peoples' egos and stop making yourself look like you're more about marketing than you are about development.
Please?
As a possible candidate for this position, here's why I don't match what you're hiring...
I'm not a rock star. I don't have any recording deals, and I don't have groupies. More importantly, I don't turn around and leave you in the lurch at crunch time because I would rather do something shady at the hotel when I'm meant to be wowing the fans.
I'm not a ninja. For one I have very little martial arts training. More importantly, I don't come in in the middle of the night and drastically upset things so that when you come back the next morning you wonder "what the hell just happened?!?"
Finally, I'm not Chunk Norris (yes, I just saw this advertised!) I don't think I have to actually say anything about this but I'll tell you what... well, I'm not Chuck Norris.
I get it's all about advertising and marketing and all that crap but as far as I'm concerned, you're trying to impress the wrong people! Software engineers aren't about showmanship. We're not about trying to seem hip and happening and all that. We're about getting it done and doing it well.
I also get that there are some instances when you need what may be defined as a rock star. However, if you're not planning on paying that person a heap of money to always be on the road at conferences, selling your brand subconsciously, then I think you're doing it wrong. Alternatively, maybe, a rock star is someone you're hiring because you're hiring that person... in which case, you're not really going to advertise for them!
As far as I'm concerned, there aren't many people that look at an advertised position and think to themselves "you know what? I am a rock star!". As far as I'm concerned, the people that look at your ad and get their ego stroked that way are exactly the kinds of people you shouldn't want to hire.
Stop please. For my sake. Stop stroking the wrong peoples' egos and stop making yourself look like you're more about marketing than you are about development.
Please?
Tuesday, August 20, 2013
Roaming in the US... Now that's the way to do it!
We just got back from a 4 day trip in Boston. Because a lot of the time my wife and I were going to be in separate parts of the city, we really needed to be able to contact each other. Suffice to say, we were dreading the roaming charges!
Having spoken to our current cell provider, we were looking at $1.50 / minute for voice, 60c / message for text and $5.00 / MB for data. A $50 package would have given us 50 minutes, 50 messages and 25MB of data, before going back to charges that were approximately half of the 'non package' prices.
Only 50 messages? The worst thing about that is that it's incoming and outgoing, so really it's only 25 messages in a way. This was still going to be expensive!
We started to think about prepaid SIMs, but trying to organise that was going to be a hassle. That is until I found Roam Mobility.
There is one prerequisite for using Roam and it's the same prerequisite for using other pre-paid SIMs... your phone needs to be unlocked as far as the network is concerned. This is fine for us as we had Nexus 4's that only cost us $50 to begin with :)
So here's the deal: with Roam, you can buy a SIM card for $20 (I bought mine at the local Telus store). Once activated, that card gives you a phone number based in the US (note that it also only works in the US). So long as you use it at least once a year, you can keep that SIM. Once it's activated, you buy a 1, 3, 7, 14 or 30 day plan.
We opted for the 7 day 'Talk + Text + Data' plan and here's what we got:
- Unlimited talk within the US as well as to Canada
- Unlimited text within the US as well as to Canada
- A total of 700MB of data usage (for every day's worth of plan, you get 100MB of data)
How much? $27.95!
So for less than the $50 roaming package from our own provider, we got unlimited talk and text and all the data we needed / wanted. They even tell you how to set your phone up as a mobile hotspot for your laptop!
The coverage was no problem and it was probably the most simple process I have ever used for anything related to telecommunication.
So that's my tip: if you're roaming to the US, get an unlocked phone and jump onto Roam... I can't wait to travel that way again, just so that I can use it again :)
Having spoken to our current cell provider, we were looking at $1.50 / minute for voice, 60c / message for text and $5.00 / MB for data. A $50 package would have given us 50 minutes, 50 messages and 25MB of data, before going back to charges that were approximately half of the 'non package' prices.
Only 50 messages? The worst thing about that is that it's incoming and outgoing, so really it's only 25 messages in a way. This was still going to be expensive!
We started to think about prepaid SIMs, but trying to organise that was going to be a hassle. That is until I found Roam Mobility.
There is one prerequisite for using Roam and it's the same prerequisite for using other pre-paid SIMs... your phone needs to be unlocked as far as the network is concerned. This is fine for us as we had Nexus 4's that only cost us $50 to begin with :)
So here's the deal: with Roam, you can buy a SIM card for $20 (I bought mine at the local Telus store). Once activated, that card gives you a phone number based in the US (note that it also only works in the US). So long as you use it at least once a year, you can keep that SIM. Once it's activated, you buy a 1, 3, 7, 14 or 30 day plan.
We opted for the 7 day 'Talk + Text + Data' plan and here's what we got:
- Unlimited talk within the US as well as to Canada
- Unlimited text within the US as well as to Canada
- A total of 700MB of data usage (for every day's worth of plan, you get 100MB of data)
How much? $27.95!
So for less than the $50 roaming package from our own provider, we got unlimited talk and text and all the data we needed / wanted. They even tell you how to set your phone up as a mobile hotspot for your laptop!
The coverage was no problem and it was probably the most simple process I have ever used for anything related to telecommunication.
So that's my tip: if you're roaming to the US, get an unlocked phone and jump onto Roam... I can't wait to travel that way again, just so that I can use it again :)
Thursday, August 8, 2013
Not Going to NEPHP? Try Pandacodium Instead!
You may or may not have noticed that I'm heading to Boston next weekend for the Northeast PHP conference. You also may or may not have realised there was a little sarcasm in that last sentence.
But what are you going to do? Where are you going to be? What if I told you that you could attend a hackathon instead?
Well?
Pandacodium is an online, world-wide hackathon that's going to run for 48 hours starting on Friday, August 16th at 7PM.
I don't know if the theme changes every year, but either way, this one is going to be focussed on developing real-time web applications.
Although I've never been to a hackathon, and I'm probably going to miss the one in Charlottetown in a few weeks, it's something that I'm itching to do... and now you all can! Please, let me live through your adventures :)
Seriously: I urge everyone that can to take this opportunity to flex your coding muscle, stretch your comfort zone, meet new people and more importantly have a heap of fun! Head over to http://pandacodium.ca right now and sign up. If I weren't going to Boston, I'd be doing this.
Let me know if you're going to go in it... I want to hear all of the gory details!
But what are you going to do? Where are you going to be? What if I told you that you could attend a hackathon instead?
Well?
Pandacodium is an online, world-wide hackathon that's going to run for 48 hours starting on Friday, August 16th at 7PM.
I don't know if the theme changes every year, but either way, this one is going to be focussed on developing real-time web applications.
Although I've never been to a hackathon, and I'm probably going to miss the one in Charlottetown in a few weeks, it's something that I'm itching to do... and now you all can! Please, let me live through your adventures :)
Seriously: I urge everyone that can to take this opportunity to flex your coding muscle, stretch your comfort zone, meet new people and more importantly have a heap of fun! Head over to http://pandacodium.ca right now and sign up. If I weren't going to Boston, I'd be doing this.
Let me know if you're going to go in it... I want to hear all of the gory details!
Monday, July 29, 2013
NEPHP 2013: Don't Be STUPID, Grasp SOLID
This may be getting boring, but too bad... there are so many talks to see at Northeast PHP this year!
Anthony Ferrara is giving a talk this year titled 'Don't be STUPID, Grasp SOLID' (see http://northeastphp.org/talks/view/33/Don-t-Be-STUPID-Grasp-SOLID and https://joind.in/talk/view/8907).
This is another one of those talks that I think I need to concretely square away some issues I've been having with my code lately. When I first started writing code, I always had small, compact functions. However, somewhere between here and there I lost my way.
I started cramming random meaning into particular function parameters, for example. Depending on the combination of 46 different parameters, the function would do one of 2,500 things... just because it seemed right to use the same function name. This may be because of PHP's lack of function overloading, or it may not. Either way, I realise now how stupid it all was.
Elsewhere, my code started pulling in random static classes, using singletons from static function calls and the like... this is all bad news when you start realising the benefits of unit testing, for example, but in reality, and in my older age, I've realised it's just bad news no matter what.
So like I say: I've started to come back around to smaller functions and classes and already it's made a huge impact on the way I work. I can honestly say that changing that particular approach to my coding has probably saved me more time and given me more safety than any other 'tweak' I've done to my 'style' in the last 5 years. And now that I have a taste for it, I'm looking for more!
Other than the actual topic, I've heard some awesome things about Anthony himself, so it'll be great just to see him talk anyway.
Hopefully you will too!
Anthony Ferrara is giving a talk this year titled 'Don't be STUPID, Grasp SOLID' (see http://northeastphp.org/talks/view/33/Don-t-Be-STUPID-Grasp-SOLID and https://joind.in/talk/view/8907).
This is another one of those talks that I think I need to concretely square away some issues I've been having with my code lately. When I first started writing code, I always had small, compact functions. However, somewhere between here and there I lost my way.
I started cramming random meaning into particular function parameters, for example. Depending on the combination of 46 different parameters, the function would do one of 2,500 things... just because it seemed right to use the same function name. This may be because of PHP's lack of function overloading, or it may not. Either way, I realise now how stupid it all was.
Elsewhere, my code started pulling in random static classes, using singletons from static function calls and the like... this is all bad news when you start realising the benefits of unit testing, for example, but in reality, and in my older age, I've realised it's just bad news no matter what.
So like I say: I've started to come back around to smaller functions and classes and already it's made a huge impact on the way I work. I can honestly say that changing that particular approach to my coding has probably saved me more time and given me more safety than any other 'tweak' I've done to my 'style' in the last 5 years. And now that I have a taste for it, I'm looking for more!
Other than the actual topic, I've heard some awesome things about Anthony himself, so it'll be great just to see him talk anyway.
Hopefully you will too!
Saturday, July 27, 2013
NEPHP 2013: You Can UX Too: Avoiding the Programmer's User Interface
Just another talk I want to see in Boston this year at Northeast PHP 2013...
This talk is on a track that I must admit, I know pretty much nothing about. And to be honest, until recently I've tried to avoid it. But no longer! User Experience (UX) is definitely something I need to be on top of and conferences, talks and workshops are a perfect way to get on the way.
With this in mind, I'm looking forward to the talk 'You Can UX Too: Avoiding the Programmer's User Interface', to be given by Eryn O'Neil. If you want details, check out either http://northeastphp.org/talks/view/187/You-Can-UX-Too-Avoiding-the-Programmer-s-User-Interface or http://joind.in/talk/view/8931.
The reason this is going to be on the top of my 'UX exposure list' is specifically because it speaks directly to me. I am a programmer, no doubt about it, and this talk is addressing the simple (and dare I say obvious?) fact that UX is a problem for programmers. I'm really looking forward to getting an idea of how to take off my coding hat and stick on my UX hat easily, and hopefully more often.
For what it's worth, I'm not saying that I don't want to see any of the other UX talks. On the contrary, this whole realm of software is completely foreign to me and I really need to correct that.
And dare I give kudos to the conference itself for making sure to include this UX track? It's going to be fantastic to have such a wide audience at the one place... I'm looking forward to getting to talk to these 'UX-aware' attendees and finally being able to get an idea of how it all works.
Thursday, July 25, 2013
NEPHP 2013: Agile in the Workplace
So another talk I'm looking forward to seeing this year at Northeast PHP is 'Agile in the Workplace', to be given by Michael Stowe (more details at http://northeastphp.org/talks/view/57/Agile-in-the-Workplace and https://joind.in/talk/view/8914).
To understand why I'm going to find this talk interesting, you have to know that I tend to be one of those people that learns way more through practical examples than I ever do through theory.
The concepts intrigue me, however all the reading in the world is not going to make it all fall together without real life exposure. Unfortunately that would mean finding and working with a group that practices agile correctly... which is not really an option for me. So instead, I'll take the second best thing: I'm going to listen to someone talking about it, and no doubt listen to stories about practical examples.
I'm looking forward to hearing the good and the bad about the process, and ways that I can avoid following those bad practices. For what it's worth, the reason I highlighted the word 'correctly' above is because from what I understand, 'agile' can very easily be a word that gets thrown around by groups, without actually being agile. Every story I've heard about these groups tends to imply that there is a very painful lesson to be learned about the difference between being agile and thinking you're being agile.
Hopefully, too, there may be a way to correctly ease a team into an agile workflow, which I believe would help everyone by being an evolution as opposed to a revolution.
Either way, I say 'viva la agile'. Or something like that... My French is not so good.
To understand why I'm going to find this talk interesting, you have to know that I tend to be one of those people that learns way more through practical examples than I ever do through theory.
The concepts intrigue me, however all the reading in the world is not going to make it all fall together without real life exposure. Unfortunately that would mean finding and working with a group that practices agile correctly... which is not really an option for me. So instead, I'll take the second best thing: I'm going to listen to someone talking about it, and no doubt listen to stories about practical examples.
I'm looking forward to hearing the good and the bad about the process, and ways that I can avoid following those bad practices. For what it's worth, the reason I highlighted the word 'correctly' above is because from what I understand, 'agile' can very easily be a word that gets thrown around by groups, without actually being agile. Every story I've heard about these groups tends to imply that there is a very painful lesson to be learned about the difference between being agile and thinking you're being agile.
Hopefully, too, there may be a way to correctly ease a team into an agile workflow, which I believe would help everyone by being an evolution as opposed to a revolution.
Either way, I say 'viva la agile'. Or something like that... My French is not so good.
Subscribe to:
Posts (Atom)