<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-698417740100036161</id><updated>2012-01-31T06:46:39.562+07:00</updated><category term='suy ngẫm'/><category term='Haskell'/><category term='facebook'/><category term='đam mê'/><category term='quản lý'/><category term='mạng xã hội'/><category term='công cụ'/><category term='thủ thuật'/><category term='inception'/><category term='kinh doanh'/><category term='lập trình'/><category term='Java'/><category term='nghệ thuật code'/><category term='xã hội'/><category term='google'/><title type='text'>Seri's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://seritrinh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-1345866857062057245</id><published>2011-04-29T16:14:00.008+07:00</published><updated>2011-05-05T14:24:51.669+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thủ thuật'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Một số thủ thuật với Facebook</title><content type='html'>Thi thoảng tôi sẽ viết thêm vào bài viết này để cập nhật các thủ thuật mới.&lt;br /&gt;
&lt;h4&gt;Tự động dùng proxy chỉ với Facebook&lt;/h4&gt;&lt;p&gt;Mỗi người có một câu trả lời khác nhau trước bài toán Facebook bị chặn. Cá nhân tôi dùng proxy, cụ thể là Ultrasurf trên Windows và &lt;a href="https://www.torproject.org/download/download.html.en"&gt;Tor&lt;/a&gt; trên Linux, đơn giản vì giải pháp này hầu như luôn hoạt động. Vấn đề bây giờ là lướt web qua proxy thì rõ ràng phải chậm, nên thông thường mình sẽ bật proxy khi dùng Facebook, rồi lại tắt proxy đi để truy cập các trang khác được nhanh hơn.&lt;/p&gt;&lt;p&gt;Cách khắc phục tình trạng này là ép browser tự động dùng proxy chỉ riêng với domain facebook.com.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Xem file PAC (proxy auto-config) ở &lt;a href="https://gist.github.com/948015"&gt;đây với Ultrasurf&lt;/a&gt; và ở &lt;a href="https://gist.github.com/948022"&gt;đây với Tor&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download và save vào &lt;code&gt;path/to/pac/file&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Với Firefox: vào Options/Advanced/Network/Settings, chọn "Automatic proxy configuration URL", ở textbox gõ &lt;code&gt;file:///path/to/pac/file&lt;/code&gt;. Kết thúc ở đây.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Với IE/Chrome: vào Tools/Internet Options/Connections/LAN Settings, chọn "Use automatic configuration script", ở textbox Address gõ &lt;code&gt;file:///path/to/pac/file&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Với cách làm này, bạn nên cho phép Ultrasurf/Tor khởi động cùng Windows/Linux.&lt;/p&gt;&lt;h4&gt;Tùy biến CSS cho Facebook&lt;/h4&gt;&lt;p&gt;Facebook dùng fixed-width layout (961px - một độ rộng được xem là chuẩn). Nó hiển thị khá tốt trên đa số laptop phổ biến nhưng trên màn hình hơi rộng một chút thì coi bộ hơi hẹp. Hơn nữa, font-size của Facebook là 11px, khiến cho tôi hay phải zoom out. Trước thực trạng này, một lần nữa ta hãy tùy biến Facebook.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Install plugin Stylish ở &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/stylish/"&gt;đây với Firefox&lt;/a&gt; và ở &lt;a href="https://chrome.google.com/extensions/detail/fjnbnpbmkenffdnngjfgmeleoegfcffe"&gt;đây với Chrome&lt;/a&gt;. Cho phép browser khởi động lại nếu nó đòi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Truy cập facebook.com, ta thấy ở góc màn hình có biểu tượng chữ S của Stylish, ấn vào đó để thấy context menu, chọn Write new style/For facebook.com. Dialog "New style" xuất hiện.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gõ Facebook ở textbox Name. Paste y nguyên đoạn &lt;a href="https://gist.github.com/948066"&gt;code ở đây&lt;/a&gt; vào textbox to nhất. Ấn Save.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Luật CSS trên sẽ đồng thời che đi phần quảng cáo của Facebook. Nếu bạn có nhu cầu xem quảng cáo, hãy xóa đoạn rule cho &lt;code&gt;.ego_column .phs&lt;/code&gt;.&lt;/p&gt;&lt;h4&gt;Chặn Facebook trong lúc cần tập trung&lt;/h4&gt;&lt;p&gt;Cái này chắc nhiều người biết rồi. &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/leechblock/"&gt;Leechblock&lt;/a&gt; cho Firefox và &lt;a href="https://chrome.google.com/extensions/detail/gpdgmmdbbbchchonpfanphofpplhmcmn"&gt;Chrome Nanny&lt;/a&gt; cho Chrome sẽ giúp chặn các trang gây nghiện kiểu như Facebook trong những khoảng thời gian ta quy định trước.&lt;/p&gt;&lt;h4&gt;Vô hiệu hóa Facebook Photo Theater&lt;/h4&gt;&lt;p&gt;Tính năng xem photo mới của Facebook, tên gọi Theater, có lẽ được thiết kế để về lâu về dài sẽ cho phép hiển thị ảnh với kích cỡ không bị giới hạn. Tuy nhiên giao diện hiện tại của Theater thật khiến người ta phải khó chịu.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Với Chrome: Ấn nút Install ở &lt;a href="http://userscripts.org/scripts/show/96773"&gt;link này&lt;/a&gt; thế là xong.&lt;/li&gt;
&lt;li&gt;Với Firefox: Trước hết cài &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/"&gt;Greasemonkey&lt;/a&gt; rồi install script trên.&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Xem số lần một URL được chia sẻ trên Facebook&lt;/h4&gt;&lt;p&gt;Rất đơn giản, bạn chỉ cần truy cập vào địa chỉ "http://graph.facebook.com/$url". Ví dụ, để xem số lần bài viết này được chia sẻ trên Facebook, hãy truy cập: &lt;a href="http://graph.facebook.com/http://seritrinh.blogspot.com/2011/04/mot-so-thu-thuat-voi-facebook.html"&gt;http://graph.facebook.com/http://seritrinh.blogspot.com/2011/04/mot-so-thu-thuat-voi-facebook.html&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-1345866857062057245?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1345866857062057245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1345866857062057245'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2011/04/mot-so-thu-thuat-voi-facebook.html' title='Một số thủ thuật với Facebook'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-5819900349523910886</id><published>2011-04-21T09:41:00.001+07:00</published><updated>2011-04-22T09:27:23.877+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inception'/><category scheme='http://www.blogger.com/atom/ns#' term='xã hội'/><category scheme='http://www.blogger.com/atom/ns#' term='suy ngẫm'/><title type='text'>Cấy Inception trên thực tế</title><content type='html'>Trong bộ phim Inception mới công chiếu, doanh nhân Saito thuê nhóm chuyên gia giấc mơ do Cobb cầm đầu để cấy một ý tưởng lên Fischer sao cho anh này tự lật đổ tập đoàn mà người cha quá cố của mình dày công xây dựng. Chuyên môn của Cobb và đồng nghiệp không phải là cấy ý tưởng. Họ chỉ quen với việc đưa đối tượng vào giấc mơ của một thành viên trong nhóm rồi ăn cắp thông tin ở đó. Cấy ý tưởng thường được xem là một nhiệm vụ bất khả thi ngay cả đối với các chuyên gia giấc mơ như Cobb.&lt;br /&gt;
&lt;br /&gt;
Tại sao cấy ý tưởng lại khó đến thế? Trước hết ta hãy mô tả nghiệp vụ mà nhóm Cobb rất thông thạo: ăn cắp thông tin từ giấc mơ. Công nghệ bấy giờ đã cho phép con người nhảy vào giấc mơ của nhau thông qua cái gọi là "máy giấc mơ". Phim không đề cập, nhưng ta có thể hình dung mục đích của tiến bộ công nghệ này là để phục vụ các nhà tâm lý học hiểu hơn về khách hàng. Tuy nhiên cái gì cũng có mặt trái của nó. Một loạt những kẻ chuyên đánh cắp thông tin từ giấc mơ xuất hiện. Họ thường sở hữu cả kỹ năng tâm lý học và kỹ năng kiến trúc (nhằm thiết kế không gian trong giấc mơ tùy theo mục đích sử dụng). Thiết bị bạn sử dụng để suy nghĩ trong mơ có tên là "tiềm thức". Nó làm việc nhanh hơn ý thức rất nhiều nhưng bạn gần như không điều khiển được nó nếu không trải qua khổ luyện. Kết quả là trong mơ, bạn thường rất mất cảnh giác và bị chi phối bởi chuyên gia giấc mơ.&lt;br /&gt;
&lt;br /&gt;
Thông thường, chuyên gia giấc mơ chỉ có ý định hỏi han bạn một vài bí mật kinh doanh nào đó. Sau khi tỉnh giấc, khả năng cao là bạn không nhớ mình đã tiết lộ những gì. Người ta phải khổ luyện để có kỹ năng nhớ được tất cả những gì mình vừa mơ sau khi tỉnh, và nhớ được tất cả những gì suy nghĩ lúc tỉnh trong khi đang mơ. Và thế là bí mật kinh doanh rơi vào tay chuyên gia mà bạn không hay biết. Chuyên gia này thường làm việc cho đối thủ cạnh tranh của bạn trên thương trường theo hợp đồng.&lt;br /&gt;
&lt;br /&gt;
Lần này, Saito không định thuê chuyên gia để ăn cắp bí mật kinh doanh như thường lệ. Ông ta thuê nhóm Cobb làm một công việc phức tạp, táo bạo, phi pháp hơn nhiều: gieo vào đầu đối thủ cạnh tranh đang lớn mạnh Fischer một ý tưởng "hãy tự lật đổ tập đoàn của mình đi". Gieo Inception khó ở chỗ, ta thường quên ngay nội dung giấc mơ khi tỉnh. Inception phải có sức thuyết phục, sức ám ảnh thì mới để lại ấn tượng cho nạn nhân khi ý thức của họ quay trở lại. Nói như Eames - người muôn mặt, thành viên tôi ưa thích nhất trong nhóm Cobb - gieo Inception là một nghệ thuật tinh tế.&lt;br /&gt;
&lt;br /&gt;
Tại sao nhất thiết phải cấy Inception vào tiềm thức của nạn nhân? Tại sao Saito không thuê chuyên gia tâm lý tiếp cận Fischer ngoài đời để làm một việc tương tự? Thực ra cấy Inception đã được người ta áp dụng ngoài đời từ nhiều năm trước. Phương pháp của Câu Tiễn khi xưa chính là dùng chuyên gia tâm lý dưới dạng một cô gái xinh đẹp mang tên Tây Thi để cấy vào đầu Phù Sai một Inception: Tây Thi còn quan trọng hơn cả giang sơn. &lt;br /&gt;
&lt;br /&gt;
Inception này khả thi vì thời đó vua chúa không được định hình vững chắc về nhân sinh quan. Trái lại, các doanh nhân thành đạt của thời đại này đều là những người rất thông minh, được giáo dục rất kỹ về ý thức, thậm chí được trao quyền tự do nhất định. Lay chuyển ý thức của Fischer là chuyện gần như không tưởng. Gái đẹp? Hãy quan sát phản ứng của Fischer trong quán bar trước một cô gái không thể đẹp hơn do Eames giả dạng. Ngay cả trong tiềm thức Fischer cũng không có hứng thú.&lt;br /&gt;
&lt;br /&gt;
Như vậy cấy Inception rất khó chính bởi lẽ hệ ý thức của người hiện đại nói chung, đặc biệt là giới doanh nhân thành đạt nói riêng, cực ký kiên cố. Một khi đã qua tuổi trưởng thành, chúng ta ít khi nào chịu thay đổi ý thức. Hệ ý thức của chúng ta không có chỗ cho ý tưởng mới. Các ý tưởng cũ thì quá chắc chắn để dịch chuyển. &lt;br /&gt;
&lt;br /&gt;
Quả thật hình thức cấy Inception ta thấy nhiều nhất trên thực tế chính là khi còn nhỏ. Cha mẹ, thầy cô, người lớn tuổi, bạn cùng trang lứa liên tục gieo Inception vào ý thức của ta khi nó còn thênh thang đón nhận. Có một nhóm người hiểu rõ điều này và khai thác nó triệt để: bộ máy chính quyền. Bộ máy chính quyền luôn muốn chi phối hệ tư tưởng của thế hệ sau, nhất là về, ừm, chính trị. Điều này có lẽ không cần giải thích nhiều.&lt;br /&gt;
&lt;br /&gt;
Một nhóm người khác luôn phải nghĩ nát óc để làm một việc khó hơn nhiều: cấy Inception vào người trưởng thành. Đó là giới marketing. Chuyên gia marketing đầu tiên phải biết nhiệm vụ chung chung của tập đoàn thuê mình, sau đó chuyển hóa nó thành một Inception khả thi - tức là, có sức thuyết phục, có sức ám ảnh - rồi cấy vào đầu càng nhiều người càng tốt. Như đã nói ở trên, điều này rất khó. &lt;br /&gt;
&lt;br /&gt;
Bạn biết không, có một Inception mà cả bên chính trị (nhất là ở các nước tư bản) và bên kinh doanh luôn muốn gieo vào đầu toàn xã hội, qua đó xây dựng chủ nghĩa tiêu dùng. Nó là giao điểm giữa nhóm mục đich của hai bên. Inception này là: bạn chi tiêu càng nhiều, địa vị xã hội của bạn càng cao và bạn càng hạnh phúc. Họ gieo Inception này một cách khéo léo, từ khi ta còn nhỏ, hết thế hệ này đến thế hệ khác. Ngày nay, chúng ta chỉ cảm thấy thua kém bạn bè vì không sở hữu iPad, không dùng dòng di động mới nhất, không đi xe xịn ... mà không ai biết tại sao. Thậm chí không ai thắc mắc tại sao. Chúng ta đã coi đó là điều hiển nhiên.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-5819900349523910886?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/5819900349523910886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/5819900349523910886'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2011/04/cay-inception-tren-thuc-te.html' title='Cấy Inception trên thực tế'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-8871344279870694111</id><published>2010-12-05T18:44:00.021+07:00</published><updated>2010-12-14T11:43:36.089+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mạng xã hội'/><category scheme='http://www.blogger.com/atom/ns#' term='kinh doanh'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Facebook và Google trên cuộc chiến mạng xã hội</title><content type='html'>Theo TechCrunch, Sergey Brin sẽ trực tiếp chỉ đạo nhóm phát triển mạng xã hội đương đầu với Facebook. Trọng vụ đàm phán không thành với Groupon, Google thể hiện rõ quyết tâm bám đuổi Facebook Deals, FourSquare trên thị trường quảng cáo nội địa khi sẵn sàng trả giá đến tận 6 tỉ đô-la. Cũng chỉ mới đây thôi người ta chứng kiến vụ cãi nhau như hai đứa trẻ con giữa Facebook và Google về vấn đề chia sẻ danh bạ các mối quan hệ. Ở mặt trận nhân lực, áp lực chảy máu chất xám đã ép Eric Schmidt phải muối mặt bỏ ra 3.5 triệu đô-la cho việc giữ chân một nhân viên chủ chốt trước sức cám dỗ của Mark Zuckerberg, đồng thời đưa ra tuyên bố tăng lương 10% cho mọi vị trí trong công ty. Có thể thấy cuộc đối đầu giữa hai đại gia dẫn đầu lưu lượng sử dụng Internet đang diễn ra vô cùng căng thẳng và hấp dẫn.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Google nhảy vào cuộc chơi không phải chỉ vì tham lam&lt;/h4&gt;Tại sao Google cứ cố chấp không chịu từ bỏ mạng xã hội? Nó đến quá muộn khi cánh cửa thị trường đã gần như hoàn toàn khép lại, không còn chỗ cho nó nữa. Sao nó không tập trung tài nguyên vào chiến lược cốt lõi là tìm kiếm, tổ chức dữ liệu? &lt;br /&gt;
&lt;br /&gt;
Nguyên nhân là vì đối với Google mà nói, Facebook chẳng khác nào hình ảnh của chính nó trước Microsoft cách đây 10 năm. Khi ấy, chính niềm tin mù quáng vào sức bành trướng không giới hạn của thị trường ứng dụng desktop đã khiến gã khổng lồ phần mềm bàng quan với thị trường online trong suốt một thời gian dài. Microsoft có nhen nhúm chen chân vào online nhưng tất cả chỉ dừng lại ở những nỗ lực nửa vời không hơn không kém. Các chiêu bài nực cười của Yahoo càng giúp Bill Gates yên tâm hơn về tầm nhìn của mình. “Online chỉ là xu thế nhất thời đang được truyền thông thổi bong bóng mà thôi. Ứng dụng online quá hạn chế về tài nguyên và sẽ không bao giờ cạnh tranh nổi với desktop. Vả lại, làm dịch vụ online dù tốt đến đâu cũng khó có thể sinh lời.” Gates tự nhủ. Kết quả như chúng ta thấy, giá trị vốn hoá thị trường của Microsoft hiện giờ là 233 tỉ đô-la, so với con số gần 400 tỉ đô-la vào mùa hè năm 2001. &lt;br /&gt;
&lt;br /&gt;
Để tôi kể lại bi kịch nói trên một lần nữa cho các bạn dễ hình dung. Năm 2010, bất chấp đà tăng trưởng như vũ bão của mạng xã hội nói chung, Facebook nói riêng, Google vẫn tin tưởng tuyệt đối vào máy tìm kiếm như phương tiện tối cao để đưa người sử dụng đến với World Wide Web. Một số dự án làm mạng xã hội của Google như Buzz hay Orkut chỉ gọi là cho có. Nó để dành các cá nhân xuất sắc nhất cho những chiến lược mà nó đánh giá là quan trọng hơn. Sự sa sút đến hài hước của MySpace và thái độ quay ngoắt 180 độ của người sử dụng càng củng cố niềm tin mà hai nhà sáng lập dành cho máy tìm kiếm. “Mạng xã hội chỉ là xu thế nhất thời đang được truyền thông thổi phồng lên ấy mà. Chúng sẽ liên tiếp thay thế nhau theo thói đồng bóng của giới trẻ, tựa như các trào lưu của ngành giải trí vậy. Vả lại, làm mạng xã hội dù tốt đến đâu cũng khó có thể sinh lời. Nếu anh đặt quảng cáo dựa trên các thông tin nhạy cảm mà người sử dụng cung cấp cho anh hoặc bán lại thông tin này cho doanh nghiệp thì cả người dùng lẫn nhà chức trách đều sẽ lên tiếng phản đối. À mà đừng bao giờ nghĩ đến chuyện bắt người sử dụng trả tiền cho dịch vụ mạng xã hội nhé!” Larry Page và Sergey Brin tự nhủ. Kết quả là đầu năm 2020, giá trị vốn hoá thị trường của Google sụt giảm xuống còn 90 tỉ đô-la, so với con số 183 tỉ đô-la vào mùa đông năm 2010.&lt;br /&gt;
&lt;br /&gt;
Xung đột quyền lợi giữa Facebook và Google thậm chí còn mật thiết hơn thế nhiều. Trong tầm nhìn chiến lược của mình, Mark Zuckerberg đánh cược vào một pha dịch chuyển thói quen khổng lồ, ở đó người ta chỉ quan tâm đến những thông tin được khởi tạo, chia sẻ bởi nhóm người được kết nối với mình mà thôi. Tương tự như khi xưa Page và Brin tin tưởng rằng ứng dụng online sẽ thay thế phần lớn ứng dụng desktop, thì nay đối với Zuck, anh hình dung ra một ngày mạng xã hội sẽ đáp ứng hầu hết mọi nhu cầu truy cập thông tin vốn là sở trường của máy tìm kiếm.&lt;br /&gt;
&lt;br /&gt;
Nếu tất cả nghe có vẻ quá to tát, ta hãy bàn đến một chuyện không thể tủn mủn hơn – cơm áo gạo tiền. Hiện cặp bài trùng Adwords/Adsense vẫn là cỗ máy in tiền chủ lực của Google. Adwords biết người tiêu dùng chuẩn bị mua gì và đặt quảng cáo dựa trên cơ sở đó. Adsense giới thiệu một mặt hàng có liên quan đến nội dung chúng ta đang quan tâm để kích thích nhu cầu mua. Tuy nhiên cả Adword lẫn Adsense đều chưa tác động đến nhân tố xã hội trong việc ra quyết định mua. Chúng ta có xu hướng muốn mua các loại hàng hóa, dịch vụ mà bạn bè đang sở hữu. Chúng ta bị chi phối bởi lời nhận xét của người quen trước khi ra quyết định mua. Đó là những biểu hiện mang tính bản năng của loài người. Ngân sách marketing của mỗi doanh nghiệp chỉ có hạn. Nếu dự định bỏ ra nhiều hơn cho truyền thông xã hội, doanh nghiệp buộc phải cắt giảm chi tiêu cho quảng cáo tìm kiếm.&lt;br /&gt;
&lt;br /&gt;
Facebook đang đe dọa hoạt động kinh doanh của Google ngay tại thời điểm này. Trong tương lai, mâu thuẫn giữa chúng hứa hẹn sẽ ngày một sâu sắc hơn. &lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Đầu hàng không được mà đánh cũng chẳng xong&lt;/h4&gt;Google có nhiều lý do để chơi đến cùng trong cuộc đua mạng xã hội. Nhưng gã khổng lồ tìm kiếm tỏ ra nhỏ bé làm sao trong không ít các nỗ lực làm mạng xã hội từ trước đến giờ. Dường như cách tiếp cận của nó có gì đó không ổn.&lt;br /&gt;
&lt;br /&gt;
Tôi nghĩ ở đây cá tính của hai nhà sáng lập đóng một vai trò quan trọng. Từ khi còn học đại học, Larry Page luôn ám ảnh với sự tiện ích. Quả thật mọi sản phẩm Google tung ra đều hướng đến tính tiện ích, đến mục tiêu tiết kiệm thời gian, gia tăng hiệu suất làm việc cho người dùng. Trong khi đó, giải trí, tiêu tốn thời gian, gây sao nhãng, gây nghiện gần như thuộc về bản chất của mạng xã hội – bên cạnh lợi ích kết nối và chia sẻ. &lt;br /&gt;
&lt;br /&gt;
Nếu biết trước hôm nay Facebook sở hữu tới hơn 500 triệu thành viên, chắc chắn khi xưa mạng xã hội đã lọt vào trong top 3 các mối quan tâm hàng đầu của ban quản lý tối cao tại Google. Page và Brin không chờ đợi tương lai này căn bản vì họ không muốn thế. Nhưng điều gì phải đến cũng đã đến. Giờ đây Google phải làm sao để kiếm cho mình một miếng bánh trên thị trường mạng xã hội, một thị trường “khó ưa” nhưng mang tính chiến lược cho hoạt động kinh doanh của nó? &lt;br /&gt;
&lt;br /&gt;
Trong slide &lt;a href="http://www.slideshare.net/padday/the-real-life-social-network-v2"&gt;“Mạng xã hội thực tế&lt;/a&gt;” của nhà nghiên cứu kinh nghiệm người dùng cho các sản phẩm xã hội tại Google, Paul Adams, ông này chỉ ra một số mâu thuẫn then chốt giữa mô hình mạng xã hội Facebook hiện đang vận hành và mô hình mạng xã hội thực tế. Chẳng hạn, mỗi cá thể thuộc mạng xã hội thực tế thường kết nối với một vài nhóm người khác nhau và khi tương tác với từng nhóm kiểu này, cá thể ấy lại mang một bộ mặt, hình ảnh tương đối khác. Trong khi đó, mỗi thành viên trên Facebook chỉ có quyền thể hiện một identity duy nhất xuyên suốt toàn bộ các kết nối, bao gồm từ gia đình, bạn thân, bạn cùng lớp, đến bạn xã hội, bạn đồng nghiệp, bạn cùng sở thích, và thậm chí cả ... girls xinh nữa.&lt;br /&gt;
&lt;br /&gt;
Sau khi Adams công bố bản slide kể trên, Facebook lập tức bế quan tỏa cảng mùa hè năm 2010 để rồi tung ra Facebook Groups. Tuy nhiên Facebook Groups chưa thể gọi là giải pháp sâu sắc cho sự mâu thuẫn mà Adams đề cập. Ý tưởng của Adams rất hay nhưng không dễ để cụ thể hóa. &lt;br /&gt;
&lt;br /&gt;
Câu “một nước không thể có hai vua” tỏ ra rất phù hợp để nói về mạng xã hội. Có lẽ Google chỉ muốn hất cẳng Facebook ra khỏi chiếc ghế độc quyền thôi, nhưng trớ chêu thay, bản chất của thị trường mạng xã hội là kêu gọi độc quyền. Bên cạnh đó, giải pháp tận dụng khe hở thị trường rồi tạo ra một mạng xã hội chuyên biệt kiểu như LinkedIn lại có vẻ quá khiêm tốn đối với một đại gia như Google.&lt;br /&gt;
&lt;br /&gt;
Trong mọi trường hợp, thách thức lớn nhất đặt ra cho Google nằm ở lực ma sát cực lớn của dịch vụ mạng xã hội. Là người Việt Nam, chúng ta hẳn còn nhớ người dùng Yahoo! 360 trung thành đến thế nào. Họ bất chấp mọi nhược điểm của dịch vụ. Lực ma sát cho mỗi thành viên là tổng hợp các kết nối sẵn có cộng với tất cả các thông tin thành viên đó chia sẻ trong thời gian sử dụng dịch vụ. &lt;br /&gt;
&lt;br /&gt;
Rõ ràng chỉ với chức năng ưu việt hơn thôi chưa đủ để bất kỳ ai đánh bật được Facebook. Khả năng cao là anh chưa kịp thu thập thành viên thì Facebook đã clone xong chức năng của anh rồi. Google cần một chiến lược ra mắt rồi lan tỏa sáng tạo và thông minh, chứ đừng bạc nhược như những gì nó đã thể hiện với Wave. Nên chăng Google bắt đầu với sơ đồ xã hội sẵn có tại Gmail và Youtube. Hoặc giả nó hãy nhanh chân nhảy vào một platform nơi lực ma sát còn thấp, như smartphone chẳng hạn.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Biết đâu Facebook sẽ không đánh mà tự thua?&lt;/h4&gt;Người ta đã nói quá nhiều về khả năng sinh lời của mạng xã hội nói chung, Facebook nói riêng. Cá nhân tôi nghĩ, về lâu về dài, phong cách quản lý nội bộ mới chính là yếu tố then chốt quyết định Facebook có giữ được ngai vàng trên vương quốc mạng xã hội hay không.&lt;br /&gt;
&lt;br /&gt;
Mark Zuckerberg là một thiên tài. Ta không phủ nhận điều đó. Nhưng đồng thời anh cũng là một kẻ bất chấp thủ đoạn. Tháng 9 năm 2004, ba nhà sáng lập tại ConnectU kiện Zuck bỏ qua sự thống nhất không có văn bản trước đó giữa bốn người bọn họ với nhau. Theo ConnectU, Zuck đã ăn cắp ý tưởng, sử dụng mã nguồn của cả nhóm trong quá trình xây dựng một mạng xã hội cho riêng mình. Bản thân cái tên TheFacebook cùng một số ý tưởng ban đầu, Zuck cũng lấy từ Aaron Greenspan, bạn học của anh tại Harvard, nguyên Think Computer CEO. Chẳng thế mà nếu tình cờ ta bắt gặp một bài viết về Facebook trên Hacker News, khả năng cao là Greenspan sẽ xuất hiện với tài khoản thinkcomp và đưa ra một số lời lẽ cay nghiệt.&lt;br /&gt;
&lt;br /&gt;
Không chỉ hung hãn, cơ hội, chàng Mark Zuckerberg trẻ tuổi đôi khi còn cư xử rất trẻ con. Anh nhiều lần bị dư luận chỉ trích vì công khai coi thường thông tin cá nhân của người sử dụng. Mới đây, Facebook vô duyên vô cớ block tài khoản của Lamebook chỉ vì trang mạng này mang một cái tên có phần động chạm. Mùa hè năm 2007, với việc lôi kéo thành công vị giám đốc tài chính của Google, ông Gideon Yu, Zuck không giấu nổi sự phấn khích trước tờ Wall Street Journal: “Thật là một điều kỳ diệu khi Yu chịu làm việc cho chúng tôi.” Ấy thế mà sau khi Yu ra đi đầu năm 2009, anh ta lại trở mặt nói rằng cái Facebook cần là một CFO với “kinh nghiệm làm việc trong công ty cổ phần công khai” kia!&lt;br /&gt;
&lt;br /&gt;
Tính cách của Zuck sẽ ảnh hưởng thế nào đến văn hoá làm việc tại Facebook? Hiện Facebook đang thu hút được rất nhiều nhân tài nhờ sức hấp dẫn của cổ phiếu trước IPO cũng như khát vọng thay đổi thế giới. Tới khi Facebook ra mắt công chúng rồi, chính thức … thay đổi thế giới rồi, liệu nó còn giữ được trạng thái sôi nổi, hưng phấn như hiện nay không? Facebook có còn “move fast, break stuff” như Zuck mong muốn nữa không? Các chuyên gia về quản lý có nhiều bất đồng trong quan điểm, nhưng họ đều thống nhất rằng tiền bạc không phải là động cơ thúc đẩy tinh thần làm việc hiệu quả nhất. Mỗi doanh nghiệp đều cần một thứ tương tự như khẩu hiệu “Don’t Be Evil” của Google.&lt;br /&gt;
&lt;br /&gt;
Cho đến thời điểm này, đa số chức năng trên Facebook có nguồn gốc từ sao chép hơn là sáng tạo nguyên bản. Tôi còn một lý do nữa để nghi ngờ nồng độ cách tân của Facebook. Paul Buchheit gia nhập Facebook tháng 8 năm 2009. Tháng 11 năm 2010, ông rời Facebook để đến với Y Combinator, một công ty chuyên đầu tư vào startup ở giai đoạn mới sơ khai. Phải chăng môi trường làm việc ở Facebook không đủ tính khởi nghiệp như vị cha đẻ của Gmail, nhà đồng sáng lập ra FriendFeed vẫn hằng mong đợi?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Google hay ở chỗ nó ít nhiều giữ được sự tươi mới ngay cả khi đã bành trướng đến con số hơn 20 nghìn nhân viên. Người ta thường chê trách Google quá phân tán sự tập trung nhưng theo tôi, đây mới chính là thế mạnh của gã khổng lồ tìm kiếm. Nó đảm bảo Google sẽ luôn sản sinh ra những dự án mới, thu hút nhân tài từ một diện rộng sở thích, sở trường khác nhau, tránh được sự nhàm chán, giải tỏa được sức ỳ. Lẽ dĩ nhiên, cái gì cũng có giá của nó. Cứ chốc chốc Google sẽ lại gặp phải một đối thủ nặng ký, hung hãn, tập trung vào một thị trường cụ thể như Facebook. &lt;br /&gt;
&lt;br /&gt;
Dù thế nào đi nữa, cuộc chiến mạng xã hội là cơ hội để tôi và các bạn thỏa mãn trí tò mò. Chúng ta hãy cùng chờ xem thành quả của những bộ óc thông minh hàng đầu thế giới.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-8871344279870694111?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8871344279870694111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8871344279870694111'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2010/12/facebook-va-google-tren-cuoc-chien-mang.html' title='Facebook và Google trên cuộc chiến mạng xã hội'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-8059656208518967234</id><published>2010-12-02T16:34:00.006+07:00</published><updated>2011-01-03T15:39:59.840+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><category scheme='http://www.blogger.com/atom/ns#' term='công cụ'/><title type='text'>Đặt tên và ký tự gạch dưới</title><content type='html'>Thực ra chúng ta không có quá nhiều lựa chọn trong việc đặt tên, nhất là khi cần viết thư viện cho người khác sử dụng. Ở đâu quen đó. Bạn dùng ngôn ngữ nào thì nên tuân theo chuẩn được quy định của ngôn ngữ đó để người sử dụng có cảm giác xuyên suốt và thống nhất. Dưới đây là tóm lược quy ước của các ngôn ngữ thông dụng:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Java, Haskell: &lt;c&gt;PascalCaseClass.camelCaseMethod()&lt;/c&gt;&lt;/li&gt;
&lt;li&gt;C#: &lt;c&gt;PascalCaseClass.PascalCaseMethod()&lt;/c&gt;&lt;/li&gt;
&lt;li&gt;C++: &lt;c&gt;underscore_separated_class::underscore_separated_method()&lt;/c&gt;&lt;/li&gt;
&lt;li&gt;Ruby, Python: &lt;c&gt;PascalCaseClass::underscore_separated_method()&lt;/c&gt;&lt;/li&gt;
&lt;li&gt;Lisp: &lt;c&gt;lisp-loves-hyphens&lt;/c&gt;&lt;/li&gt;
&lt;/ul&gt;Mới đầu tôi khá hài lòng với quy ước viết hoa so le của Java. Nhưng càng về sau tôi càng cảm thấy thích sử dụng ký tự gạch ngang hoặc gạch dưới hơn, ít nhất là với tư cách người đọc code. Vì lý do nào đó tôi cảm thấy khó chịu khi đọc code có quá nhiều chữ cái viết hoa. Dù sao đây cũng chỉ là sở thích cá nhân nhưng tôi biết mình không phải là người duy nhất có cảm giác này.&lt;br /&gt;
&lt;br /&gt;
Vấn đề bây giờ là ký tự gạch dưới tuy dễ đọc nhưng lại khó viết. Nó đem lại cho ngón tay út của bàn tay trái một cơn ác mộng khi cứ phải với ra nhấn/nhả Shift quá nhiều lần.&lt;br /&gt;
&lt;br /&gt;
Từ đây tôi nghĩ ra một giải pháp đơn giản: ta sẽ bắt editor phải cho ra ký tự gạch dưới khi gõ ký tự gạch ngang trong các bối cảnh phù hợp. Một thuật toán tôi hiện sử dụng và khá thỏa mãn: nếu ký tự ngay trước đó là chữ cái hoặc chữ số thì mình biến gạch ngang thành gạch dưới và ngược lại.&lt;br /&gt;
&lt;br /&gt;
Điều này rõ ràng không khó đối với đa số editor và IDE thông dụng. Ở đây tôi chia sẻ plugin tôi viết sẵn cho 2 editor ưa thích của mình: &lt;a href="http://codepad.org/u47sX8Zg"&gt;Vim&lt;/a&gt; và &lt;a href="http://codepad.org/bYP3Gpt8"&gt;Sublime Text&lt;/a&gt;. &lt;br /&gt;
&lt;blockquote&gt;Cập nhật: Sửa lại imap thành inoremap, sử dụng &amp;lt;expr&amp;gt; (thanks to anh Hoàng) và hỗ trợ tự động bật/tắt theo ngôn ngữ cho Vim plugin&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-8059656208518967234?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8059656208518967234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8059656208518967234'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2010/12/at-ten-va-ky-tu-gach-duoi.html' title='Đặt tên và ký tự gạch dưới'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-1503196530911287994</id><published>2010-01-29T21:51:00.005+07:00</published><updated>2011-01-01T00:56:23.224+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quản lý'/><category scheme='http://www.blogger.com/atom/ns#' term='kinh doanh'/><title type='text'>Không gian làm việc cho lập trình viên</title><content type='html'>&lt;p&gt;Ở &lt;a href="http://seritrinh.blogspot.com/2010/01/ieu-kien-lam-viec-cho-lap-trinh-vien.html"&gt;bài trước&lt;/a&gt;, tôi liên tục sử dụng khái niệm "trạng thái tập trung" như trọng tâm để qua đó chỉ ra những sai lầm trong việc quản lý thời gian ở các công ty công nghệ. Đây là một khái niệm đã được công nhận trong ngành tâm lý học dưới cái tên &lt;a href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;the flow state&lt;/a&gt; và có lẽ "trạng thái làm việc hưng phấn" sẽ là một cách dịch sát nghĩa hơn.&lt;/p&gt;&lt;p&gt;Bài viết &lt;a href="http://seritrinh.blogspot.com/2010/01/mot-gioi-khac.html"&gt;Một thế giới khác&lt;/a&gt; mô tả góc nhìn có phần lãng mạn hoá của trạng thái làm việc hưng phấn. Nếu có dịp tôi sẽ đề cập một cách khoa học các vấn đề như cảm giác thế nào và làm sao để đạt được trạng thái làm việc hưng phấn. Nhưng ở đây, chúng ta sẽ chỉ đứng từ phía nhà quản lý cố gắng tận dụng khái niệm này nhằm khai thác nguồn lực trí óc mà LTV mang lại.&lt;/p&gt;&lt;h4&gt;Không gian&lt;/h4&gt;&lt;p&gt;Không gian là một bài toán về đầu tư. Ngoài lương, bạn còn trả cho LTV không gian để họ làm việc. Đôi khi gia tăng vốn đầu tư vào không gian sẽ đem lại lợi tức cao hơn. Không gian bao gồm từ máy móc thiết bị đến bàn ghế, trang trí nội thất. Việc thiết kế không gian cho LTV phải đảm bảo &lt;em&gt;dễ tập trung&lt;/em&gt;, &lt;em&gt;kích thích sáng tạo&lt;/em&gt;, và &lt;a href="http://tintuc.xalo.vn/00483395891/ngoi_lau_truoc_may_tinh_bi_quyet_giu_suc_khoe.html"&gt;&lt;em&gt;thân thiện cho sức khoẻ&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;h5&gt;Thoáng, yên tĩnh, thoải mái&lt;/h5&gt;&lt;p&gt;Một số công ty kê bàn ghế sát nhau thành hàng. Cách bài trí này rất tiện cho việc ... bắn Half Life, vừa tiết kiệm không gian mà các thành viên trong một team có thể ... soi máy cho nhau dễ dàng. Thế nhưng nó hoàn toàn không thích hợp cho lập trình. Hãy thử yêu cầu người viết sách làm việc trong môi trường như vậy xem sao.&lt;/p&gt;&lt;p&gt;Lập trình là một loại công việc tương đối độc lập. Những công việc độc lập đòi hỏi một môi trường độc lập. LTV cần có không gian riêng, ít nhất là để họ có thể tập trung, và quan trọng hơn là tạo cảm giác thoải mái để họ hưng phấn. Ngồi lâu trước máy tính trong cùng một tư thế rất khó chịu. Đó là chưa kể mật độ máy móc quá dầy trong không gian nhỏ hẹp có hại cho sức khoẻ.&lt;/p&gt;&lt;p&gt;Theo tôi, nếu bạn không thể cấp cho mỗi LTV một không gian đủ thoáng, có lẽ bạn đang thừa người so với quy mô của công ty. Nói cách khác, bạn đang đầu tư quá nhiều vào nhân lực và quá ít vào không gian.&lt;/p&gt;&lt;h5&gt;Không gian suy nghĩ&lt;/h5&gt;&lt;p&gt;Lập trình đòi hỏi thời gian nghĩ nhiều hơn thời gian gõ code. Đôi khi ngôi trước màn hình máy tính không phải là cách tốt nhất để suy nghĩ, nhất là khi không gian làm việc vốn đã chật hẹp. Các công ty lớn thường có hẳn một khuôn viên cho LTV đi lại suy nghĩ. Các công ty nhỏ nên sử dụng phòng seminar, bếp, hay gác thượng làm nơi cho LTV tuỳ ý sử dụng.&lt;/p&gt;&lt;h5&gt;Đồ uống và bánh kẹo&lt;/h5&gt;&lt;p&gt;Ở công ty Y mà tôi từng làm, đồ uống - bao gồm từ cà phê đủ loại đến trà chanh, trà xanh, trả gừng, nước lọc - và bánh kẹo đều được cung cấp miễn phí. Ngoài chức năng "thanh lọc cơ thế, giải nhiệt cuộc sống", đồ uống và bánh kẹo sẽ giữ cho đầu óc tỉnh táo, tinh thần sảng khoái, gây cảm giác thân thiện đặc biệt cho LTV. Một giải pháp ít tốn kém để xây dựng văn hoá và sự gắn kết trong công ty.&lt;/p&gt;&lt;h5&gt;Thiết kế nội thất&lt;/h5&gt;&lt;p&gt;Tôi rất thích những bức tranh ngộ nghĩnh và sáng tạo trên khắp các phòng ở công ty Z. Điều này rõ ràng đã làm không gian làm việc của tôi và đồng nghiệp trở nên sống động hơn hẳn, kích thích khả nắng sáng tạo cũng như tinh thần làm việc của chúng tôi. Nếu như quy mô công ty của bạn chưa đủ để thiết kế được những không gian &lt;a href="http://www.toiyeumarketing.com/khong-gian-lam-viec-sang-tao-nhat-the-gioi/"&gt;kiểu như thế này&lt;/a&gt; thì ít nhất bạn cũng nên rót một chút sức sống vào môi trường làm việc bằng những biện pháp ít tốn kém như công ty Z nói trên.&lt;/p&gt;&lt;h5&gt;Những tấm bảng trắng&lt;/h5&gt;&lt;p&gt;Tôi nghe nói trong Googleplex luôn treo những tấm bảng trắng khắp nơi. Chúng hỗ trợ cho nhu cầu giao tiếp ý tưởng giữa các LTV với nhau. Các ý tưởng trong ngành lập trình thường dễ thể hiện duới dạng biểu đồ hơn là chỉ bằng lời nói.&lt;/p&gt;&lt;h5&gt;Âm nhạc&lt;/h5&gt;&lt;blockquote&gt;Results show that people who listened to music of their own selection were able to perform better than those with no music who performed better than those who listened to music they disliked.&lt;br /&gt;
&lt;br /&gt;
Xem thêm: &lt;a href="http://stackoverflow.com/questions/863649/programmer-workplace-music-and-productivity"&gt;StackOverflow&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;Trước khi bắt tay vào viết code, tôi thường suy nghĩ trong không gian yên lặng để xây dựng kiến trúc và thuật toán trong đầu. Nhưng đến khi viết code, tôi đặc biệt làm việc hưng phấn hơn nhiều nếu được nghe nhạc tự chọn (thường là death metal khi code ầm ầm hào sảng, guitar cổ điển khi cần code chậm và bình tĩnh, flamenco khi code ngẫu hứng). Tôi nghĩ các công ty nên cung cấp headphone trên mỗi PC. Điều này còn giúp cho LTV giữ tập trung nếu môi trường xung quanh đang ồn ào (nhà bên cạnh đang xây lại - chuyện thường ngày tại HN).&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Trên đây tôi đã cố ý lọc ra những điểm hay bị bỏ qua nhất trong khâu thiết kế không gian ở các công ty công nghệ. Tất cả các điểm kể trên đều hướng tới mục đích giúp cho LTV có thể phát huy hết khả năng của mình.&lt;/p&gt;&lt;p&gt;Hãy thử phân tích môi trường làm việc tại &lt;a href="http://vietnamnet.vn/cntt/201001/Vao-dai-ban-doanh-cua-Quang-no-889377/"&gt;BKIS&lt;/a&gt;. Với số tiền đầu tư không nhỏ, BKIS có một quang cảnh chuyên nghiệp, tiện nghi sang trọng, có nơi vui chơi giải trí, có không gian suy nghĩ (hành lang?). Thế nhưng diện tích không gian làm việc trên đầu người còn thấp, bài trí còn gò bó, chưa sáng tạo, thiếu sức sống.&lt;/p&gt;&lt;p&gt;Điểm đáng chú ý là tác giả bài viết tuy rất quan tâm đến quản trị doanh nghiệp nhưng lại tỏ ý hoàn toàn hài lòng với môi trường ở BKIS, và có lẽ rất nhiều nhà quản lý công nghệ khác cũng vậy. Tôi ngờ rằng các nhà quản lý công nghệ đang chưa dành sự quan tâm thoả đáng đến đặc thù của công việc lập trình.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-1503196530911287994?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1503196530911287994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1503196530911287994'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2010/01/khong-gian-lam-viec-cho-lap-trinh-vien.html' title='Không gian làm việc cho lập trình viên'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-976958006068223723</id><published>2010-01-22T21:35:00.002+07:00</published><updated>2010-12-14T11:45:28.384+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xã hội'/><category scheme='http://www.blogger.com/atom/ns#' term='đam mê'/><title type='text'>Một thế giới khác</title><content type='html'>&lt;p&gt;Đúc kết từ trải nghiệm bản thân, tôi hay chia sẻ với những người bạn thân thiết của mình rằng: hãy tìm kiếm đam mê và tự thiết kế phong cách sống của mình xung quanh nó.&lt;/p&gt;&lt;p&gt;Mỗi lần như thế bạn tôi hay hỏi, thế nào là đam mê? Làm sao để phân biệt đam mê với một sở thích bình thường, chưa đủ để gọi là đam mê?&lt;/p&gt;&lt;p&gt;Hình như tôi chưa bao giờ phải băn khoăn với câu hỏi này. Hình như trong tôi có một ranh giới rõ ràng giữa cảm giác đam mê và cảm giác thinh thích. Hình như tôi biết câu trả lời nhưng nó quá mơ hồ để diễn đạt ra bằng lời.&lt;/p&gt;&lt;p&gt;Cho đến khi tôi bắt gặp một profile trên Facebook với phần About me như sau:&lt;/p&gt;&lt;blockquote&gt;I love dreaming and reading. To me, they are both an act of denying reality and living in other worlds, one constructed by me and the other constructed by various writers. Finishing a book is similar to waking up from a dream and being in a dream in a sense is identical to reading a book.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Vân Nguyễn&lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;Khi đọc đoạn văn trên, tôi nhận ra rằng cảm giác đam mê có thể diễn đạt được bằng lời!&lt;/p&gt;&lt;p&gt;Đam mê đơn giản là cảm giác bị hút vào một thế giới khác, tựa như một giấc mơ. Một thứ mà ta đam mê là thứ có thể &lt;em&gt;liên tục&lt;/em&gt; đưa ta vào một thế giới khác. &lt;/p&gt;&lt;p&gt;Tôi thích nghe nhạc. Tôi nghe đủ loại nhạc. Đôi khi tôi cũng có cảm giác chìm đắm vì một bài nhạc pop nào đó sên sến sẵn tiện tâm trạng cũng đang hơi sên sến. Nhưng mỗi lần đi nghe guitar cổ điển, tiếng đàn như ru tôi vào một giấc mơ, như kéo tôi ra khỏi thực tại.&lt;/p&gt;&lt;p&gt;Tôi thinh thích nhạc pop nhưng không đam mê nó. Tôi đam mê nghe guitar cổ điển.&lt;/p&gt;&lt;p&gt;"Thinh thích" nịnh bợ với tâm trạng. Đam mê mạnh hơn thế nhiều. Đam mê có thể &lt;em&gt;điều khiển&lt;/em&gt; tâm trạng. Đơn giản vì tâm trạng hiện tại thuộc về thế giới hiện thực, còn thế giới mà đam mê tạo ra là một thế giới hoàn toàn khác.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-976958006068223723?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/976958006068223723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/976958006068223723'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2010/01/mot-gioi-khac.html' title='Một thế giới khác'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-8605222001983682859</id><published>2010-01-11T15:19:00.012+07:00</published><updated>2011-01-02T22:00:51.943+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quản lý'/><category scheme='http://www.blogger.com/atom/ns#' term='kinh doanh'/><title type='text'>Thời gian làm việc cho lập trình viên</title><content type='html'>&lt;p&gt;Các công ty phần mềm ở VN luôn phải đối mặt với &lt;a href="http://blog.timnhanh.com/vvhien/comment/thuc-trang-nganh-cong-nghe-phan-mem-viet-nam.35A7570C.html"&gt;bài toán&lt;/a&gt; &lt;a href="http://vietbao.vn/Viec-lam/Nhan-luc-cho-nganh-CNTT-Bai-toan-chua-co-loi-giai/30110518/267/"&gt;nhân lực&lt;/a&gt; khi mà nguồn nhân lực trong nước yếu kém cả về năng lực chuyên môn lẫn thái độ làm việc. Dưới góc độ một công ty phần mềm, đặc biệt đối với công ty tư nhân, đây là một khó khăn khách quan vượt ngoài tầm kiểm soát. Tuy nhiên điều mà họ có thể làm là tạo điều kiện làm việc tốt hơn cho LTV nhằm thu hút thêm nhân tài, đồng thời tận dụng tốt hơn nguồn lực sẵn có.&lt;/p&gt;&lt;p&gt;Trước hết ta cần phải hiểu một đặc thù tối quan trọng của công việc lập trình: nó đòi hỏi &lt;em&gt;sự tập trung cao&lt;/em&gt; (đế suy luận) và &lt;em&gt;cảm hứng&lt;/em&gt; (để sáng tạo).&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hiệu quả làm việc của LTV sẽ tăng theo cấp số nhân so với mức độ tập trung. Nguyên nhân: LTV gần như phải nạp toàn bộ kiến trúc hệ thống và các chi tiết của module mà họ đang thực thi vào bộ nhớ tạm, trong khi bộ vi xử lý liên tục làm việc song song.&lt;/li&gt;
&lt;li&gt;Bên cạnh đó, nếu muốn tận dụng khả năng sáng tạo của LTV để có những bước đột phá công nghệ, cần trân trọng và kích thích cảm hứng, nhiệt huyết, đam mê của họ.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Lập trình gần với viết sách hơn đánh máy vi tính.&lt;/p&gt;&lt;p&gt;Theo tôi quan sát trực tiếp ở một số công ty, nghe ngóng từ bạn bè cũng như lượm lặt từ nhiều blog cá nhân, các công ty phần mềm ở VN chưa làm tất cả những gì có thể trong khả năng của họ để tạo điều kiện làm việc tốt nhất cho LTV, qua đó tận dụng tối đa nguồn lực trí óc mà LTV mang lại.&lt;/p&gt;&lt;p&gt;Sau đây tôi sẽ đi sâu vào 3 yếu tố cấu thành nên điều kiện làm việc: thời gian, không gian, con người.&lt;/p&gt;&lt;h4&gt;Thời gian&lt;/h4&gt;&lt;p&gt;Mọi chính sách quản lý thời gian trong một công ty phần mềm cần phải cân nhắc đến cách làm việc tối ưu cho LTV: họ làm việc theo từng khoảng thời gian dài, tuyệt đối không bị gián đoạn. Nguyên nhân: (1) LTV phải bỏ ra chi phí thời gian không nhỏ để "khởi tạo" bộ nhớ và bộ vi xử lý mỗi lần bước vào trạng thái tập trung, (2) bước vào trạng thái tập trung rất khó nhưng mất trạng thái này rất dễ, (3) trong một ngày, số lần có thể rơi vào trạng thái tập trung là hữu hạn (1-2 lần).&lt;/p&gt;&lt;h5&gt;Đừng áp dụng giờ hành chính đối với LTV&lt;/h5&gt;&lt;p&gt;Chính sách áp dụng giờ hành chính một cách nghiêm ngặt đối với LTV, theo tôi, là một sai lầm phổ biến nhất mà cũng dễ khắc phục nhất trong các công ty phần mềm. Dưới đây là những nhược điểm của chính sách này:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Tăc đường&lt;/em&gt;: Ở HN, cứ tầm 8h sáng và 5h30 chiều là đường phố đều &lt;a href="http://www.youtube.com/watch?v=lh7m1ETEGcM"&gt;đầy bụi và xe&lt;/a&gt;. Đi lại vào các khung giờ này vừa lãng phí thời gian vừa tổn hại sức khoẻ. Khi đến công ty, LTV thường khá mệt mỏi về tinh thần, điều này gây khó khăn cho việc bước vào trạng thái tập trung.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Không phù hợp với đồng hồ sinh học của mọi LTV&lt;/em&gt;: Mỗi người có một khoảng thời gian "ưa thích" trong ngày riêng, lúc mà họ dễ dàng rơi vào trạng thái tập trung nhất. Không phải ai cũng ưa khung giờ hành chính thông thường. Ép buộc họ phải theo khung giờ này tức là họ sẽ không thể làm việc tối ưu.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Tạo cảm giác gò bó&lt;/em&gt;: Quản lý chặt chẽ theo khung giờ hành chính ảnh hướng không nhỏ đến cảm hứng làm việc của LTV. Nếu không quản lý, đôi khi LTV có thể mải mê với công việc đến 8-9h tối, vì họ vốn là những người yêu công việc. Thế nhưng nếu khắt khe, họ sẽ ra về "vào đúng giờ quy định". Vấn đề ở đây là, bản thân LTV không biết khi nào trạng thái tập trung của họ sẽ kết thúc. Đặt một mốc giờ ra về cố định sẽ làm ảnh hướng đến tâm lý của họ khi đang tập trung.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Đối với công việc lập trình, việc áp dụng giờ hành chính là không cần thiết. Liệu nhà xuất bản có nên yêu cầu người viết sách phải đến văn phòng theo giờ hành chính không?&lt;/p&gt;&lt;p&gt;Theo tôi, một chính sách thời gian mềm mỏng cho LTV sẽ hợp lý hơn. Trước hết, nên đảm bảo cho LTV có thể làm việc tại nhà. Tuy vậy, không gian ở công ty vẫn nên đủ hấp dẫn để LTV thích đến công ty hơn ở nhà (sẽ bàn trong phần sau). Về thời gian ở công ty, cho phép LTV đến và về lúc nào tuỳ thích, có thể ngủ lại qua đêm nếu muốn.&lt;/p&gt;&lt;p&gt;Hãy hình dung công ty như một không gian cho phép các nhóm đến bàn luận và làm việc cùng nhau, thay vì nơi để cấp trên có thể kiểm soát hoạt động của họ.&lt;/p&gt;&lt;p&gt;Nếu không quản lý LTV về thời gian thì quản lý họ theo kết quả công việc, nhưng kết quả công việc lập trình rất khó đo lường. Lập trình không giống như dịch sách. Khi tôi đi dịch sách, Alphabooks trả cho tôi theo số lượng 1000 từ tiếng Anh - rất rõ ràng, đơn giản và hiệu quả. Thế nhưng sẽ thật ngớ ngẩn nếu trả cho LTV theo số LOC (lines of code).&lt;/p&gt;&lt;p&gt;Đây là một thực tế, một thử thách đối với nhà quản lý. Dù sao ta nên nhớ rằng, thử thách này vẫn tồn tại cho dù bạn có yêu cầu LTV đến và về theo giờ hành chính hay không! Áp dụng chính sách thời gian chặt chẽ chỉ tạo cảm giác áo cho nhà quản lý rằng LTV của họ đang làm việc cật lực, trong khi nếu bỏ hẳn đi yếu tố thời gian thì nhà quản lý sẽ chuyên tâm hơn vào việc đánh giá tiến độ và kết quả công việc. Trong trường hợp tối ưu, nhà quản lý có thể hoàn toàn tin tưởng vào LTV tự ước lượng deadline theo khối lượng công việc; khi này, trách nhiệm của nhà quản lý chỉ là hiểu rõ thế mạnh, sở thích từng người, qua đó phân phối công việc một cách phù hợp.&lt;/p&gt;&lt;h5&gt;Đừng tổ chức meeting tuỳ tiện&lt;/h5&gt;&lt;p&gt;Cần cân nhắc kỹ trước khi tổ chức mọi loại meeting, từ seminar thảo luận công nghệ cho đến nhóm họp cập nhật tiến độ công việc. Chi phí cho mỗi buổi meeting không đơn thuần chỉ là:&lt;/p&gt;&lt;pre&gt;meeting_cost := meeting_duration * number_of_participants; // too naive&lt;/pre&gt;&lt;p&gt;Quan trọng hơn là chi phí ngầm của meeting: nó can thiệp vào khoảng thời gian tập trung của LTV.&lt;/p&gt;&lt;p&gt;Tôi còn nhớ khi còn làm ở công ty X. Chúng tôi làm việc từ 8h. Seminar sẽ bắt đầu vào 9h. Tôi cố gắng làm một việc gì đó trong khoảng 8-9h, nhưng sau nhiều lần như vậy, tôi phát hiện ra rằng mình không thể làm được việc gì thực sự hiệu quả trong khoảng ngắn ngủi này.&lt;/p&gt;&lt;p&gt;Ở nhiều công ty nơi mà khái niệm "trạng thái tập trung" không được coi trọng, nhà quản lý không hề biết đến chi phí này, có lẽ bởi vì LTV của họ vốn dĩ chưa bao giờ làm việc tập trung.&lt;/p&gt;&lt;p&gt;Nói như vậy không có nghĩa là không nên tổ chức meeting dưới mọi hình thức. Ở đây, tôi chỉ nhấn mạnh chi phí không nhỏ của mỗi buổi meeting. Nhà quản lý nên cân nhắc và chỉ tổ chức meeting khi thực sự cần thiết. Meeting nên có sự chuẩn bị kỹ từ những người tổ chức, phải ngắn gọn về thời lượng và giá trị về chất lượng. Điều này vừa tiết kiệm tổng thiệt hại thời gian cho công ty, vừa thể hiện rõ sự trân trọng của công ty đối với thời gian của LTV.&lt;/p&gt;&lt;p&gt;Một yếu tố nữa cần phải cân nhắc là thời điểm tổ chức meeting. Theo tôi, nên tổ chức meeting định kỳ (để LTV có thể yên tâm tập trung mà không lo có meeting bất chợt) vào cuối ngày (để không cần yêu cầu LTV đến công ty sớm) trong một ngày làm việc cuối tuần (để tiện cập nhật tiến độ và phân phối công việc cho tuần sau), có sự tham gia của các thành viên trong nhóm (LTV nên biết những người còn lại đang làm gì để họ có cảm giác công bằng).&lt;/p&gt;&lt;p&gt;Nếu muốn giảm stress cho các buổi meeting định kỳ cập nhật tiến độ, có thể tổ chức theo phong cách thân mật, trong một quán cafe quen. Phương án này phù hợp với các nhóm làm việc độc lập, hiệu quả, nhà quản lý có thể tin tưởng.&lt;/p&gt;&lt;h5&gt;Sự thật về thời gian&lt;/h5&gt;&lt;p&gt;Để kết thúc phần này, tôi mong muốn vạch trần một sự thật về thời gian mà nhiều công ty phần mềm đã hiểu sai: không mấy ai có thể làm việc tập trung 8h/ngày, 5 ngày/tuần, 52 tuần/năm. Điều này là quá sức chịu đựng đối với một công việc quá nặng về trí óc như lập trình. Nếu bạn ép LTV làm việc như vậy, họ sẽ chống đối bằng cách này hay cách khác (bật IDE lên làm thơ, check mail vô mục đích, chat, F5 Facebook, nếu block Facebook rồi thì xem ảnh girl xinh, etc).&lt;/p&gt;&lt;p&gt;Trong &lt;a href="http://en.wikipedia.org/wiki/A_Mathematician%27s_Apology"&gt;"Lời xin lỗi của một nhà Toán học"&lt;/a&gt;, Hardy cho rằng 4h/ngày hoàn toàn tập trung cho Toán học là đủ. Một blogger mà tôi tìm thấy trên mạng &lt;a href="http://climbing-the-hill.blogspot.com/2009/04/programmers-work-day.html"&gt;đề xuất&lt;/a&gt; ngày làm việc 6h, trong đó 2h cho sự lãng phí không tránh khỏi trong cơ cấu doanh nghiệp, 4h làm việc thực sự. 37signals &lt;a href="http://37signals.com/svn/posts/893-workplace-experiments"&gt;thử nghiệm&lt;/a&gt; tuần làm việc 4 ngày, nghỉ từ thứ 6 đến CN.&lt;/p&gt;&lt;p&gt;Nói như vậy không có nghĩa là LTV chỉ cần tiếp túc với lập trình 4h/ngày. Thông thường, LTV bỏ nhiều thời gian ra để nghĩ về công việc, tìm hiểu công nghệ mới, tham gia vào các dự án nguồn mở, giao lưu với cộng đồng LTV, đọc sách trau dồi kiến thức, chơi các môn thể thao trí tuệ ... Đó đều là những hoạt động giúp họ nâng cao trình độ chuyên môn, duy trì đam mê, kích thích nguồn cảm hứng sáng tạo.&lt;/p&gt;&lt;p&gt;Sai lầm cuối cùng về thời gian, cũng là sai lầm không thể chấp nhận được mà tôi hy vọng không quá nhiều công ty mắc phải là:&lt;/p&gt;&lt;pre&gt;working_time := time_in_front_of_computer; // fatal error!&lt;/pre&gt;&lt;p&gt;Quy chụp tổng thời gian làm việc của LTV bằng số thời gian ngồi bên máy tính chẳng khác nào khuyến khích LTV làm việc mà không suy nghĩ.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-8605222001983682859?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8605222001983682859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/8605222001983682859'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2010/01/ieu-kien-lam-viec-cho-lap-trinh-vien.html' title='Thời gian làm việc cho lập trình viên'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-952976467579023673</id><published>2009-12-31T22:45:00.006+07:00</published><updated>2010-07-13T00:05:00.667+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><category scheme='http://www.blogger.com/atom/ns#' term='đam mê'/><title type='text'>Tại sao bạn chọn CNTT?</title><content type='html'>&lt;p&gt;Giả sử bạn đang làm trong lĩnh vực CNTT và bạn là một người thông minh. Vì bạn thông minh, bạn đã có thể lựa chọn một trong số rất nhiều lĩnh vực khác nhau để đầu tư thời gian và khả năng cao là bạn vẫn sẽ thành công ở một mức độ nhất định, nhưng tại sao bạn lại chọn CNTT?&lt;/p&gt;&lt;p&gt;Đó là một câu hỏi sâu sắc - nó đã kích thích tôi rút ra một số những đặc thù sau của ngành này:&lt;/p&gt;&lt;h5&gt;1. Thoả mãn tư duy&lt;/h5&gt;&lt;p&gt;Trí tò mò nằm trong bản năng của con người. Nếu như con gái có thiên hướng tò mò về con người, về những mối quan hệ xã hội, thì con trai thiên nhiều hơn về tự nhiên. Nếu như một bé gái thường hay đặt câu hỏi tại sao anh An thích chị Bình mà lại không thích chị Chi, thì một bé trai thường bỏ qua sự kiện này và nó quan tâm hơn đến chuyện tại sao trái đất hình tròn mà lại không phải hình vuông.&lt;/p&gt;&lt;p&gt;Con người có nhu cầu được suy luận, được sáng tạo xung quanh những đối tượng mà mình tò mò. Tương tự như việc con gái có nhu cầu chơi trò mèo vờn chuột với con trai để thoả mãn nhu cầu suy luận, sáng tạo về cảm xúc con người, về quan hệ xã hội, thì con trai cũng có nhu cầu chơi cờ để thoả mãn nhu cầu suy luận, sáng tạo về các đối tượng trừu tượng.&lt;/p&gt;&lt;p&gt;CNTT, cũng như các ngành kỹ thuật khác, đòi hỏi khả năng tư duy logic chặt chẽ, mà quan trọng hơn nữa là khả năng sáng tạo và tưởng tượng. Chính vì vậy, nó không thích hợp với đa số con gái nói riêng, cũng như những người có thiên hướng xã hội hơn là thiên hướng tự nhiên nói chung.&lt;/p&gt;&lt;h5&gt;2. Khả năng ứng dụng cao&lt;/h5&gt;&lt;p&gt;Đối với một người có thiên hướng tư duy trừu tượng rất cao, có sự hiếu kỳ thuần khiết hướng về tự nhiên, thì có lẽ Toán học sẽ phù hợp hơn. Thế nhưng, lợi thế của CNTT là tính ứng dụng của thành quả lao động.&lt;/p&gt;&lt;p&gt;Trong &lt;a href="http://en.wikipedia.org/wiki/A_Mathematician%27s_Apology"&gt;"Lời xin lỗi của một nhà Toán học"&lt;/a&gt;, Hardy chia sẻ, những gì là đẹp đẽ, là tinh tuý nhất của Toán học thì không hề, hoặc có rất ít tính ứng dụng. Tôi không coi đây như một nhược điểm của bộ môn này, nó đơn giản chỉ là đặc thù. Trong CNTT, khả năng tận mắt trông thấy sản phẩm mà mình làm ra gây tác động tích cực lên đời sống của rất nhiều người là một động lực đáng kể.&lt;/p&gt;&lt;h5&gt;3. Nuôi dưỡng tâm hồn&lt;/h5&gt;&lt;p&gt;Những người làm kỹ thuật thường xuyên suy luận xung quanh những đối tượng trừu tượng. Điều này vô tình giúp họ dễ dàng cân bằng hơn trong cuộc sống. Con người luôn dành phần lớn thời gian và tâm trí cho những hoạt động liên quan trực tiếp đến con người, họ thực sự cần một khoảng không biệt lập với xã hội loài người để cân bằng lại.&lt;/p&gt;&lt;p&gt;Tôi quan sát, đa số dân kinh tế, xã hội mới gặp thì vui vẻ, hồ hởi, nhưng càng chơi càng thấy khó thân; ngược lại, dân khoa học, kỹ thuật lúc mới quen thì khó gần (như thể là họ không có khả năng giao tiếp), nhừng càng chơi càng thân, càng tin tưởng. Tôi còn nhớ ở công ty cũ, các thành viên chơi với nhau hồn nhiên như lớp cấp 3, cấp 2 của tôi vậy.&lt;/p&gt;&lt;p&gt;Chính vì "hồn nhiên" quá, bất lợi của dân kỹ thuật là thường không thu hút con gái - tất nhiên nếu bạn là giám đốc kỹ thuật thì lại là chuyện khác. Tuy vậy, một người làm kỹ thuật có thể xã hội hoá dễ hơn là một người quá thiên về xã hội có thể tự nhiên hoá. Hơn nữa, việc bạn không thu hút những cô gái hời hợt, ham hào nhoáng, thực dụng không hẳn đã là một bất lợi.&lt;/p&gt;&lt;h5&gt;4. Trẻ trung, sôi nổi&lt;/h5&gt;&lt;p&gt;So với các ngành khoa học kỹ thuật khác, CNTT là một ngành hiện còn rất trẻ. Còn xa, rất xa nữa, CNTT mới có thể đạt được độ chín tương đương với các ngành khoa học khác. Một mặt, nó có nghĩa là CNTT tồn tại rất nhiều hạn chế, nhiều sự khập khiễng, nhiều chuẩn không hợp lý, nhiều điều không hoản hảo. Mặt khác, đối với những người ham muốn khai phá, CNTT là một mảnh đất rất giàu tiềm năng. Chỉ một điểm bùng phát trong suy nghĩ của bạn cũng có thể làm thay đổi toàn ngành trên diện rộng, và qua đó tác động đến cả thế giới.&lt;/p&gt;&lt;p&gt;Vì còn trẻ, CNTT không có khối lượng kiến thức bị tích trữ lại quá lớn. Bạn có thể trang bị cho mình một lượng vừa đủ và bắt đầu bắt kịp với kiến thức hiện hành. Cũng vì còn trẻ, CNTT thay đổi từng ngày, nhanh đến chóng mặt, tạo cảm giác hào hứng, sôi nổi, tươi mới cho những người tham gia.&lt;/p&gt;&lt;p&gt;Cũng chính vì điều này, CNTT sẽ không phù hợp với những người trì trệ. Những người trì trệ sẽ nhanh chóng bị lỗi thời so với tiến độ của ngành và rất dễ để tuột mất đam mê.&lt;/p&gt;&lt;p&gt;Cần phải nói thêm rằng tốc độ phát triển của CNTT tuy nhanh nhưng báo chí và truyền thông đã làm cho người ta có cảm giác còn nhanh hơn rất nhiều. Những thay đổi mang tính bản lề chỉ diễn ra trong vòng từ 5-10 năm, tích luỹ từ những thay đổi nhỏ mà dân Internet gọi chung là "the next big thing". Đây cũng là một đặc thù mà những người tham gia cần có tầm nhìn để xác định đâu là hype, đâu là thực chất.&lt;/p&gt;&lt;h4&gt;Kết luận&lt;/h4&gt;&lt;p&gt;Nhiều người coi công việc chỉ là một công cụ để đạt được những mục tiêu khác trong cuộc sống. Quan điểm này đánh giá quá thấp tầm quan trọng của công việc. Nên nhớ rằng bạn bỏ ra phần lớn thời gian trong ngày với nó - sẽ tốt hơn nếu bạn chọn một công việc mà mình thực sự yêu thích.&lt;/p&gt;&lt;p&gt;Việc lựa chọn chuyên môn không hề đơn giản. Nó giống như lựa chọn người yêu vậy. Bạn phải sử dụng cả lí trí lẫn trái tim. Nếu không có cảm xúc thì không thể yêu, có cảm xúc mà không phù hợp thì không thể lâu dài.  Và cũng giống như tình yêu, tìm được nó đã khó rồi, giữ được nó lại càng khó hơn. Hiện nay, công việc trung bình của dân công nghệ có vẻ như tương đối nhàm chán, đòi hỏi bạn phải nỗ lực một cách có ý thức để duy trì ngọn lửa nhiệt tình - điều mà tôi mong muốn được viết tiếp trong bài sau.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-952976467579023673?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/952976467579023673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/952976467579023673'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2009/12/tai-sao-ban-chon-cntt.html' title='Tại sao bạn chọn CNTT?'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-3733623264540628943</id><published>2009-12-14T17:27:00.002+07:00</published><updated>2010-01-09T17:57:33.309+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nghệ thuật code'/><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><title type='text'>Nghệ thuật code</title><content type='html'>&lt;p&gt;Một phản hồi mà tôi nhận được từ &lt;a href="http://seritrinh.blogspot.com/2009/11/iem-yeu-cua-java.html"&gt;Những hạn chế của Java&lt;/a&gt; cho rằng lập trình viên Java không mấy quan tâm đến những hạn chế đó khi mà họ hoàn toàn có thể đạt được cùng một mục tiêu bằng cách này hay cách khác.&lt;/p&gt; 

