How to install GCC on macOS (and make it your default C/C++ compiler)

Clang is default installed C/C++ compiler on macOS but for some reason if you want to use GCC then these are installation steps (I did it on macOS Sierra 10.12.6):

1. Check if Clang is already installed on your system

Run command gcc --version, you should see something like this, gcc is just a symlink to clang:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

2. Install GCC with Homebrew

There are several versions of GCC available so you need to be sure which one you want to install. Try brew search gcc then brew info gcc, I just want the latest stable release of GCC now, it’s 8.2.0;

gcc: stable 8.2.0 (bottled), HEAD
GNU compiler collection
https://gcc.gnu.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/gcc.rb
==> Dependencies
Required: gmp , isl , libmpc , mpfr 
==> Options
--with-jit
 Build just-in-time compiler
--with-nls
 Build with native language support (localization)
--HEAD
 Install HEAD version
==> Analytics
install: 46,915 (30d), 207,277 (90d), 664,901 (365d)
install_on_request: 22,990 (30d), 92,797 (90d), 284,987 (365d)
build_error: 491 (30d)

Start installing GCC with brew install gcc.

After GCC is installed successfully, check again with gcc --version. Surprisingly you still see Clang!!! There is nothing wrong here, if you try again with gcc-8 --version then you will see what you expected:

gcc-8 (Homebrew GCC 8.2.0) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

3. Make GCC as default compiler

There are several ways to make it works but I went with this route since it’s the most safer and easier option. Add following content into your ~/.bash_profile, the export command just put /usr/local/bin ahead so it will be searched prior /usr/bin – where Clang symlinks created. alias commands allow you to run GCC conveniently without worrying about its version since its symlinks are created with -8 suffix (run ls -l /usr/local/bin to see all of them).

export PATH=/usr/local/bin:$PATH
alias gcc='gcc-8'
alias cc='gcc-8'
alias g++='g++-8'
alias c++='g++-8'
alias cpp='cpp-8'

UPDATE: I don’t know why aliases don’t work properly, if I run gcc directly from terminal then it works well – gcc-8 is used. But when I used a makefile, clang was still magically used, I only found this issue when I used a gcc only option – -fno-default-inline.

You can test it with this command g++ -fno-default-inline test.cpp -o test.out, there will be no warning. But if you run it from a Makefile, you will see a warning like this:

clang: warning: optimization flag '-fno-default-inline' is not supported [-Wignored-optimization-argument]

So instead of aliases, I just created symlinks for gcc in /usr/local/bin then everything worked well.

Updated ~/.bash_profile now:

export PATH=/usr/local/bin:$PATH

And create these symlinks:

cd /usr/local/bin
ln -s /usr/local/bin/gcc-8 cc
ln -s /usr/local/bin/gcc-8 gcc
ln -s /usr/local/bin/g++-8 g++
ln -s /usr/local/bin/c++-8 c++
ln -s /usr/local/bin/cpp-8 cpp

Restart your Terminal, run gcc --version again to see its correct version information and it’s done.

Nhìn thấy những thứ vô hình là một siêu năng lực

App The Human Body giúp trẻ em nhìn thấy những gì bên dưới làn da của chúng – những thứ chúng vốn không nhìn thấy được. Thêm nữa, app này cũng được sử dụng trong các gia đình và bệnh viện để giúp cha mẹ và bác sỹ chỉ cho trẻ em thấy bệnh tật ảnh hưởng tới chúng như thế nào và những gì đang được thực hiện để chữa trị. Những kiến thức này sẽ làm bớt đi nỗi sợ và giúp bọn trẻ mạnh mẽ hơn – dù chúng có đang bị ốm hay không.

the-human-body

Như một người cha đã chia sẻ “con gái tôi đã bị một cơn đau bụng dữ dội ngay trước khi đi ngủ (do ông bà nó đã cho nó ăn nhiều kem khi đã quá muộn). Bởi vì nó đã dành nhiều thời gian chơi với cái app này, nó có kiến thức rất tốt về cấu tạo của hệ tiêu hoá và cách thức chúng hoạt động như thế nào. Chúng tôi đã có thể nói chuyện xem vấn đề thực sự là gì, và cách mà cơ thể sẽ tự giải quyết nó. Có thể thấy rằng khi nó đã hiểu ra chuyện gì đang xảy ra nó đã ngay lập tức cảm thấy tốt hơn rất nhiều…

el1-eat

The Human Body cùng với các biểu tượng như chữ thập đỏ và chiến dịch chống thuốc lá, đang tham gia triển lãm Wellcome Collection ở London, tìm hiểu xem làm sao để thiết kế đồ hoạ có thể hấp dẫn, thông tin và giúp mọi người mạnh mẽ hơn trong lĩnh vực chăm sóc sức khoẻ. Triển lãm đưa ra một câu hỏi Thiết kế đồ hoạ có thể cứu cuộc sống của bạn không? Và mặc dù có các câu trả lời khác nhau, chúng tôi dứt khoát tin rằng kiến thức có được bằng nhìn thấy được những thứ vô hình là một siêu năng lực cho những người cứu sự sống tương lai.

