Java To C# – There & Back Again

Many years ago, I used to be a Java developer. I liked it, and even held elitist attitudes against .NET when it first came on the scene in response to Java. At the time I thought, “there was Microsoft years behind yet again, not innovating but merely copying the market leader!” Later, the organisation I was working for made “strategic” technology changes to go with the whims of new management (without consulting the team of course). Before I knew it, I was developing in C# on the .NET stack. Kicking and screaming all the way, but mind you, professionally kicking and screaming all the way.

Anyway during the recent Christmas break, I decided to get my Java back on and have a play with native Android on a pet project. Yes I do realise that Android has its own implementation of Java, only adopting its syntax and semantics. So for the purpose of this post, I will focus on the language and not the platform or Android specifics. Within several hours however, I already had a list of Java features that were frustrating me or I was yearning for! Without further ado …

1. Decimal Numbers
I was shocked that in the 10 years or so I have been away from the language on a day-to-day level, Java still does not have a more elegant and concise way to deal with decimal numbers. They are still second class citizens – I don’t want to have to deal with a boxed object every time I work with currency! The decimal type in .NET is much more convenient to work with. Surely Java could provide arithmetic overloaded operands for BigDecimal at the very least?!?

2. Properties and Object Initializers
While properties and object initializers are really just “syntactic sugar”, I do appreciate how they make code more concise. More specifically with properties, there is no longer the need to have explicit setter/getter methods to access private fields, while object initializers alleviate the need to have multiple constructors catering for every parameter permutation. Admittedly, if I hadn’t gotten used to this syntax in C#, I probably wouldn’t have noticed their absence in Java. But I have, so I did.

3. Implicit Typing
I surprised myself when I realised I missed being able to declare “var” instead of the explicit type. When the feature was introduced to C#, I was skeptical before slowly embracing it. I know this is a contentious issue and there is still a debate on it … but these days I know how I prefer to code!

4. Asynchronous-ness
Since .NET 4.5 onwards until facing life in Java without them, I took for granted just how awesome the async/await operators are. It’s quite impressive when you look in depth at the work Microsoft have done to make asynchronous programming so easy – the compiler generates a state machine for each async declaration! Of my wish-list for Java, this is admittedly the most ambitious, but it would certainly be nice.

I never thought I would say this back when I was primarily developing in Java, but I really like C#! It is no longer a necessary evil forced upon by circumstance, but now my language of choice. As it stands today, C# is more concise, elegant and progressive than Java. Furthermore if you look at the history of release cycles, Microsoft is evolving and iterating the language faster than Oracle. As such I have every confidence that C# will continue to provide a great developer experience for the foreseeable future. However, if there is one thing I have learnt in my time in the industry is to not be dogmatic about technology, as demonstrated by the swinging fortunes of Java and C#. But for now, C# FTW! ūüôā

Badge Collected – MCSD (Web Applications)

I know you have all been on the edge of your seat wondering why I haven’t been blogging recently! Well, I have been using my spare time to prepare for the “MCSD – Web Applications” certification, which I successfully completed yesterday. What a better way to get back on the blogging train than by quickly writing about my experience of the certification process!

For me, the biggest takeaway of doing this certification is that it provided a framework for learning and a tool for self-improvement. I also set myself a goal to finish it by the end of June. Without such catalysts, my natural tendency is to learn in an ad-hoc manner, and typically only as much as I need to for upcoming tasks at work. In studying for the exams I became familiar with technologies I didn’t even know existed previously (e.g. WCF Data Services or Entity SQL). To put it another way, I didn’t know what I didn’t know before! As a consultant that is expected to be at the top of my game and could get thrown anywhere in the Microsoft stack with minimal notice, having a prior understanding of everything in the toolbox certainly does not hurt. Furthermore, knowing how the range of ‘lego blocks’ can work together enables me to effectively design elegant solutions with different approaches – not just the way I may already know.

Some may suggest that in the age of intelli-sense and Google whether it is necessary. To be honest, during the grind of studying I asked myself that question too as I tried to memorise the third parameter on some function I was unlikely to ever use. I don’t know how much detail I will recall in future, but I am confident I will remember the key concepts of technologies I came across. It also gives me sufficient background knowledge to quickly navigate many technical problems effectively. I’m not suggesting I won’t need Google in future, but I dare say I won’t need it to learn ideas for the first time in the ‘heat of battle’ with a deadline looming.