&lt;p&gt;Nhận định trên không sai nếu ta coi mọi sản phẩm lập trình như những hộp kín. Toàn bộ giá trị của mọi sản phẩm lập trình sẽ nằm ở những tính năng mà chúng bộc lộ. Số source code bên trong có thể được lờ đi.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, gần như mọi sản phẩm lập trình sẽ đến lúc cần phải được nâng cấp, gần như mọi source code sẽ đến lúc cần phải được sửa đổi và dùng lại. Xu hướng open source càng nhấn mạnh rằng một khi code được viết ra, sẽ có người đọc để học hỏi, đóng góp. Trách nhiệm của lập trình viên khi này không chỉ nằm ở việc đảm bảo code thực thi được mục tiêu mà còn ở việc viết code sao cho trong sáng, hàm súc, thông minh.&lt;/p&gt;

&lt;p&gt;Tính nghệ thuật của công việc lập trình không chỉ nằm ở vẻ đẹp của sản phẩm mà còn được chứa đựng ngay trong source code. Bản thân source code thể hiện tư duy của kiến trúc sư và của người viết code. Trong đa số các sản phẩm được đánh giá cao nhất từ trước đến giờ, hai người này là một.&lt;/p&gt;

&lt;p&gt;Nếu một bức tranh là một sản phẩm nghệ thuật thì tính nghệ thuật của nó không chỉ nằm ở ý đồ của họa sỹ mà còn ở từng đường nét mà anh ta vẽ ra. Nếu một bản nhạc là một sản phẩm nghệ thuật thì tính nghệ thuật của nó không chỉ ở thông điệp của nhạc sỹ mà còn được hàm chứa ngay trong từng tiếng đàn mà người chơi chau chuốt, nâng niu.&lt;/p&gt;