el1-languages

Trên đây là một đoạn dịch lại từ một newsletter của ứng dụng (app) The Human Body với mục đích “một phút dành cho quảng cáo” miễn phí :). Thực sự mà nói đây là một app rất tuyệt dành cho trẻ em, nằm trong số các app yêu thích nhất của tôi. Bạn Gấu nhà tôi đã chơi với app này từ khoảng 3-4 năm trước khi nó 6-7 tuổi gì đó, không nhớ chính xác nữa :). Sau The Human Body, Tinybop còn có một loạt các app cũng rất hay nữa, bạn có thể cân nhắc mua cả gói để được giảm giá 🙂

el1-systems

Những quyển sách cũ khởi đầu nghề lập trình của tôi

Từ ngày tập toẹ coding đến giờ cũng đã hơn 20 năm, thay biết bao máy tính, học biết bao ngôn ngữ, framework, bao nhiêu đời tools etc., nhưng có mấy quyển sách từ cái thủa đầu tiên ấy thì vẫn rất nhớ. Có lẽ nhớ vì khi đó nó quý, và đọc rất kỹ 🙂

Viết ngày 11/08/2015, giờ post lại.

Hai tháng trước đây phải di chuyển cái giá sách mới lại sờ đến những quyển sách cũ, mà nhiều quyển đã phủi bụi nhiều năm vì đã xong nhiệm vụ từ lâu rồi. Nhớ là đã chụp ảnh lại mà giờ tìm không thấy đâu, còn lại được có ảnh của hai quyển, đều chỉ là sách photocopy nhưng ngày đó với tôi có khi còn quý hơn vàng, vì có vàng lúc đó chưa chắc mua được sách thật ấy chứ 🙂

Quyển sách lập trình đầu tiên là “Ngôn ngữ Lập trình Turbo Pascal 5.5”(hình như thế, không nhớ chính xác nữa), khổ to, của Quách Tuấn Ngọc, mua ở thư viện ĐHBK Hà Nội vào một ngày đầu năm 1995. Khi đó mới biết sơ sơ xoá mù về máy tính, về DOS, biết xài BKED nhờ học hướng nghiệp ở lớp 12 (học hướng nghiệp Tin học không những không được cộng điểm thi tốt nghiệp mà còn phải đóng học phí, nhưng mà thích thì nhích :)). Chưa biết Pascal là cái gì, chỉ thấy lập trình cũng hay hay và thấy quyển sách cũng dễ đọc, thế là mua :), trước đó chỉ biết phong phanh qua thằng Quân hàng xóm nó khoe có thể lập trình giải phượng trình bậc hai, đại loại mấy thứ nghe rất cao siêu như thế 😀

Quyển này những ngày sau đó tôi gần như đọc thuộc lòng vì đọc đi đọc lại, đọc chay vì có máy tính đâu, mãi đâu phải vài tháng sau đó mới tìm ra được một chỗ cho thuê máy tính theo giờ ở ngay cạnh ĐHTH. Máy tính chủ yếu là 286, xài ổ đĩa mềm 5 1/2 inch. Ngày đó thuê máy tính để học lập trình như giờ người ta thuê máy tính chơi game hay lướt net. Có điều giá đắt hơn nhiều. Mỗi lần khởi động chờ mất 3-4 phút, đĩa mềm đọc kêu rẹt rẹt, rồi lại tạo ramdisk để copy 2 files Turbo Pascal 7.0 (thịnh hành lúc đó) qua chạy cho nhanh. Cũng vì save xuống đĩa ảo cho nhanh, thỉnh thoảng máy trục trặc, mất điện là mất tong hết tất cả là chuyện rất bình thường 🙂

Kỹ thuật lập trình đáng nhớ nhất học được từ quyển sách này là làm một cái text editor với linked list 2 chiều (con trỏ liên kết động), nó giúp vượt qua giới hạn 65.000Kb bộ nhớ của static variable nên có thể mở text file lớn bao nhiêu tuỳ thích (theo lý thuyết). Phải nói là tôi đã rất hào hứng sau khi biết xài cái này.

Quyển thứ hai là quyển “C++ Ngôn ngữ và Ứng dụng” của Scott Robert Ladd, quyển này có vẻ không nổi tiếng gì lắm lúc đó nhưng đối với tôi nó là một quyển sách C++ để đời (sách thì rất nhiều, nhưng quyển viết hay thì không nhiều). Khi đó tôi bắt đầu chuyển sang C/C++ sau khi đã vật lộn với Pascal đủ rồi, một trong những lý do hay đọc thấy khi đó là “C/C++ mạnh hơn, can thiệp được vào hệ thống nhiều hơn Pascal“. Các khái niệm inheritance, abstraction, polymorphism và phần lớn những gì về OOP là tôi đọc được từ đây, còn nhớ trong 3 cái này thì cái polymorphism (với virtual method/fields khi code) là khó hiểu nhất. Đọc khái niệm, rồi coi sample code nhức cả đầu, mãi mới hiểu ra nó hoạt động thế nào, mà hiểu rồi mới thấy công nhận hay 🙂

