Hoang Tran's Blog

January 23, 2010

Dạy con (2): Siêng năng

Filed under: Thoughts — Hoang Tran @ 5:34 pm

Bạn phản ứng thế nào khi một người bạn đi qua thấy bạn đang học/làm việc và khen bạn là chăm chỉ?

Hầu hết những người bạn học của tôi đều lập tức phản ứng  rất quyết liệt là: “Trời, đâu có chăm vậy đâu, tao toàn chơi thôi”. Và tôi cũng từng như vậy. Sự thật là tôi biết trong đầu chúng tôi lúc đó phải phản đối để không ai nghĩ là mình chăm học. Tất cả chẳng ai chịu nhận mình là chăm học cả. Tại sao lại như vậy?

Tôi không rõ những cái suy nghĩ đó hình thành từ khi nào trong óc chúng tôi. Tôi cho rằng có hai lý do mà chúng ta phản ứng theo cách như vậy:

a) Cảm thấy xấu hổ vì vẫn thấy chưa chăm chỉ như khen ngợi và

b) mặc dù vẫn thấy là mình chăm chỉ hơn người khác nhưng vẫn từ chối vì ai cũng muốn chứng tỏ rằng mình giỏi, kết quả học tập tốt vì mình thông minh chứ không phải vì siêng năng mà có. Hoặc có giả sử kết quả học tập xấu thì cũng không ai trách người lười học cả. Nếu một người chăm học mà học vẫn kém thì chắc chắn đầu óc người đó không bằng bạn bè.

Điều a) hầu hết mọi người đều có chút ít, nhưng phải rất lâu sau tôi mới nhận ra điều b) và từ bỏ suy nghĩ trẻ con đó. Thật sự những ai đã suy nghĩ như thế thì thật xấu hổ. Bởi vì chúng ta đã được dạy rằng: có tới 99% thành công từ mồ hôi và nước mắt hay “học, học nữa, học mãi …” Thế nhưng không tiếp nhận được bao nhiêu.

Một người cần phải tự hào bằng thành công từ mồ hôi và nước mắt thay vì từ trên trời rơi xuống. Cái thông minh bẩm sinh là thứ từ trên trời rơi xuống không cần phải tự hào quá. Một công tử nhà giàu thành công từ tiền của bố mẹ hiển nhiên chẳng cần tự hào. Nếu một người đã nỗ lực hết mình thì vẫn đáng tự hào hơn một kẻ chẳng làm gì. Ta vẫn thấy những người vượt lên hoàn cảnh số phận đáng trân trọng như thế nào.

Vậy câu trả lời cho câu hỏi đầu tiên nên là: “Cảm ơn. Mình đang cố gắng”

January 12, 2010

Bí mật hay không?

Filed under: Thoughts — Hoang Tran @ 1:38 pm

(… viết nhân dịp công ty đang làm performance review cho mọi người)

Ở hầu hết các công ty bây giờ, bạn sẽ thấy lương của mỗi người là bí mật. Kết quả performance review (PR) hằng năm của mỗi người cũng vậy. Ở bộ phận của tôi mới áp dụng một cách tính mới để “cân đong đo đếm” performance của mỗi người bằng các con số. Về nguyên tắc thì mỗi người có một con số bí mật mà chỉ bạn và sếp của bạn biết. Vậy những con số như lương hay kết quả PR có thực sự bí mật không?

Thực tế là: kết quả PR của mỗi người trong bộ phận của tôi không bí mật. Mọi người biết PR của người khác. Team tôi thì mọi người biết mức lương của nhau nữa (sau những buổi ở quán bà tám haha)

Trong quá trình làm việc trong những công ty khác nhau, tôi nhận ra rằng thực sự các con số không quá bí mật. Chỉ sau một thời gian làm việc là chúng ta có thể ước chừng con số của một người nào đó cỡ bao nhiêu. Thậm chí là các con số chính xác. Ở một nhóm bạn bè thân thiết nào đó thì người này lại biết chính xác các “con số” của người kia. Hơn nữa đôi khi còn thấy người ta thầm thì rỉ tai nhau các con số của anh “sếp to” hơn. Thông thường thì các con số public thường là:  a) những con số nhỏ và b) trong nhóm của những con số có giá trị không quá khác biệt – như những người cùng cấp bậc thường chia sẻ các con số của nhau. Có thể do đó là do “tính” của người Việt :-)