&lt;p&gt;Giới nhà văn thường phân tích yếu tố nghệ thuật trong cách dùng câu từ của một tác phẩm văn học bên cạnh giá trị nhân văn của toàn bộ tác phẩm. Tương tự như vậy, một codebase không chỉ ẩn chứa vẻ đẹp nghệ thuật qua kiến trúc vĩ mô mà còn qua từng chi tiết nhỏ - từng module, từng function, từng dòng code.&lt;/p&gt;

&lt;p&gt;Người chơi guitar phải mất trung bình 10 năm lao động nghệ thuật để có được tiếng đàn âm vang, tròn trịa, sâu lắng. Người viết code cũng phải mất từng ấy thời gian để viết code một cách trong sáng, hàm súc, thông minh.&lt;/p&gt;

&lt;p&gt;Nếu bạn vẫn coi viết code là một công việc thuần tuý chân tay, bạn không nhận thấy sự khác nhau giữa code viết bởi một lập trình viên trung bình và code viết bởi Linus Torvalds chẳng hạn, thì rất có thể bạn chưa đủ độ chín để hiểu được sự khác nhau ấy. Điều này tương tự với việc người mới học đàn thường không nhận thấy sự khác nhau giữa tiếng đàn của thầy dạy đàn và của John Williams.&lt;/p&gt;