Quyển thứ ba là quyển “Virus tin học Huyền thoại và Thực tế” của Ngô Anh Vũ, dành cho phái hắc đạo thích virus máy tính. Đây là một trong những quyển sách rất nổi tiếng trong giới quan tâm tới virus máy tính ngày đó, và thường xuyên được nhắc tới trong các bài về lập trình hệ thống, virus máy tính trên tạp chí PC World VN ngày đó. Khổ nỗi quyển sách đó có muốn mượn ai cũng phải vào tận Sài Gòn, mà ngày đó Sài Gòn xa lắm 🙂

Thèm lắm mà không biết photocopy của ai được, thế quái nào lại phát hiện ra anh Trương Minh Nhật Quang, người Cần Thơ, tác giả của chương trình diệt virus D2 nổi tiếng khi đó đang học ở IFI (Viện Tin học tiếng Pháp — ngay sau ĐHBK). Thế là một buổi chiều không hẹn trước (làm qué gì có điện thoại hay email) tò tò hỏi ra phòng của anh Quang trong ký túc xá Bách Khoa để đến thỉnh giáo. Ơn trời là hôm đó anh Quang có ở nhà, chắc không bận việc gì lắm, và quan trọng là anh ấy cũng hiền, bỏ ra chắc phải hơn 1 giờ đồng hồ để tiếp vị khách không mời là tôi 🙂

Tất nhiên gặp được cao thủ như vậy tôi mừng hết biết, bao nhiêu câu hỏi không lời giải về virus được phang hết ra (lúc đó đã coding Assembly chán rồi nhưng vẫn chưa viết được con virus nào). Lý do chính của cuộc gặp được trình bày rất rõ là xin một con virus và xin photocopy quyển sách này. Rất may là anh Quang vui vẻ đồng ý, tặng cho một con Thứ Sáu ngày 13 để học, và cho copy lại quyển sách anh có (cũng là một quyển photocopy). Ra về anh còn dặn là học để biết, đừng có phá :). Đấy cũng là cuộc gặp gỡ với tác giả D2 duy nhất cho tới giờ.

virus tin hoc huyen thoai va thuc te
Virus tin học, huyền thoại và thực tế của Ngô Anh Vũ

Cũng phải nói thêm là nhờ cái ham thích viết virus đó mà đã quen với hai anh Tuấn Anh và Hải, cả hai anh này đều học lẫn viết virus giỏi hơn tôi rất nhiều. Viết virus chán còn quay qua viết chương trình diệt virus, tôi thì chỉ ham viết virus thôi 🙂

Quyển thứ tư là một quyển nổi tiếng tầm thế giới, bản dịch tiếng Việt có tên là “Cẩm nang Lập trình Hệ thống” của Peter Norton (ai còn nhớ Norton Utilities 8.0 for DOS không?). DOS là gì, hoạt động như thế nào, tất cả mọi thứ đều có trong quyển sách này. Đây là một quyển sách cũng thường xuyên được nhắc đến trên PC World VN. Quyển này hình như là anh Hải mượn giúp để photocopy lại :). Hiểu rõ hệ thống DOS trong quyển sách này là căn bản để có thể bắt đầu viết virus 🙂

Quyển thứ năm là “Advanced Windows” (3rd Edition, English) của Jeffrey Richer, một tổ sư lập trình hệ thống trên Windows 3.x ngày đó (cùng với Matt Pietrek, John Robins) mà tôi đã may mắn photocopy được ở thư viện ĐHBK TP.HCM khi lần đầu ghé chân tới Sài Gòn vào giữa năm 1998 (thư viện ĐHBK TP.HCM là một địa chỉ mơ ước ngày đó, động nói đến quyển sách nào để tham khảo như quyển này, hay “Cấu trúc Dữ liệu và Giải thuật“, hay “Lập trình Đồ hoạ“… PCW đều nói là qua đó photo là có, mà xa quá có qua được đâu :D). Nếu quyển sách của Peter Norton là mọi thứ về DOS thì quyển này là mọi thứ về Windows 3.1; Gần cuối năm 1997 tôi đã viết một chương trình gõ tiếng Việt và mất ăn mất ngủ với các loại hook với message, Win 32 API của Windows nhưng khi đọc được quyển này mới thấy “bừng nắng hạ” và nhìn cursor trên màn hình có thể biết những gì xảy ra trên hệ thống ở bên dưới (quote từ anh Phan Văn Hùng) :D. Quyển này khủng bố đến độ anh Phan Văn Hùng (tác giả Freecode và Click’n’See) cũng không có và anh đã mượn lại tôi để đọc 🙂 (anh Hùng là một bậc thầy về lập trình hệ thống trên Windows mà tôi đã học được rất nhiều trong các lần gặp gỡ nói chuyện, về sau anh đi Úc).

