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.

Resource
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!

Summary
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.

No comments:

Post a Comment