Tuesday, 27 December 2011

Catch up New Technologies

Imagine you are assigned to a project which has many new technologies. It’s your duty to learn them as soon as possible to qualify your job. Imagine one day a friend tells you that he’s just discovered a new application framework which helps him to solve his project requirements. If that really inspires you, you have to start learning that framework.

In both cases, you have the need to learn a new thing but you might have some questions: how to start your self-training? How to do it in an effective way? In this article, I’d like to share with you some steps on how to do that.

Your mindset
Learning a new thing is not always easy, you might already know something related to it before or in some cases you even have no clue about it. So it’s very important to ask yourself questions and try to answer them.
What: This must be your first question. By surfing Google or wiki, you will have basic ideas about such technology and also some of its core concepts. Everything goes with its concepts; your first step is to remember the definition and concepts.

Why: Once you’ve known exactly what it is, the next question is Why? Needless to say, people don’t invent new thing unless there’re problems to solve. Thus, this question will help you find out the reason of existence and the benefit of that technology. In addition, asking the why question is also a chance for you to recap your knowledge. Below is an example:
Why WCF ?
You might find this picture with some description about it: “Windows Communication Foundation (Code named Indigo) is a programming platform and runtime system for building, configuring and deploying network-distributed services … WCF provides a common platform for all .NET communication“.
So the answer is clear: with only one codebase, you can make your application communicate in different platforms by doing something.

There’s an interesting point in this picture, the grey circles. Have you ever worked with them before? Have you had any knowledge about them? If your answer is “Yes”, then you’re fine. But if it’s “No”, then you know that there’s a gap in your knowledge (and maybe you’ll fill that gap at your convenience time).

How: Keep going and you’re facing with a tricky question, “How?”.  The example above has a phrase “By doing something”. Here you will find out what it is. Usually, at this step I will not try to dip into the codebase (if it’s open source) but re-scan all the core concepts in order to find out why they are there, what their purposes are. The  answer to the How question will appear in your brain once you comprehend the specific concepts/components and their connections. My best practice is to use the high level architecture diagram. Look at the WCF architecture below.
My interpretation about this WCF diagram is:
- WCF uses different “contracts” (at this stage I mapped the term contract as Interface) to communicate with the Application.
- The communication can be executed via multiple “Messaging” channels.
- I can also adjust the behaviors of the communication channel via options in “Service Runtime”.
- Finally, a WCF application has to utilize a process to run itself. That’s where “Activation and Hosting” comes in.

One note in this step is: your interpretation doesn’t have to be 100% correct. You just try to grasp its inside by using your own words and your own perspective.

After spending some time to capture the basic ideas behind the technology, you have the need to go into detail and standardize your knowledge. That’s why you need a book.

Book: With the accelerating of the Internet, you will have no difficulty in searching a good book. You can ask your friend for recommendation or find some book reviews in many websites. One thing I’d like to recommend is: try to find a book which matches your level of expertise and your need, then work on that book only from the first page till the end. Why should I advise this? Because I’ve been in a situation which I downloaded, let say … 1GB of WCF books and samples, but after all I didn’t read any of them because it’s too much!

So, when you’re looking for a book, choose the one that has enough information. Don’t go with a book of +1000 pages. You will not have time to digest everything in such bible-alike; even if you have time, you will get bored at page 300th or 400th.

Blog post: We’ve all known that in these days, book is not the only available resource to learn a new thing. There’re always “big guys” who publish their thoughts and hand-on experiences via their blogs. Someone told me that “This is the time when everybody can be a technical writer”.

I know some people who don’t even read a specific book but blog posts. They told me that books are too much academic, too much discipline. What they want is real experience, real problem and real solution.  I myself appreciate that idea because we all fight against the real issues and the real business requirements; thus, at the end of the day, a technology is aiming at solving those issues. Reading blog posts is a good way to stand on the shoulders of giants.

However, I think that you should only utilize Internet articles as an extension because they’re not always standard. Let’s take a very simple example: To solve a problem, sometimes you have to hack the system and you might find the solution in a renowned blog … But the solution might be just a work around. At some point, you even have no idea why and how the work around works. Utilizing a book will help you become aware of the mechanism deep inside the technology. I’m sure you will understand the hack once you know exactly how its core works.

Another interesting thought regarding this topic is quality and quantity. I’ve met some guys who often read +200 articles per day. Yes, it’s two hundred! I’m very impressed with the number and really admire them. I did try to reach that number but I failed. The primary reason is that I don’t have enough time. Finally, I’d rather research lesser but know exactly what I do and deeply understand all of them instead of aiming at nice number. So, it depends on your level of expertise as well as your ability to decide which approach is better for you.

Get dirty
Once you’ve finished theory stuffs, now it’s time for practice. Some people think that reading and understanding the technique without hands-on experience is enough. I think that a technical guy who can talk confidently about a technical topic doesn’t mean it’s his achievement (… maybe he’s just read it last night!). What we want is not only talk but also be able to work with it immediately and smoothly.

Open source: This is a very useful resource for you to start getting dirty. There’re many websites which are the hubs for open source projects. You’re free to download source code and free to play with it. There are small projects as well as big projects with production code quality.

However, you should be careful with these open source projects because they might include a bunch of technical frameworks while you just want to learn one of them. I did have that experience. I downloaded a big, renowned open source project which has the framework that I was researching, let say, Orchard which has MVC 3. I got nervous because they applied a lot of things that I hadn’t even heard of before. Finally, I decided to focus only on MVC 3 and didn’t attempt to look at anything else. I tried to understand how they organize their Views, their Controllers, how to feed data to the Models, why there’re ViewModels… After I understood all of that, I downloaded a smaller project which I could play around with the codebase and applied what I’d known into it. That’s the way I utilize open source projects to achieve knowledge.