&lt;p&gt;Cảm thụ vẻ đẹp nghệ thuật phụ thuộc vào năng lực chuyên môn. Cảm xúc thu được khi hưởng thụ nghệ thuật bị giới hạn bởi nhận thức về bộ môn nghệ thuật đó.&lt;/p&gt;

&lt;p&gt;Điều này cũng có nghĩa là bài viết này bị giới hạn bởi trình độ của tôi trong thời điểm hiện tại. Cái mà tôi hiểu về nghệ thuật hẳn sẽ thay đổi sau 10 năm nữa. Đến lúc đó, tôi sẽ có dịp nhìn lại xem mình nhận thức thế nào về nghệ thuật cách đây 10 năm.&lt;/p&gt;

&lt;p&gt;Cách đây 2,5 năm khi tôi có dịp làm việc với một người bạn là VietNT, tôi mới biết thế nào là code đẹp. Cùng một mục tiêu, nhưng code của VietNT trong sáng, hoa mỹ hơn của tôi rất nhiều. Tôi vẫn coi VietNT là người có ảnh hưởng sâu sắc nhất tới tôi cho đến thời điểm này trong lĩnh vực lập trình.&lt;/p&gt;

&lt;p&gt;Vào lúc đó, với trình độ hạn chế của mình, tôi tạm hiểu code đẹp là code sáng sủa (chia đoạn đúng chỗ, ngắt câu đúng chỗ), dùng từ chính xác (đặt tên biến, tên hàm, tên class), đủ ý (không viết thừa, không viết thiếu), tối ưu (nhận thức về tài nguyên, về tốc độ thực thi).&lt;/p&gt;