Vậy thì các con số đó hoàn toàn không bí mật (bí mật theo nghĩa chỉ mình và sếp biết). Chính vì cái chân lý “bí mật mà không đó” mà dẫn tới những người tưởng nó là bí mật lại cư xử theo cách sai lầm. Ví dụ:

1. Phần lớn sinh viên ra trường và người ít có kinh nghiệm làm việc thường không đánh giá được giá trị của mình. Tôi đã từng phỏng vấn những người có năng lực, trí tuệ rất tốt nhưng đòi mức lương “bao nhiêu cũng được” :-D thậm chí 3-4tr/1th, nhưng có những người chẳng ra gì nhưng đòi 800$/1th làm tôi giật nảy mình. Vì các con số là bí mật nên tôi đã thấy một người có năng lực nhưng làm việc với 1tr5/1th. Tất nhiên sếp mà, cứ lương thấp thì mình lời thôi ;-) Kết quả là sau 3 tháng, người đó nhận thấy mình giỏi hơn người khác mà lương thấp hơn nên muốn ra đi. Lúc này thì tăng lương lên 6,5tr. Người đó ở lại nhưng những tổn thương ban đầu vẫn còn và ra đi sau một thời gian ngắn làm việc nữa. Cách đúng là gì: – đề nghị một mức lương tương xứng người đó và cho thời gian thử việc nếu thấy cần thiết. Người phỏng vấn mà đề nghị một mức lương cao hơn (tất nhiên phải xứng đáng) mức lương người được phỏng vấn đề nghị thì thật ấn tượng cho người được phỏng vấn ;-)

2. Sau một thời gian làm việc mọi người sẽ nhận ra rằng: một người muốn có một con số lớn sẽ dựa vào khả năng “negotiation” (thuyết phục) của người đó. Nếu người đó có khả năng thuyết phục chứng minh với “sếp” là mình được một con số nào đó thì người đó sẽ được. Và ngược lại sẽ phải chấp nhận con số thấp hơn. Phần lớn các “sếp” sẽ là người đầy kinh nghiệm khéo léo sẽ thuyết phục ngược lại :-D Và tất nhiên nếu các sếp nghĩ về nguyên tắc bí mật mà đánh giá  các nhân viên không công bằng sẽ kéo theo các hậu quả xảy ra như: a) một loạt người nghỉ việc; b) mâu thuẫn giữa các thành viên trong team. Tôi đã từng thấy một người được tăng chức và một loạt người khác nghỉ việc vì việc đó.

Vậy đó, bí mật nhưng thực ra không. Tôi nghĩ rằng nếu người quản lý có thể public tất cả các con số của mọi người mà không gặp vấn đề gì thì có nghĩa đã thành công trong việc quản lý :-) Người quản lý nên đưa ra những con số tương xứng với mỗi nhân viên thay vì chỉ dựa vào negotiation skill

December 24, 2009

Những suy nghĩ về sự tự do (1) – Thời gian

Filed under: Thoughts — Hoang Tran @ 9:36 am

Từ ngày công ty ra luật những ai đi muộn quá 9h30 thì sẽ ghi “sổ đen” nếu những người đó không gọi điện cho manager của mình. Kết quả là gì?

Là số người đến lúc 9h15-9h30 tăng đột biến. Đến trước lúc 9h chỉ có lác đác vài người (do nhu cầu công việc). Trong khi đó, từ nhận xét cảm quan lúc mới vào công ty: lúc 8h30-8h45 là đã có đến hơn 60% đã có mặt công ty, đến 9h thì đã hơn 90% có mặt công ty, chỉ còn lại những người vì lý do cá nhân không thể đến sớm hơn được. Những người đến muộn hơn 9h thì cảm thấy rất ngại ngùng khi trong team đã đẩy đủ.

Hơn thế nữa, mức độ hài lòng của nhân viên sẽ giảm sút vì:
1. Cảm thấy gò bó
2. Nhận ra công ty không quản lý bằng công việc mà quản lý bằng thời gian giống như các công ty nhà nước.

Những điều này hạn chế với những người làm công nghệ nói chung, ảnh hướng tới tính sáng tạo tự do trong công việc.

