Research, Dev, Share

Freelancer Lessons and Strategies

Posted in Career, Freelance, Learning, Management, Programming Language, Software Development by Khang Vo on January 23, 2011
freelancer jobs

freelancer jobs

As my plan in Adelaide, I want to get some job to earn money as well as keep me up to date with industry technologies. However, this turns out to be much harder than I believe when Adelaide is such a small city that does not have many IT companies here.
Then, I started my second option in my plan to looking for freelancer jobs and going to websites that offer freelancer jobs to see what I can get from there, and things are growing up fast enough and I learnt some key lessons over the my new job.

 

Price

Price was my first concern over deals and bid to get accepted a project. However, I can see that most of times, price is not the top priority for employers. What they care is they can have a high quality product in a short amount of time with a reasonable price. My strategy is to pick a fixed hourly rate for myself when competing and then just calculating over the number of hours I need to work and give them a general price.
I try to convince people about quality, in many terms: communication and product. I think it is true for any work with clients to try to exceed their expectations, try to understand their problems well and do exactly what solves their problems. The price can be higher but we can save time, money and make people feel safe, they would hire us. So, don’t aim for only price. Put one that is reasonable and prove clients that it is worth every penny

Outsourcing

This is always a way to cut down the business cost. People hire me because they want to look for more reasonable price with the same quality. And I can make another step to outsource them back to Vietnam developers. It cut down the price for me and the client and I can save my time to more important jobs, such as studying in my university 🙂 (Supposed to be the most important one)

There are certainly more aspects about management when you have to do outsource and communication with customers when both of these are remote only. I don’t forget about technology lessons that I learnt and expect to learn and work over these freelancer works. These will be shared on the next entry.

References:

Image source: http://freelancejobfeed.blogspot.com/

Advertisements

Why should we join and support community?

Posted in Community, Competition, Learning, Open Source by Khang Vo on January 15, 2011

There are always people keep asking me the same question: “Why do I actively join free community like Stackoverflow/BarcampSaigon/MobileDevCamp/My Blog/Top Coder? What is the value and the benefit?”. It is nice that people ask this question and actually think about it. And I hope that I can answer them fully with this post somehow.


vodkhang on stackoverflow

1/ Fun.

It is fun. Really? Yeah, it is actually fun. Wait a little bit, why is it fun for working? I love playing game, I love to see my level going up and my mark changes everyday, I love beating the top challenging problem. It is just so fun there. If you still suspect this for somehow, I would rather ask you why you play football and play guitar in the church outside of working time. If you think this is not a good example because people don’t have headache over those things, then we take a look at some others. Do you play chess? Why do people play chess and what is the value and benefit when playing chess? If you can figure out the answer at this point of time, then we are done. It is fun, that should be it.

At this point of time, if you still don’t feel anything fun to do so, I don’t know if you should continue reading about other benefits: brand advertising, learning and contributing. If you don’t get fun out of the work, especially the overtime work, it is hard to persuade the goal just by other visible benefits. Moreover, these benefits are only long-term seeing and require lots efforts and time.

2/ Brand Advertising/Social Networking & Trust.

Brand Advertising and Social Networking is important. When you actively join communities, you get to know more people and more people get to know about you. Nobody knows if these people turn out to be your next employer or your next friend that can help you out in the difficult situations.

I partly believe in the theory that sometimes, we should hire people that we are familiar and can trust rather than hiring some talented stranger. So, when people can see how you engage to help the community, people started to trust you. The more people know about you, the more people may trust you. And when people can trust you, they can give you the chance to work together or hire you as an employee or even work for you.

Moreover, these things are not built overnight, there is no overnight success. It may take you couple of months, or even years to write a blog and only your friends read it. It is the same with answering on stackoverflow, topcoder. It takes years for you to reach to an acceptable point that people start to recognize your name/your company’s name.

3/ Learning & Contributing.

Open Source

Now, we go to the last reason. It is the last not because it is the least important reason, it may be the most important reason for many people. However, many people want to see the something visible, something that either gives them lots of money or reputation to move forward to their career first. So, I just leave them read things they want to read first.

It is so obvious. When you answer something in stackoverflow, it is either help you to solid your knowledge or help you to think deeply to debug. I really like debugging on stackoverflow, it is challenging. You have to find the bug as soon as possible, and sometimes, you don’t have debugger, you don’t even have IDE to help you. You just read over the code, verify each line of the code and try your best to guess the part that can create the bug. That’s challenging and fun, actually.