Quyển sách đáng nhớ và quý thứ sáu là quyển “Thung lũng của những giấc mơ CNTT“, đây là một quyển sách nội bộ của VASC, và photocopy lại được nhờ mượn qua anh Ngô Hữu Hải vào quãng 2001 (anh Hải lúc đó đang làm ở VASC, một trong 2 chiến hữu của tôi có cùng sở thích viết virus và sau đó là anti-virus những năm ‘96–’98, chiến hữu kia là anh Nguyễn Tuấn Anh). Đây không phải là sách dạy lập trình, mà là sách về những thiên tài của Silicon Valley và họ đã bắt đầu sự nghiệp như thế nào kể từ thập niên ‘60, đủ mặt anh tài trong đó. Đọc vì ngưỡng mộ, còn tôi thì chưa một lần đặt chân tới đó, hic 😦

silicon valey thung lung giac mo cntt
Thung lũng của những giấc mơ CNTT, VASC.

Quyển sách thứ bảy, và cũng là quyển cuối cùng, là “Debugging Windows” (English) của John Robins. Cũng là một quyển đình đám về hệ thống Windows và các kỹ thuật debug, đọc xong quyển này tôi còn phải làm một presentation ở cty về debugging, về quy trình 7 bước từ tìm bug tới fix bug… :). Một trong những thói quen viết code an toàn mà tôi đã đọc từ quyển sách này, và còn xài cho đến giờ (qua C#, rồi JavaScript, thậm chí cả khi phải fix linh tinh với PHP), dù lý do xài nó chủ yếu là do đặc thù của ngôn ngữ C/C++: khi viết so sánh chẳng hạn như với “if (10 == x) {…}” tôi luôn luôn viết constant thay vì variable ở bên trái (tại sao? dễ ợt, đoán đi).

Quyển này được anh Phan Văn Hoà (sếp của 24mB Software Development) mua năm 2001, và là quyển duy nhất (trong 7 quyển này) được đọc sách Tây mới kính coong từ Amazon. Lý do là khi đó đang viết Trakium (a bug tracking Windows client) với Visual C++ 6.0 mà gặp một bug rất nhức đầu liên quan tới multithreading, debug hoài mà không ra bug, và quyển sách kia được mua để tôi luyện thêm công lực :D. Bug về sau đã được tìm ra trong một buổi sáng đang vừa code vừa gặm ngô luộc ở cty :), lại là cái bug race condition thần thánh của multithreading.

Happy Programming!

Nhà phát triển cần gì?

Là một nhà phát triển (developer) bạn cần gì ở những hãng công nghệ (vendor) dẫn dắt thị trường? Bạn cần gì ở Microsoft, Facebook, Google, Yahoo etc.? Trước giờ tôi cũng có tham gia một số event về training, giới thiệu sản phẩm/công nghệ mới của một số hãng ở VN, thực ra là rất ít bởi tôi vốn rất lười, vì đến các buổi đó chơi là chính chứ công nghệ cái gì.

Trong một số buổi như vậy thì một trong mấy câu chuyện mọi người hay xì xầm là về quà tặng của hãng cho những người tham gia, thường là cái áo, cái cốc, cái mũ, hay mấy cái đĩa trial software. Có những người nhanh chân ra về để lấy mấy thứ đó vì thường không có đủ cho tất cả mọi người, mà tôi nghĩ lý do chính là vì có rất đông người không đăng ký trước (trong khi thư mời nào cũng yêu cầu đăng ký). Mọi người còn xì xầm nhau xem event tổ chức ở đâu, hoành tráng hay không, khách được mời ăn trưa kiểu như buffet ở Hilton hay là tự túc :D. Họ chê hãng này keo kiệt hơn hãng kia (hình như là MS thì “keo” hơn Oracle, mà nếu thế thì cũng đúng thôi, có được mấy mống fan Oracle so với MS) blah blah :).

Hôm qua thấy có bạn quảng cáo cho một workshop của Nokia trên Facebook, rằng nó diễn ra 2 ngày ở hẳn hotel 5 sao, có cả lunch (ở hotel 5 sao nhé :P) nữa, rồi giải thưởng xổ số tới $70K, và message chính là: Nokia tổ chức hoành tráng thế thì đâu phải bán mình cứu Elop (frankly, tôi cũng không biết Elop là cái gì :D).

Tất cả những thứ lăng nhăng ở trên có ý nghĩa gì lắm không, có chứng tỏ điều gì không? Không, nếu muốn biết về tình hình sức khỏe, thị trường của các hãng, các xu hướng, cộng đồng công nghệ, cái gì hoành tráng, cái gì không thì chỉ cần ít phút vào Internet là có hết, Nokia hoàn toàn có thể tổ chức một show còn hoành tráng hơn nữa ngay cả khi nó thực sự phải bán mình :). Thời gian bạn bỏ ra, đi lại, còn giá trị hơn nhiều tất cả những thứ lăng nhăng này.

