Mar 30

Anyone whose coding work tends to lean towards the more advanced or low-level should check out Google Code University. Topics covered in this series of presentations include language corner cases, web security, distributed systems and AJAX. Good stuff, worth taking a look at.

Mar 29

Over the last couple of years, I developed quite a strong professional network in Dublin, which was working quite well in getting contract IT work. With the recent move to London, I have found that I may now have to fall back onto more traditional forms of hunting for contracts, i.e. through agents and job boards, even though I intend to keep pushing on other fronts.

It has quickly become apparent that the City is quite a different environment due to its scale, and that the traditional job board search methods are simply not up to the task. Consider the following job stats:

  • London has a population of 18 million, Dublin just over 1
  • Contract stats from listings on CWJobs/Jobserve in the last 2 days using the following search terms:
    • Java 44/110
    • .Net 57/120
    • Spring 30/27
    • Agile 24/33

Lots of contracts, contractors, agents and potential clients. Work out what you will about the environment from the numbers. Separating the wheat from the chaff takes time, and anything that makes the process too difficult for any of the parties involved is going to get skipped over.

First thing job boards.

With such a huge turnover of work, you need to keep track of stuff that you have seen before as roles get listed on an ongoing basis. You also need to make sure that any search automatically drops out stuff that’s not relevant. You probably don’t care about release management jobs or C++ if you are looking for Java work, and a lot of emphasis is placed here on industry experience within a particular niche (a simple filtering mechanism for clients).

RSS feeds are the way of the future here. I set up a couple of complex boolean searches on Jobserve and set up feeds to fire off to my Google Reader. This way I don’t have to keep a big spreadsheet of stuff that I have applied for, and don’t have to sift through things that I have already seen in search results. Hours of dead time freed up for more productive activities. Before I set these up, it was a battle just finding relevant work to apply for.

I don’t really like this form of contract hunting as it is inefficient at this scale, and certainly prefer the networking model, but any strategies that make this easier are worth working out.

Adage have a great article that I found my way onto from the LinkedIn blog, about how you can use social networking sites to supercharge the process. I think it’s probably a much better way to operate. Updates coming soon.

If you are in London and looking for someone smart who gets things done, knows how to communicate, has the ability to get people exited about stuff, with a Java background to technical architect level, feel free to contact me through LinkedIn.

Mar 26

I have been meaning to jot down my thoughts on this one for a while, but when I saw this article on First Steps into IT, I figured that there was no better time.

Programming is a tough career to get into. When I was getting into the industry for the first time I was frustrated by what I call the Big Problem. Nobody wants to hire a graduate without any experience, and you can’t get experience without having a job. Catch 22. Or so I thought. So how do you get around this?

You can apply for graduate recruitment. Big companies will do a drive at the end of each school year to get the best graduates. There are two catches,

  • It is the best people that they are after. Most people will not get a job that way. Not because they aren’t any good, but because the very idea of best is so subjective.
  • If you are the best, this probably is not what you really want to do. Smaller companies will give you more experience, of a better quality. I have found that in big companies, you get bogged down into doing one thing. Why would you want to do that when you can work in a place where you get to do a bit of everything? More on this in another blog post.

On alternative mechanisms.

If you read the popular IT press you will read a bunch of stuff on certifications and how they can help you. Most of these are provided by vendors and in my experience, do not help that much. A couple of reasons:

  • Most people don’t know what they are. It’s hard to impress a hiring manager if they have never heard of Brainbench or SCJP. The IT press is a notorious echo chamber. Take everything you read with a pinch of salt.
  • It can be pretty easy to find brain dumps of the test questions on the net, so the value of these tests can be watered down. This is a generalization, but true especially in the case of Microsoft certifications.

I have a number of Sun certifications, but they are an addition to a set of experience, that demonstrate that you know a particular technology. They probably will not get you hired ahead of someone with experience, but they might get you over the line if you are competing with someone on par.

Because of the climate of outsourcing in Australia at the time, and a bit of luck, I somehow managed to get myself onto a practical year program that IBM was running for pre-”final year” Software Engineering students. I did some pretty cool basic work when I was there, but it was enough. When I came out of university after I had finished my course, I now had experience, did not have to go through the graduate programs and ended up in a cool job for a small consultancy. This sort of stuff is great if you can get it, but I stumbled upon it through luck rather than any focused plan.