Overall, while it took more time and effort than I originally expected, I am really glad I did it (I did take the time to write small snippets of code or click around the recesses of Azure I hadn’t previously.) Admittedly, I’m probably also one of the rare few that actually like to read the manual before getting a new toy or tool. I also happen to enjoy the process of learning and acquiring knowledge, if not necessarily studying or sitting for exams. There is an adage that ‘when you have a hammer, everything looks like a nail’ … as a craftsman, I am now much more familiar with the range of tools at my disposal so I won’t need to use the same ‘hammer’ for every job!

But for now, I am going to delete the hundreds of MSDN and other bookmarks I accumulated during the course of my study! ūüôā

What Makes a Good Developer Blog?

When I was writing one of my recent posts, I thought to myself – “what makes a good blog for a developer?” So out of curiosity, I began to do some quick research on the matter. Somewhat surprisingly, while there was a lot of advice for blogging in general and some for tech gadget-y blogs, there is not as much targeted specifically for developers. I don’t pretend to be a subject matter expert on the topic nor provide any original insights here, but for personal reference if nothing else, I have summarised the key takeaways from the sources I found to be most useful.

1. PluralSight – “Get Involved”
Full Course:

This is a PluralSight course by Scott Hanselman and Rob Conery. Apart from blogging which is my focus here, the topics covered included Twitter, GitHub, StackOverflow and user groups. The content even included the rudimentary mechanics of setting up a blog for absolute beginners, and also broader career considerations for developers. Below are the nuggets I noted for myself as I was watching it.

Scott Hanselman
According to Scott, there are 2 types of blogs.
1.  A how-to, guide or documentation supplement ‚Ķ these should:
–  Be detailed and clear
–  Link one concept to the next
–  Solve a problem
2. An opinion or ‘op-ed’ ‚Ķ these should:
–  Contain concise explanations
–  Backup your opinions
–  Not rant
To ensure his words always add value and have purpose, as Scott writes he continually asks himself “SO WHAT?” That is, he repeatedly questions the relevancy of his writing.

Rob Conery
Rob describes his characteristics of good and bad blog posts.
1. Good:
–  Write what I care about
–  Do so truthfully
–  Infuse personality into writing, while showing skill with words
2. Bad:
–  Being overly dramatic or using cliches
–  Trying to sell or conform to something
–  Trying to manipulate or being over the top
=> ‘Dishonest writing’
Good feedback once given to Rob – ‚ÄúI can hear your voice so clearly – it’s like you’re talking to me.”

Jeff Atwood
Jeff’s thoughts on blogging are:
–  Tell a story
–  Should sound like something I would say.
–  “Is this the way I would say it?”
–  “Does it sound like writing, or does it sound like talking?”
=> Conversational in style

Rob Conery on Scott Hanselman’s style:
His live presentations mirrored his writing style, which contains deep technical detail, witty asides, interesting pictures … and he always learns something new.

Rob Conery on John Gruber’s style:
Minimalistic … sometime his posts contains contain quotes with very few words of his own but they always make a strong point.

Rob Conery on Jeff Atwood style:
Synthesises disparate sources into something new.

2. Simple Programmer – “How Taiseer Joudeh, Built an Incredibly Successful Technical Blog in 14 Months”
Full Article:

Thanks to my colleague @EmadAshi for pointing me to this article where John Somnez interviews Taiseer Joudeh. It is a quick read and very informative, with the key takeaways for me being:
–  Be passionate about your topic – if so the content will come and it won’t seem like ‘work’
–  Taiseer picked a niche area to specialise in
–  Use your own words and writing style – authenticity
–  Be consistent in how often you blog
–  Also has other good tips for promoting your blog – you can read these for yourself if you are interested! ūüôā


My First 6 Months @ Readify

As of today, I am no longer on probation at Readify. Happy days!!! With this milestone, I wanted to take a few moments to reflect and share my experience of the first six months in the business.

Going into Readify I knew I would be surrounded by brilliant minds, but I didn’t realise how good it would be to learn and work alongside them. At first it was such a challenge to not be intimidated but I could see the continual opportunities for growth. While¬†I hadn’t previously given much credence to certifications or even MVPs, of which there are an extraordinary number of at Readify, I quickly changed my opinion after seeing them operate. It has certainly inspired me to work on the¬†depth and breadth of my own technical knowledge. As such I have committed myself to obtaining a number of certifications that interest me, starting with a MCSD in Web Applications. Fortunately, the company has¬†good¬†provisions for professional development to support this.