&lt;p&gt;Khi mới học đàn, tất cả các thầy dạy đàn tận tâm đều sẽ khuyên bạn nên chơi thật chậm và lắng nghe từng tiếng đàn của mình. Bạn cũng sẽ không được phép chơi tác phẩm cho đến khi thành thục những bài tập đơn giản nhất. Tương tự, nếu nghiêm túc với nghệ thuật code, có lẽ ta nên bắt đầu với những bài toán đơn giản nhất. Code thật chậm và để ý đến từng dòng code.&lt;/p&gt;

&lt;p&gt;Cái khó của lập trình viên là không mấy ai khuyến khích họ "code chậm", "code đẹp". Lập trình là một ngành đã được thương mại hoá. Thông thường, bạn sẽ lắp vào một khâu trong quy trình làm sảm phầm đã được công nghiệp hoá. Người ta dùng từ "thợ code" để chỉ lập trình viên thời nay là vì thế.&lt;/p&gt;

&lt;p&gt;Ở Việt Nam, trình độ trung bình của lập trình viên không cao. Bạn không cần phải quá giỏi so với thế giới để trở thành senior programmer hay giám đốc kỹ thuật. Bạn sẽ được giao những bài toán hết sức phức tạp mà bạn vẫn có thể xoay sở thực thi theo cách này hay cách khác.&lt;/p&gt;

