Tag Archives: Learning

Learning from a variety of source is key

Having going out and meeting a lot more people recently, I can start feeling differences in the way they learn and value learning:

  • Phd students tend to read a lot, and trust the source they read and learn. Many of them view people who disagree as idiots, stupid and not complicated enough
  • Practical and on hands people normally disregard reading, as it took them too long for it. They prefer working on the issue and having a chat with people.
  • Parents overestimate the value of studying in famous high school and colleges.
  • Entrepreneurs love learning from real experience and getting out to the real world, and point to Bill Gates as a solid example.

It is hard to say who is right, and everybody has their own strength and weakness. The reason they got their current achievement is due to those strength, weakness and hobbies.

But overtime, people’s mind change. I think that learning a little bit from any source is a better way to advance:

  • Books help you to look at the big picture, with facts, data and insights.
  • People tell you their stories, what is touching to their feeling. Those stories teach you that everybody feel differently about the same fact.
  • People give you concrete guideline and example, which saves you hours or months of reading and researching.
  • There are lots of things formal education can teach you, but there are lots of things that they cannot teach you. Nobody else can teach you either. You need to go out and experience for yourself. In Information Technology, NoSQL means Not Only SQL, and in education, NoDegree means Not Only Degree.

Opening your mind and your heart to knowledge, insights and understanding. Sometimes, what is factually right does not matter to lots of people. People are never rational. To convince them, you touch their hearts first, and then their mind.

You cannot touch their hearts without a solid fact follows on. That is dangerous for society as well. Trump is an example.

Xamarin – Migration Journey (Part 3 – Legacy code integration)

This is actually the hard part, and the failure at this point actually prevents us from moving towards with Xamarin.

We have been developing with native iOS and Android for 6 years, with lots of legacy code and libraries. Our libraries in both iOS and Android can have up to 20-30,000 lines of code. To migrate all of them to Xamarin would be a huge deal. The only solution is to connect Xamarin with those libraries.

We have libraries in 3 languages: Objective-C, Swift and Java. The first trouble came up when Xamarin could not connect with Swift framework. In our experiment, we took the risk and port 1 of our library into Objective-C. The Swift framework issue should have signaled us that something was not going right.

Anyways, we move forward with our intention to write a real project, working on both iOS and Android, and connect with 5 of our libraries and use 3 cocoapods frameworks/libraries.

For the libraries we wrote, there was not much problem, except the Swift issue mentioned above. However, with cocoapods, when people write code in all shapes and forms, the API definition kept having weird issues that we could not comprehend. We spent 3-4 man days on this, and still wasn’t sure that if the code would work or not.

We will discuss more about what binding issues we have with Xamarin that forced us to change the direction: to try to at least make a workable app with missing elements and libraries working in Xamarin


It is never too late for you


Just read this fantastic post on Quora feeling that I might have some further thoughts about it. I have seen many people obsessing about getting things right at the first time, and if they cannot, they think things are too late. However, what I see is that chances and opportunities are almost everywhere and after every couple of years, those chances and opportunities will come back.

Should I switch what I am doing?

I was once asked by my friend, a developer, if he should switch to Business Analysis or not. He feels like it more than programming but if he tries it and he does not fit it, he would waste 2 years of his career. And this kind of switching is raised a lot by my friends and other people. “Should I switch from a big company to work for startup/startup by myself?”, “Should I switch and try doing this/that?”, “My first job/internship was terrible, it would affect my career…”. The answer is you should not worry.

Any Experience Counts

Any experience that you learn, either from a big company, from a small company, from another job or career would bring you a unique point of view into the new career. If you work as sale and now want to move to programming, your sale knowledge is unique, 90% of programmers I know have no knowledge in sales. Understanding sales and customer would bring you a competitive advantage that most don’t have. And vice versa, if you work as programmer before and switch to be business analysis, you really understand the programming work, you understand the technical difficulties and you can help the customers and programmers to talk better. Any experience counts, any unique experience counts twice.

Online Education and Interaction

Education Video

Education Video

Coursera is cool. Online Education is cool. Content is cool. But do you know what is not? The interaction. It is damn boring to stay focused in 3 hours for a video lecture. Recently, my wife and I tried our best to study Introduction to Finance and Financial Computation Econometric. The interaction environment in the normal classroom is not always interesting, it is even worse in an online course. Maybe we haven’t used all the resources we have or we haven’t tried hard enough. But to make the model more successful, interactions would be the key.