While the team all know their stuff technically, what differentiates Readify from many other technology companies is the emphasis on leadership, teamwork, influencing and soft skills. I have previously been in environments with many incredibly smart people and have also been in environments with many influential and charismatic leaders. However, it is certainly rare to have so many technologists who are articulate, influential and also enjoyable to have a few drinks with! I have particularly enjoyed working with the Principal Consultants. It is obvious almost immediately why they are where they are, as they can always seemingly communicate ideas quickly, readily and convincingly with only a few short sentences.

Another observation which I believe separates Readify from other organisations I have worked for is their desire to promote on merit. In the past, I have felt that often the wrong people get recognised by seemingly only using their social or political skills to climb the corporate ladder. While building trust and camaraderie with your team will never go astray, the emphasis at Readify does appear to be actual job performance. More importantly for myself however, while I may not currently be a Principal Consultant, I am encouraged to be as good as I can be and am consistently empowered, supported and shown how to improve. Other organisations I have been at expect the best people, but with no idea how to *produce* the best people. At Readify though it seems the main ceiling is myself and how much effort I am willing to invest to mastering all aspects my craft.

Finally, the company’s annual kick-off was certainly an eye opener and highlight for me, which was held soon after I started. What I now remember most vividly after several months was how executives admitted mistakes and addressed how they would rectify¬†them. This was done openly on stage with little sugar-coating. In my experience, management tended to not admit mistakes until it was too late with¬†half of the company suddenly retrenched.¬†Alternatively, mistakes¬†were swept under the carpet and never talked about. Since kick-off, I have seen management continually ask for feedback from the entire company and then diligently attempt to follow through to make it a stronger organisation and a better place to work. The results may not always please everybody, especially with such a diverse and intelligent crew with strong opinions, but it is definitely not for a lack of effort or desire.¬†I remain impressed by the genuine and transparent way in which management conduct themselves.

Overall after six months, I am certainly enjoying the challenge, culture and the environment that Readify provide. With the benefit of hindsight, of the opportunities that presented themselves to me at the time, I have no doubt I made the right choice with Readify! It has been a long time since I genuinely looked forward to coming to work each morning.

Goodbye, Old Technical Books!

After recently doing a clean up of my study, I re-discovered a bunch of my old technical books. Exciting, riveting, blog-worthy stuff I know! ūüėõ So, I thought I would indulge in a few quick minutes to reflect before they hit the recycle bin. These timeless classics included:

  • Various early versions/editions of “Java in a Nutshell”. My first job in the industry was as a Java developer, which I managed to get while I was still at uni. It was such a blessing and I don’t think I realised how much so at the time – thank you to Peter Moore, Tim Jordan and the crew at Cortex eBusiness for the opportunity! In hindsight, it was such an exciting time in the industry riding the dot-com boom and bust, working on Australia’s leading e-commerce projects and the bleeding edge technologies of the time. I do miss the energy of a start-up.
  • The Python, Perl, Linux and general web titles reflected my desire to improve in the LAMP technology stack many moons ago. I still dabble in Python from time to time, usually for odd jobs on personal projects. Later on, I ended up doing 1-2 years of Perl, although not necessarily by choice … it wasn’t that bad in the midst of doing it, but I don’t think I remember or could even read much of it now! I can still get by with Linux, but tinkering with the OSX terminal occasionally is about as much as I do these days.
  • Please don’t mistake me for being a Photoshop or design whiz seeing “Photoshop in a Nutshell” there! I think it was for Photoshop 5 or something and was one of the more pristine books in the “recycle bin collection”.
  • SQL Server 2000 and Active Directory 2000 “Black Books”. In the early years at my previous organisation, I was a jack-of-all-trades while the IT department was getting established, and thus as part of this ill-defined role I performed some DBA and network admin duties. I have always enjoyed working with databases, and even tutored the subject at uni. I still have much respect for the SQL Server product and think it’s one of Microsoft’s better offerings, and thanks to Readify’s fantastic professional development program, I am planning on finally obtaining my MCDBA next financial year (doing my MCSD at the moment). And while I don’t really enjoy doing network support, the hands on time with Active Directory has proven to be a solid foundation for me as a developer now focused in the Microsoft space.
  • Don’t know how on earth I ended up with a “Visual Basic Controls” book!!! I had managed to avoid VB until very recently when I had to work on some legacy code at a bank.

Now, time to join the 21st century and unwrap my Kindle!