&lt;p&gt;Bạn có thể chỉ cân tập đàn 6 tháng để chơi được một tác phẩm khó, nhưng sẽ cần đến 10 năm để chơi nó như một người nghệ sỹ thực thụ.&lt;/p&gt;

&lt;p&gt;Không phải tất cả mọi người đều hiểu hết giá trị nghệ thuật mà một người nghệ sỹ tạo ra. Code đẹp để làm gì trong khi sếp không quan tâm, end users thì lại càng không? Đó là một câu hỏi thông mình và hợp lý. Câu trả lời tuỳ thuộc vào mức độ đam mê của chính bạn đối với bộ môn &lt;em&gt;nghệ thuật code&lt;/em&gt;.&lt;/p&gt; 

&lt;blockquote&gt;
Đọc thêm: &lt;a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1260785365&amp;sr=8-1"&gt;Refactoring&lt;/a&gt;, &lt;a href="http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1260785371&amp;sr=8-1"&gt;Beautiful Code&lt;/a&gt;, &lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1260785375&amp;sr=8-1"&gt;Code Complete&lt;/a&gt;. Như tất cả các cuốn sách công nghệ khác, chúng đều dài dòng hơn mức cần thiết. Bản thân tôi cũng chưa đọc hết nhưng chỉ cần lướt qua cũng có thể giúp truyền cảm hứng cho bạn về việc viết code đẹp.
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-3733623264540628943?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/3733623264540628943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/3733623264540628943'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2009/12/nghe-thuat-code.html' title='Nghệ thuật code'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-1106992863637461261</id><published>2009-11-20T21:09:00.027+07:00</published><updated>2011-01-02T21:54:55.772+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><title type='text'>Những hạn chế của Java</title><content type='html'>&lt;p&gt;Mặc dù chưa thực sự gây một tác động nào đáng kể đối với &lt;a href="http://www.lextrait.com/vincent/implementations.html"&gt;vị trí độc quyền của C/C++&lt;/a&gt; trong các ứng dụng đòi hỏi performance cao, lập trình games và lập trình hệ thống, nhưng dưới tầm ảnh hưởng của các tập đoàn lớn như Sun, Oracle, IBM, Java đã tìm được cho nó một sân chơi riêng: embedded devices và server-side programming.&lt;/p&gt;&lt;p&gt;Tuy nhiên, đến khi các ngôn ngữ linh động hơn, thích hợp hơn cho sân chơi này xuất hiện - như Python, Ruby, Scala - và ASP.NET ngày một trở nên chín chắn hơn, thì những điểm yếu của Java bắt đầu được bộc lộ. Những tín đồ Java lâu năm giờ đây quay lưng lại và chỉ trích nó, như Bruce Tale viết trong cuốn &lt;a href="http://www.amazon.com/Beyond-Java-Bruce-Tate/dp/0596100949/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1258541697&amp;sr=8-1"&gt;Beyond Java&lt;/a&gt;, và dư luận bắt đầu xôn xao xung quanh những tiên đoán về &lt;a href="http://codemonkeyism.com/java-dead/"&gt;cái chết của Java&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Có lẽ phương châm bảo thủ, coi trọng an toàn hơn tốc độ, khống chế quyền tự do của lập trình viên nhằm đảm bảo độ tin cậy cho code, và việc Java chạy trên một VM đã khiến nó không thể cạnh tranh được với C/C++ trên vương quốc của hai ngôn ngữ này. Thế nhưng đâu là nguyên nhân khiến cho Java tự đánh mất thị phần vào tay các giải pháp mới nổi?&lt;/p&gt;&lt;p&gt;Chúng ta hãy cùng điểm qua một số hạn chế trong thiết kế của ngôn ngữ Java và thư viện chuẩn của nó:&lt;/p&gt;&lt;h5&gt;1. Thiếu language support cho collections&lt;/h5&gt;&lt;p&gt;Ta có mảng động các số nguyên a. Ta cần nhân đôi mỗi phần tử của nó. Dưới đây là cách làm chuẩn trong Java, đã áp dụng &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html"&gt;autoboxing&lt;/a&gt; của Java 5 và &lt;a href="http://www.rachvela.com/2009/10/double-brace-initialization-in-java.htm"&gt;double brace initialization&lt;/a&gt; (thanks to anh Buu Nguyen):&lt;/p&gt;&lt;pre name="code" class="java"&gt;ArrayList&lt;Integer&gt; a = new ArrayList&lt;Integer&gt;() {{
    add(1);
    add(2);
    add(3);
}};