Mấy cái thứ quà tặng lăng nhăng kia có quan trọng gì lắm không? Năm ngoái tôi có mua mấy cái cốc in quảng cáo của Nokia từ một chỗ chuyên bán hàng khuyến mại thừa :), rẻ bèo, tôi mua vì thích mấy cái họa tiết và cốc sứ Minh Long 1 thì đẹp, chứ chẳng fan gì Nokia nữa (trước kia thì có). Nhưng tôi sẽ bỏ chừng $10 hoặc hơn ra để mua mấy cái cốc, mũ, t-shirt của Stack Overflow hay Mozilla. WP và Nokia có vị thế thế nào trong thị trường smartphone và mobile application, cũng như SO và Mozilla trong web development hay là software nói chung thì ai cũng rõ :).

Là nhà phát triển, bạn nên cần biết cái gì sẽ được trình diễn, do ai trình diễn, cái được trình diễn đó có make sense với bạn, với cộng đồng lắm không, và nó có chỉ đơn thuần là lặp lại (có khi ở mức độ đơn giản hơn) những gì đã có trên Internet, mà bạn có thể tiếp cận dễ dàng và hiệu quả hơn nhiều, không. Bạn cần các hãng hỗ trợ về công cụ, về cộng đồng, và nội dung thực sự cần thiết để tham gia nghiêm túc chứ không phải chơi chơi, và loại bỏ những bạn chơi chơi. Xa hơn, bạn cần các hãng hỗ trợ thiết thực cho startups, kiểu như Microsoft Bizspark, tôi thích cái chương trình này 🙂

Repost, originally posted at http://timua.blogspot.com/2013/08/nha-phat-trien-can-gi.html

I’m (at least) a top 10% developer

Yes, according to this great post 🙂 that I’d like to quote some pieces below:

I know that you are a top rated developer. In fact I know that everyone reading this is ranking among the top 10% of all developers. How do I know? Because 90% of all developers never read a programming blog, never have any side projects to learn something new, and never spend any time or effort outside work hours to improve.

It also made me remember Peopleware, one of my favorite books that I read more than ten years ago, thank to Hoa’s great bookshelf at 24mB Software Development (don’t google it, it has been gone for years too :D).

Actually there is nothing new in this post, since I have seen what it is talking about for years. Internet and technologies are changing rapidly but these above quoted things.

I don’t understand how people can choose to not participate in the online community.

Sometimes I also personally ask this question myself, for our local developer community, I think there are some reasons. What firstly comes to my mind is “language barrier”, we are well-known for bad English :), I’m not good at English too, so shame. The second reason is our native behavior (I don’t know and a bit lazy to find exactly English word for it at this moment :)), we tend to not share knowledge, actually we are too lazy to not even ask our question if it isn’t found by Google. Even in our local communities (in Vietnamese), where completely don’t require any special skills and knowledge,  most members never share anything or only share little. The third reason is more serious, it’s so sad, but big part of our developers don’t love what they are doing daily. They work as a developer but they think about being a Project Manager, a Manager in general, a Business Analyst, or doing less-technical business that earn much more money easier blah blah. They think about how to not to be a developer in near future.

They happily talk about someday when they no longer code, when they only manage others. They are very surprised if they know someone at my age is still coding. I think they are even likely shocked if they know I’m not just still coding, but I still code like crazy :D. They have no passion with their career, so they don’t have reason to spend much time with it, to improve their skills. They just do minimum things that their employer asks they to do.

I just fixed a minor bug this morning 🙂

Repost, originally posted at http://timua.blogspot.com/2012/09/im-at-least-top-10-developer.html

Random thoughts of a very old Ajax article

Today I just again found a new message in the Spam folder of my mailbox that asked me for sample code of an old article that I wrote more than five years ago for PC World Vietnam magazine. I would almost forget it if I did not somtimes get a new message asking me about its sample code or something related to Ajax. This message also makes me remember more about the article, I quickly wrote it in an afternoon and revised in the night and then sent it out. I wrote it simply because I was so excited with AjaxPro library, you know, in late 2005 and beginning of 2006 Ajax is still something very new and we often write Ajax code entirely manually, both JavaScript on client and C# code on the server side. AjaxPro made my life much easier, and I used it intensively with a my website at that time. ASP.NET Ajax is still in its early alpha with codename “Atlas”, of course there was no ASP.NET MVC and jQuery in those days :D.

This was my first and only programming article has been published in an IT magazine until now. Although I was paid a reasonable amount (600K) for it 🙂 and immediately got an offer to write more technical articles from another magazine, I have written no more article. The reason is very simple, things are changing so fast and we already have much useful information to learn so it’s not necessary re-write (not translating) something in Vietnamese. Surely you can easily find many good tutorials on any topic today that I can hardly create a better Vietnamese version :). The other reason is we actually have no magazine technically for software industry solely and no one want to write programming stuffs for hardware, entertainment devices focused magazines.