Those sorts of things are the standard options that everyone talks about. We are in the age of participation. Communities are all the rage, and there is nothing to stop you working within them.

Open source. A friend of mine commented that within one month of working in an open source project, you will learn more about technology than in a year of commercial work. The people that you get to work with and learn from are an awesome resource. You will learn about how to structure real world applications, learn about issues in production as well as best practices. You will also make contacts, which are the single most important thing in any career. These people may be able to recommend you to their colleagues, put you in touch with someone doing similar work commercially near you, or they may have work within their companies. Contributing also demonstrates to a potential employer that you are a self starter, and are willing to learn off your own initiative. Find an area that you would like to work in, check out a corresponding project (check out Apache, OpenSymphony, CodeHaus, and other resources like Ohloh for professional open source projects), and kick the tires, write documentation, report bugs, contribute some fixes and you will be amazed at where it will lead you.

Professional networking is the name of the game. User groups are a favourite of mine, as I am involved with running the Java User Group in Dublin. These bring together groups of professionals working in the industry to talk about new technologies, issues and generally to meet like minded folks. We are generally pretty friendly, and won’t bite your head off if you ask us simple questions. The people around you are an invaluable resource. We are there to help each other. Turn up, while you are still at uni. Aside from learning about some cool stuff, there are often guys looking around to take some help on, and they will contact people that they know before hitting the market. Read What Colour Is Your Parachute if you want to know why. Volunteer to help out with the group, take minutes, run their site, help out with podcasts. Once again, engagement is the name of the game. Rocking up and asking for a job at your first meeting though is not going to help you. Sun and Microsoft have associated user group programs that are well represented, and Meetup.com is a great one for finding other developer groups in your area. If there isn’t a users group around you, start one!

Start a professional blog about your experiences with technology, documenting what you are doing, the things that you are involved in etc. Use it as an example of your work, and the sorts of things that you are involved in. It’s an awesome resource to potential employers in the hiring process in that they can find out who they are dealing with. Start a podcast, do some screencast technology demos. Most of all, get yourself out there. People who are excited in technology and participate are the future. 90%+ of the competition will not be engaged in the same way. Get people to want to hire You, not just a butt to fill a seat.

Alternatively, start your own company. Skip the nonsense, do the research, and do it. There is no better way to get experience.

Jumping through hoops for graduate recruitment drives, sitting certifications and applying for jobs randomly (the shotgun approach) are hard work, demoralizing and generally will not help. However, if you apply yourself and engage in community, you will find the start to your career not only easier and more rewarding, but learn heaps of cool things and meet great people along the way.

Mar 20

Another contract cycle approaches and the question of the CV/resume has once again reared it’s head. The job boards are full of agency ads with instructions that resumes be submitted in MS Word format only.

Often when I have turned up to an interview, I have encountered printouts of my resume with my contact details removed and a huge logo of the recruitment agency slapped on the front. The logic being that the agency does not want the employer to contact me later on without them involved. While I appreciate the logic behind the practice, and have no problem with submitting a resume without contact details, I take objection to it being done by someone else.

A CV is a copyrighted work. This means that I as the author regulate how it is used. While I grant the right of distribution for the purposes of selling my services, I do not grant the right for it to be edited.

Changing the content of a resume often tragically messes up the formatting. The purpose of the document is as a sales vehicle for my services, and lot of time, money and effort has gone into its production. I object to the document being updated by someone who does not have the same intrinsic interest as myself in that work. I take pride in my work, and my resume is representative of this. I do not want for it to look like a dog’s breakfast when I am talking to someone at an interview.

Pasting an agency logo onto my CV without my permission is at the very least undesirable. I do not work through any given recruitment agency before a contract is signed, and do not wish to be represented as such. I am quite happy to put a footer into the document saying that it is prepared for their use, for future reference by their client, but do not wish their brand to be otherwise advertised through it. This practice is dubiously ethical as it makes use of the device of Social Proof, discussed by Robert Cialdini in his book “The Psychology of Persuasion”. The practice effects the perception of the agency through associating it with the skills of the contractor.