References:

http://iphonedevelopment.blogspot.com/2010/12/non-deterministic-problems-aka-finding.html

Image Sources:

http://stackoverflow.com/users/flair/227698.png

http://en.flossmanuals.net/floss/publish/WordPress/rsrc/WordPress/Introduction/icon_big.png

http://t0.gstatic.com/images?q=tbn:ANd9GcQj7UR1webcv1NlEzFaRpAUeudZjWyOYYAA27iiaxot4X9vdDa2

Trying, Running, Failing and Motivation

Posted in Career, Learning, Motivation by Khang Vo on December 10, 2010
Running And Failing

Running And Failing

I am extremely happy these days, I got a full scholarship of CMU – the first one I got after, uhm…, 10 or more scholarship submissions. This one goes by some luck. You may not believe in that, I don’t either till it happens. I started applying and the decision is out for less than 2 weeks and I had no plan for this scholarship until the chances come and I took it seriously. Here are 3 things I learnt from this happy event.

1/ Keep trying, you do not know what happens next.

Some people love perfection and are scared of failures to try. In many cases, trying does not cost you much except, some money and efforts and in some cases, it is free to try. One important decision I made is to talk and then email CMU representatives to ask some information about my specific case with important background. That let me know some important information about the admission process and I took advantage of it successfully.

For things that are uncertain, the only way you can be sure about is to try it. Start up, scholarships and R&D job is like this. Sometimes, things go out of your hand and strategy, then you just keep moving fast to the next goal.

2/ Everything you do, either success or failure make you one step further

I am happy that I tried to apply for President Award of RMIT Vietnam although I didn’t get it. It was a huge step preparation for me for the scholarship. There is no way that I can prepare all documents like transcripts, recommendation letter in around 3 days without any earlier work.

Another thing that I learnt from the failure of President Award is that my approach is kind of not correct. I tried a with a crazy approach in the award essay just to see what happens. And, I think the result gives me some feedback over the approach for the next one.

3/ Fail and run again

I mean RUN, actually run not just to go ahead step by step. I am willing to fail while I am running than moving slowly to the goal without any failure. For some people, failure is not an option, you are not allowed to fail. However, in my opinion, passionate is necessary but not enough for people to be successful; sometimes what matters is to keep the highest motivation for long time. Only challenges keep me motivated and moving with my best skills and efforts. That’s why I love the Google quote: “65% of impossible things is better than do 100% of possible things”. Here is what you get from that kind of fail, you know that you did a great thing, you are motivated about what you do all the time and you know you are doing something only a few, the best people can do.

And I always remember the Edison quote, you don’t fail 1000 times, you just found 1000 ways that things do not work, and I am happy to get a confirmation if a way is a fail as soon as possible.

CMU Students

CMU Students

Just some information about CMU and my courses there:

– Top 6 in 2007 in Engineering and IT QS World University Rankings

– Top 12 in 2010 in Engineering and IT QS World University Rankings

– #1 in Computer Science Schools (US News and World Reports)

I hope that this is a great step to the next big goal:)

Become Master of Xcode

Posted in Iphone, Learning, Objective-C, Software Development by Khang Vo on August 26, 2010

For iPhone development guys (and Mac as well), we all want to be as productive as possible. And one of our important tools is Xcode. I can even say that if we can master of Xcode, we can double our productivity. The reason is not only the time that the tool can save us but the number of times it breaks our workflow, or make us become bored/tired of our jobs. We are all humans, and no human in the world wants to do the job that a machine can do. Ok, stop talking and I will show you my summary of tips/tricks and techniques that I feel very very useful for me.

Many of these tips is from this stackoverflow post (I just list what I feel is most productive), 2 famous videos called “Becoming productive in XCode”, and a famous cheat sheet that almost all of us know “Complete Xcode Keyboard Shortcut List”

I also recommend you to go there and take a look because this post may be really personal and lack excellent tips that you want.

1/ Basic Hot Keys

File Cursor Movement

  • Header/Source File Switching: Option + Command + Up Arrow
  • Last cursor point switch back and forward: Option + Command + Left (Right) Arrow


Quick Help/Documentation

  • Jump to Definition of a symbol : Command + Double-Click on a symbol
  • Find Text in Documentation of a symbol: Option + Double-Click on a symbol: (Only works if you have they symbol’s Doc Set installed.)