Đã quá muộn vì phong cách 9h30 đã trở thành “văn hoá” công ty. Thiết lập lại kỷ luật 9h càng giảm mức độ hài lòng.

Bài học là gì? Có lẽ nên làm survey trước khi đưa ra một quyết định mang tính chủ quan. Nhưng những con số trên mình dựa vào chủ quan, phải chăng mình nên lấy con số thống kê từ phía công ty cho chính xác ;-)

September 11, 2009

Truyền tham số chương trình trong GNU Make

Filed under: Programming — Hoang Tran @ 10:08 am

(Nghĩ mãi cái tiêu đề mà không biết có thể hiểu được vấn đề không? Đại loại vấn đề thế này)

Trong quá trình phát triển phần mềm thì chu trình “sửa code”, “biên dịch lại”, và “chạy thử” được lặp đi lặp lại. Làm thế nào để tự động hoá chạy thử chương trình khi thay đổi một chút ít trong mã nguồn (chương trình hoặc thư viện)? Có thể nghĩ đến ngay viết một script để làm những việc đó, nhưng thường thì người ta hay thêm một rule “run” trong Makefile, kiểu thế này:

run: $(program) $(libs)
     $(program) arg1 arg2 ... # excute program

Khi chạy “make run”, nó sẽ tự động biên dịch lại chương trình và libs nếu cần thiết rồi thực hiện lệnh chạy chương trình. Vấn đề là mình muốn truyền tham số vào chương trình chạy thay vì “hard code” với arg1 arg2 ở trên.

Phải mất hơn 2 tiếng lôi lại cả tài liệu GNU Make Manual ra mà chưa thấy có cách nào khả dĩ :-) Chẳng thể “make run arg1 arg2″ hay kiểu “make run_arg1-arg2″ được ;-)

(more…)

September 10, 2009

8.11 Problem 1

Filed under: Programming — Hoang Tran @ 2:43 pm

Ở phần cuối ở chương 8 sách Programming Erlang có 2 bài tập thực hành việc lập trình “concurrent programming”

1. Write a function start(AnAtom, Fun) to register AnAtom as spawn(Fun). Make sure your program works correctly in the case when two parallel processes simultaneously evaluate start/2. In this case, you must guarantee that one of these processes succeeds and the other fails.

Về cơ bản thì giống ý tưởng của singleton, chúng ta cần đăng ký một process với cái tên là duy nhất (unique). Cái suy nghĩ đầu tiên là trước khi register một process với tên AnAtom thì check xem cái tên đó đã được register chưa, nếu chưa thì mới được phép register. Khi đó ta implement như sau:

start(AnAtom, Fun) ->
    case whereis(AnAtom) of
        undefined ->
            register(AnAtom, spawn(Fun)),
            succeed;
        _Else -> throw(already_started)
    end.

Tuy nhiên như chú ý việc thread safe khi implement một singleton thì đoạn mã trên sẽ chạy sai khi 2 process chạy song song. Ví dụ: Process A kiểm tra whereis(AnAtom) và có kết quả undefined. Sau đó đến lượt Process B kiểm tra whereis(AnAtom), lúc này AnAtom chưa được đăng ký nên vẫn có kết quả undefined; tiếp đó Process A đăng ký (gọi register) rồi đến khi Process B gọi register thì fail vì Process A đã đăng ký AnAtom rồi.

Vậy cần xử lý như thế nào?

(more…)

September 9, 2009

Concurrency

Filed under: Programming — Hoang Tran @ 3:17 pm

Trích sách Programming Erlang

We understand concurrency.
A deep understanding of concurrency is hardwired into our brains. We react to stimulation extremely quickly, using a part of the brain called the amygdala. Without this reaction, we would die. Conscious thought is just too slow; by the time the thought “hit the brakes” has formed itself, we have already done it.
While driving on a major road, we mentally track the positions of dozens, or perhaps hundreds, of cars. This is done without conscious thought. If we couldn’t do this, we would probably be dead.
The world is parallel.
If we want to write programs that behave as other objects behave in the real world, then these programs will have a concurrent structure.
This is why we should program in a concurrent programming language.
And yet most often we program real-world applications in sequential programming languages. This is unnecessarily difficult.
Use a language that was designed for writing concurrent applications, and concurrent development becomes a lot easier.
Erlang programs model how we think and interact.
(more…)

August 6, 2009