As a rarer but nonetheless important reason, I have encountered cases where agencies have changed key terms within the applicants’ resumes in order to make them more sell-able. Often, this is transparent and embarrasses all parties involved. Furthermore, misrepresentation of this type constitutes fraud, is illegal, and can be used as a reason to terminate the contract in the future if the applicant is successful. This is not a risk that I wish to be exposed to.

I understand that there are certain requirements for job applications through agencies. A resume must be able to be read, searchable for future reference, and should not have the applicant’s contact details. In accordance, I will now distribute it in Adobe PDF format only. PDF is a de-facto standard for document distribution, is searchable and protects my rights as the copyright author.

What is your experience? Have you encountered any of these problems, or any resistance to such a stance?

Mar 20

Isn’t it always the way, when you want to blog other stuff comes up? I had intended to write up a final post about the last day of Tech Days, but the weather has been great to get the kite out and the holiday is winding down so…

Day 3 was pretty cool, as I went to a few tech sessions related to stuff that I don’t normally work with, as I do web apps most of the time. The Netbeans sessions were pretty good, with a great demo of the Matisse GUI Builder. I think that with Netbeans 6, Java has finally got it’s answer to the VB/Delphi mode of development. The introduction of the Swing Application Framework (JSR 296) and Beans Binding (JSR 295), really takes away a lot of the grunt work in building small to mid sized desktop apps, and Netbeans does a great job in hiding a lot of the initial application setup code. It’s really nice stuff, and to be honest it really drops the barrier to entry. At some stage you will inevitably need to get into the bowels of Swing, but Matisse gives you a great leg up and means that the learning curve can be that little bit easier. The fact that basic CRUD type applications are pretty well automatically generated is a huge help and lets you get down to doing the interesting bits.

I had the pleasure afterwards to turn up to Jim Weaver’s presentation on Java FX that give a great overview of how the technology worked from an architectural perspective. The user interface is defined using FX Script, which has a weird nested CSS-ish feel to it and is used to define your interface, event handlers and UI transitions. This is then compiled down to a Java app. The apps themselves are distrubuted either as applets (remember those?) or via Webstar/JNLP and talk to the home server via JSON invocations, which means that anything can support the interface on the server side. It would be cool to have a play with sticking a Grails app on the back. Nifty stuff.

The last session was no less interesting, as I am finally getting my head around this ESB stuff! I’ve always found the concept a bit esoteric, not having worked in an environment that uses a bus and it’s not something that lends itself easily to kicking the tires. SOA initiatives that I have worked on in the past involved point to point hooks, but I can really see why the ESB concept might come in handy. It’s very easy to get bamboozled by talk of federation, mediation and orchestration. Essentially the idea is pretty simple - hook up everything to a massive pipe, define standard messages and worry only about communication with the pipe itself. The devil, as in any such thing, is in the details - but essentially the pipe handles things like transactionality, message delivery, data transformation, enrichment, routing and the like through underlying mechanisms. You need to understand how to use the specific pipe in question, as with any such piece of infrastructure, but the payoff looks really good. I have not yet come across a decent guide in layman’s english (not a marketecture white paper) as to how to get everything humming, but I feel like the pieces are falling into place.

Winding down the Australia trip this week for my migration to London. Back to reality - CVs, agents, company setups, finding apartments and poms ;) All I have to deal with is a flood of contractors on the market because of the sub-prime debacle (wasn’t Basel2 supposed to make sure this nonsense wouldn’t happen?) and the April budget rounds. Bring it on!

Mar 5

Beautiful day in Sydney.

I came out of this morning’s Tech Days session on Java ME applications with a whole bunch of questions - they’re much more fun than answers.

The latest version of JME now contains heaps of APIs for everything from geolocation to bluetooth and is supported by millions of mobiles, and will continue to be so. The implementations are open sourced through phoneME (CDLC) and phoneME advanced (CDC). Anyone who has played with Java ME will soon realise that building apps is a real pain in the ass as every device supports different versions.

Now the Open Handset Alliance led by Google comes along with Android derived from Java but a different platform altogether, even though some of the java.lang libraries are supported. It lauds a bunch of features like geolocation and bluetooth (which are already part of JavaME). There’s a lot of feel-good talk about openness and freedom.