I was a bit surprised when someone still asked me about it two years later, you know, our software industry has been moving so fast and many things are often being replaced with better options after one, or maybe two years. They were all young students, and I assume that they can use English well, so why don’t they still bother with something outdated like this article. Five years is very long time in my life, many things has changed, I failed to do several things, I gained a bit of success on the others, I was excited with ASP.NET MVC 1.0 and even used its RC version for a production website. And now, two years later, no one talk about it. So if you want to play with Ajax, why don’t you have a look at jQuery and ASP.NET MVC 3?

Originally posted at http://timua.blogspot.com/2011/06/random-thoughts-of-very-old-ajax.html

Getting started with Git

Visual SourceSafe was most familiar source control to all of us in many years in the past, a friend of mine was very surprised when we still used VSS in my Scrum team in 2009. We also used exclusive checkout mode by default. It is unbelievable now, but team simply chose VSS for its sake of simplicity and partially because they were worried too much about multiple checkout and merging code. The fact that we had only few issues with merging code when we switched to SVN later, but I wasted too much time with VSS to get our work done.

Yesterday I just started using Git, although I actually used Git in the past but just for cloning an open source and knew very little about it. Fortunately the Git website already contains many useful information for beginners and I didn’t bother to do any google.

I took a quick look at two videos by Linus Torvalds and Bart Trojanowski first to get a basic information about Git, since I’m not good at learning by video and a bit tired so I felt asleep while watching Linus 🙂 and stopped after about 30 minutes on Bart’s presentation because it started diving deep into many commands that I’ve no idea about.

Then I followed a quick guide to setup Git on my computer, it worked well. I entered a passphrase so I always had to enter it again for every push, don’t repeat me 🙂 (surely there will be a way to remove it but I don’t know now and don’t bother to find out what it is). Then I created a free repository on GitHub. You have to type Git commands manually in the Command window, there is no TortoiseGit.

I continued with Git Reference document, in the first page it told you that you’d better to forget almost things you know about SVN or source control management in general since Git is something very different :).If you ever made a daily copy of a project you were working on to another folder for backing up purpose in the past like me, basically Git does the same thing but much faster and easier for us.

Then I went through most used commands to add files into repository, to commit changes, to fetch new changes from a remote repository, to merge changes and so on. Finally I put MvcMusicStore successfully into GitHub at https://github.com/Tiendq/MvcMusicStore. I’ll use it as a base project to play with ASP.NET MVC.

I think there are two important things you have to know in order to use Git right in the first time. First Git is decentralized repository, there is no true Git server like what we have known in VSS, or SVN. There are local and remote repositories. Second, you have to add a same file everytime it is modified to tell Git to track it and add it to staging area, then you need to use commit command to commit changes before the last time you ran add command to the local repository. It means that commit command doesn’t automatically commit any change has been made until this point of time. To actually commit changes to the server, I’m talking in SVN language, you need to add files to a remote repository first, then run a push command to update your changes to the remote repository (so others can pull and merge your changes later with their local repository).

That’s it. I’m so excited with Git and documents are well done so it’s worth a quick tour on git-scm.com :). Duc Duong, a talented developer, also told me to use Git two years ago, I definitely missed a chance to learn a new thing, I wish I tried it earlier.

Originally posted at http://timua.blogspot.com/2011/05/getting-started-with-git.html

Old lessons learned from a new Scrum project

Back to 2009 when I spent more than a year to run a Scrum team and first four months was really a tough times with lots of troubles and endless overtime. Fortunately we still could do first project successfully with some trade-offs, and definitely it was a costly success.

I learned many valuable lessons since we had started a new business model, applied a new process (Scrum), gone with completely new team. A year later, when I decided to leave, the team became an elite team in the company, and I can say I was proud of what we had done.

This was a sprint dashboard we used to do standing meeting visually. It was a great idea until a guy proclaimed SM himself came and kicked it out. Click to see detail notes.

I just joined a new Scrum team recently, and I’m afraid I must admit that the team is even immature than the team I worked with in 2009, except people who play Project Manager and Technical Lead roles. I’m currently a chicken who play a kind of team’s internal QA guy, and whatever I think we can improve I’ll tell the team.

The first sprint was passed and we just had a retrospective meeting late afternoon today, team identified several problems and most of them were also what I have been worried about from the start days. It was too easy to catch those problems since they violated significantly intrinsic rules of Scrum. I wish people thought about them more seriously.

First, it seemed that team did not read and try to understand stories before joining the sprint estimate meeting. BA guys just run quickly through stories. Team did not understand requirement as enough as they need to make reasonable estimation. In the past, my team has at least a half of day to digest being done stories themselves.

Since we spent a significant amount of time for understanding stories in a planning meeting, we didn’t have enough time as we thought, then PM made a deadly decision: the team estimates and breaks task in two separate groups. I think needless to say about the result. In the past we always did it in a whole team.

One of the evil things that I strongly told other that it was wrong is task duration. I’ve never understood that why they could allow people to do 16 hours task. It resulted in unclear tasks, no other way. In the past I strictly defined that task was no longer four hours, and if it was a four hours task, please provide detail reason. Don’t worry, it’s your right to define your tasks freely.