Auto Complete

  • (previous) next auto-completion argument : (Shift) + Control + /
  • Auto completion pop-up list : Escape or Control + comma
  • (previous) next Auto completion choices movement: (Shift) + Control + period


Text Movement:

  • Cursor movement between words : Option + Left (Right) Arrow
  • Cursor movement camel-cased parts of a word: Control + Left (Right) Arrow
  • Beginning or end of line: Command + Left (Right) Arrow


Interface Builder:

  • Jump to class in Xcode : Command + Double-click on an object in Interface Builder’s
  • Drag a customized object back to Interface Builder’s Library for later reuse.
  • Object overlap, see object menu under mouse: Control + Shift + Click on an object :


Code Organizing:

  • Bold line in the function list: #pragma mark Foo
  • Auto complete the pragma: pm or #p
  • Notation convention: // TODO: or // FixMe
  • Commenting a line: Command + /


2/ Advanced Hot Keys

With advanced hot keys, you will rarely need to use the mouse. Because, everything you need to do with the mouse, you can do it with the hot keys.

  • Open File Quickly : Command + Shift + D and don’t forget that open quickly uses the current word as a search term.
  • Popup list of methods and symbols in the current file : Control + 2
  • Look up current symbol:  Control + Command + ?
  • Editor area to full screen : Command + Shift + E
  • Debug and Editor Mode switch in All-In-One XCode mode : Command + Shift + B


3/ Some useful scripting

I will tell you more about scripting in the next part, but currently, I think this list is basic enough:

Default Auto Completion list, show when you type

defaults write com.apple.Xcode XCCodeSenseAutoSuggestionStyle List

Turn Off Undo Warning

defaults write com.apple.Xcode XCShowUndoPastSaveWarning NO

RoboCode Team Battle (Week 4)

Posted in Algorithm, Competition, Intelligent System, Learning, Robocode, Software Development by Khang Vo on April 21, 2010

Hi, everybody, the robocode competition goes up to another level, promising more fun and more jobs for you guys. We just released a new rule this morning requiring people to compete in team, 2-2 battle. The era of 1-1 battle ended. This morning is just a practice for a new game. You do not have time to improve your robot a lot, that’s ok now. You just need to have a better communication with your ally.

Now, we just take a look at battles between 2-2. There would only have 4 teams this morning but creating a lot of fun and entertain for people. Poor you guys, the people not joining this morning

The first match:

The Red and the Blue guy on the same team while the White and Black on the other team. The match was quite in the first team when the Black guy use the still strategy, which was good for some robot cases that can not shoot the still robot

The second match:

The 2 yellow guys compete with Gray and Blue guy. The 2 yellows shoot quite correctly but the strategy of the other team is against the Yellow team when they move in line but change direction really fast.

The third match:

We found the anti-Indian guy. Welcome to Yellow guys, you guys did a really well job when running in a spin strategy and the Indian strategy almost dies.