Offline watching has its benefits: people can watch anytime, anywhere and any videos you like. It sounds good until it comes to practice. People get lazy, some of them are watching half the video and have to stop to do something else. When they come back, they lose time to get into focus again. It takes more time and efforts to really focus and learn quickly with offline video.

Obviously, they are still free, I have no complaint about a specific site. What I mean is “Hey, this is my problem and may be others’ problems, hope you guys can fix it”. I think we need to give more benefits for people, as gamification and gaming theory often do, to let them spend a specific of time in their schedule to finish the video, to really focus. Maybe these sites offer some chance to chat with the professor, some small quiz that can be both challenging and rewarding.

In the long term, I really think that solving this problem is the business key and competitive advantage for any company.

Education would be the next wave

This is our research about the electronic education market, as the CMU Assignment

To look at the whole report, you can read it from here:

In short, we are seeing the new trends in technology, business, politics and market landscape is moving to allow better competition and creates better platforms.

In technology, we have better network bandwidth, better cloud computing, better consuming device (ipad/iphone) and better content generation tools like iBook Author.

In business, we have seen recent trends in education, from traditional education, to distant learning with the materials downloaded/sent to you via DVD, and then to e-learning when you can get interactions with teachers in the online place. The e-education would bring it further, to help you with more interactions with the teachers, with other students, and you can study wherever and whenever you like.

Me in RMIT and Vietnamese Newspaper

You can read the Vietnamese version here

Many software engineers and IT professionals dream of developing a ‘killer App’ for popular products like the iPhone, which will make them rich. Other people dream of one day having a book published.

Not many achieve either – and even fewer do so in their early 20s. But Vo Duy Khang (formerly student 3184092), an alumnus of RMIT Vietnam’s Bachelor of Information Technology program, has hit the jackpot with success in both of these areas – and now has the makings of a successful business spanning both Vietnam and Australia.

Khang graduated from RMIT Vietnam in November 2010 and travelled to Adelaide, Australia, where he is now completing a Master of Information Technology with Carnegie Mellon University, under a full scholarship.

With the benefit of the scholarship, Khang has been freed up to apply his own financial resources fully to get a small business off the ground while he also continues his studies.

His hard work and talent have been recognised by US publisher Apress, which has just decided to publish a book by Khang on how to build better iPhone applications. Khang’s book, Pro iOS Apps Performance Optimization, fills a need in the market for more practical guidance in this booming area of consumer technology.

Khang’s creativity and expertise has also been applied to a new business start-up in this field which already has five people on staff in Australia. Khang has been visiting Vietnam in the past month seeking further talent from Vietnam to join his operation.

Almost all his development team to date are RMIT students or graduates.

“They speak English well, and they all have a good understanding of what is needed,” Khang says.

According to Khang, the basis of a good user experience of any iPhone or iPad App is good performance. There is enormous potential in helping social networking applications such as Facebook to provide a better user experience by moving data in a quicker and smarter way over the net.

Apress has been impressed by his thinking in this area, as shown on his own website and as shared amongst the online community overseas.

One of Khang’s mentors has been Barend Scholtus, Academic Services Manager for the Bachelor of IT program, and the two continue to discuss shared interests regularly.

“We hope – in fact we are pretty sure – that Khang’s learning experiences at RMIT Vietnam have made contributions to his achievements to date, and we hope the best is yet to come.”


Khang (sitting) sharing knowledge with friends in Barcamp 2011


Khang’s book on Amazon: http://www.amazon.com/Apps-Performance-Optimization-Professional-Apress/dp/1430237171/ref=sr_1_1?ie=UTF8&qid=1321662306&sr=8-1

Facebook page: http://www.facebook.com/vodkhang
Contact info: Phone +61 478146872 
Email: vodkhang@gmail.com


iTunes U – a great learning hub

Stanford in iTunesU

Stanford in iTunesU


It would be so surprised for me that very few people ever knew about iTunes U. Come on, what’s wrong here? It is a great place for you to study through Harvard, Yale, MIT, Stanford and Carnegie Mellon. And all courses are free. Many people dream about these universities, so I think it is worth my efforts giving an advertisement and some introduction.