To me it seems that it only compounds the platform/version fragmentation issue and will become a problem to application developers who try to reach the largest possible market. This was an obvious concern at question time. People don’t know which horse to back here when starting out in mobile development. Chances are that app developers are having a bigger problem. Is this another HD-DVD/BlueRay scenario?

What features does Android provide that JavaME does not? On the surface to the casual observer they are almost the same.

But the big question here is why is OHA/Google going against the grain and building their own mobile platform?

Java ME use is still growing and expanding to new embedded devices like Sun Spots. Companies don’t invest millions on technology just for the fun of it. Technology uptake is painfully slow in the wild and even if every vendor dropped JME today in favour of Android, it would take years for it to get a majority of market share. Having said that, it may not be that Android’s end goal is mobile product or technology specific at all. Are Google et al attempting to force licensing change from Sun? Maybe Android set top boxes? It looks like a stepping stone that is part of a larger strategy.

Food for thought - the best thing to come out of conferences.

Mar 4

After half an hour of walking around trying to determine where exactly the convention centre IS in the Olympic complex (signage would be really nice), I finally managed to make it to the Melbourne satellite event of the Australian leg of Sun Tech Days. I love events like this; the interchange of ideas and pointers in new unexplored directions really get the mental juices flowing. I was a bit late, but still managed to catch most of James Gosling’s keynote.

The highlights for me were many, and they’re going to take some digesting.

James destroyed the “Java is slow” myth (anyone who still believes this hasn’t fired up a new JVM lately). Java runtimes are incredibly optimized with test results showing performance equalling or beating C/C++ equivalents.

  • Linpack -2%

  • Scimark + 4%

with GC being a lot faster than malloc/free.

The reason why dynamic compilation beats its static equivalent as the JVM is able to tweak performance depending on the processor type being used, even in the same type of architecture. This enables the JVM to take advantage of the strengths of AMD chips over Intel and vice versa.

There are lots of good things coming up in Java 7, both in the core and on the mobile. I will be detailing them a bit more once I get around to working out what all of the JSR numbers I scribbled down meant :P. Too fast with the old Powerpoint.

The question of RAD tools came up. James quantified it with a question – what exactly do you mean by rapid? Is it time to demo or time to production deployment? I had never really thought about this, but it does make sense. Java is being focussed on time to production. The reason for this blew my mind. Venture capital provides funding in 3 month lots only. In that time you need to turn an idea into a production grade system.

3 months from idea to production.

As developers we need to scout out the enabling technologies behind this kind of turnaround and work it into the toolbox. And enterprises need to have a good hard think about why they are not achieving similar results (and no, the answer is not to kill your programmers with 120 hour weeks to do it). This only highlights the discrepancy between small startups and large organizations. I have yet to see anything get put in production in less than a year in a large institution.

The other highlight for me was not what was presented, but rather what could be gleaned from the feedback questionnaire. This was one of those basic “who are you, what do you do and what are you using to do it?” numbers. It listed a whole bunch of technologies that Sun are presumably keeping their eyes on. The stand-outs? RoR, Groovy, Grails and Wicket. If you want to skill up on what’s going to be big on the job boards within the near future, these would be a very good start.

The things I’m looking forward to playing with as a result of this morning? JMaki – a super-framework and Netbeans plugin that glues of all the best AJAX frameworks together (mash-ups faster than you can say Dojo), and of course JavaFX – super sweet user interfaces done as simply as a web page.

Oh yeah, and watch out for an announcement in the very, very near future about PHP and its relationship to Java.

Tomorrow in Sydney!

Mar 3

I am in Australia at the moment, hanging out, enjoying the weather, kite surfing and the company of friends. Due to messing up my dates with travel and such, I’ll be at the Sun Tech Days in Melbourne tomorrow and in Sydney on Wednesday and Thursday. It’ll be interesting to see what the Sun folks have lined up as far as event go, and how it compared to my experience of the IJTC event that we ran in Dublin last year. If you’re at either of those and see a really mellow looking bloke in shorts, that’d be me. Stay tuned for event photos.