Dạy con (1)

Filed under: Thoughts — Hoang Tran @ 4:17 pm

Con mình thích thành cái gì thì mình dạy nó cái đó thôi; thích đi nuôi bò lấy sữa thì cho đi chăn bò; thích thành thợ mộc thì làm thợ mộc; thích thành phi công thì thành phi công; thích làm hoạ sỹ thì cho làm hoạ sỹ, tốt nhất là đừng để nó làm kỹ điện như anh. Chỉ cần dậy nó môn nào nó cần, còn lại dạy nó hưởng thụ rồi văn học nghệ thuật cho nó sướng. Đến mùa hè, anh sẽ đưa chúng nó sang hẳn Vancouver leo núi, câu cá, chèo xuồng vượt thác. Mùa đông thì đi trượt tuyết, đi xem người Eskimo, đi xem vùng Yukon… Nếu chúng nó máu thì đi hẳn tàu phá băng vào Bắc cực xem gấu trắng với cá voi. Lớn lên một tí, cho theo bố mẹ đi du lịch châu Phi, Trung Đông. Thế có phải là hay không? Sống thế mới là sống chứ. Con mình nhất định phải hơn mình… Chúng nó phải…

Đoạn trên trích từ một truyện ngắn trong tập truyện ngắn “Nước Mỹ” của Phan Việt đọc nghe rất sướng. Nhưng đến câu cuối mình lại cảm thấy cái chất Việt vẫn quanh quẩn????

August 3, 2009

.astylerc

Filed under: Resources & Tools — Hoang Tran @ 2:52 pm

Astyle là một tool rất tốt để format source code. Mỗi khi có source của cái gì đó là mình cứ format source trước đã rồi đọc gì thì đọc. Có thể dùng astyle làm hook pre-commit cho các source version control. Đây là .astylerc đặt ở home directory ;-)

# Author     : Hoang Tran <tran.hoang@gmail.com>
# Version    : 1.1
# Last Change: Aug 03, 2009

# Predefined style option -A3
–style=k&r

# Indent using 4 spaces per indent. Don’t use tab -s4
–indent=spaces=4

# Break brackets from namespace, class and function definitions,
# but attach brackets to statements within a function -l
–brackets=linux

# Indent ’switch’ blocks so that the ‘case X:’ statement are
# indented in the switch block. -S
–indent-switches

# Indent multi-line preprocessor definitions ending with a backslash -w
–indent-preprocessor

# Pad empty lines around header blocks (eg. ‘if’, ‘while’ …) -f
–break-blocks

# Delete empty lines within a function or method. -x
–delete-empty-lines

# Insert space padding around operators. -p
–pad-oper

# Remove extra space padding around parenthesis on the inside and outside -U
–unpad-paren

# Converts tabs into spaces in the non-indentation part of the line -c
–convert-tabs

# Do not retain a backup of the origional file
–suffix=none

July 13, 2009

Sài Gòn đáng thương

Filed under: Life — Hoang Tran @ 10:03 am

Mình vẫn hay thường nói với bạn bè trong SG là mình rất thương họ, và thấy người SG rất đáng thương :-P   Đáng thương là bởi vì ở SG chẳng biết đến mùa đông là gì, chẳng biết đến những cơn gió lạnh đầu mùa, những trận mưa xuân, những cái rét buốt da buốt thịt.

Thì đúng như vậy! Thế nhưng có lẽ đó chỉ là đáng thương cho những người từ Bắc vô Nam thui, chứ những người không biết đến mùa đông thì đâu thấy nhớ đến cái rét HN đâu. Chỉ những người như mình mới nhớ những cái rét đấy :-( Mình nhớ những ngày lạnh chuyển mùa, có cô em ngồi sau lưng thò tay vào túi áo khoác của mình, nép vào lưng rong ruổi (rõ là dở hơi) trên đường phố HN :-P

Hôm nay đi làm, tự dưng thời tiết SG có cái diễm phúc đấy, trời cũng trở lạnh nhưng chẳng có em nào sau lưng :-D

July 10, 2009

Color man pages

Filed under: Resources & Tools — Hoang Tran @ 5:59 pm

Mới biết cái tip này và giờ thì cực kỳ happy khi đọc man page :-)

screenshot

screenshot

Older Posts »

Blog at WordPress.com.