1/ Open iTunes and choose iTunesU

General iTunesU

Select iTunesU


2/ Select the university you want to learn



3/ iTunesU has a lot of cool universities: Harvard, MIT, Stanford, CMU

iTunesU Schools

iTunesU Schools


4/ Courses at Yale

iTunesU Yale

iTunesU Yale


5/ Download the video you like


Yale - Game Theory

Yale - Game Theory

Robocode New Beta Release

Robocode Logo

Robocode Logo


Robocode has released a beta version for, I am happy to contribute 1 feature and 1 bug fix in this release. Please download, test it and tell us any bugs you found





Robocode in SourceForge

Remote working and management

My Office

My Office

Working as a freelancer, I have to deal with many remote works, including working remotely with my customer, my colleagues and my employees and it certainly has some different difficulties from other sitting together jobs. Here are lessons that I have been learning from these jobs:

Our good tool for communication is skype, IM and teamviewer. We try to keep a good and frequent communication with clients before our approach is too far from what they expect, or in case they want to change their requirement frequently.

As other oursourcing jobs, it is normal that we have to wake up early or sleep lately to match clients’ time as well as developers’time. Communication requires lots of patient and understanding from both sides. Many clients told me that they never meet a software developer like me, who can sit down, listen and talk with them about what they need, how to improve their app’s qualities. I am happy with this commendation. Sometimes, I even do not need to ask for bonus, but they are generous to give me more bonus to reward my efforts working for them.

Remote management requires trust on your employee. I am never a fan of a strict manager. My strategy is to manage adult, not manage children; therefore, we have to trust them working hard and passionate. We try to hire best developers that we can, and they should do their jobs automatically with integrity without any strict control from managers.

People may keep asking me how I manage my employees when I am in Australia, how to prevent them from cheating me. I do understand that with a loose management like this, it is hard to ensure 100% no cheating but whenever I hire a best developer with high motivation, they will just work on it themselves. An important part of managing is to foresee, to plan over the next few months to few years strategies not to just stand behind every developer to make sure they do not cheat. Trust and integrity are important.

This reminds me the time working at MultiNC, my first job. My boss was never in office, rarely asked us where the project was going on. What we, as developers do, is to try our best to create a best application based on the strategy that we set up. We frequently brought the products to the manager and asked for feedback.

Trust will relate to self-motivation. You can only motivate yourself when you know that your managers trust you and you feel happy and freedom about your work. I would not be surprised when many developers feel bad about their jobs and think that they just do low level jobs. Because managers treat them as resources, give them low level jobs and never trust them in doing their jobs best. Money is not enough to motivate people. For me, people are motivated by giving them enough money, enough challenge and enough respect to do what they love doing.

Anonymous class Java

Some days ago, when answering a question on stackoverflow , I just recognized that I didn’t understand much about anonymous class in Java. Maybe I am not the only one, so I post it here. I think this should be in some book already, but by my bad, I didn’t read it well.

Ok, here is a simple question on stackoverflow:

 public static void main(String[] args) {
          new myClass() {
             public String toString() {
               return "myInterfacetoString";

          new myClass() {
              public String myFunction() {
                return "myInterfacemyFunction";
and the user asked why the output is:

It is extremely easy, right? Because you override the method toString() of the Object class. But then, the questioner asked more: how about change from new myClass() –> new myInterface() with some interface myInterface already declared, what would happen?

My first thought is that the class name of the anonymous class is not necessary and having no relationship with the real class, interface sharing the same name

But I just remembered about some of my snippet code before with

      new Runnable(){
       public void run() {}

will behave well like a runnable object

So, what is a correct way of anonymous class. After asking Google, I found a good link about it:


There are 2 main important points:

new className(optional argument list){classBody}

This expression instantiates a new object from an unnamed and previously undefined class, which automatically extends the class named className, and which cannot explicitly implement any interfaces. The body of the new class is given by classBody.

The result of executing this expression is that a new class that extends className is defined, a new object of the new class is instantiated, and the expression is replaced by a reference to the new object.

new interfaceName(){classBody}

This expression instantiates a new object from an unnamed and previously undefined class, which automatically implements the interface named interfaceName, and automatically extends the class named Object. The class can explicitly implement one, and only one interface, and cannot extend any class other than Object. Once again, the body of the new class is given by classBody.