for (int i = 0; i != a.size(); ++i)
{
    a.set(i, a.get(i) * 2);
}
&lt;/pre&gt;&lt;p&gt;Câu trả lời của Java cho thấy một số vấn đề:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Java không support &lt;em&gt;collection initializer&lt;/em&gt; (như &lt;a href="http://www.digitalmars.com/d/2.0/arrays.html"&gt;D&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic5"&gt;C# 3.0&lt;/a&gt;, Ruby, Python, Scala).&lt;/li&gt;
&lt;li&gt;Không support &lt;em&gt;automatic type inference&lt;/em&gt; (như &lt;a href="http://www.digitalmars.com/d/2.0/attribute.html"&gt;D&lt;/a&gt;, &lt;a href="http://www.artima.com/cppsource/cpp0x.html"&gt;C++0x&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic2"&gt;C# 3.0&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Không support &lt;em&gt;operator overloading&lt;/em&gt; (như &lt;a href="http://www.digitalmars.com/d/2.0/operatoroverloading.html"&gt;D&lt;/a&gt;, C++, C#, Ruby, Python, Scala).&lt;/li&gt;
&lt;li&gt;Không cho phép vòng &lt;em&gt;foreach&lt;/em&gt; hiệu chỉnh các phần tử của collection (như &lt;a href="http://www.digitalmars.com/d/2.0/statement.html"&gt;D&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Range-based_for-loop"&gt;C++0x&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Các thao tác liên quan đến collections (như &lt;c&gt;ArrayList&lt;/c&gt;, &lt;c&gt;TreeMap&lt;/c&gt;, &lt;c&gt;HashMap&lt;/c&gt;) diễn ra thường xuyên đến nỗi C# 3.0 đã giới thiệu &lt;a href="http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic8"&gt;LINQ&lt;/a&gt; để thu hút lập trình viên. Việc Java không đối xử đặc biệt với collections ở mức language là một nguyên nhân khiến cho code viết trên Java tỏ ra xấu xí và thô kệch hơn so với các ngôn ngữ mới.&lt;/p&gt;&lt;blockquote&gt; Java 7 sẽ hỗ trợ &lt;a href="http://tech.puredanger.com/java7/#typeinference"&gt;type inference&lt;/a&gt;. &lt;/blockquote&gt;&lt;h5&gt;2. Thư viện chuẩn "không iterable"&lt;/h5&gt;&lt;p&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html"&gt;Java 5&lt;/a&gt; giới thiệu vòng &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html"&gt;foreach&lt;/a&gt; với mục đích rút gọn những đoạn code duyệt qua một đối tượng &lt;em&gt;có thể duyệt được&lt;/em&gt; (iterable). Tuy nhiên, thư viện chuẩn thì hình như không được tái thiết kế để trở nên thân thiện hơn với cải tiến mới này, đơn cử như &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/StringTokenizer.html#nextToken()"&gt;StringTokenizer&lt;/a&gt;:&lt;/p&gt;&lt;pre name="code" class="java"&gt;StringTokenizer tokenizer = new StringTokenizer("this sucks");
while (tokenizer.hasMoreTokens())
{
    String token = tokenizer.nextToken();
    // Do something with token here
}
&lt;/pre&gt;&lt;p&gt;Trong khi lập trình viên kỳ vọng sẽ được áp dụng &lt;em&gt;foreach&lt;/em&gt; như sau:&lt;/p&gt;&lt;pre name="code" class="java"&gt;for (String token : new StringTokenizer("this sucks"))
{
    // Do something with token here
}
&lt;/pre&gt;&lt;p&gt;Nguyên nhân là vì &lt;c&gt;StringTokenizer&lt;/c&gt; implements &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Enumeration.html"&gt;Enumeration&lt;/a&gt; mà không implement &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html"&gt;Iterable&lt;/a&gt;, trong khi &lt;em&gt;foreach&lt;/em&gt; chỉ làm việc với &lt;c&gt;Iterable&lt;/c&gt;.&lt;/p&gt;&lt;p&gt;Rất nhiều class trong thư viện chuẩn không implement &lt;c&gt;Iterable&lt;/c&gt; mặc dù điều này là hợp lý, chẳng hạn:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/xml/JavaTechandXML/#code14"&gt;Java API for XML Processing&lt;/a&gt;: tại sao &lt;c&gt;getChildNodes()&lt;/c&gt; không return một &lt;c&gt;Iterable&amp;lt;Node&amp;gt;&lt;/c&gt; có implement &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/RandomAccess.html"&gt;RandomAccess&lt;/a&gt; mà lại return &lt;a href="http://java.sun.com/javase/6/docs/api/org/w3c/dom/NodeList.html?is-external=true"&gt;NodeList&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html"&gt;Java Database Connectivity&lt;/a&gt;: tại sao &lt;c&gt;ResultSet&lt;/c&gt; không implement &lt;c&gt;Iterable&lt;/c&gt;?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Điều này thể hiện sự không nhất quán trong thư viện chuẩn của Java (và hiển nhiên là các thư viện thuộc bên thứ ba). So với &lt;a href="http://en.wikipedia.org/wiki/Java_collections_framework"&gt;Java Collection Framework&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Standard_Template_Library"&gt;C++ STL&lt;/a&gt; được thiết kế chặt chẽ hơn rất nhiều.&lt;/p&gt;&lt;h5&gt;3. Không hỗ trợ mixin hoặc đa kế thừa&lt;/h5&gt;&lt;p&gt;Ta có interface &lt;c&gt;Speakable&lt;/c&gt;. Class &lt;c&gt;DefaultSpeakable&lt;/c&gt; cung cấp default implementation cho &lt;c&gt;Speakable&lt;/c&gt;. Class &lt;c&gt;SuperDog&lt;/c&gt; extends class &lt;c&gt;Dog&lt;/c&gt; và implement &lt;c&gt;Speakable&lt;/c&gt;. Ta muốn &lt;c&gt;SuperDog&lt;/c&gt; sử dụng lại default implementation từ &lt;c&gt;DefaultSpeakable&lt;/c&gt;, có thể override một số methods theo ý mình. Hiển nhiên Java không cho phép &lt;c&gt;SuperDog&lt;/c&gt; kế thừa &lt;c&gt;DefaultSpeakable&lt;/c&gt; vì &lt;c&gt;SuperDog&lt;/c&gt; đã kế thừa &lt;c&gt;Dog&lt;/c&gt; mất rồi. Khi này ta không có sự lựa chọn nào khác ngoài implement lại &lt;c&gt;Speakable&lt;/c&gt; từ đầu.&lt;/p&gt;&lt;p&gt;Tình huống trên xảy ra khá thường xuyên. Lấy thư viện chuẩn làm ví dụ. Mỗi khi implement &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Iterator.html"&gt;Iterator&lt;/a&gt;, ta buộc phải implement &lt;c&gt;hasNext()&lt;/c&gt;, &lt;c&gt;next()&lt;/c&gt;, &lt;c&gt;remove()&lt;/c&gt;. Giả sử Java cho phép một trong hai biện pháp - &lt;em&gt;mixin&lt;/em&gt; hoặc đa kế thừa - thì hẳn sẽ có một class &lt;c&gt;DefaultIterator&lt;/c&gt; nào đó cung cấp sẵn &lt;c&gt;remove()&lt;/c&gt; (&lt;c&gt;throw new UnsupportedOperationException()&lt;/c&gt;) và &lt;c&gt;hasNext()&lt;/c&gt; (&lt;c&gt;return next() == null&lt;/c&gt;). Trong phần lớn trường hợp, người sử dụng sẽ chỉ phải tự viết lấy &lt;c&gt;next()&lt;/c&gt;.&lt;/p&gt;&lt;p&gt;Hạn chế này làm các interface trong Java luôn cố gắng giảm bớt số lượng methods một cách không tự nhiên. Thử so sánh Java &lt;c&gt;Iterator&lt;/c&gt; với Ruby &lt;a href="http://www.ruby-doc.org/core/classes/Enumerable.html"&gt;Enumerable&lt;/a&gt; (Ruby là một ngôn ngữ hỗ trợ &lt;a href="http://en.wikipedia.org/wiki/Mixin"&gt;mixin&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Như vậy có hai hậu quả chính khi Java quyết định loại bỏ đa kế thừa mà lại không cho phép interface có implementation (&lt;em&gt;mixin&lt;/em&gt;):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Người sử dụng không thể dùng default implementation nếu class của anh ta đã kế thừa một class khác. Anh ta chỉ còn cách copy-paste từ default implementation.&lt;/li&gt;
&lt;li&gt;Người viết thư viện không thể thoải mái cung cấp thêm tính năng vào trong interface. Điều này làm thiết kế của anh ta đôi khi trở nên gượng ép.&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;4. Không chấp nhận khái niệm function&lt;/h5&gt;&lt;p&gt;Java chỉ có khái niệm method. Method thuộc về class. Đây là lý do tại sao HelloWorld trong Java tương đối dài hơn bình thường một cách không cần thiết:&lt;/p&gt;&lt;pre name="code" class="java"&gt;public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("It takes some time but hey, hello!");
    }
}
&lt;/pre&gt;&lt;p&gt;Nhưng Java có static method. Liệu có thể coi static method như function chính quy, và class mà static method thuộc về có thể coi như namespace cho function? Không hẳn, ít nhất là so với các ngôn ngữ mà function (hay callable objects) được coi trọng (D, C, C++, Ruby, Python, Scala và hàng loạt các functional languages khác - C# có &lt;a href="http://msdn.microsoft.com/en-us/library/ms173171(VS.80).aspx"&gt;delegate&lt;/a&gt;):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Không thể trừu tượng hoá một function call. Cũng tức là:&lt;/li&gt;
&lt;li&gt;Static methods trong Java không thể dùng làm argument cho các methods khác.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Java tìm cách trốn tránh hai hạn chế trên bằng cách khuyến khích sử dụng interface kết hợp với anonymous inner class. Chẳng hạn ta cần viết một method lọc ra các phần tử thoả mãn một điều kiện nhất định trong Java. Bởi lẽ không thể trừu tượng hoá "điều kiện nhất định" thành một con trỏ hàm đơn giản nên lập trình viên Java chỉ còn cách sử dụng interface &lt;c&gt;Predicate&amp;lt;T&amp;gt;&lt;/c&gt; với một method bên trong là &lt;c&gt;isSatisfied(T elem)&lt;/c&gt;, và như vậy signature cho method ban đầu trở thành:&lt;/p&gt;&lt;pre name="code" class="java"&gt;Iterable&lt;T&gt; filter(Iterable&lt;T&gt; source, Predicate&lt;T&gt; condition); 
&lt;/pre&gt;&lt;p&gt;Và thông thường thì người sử dụng sẽ create một anonymous inner class implement &lt;c&gt;Predicate&amp;lt;T&amp;gt;&lt;/c&gt; mỗi khi gọi method này. Giải pháp thiếu trực quan và làm code trở nên thô kệch này xuất hiện &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/examples/components/ButtonDemoProject/src/components/ButtonDemo.java"&gt;khắp mọi nơi&lt;/a&gt; trong thư viện chuẩn, có lẽ bởi vì function là một khái niệm không thể thiếu trong lập trình.&lt;/p&gt;&lt;p&gt;Trong bài viết nổi tiếng &lt;a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html"&gt;The Kingdom of nouns&lt;/a&gt;, Steve Yegge tranh luận rằng sự ép buộc phải thiết kế theo danh từ (object/classes) mà không tồn tại khái niệm động từ (function) của Java là một sai lầm lớn.&lt;/p&gt;&lt;blockquote&gt; Java 7 dự định sẽ giới thiệu &lt;a href="http://tech.puredanger.com/java7/"&gt;closure&lt;/a&gt; để khắc phục một phần. Nhưng có vẻ như đề xuất này đã bị loại bỏ. &lt;/blockquote&gt;&lt;h5&gt;Cùng nhiều hạn chế khác ...&lt;/h5&gt;&lt;p&gt;Sau đây là một số nhược điểm nữa mà các tác giả khác đã đi sâu, tôi đồng ý và không cảm thấy cần thiết phải viết lại ở đây:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://googletesting.blogspot.com/2009/09/checked-exceptions-i-love-you-but-you.html"&gt;Checked exception&lt;/a&gt;: Java cho rằng một số exception nhất định bắt buộc phải được catch. Thêm một nguyên nhân khiến cho code trở nên dài dòng.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://safalra.com/programming/java/wrong-type-erasure/"&gt;Type erasure&lt;/a&gt;: Java 5 implement generic programming bằng type erasure - nói đơn giản &lt;c&gt;ArrayList&amp;lt;Person&amp;gt;&lt;/c&gt; sẽ trở thành &lt;c&gt;ArrayList&amp;lt;Object&amp;gt;&lt;/c&gt; lúc runtime.&lt;/li&gt;
&lt;li&gt;Không thể viết generic code vừa làm việc được với array vừa làm việc được với Java Collection Framework (C++/D khắc phục bằng iterator). &lt;a href="http://stackoverflow.com/questions/517751/java-generic-method-but-array-of-primitive-data-types-does-not-autobox"&gt;Ví dụ&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Destructor trong Java (&lt;c&gt;Object.finalize()&lt;/c&gt;) không chắc chắn sẽ được gọi trước khi process kết thúc. Điều này loại bỏ hoàn toàn khả năng áp dụng &lt;a href="http://en.wikipedia.org/wiki/Resource_acquisition_is_initialization"&gt;RAII&lt;/a&gt; vào trong thiết kế - nói đơn giản, nếu bạn đã open một FileStream thì phải explicitly close() nó.&lt;/li&gt;
&lt;li&gt;Không có khái niệm property trong class: mỗi property tương ứng với một cặp get/set. Điều này làm code trở nên thô kệch cho cả người viết thư viện và người sử dụng. Xem thêm &lt;a href="http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx"&gt;C# Property&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Kết luận&lt;/h4&gt;&lt;p&gt;Trong những năm vừa qua, Java đã làm nền tảng cho rất nhiều thư viện và framework - trên thực tế, &lt;a href="http://zef.me/878/why-java-sucks"&gt;quá nhiều và chúng đều quá cồng kềnh&lt;/a&gt;. Nguyên nhân một phần do lỗi của người viết thư viện (lạm dụng XML và overdesign là hai bất cập hàng đầu), nhưng không thể phủ nhận những hạn chế trong ngôn ngữ Java và sự định hướng sai lệch của thư viện chuẩn cũng đã gây ảnh hưởng không nhỏ.&lt;/p&gt;&lt;p&gt;Với việc Java 7 từ chối hầu hết các đề xuất nhằm khắc phục những nhược điểm sâu sắc nhất thuộc về ngôn ngữ thì tương lai của Java lại càng trở nên đáng lo ngại hơn bao giờ hết. Cho đến nay, uy tín của Java trong giới hackers (hardcore programmers), startups, researchers đã giảm hẳn - nó vốn chưa bao giờ được họ coi trọng. Khi những bộ phận này thay đổi sở thích, các công ty lớn và các trường đại học rất có thể sẽ từ từ chuyển mình theo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-1106992863637461261?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1106992863637461261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/1106992863637461261'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2009/11/iem-yeu-cua-java.html' title='Những hạn chế của Java'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-3519148106670879813</id><published>2009-07-29T18:04:00.003+07:00</published><updated>2010-01-09T17:59:16.748+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><category scheme='http://www.blogger.com/atom/ns#' term='công cụ'/><title type='text'>Lựa chọn editor cho lập trình viên</title><content type='html'>&lt;blockquote&gt;Để đơn giản hóa ngôn từ, trong bài viết này tôi sẽ sử dụng thuật ngữ editor để ám chỉ cả trình soạn thảo đơn giản (như Notepad) lẫn môi trường phát triển tích hợp IDE (như Visual Studio).&lt;/blockquote&gt;

&lt;p&gt;Trong giới lập trình viên, có một số chủ đề nhất định mà mỗi lần xuất hiện trên các diễn đàn hay blogs, chúng sẽ có xu hướng kích hoạt một cuộc tranh luận sôi nổi: &lt;a href="http://lambda-the-ultimate.org/node/1480"&gt;Ruby hay Python&lt;/a&gt;, &lt;a href="http://raibledesigns.com/rd/entry/php_vs_java_which_is"&gt;Java hay PHP&lt;/a&gt;, &lt;a href="http://blogcritics.org/scitech/article/desktop-war-kde-vs-gnome/"&gt;GNOME hay KDE&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Editor_war"&gt;vim hay emacs&lt;/a&gt; ...&lt;/p&gt;

&lt;p&gt;Những chủ đề so sánh công nghệ kiểu này có chung một đặc điểm: chúng mang tính cá nhân. Việc lựa chọn Ruby hay Python, Gnome hay KDE đều phụ thuộc phần lớn vào sở thích của lập trình viên - khó có thể nói công nghệ nào tốt hơn một cách hoàn toàn khách quan. So sánh Vim với Emacs chẳng khác nào &lt;a href="http://www.facebook.com/topic.php?uid=10212595263&amp;amp;topic=10762"&gt;so sánh Metallica với Megadeth&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;Nói là vậy chứ tôi không thể hiểu nổi tại sao người ta có thể so Megadeth với Metallica :P&lt;/blockquote&gt;

&lt;p&gt;Nếu coi việc lựa chọn editor như một vấn đề mang tính cá nhân thì tiêu chí lựa chọn quan trọng nhất là nó phải mang lại cho bạn cảm giác thoải mái và sự hiệu quả. Có những siêu cao thủ chỉ dùng Notepad để lập trình. Lại có những siêu sao khác phải cần đến những IDE rất cồng kềnh như &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt;. Họ đều có lý, nhưng những sự lựa chọn của họ sẽ không giúp bạn xác định được đâu mới là môi trường thích hợp nhất cho riêng mình. Cách duy nhất là hiểu mình muốn gì và thử qua những lựa chọn phổ biến.&lt;/p&gt;

&lt;h5&gt;IDE hay text editor?&lt;/h5&gt;

&lt;p&gt;Với số lượng lựa chọn không nhỏ, điều đầu tiên cần xác định là liệu bạn muốn một IDE hay một editor đơn giản. Không cần phải nhắc lại IDE mạnh đến thế nào với những tính năng như auto-completion, refactoring, auto-error-detection, code generation, GUI building ...&lt;/p&gt;

&lt;p&gt;Tuy nhiên để thực thi những tính năng này, IDE thường parse toàn bộ code base và liên tục re-parse khi ta edit một file trong code base. Việc làm này đòi hỏi CPU, ngốn RAM, và cả HDD space khi IDE có thói quen save lại công việc của nó sau khi kết thúc. Đối với một project nhỏ, những thủ tục này thường không đem lại cảm giác khó chịu cho lập trình viên, nhất là với phần cứng mạnh. Nhưng khi project lớn dần và trở nên lệ thuộc vào nhiều thư viện cũng như projects khác nhau, hoạt động của IDE luôn tỏ ra ì ạch và gây ra stress cho người sử dụng.&lt;/p&gt;

&lt;p&gt;Đối với project nhỏ, ta không cần dùng đến IDE vì việc quản lý và sửa đổi đều nằm trong tầm quyển soát. Đối với project quá lớn, IDE lại không thể xử lý với tốc độ chấp nhận được. Đây là luận điểm chính của tôi giải thích tại sao tôi không mấy khi sử dụng IDE, trừ ở công ty cũ khi tôi dùng Visual Studio + Visual Assist X + &lt;a href="http://www.codinghorror.com/blog/archives/000682.html"&gt;cool color schemes&lt;/a&gt; để code C++.&lt;/p&gt;

&lt;p&gt;Hơn nữa, tôi đề xuất không nên dùng IDE nếu bạn chưa quen với toolset của một ngôn ngữ mới. Có nhiều lập trình viên bị lệ thuộc vào IDE đến nỗi không thể compile một project java bằng javac và không biết tự viết ant build script. Theo tôi, bạn chỉ nên dùng IDE sau khi đã hiểu cơ bản nó đã giúp bạn thực hiện những thao tác gì.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, việc bạn có thích dùng IDE hay không vẫn là một vấn đề mang tính cá nhân. Là một người sử dụng Arch Linux, tôi đã quen với những tool nhỏ gọn và không cảm thấy thoải mái đối với IDEs, nhưng tôi có thể hình dung một designer quen dùng các sản phẩm của Adobe khi chuyển qua lập trình sẽ không lấy gì làm khó chịu với giao diện tích hợp quen thuộc của các IDE như Eclipse, NetBeans, IntelliJ IDEA, cũng như sự ì ạch thường trực của chúng. Đó là sở thích và cá tính của mỗi người, nó không trực tiếp thể hiện khả năng. Quan trọng là bạn làm việc hiệu quả với môi trường mình lựa chọn.&lt;/p&gt;

&lt;h5&gt;Có khi nào editor hiệu quả hơn IDE?&lt;/h5&gt;

&lt;p&gt;Ngay cả khi đã hoàn toàn thỏa mãn với một IDE nào đó và không hề phàn nàn về tốc độ của nó, lập trình viên vẫn nên tìm kiếm và lựa chọn một editor chuyên dụng. Editor này sẽ được sử dụng để edit các file text config đơn giản, để code các ngôn ngữ chưa được IDE hỗ trợ, hoặc để thao tác sửa đổi nhanh mà không muốn tốn thời gian mở và đóng IDE.&lt;/p&gt;

&lt;p&gt;Tôi quan sát rất nhiều lập trình viên tìm đến Notepad khi cần làm những công việc trên. Trên thực tế, có lẽ họ sẽ hiệu quả hơn với một editor mạnh hơn Notepad trong khi vẫn nhanh nhẹn và nhỏ gọn gần bằng công cụ soạn thảo không thể đơn giản hơn này.&lt;/p&gt;

&lt;p&gt;Cá nhân tôi dùng &lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt; trong mọi trường hợp, từ những đoạn script nhỏ lẻ viết xong xóa đi cho đến những project lớn hơn. Đôi khi cần code trên Windows, trong quá khứ tôi vẫn thường dùng &lt;a href="http://www.scintilla.org/"&gt;SciTE &lt;/a&gt;hoặc Visual Studio, nhưng tôi đang chuyển sang giải pháp &lt;a href="http://code.google.com/p/textadept/"&gt;Textadept&lt;/a&gt; hoặc &lt;a href="http://www.geany.org/"&gt;Geany&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Các công cụ mà tôi lựa chọn có một số điểm chung: nhanh, nhỏ gọn, hỗ trợ auto-indent, hỗ trợ syntax highlight, hỗ trợ thay đổi color scheme (vì tôi không thể làm việc lâu với nền trắng), hỗ trợ &lt;a href="http://en.wikipedia.org/wiki/Snippet_%28programming%29"&gt;code snippets&lt;/a&gt;, và nên có khả năng tùy biến thông qua một scripting language.&lt;/p&gt;

&lt;p&gt;Tuy Vim rất mạnh nhưng có thể hiểu được tại sao số người ghét nó không ít hơn số fan hâm mộ của nó là mấy. Dù rất thích Vim, tôi vẫn phải thừa nhận việc nó sử dụng một scripting language tự chế - gọi là Vim script - đã gây khó khăn cho người sử dụng trong việc tùy biến. Họ buộc phải học thêm một ngôn ngữ mới. Đó là chưa kể phong cách edit bằng mode của Vim rất mất thời gian để làm quen.&lt;/p&gt;

&lt;p&gt;Có lẽ thừa kế bài học của Vim, một số editor mới ra đời đã sử dụng một ngôn ngữ script phổ biến nào đó như giao diện lập trình tùy biến. &lt;a href="http://www.jedit.org/"&gt;JEdit&lt;/a&gt; sử dụng một ngôn ngữ tựa Java. Textadept dùng &lt;a href="http://www.lua.org/"&gt;Lua&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Trước khi làm quen với Vim, tôi không tin rằng có chuyện editor hiệu quả hơn IDE. Nhưng thực tế đã chứng minh tôi không những hiệu quả hơn mà còn thoải mái tinh thần hơn khi làm việc trên Vim + Shell, so với Visual Studio + Visual Assist X, hay NetBeans, hay Eclipse. Và như tôi đã nói, dù sao bạn cũng nên đầu tư tìm hiểu editor vì có những thao tác nhất định mà IDE tỏ ra không phù hợp.&lt;/p&gt;

&lt;blockquote&gt;Nếu bạn là một fan của &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt; hay &lt;a href="http://www.ultraedit.com/"&gt;UltraEdit&lt;/a&gt; thì cũng được thôi, nhưng hãy dành thời gian tìm hiểu các editor khác trước khi đưa ra kết luận cuối cùng.&lt;/blockquote&gt;

&lt;h5&gt;Thay lời kết&lt;/h5&gt;

&lt;p&gt;Có thể coi editor là công cụ gần gũi nhất với lập trình viên. Nếu bạn vẫn luôn dùng một tool nhất định mà chưa từng bỏ thời gian để thử qua các IDEs và power editors khác thì đây chính là lúc nên làm việc đó. Sự đầu tư vào editor ảnh hưởng trực tiếp đến hiệu quả công việc của bạn. Một editor không phù hợp có thể làm gia tăng khả năng stress, gây đau đầu, và làm giảm tinh thần làm việc. Thỉnh thoảng thay đổi editor cũng có thể sẽ đem lại cho bạn cảm giác mới lạ và hấp dẫn hơn khi lập trình.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-3519148106670879813?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/3519148106670879813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/3519148106670879813'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2009/07/lua-chon-editor-cho-lap-trinh-vien.html' title='Lựa chọn editor cho lập trình viên'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-698417740100036161.post-5764461567294407860</id><published>2009-07-24T16:07:00.017+07:00</published><updated>2011-01-02T21:58:17.522+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lập trình'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>Tại sao nên học Haskell?</title><content type='html'>&lt;p&gt;Dù bạn là một system programmer làm việc chủ yếu với C/C++, một web programmer C#/ASP.NET hay PHP, một "enterprise programmer" (dân Java thích dùng những từ hổ báo kiểu thế này) với giải pháp Struts/Hibernate/Spring hay GWT, một client-side developer với CSS/Javascript/JQuery ... tôi cũng dám khẳng định, bạn sẽ nhận thấy giá trị của việc tìm hiểu Haskell là lớn hơn thời gian và công sức bỏ ra cho nó.&lt;/p&gt;&lt;p&gt;Coders chúng ta luôn biết tự search tài liệu và tự tìm tòi. Tuy vậy, tôi viết bài viết này với hy vọng tiết kiệm thời gian cho bạn bằng cách chọn lọc và đề xuất phương pháp tối ưu nhất thông qua kinh nghiệm của bản thân. Cho dù trình Haskell của tôi còn thấp vì thời gian tiếp cận không lâu, nhưng cũng chính vì thế mà tôi còn nhớ khá rõ quá trình tìm hiểu của mình, qua đó dễ dàng chia sẻ với các bạn.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Có quá nhiều công nghệ trong ngành của chúng ta đến nỗi không một ai đủ khả năng tìm hiểu hết. Do đó, để bắt kịp với tiến độ của ngành, chúng ta buộc phải biết cách lướt qua và chọn lọc: lướt qua để có cái nhìn tổng quát về bức tranh toàn cảnh, chọn lọc để xác định mảnh nào trong bức tranh đó mình cần phải đầu tư thời gian.&lt;/p&gt;&lt;p&gt;Hệ thống tiêu chuẩn chọn lọc của những người khác nhau là khác nhau. Đối với một coder tự do như tôi, tôi chọn lọc bằng cách dự đoán về khả năng mà một công nghệ có thể thay đổi cách tư duy của mình. Tuy nhiên trong quá trình tiếp cận Haskell, tôi nhận định, ngôn ngữ này sẽ tỏ ra hữu ích cho đa số coders chúng ta vì những nguyên nhân sau:&lt;/p&gt;&lt;h5&gt;Haskell là purely functional programming language&lt;/h5&gt;&lt;p&gt;Khi một ngôn ngữ hay một công nghệ nào đó đưa ra một phương pháp lập trình hoàn toàn mới, khả năng cao là nó đáng để tìm hiểu. Gần 20 năm trước, C++ đáng để tìm hiểu so với C bởi lẽ C++ đã chỉ ra thế nào là OOP. 20 năm sau, C++ vẫn đáng để tìm hiểu so với Java khi lúc này C++ lại chỉ ra thể nào là static polymorphism (&lt;a href="http://en.wikipedia.org/wiki/Template_metaprogramming"&gt;C++ template&lt;/a&gt;) thay vì dynamic polymorphism (&lt;a href="http://smellsblue.blogspot.com/2008/07/why-java-generics-suck.html"&gt;Java Generic&lt;/a&gt;) ;)&lt;/p&gt;&lt;p&gt;Một ngôn ngữ cũng sẽ trở nên quan trọng nếu nó làm tiền đề cho việc phát minh ra những &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29"&gt;design patterns&lt;/a&gt; mới. Xét theo tiêu chí này, Java cũng đã từng là một ngôn ngữ quan trọng khi có khá nhiều design patterns bắt nguồn từ nó, đơn cử như &lt;a href="http://martinfowler.com/articles/injection.html"&gt;dependency injection của Martin Fowler&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Gần đây, xu hướng áp dụng các kỹ thuật &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional programming&lt;/a&gt; (FP) đang tái xuất hiện trong giới lập trình, mà tiêu biểu là sự ra đời của &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;. Scala có thể xem như một sự kết hợp giữa Java và các kỹ thuật lập trình được ưu chuộng nhất hiện nay, trong đó bao gồm những phát kiến mới của các ngôn ngữ động như Python và Ruby, cũng như rất nhiều ý tưởng khác lấy từ FP.&lt;/p&gt;&lt;p&gt;Đối với tôi, Scala không hẳn là một ngôn ngữ &lt;em&gt;được chọn lọc&lt;/em&gt; - nó quá cồng kềnh và chưa đủ sâu sắc, không khác là mấy so với các web frameworks của Java hiện nay. Thế nhưng sự ra đời của nó đã cho thấy FP đang trở lại và chiếm ưu thế trong xu hướng phát triển của ngành lập trình. Và mặc dù một tập hợp nhỏ các kỹ thuật FP đã được tích hợp trong không ít các ngôn ngữ khác nhau như Python, Ruby, Scala, nhưng sẽ tập trung hơn nếu ta tiếp cận với FP thông qua 1 ngôn ngữ &lt;a href="http://en.wikipedia.org/wiki/Purely_functional"&gt;thuần FP&lt;/a&gt; - Haskell là 1 ngôn ngữ như thế.&lt;/p&gt;&lt;h5&gt;Haskell có syntax đẹp nhất&lt;/h5&gt;&lt;p&gt;Ta định nghĩa hàm sum để tính tổng các phần tử trong 1 list như sau trong Haskell:&lt;/p&gt;&lt;pre name="code" class="haskell"&gt;sum [] = 0
sum (x:xs) = x + sum xs
&lt;/pre&gt;&lt;p&gt;Tôi thích sử dụng những ví dụ đơn giản như thế này để đánh giá độ súc tích và độ sáng sủa trong cú pháp của một ngôn ngữ mới. Tuy &lt;a href="http://en.wikipedia.org/wiki/Common_Lisp"&gt;Common Lisp&lt;/a&gt; hay &lt;a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"&gt;Scheme&lt;/a&gt; đều là FP, nhưng cá nhân tôi thực sự có cảm tình với syntax của Haskell. Theo tôi, đó là một hệ thống syntax được thiết kế rất khoa học để cân bằng giữa độ dễ hiểu, độ ngắn gọn, và khả năng mở rộng trong ứng dụng lớn.&lt;/p&gt;&lt;h5&gt;Haskell đang trở thành xu thế&lt;/h5&gt;&lt;p&gt;Việc có ngày càng nhiều người sử dụng Haskell có nghĩa là nó sẽ còn phát triển để thỏa mãn nhu cầu của số đông và compiler của nó sẽ sinh code ngày một tốt hơn để đáp ứng những đòi hỏi về performance trong các ứng dụng thực tế.&lt;/p&gt;&lt;p&gt;Nhớ lại điều gì đã xảy ra với Ruby, cho dù bản thân ngôn ngữ Ruby có hay ho đến đâu nhưng nếu không có sự tồn tại của Rail thì rất có khả năng nó sẽ mãi mãi chỉ là một "toy language" - một ngôn ngữ đồ chơi chỉ dùng để giải trí và không được áp dụng trong công nghiệp.&lt;/p&gt;&lt;p&gt;Cho đến nay, Haskell đã vượt qua ngưỡng cửa "toy language" và đã được sử dụng để implement những ứng dụng nghiêm túc nhất, từ &lt;a href="http://www.haskell.org/haskellwiki/Applications_and_libraries/Web_programming"&gt;web applications&lt;/a&gt; cho đến &lt;a href="http://www.haskell.org/haskellwiki/Applications_and_libraries/Operating_system"&gt;operating systems&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Tốc độ lớn mạnh của Haskell là rất đáng kinh ngạc và điều đáng chú ý là nó không hề được marketing rầm rộ như Java khi xưa. Còn nhớ cách đây 5-10 năm, đã có ngày càng nhiều người sử dụng Java vì sự xuất hiện của hàng loạt các vị trí tuyển dụng Java programmers (Sun -&amp;gt; các công ty liên kết với Sun -&amp;gt; rồi lan tỏa dần), sau đó là việc áp dụng Java như một bộ môn trong giảng dạy, cùng với hàng loạt tools mới có vẻ cool viết trên và viết cho Java (Eclipse, NetBeans, IDEA), cũng như rất nhiều các kênh tin tức và blogs giải thích tại sao họ lại yêu Java đến thế. Đối với Haskell, người ta tìm hiểu và sử dụng đơn giản chỉ vì họ yêu thích nó.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Tôi có một châm ngôn: mỗi khi chán lập trình, hãy học một ngôn ngữ mới. Trong bài tiếp theo, tôi sẽ tiếp tục chia sẻ với các bạn quá trình tìm hiểu ngôn ngữ vô cùng mới mẻ và thú vị này :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/698417740100036161-5764461567294407860?l=seritrinh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/5764461567294407860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/698417740100036161/posts/default/5764461567294407860'/><link rel='alternate' type='text/html' href='http://seritrinh.blogspot.com/2009/07/kinh-nghiem-tiep-can-haskell-1-tai-sao.html' title='Tại sao nên học Haskell?'/><author><name>Quoc Anh Trinh</name><uri>https://profiles.google.com/116918963723558831013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-uvLyfSWHs_8/AAAAAAAAAAI/AAAAAAAAAY8/JIbweAn1BBU/s512-c/photo.jpg'/></author></entry></feed>