In the next days, to conform to Scum spirit, we let people picked their tasks freely, or I can say it was almost freely. What did happen some days later? I was not surprised that tasks were depended upon each other, but PM was surprised when team had done many tasks but no one could run the application just for a quick look. Testers could only start testing when we passed about three fourth of sprint time. And they unluckily have had to work harder than they have to. Many bugs was occurred, many of them were trivial bugs. In the past my team could pick task freely but in a controlled manner.

We did not do unit testing after coding (yes, I have just expected that level since true TDD is something very expensive and we can’t afford it, at least for now :D). We allowed unit tests will be done at the end of sprint when testers likely did all the tests. It simply freed developers from their bugs and made testers work harder. Period. Frankly in the past we did always not do unit testing properly, our process was compromised wisely :), and we was accepted to do it in another period of the project. What I want to say is if unit testing has to be done during sprint time, do it as soon as possible, in other case if customer allowed to do it later, let them for very late sprints.

I stop here because I’m so hungry and it is too late to have dinner now :). Fortunately we learned some lessons and wanted to improve first in doing estimation and unit test areas starting next sprint.

P.S: I’ve played with Scrum mostly based on what I’ve learned from the great book titled “Scrum and XP from the Trenches“.

Update: I’d like to clarify more aforementioned troubles and endless overtime, they were not Scrum’s problems itself. Among many things, our biggest troubles at that time were office infrastructure, miscommunication between us and customer, customer’s wrongly expectation, the last thing and the only technology related thing was Endeca, an ecommerce focused proprietary database.

Originally posted at http://timua.blogspot.com/2011/05/old-lessons-learned-from-new-scrum.html

Where are we in Stack Overflow map?

According to the latest post on Stack Overflow blog, luckily we are in the top 30 countries that made most visits to Stack Exchange sites (although there are only 4 visits per month per 1000 population). And we are unbelievable ranked higher than both China and Japan, even India :D. Joel is thinking again about localize his sites in other languages because he has thought that the reason of low participation from other countries even a first-country like Japan is mainly the language issue. It’s English’s fault :).

But I don’t agree, might be he is right with most Japanese and Chinese (who live in their country) which to be known not very good at English and even don’t want to use English. He is completely wrong with India, we know that English is a native language in India and Indian developers are known very good at English too, of course, but they still make only 2 visits last month :D. Look at the total visit number, Vietnam’s is just one tenth of India’s and how about the number of developer in each country, I think the ratio of Vietnamese developer to Indian developer is even smaller.

And Vietnam, is our participation so low because we can’t use English well and don’t benefit much from English content? A big NO. Although most of us are well known for badly using general English, we still use English very well for our work and if someone even can’t read English well then Google Translator comes to help. Surely Google is their best friend in this situation. On the other hand, even it seems that Japanese is the our largest software outsourcing market, there is very small amount of developers who can use Japanese well. English is actually native language in our software development community.

So what are reasons? I want to make some wild guesses, is it our low sharing attitude? or not many Vietnamese know there are communities with name starts by Stack? or we don’t have much thing to share, just search and learn from others is enough? I don’t know, but I know it’s not because of English.

Originally posted at http://timua.blogspot.com/2011/04/where-are-we-in-stack-overflow-map.html

Có nên dịch hoặc viết bài thuần tuý kỹ thuật phần mềm với tiếng Việt không?

Hôm nay vô tình google (bất cứ một ai đã từng tìm kiếm thông tin trên Internet bằng Google chắc sẽ biết động từ google ở đây nghĩa là gì không cần biết người đó có biết English hay software programming hay không, right? J) ra một loạt bài giới thiệu nhập môn về WCF bằng tiếng Việt nên lại nhớ một chuyện cũ đã lâu liên quan đến chuyện dịch/viết sách/tài liệu kỹ thuật phần mềm với tiếng Việt. Vào khoảng năm 2002 khi tôi đi mua sách cho cty, tiện tay nhặt một quyển về ADO.NET (lúc đó còn là thứ rất mới mẻ) về để lỡ ai cần học nhanh thì xem (dù sao cho đến giờ khả năng sử dụng English của giới developer vẫn thường bị coi là củ chuối mà J). Sau đó ít lâu có một lần ngó thử vào xem nó viết thế nào, xem được vài trang tôi cũng tá hoả lên vì mình đang sử dụng ADO.NET rồi mà còn không hiểu sách nó nói gì nói chi đến những người chưa biết!!!, vì nó viết thuần Việt quá, và còn không thèm để từ gốc trong ngoặc (để những người biết rồi có thể hiểu).

Quay lại mấy bài về WCF mới thấy hôm nay, tất nhiên bây giờ sau gần 10 năm thì nội công cả về phần mềm và English của tôi thâm hậu hơn rất nhiều rồi 😛 nhưng mà thấy cái vấn đề ngôn ngữ nó vẫn y nguyên, tức là dường như nó làm rắc rối thêm thay vì để dễ hiểu hơn. Ví dụ những từ rất là khó hiểu như cấu tử (constructor), không gian tên (namespace), song công (duplex), dị bộ (asynchronous, tại sao không phải là không đồng bộ?), cũng như còn rất nhiều từ khác được dịch từ English chính xác là sang từ Hán Việt, vậy là thay vì phải dùng từ điển Anh-Việt thì chúng ta phải dùng từ điển Hán Việt bởi vì bản thân những từ này cũng không phổ biến trong cách nói/viết hàng ngày.

