9/17/08
Link DIRECT FOR IELST EX
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_1_Audio1.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_1_Audio2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_1_Audio3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_1_Audio4.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_2_Audio1.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_2_Audio4.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_2_Audio2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_2_Audio3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_3_Audio2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_3_Audio4.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_3_Audio1.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_3_Audio3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_4_Answer_Key.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_4.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_4_Audio3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_4_Audio1.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_Practice_Tests_for_IELTS_4_Audio2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_IELTS_5_with_Answers.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_IELTS_5_with_Answers_Test1.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_IELTS_5_with_Answers_Test2.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_IELTS_5_with_Answers_Test3.rar
http://artefact.lib.ru/languages/bozoks/eng/Cambridge_IELTS_5_with_Answers_Test4.rar
http://artefact.lib.ru/languages/bozoks/eng/IELTS_to_Success_Audio3.rar
http://artefact.lib.ru/languages/bozoks/eng/IELTS_to_Success_Audio1.rar
http://artefact.lib.ru/languages/bozoks/eng/IELTS_to_Success_Audio2.rar
http://artefact.lib.ru/languages/bozoks/eng/IELTS_to_Success.rar
9/4/08
Lucene Framework
Lucene là thư viện Java mã mở nổi tiếng giúp bạn xây dựng một “Google-like search engine”. Nếu bạn là Java coder thì đến 99% bạn đã nghe đến Lucene, mức độ thành công của nó được thể hiện qua số lượng bản port sang hầu hết các ngôn ngữ phổ biến: C++, C, C#, Ruby, Python, PHP … Lucene được sử dụng trong rất nhiều website, ứng dụng nổi tiếng như Wikipedia, Technorati … cho đến Eclipse IDE.
Trong quá trình làm project của mình, tôi có dịp được nghiên cứu về một số phiên bản của Lucene, quá trình nghiên cứu và test này thú vị đến nỗi tôi không thể không post lên đây được.
Nói qua về Lucene cho ai chưa hiểu: Lucene là một thư viện các lớp, sử dụng nó, bạn có thể xây dựng các ứng dụng full-text search hoặc nhúng tính năng này vào ứng dụng của mình. Công việc của Lucene gồm 2 phần: Indexing là công việc phân tích, đánh chỉ mục tài liệu text của bạn và searching là việc tìm kiếm trên đống dữ liệu mà bạn đã index. Bạn có thể tham khảo các link ở cuối bài, tất nhiên là hãy tìm đến chúng bằng cách đọc qua hết bài này.
PHP
Công nghệ mà tôi chọn cho project của mình là PHP, và tất nhiên phiên bản Lucene đầu tiên mà tôi thử nghiệm là phiên bản trên PHP. PHP Lucene là một phần của Zend Framework, gói Zend_Search_Lucene, đây là một bản port thuần PHP. Tôi hơi lo về performance của nó, bởi ai cũng biết PHP không được sinh ra để giải quyết các công việc nặng về logic. Nhưng mọi thứ không làm tôi thất vọng. Tôi thử index bộ manual của Zend Framework, nặng 40 MB, khoảng trên 3000 file HTML, tốn khoảng 5 phút. Chưa kể là trong lúc thử nghiệm, tôi còn nghe nhạc bằng Windows Media Player, viết tài liệu bằng Open Office Writer. Phần search cũng rất khá, mất trung bình 0.5 giây cho việc tìm kiếm từ khóa “Zend” trong đống dữ liệu trên, trả về hơn 1000 kết quả. Tuy nhiên một khuyết điểm rất lớn của Zend_Search_Lucene khiến tôi không thể sử dụng được nó là không hỗ trợ đầy đủ UTF-8. Dữ liệu bằng tiếng Việt bị hỏng khi index và không trả lại kết quả gì khi search, chưa kể còn sinh ra cả loạt lỗi Notice từ iconv(). Ngoài ra, PHP Lucene còn chưa hỗ trợ một số tính năng có ở bản Java Lucene như sort chẳng hạn.
Java
Những thiếu sót trên khiến tôi phải quay qua Java Lucene, mặc dù tôi chưa bao giờ làm việc với Java (nhưng trong nhóm tôi có người làm Java). Dự định của tôi là bắt cầu PHP và Java để chạy Java Lucene. Nhưng ngoài PHP/Java bridge nằm trong sản phẩm thương mại Zend Platform ra thì hai giải pháp còn lại đề không họat động được bất chấp các nỗ lực của tôi. Ý tưởng sử dụng Java Lucene phá sản, nhưng tôi khám phá ra Solr, một search server dựa trên Java Lucene. Solr chạy ở trên một server riêng với Tomcat, các ứng dụng client sẽ giao tiếp với nó qua web service. Tôi mất một buổi chiều để cài Tomcat lần đầu tiên trong đời, sau đó deploy Solr. Nhưng sau đó tôi phát ra sự thật phũ phàng rằng Solr chỉ hỗ trợ một index trên mỗi application. Tôi có thể cấu hình để chạy nhiều ứng dụng Solr trên cùng một server, nhưng như thế sẽ ngốn rất nhiều tài nguyên. Vậy là phá sản rồi Solr ơi !
C#
Sau khi bỏ Java lại sau lưng, tôi nghĩ đến Lucene.NET (viết bằng C#). Tất nhiên tôi sẽ không sử dụng server Windows. Giải pháp duy nhất là Mono, nhưng tôi không dám phiêu lưu với một công nghệ mà chưa ai trong nhóm của tôi từng làm việc với nó. Bỏ qua .NET !
Ruby
Giải pháp tiếp theo của tôi là Ferret, phiên bản Lucene của Ruby. Ấn tượng đầu tiên là hệ thống API của Ferret khác hoàn toàn với bản Java Lucene gốc. Ý tưởng về một ứng dụng có cả PHP và Rails cũng không đến nỗi tồi. Nhưng giống như Zend_Search_Lucene, Ferret vẫn fail với Unicode, chưa kể nó còn gặp một số vấn đề về performance. Ferret đang được viết lại với C, Ruby chỉ là bề mặt, nhưng phiên bản C-Ferret vẫn chưa ổn định. Tạm biệt Ferret !
C++ (PHP Extension)
Tôi bắt đầu thấy bối rối, bởi vì gần như là hết cách rồi. Ý tưởng port CLucene (C++ Lucene) thành một PHP extension xem ra hơi phiêu lưu và không thực tiễn nếu xét về thời gian. Thực ra đã có một gói PECL để chạy CLucene với PHP, nhưng nó không đảm bảo vì thậm chí còn không có cả tài liệu.
Quay lại với PHP
Thế là tôi quyết định quay lại và nhúng tay vào Zend_Search_Lucene. Thật may là vấn đề UTF-8 đã được giải quyết một cách tạm thời. Giải pháp tạm của tôi như sau: Xét thấy dữ liệu text bằng tiếng Việt chủ yếu là gồm các ký tự Latin, tất cả nằm trong phạm vi của Latin-1 (ISO-8859-1) cho nên tôi quyết định thay iconv() mà nhóm phát triển Zend Framework sử dụng bằng hàm utf8_encode(). Tất nhiên tôi sẽ viết một lớp riêng để extend lại các lớp mà tôi cần thay đổi, sửa thẳng vào code là không khôn ngoan. Tôi hiện đang khá hạnh phúc với giải pháp này, trong khi chờ đợi một lời hứa “full support UTF-8″ của Zend thành hiện thực.
Tuy nhiên, tôi nghĩ rằng ý tưởng biến C++ Lucene thành một extension còn hay hơn nhiều. Lúc đó khỏi phải lo về perfomance, vì ứng dụng search của tôi sẽ chạy nhanh và nhẹ hơn 20 lần !
Links:
- Zend_Search_Lucene: http://framework.zend.com/manual/en/zend.search.html
- Java Lucene: http://lucene.apache.org/
- Solr: http://lucene.apache.org/solr/
- Ferret: http://ferret.davebalmain.com/trac/
- Lucene.NET: http://www.dotlucene.net/
- CLucene: http://clucene.sourceforge.net/
9/1/08
Sử dụng Maven, Eclipse
1. Giới thiệu
Một project Java nếu được tạo đúng cách sẽ giúp hiệu suất khi phát triển ứng dụng được nâng cao. Bài viết này tổng kết kinh nghiệm của tác giả trong phát triển ứng dụng web. Bài này dành cho các bạn có kinh nghiệm sử dụng Maven và từng viết qua ứng dụng Web.
2. Download
a. Maven (http://maven.apache.org/ ): chương trình hỗ trợ compile mã nguồn. Download: http://www.apache.org/dist/maven/binaries/apache-maven-2.0.9-bin.zip
b. Eclipse (http://www.eclipse.org/ ): môi trường phát triển dùng viết mã Java. Download: http://eclipse.ialto.org/technology/epp/downl...se-jee-ganymede-win32.zip
Các Eclipse plugin:
i. Checkstyle plugin (http://eclipse-cs.sourceforge.net/): Kiểm tra mã nguồn có viết theo đúng quy định hay không. Download: http://www.mirrorservice.org/sites/ftp.source....checkstyle_4.4.2-bin.zip
ii. PMD plugin (http://sourceforge.net/projects/pmd/): Tìm các lỗi trong mã nguồn. Download: http://www.mirrorservice.org/sites/download.s...e-3.2.4.v200804111600.zip
iii. FindBugs plugin (http://sourceforge.net/projects/pmd/): Tìm các lỗi trong mã nguồn. Download: http://www.mirrorservice.org/sites/download.s...clipse_1.3.4.20080506.zip
iv. Spring plugin (http://springide.org/): plugin hỗ trợ viết các file cấu hình Spring. Download: http://s3.amazonaws.com/dist.springframework....e_2.1.0_v200808011800.zip
v. Hibernate Tools (http://www.hibernate.org/255.html): plugin hỗ trợ làm việc với các file cấu hình Hibernate. Download: http://download.jboss.org/jbosside/builds/nig....200808270027-nightly.zip
3. Cài đặt các công cụ
a. Maven
Unzip maven and update biến môi trường PATH chứa thư mục apache-maven-2.0.9\bin
b. Eclipse IDE và các plugin
Unzip Eclipse
Cài đặt các archived sites (Spring IDE và PMD) vào Eclipse
Tạo thư mục eclipse\dropins\eclipse và unzip/copy các plugins còn lại (Checkstyle, FindBugs, Hibernate Tools)
4. Giải thích file pom.xml (xem file attach)
maven-jetty-plugin: Plugin dùng để start embedded Jetty web server
maven-eclipse-plugin: Plugin dùng để tạo ra các file cấu hình Eclipse (và các plugins Checkstyle, PMD, FindBugs, Spring, Hibernate Tools)
5. Các lệnh maven thường dùng
- Cách debug ứng dụng:
Chạy lệnh jetty.bat và từ Eclipse dùng “Remote Java Application” to debug
- Tạo file cấu hình cho Eclipse: http://maven.apache.org/guides/mini/guide-ide-eclipse.html
6. Kết luận:
- Một IDE được cấu hình với các plugin cần thiết sẽ giúp làm việc hiệu quả hơn
- Maven có thể dùng để: a. quản lý các file cấu hình cho Eclipse; b. start 1 web server cho ứng dụng của bạn (giảm thời gian deploy ứng dụng web); c. Giúp debug các thư viện vì mã nguồn các thư viện này sẽ có sẵn khi dùng với maven
----------------------------------------
Mình sẽ nói về cách dùng cái sample này. Trước hết bạn cần có 1 database tại jdbc:mysql://localhost/bizservice (username: root, password rỗng) và 1 table CREATE TABLE USER(USER_ID INT PRIMARY KEY, USERNAME VARCHAR(255), PASSWORD VARCHAR(255))
Cài đặt maven rất đơn giản: unzip và set PATH
Bạn lấy file bizservice.zip về, unzip và chạy file jetty.bat, bạn sẽ thấy maven download rất nhiều file jar sau đó maven sẽ start jetty server với 1 webapp tại địa chỉ http://localhost:8080/bizservice
Nếu bạn muốn import project vào Eclipse thì bạn cần gõ lệnh "mvn eclipse:eclipse" ngay thư mục chứa file pom.xml, sau đó dùng "Import Existing Projects" của Eclipse để import (xem thêm tại http://mavenize.blogspot.com/2007/07/import-maven-project-into-eclipse-w.html)
Nếu bạn muốn tạo file WAR thì chạy lệnh mvn package trong thư mục chứa file pom.xml
Maven rất mạnh nên bạn không tốn nhiều công khi viết file pom.xml mà vẫn làm được nhiều thứ, nhưng bạn sẽ tốn công để học nó. Ví dụ của mình tuy phức tạp nhưng bạn nên dùng nó như 1 ví dụ để học. Lúc trước khi học Ant và Maven mình học rất nhiều khi đọc những file build của người khác viết.
8/29/08
Sống Trọn Vẹn Từng Ngày
“Bạn hãy tưởng tượng cuộc đời như một trò chơi tung hứng. Trong tay bạn có 5 quả bóng mang tên là: công việc, gia đình, sức khỏe, bạn bè và tinh thần. Bạn đang tung chúng lên không trung. Bạn sẽ hiểu ngay rằng công việc là quả bóng cao su. Vì khi bạn làm nó rơi xuống đất, nó sẽ nẩy lên lại. Nhưng bốn quả bóng còn lại - gia đình, sức khỏe, bạn bè và tinh thần - đều là những quả bóng bằng thủy tinh. Nếu bạn lỡ tay đánh rơi một quả, nó sẽ bị trầy sướt, có tì vết, bị nứt, bị hư hỏng hoặc thậm chí bị vỡ nát mà không thể sửa chữa được. Chúng không bao giờ trở lại như cũ. Bạn phải hiểu điều đó và cố gắng phấn đấu giữ cho được sự quân bình trong cuộc sống của bạn.
Bạn làm thế nào đây?
Bạn đừng hạ thấp giá trị của mình bằng cách so sánh mình với những người khác. Đó là vì mỗi chúng ta là những con người hoàn toàn khác nhau, chúng ta là những cá nhân đặc biệt. Bạn chớ đặt mục tiêu của bạn vào những gì mà người khác cho là quan trọng. Chỉ có bạn mới biết điều gì là tốt nhất cho chính mình.
Bạn chớ nên thờ ơ với những gì gần gũi với trái tim của bạn. Bạn hãy nắm chắc lấy như thể chúng là những phần trong cuộc sống của bạn. Bởi vì nếu không có chúng, cuộc sống của bạn sẽ mất đi ý nghĩa.
Bạn chớ để cuộc sống trôi qua kẽ tay vì bạn cứ đắm mình trong quá khứ và ảo tưởng về tương lai. Chỉ bằng cách sống cuộc đời mình trong từng khoảnh khắc của nó, bạn sẽ sống trọn vẹn từng ngày của đời mình.
Bạn chớ bỏ cuộc khi bạn vẫn còn điều gì đó cho đi, Không có gì là hoàn toàn bế tắc mà nó chỉ thật sự trở lên bế tắc khi bạn thôi không cố gắng nữa.
Bạn chớ ngại nhận rằng mình vẫn chưa hoàn thiện. Đó chính là sợi chỉ mong manh ràng buộc mỗi người chúng ta lại với nhau.
Bạn chớ ngại mạo hiểm. Nhờ mạo hiểm với những vận hội của đời mình mà bạn học biết cách sống dũng cảm.
Bạn chớ khóa kín lòng mình với tình yêu bằng cách nói bạn không có thời gian yêu ai. Cách nhanh nhất để nhận được tình yêu là hãy cho đi. Cách chóng nhất để đánh mất tình yêu là níu giữ thật chặt. Còn phương thế tốt nhất để giữ được tình yêu là bạn hãy chắp cho nó đôi cánh.
Bạn chớ băng qua cuộc đời nhanh cho đến nỗi không những bạn quên mất nơi mình sống mà còn có khi quên cả bạn định đi về đâu.
Bạn chớ quên nhu cầu tình cảm lớn nhất của con nguời là cảm thấy được đánh giá đúng.
Bạn chớ ngại học hỏi. Kiến thức không có trọng lượng. Nó là kho báu mà bạn có thể luôn mang theo bên mình một cách dễ dàng.
Bạn chớ phí phạm thời giờ hoặc lời nói một cách vô trách nhiệm. Cả hai điều đó một khi mất đi sẽ không khi nào bắt lại được. Cuộc đời không phải là một đường chạy mà nó là một lộ trình, bạn hãy thưởng thức từng chặng đường mình đã đi qua.
Quá khứ đã là lịch sử. Tương lai là một màu nhiệm. Còn hiện tại là một món quà của cuộc sống, chính vì thế chúng ta gọi đó là “tặng phẩm”
====Quà Tặng Cuộc Sống====
Design Patterns, lập trình viên cần phải biết.
Đang nghiền ngẫm thật kĩ các Design Patterns, lang thang trên google tìm được bài viết này, thấy cũng khá thú vị nên post lên cho bà con ngắm nghía, thư giãn và quan trọng hơn là để mọi người thấy được tầm quan trọng của nó trong việc thiết kế phát triển phần mềm. Một lập trình viên đúng nghĩa phải biết những vấn đề này, nếu không chúng ta mãi là những thợ code tồi.
Thợ hồ tin học và các mẫu dáng thiết kế
Tâm… đa sự của một lập trình viên
Có người ví ngành tin học, hay nói “dông dài” hơn là công nghệ thông tin, giống như ngành xây dựng: muốn tạo ra hệ thống nào đó, cần có “kiến trúc sư” và… “thợ hồ”, tức những người thiết kế hệ thống và những người viết nên mã chương trình cụ thể. Theo tiêu chí này, dường như số đông sinh viên tin học tốt nghiệp sẽ làm… “thợ hồ” (thợ dĩ nhiên phải cần nhiều hơn thầy). Công việc “kiến trúc sư” có lẽ phải dành cho các bậc “sồn sồn” dày dạn kinh nghiệm trận mạc.
Quả quyết rằng người Việt có năng khiếu tin học bẩm sinh (không rõ tôi “tiêm nhiễm” điều này từ bao giờ), tôi hăm hở lao vào tin học. Thế rồi đúng như số mệnh mà ai cũng biết rõ mười mươi: tôi trở thành… “thợ hồ”! Quả thực, công việc thường chỉ là gắn lại với nhau những “viên gạch” có sẵn mà người ta gọi là các thành phần (component). Ngày ngày tôi lầm lũi xây những bức tường, có khi chẳng thấy ngôi nhà hay cao ốc nó ra sao.
Tuy nhiên, cái chân “thợ hồ” của tôi xem ra cũng không dễ dàng chút nào! Nếu như thợ hồ trong xây dựng có thể về nhà ngủ khò sau một ngày làm việc (tôi ghen với họ!), tôi luôn phải loay hoay tìm đọc sách này, sách kia, thức đêm thức hôm để tiêu hóa một cách khó nhọc những kiến thức mới mẻ cứ nảy sinh đều đều (giờ đây tôi thường tự nhủ: người mình chắc chắn thông minh… bằng người ta!).
Một trong những thứ khó nuốt (đối với tôi) kêu bằng design pattern. Khái niệm này trở nên thịnh hành từ khi xuất hiện quyển sách “đáng ghét”, từng làm xôn xao giới lập trình, mang tên Design Patterns: Elements of Reusable Object-Oriented Software của bốn tác giả Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides. Bên Mỹ người ta gọi đùa họ là “bè lũ bốn tên” (Gang of Four). “Bè lũ” này làm cho đời sống của cánh “thợ hồ” như tôi thêm vất vả nhưng có lẽ cũng vì thế mà quyển sách nổi tiếng của họ được đưa vào… chương trình đại học.(*)
Decorator, Iterator, Mediator,…
Bạn có thấy dòng chữ nêu trên giống câu thần chú kiểu trong… Harry Potter không? Lần đầu tiên, tôi đụng phải một cái design pattern (thường gọi ngắn gọn là pattern) là khi người ta gửi cho tôi một bản vẽ (thế đấy, làm “thợ hồ” vẫn phải đọc bản vẽ) và yêu cầu tôi thực hiện một decorator ở chỗ “được khoanh tròn”. Vờ như đã hiểu, tôi “không thèm” hỏi lại xem decorator là cái giống gì. Từ đó, tôi bắt đầu để ý những đồng nghiệp thường xuyên nói chuyện với nhau bằng những từ lạ lùng hơn, nào là iterator, rồi mediator,… Dường như họ muốn chứng tỏ mình sành điệu thì phải.
Học thầy không tày học bạn, tôi đem chuyện bí hiểm ấy kể với một người bạn học cũ. Anh nói ngay: “Mấy thứ đó gọi chung là pattern! Cũng chẳng có gì, đại khái nó là những data structure (cấu trúc dữ liệu) thôi mà”. Có thật vậy chăng? Hình như anh cũng hiểu… đại khái như thế thôi vì anh không thể giải thích cho tôi rõ tại sao người ta “bịa” ra các tên mới để làm gì.
Thật may, cuối cùng một vị tiền bối trong ngành tin học nói cho tôi biết design pattern có thể dịch là mẫu dáng thiết kế. Nó không phải là… cấu trúc dữ liệu (nhầm lẫn tai hại!). Mỗi một mẫu dáng không phải là vật liệu để dùng ngay (khổ thật, tôi đã quen với “tư duy lắp ráp”) mà là một giải pháp kiến trúc hợp lý và hiệu quả, từng được kiểm nghiệm nhiều trong thực tế, do đó có tính phổ quát và tính ứng dụng cao. Tôi rất tâm đắc với thuật ngữ “mẫu dáng” mới toanh để dịch nghĩa cho pattern hơn là cách gọi “mẫu mực” hay “mẫu hình” (theo từ điển) vì từ “dáng” bao hàm sự uyển chuyển, tính linh hoạt, đòi hỏi người ta phải cảm nhận, hiểu biết sâu sắc để vận dụng, không thể sao chép rập khuôn. Mẫu dáng ở đâu ra?
Hóa ra thuật ngữ design pattern lại xuất phát từ ngành xây dựng, do kiến trúc sư!
Lời khuyên cho lập trình viên của Bjarne Stroustrup
Lời khuyên này được trích từ bài phỏng vấn mới của Bjarne Stroustrup (Cha đẻ của ngôn ngữ C++)
Do you have any advice for up-and-coming programmers?
Know the foundations of computer science: algorithms, machine architectures, data structures, etc. Don’t just blindly copy techniques from application to application. Know what you are doing, that it works, and why it works. Don’t think you know what the industry will be in five years time or what you’ll be doing then, so gather a portfolio of general and useful skills. Try to write better, more principled code. Work to make “programming” more of a professional activity and less of a low-level “hacking” activity (programming is also a craft, but not just a craft). Learn from the classics in the field and the better advanced textbooks; don’t be satisfied with the easily digested “how to” guides and online documentation - it’s shallow.
Thực trạng ngành CNPM VN
Thưa các anh chị,
Tôi có nhiều buổi nói chuyện với các bạn tôi và một số người về điều mà VN chúng ta đang đặt ra các con số. Con số 20,000 tiến sỹ rồi 1 triệu kỹ sư CNTT. Tất cả chỉ vì một mục đích 1 tỷ USD quá kém cõi.
Việc đặt ra 1 triệu kỹ sư CNTT và 20,000 tiến sỹ là con số khổng lồ, vượt quá khả năng hiện tại của VN trong ít nhất 15 năm tới. Con số này trở thành không tưởng nếu chúng ta nhìn lại về hệ thống đào tạo trên thế giới và VN. Hai khả năng quá xa vời này đang tạo nên một lỗ hỗng an ninh quá cao cho nguy cơ “Tiến sỹ giấy”, phá hoại nội lực và kinh tế đất nước là rất có thể.
Và chúng ta lại có những báo cáo mang tính “nhầm lẫn” quá đáng khi nói rằng việc vượt qua 4 lần doanh thu về CNTT (500 triệu USD) so với năm 2003 (là 120 triệu) là con số đáng mừng? Chúng ta cần xem năm 2006 chúng ta làm được gì và năm 2007 chúng ta đã làm được gì và thực tế cho chúng ta thấy chúng ta đã suy yếu thế nào. Từ đây, hãy có một tầm nhìn khác cho một đột phá CNTT Việt Nam.
Phần mềm VN là “không có gì” ngoài cái vỏ bộc thô thiển trong “vấn nạn” nguỵ trang về “gia công phần mềm”. Tôi ước tính con số để các anh chị thấy rằng, gia công hiện tại không phải có khả năng lợi nhuận.
1) Năm 2007, FCGV từ 650 lập trình viên giảm còn 450 lập trình viên. Điều tệ nhất là, hầu hết các lập trình viên có kinh nghiệm đề ra đi. Doanh thu công ty này không đạt chỉ tiêu và phải đối diện với việc “phá sản”. Cuối cùng, FCG ở Mỹ quyết định bán cho CSC. Con số hiện nay của họ là 500 lập trình viên. Đi xuống!
2) PSD - do anh Thịnh làm chủ thì cho rằng năm 2007 là một năm tồi tệ nhất. Thua lỗ, cắt giảm nguồn nhân lực và “tìm cách để sống qua ngày” là chiến lược của CNTT.
3) TMA - Ông Nguyễn Hữu Lệ: Tạm bằng lòng với chỉ tiêu 750 kỹ sư. Trong khi đáng ra công ty này cần vượt qua con số 1200 kỹ sư. Lý do, tài chính và nguồn dự án bị đóng băng tại Bắc Mỹ (Canada)
4) Tân thiên niên Kỷ và IITS thì bị lỗ nặng và hai công ty với con số gần 100 lập trình viên buộc phải sát nhập lại nhau để cố giữ được tên công ty.
5) GlobalSoft: Một năm của những ảm đạm nhất chưa từng thấy.
Nếu anh chị đi qua eTown 1,2 sẽ thấy sự trống rỗng còn đó của các building mà trước đó rất khó mà thuê.
Trả lời câu hỏi vì sao Harvey Nash không tuyển nhân viên vào lấp kín buidling mình (hiện nay tại eTown 2, công ty này đang có 75 lập trình viên trong khi họ có khả năng lấp đầy building với trên 150 lập trình viên) thì họ cho rằng, họ không muốn đổ vỡ theo bánh xe CNTT Việt Nam hiện tại.
Chúng ta đã quá tự hào vào cái đêm “Giải Sao Khuê”. Tôi đáng buồn cho các nhà tổ chức đang vẽ ra một bức tranh mà họ chưa nhận thấy điều này. Có những công ty lỗ nặng nề cũng ôm trên tay chiếc cúp. Sao mà khó xem thế… sự dối trá sẽ là điều tàn ác nhất, phá huỷ kinh tế của một đất nước đang hồi sinh.
Thưa các anh chị,
Chúng ta không nên đạt ra những con số để làm mục tiêu tăng trưởng. Con số 1 triệu kỷ sư CNTT để có doanh thu 1 tỷ USD là quá thấp về tính kinh tế trong khi khó tưởng với nguồn nhân lực VN.Chúng ta đang khủng hoảng về gia công phần mềm vì chúng ta đang “làm mướn” mà thôi. Gia công VN đang chôn vùi tri thức trẻ sáng tạo, chôn vùi sự sáng tạo vốn đòi hỏi các bạn phải nỗ lực gấp nhiều lần. Gia công đang làm nhân lực VN xem rẽ giá trị chính mình để luyện giọng tiếng anh nói “bập bẹ” và ghép mình vào những “quy trình kiễu CMMI - 5 dối trá” làm tê liệt đi khả năng chủ động sáng tạo CN mà chính điều này mới là giá trị thực.
Tôi mong rằng, chính sách của Chính phủ VN sớm nhìn thấy một cách rõ ràng về giá trị nội lực và chiến lược sáng tạo mới là thúc đẫy hướng gia công. Chúng ta đang đi ngược lại tính tự nhiên và ép mình như việc ép con em chúng ta đọc thuộc lòng bài lịch sữ. Hãy cho tri thức trẽ những sáng tạo và đó là giá trị kinh tế thực sự mà tổ quốc cần.
GS. Nguyễn Văn Hiền