[youtube=http://www.youtube.com/watch?v=y8o4WxNhMKw

Wait for tomorrow, when we will have a real team battle. Never have the case that we will shoot each other any more. And AWARDS, will officially be given for the first 2 teams tomorrow.

RoboCode Report Week 2

Posted in Algorithm, Competition, Intelligent System, Learning, Robocode, Software Development by Khang Vo on April 3, 2010

And now, we are already on the week 2. Different than week 1 when I am too busy to write some brief report. I will write some brief report, feedback and evaluation about the second competition.

First, come to the battle between Police and Indian. We can see that Police does not have a big improvement over the last week, while Indian goes into the next level by getting the ideas of running around the opponents from his own opponents (ideas started by Police). We also wait for some peole to kill that suck Indian. Everybody really wants to kill the Indian

Then, we come to the next match between Tester and Rammer. Rammer tried to implements a combining strategy between Rammer, Indian and Spin Bot. But, to be honest, it was an example for what people say : “good idea, bad implementation”. Rammer tried to change the algorithm at the bad times and the RunAway strategy was not good enough. Waiting for the next version when Ramming and Indian shake their hands:D. We also welcome the new comer, a handsome guy, Phan Vo. Hope that we will see a better implementation in the next version

Yeah, now, we see how good Alosa (a loser) is and if it is a real alosa. With a quick implementation in the Web Dev class (Buu will get disappointed for that news), a new version of SweetPo has come into the world. And welcome Huy, another new comer this week. Inherits from the Indian, Huy produced a better implementation. That’s so good and fit exactly what we expect when publishing our source code. I can see a good future for Huy in later versions.

RoboCode Game competition

Posted in Algorithm, Competition, Learning, Robocode, Software Development by Khang Vo on April 2, 2010

Hi, I am really happy and excited that we, RMIT students (RMITC), held a good competition. It was just a beginning for a series of RoboCode , game competition as said in previous post. No more talking, I will show you a demo from our students first.

That’s really cool and so simple, and we will have many more AI techniques and Software development there. We will try to add some more intelligence, game strategies in those robots to make it really fun (I already had some ideas in my head). We also have several activities around like tutorials (Instruction 1 and Instruction 2), code review (I did code review for my friends, Khang Nguyen and Phu Hoang) and open some of our source codes (Khang Nguyen, Phu Hoang, Tuan Anh, and Khang Vo). You do not need to be an expert programmer to start programming with RoboCode, the only need is your PASSION. Feel fun, just start. Play and learn. You will become an expert soon

Two more video examples

So, now, how can you join? If you are an RMIT student, it should be extremely easy, just come in. If you are not and you want to join, please contact me: vodkhang@gmail.com so that I can arrange for you to join. Or just wait, I and Youth House also try to operate some robocode competition events.

Online Programming and Software Development Competitions

Posted in Algorithm, Competition, Learning, Software Development by Khang Vo on March 21, 2010
In my university, it was hard to find chances to go for programming and software competitions (like ACM and Imagine Cup), part of the problem is my fault as well. So, I usually find and join online competitions. Anyway, it is not the main ideas of this post. I want to introduce programming competitions that other people can find fun.

For me, competitions are chances to be fun, to boost skills and to communicate with other people. Fun may be the most important thing, because if it is not fun, interesting and challenging, there is no reason to do it.

1. TopCoder : a lot of kinds of competitions here. This is my favourite one.

A short competition lasts about 1 hour to compete with other people in a 3-problem test with easy, normal and difficult level. You can also do code review, challenge others’ solutions by your own test cases. I love this idea because now, your solution is both validated as well as verified by other people.

It is fun and realistic for software developer. You can even earn money. The only problem is that time to compete is really short, about 2 or 3 days and require in-depth knowledge about J2EE and .NET. I did not have any time to try out with this competition

This is a NP-complete problem competition. You can only find the way to make it better, find the most optimal solution. There are many kinds of problems here: range from encryption, game strategy and image analysis. I love game strategy most. The drawback is you have to spend a lot of time but I think that’s worth and give you a lot of fun

Bug Race will be good for tester, joining, finding bugs. Studio is good for designers. That’s all I know because I never tried this


2. Sphere Online Judge (SPOJ): Pure-algorithm competitions

I think this site is good for beginner and for people who wants to boost algorithms skills and knowledge.  If you are an algorithm lover, this site will be fun; otherwise, it seems quite boring when discussion and sharing ideas are quite limited. People compete with each other to try to get a little bit faster in time to be in the top. That is the disadvantage of this site, people spend too much time for a little performance improve, which is usually not a good practice for a software developer to do so.


An algorithm competition, challenging. I tried only once in last year and then this year, I think that I am still not good enough for that. It is a 3-people team competition by solving really tough algorithm problems in 5 hours. If you win, you can go to compete onsite with a wide range of topics: Information Theory, AI, Game Theory, Networking…

4. RoboCode (I think in www.diendantinhoc.org somebody is also interested in)
I am currently doing research and trying with this one for the purpose of RMITC club. RMIT students will try to learn by doing in this challenge. I hope we can learn in many different technologies: Event-Driven, Multi-threading, Agent-Oriented, Game Strategy, Software Design… See the demo below.

For me, that game looks like another agent game that RMIT Melbourne teaches for the course Agent-Oriented Programming and Design

Software Engineering and Algorithms

Posted in Algorithm, Learning, Software Development by Khang Vo on February 27, 2010

Firstly, I want to talk a little bit about algorithms, data structure against software engineering.  Joel’s Article pointed out an excellent point that algorithms, data structure, functional programming is really important to learn, to challenge your mentality. And he is also right that current CS (and maybe IT, SE) degree is not hard enough, simply because if you designed a stupid software, it still WORKS, students will at least get  90+ points in your assignment. I see many not excellent students get 3.8 – 4.0 without any problems, because as Joel already stated, the problem in Software Engineering is when you have to extend, to make the software scalable, not when you create it. He’s all right about that. But he may make people misunderstand.

For me, algorithm (if we consider it as a specific method to solve a specific problem rather than defined in wikipedia) is important, but it is no longer the most important skill and knowledge software engineer must have. Software engineers, nowadays, should expert about SOLID principles, and write reusable and maintainable code. Software engineers know how to design, architect and integrate between different system to write and maintain a scalable system. Software engineers can work with usability, working directly with client, understand and see the business and users’ world. These things require practice, thinking, learning from failure not just memorize them.  There are now many different jobs that do not require software engineers to become expert in algorithms, and also many great jobs requiring you to become algorithm expert. You may say that they are different jobs (like understand user’s business would be business analysis)) rather than software developers, you are wrong. Software developers now have to understand users’ mind, in general and specific domain to write usable features (read the Usability part in understand and see the business and users’ world for more details).