Một điểm chú ý khác là tuy chúng ta chủ ý muốn dịch/viết bài tiếng Việt nhưng lại còn rất nhiều từ không được dịch, ngoại trừ một số ít hơn là rất khó dịch, phần lớn sẽ là dễ dịch hoặc đã quen thuộc hơn nhiều. Cuối cùng, mặc dù chúng ta có một bài tiếng Việt nhưng số lượng từ English vẫn ước chừng khoảng 20%-30%, và thực ra nó cũng không khác nhiều so với chuyện dân IT nói chung thường hay sử dụng “một cách vô tổ chức” lẫn lộn cả English lẫn tiếng Việt trong khi nói/viết (những nội dung informal) mà vốn bị một số người phản đối kịch liệt (tôi gọi đây là những người bảo thủ, ví dụ trong thời gian hơn một năm tôi làm ở FSoft trước đây thấy đâu như phải có 3, 4 lần có bài viết trên Chúng ta, Cuccumber gì đó tỏ ra rất bức xúc về chuyện này, thậm chí có vẻ rất gay gắt nào là “chửi cha không bằng pha tiếng”, hay là do sử dụng tiếng Việt kém nên phải dùng lẫn English, oh man, so funny it is :D).

Ví dụ một số đoạn nội dung rất đơn giản (về mặt kỹ thuật) nhưng việc sử dụng từ ngữ làm cho nó trở nên phức tạp hơn trong việc hiểu:

1. Service Contract (Contract dịch vụ): Định nghĩa các phương thức của một dịch vụ, thực chất là các hành động mà client có thể sử dụng ở các điểm cuối (endpoint)

3. Data Contract (Contract dữ liệu): Định nghĩa các kiểu dữ liệu được sử dụng ở các phương thức của dịch vụ

3. Message Contract (Contract bản tin): Cung cấp khả năng để điều khiển các đầu đề bản tin trong quá trình tạo ra các bản tin

4. Credentials: Trả về các credential được sử dụng bởi client để liên lạc với điểm cuối dịch vụ thông qua kênh được tạo ra bởi factory.

5. Hai kiểu liên lạc tiếp theo đây là liên lạc song công và liên lạc dị bộ bạn ít gặp hơn.

Có mấy điểm chính mà việc dịch ra tiếng Việt làm nội dung cần truyền đạt trở nên khó hiểu hơn (thay vì dễ hơn như ta mong muốn): Thường không có một từ chuẩn để sử dụng (hoặc có được quy định nhưng ít người sử dụng) nên thường không được sử dụng nhất quán kể cả ngay trong một bài, từ được chọn dịch ra chưa hoặc không phản ánh đúng nghĩa của từ gốc, sử dụng nhiều từ Hán Việt vốn thường không hay được sử dụng hàng ngày.

Có lẽ không nên viết/dịch những bài thuần tuý kỹ thuật nữa khi mà số lượng từ English không được dịch vẫn còn chiếm tỉ lệ quá lớn, nó là một phần nội dung và làm cho bài viết trở thành song ngữ (kiểu mới) J, chứ không phải chỉ là một vài thuật ngữ riêng lẻ cần được chú thích. Với hầu hết mọi người đều học English từ cấp tiểu học như hiện nay thì việc đọc hiểu các nội dung thuần tuý kỹ thuật không có gì là khó khăn cả, việc dịch ra tiếng Việt không có tác dụng gì nhiều với đa số mọi người. Có lẽ nên coi việc ít nhất phải biết đọc English là điều kiện đầu tiên và dễ nhất để làm việc về software development (thực tế các tài liệu phần mềm viết đơn giản và dễ hiểu với một lượng vốn từ vừa phải dù là sách, article, hay blog post, discussion), dù sao thì chưa và có lẽ còn rất lâu (không dùng never cho nó an toàn :D) thì mới có chuyện tools, frameworks, API được localize cho tiếng Việt thế nên thực tế có không muốn thì vẫn cứ phải dùng English suốt.

Nỗi lo sợ overdesign làm người ta nghĩ ra agile process để khỏi cần design gì cả nhưng rồi nó dẫn đến nỗi lo sợ khác là theo thời gian software lại được implement/refactor tự do rồi không kiểm soát được nữa. Nỗi lo sợ mọi người kém English nên chúng ta hay phải dịch sách/bài sang tiếng Việt dẫn đến tạo ra nỗi lo sợ khác về sự phức tạp không cần thiết và lại cần phải dịch lại một lần nữa từ một thứ song ngữ mới sang cách chúng ta có thể thực sự hiểu được.

Originally posted at http://timua.blogspot.com/2011/03/co-nen-dich-hoac-viet-bai-thuan-tuy-ky.html