Your own product: Doing your homework with an open source project is not enough; I’d encourage you to build your own “product”. It doesn’t have to be a big, fancy application with full of documents, scalable and extensible architecture. It just needs to be as simple as a shopping cart. But this time, you will write your own code. You will have a chance to validate your understanding of the technique. You will have a chance to solve real issues with your newbie knowledge. That’s really interesting! Once you’ve built a product successfully from the scratch, I believe you can confidently tell your boss that you know the technique.

Congratulations! You’ve got it!

I’ve read somewhere, there’s a statement:”You should plan to work 60 hours per week in which 40 is for your job and 20 is for yourself”. Achieving a new technique is neither too hard nor simple; it’s all about your perception and methods. Everybody has their own way of studying but I suppose these steps are essential no matter what your approaching style is. In short, there are three phases:
* Mindset preparation by asking questions.
* Resources utilization over the Internet or social connections.
* Knowledge achievement with real projects.

Thursday, 1 December 2011

CV Writing Skill

Have you ever wondered what the most valuable certificate is in IT and especially in Software Development Industry? If you google the phrase "Top IT Certificates", you will get many articles telling you about that. Normally they will be issued by Microsoft, Cisco, Sun and even PMI. Now, I have a question for you. Please ensure you will answer the question before you read the next paragraphs. What is the most valuable certificate for you?

While Microsoft, Cisco and other organizations issue certificates to certify that you are mature/expert in some knowledge areas, there is one special certificate which you can certify yourself. It is your Curriculum Vitae !!! Let’s start the debate if you disagree.

1. Introduction
I have been working with recruitment teams for CV screening and CV selection, I have also experienced with sending CVs of people from my team to client for their selection. I have realized that not many people really pay attention to what they should write in the CV or they don’t really focus while writing the CV. Let me tell you a very simple recruitment process as below.
When recruiting one position, the recruitment team can receive up to 20, 30 or even more CVs. The first step is to screen the CVs by scanning through them quickly to see if there are some words matching the job requirement. After having about … 5 CVs, they will sort these CVs and choose the best 2 or 3 CVs for interviewing.

So, if a CV isn’t written well, it won’t be in the top 5 selected ones. If a CV is written OK but not attractively, it won’t be in the top 3 final ones.

As I mentioned above, the CV is not only for applying for the job, it is also to certify who you are, what achievements you have made, what skills and experiences you have gained and so forth. After all, you should be proud of your CV and it is the only certificate which you have been working hard to get and you are the only one who can issue it.

Having a good working history is very important to have an attractive CV. I hope the series of "Road to Destination" articles could help you on this.

2. Background
If you’re working under software projects, your CV should be structured like this.

Your name
Your expected position
A few paragraphs to describe your entire employment history.
Skill & Certificates
A table or a list of bullets to describe your skills such as C#, Java, SQL Server, Oracle, …
This section lists out all projects which you have joined. Each of them should have a structure as below.
From MMM/yyyy to MMM/yyyy
Project name    

A brief description on what the project is about
Responsibilities: Some bullets to tell what you did in the project.
Technologies: Technologies used in the project
Additional Information
Personal Information
Marital status
Phone numbers

3. Writing Tips
I won’t step into detail of each part, but there are some tips which can make your CV staying on top of the others.

The first part
A CV with a good-looking picture is always more attractive than just plain text. Moreover, your expected position shouldn’t be fixed and should match with the job which you are about to apply for. So, you should update it before sending out.

Profile Summary
The most important part of a CV is the profile Summary. All information which is described in the other parts should be found in this summary part. Instead of reading through so many pages to understand who you are, the reader can quickly have this by just reading the summary in a minute or two. Moreover, the information you put here must be quantitative if possible, otherwise qualitative. Let me give you some examples
Normal writing Recommended writing
I am a strong experienced engineer in Software Development industry. With over 7 years of experience in Software Development industry.
I have worked a lot with .NET web platform and also Java based applications. I have worked with .NET web platform for 5 continuous years and Java based applications for 6 continuous years.
I used to work in big projects with multi-national client. The biggest project which I used to work was 20 people in 24 months. In this project, I had opportunity to communicate directly with people from US, UK and APAC.

Skill & Certificates
Another important part is describing your skills and the same rule is still applied here, try to make it quantitative as much as possible. So, it is recommended to use a table to list out all of your skills followed by years of experience, level of expertise and last usage time. Let’s see one example:
Skill Years of Experience Level Last Used
Java 5 Can advise the other Present
C++ 4 Can work without coaching May-2010
Php 2 Can work under coaching March 2009
Oracle Development 4 Can work without coaching Present

Specifying your role:
In many cases, I see that people didn’t write the right role which they actually played. Instead, they put their company position which doesn’t really reflect to what they did. One specific example:
Role: Senior System Engineer
* Working with client to get their requirement
* Managing the requirement and allocating work to a team of 5 people
* Managing the performance of the whole team
* Investigating and defining the solution
* …

With the responsibilities as described, the role of this person should be a Team Leader or a Project Leader. Most people don’t really understand why a Senior Software Engineer can take ownership of those tasks, but by mentioning a Project Leader or a Team Leader, people will easily imagine that this person has experienced with managing a team and/or a project.

4. Conclusion:
Again, to be on top of the others when applying for a job, your CV must be written attractively (not cheating but telling the truth as it is). Make sure if someone spends a few seconds looking at your CV, they will read the rest.

To achieve this purpose, keep in mind the guidelines below:

* The profile summary is the most important section, all strengths and key skills must be put there.
* Trying to be quantitative as much as possible.
* Specifying your past roles in the right way.
* A good-looking picture.

To be more practical on what I have presented, I have also put here a sample CV.