Another misunderstanding about learning algorithms is that it will give you great mind in thinking in IT. It is right but not that much. In many cases, we work directly with a specific problem, like searching, sorting and computer vision. But that is a specific problem, people tried to solve it under a specific set of constraints. But software architect see the big picture, when to integrate, what to integrate and how to integrate. Both kinds of thinking are really difficult, requires creativity and experiences but hard to go for both. If people go too much into specific problem, it takes time to become an expert in another area. So, if people love one and want to become an expert in one, go for it.

Personally, I do like algorithms so I usually do some algorithms competition in my free time on topcoder. Currently, I am working on this problem (another link if you can not access topcoder), if you want to join, just come. More people, more fun. I will write another entry to introduce about online IT competitions.

An Effect of instructors/lecturers

Posted in Learning by Khang Vo on January 4, 2010

I intended to write this blog long time ago, especially the time I went to RMIT Melbourne.

A few hours ago, I read the blog of Ngon Pham, and I decided to write about the effects of instructors/lecturers to students’ mind, both good and bad effects.

To start, I want to tell some of my experience when I learnt in Melbourne.

At the beginning of every courses, the lecturers come and say: “I and you will learn together, I know something, but do not know many things, you will know and may have more experience than me so please teach me if you can”. What comes to my mind first is that it is a joke, right? how can those lecturers/professors with a lot of years of experience may not have something in the course/research interest that students know but they do not know. They are not joking at all when we went over the courses. They are in research for long time and they lacked industry skills/knowledge and they actually learnt it from students, it is not just small correction, it may be the whole lesson. Even some of them can learn business lessons from IT students. The best thing I see is that for unsolved problems (many of them in Intelligent System:) ), the idea of professors sometimes is not better than students. It proved and reminded me one thing: “You could never stop learning”.  (thanks to all lecturers that teach me in RMIT Melbourne)

The story I tell just shows one of the lesson. It is an obvious one. But the underlying lesson is that “Students must be strongly encouraged to argue and to teach instructors/lecturers back”. For every kinds of classes/lessons, for every kinds of instructors, there will still be some areas the instructors do not know/understand best. Here are some of my advices:

For Students:

It is really good if you have the excellent instructors. But please keep in mind that it has its own bad effects. You will become passive very soon. You all think that whatever the instructors give to you must be right, well-tested over time. I see many students do not dare to challenge their instructors’ ideas simply because instructors are too excellent that every arguments they try fail. If you do not want to argue any more, you will become robot really quick. Trust me, robot will not have high position in this quickly changing society. Asking for not understanding is not enough, challenging and arguing again is much better.

If you do not have good instructors or even bad ones, should not be disappointed. You can see it as a chance for you to self-study and argue. You can HELP to make them better, but in many cases, it is an art and depends on instructors’ mind. Some are not so opened and you must have the way to suggest your idea/ help instructors.

For instructors:

The good way for instructors to think when students argued is that “Students are helping me for free, I do not lose anything”. Another thing is that in a class, there will be 30 (or 200, depends on the university), and everybody knows that 30 CPUs working parallel can compete with 1 super computer in terms of data storage and processing. So, in many cases, their argument will become right. Open your minds and learn it, it may become a novel approach for research or your works. You also should open your minds wider and encourage students more to argue and do not make students think you are too strong or too excellent. No students will try to argue when they know their opponents are too excellent and 99% of argument, they may get wrong. It may be really strange at first but it may become excellent when you get it.

Yeah, to be honest, I know that Vietnamese lecturers have many difficulties, and I do not want to open a big discussion about whether we should understand them, whether we should not require them a lot. Ok, I know, but I try to HELP them become better. It is good for them and for students.

Tagged with: ,