Thứ Năm, 15 tháng 9, 2011

50 câu lệnh Linux phải nhớ

clear: làm sạch cửa sổ dòng lệnh
ls tenthumuc: Liệt kê nội dung bên trong một thư mục
cat tentaptin: Hiển thị nội dung của một tập tin lên cửa sổ dòng lệnh
rm tentaptin: Xóa một tập tin
cp taptinnguon taptindich: Sao chép một tập tin
passwd: Đổi mật khẩu
motd: Thông điệp của ngày
finger tentruycap: Chương trình tìm kiếm thông tin người dùng
startx: Khởi động X Window System server
less tentaptin hoặcr more tentaptin: Hiển thị nội dung một tập tin trong cửa sổ dòng lệnh một trang mỗi lần
info: Hiển thị thông tin và tài liệu trên shell, các tiện ích và chương trình.
lpr tentaptin: Gửi tập tin tới máy tin
grep chuoi tentaptin: tìm kiếm chuỗi trong tập tin
head tentaptin: Hiển thị 10 dòng đầu tiên của tập tin
tail tentaptin: Hiển thị 10 dòng cuối cùng của tập tin
mv tentaptincu tentaptinmoi: Di chuyển hoặc đổi tên tập tin
file tentaptin: Hiển thị thông tin về nội dung của tập tin
echo chuoi: Sao chép chuỗi tới màn hình dòng lệnh
date: Hiển thị ngày và giờ hiện tại
cal: Hiển thị lịch
gzip tentaptin: Nén một tập tin
gunzip tentaptin: Giải nén một tập tin
which lenh: Hiển thị đường dẫn tới lệnh
whereis lenh: Hiển thị đường tới nơi chứa lệnh
who: Hiển thị các người dùng đã đang nhập
finger tentruycap@maychu: Thu thập thông tin chi tiết về người dùng hiện đang dùng hệ thống
w: Hiễn thị người dùng đã đăng nhập với các tiến trình sử dụng
mesg y/n: Đặt tùy chọn để các người dùng khác viết thông điệp cho bạn
write nguoidung: Gửi tin nhắn cho người dùng khác
talk nguoidung: Cho phép 2 người chat với nhau
chmod quyen tentaptin: Thay đổi quyền truy cập tập tin
mkdir tenthumuc: Tạo một thư mục
rmdir tenthumuc: Xóa một thư mục rỗng
ln existingfile new-link: Tạo một đường dẫn tới một tập tin (liên kết cứng)
df: Hiển thị tất cả các mount của hệ thộng
top: Hiển thị danh sách các tiến trình đang chạy
tty: Hiển thị tên của cửa sổ dòng lệnh mà trên đó lệnh được dùng
kill PID hoặc số %job: Ngừng một tiến trình bằng số PID (Process Identification Number) hoặc số công việc
jobs: Hiển thị một danh sách các công việc hiện tại
netstat: Hiển thị các kết nối mạng
traceroute maychu: In gói định tuyến tới máy chủ
nslookup: Truy vấn máy chủ tên miền
hostname: Hiển thị tên định danh của hệ thống
rlogin maychu: Tiện ích để kết nối với một hệ thống ở xa
telnet maychu: Tiện ích để kết nối tới một hệ thống ở xa (tương tự như rlogin nhưng tương tác tốt hơn)
rcp taptin maytuxa: Được dùng để sao chép từ một máy tính ở xa
ftp: Tiện ích để truyền tập tin giữa các hệ thống trên một mạng
rsh lenh: Tiện ích để chạy một lệnh trên một hệ thống ở xa mà không cần đăng nhập
ping maychu: Tiện ích để kiểm tra kết nối tới một hệ thống ở xa
lcd duongdanthumuc: Thay đổi thư mục máy cục bộ khi đã đăng nhập ở trên máy ở xa

Thứ Tư, 14 tháng 9, 2011

Coder hoàn hảo

Những kỹ năng chuyên gia lập trình cần có

Trong lĩnh vực công nghệ, những người viết chương trình (coder hay lập trình viên – LTV) đã tiến một bước dài từ hình mẫu “chuyên gia” với cây viết giắt túi. Chương trình do LTV tạo ra không chỉ làm thay đổi bộ mặt công nghệ mà còn làm thay đổi cách chúng ta liên lạc, điều hành kinh doanh, truy cập thông tin, kiểm soát sức khoẻ và nhiều thứ khác. Nói chung, nếu không có kỹ năng của các LTV, sẽ không có ngành công nghiệp phần mềm, có lẽ chúng ta vẫn còn dùng máy đánh chữ và mất hàng tuần để gửi thư thay vì chỉ mất vài giây như hiện nay.

Để kiếm sống và thăng tiến trong nghề viết code, LTV cần phải thành thạo ít nhất một hay nhiều ngôn ngữ lập trình thời thượng. Và còn phải biết các kỹ thuật lập trình, mô hình phát triển phần mềm và nhiều kỹ năng khác.

Ngôn ngữ lập trình

Tối thiểu, LTV cần tinh thông một trong những ngôn ngữ lập trình đang thịnh hành. Theo chỉ số TIOBE tháng 12/2010, 5 ngôn ngữ lập trình phổ biến nhất hiện nay là Java, C/C++, PHP, C# và Python. Sự phổ biến của ngôn ngữ không phải bất biến. Do vậy, các công ty thích tuyển LTV không chỉ thành thạo một ngôn ngữ mà còn biết thêm nhiều ngôn ngữ khác như Python, JavaScripts, Ruby on Rails, C#… Bạn có thể truy cập website TIOBE (www.tiobe.com) hay đơn giản tìm trên Google để biết những ngôn ngữ lập trình đang được ưa chuộng.

LTV được kỳ vọng có thể làm được mọi thứ như thiết kế, viết code, kiểm tra và bảo trì hệ thống từ đơn giản đến phức tạp với ngôn ngữ mà mình thành thạo.

Khả năng sử dụng các ngôn ngữ kịch bản là “giá trị gia tăng” đối với LTV, và là yêu cầu “phải có” đối với một số vị trí công việc. Nói chung, các ngôn ngữ kịch bản (script) dễ học và dễ dùng, không phức tạp như các ngôn ngữ lập trình cần biên dịch. Các ngôn ngữ kịch bản hiện rất phổ biến vì chúng cho phép trình duyệt web “nói chuyện” và tương tác với người dùng và với chương trình ở máy chủ.

LTV nên biết một số ngôn ngữ kịch bản như JavaScript, Perl, WSH, TCL… LTV làm việc với máy ảo Java (JVM) cũng nên xem xét phát triển kỹ năng sử dụng các ngôn ngữ kịch bản như Groovy, JRuby, Jython, Scala hay Fantom.

Các ngôn ngữ kịch bản có thể dùng để lập trình tự động hoá các công việc như xử lý file, xử lý chuỗi hay chuyển đổi định dạng dữ liệu.
10 ngôn ngữ lập trình cho năm 2011

Tạp chí eWEEK đã thực hiện thăm dò rất nhiều LTV, nhà tuyển dụng, các công ty công nghệ mới khởi nghiệp
và những người sáng lập một số ngôn ngữ lập trình phổ biến, dưới đây là kết quả – 10 ngôn ngữ lập trình được dự báo sẽ “hot” trong năm 2011:
1. Java
2. C#
3. C/C++
4. JavaScript (cùng với CSS
và HTML)
5. Visual Basic
6. PHP
7. Objective-C
8. Perl
9. Python
10. Ruby
Danh sách này có chút khác biệt (về thứ tự) so với danh sách những ngôn ngữ lập trình “hot” của TIOBE.
Tuy nhiên, việc chọn ngôn ngữ nào để “kiếm sống” tùy thuộc bạn và lĩnh vực ứng dụng mà bạn đang (hay muốn) làm việc.



Kỹ thuật lập trình

Cùng với ngôn ngữ lập trình, LTV còn phải am tường những kỹ thuật lập trình như hướng đối tượng (object-oriented), khách/chủ (client/server), phân tán, triển khai, thử nghiệm, bẫy lỗi và bảo trì. Các kỹ thuật này có liên quan đến phương pháp phát triển phần mềm (thường liên quan đến môi trường hay công cụ phát triển) sẽ được đề cập trong phần dưới đây.

Mô hình phát triển phần mềm

Dù một mình phát triển ứng dụng, hay là thành viên của nhóm phát triển cả trăm người, thì việc hiểu biết những mô hình phát triển phần mềm đều cần thiết, giúp cho công việc dễ dàng hơn.
LTV cần có kiến thức về các việc như: kiểm soát phiên bản, thư viện, hệ thống quản lý mã, tài liệu, phương pháp và công cụ kiểm thử, quản lý bản phát hành…
Hiện nay nhiều công ty áp dụng những mô hình đặc biệt để quản lý quy trình phát triển phần mềm, LTV nên nắm rõ mô hình này và vị trí của mình trong quy trình.

Một số mô hình thông dụng đã được giới thiệu khá nhiều trên TGVT như Agile, Lean, Scrum, Spirall và Waterfall (bạn dễ dàng tìm thấy trên website pcworld.com.vn bằng các từ khoá này).
a1101 97a Coder hoàn hảo
Ứng dụng web

Giờ là thời của web. LTV không thể không biết web. Ứng dụng web hiện diện khắp nơi và làm được gần như mọi thứ. Để làm được điều đó, LTV phải hiểu những phương thức đằng sau các trang web và ứng dụng web, đó có thể là một hay nhiều trang JSP (Java Server Page), Java servlet, ASP (Active Server Page) và ActiveX control. Tùy yêu cầu công việc, LTV cũng cần có kiến thức về Cascading Style Sheets (CSS), HTML và XHTML.

Kỹ năng cá nhân

LTV không phải ngôi sao “cô đơn” mà thường phải làm việc với một nhóm hay làm việc trong một dự án gồm nhiều khâu. Vì vậy LTV cần có những kỹ năng sau:
- Kỹ năng giao tiếp tốt: ở đây muốn nói đến kỹ năng giao tiếp giữa người với người chứ không phải với máy tính, bao gồm cả nói và viết.
- Khả năng giải quyết vấn đề: trong lĩnh vực phát triển phần mềm, nếu có vấn đề ở khâu nào đó, thì chắc chắn các khâu còn lại sẽ bị ảnh hưởng. Một LTV “có nghề” phải là người có khả năng ứng biến tìm ra giải pháp để giải quyết vấn đề hay sáng tạo những cách thức mới để thực hiện những công việc mới hay thậm chí là công việc… cũ.
- Tính tự giác: Tuy LTV có thể làm việc trong một nhóm, nhưng viết code là công việc “tự thân”, yêu cầu tính tự giác. Nghề phát triển phần mềm đầy những “deadline” (mốc thời gian buộc phải hoàn thành) và những thay đổi giờ chót vì vậy “không thiếu” những ngày làm việc vất vả thâu đêm.

Lời kết

Trung thành là tính từ tốt. Tuy nhiên trong lĩnh vực phát triển phần mềm, trung thành với một ngôn ngữ lập trình hay một phương pháp phát triển có thể cản trở con đường nghề nghiệp của LTV. LTV “có nghề” cần “trung thành” với khả năng đáp ứng nhanh nhu cầu của thị trường, do vậy cần nắm bắt những xu hướng mới, những ngôn ngữ mới hay mới nổi.

Nguồn: pcword.com.vn

Link: http://kithuatlaptrinh.tk/tong-quan/coder-hoan-hao#ixzz1Y2baCm38

Thứ Năm, 8 tháng 9, 2011

9 câu nói hay của những nhân vật kiệt xuất

9 cau noi hay cua nhung nhan va t kiet xuat
Dwight D. Eisenhower đã từng là chủ nhân Nhà trắng nhờ biết lãnh đạo người khác bằng nụ cười.

Họ là những con người phi thường, đã đạt được những thành tựu xuất chúng. Kinh nghiệm và sự thông thái của họ là điều cả nhân loại công nhận. Mỗi lời họ nói ẩn chứa những bài học quý giá. Hãy lắng nghe và ghi nhớ!

“Trở ngại là những thứ ghê gớm sẽ xuất hiện khi mắt bạn rời khỏi mục đích”

- Henry Ford

Nếu bạn luôn chuyên tâm, mọi vấn đề sẽ chẳng là gì. Hãy tập trung vào những gì bạn muốn đạt được.

“Hãy thành thực với công việc, với lời nói, và với bạn bè của bạn”

- Henry David Thoreau

Còn ai phù hợp hơn nhà triết học nhân văn nổi tiếng để nói với chúng ta rằng lòng trung thành luôn luôn gặt hái lợi ích? Dù trong kinh doanh hay trong cuộc sống, hãy trung thực trong từng hành động, lời nói, luôn vai kề vai với những người đồng hành, và bạn sẽ có được sự khâm phục cũng như sự tôn trọng từ những người khác.

“Người dám thất bại nặng nề có thể thành công rực rỡ”

- Robert Francis Kennedy

Dĩ nhiên bạn cần tính toán những nguy cơ và rủi ro trước khi dấn thân vào những điều chưa biết. Nhưng Robert Kennedy muốn nhắc bạn rằng nếu bạn không thử bất kỳ điều gì, bạn cũng sẽ chẳng đạt được gì. Càng mạo hiểm, càng thắng lớn. Anh em nhà Wright biết rằng họ đang đối mặt với cái chết khi thử nghiệm nguyên mẫu bay của mình. Nhưng xã hội của chúng ta giờ đây sẽ ra sao nếu không có máy bay? Hãy nhắm tới mục tiêu cao hơn thứ bạn nghĩ mình có thể đạt được, và bạn sẽ vượt qua chính mình.

“Sự thông thái chân chính duy nhất là biết rằng bạn không biết gì”

- Socrates

Nhà triết học Hy Lạp muốn khuyên bạn rằng đừng lo sợ phải thừa nhận sự ngu dốt của mình và học hỏi những điều mới. Người ta luôn khâm phục những ai biết thừa nhận lỗi lầm và không cảm thấy xấu hổ khi hỏi về những điều họ chưa biết.

“Lãnh đạo là nghệ thuật khiến ai đó làm điều mà bạn muốn như thể chính anh ta muốn làm điều đó”

- Dwight D. Eisenhower

Người đàn ông này đã từng giữ cấp bậc cao nhất trong quân đội và trở thành tổng thống Hoa Kỳ nhờ nắm chắc nghệ thuật lãnh đạo này. Cách tốt nhất để chỉ huy ai đó là động viên bằng lời nói và nụ cười. Hãy đối xử tốt với cấp dưới. Họ sẽ làm việc hiệu quả khi cảm thấy vui vẻ và thoải mái.

“Tránh xa những kẻ coi nhẹ tham vọng của bạn. Những kẻ nhỏ nhen luôn như thế, còn những người thực sự vĩ đại sẽ khiến bạn cảm thấy rằng bạn cũng có thể trở nên vĩ đại”

- Mark Twain

Nhà văn nổi tiếng hóm hỉnh muốn dạy rằng: Hãy suy nghĩ lớn lao và khuyến khích người khác cũng làm như vậy. Một nhà lãnh đạo uy tín sẽ khiến bạn tin rằng bạn sinh ra để sống một cuộc đời cao thượng. Vì vậy chỉ lắng nghe lời khuyên của những người mà bạn tin tưởng vào sự đánh giá của họ.

“Hầu hết mọi người đều chấp nhận thua cuộc ngay khi họ sắp thành công. Họ dừng lại ngay trước vạch đích, cách chiến thắng chỉ một bàn chân”

- H. Ross Perot

Perot muốn nói rằng hãy luôn đi về phía trước bởi bạn không bao giờ biết rằng bạn thực sự gần chạm tới thành công như thế nào. Nếu bạn không ngừng đẩy bản thân tiến lên, chiến thắng có thể gần hơn bạn nghĩ.

“Cách hoàn thành một việc gì đó là không phiền lòng việc ai sẽ được ghi công”

- Benjamin Jowett

Jowett, một học giả người Anh thế kỷ thứ 19, nổi tiếng với những bản dịch các tác phẩm của Plato, còn là một thầy tu. Bài học rút ra từ câu nói này là sự khiêm nhường: Đừng cố gắng trở thành trung tâm. Làm việc theo nhóm luôn mang lại kết quả cao hơn. Mục tiêu hoàn thành công việc quan trọng hơn là sự ca ngợi bản thân.

Linh Hương Đặng

Theo Askmen

Chủ Nhật, 4 tháng 9, 2011

Con đường trở thành một lập trình viên PHP chuyên nghiệp

1. Kỹ năng lập trình
Kỹ năng lập trình hướng đối tượng (OOP) là ưu tiên số 1. Tới version 4.x, PHP vẫn không đánh giá cao lập trình OOP nhưng PHP5 đã hỗ trợ OOP rất tốt để dành được sự tin yêu của giới lập trình. Học OOP nên có bài bản.Lý thuyết OOP không nhiều nhưng cũng là rất nhiều và sâu xa. Khi học tới một mức độ nhất định thì có thể tiếp cận các design pattern là các mô hình thiết kế đối tượng chuẩn mực để giái quyết các vấn đề thiết kế ứng dụng khó.

Nắm vững OOP sẽ là cơ sở để tiếp cận mô hình xây dựng ứng dụng 3 tier. Hầu hết các ứng dụng PHP đều sử dụng mô hình 3 tier nổi tiếng là MVC (Model-View-Controller). Ngay cả APS.NET 2.0 cũng có một framework cho người yêu MVC mới ra đời vào khoảng đầu 12/06.

2. Kiến thức về HTML và CSS
HTML không phải là ngôn ngữ gì quá phức tạp mà thực tế là chỉ có 1 quy luật duy nhất cần nắm bắt là . Tuy nhiên, HTML vẫn là nền tảng quan trọng của web, bạn nên dành từ 3 – 10 ngày để thật tập trung giải quyết dứt điểm nó.

CSS phức tạp hơn với một số cái niệm về selector và người làm designer thì cần nắm vững về CSS nhiều hơn coder. Tuy nhiên, nắm vững CSS là thế mạnh để giải quyết các bài toán về giao diện đôi khi tưởng như khó nhưng lại rất dễ dàng. Đơn cử là bài toán Menu đa cấp hiển thị horizontal hay vertical. Với CSS, chỉ cần thêm một chút kiến thức JS là bạn có thể giải quyết gọn gạng một menu động với các menu item lấy ra từ CSDL.

Web 2.0 cũng là chuẩn mà CSS tham gia và đóng vai trò khá quan trọng.

HTML, CSS nên học một cách bài bản để tuân thủ nghiêm ngặt chuẩn XHTML và CSS của W3C. Rất nhiều bạn coder không chú ý điểm này nhưng thực tế công việc nếu phải làm việc cho công ty nước ngoài hay khách hàng US, EU thì vấn đề theo đúng chuẩn W3C là rất quan trọng.

3. Mô hình Client/Server
Ứng dụng web là ứng dụng bản thân nó đã tuân thủ mô hình Client/Server và bạn cần nắm vững ngôn ngữ lập trình tại client side và server side. Cơ chế giao tiếp giữa Client và Server của ứng dụng web dựa trên giao thức HTTP và sử dụng Request/Response cũng cần phải được nắm rõ.

HTTP protocol không phải là giao thức phức tạp nhưng cũng nhiều chi tiết vặt và thông số. Bạn sẽ có nhiều cơ hội tiếp cận HTTP khi đi sâu vào PHP nên ngay từ đầu, không cần quá đặt nặng vào tìm hiểu HTTP.

Đối với Request/Response và các thành phần cơ bản của một ứng dụng web như Server, Session, các biến môi trường, Cookie,… thì bạn lại phải nắm rất vững. Điều này quan trọng vì nó là nền tảng của tất cả các ứng dụng web dù viết bằng ngôn ngữ gì gì đi nữa. Một khi đã nắm vững, chuyển đổi giữa các ngôn ngữ sẽ không gặp khó khăn gì.

Thực hành những khái niệm về Client/Server, bạn cần tiếp cận PHP và JavaScript song song. Ở mức độ beginner, sẽ gặp vô số lỗi PHP và JavaScript rất dễ nản lòng vì PHP cũng như JavaScript không thực sự cung cấp các tool lập trình sành điệu như Visual Studio của MS để các bạn debug.

Rất may là tại thời điểm này, PHP coder đã có thêm tool IDE như phpEdit (NuSphere) hayEclipse, Zend Studio Neon. Bạn nên chọn dùng Eclipse hoặc Zend vì NuSphere là bản thương mại. Zend hiện đang có bản Neon Beta miễn phí (những IDE này đều có tool debug dùng DBG debuger của NuSphere có thể không dễ cài và cấu hình). Trên trình duyệt, bạn chọn FireFox thì sẽ có plug-in Web Developer tools để view code, CSS và debug JavaScript.

4. PHP, MySQL
Chỉ cần vài kiến thức JS cơ bản để bắt đầu với web, nếu đi sâu và JS trước bạn sẽ nản. Bạn nên tiếp tục với PHP và MySQL. Nếu chưa có kiến thức Database, bạn nên dành khoảng 7 ngày học về SQL. Thực hành trên MySQL, bạn có thể dùng MySQL console nhưng chắc sẽ ngán ngẩm, thay vào đó, bạn có thể download SqlYog hoặc Navicat hoặc dùng trực tiếp PhpMyAdmin (sau này sẽ dùng nhiều khi bạn quản lý các host đi thuê) để thực hành, tương tự Query Analyzer của SQL Server.

PHP phiên bản 5.x đã viết lại thư viện kết nối MySQL, bạn nên nắm sơ qua về nó qua 1 cuốn ebook dạy về PHP-MySQL (rất nhiều, đừng câu nệ, học cuốn nào cũng vậy cả).

Thời gian rèn luyện PHP và MySQL tùy vào từng người. Vì ở mức độ này, bạn cũng đã tương đối hoàn chỉnh 1 ứng dụng Web nên bạn sẽ tập trung vào việc xử lý dữ liệu nhập xuất và tính toán, hiển thị. Để nâng cao kỹ năng coding, đừng tìm cách sử dụng các thư viện vào lúc này mà hãy cố gắng viết code PHP phát sinh ra HTML code thật tốt. Một vài project làm thật hoàn thiện các chức năng trên giao diện sẽ giúp bạn nâng cao skill về PHP, HTML và JS.

Đừng quan trọng các vấn đề gửi mail, parsing RSS, upload file, phát sinh PDF,… bạn có cả đời coder để tìm hiểu những thứ lặt vặt này.

5. Begin professional
Nếu bạn theo lời tôi dụ dỗ tới bước này thì bạn đã khá là đau khổ với PHP và MySQL. Bước 5 này chia sẻ cho bạn nhiều súng đạn để vào đời giang hồ đi… code dạo kiếm cơm cheesy Con đường trở thành một lập trình viên PHP chuyên nghiệp. Đây là thời điểm bạn sẽ quay về rèn luyện thêm skill về OOP và MVC.

Đầu tiên là cải thiện ngay thói quen xử lý dữ liệu với MySQL thông thường bằng PHP. Có nhiều khả năng code của bạn sẽ bị tấn công SQL Inject nên cách tốt hơn là tìm một thư viện “xịn” cho việc này. Hai thư viện khá dễ cài và học là PDO của PEAR và ADODB. Đạt tới mức độ cao nhất về xử lý DB hiện nay kể đến viện hiểu rõ và sử dụng tốt ORM (Object – Relational Mapping). Vì bản chất thiết kế ứng dụng là các class mà object của nó cần được lưu trữ xuống Database để tái sử dụng lại, người lập trình tiếp cận theo hướng ngược lại là đọc DB lên và chuyển nó thành các object. ORM là khái niệm này và có nhiều tool làm chuyện này cho bạn trong đó có cả ADODB và PDO.

ORM là khái niệm rất hữu ích bạn cần nắm vững do nó liên quan tới thiết kế ứng dụng, các entityclass và business object. ORM không chỉ dùng trong PHP/MySQL mà dùngtrong hầu hết các ngôn ngữ khác.

(Tới đây, nếu bạn gặp khó khăn về xây dựng một project tương đối các chức năng. Các vấn đề như gửi nhận dữ liệu giữa các trang, quản lý user, xử lý form data,… thì hãy tìm xuống phần về MVC ở dưới nhé.)

Khi bạn có thể thoải mái với xử lý dữ liệu, bước tiếp theo là tìm đồ chơi hỗ trợ việc hiển thị dữ liệu đó cho user. PHP coder dùng các template engine khác nhau để hiển thị dữ liệu. 2 template khá hay là Smarty và Flexi. Ngoài ra, một số template còn cho bạn tạo control như ASP.NET nhưng sẽ bàn tới sau nhé.

Tiện thể làm việc với template, bước này bạn cũng cần một đồ chơi ngon lành về JS. Trước đây web developer rất sợ JS nhưng kể từ khi có AJAX thì JS cũng sống lên mạnh mẽ và nhiều library nổi tiếng ra đời, nhiều đến nỗi ngập ngụa mà sự lựa chọn hoàn toàn do bạn. Sau đây là một số ưu tiên mà bạn nên chọn: YUI của Yahoo, jQuery, jPrototype và Scriptaculous.

Bạn cũng sẽ quan tâm tới việc nâng cao kiến thức JS của mình nếu muốn đào sâu vào những thư viện này. Nếu vậy, hãy tìm hiểu và học JSON. Một lần nữa, bạn cần luyện công về OOP.

6. Rapid application development, let find an MVC framework
Phần này có 2 bước nhỏ độc lập nhau mà những người thực sự muốn đào sâu vào coding sẽ thích thú.

Ở bước 5, bạn sẽ gặp khó khăn nếu skill về giải quyết các vấn đề logic của bạn không đủ tốt để tạo nên một “cơ chế” làm việc chung cho ứng dụng của bạn. Nếu gặp vấn đề này mà đã cố gắng nhiều nhưng không thể giải quyết nổi, bạn cần một framework. Có nhiều MVC framework tốt như CakePHP, CodeIgniter, Zoop,… hay thậm chí bạn có thể chọn dùng ngay Symfony hay Zend Framework. Tất cả đều tốt và thử thách khả năng research của bạn.

Tận dụng framework này, đôi khi sẽ lại làm khó khăn và mất đi cơ hội cho bạn luyện tập những thư viện Smarty hày PDO mà tôi đã đề cập. Lý do là đa số framework đều có sẵn những cơ chế hỗ trợ những vấn đề này và thực tế bạn có thể bỏ hẵn bước 5 thú vị và đốt cháy giai đoạn sang bước 6.

Tôi không dám dánh giá các framework nào là tốt hơn để lựa chọn nhưng Zend có vẻ là một framework được nhiều người ưa chuộng, ít nhất cũng vì tên tuổi của Zend. Thực tế, Zend là một tập hợp nhiều library hơn một framework hoàn thiện, nó sẽ rất tốt cho ai có khả năng kết nối các library với nhau và không thích một cơ chế gò bó như các framework khác thường có. Tuy nhiên, nến xét về mức độ nhanh chóng, các framework khác sẽ dễ tiếp cận hơn hẳn.

Với nhiều người thì cách tiếp cận lại ngược lại, họ muốn có một framework MVC do chính mình xây dựng và làm được như vậy, người đó thực sự có nhiều cơ hội thành một developer hàng đầu. Lời khuyên là bạn nên có mộtframework cho mình và quen thuộc với nó. Khái niệm làm việc trên 1 framework cũng sẽ giúp đỡ nhiều khi bạn làm trong 1 công ty vì như vậy sẽ tạo ra 1 chuẩn mực chung cho các member làm trong cùng 1 nhóm.

7. More than an application
Cuối cùng thì nội lưc của bạn cũng kha khá thâm hâu để đục đẽo các opensource của Joomla, Drupal, WordPress, PhpBB,… hay gì gì đi nữa. Đây là công việc thú vị mà dân nghiền code chắc chắn không bỏ qua. Nghiên cứu các open source này cho bạn tìm hiểu những ứng dụng được thiết kế để có thể thay đổi cấu hình, liên tục phát triển thêm các module, component hỗ trợ và mở rộng gần như vô hạn.

Bạn cũng sẽ tìm được cơ hội co-developing các ứng dụng, thử tìm cách làm việc nhóm, quản lý và chia sẻ code qua Internet,… và cùng nhiều người tạo dựng nên các ứng dụng hữu ích chắc chắn là điều thích thú nhất.

(theo PHPVN)

Thứ Ba, 30 tháng 8, 2011

cuộc sống quanh ta



1. Nếu bạn có thực phẩm để ăn, có áo quần để mặc, có một mái nhà để che đầu, và một nơi để nghỉ qua đêm là bạn đã giàu hơn 75% thế giới này

2. Nếu bạn có tiền tiêu trong ví, có tiền ban phát cho người nghèo, có tiền để dành trong ngân hàng, bạn thuộc 8% người giàu nhất thế giới.

3. Nếu sáng nay bạn thức dậy, thấy mình khoẻ hơn ngày hôm qua một chút thì bạn đã may mắn hơn một triệu người không thể sống qua nổi tuần này.

4. Nếu bạn chưa bao giờ trải qua nguy hiểm của chiến tranh, cô đơn và tù tội, đau đớn của tra tấn hay vật vã của đói khát, bạn đã hạnh phút hơn 500 triệu người trên thế giới.

5. Nếu bố mẹ bạn còn sống và còn hạnh phúc bên nhau thì so với thế giới trường hợp của bạn không nhiều đâu.
6. Và cuối cùng nếu bạn đọc được thông điệp này, thì bạn đã sung sướng hơn 2 tỷ người trên thế giới chẳng bao giờ được đọc bất cứ thứ gì cả.

Gửi những người bạn của tôi, những người tôi biết và cả những người tôi chưa biết. Làm ơn xin đừng thờ ơ với những điều xung quanh. Có thể bạn nghĩ rằng bạn luôn là người gặp xui xẻo. Nhưng hãy nhìn đi, bạn vẫn còn may mắn hơn rất nhiều người người. Hãy cùng cầu nguyện cho những lỗi đau, những bất hạnh ở khắp nới trên trái đất này và hãy gửi thông điệp này cho những người khác. Hãy nhìn tấm hình trên và suy ngẫm lại xem chúng ta hàng ngày cứ phàn nàn về thức ăn của mình như thế nào?

Thứ Bảy, 27 tháng 8, 2011

Phong cách lập trình C++


Bạn đang học lập trình, vậy bạn nghĩ về một chương trình máy tính như thế nào?
  • Một chương trình máy tính có thể xem như một tác phẩm, bởi vì nó được đọc bởi bạn (có thể bây giờ, mà cũng có thể là 10 năm sau!) và bởi những lập trình viên khác sau bạn (để phát triển, sửa chửa, cập nhật… ). Chính vì lẽ đó, một chương trình máy tính nên đáp ứng cả 3 yêu cầu sau: đúng, dễ đọc và dễ hiểu.
  • Mục đích của style là làm cho chương trình trở nên dễ đọc đối với người viết và những người khác, một style tốt là một phần thiết yếu của việc lập trình tốt. Viết một chương trình chạy đúng là chưa đủ bởi chương trình không chỉ để cho máy tính đọc mà còn để các lập trình viên khác đọc. Hơn nữa, một chương trình có style tốt luôn có nhiều khả năng chạy đúng hơn một chương trình có style tồi.
Tài liệu này cung cấp cho bạn:
1. Một tập hợp các chuẩn trình bày chương trình thông dụng.
2. Một thói quen để từ đó bạn có một phong cách lập trình tương đối chuyên nghiệp.
Tuy nhiên, tài liệu này không có tham vọng đề cập đến toàn bộ các khía cạnh của một phong cách lập trình. Nó chỉ nói đến những gì cần thiết để cho bạn, một sinh viên, khi chưa tìm được một phong cách phù hợp tạo được những thói quen tốt ngay từ đầu.

I. Tổ chức chương trình
1. Mô-đun hóa chương trình của bạn
Chương trình của bạn nên được tách thành nhiều môđun, mỗi môđun thực hiện một công việc và càng độc lập với nhau càng tốt. Điều này sẽ giúp bạn dễ bảo dưỡng chương trình hơn và khi đọc chương trình, bạn không phải đọc nhiều, nhớ nhiều các đoạn lệnh nằm rải rác để hiểu được điều gì đang được thực hiện.
Khi muốn chuyển thông tin cho các chương trình con, bạn nên sử dụng các tham số. Tránh sử dụng các biến toàn cục vì làm như vậy bạn sẽ triệt tiêu tính độc lập giữa các chương trình con và rất khó khăn khi kiểm soát giá trị của chúng khi chương trình thi hành. (Chú ý, bạn nên phân biệt giữa biến toàn cục và hằng số toàn cục)
2. Định nghĩa và cài đặt của các lớp phải được chia thành nhiều file để ta có thể dễ dàng tái sử dụng.
Định nghĩa các lớp được lưu trong các file header với mở rộng *.h. Cài đặt của các thành viên của lớp lưu trong file nguồn với mở rộng *.cpp. Thông thường mỗi lớp có một cặp file *.H và *.CPP, nhưng có thể gộp các lớp có liên quan vào một cặp file.Cuối mỗi file *.H là chỉ thị #include đến file *.CPP. Cuối mỗi file *.CPP là các “chương trình chính” dùng để test file CPP đó kèm theo các #define thích hợp cho việc test. Chương trình chính được lưu trong một file nguồn riêng và include các file header của các lớp được dùng đến.
3. Mỗi file header của lớp nên sử dụng các định hướng #ifndef, #define, và #endif để đảm bảo mỗi file header chỉ được include 1 lần.
Ký hiệu được #define nên là tên của file header viết toàn bằng chữ hoa với một dấu gạch dưới ( _ ) thay cho dấu chấm.
Ví dụ:
//counter.h

#ifndef COUNTER_H
#define COUNTER_H
class Counter
{

    //...
};  // end Counter

#include "counter.cpp"
#endif // COUNTER_H

II. Chuẩn tài liệu
1. Sử dụng // cho các chú thích. Chỉ dùng /* */ để tạm thời vô hiệu hóa các đoạn chương trình để test và debug.
2. Mỗi file nguồn, cả .CPP và .H, đều phải bắt đầu bằng một khối chú thích đủ để người đọc có thể kết nối các file nếu chúng bị tách ra.
Mẫu như sau:
//---------------------------------------------------------------------
// Name:    Họ tên
// Class:   Lớp
// Project: mô tả/tên dự án (một dòng, giống nhau tại mọi file)
// Purpose: Mục đích sử dụng của mã chương trình hoặc các khai báo trong file này
//---------------------------------------------------------------------
Mỗi lớp, hàm, phương thức phải có một khối chú thích mô tả ngắn gọn lớp, hàm, phương thức đó làm gì; đối với hàm/phương thức: liệt kê tất cả các tham số, nêu rõ ý nghĩa của tham số; và mô tả điều kiện trước và sau của hàm/phương thức đó. Chọn các tên có nghĩa sẽ đơn giản hóa các chú thích.
Lưu ý, tài liệu về phương thức đặt tại định nghĩa lớp (*.H) ta có thể sao chép tài liệu đó vào file *.CPP nhưng không bắt buộc.
3. Có thể chú thích các đoạn code bên trong hàm, tuy nhiên chỉ nên chú thích đủ hiểu. Quá nhiều chú thích và chú thích thừa làm code trông rối. Tất cả các chú thích phải được lùi đầu dòng cùng đoạn code quanh nó.

III. Tên
Tham khảo thêm: Các cách thức đặt tên
1. Sử dụng các tên có nghĩa.
Tên giàu tính mô tả cho các biến toàn cục và tên ngắn gọn cho các biến cục bộ. Tên có nghĩa sẽ giúp chương trình dễ viết và dễ debug hơn. Nếu bạn phải dùng tên không có nghĩa cho một cái gì đó thì có thể bạn chưa hoàn toàn hiểu bài toán mình đang giải. Hãy cố hiểu rõ trước khi tiếp tục lập trình.
Theo thông lệ, các tên i và j được dành cho các chỉ số, p và q dành cho các con trỏ, s và t dành cho các xâu.Người ta dùng các tên bắt đầu hoặc kết thúc bởi chữ “p” cho các biến con trỏ (chẳng hạn nodep, intp, intpp, doublep), các tên bắt đầu bằng chữ hoa cho biến toàn cục (chẳng hạn Globals) và tất cả chữ cái hoa cho các hằng số (chẳng hạn CONSTANTS).
2. Khuyến cáo sử dụng tên tiếng Anh kiểu camel.
- Chữ cái đầu tiên được viết thường.
- Các chữ cái đầu mỗi từ được viết hoa.
- Các chữ cái còn lại được viết thường.
 Ví du:
lowerCamelCase
getThatObject
3. Đặt tên một cách nhất quán
Các namespace trong C++ góp phần làm rõ nghĩa của các tên mà không cần sử dụng các tên dài. Các biến có liên quan phải được đặt các tên có liên quan, đồng thời phải làm nổi bật được sự khác nhau của chúng. Các tên trong lớp sau đây vừa quá dài vừa không hề nhất quán:
class UserQueue
{
    int noOfItemsInQ, frontOfTheQueue, queueCapacity;
    public int noOfUsersInQueue() {...}
};
Thứ nhất, cùng một nội dung là queue nhưng được biểu diễn bởi ba dấu hiệu: Q, Queue và queue. Thứ hai, các biến và các hàm thành phần của lớp UserQueue chỉ có thể được sử dụng bởi các đối tượng của lớp này, do vậy viết
queue.queueCapacity
hay
queue.noOfUsersInQueue()
rõ ràng là thừa. Chúng ta có thể viết lại lớp này với các tên mới như sau:
class UserQueue
{
    int nitems, front, capacity;
    public int nusers() {...}
}
Không chỉ bản thân đoạn mã định nghĩa lớp đó dễ hiểu hơn, mà những đoạn mã sử dụng lớp UserQueue cũng dễ hiểu hơn:
queue.capacity++;
n = queue.nusers();
Lớp UserQueue vẫn có thể cải tiến thêm, bởi nitems và nusers thực chất là cùng biểu diễn một khái niệm và do đó chỉ cần sử dụng một trong hai tên đó mà thôi.
4. Tên của các project, form, và component:
Các project và form phải có tên hợp lý, không để nguyên là Form1. Các component phải được đặt tên có nghĩa, ngoại trừ các component như Label, Group Box, etc., nếu chúng không có mặt trong code. Các component nên được đặt hậu tố là kiểu đối tượng:
Ví dụ: widthScale, nameText, leftScrollbar, mainForm, myLabel, printerDialog …
5. Tên biến và tên hàm:
  • Thường phải là các từ hoặc cụm từ. Ngoại lệ duy nhất: con đếm vòng for() đôi khi có thể chỉ cần dùng tên là 1 chữ cái chẳng hạn i
  • Không viết tắt trừ các từ viết tắt thông dụng chẳng hạn HTML, khi đó coi từ viết tắt như từ thông thường (tên sẽ có dạng convertToHtml thay vì convertToHTML)
  • Đặt tên cho các namespace nên bằng chữ in thường toàn bộ
    Ví dụ: mynamespace, com.company.application.ui
  • Tên biến là một danh từ bắt đầu bằng một ký tự in thường, các từ tiếp theo được bắt đầu bằng một ký tự in hoa:
    Ví dụ: line, audioSystem…
  • Đặt các tên “động” cho hàm:
    + Tên hàm nên là một động từ theo sau bởi một danh từ. Ví dụ: now = date.getTime();
    + Các hàm trả về giá trị boolean nên được đặt tên thể hiện giá trị mà nó trả về. Ví dụ: isOctal(c) thì tốt hơn là: checkOctal( c ); vì cách đặt tên thứ nhất cho biết ngay rằng hàm trả về giá trị true nếu c là một số octal và trả về false trong trường hợp ngược lại.
  • Tên hàm thể hiện chức năng
    Các  tiền  tố  thường  được  sử  dụng:  get/set,  add/remove, create/destroy,  start/stop,  insert/delete, increment/decrement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/new, open/close, show/hide, suspend/resume
    Ví dụ:
    + “set/get” được đặt trong các phương thức truy cập trực tiếp đến thuộc tính: getName(), setSalary(int)…
    + “find” có thể được sử dụng trong các phương thức tìm kiếm: vertex.findNearestVertex();
    matrix.findSmallestElement(); node.findShortestPath(destinationNode);
    + Tập hợp nhiều đối tượng nên được đặt tên được đặt tên ở số nhiều: vector <Point> points; int[] values;
    +Những biến chỉ số lượng đối tượng nên có tiền tố “n”: nPoints, nLines…
6. Tên class (và struct)
Dùng chữ hoa tất cả các chữ cái đầu mỗi từ, còn lại là các chữ cái thường.
Ví dụ: GameBoard, Game.

IV. Định dạng
1. Lùi đầu dòng các đoạn code, mỗi mức dùng 3 hoặc 4 ký tự, tốt nhất là dùng tab.
  • Phải thống nhất, luôn dùng 3 hoặc luôn dùng 4 ký tự
  • Chú ý không được dùng lẫn lộn giữa ký tự tab và space để lùi đầu dòng, (các môi trường soạn thảo có thể quy ước khác nhau về độ dài của tab).
Nếu bạn dùng Visual C++, hãy sử dụng chức năng menu sau Edit – Advanced – Format Selection hoặc dùng phím tắt: Giữ phím Ctrl rồi lần lượt nhấn các phím A, K, F
2. Mỗi dòng chỉ chứa nhiều nhất 1 lệnh và không dài quá 79 ký tự. Một lệnh có thể được chia thành nhiều dòng, khi đó các phần sau phải được lùi đầu dòng hợp lý.
Ví dụ :
cout << "The cost for 1 loaf of bread" << endl
        << "is $1.89" << endl;
3. Có thể căn thẳng hàng để nâng cao hightlight.
Ví dụ:
int songuyen  = 100;
double sothuc = 3.14;
char kyt      = 'a';
char ten[]    = {"tam", "lan", "hiep", "bao", "yen", "tuan", "hoa"};
bool gt[]     = {  0  ,  0   ,  0    ,  1   ,  0   ,  1    ,  0   };
4. Các khối với cặp ngoặc {} phải được trình bày 1 trong 2 cách sau (khuyến khích sử dụng cách 1):
Cách 1:
if (!done)
{
    doSomething();
    moreToDo();
}
else
{
    //…
}
Cách 2:
if (!done) {
    doSomething();
    moreToDo();
} else {
    //…
}
Nếu trong khối chỉ có 1 lệnh thì có thể bỏ ngoặc (tốt hơn là không nên) nhưng vẫn lùi đầu dòng:
for( n++; n < 100; n++ )
    field[ n ] = 0;
*i = 0;
return 'n';
5. Nên có khoảng trắng giữa từ khóa và dấu ‘(’, nhưng không nên có khoảng trắng giữa tên hàm và dấu ‘(‘.
Ví dụ:
// no space between 'strcmp' and '(',
// but space between 'if' and '('
if ( strcmp( input_value, "done" ) == 0 )
    return 0;
Ngoài ra nên có khoảng giữa dấu ngoặc của hàm và đối số như trên.
6. Nên có 1 space trước và sau mỗi toán tử đôi số học hoặc lôgic, chẳng hạn +, <<, và ||. Nên dùng 1 space sau dấu phẩy, nhưng trước dấu phẩy hoặc chấm phẩy không nên có dấu cách. Ngoại lệ: không chèn khoảng trắng vào giữa toán hạng và toán tử ++ và –
7. Chèn dòng trắng giữa các đoạn khác nhau trong chương trình.

V. Thiết kế
Một số vấn đề thường gặp mà sinh viên cần chú ý:
  • Không để dữ liệu của lớp dạng public.
  • Hạn chế tối đa việc dùng biến toàn cục.
  • Nguyên tắc quyền ưu tiên tối thiểu: chỉ cho hàm đủ quyền truy nhập để thực hiện nhiệm vụ của mình, không cho nhiều quyền hơn.
    +  const được sử dụng cho một biến khi hàm không cần thay đổi biến được tham chiếu đến đó.
    +  Nếu hàm không được sửa giá trị của một tham số, chỉ truyền tham số vào là giá trị đối với các kiểu đơn giản, mảng phải được truyền dưới dạng “const []“, và các kiểu struct/class nên truyền dạng “const &” hoặc “const *”.
  • Không để dữ liệu trong lớp mà nó không thực sự thuộc về lớp đó. Chẳng hạn, nếu một hàm cần một biến để lưu một kết quả tạm thời, không khai báo một biến thuộc lớp mà hãy khai báo một biến địa phương của hàm đó.
  • Các hàm hoặc phương thức của lớp không nên tạo output trừ khi đó là nhiệm vụ của phương thức đó. Ví dụ, một phương thức print có thể sẽ ghi thông tin ra cout, nhưng một thao tác để thêm hoặc bớt cái gì đó từ một danh sách thì không.
  • Mỗi phương thức/hàm (kể cả hàm main()) chỉ chứa tối đa 30 dòng kể cả tính từ ngoặc mở hàm “{“ tới ngoặc kết thúc hàm “}”.

VI. CODE
1.Viết code theo chuẩn ISO dù compiler có bắt buộc hay không.
  • Hạn chế #include ngoài chuẩn, VD: conio.h
  • Nên để int main() và return 0;thay vì void main()
2. Các hằng số không nên viết trực tiếp vào chương trình.
Thay vì thế, người ta thường sử dụng lệnh #define hay const để đặt cho những hằng số này những tên có ý nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát những chương trình lớn vì giá trị của hằng số khi cần thay đổi thì chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa (ở #define hay const).
Ví dụ:
popChange = (0.1758 – 0.1257) * population;
nên được viết là:
#define BIRTH_RATE 0.1758
#define DEATH_RATE 0.1257
//…
popChange = (BIRTHRATE – DEATH_RATE) * population;
Ghi chú: bạn không nên dùng #define thường xuyên để định nghĩa các hằng số, bởi vì trong quá trình debug, bạn sẽ không thể xem được giá trị của một hằng số định nghĩa bằng #define.
Khi làm việc với các kí tự, hãy sử dụng các hằng kí tự thay vì các số nguyên. Ví dụ để kiểm tra xem c có phải một chữ cái hoa hay không, có thể dùng đoạn mã sau:
if( c >= 65 && c <= 90 )
Nhưng đoạn mã này hoàn toàn phụ thuộc vào bộ mã biểu diễn kí tự đang được sử dụng. Cách tốt hơn là viết như sau:
if( c >= ‘A’ && c <= ‘Z’ )
3. Luôn viết new và delete thành từng cặp.
4. Khi khai báo con trỏ, dấu con trỏ nên được đặt liền với tên, nhằm tránh trường hợp sau:
char* p, q, r; // q, r không là con trỏ
Trong trường hợp này nên viết là:
char *p, *q, *r;
(luật này cũng được dùng khi khai báo tham chiếu với dấu &)
5. Nên sử dụng các dấu ( ) khi muốn tránh các lỗi về độ ưu tiên toán tử.
Ví dụ:
// No!
int i = a >= b && c < d && e <= g + h;
// Better
int j = (a >= b) && (c < d) && (e <= (g + h));
Bảng sau trong sách C Programming Language chỉ ra thứ tự ưu tiên các toán tử trong C. Hàng trên cùng có mức ưu tiên cao nhất.
banguutien Phong cách lập trình C++
Dùng bảng này, có thể thấy rằng char *a[10]; là một mảng 10 con trỏ kí tự. Bạn cũng thấy rằng tại sao lại cần dấu ngoặc khi dùng (*p).i. Sau khi thực hành, bạn sẽ nhớ bảng này.
6.Tách các biểu thức phức tạp thành các biểu thức đơn giản hơn
Biểu thức sau đây rất ngắn gọn nhưng lại chứa quá nhiều phép toán:
*x += ( *xp = ( 2*k < ( n – m ) ? c[ k + 1 ] : d[ k -- ] ) );
Chúng ta nên viết lại như sau:
if( 2*k < n - m )
        *xp = c[ k + 1 ];
    else
        *xp = d[ k- ];
    *x += *xp;
7.Viết các lệnh dễ hiểu, không viết các lệnh “khôn ngoan”
Các lập trình viên thường thích viết các lệnh càng ngắn gọn càng tốt. Tuy nhiên điều này thường gây phiền toái cho người khác.
Hãy xem biểu thức sau đây làm gì:
subkey = subkey >> ( bitoff – ( ( bitoff >> 3 ) << 3 ) );
Biểu thức trong cùng ( bitoff >> 3 ) dịch phải bitoff 3 bit. Kết quả thu được lại được dịch trái 3 bit. Bởi vậy 3 bit cuối cùng của bitoff được thay thế bởi các số 0. Kết quả này lại được trừ đi bởi giá trị ban đầu của bitoff, kết quả của phép trừ chính là 3 bit cuối cùng trong giá trị ban đầu của bitoff. Ba bit này được dùng để dịch subkey sang phải.
Bởi vậy, biểu thức nói trên tương đương với biểu thức sau đây:
subkeu = subkey >> ( bitoff & 0×7 );
Rõ ràng cách viết thứ hai dễ hiểu hơn nhiều. Một ví dụ khác về cách viết biểu thức ngắn gọn nhưng làm phức tạp hóa vấn đề:
child = ( ! LC && ! RC ) ? 0 : ( ! LC ? RC : LC );
Cách viết dưới đây dài hơn, nhưng dễ hiểu hơn nhiều:
if( LC == 0 && RC == 0 )
        child = 0;
    else if( LC == 0 )
        child = RC;
    else
        child = LC;
Toán tử ? : chỉ thích hợp cho những biểu thức ngắn kiểu như sau đây:
max = ( a > b ) ? a : b;
hoặc:
printf( “The list has %d item%s\n”, n, n == 1 ? “” : “s” );
Hãy nhớ rằng mục tiêu của chúng ta là viết những đoạn mã dễ hiểu, chứ không phải các đoạn mã ngắn gọn.
8. Cẩn thận với dấu =
= và == là 2 toán tử gây nhần lẫn nhất trên C, nhưng bạn có thể tránh gặp nó bằng thói quen viết r-value (biểu thức bên phải phép gán) sang bên trái phép so sánh:
if ( a == 42 ) { … }// Cách viết thông thường.
if ( 42 == a ) { … }// Nên viết thế này.
Và đây là sự khác biệt, khi bạn nhầm…
if ( a = 42 ) { … } // Chạy bình thường, khó tìm ra lỗi
if ( 42 = a ) { … } // Báo lỗi ngay chỗ này
9. Các idiom
Cũng giống như ngôn ngữ tự nhiên, ngôn ngữ lập trình cũng có các idiom (thành ngữ !?), là các cách viết code chính tắc cho các trường hợp thông dụng, tạm hiểu idiom là các chuẩn không bắt buộc nhưng được đa số người dùng tuân theo. Sử dụng các idiom giúp giảm bớt khả năng mắc lỗi đồng thời làm chương trình dễ đọc hơn và nhất là có vẻ “chuyên nghiệp” hơn Sau đây là một số idiom phổ biến:
a. Các idiom cho mảng
Để duyệt qua n phần tử của một mảng và khởi tạo chúng, có các cách viết sau đây:
i = 0;
    while ( i <= n - 1 )
        array[ i++ ] = 1.0;
hoặc
for( i = 0; i < n; )
        array[ i++ ] = 1.0;
hoặc
for( i = n; --i >= 0; )
        array[ i ] = 1.0;
Tất cả những cách viết trên đều đúng, tuy nhiên idiom cho trường hợp này là:
for( i = 0; i < n; ++i )
        array[ i ] = 1.0;
Một lưu ý nhỏ là sự khác biệt giữa i++ và ++i:
  • i++ lấy giá trị của i trước rồi tăng nó lên.
  • ++i tăng giá trị của i rồi lấy giá trị mới.
Do đó đối với các con đếm vòng lặp (for(), while()) nên dùng ++i để tăng tốc độ.
Idiom của vòng lặp duyệt qua các phần tử của một danh sách (list) là
for( p = list; p != NULL; p = p->next )
Đối với container:
vector<string>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
    std::cout << *it;
Đối với các vòng lặp vô hạn, idiom là: for ( ; ; ) hoặc while( 1 )
Khởi tạo danh sách:
struct info
{
    char *name;
    char *job;
    char *address;
};

info *array[] = {
    { "name1", "job1", "add1" },
    { "name1", "job1", "add1" },
    { "name1", "job1", "add1" },
    //...
};
Hàm tìm kiếm tuyến tính:
template <class T>

int find (T obj, T* array, int size, int from = 0)
{
    for(int i = from; i<size; ++i)
        if(array[i] == T) return i;
    return size;
}
Sao chép mảng: Giả sử 2 mảng double *a,*b; thay vì:
for( int i=0; i<n; ++i)
        b[i]=a[i];
ta có thể dùng:
//#include <string.h>
memcpy(b,a,n*sizeof(double));
Cấp phát động cho mảng 2 chiều:
int **pp = new type*[n];
int *p = new type[n*m];
for (int i = 0; i < n; ++i)
    pp[i] = p + i * m;
//...
//use array here
delete[] p;
delete[] pp;

b. Idiom cho lệnh if
Tiếp theo là một idiom dành cho câu lệnh if. Hãy xem đoạn mã loằng ngoằng sau đây làm gì
if ( argc==3 )
        if ( ( fin = fopen(argv[l] , “r” ) ) != NULL )
            if ( ( fout = fopen( argv[2], “w” ) ) != NULL ) {
                while ( ( c = getc( fin ) ) != EOF )
                    putc( c, fout );
                fclose( fin );
                fclose( fout );
            } else
                printf ( “Can’t open output file %s\n”, argv[2] ) ;
        else
            printf( “Can’t open input file %s\n”, argv[l] ) ;
    else
        printf ( “Usage: cp input file outputfile\n” ) ;
Viết lại đoạn mã này theo đúng idiom như sau:
if ( argc != 3 )
        printf ( “Usage: cp input file outputfile\n” ) ;
    else if ( ( fin = fopen( argv[l] , “r” ) ) == NULL )
        printf( “Can’t open input file %s\n”, argv[l] );
    else if ( ( fout = fopen( argv[2], “w” ) ) == NULL )
    {
        printf ( “Can’t open output file %s\n”, argv[2] ) ;
        fclose( fin ) ;
    }
    else
    {
        while ( ( c = getc( fin ) ) != EOF)
            putc( c, fout );
        fclose( fin ) ;
        fclose( fout ) ;
    }
Nguyên tắc khi viết các lệnh if() là đặt các phép toán kiểm tra điều kiện càng gần các hành động tương ứng càng tốt.
c. Idiom cho switch() case:
Xét ví dụ:
switch (c)
    {
    case '-': sign = -1;
    case '+': c = getchar();
    case '.': break;
    case '0': case 'o': default:   if (!isdigit(c)) return 0;
    }
cách viết sau tuy dài nhưng dễ đọc hơn:
switch (c)
    {
    case '-':
        sign = -1;
    case '+':
        c = getchar();
        break;
    case '.':
        break;
    default: case '0': case 'o':
        if (!isdigit(c))
            return 0;
        break;
    }
d.Số 0 trong chương trình
Số 0 thường xuyên xuất hiện trong các chương trình với nhiều ý nghĩa khác nhau. Trình dịch sẽ tự động chuyển số 0 thành kiểu thích hợp. Tuy nhiên nên viết ra một cách tường minh bản chất của số 0 mà chúng ta đang nói đến. Cụ thể, hãy sử dụng ( void* ) 0 hoặc NULL để biểu diễn con trỏ null trong C, sử dụng ‘\0′ cho kí tự null ở cuối mỗi xâu và sử dụng 0.0 cho các số float hoặc double có giá trị không. Đừng viết đoạn mã như sau
p = 0;
name[ i ] = 0;
x = 0;
Hãy viết:
p = NULL;
name[ i ] = ‘\0′;
x = 0.0;
Số 0 nên để dành cho các số nguyên có giá trị bằng không. Tuy nhiên trong C++, 0 (thay vì NULL) lại được sử dụng rộng rãi cho các con trỏ null, điều này không được khuyến khích.
Mọi sự vi phạm đều được cho phép nếu nó giúp cho tối ưu đoạn mã của bạn.
Mục đích chính của các quy tắc này là làm cho mã nguồn dễ đọc hiểu hơn, dễ dàng sửa lỗi và bảo trì, nâng chất lượng chung của mã nguồn. Tuy nhiên, nó sẽ không thể áp dụng đúng với mọi trường hợp cụ thể, và các lập trình viên phải sử dụng mềm dẻo các quy ước này.

Link: http://kithuatlaptrinh.tk/tai-lieu-giao-trinh/phong-cach-lap-trinh-cpp#ixzz1WMB2zkKK

Làm thế nào để học tốt CNTT ở trường đại học?


Tôi vẫn còn nhớ rõ thời điểm này cách đây đúng bốn năm. Khi ấy, tôi và các bạn cùng khoá vừa bước vào giảng đường đại học. Nỗi băn khoăn lớn nhất của tôi vào lúc ấy là câu hỏi trên. Tôi đã từng thấy rất nhiều người tài giỏi xuất thân từ khoa CNNT, nhưng cũng nghe rất nhiều anh chị than thở về việc học ở đây. Phải có điều gì tạo nên sự khác biệt, và tôi luôn thôi thúc bản thân mình tìm ra câu trả lời chính xác nhất.
Trong suốt thời gian ở khoa, tôi quan sát những người học trên mình vài khoá, học hỏi từ các bạn bè, và tự rút tỉa từ các kinh nghiệm bản thân. Qua những điều đã học, tôi nhận ra rằng hoàn toàn có thể học tốt ở khoa CNTT, và điều tạo nên sự khác biệt chính là phương pháp.
Vài hôm trước, có bạn sinh viên khoá dưới hỏi tôi rằng: “Làm sao để học tốt ở khoa CNTT?”
Thật thú vị. Bốn năm đã qua, giờ đây tôi gặp lại câu hỏi trên. Thực tế thì cho đến thời điểm này tôi vẫn chưa tốt nghiệp. Nhưng tôi cảm thấy rằng mình đã có thể tổng hợp những gì biết được, để giải đáp phần nào câu hỏi trên.
Đó chính là động lực khiến tôi phác thảo ra bài viết này.
Vậy thì, bài viết này phục vụ cho ai?
Thứ nhất, tôi muốn truyền đạt những kinh nghiệm của mình cho các bạn sinh viên vừa mới vào trường. Kể cả các bạn sang năm hai cũng có thể tìm thấy những điều bổ ích ở đây. Các bạn còn rất nhiều cơ hội phía trước.
Ngoài ra, các bạn sinh viên năm ba, bốn vẫn có thể cùng tôi chia xẻ những phương pháp được giới thiệu ở đây. Bởi vì, không có gì là quá muộn để bắt đầu. Hy vọng bài viết này có thể giải đáp phần nào những thắc mắc của các bạn.
Cuối cùng, tôi mong rằng bất kỳ ai đang học tập và làm việc ở khoa CNTT cũng có thể tham khảo rồi đóng góp ý kiến cho bài viết. Đây là câu hỏi của mọi người, nên tốt nhất là để mọi người cùng tham gia trả lời. Một điều rất thú vị trong ngành CNTT là ứng với mỗi thắc mắc của một người, luôn tồn tại ít nhất một ai đó có thể giải đáp, thế nhưng vấn đề là hai người có thể tìm thấy được nhau hay không.
Nhưng thật ra, khái niệm học tốt nghĩa là gì?
Chúng ta hãy xét hai sinh viên A và B vừa mới tốt nghiệp. Anh A tốt nghiệp với điểm số tuyệt vời, nhận được rất nhiều bằng khen. Dĩ nhiên, có người sẽ cho rằng anh ta học gạo, rằng anh ta sống chết vì điểm số trong suốt bốn năm rưỡi qua. Trong khi đó, anh B có điểm số không mấy ấn tượng. Anh ấy lý giải rằng thời gian được anh ấy dùng để trui rèn kiến thức chuyên ngành, kể cả những kiến thức bên ngoài phạm vi giảng dạy ở trường, nên anh ấy không quan tâm nhiều đến các kỳ kiểm tra. Dĩ nhiên, cũng có người cho rằng điểm số ấy sẽ khiến anh mất nhiều thời gian hơn đối với nhà tuyển dụng. Thật ra, bạn chỉ cần đạt được thành tích như một trong hai người trên đã là học tốt rồi. Nếu đạt được cả hai, bạn có thể tự hào rằng mình đã học rất tốt. Ngược lại, vì không có được cả hai điều, bạn trông đợi vào tấm bằng tốt nghiệp ĐH sẽ giúp mình đạt được một mục tiêu nào đó. Thế thì bạn đã học bình thường. Cuối cùng, nếu bạn không có được bất kỳ điều nào trong ba điều kể trên, thì lẽ ra bạn cần suy nghĩ về chúng sớm hơn, và đã phải có một hành động nào đó để xoay chuyển tình thế. Bạn đang ở tình trạng báo động!
Tóm lại, nếu không được như anh A hay anh B, bạn đã không học tốt ở khoa CNTT.
3 nguyên tắc quan trọng cần nhớ
Nếu phải đúc kết toàn bộ kinh nghiệm để thành công khi học ở khoa CNTT bằng một từ duy nhất, nhiều người sẽ không ngần ngại trả lời: “học nhóm”. Hoàn toàn chính xác. Ngoài ra, bạn cũng cần biết thêm hai nguyên tắc nữa, đó là “tự đánh giá” và “tự học”.
Những ích lợi của học nhóm :
Học nhóm (group-study) được đề cập rất nhiều ngay từ thời chúng ta còn học phổ thông. Nhưng vào thời điểm đó, học nhóm hay không học nhóm, điều đó không mấy khác biệt. Có khác biệt chăng là ta có nhiều cơ hội để chơi đùa với bạn bè hơn. Nhưng ở môi trường đại học, đây là yếu tốt vô cùng quan trọng. Hầu hết mọi sinh viên chúng ta đều chơi trong ít nhất một nhóm bạn nào đó. Hiểu một cách đơn giản, bạn bè là những người có chung một sở thích, suy nghĩ nào đó khiến họ kết hợp lại với nhau. Từ đó, chúng ta có thể nhận ra trong khoa CNTT có những hình thức kết bạn như sau:
Xét về quê quán, có nhóm Quảng Nam, nhóm Tiền Giang, nhóm Sài Gòn…
Xét về nơi ở, có nhóm Ký Túc Xá, nhóm ở chung phòng trọ,…
Xét về giải trí, có nhóm đá banh FIFA, nhóm đánh War Craft, nhóm bắn Half Life…
Xét về sinh hoạt xã hội, có nhóm Mùa hè xanh, nhóm làm web, nhóm Cán bộ Đoàn…
Ngoài ra, có nhóm những người quen nhau lúc vừa vào đại học, nhóm cầu lông, nhóm văn nghệ, nhóm Linux,…
Tất cả các nhóm trên, nhóm nào cũng có cái hay của riêng nó. Đời sinh viên của bạn cũng nên “nếm trải” qua mùi vị của vài nhóm. Nếu bạn đang ở trong một nhóm nào đó, thì sẽ thật tuyệt vời nếu bạn có thể đưa nhóm mình từ hình thức hiện tại trở thành nhóm những người bạn cùng học tốt ở khoa CNTT (gọi tắt là nhóm học tốt).
Đạt được điểm số cao không phải là một nhiệm vụ bất khả thi
Hỗ trợ nhau học tập sẽ đem lại những lợi ích lớn lao cho mỗi thành viên. Thứ nhất, đây là cách thức hiệu quả nhất để bạn có được điểm số cao trong học tập. Có một số người rất thông minh (theo đánh giá của bản thân họ và của những xung quanh), nhưng thi cử lại rất lận đận. Có một số người rất chăm chỉ, nhưng điểm số cũng không được như ý. Bởi vì họ chưa biết cách học và thi cho thật tốt.
Bí quyết đơn giản nhất để có được điểm cao trong các kỳ thi ở trường đại học là phải “luyện” thật nhiều. Luyện gì ư? Hãy luyện các đề thi. Bạn có thể tìm thấy đề thi các năm trước ở các tiệm photo trong trường. Xem qua chúng và giải các bài trong đó, với phương châm: nhiều hơn, nhanh hơn và chính xác hơn. Nghe qua thì có vẻ dễ dàng và đơn giản quá, nhưng thật ra không có nhiều người có thể làm được.
Nhiều người hăm hở đi tìm các đề thi cũ ngay từ những tuần đầu tiên của học kỳ. Thế rồi, lòng kiên nhẫn của họ sớm bị thử thách vì có quá nhiều đề thi trong đó. Một bộ đề có từ 5 đến 15 đề. Mỗi đề có từ 4 câu hỏi trở lên, nếu là đề thi trắc nghiệm thì còn nhiều hơn nữa. Nên nhớ rằng một học kỳ lý tưởng (nghĩa là không phải trở nợ môn nào) cũng có ít nhất 7 môn học. Bỏ đi những môn lý thuyết thuần tuý, rồi làm một phép nhân đơn giản, cũng dễ thấy rằng một cá nhân không thể nào giải được phân nửa số lượng đề thi đó. Hơn nữa, làm sao người đó chắc chắn rằng những gì mình giải là đúng. Các bộ đề thi đều không có đáp án (nếu có thì cũng không nên tin tưởng hoàn toàn vào chúng). Và bởi vì phải làm ngày làm đêm mà vẫn chưa hết, họ sẽ không có thời gian để hệ thống hoá, rút ra những kỹ thuật giúp làm bài nhanh hơn. Thế đấy, họ đã làm không nhiều, không nhanh và cũng không chính xác. Rồi đến ngày thi, họ có thể bị sốc vì gặp phải một vấn đề hoàn toàn mới lạ, không làm kịp bài vì không “quen tay”, hay làm rồi mà không biết mình sai hay đúng. Đây cũng là một trong những lý do vì sao điểm số ở khoa CNTT thường rất thấp. Nếu bạn chỉ trông cậy vào sự thông minh của mình và trông cậy vào sự rộng lượng của giáo viên chấm thi, tức là bạn đã phó thác kết quả học tập của mình cho sự may rủi.
Thay vì vậy, hãy tập hợp thành những nhóm nhỏ và cùng nhau học thi. Từng người trong nhóm sẽ đảm nhận 2, 3 môn. Đối với từng môn, người đó sẽ chịu trách nhiệm hệ thống lại kiến thức của toàn môn học, nhấn mạnh những điểm quan trọng. Ngoài ra, cũng cần phải giải hết các đề thi, sau đó chọn lựa những bài tinh hoa nhất rồi đề nghị những người còn lại giải qua. Như vậy, bất kỳ người nào trong nhóm cũng có cơ hội giải qua tất cả các dạng bài tập. Hiển nhiên, điều quan trọng là làm quen được càng nhiều dạng bài tập càng tốt, chứ không phải số lượng bài tập đơn thuần. Nhưng điều này khó có thể được thực hiện nếu chỉ có một cá nhân duy nhất, bởi vì không thể phân loại được các dạng bài tập nếu chưa từng giải qua tất cả các bài tập hiện có. Sau đó, những người trong nhóm sẽ trao đổi kết quả với nhau. Điều này sẽ giúp các thành viên biết được mình đã làm đúng hay chưa. Dĩ nhiên, kết quả cuối cùng của nhóm không hẳn đã là kết quả đúng. Nhưng đó chắc chắn là kết quả tốt hơn rất nhiều so với một người. Ngoài ra, cũng phải xét đến yếu tố xác suất. Kết quả của một nhóm 3, 4 người thường cũng là kết quả tốt nhất của 200 người cùng một khoá. Vì vậy, bạn sẽ không sợ rằng điểm thi của mình thấp hơn bất kỳ ai.
Hình thức học thi tốt nhất là mỗi người tự giải đề thi ở nhà rồi gặp nhau ở một số buổi. Trong những buổi này, ngoài việc trao đổi kết quả, các thành viên còn chỉ bảo cho nhau những kỹ thuật đặc biệt giúp tăng tốc, hoặc giảm thiểu sai sót khi làm bài. Tôi và các bạn của tôi thường ghi lại các vấn đề này thành các tài liệu rồi trao đổi với nhau. Một lợi ích không thể không nhắc đến của việc cùng học thi là nó sẽ thúc đẩy các thành viên chăm chỉ hơn. Sự ganh đua, hợp tác sẽ giúp mọi người cảm thấy việc giải một số lượng lớn các bài tập trong một thời gian ngắn đỡ nhàm chán hơn so với khi làm một mình.
Nhiều người hay than thở về điểm số của mình, cho rằng do mình còn lười biếng, do khối lượng kiến thức nhiều quá, do đề thi ở đâu đâu… Có lẽ họ đã quên bài học từ thời phổ thông. Làm sao họ đã thi đậu vào khoa CNTT, nếu không phải vì đã chăm chỉ giải các đề thi đại học đến mức thuần thục? Việc thi cử ở đại học cũng không khác mấy, thế mà họ đã sớm ngủ quên trên chiến thắng. Hãy làm các bài tập trong sách, do giảng viên cho, trong các bộ đề. Và hãy cùng làm với những người bạn của mình. Đó là bí quyết đơn giản để có điểm số cao.
Nhóm học tốt giúp tiếp thu kiến thức hiệu quả hơn. Nếu học tập hơn bốn năm trời ở khoa CNTT mà chỉ có luyện giải bài tập thì thật còn khổ hơn sống dưới địa ngục. Nhưng bạn đừng quá thật vọng. Theo quan sát của tôi, ngay cả những sinh viên đạt được điểm số cao nhất ở khoa CNTT cũng chỉ dành tổng cộng tối đa là 6 tuần trong một học kỳ để tập trung học thi. Mà một học kỳ có đến 15 tuần, cộng thêm 3 đến 4 tuần dành cho thi cử. Ngoài ra còn chưa kể đến khoảng thời gian nghỉ hè và nghỉ Tết. Như vậy, dù cho thi cử có là sự đối phó đối với bạn, thì bạn vẫn còn rất nhiều thời gian để học và làm những gì mà bạn cho rằng thật sự cần thiết.
Ngoài điểm số, ranh giới giữa một sinh viên học tốt và một sinh viên học chưa tốt còn nằm ở chỗ ai biết tận dụng khoảng thời gian rộng rãi này. Một nhóm học tập hoạt động hiệu quả sẽ giúp các thành viên biết làm đúng việc vào đúng thời điểm.
Chẳng hạn, câu hỏi “Tôi nên học ngôn ngữ lập trình nào đây?” là thắc mắc thường thấy nhất của sinh viên năm một, năm hai. Nếu chỉ có một mình, bạn có thể sẽ loay hoay mãi với câu hỏi này, hoặc sự lựa chọn của bạn là không chính xác, hoặc bạn đã học được đúng ngôn ngữ cần thiết những chưa đạt được đến độ sâu kiến thức. Giáo viên hay những sinh viên khoá trên cũng có thể giúp đỡ, nhưng sẽ không hiệu quả bằng bạn bè cùng giúp đỡ lẫn nhau. Bởi vì người hiểu khả năng của bạn nhất chính là bản thân bạn, người thứ hai là người thường xuyên làm việc với bạn. Người giỏi cách mấy nhưng không hiểu về bạn thì khó có thể đưa ra một lời khuyên phù hợp được.
Thực sự thì rất khó để đưa ra một phương pháp cụ thể để hướng dẫn một nhóm đi đến thành công. Có lẽ cách tốt hơn là tôi nêu ra những kinh nghiệm và những nguyên tắc cơ bản.
Thứ nhất, mọi hoạt động phải có mục tiêu rõ ràng.
“Chúng ta sẽ học Java trong học kỳ này” là một mục tiêu. Nhưng chưa rõ ràng. Học Java để làm gì? Làm sao chắc rằng chỉ cần một học kỳ là xong? Học xong rồi thì làm gì tiếp? Học như thế nào đây? Nhiều nhóm bắt đầu với một mục tiêu như trên, nhưng rồi không xác định được những việc làm cụ thể để ràng buộc các thành viên. Thế rồi học kỳ này trôi qua một cách nhanh chóng. Sang học kỳ mới, mục tiêu đổi thành: “Chúng ta sẽ cố gắng học Java trong học kỳ này”. Lại một học kỳ trôi qua. Đến học kỳ kế tiếp, mục tiêu mới sẽ là “Chúng ta sẽ học C# trong học kỳ này”.
“Chúng ta sẽ viết một chương trình tương tự như Address Book của Windows, viết bằng Java”. Đây là một mục tiêu rõ ràng hơn. Do đó, nó có khả năng đưa nhóm đến thành công cao hơn. Nhưng chưa đủ. Cần làm rõ hơn nữa. Cho đến khi nào các thành viên cảm thấy rằng việc học Java cũng thúc ép như việc thi học kỳ, tức là nhóm đã tạo ra được một môi trường hiệu quả cho các thành viên cùng học tập.
Thứ hai, phải kiên trì. Bất kỳ nhóm học tập nào cũng gặp khó khăn, không sớm thì muộn. Có thể là do khó khăn của riêng một cá nhân, chẳng hạn không đủ thời gian, chưa đủ trình độ, không hợp tính,… Cũng có thể cách tổ chức nhóm chưa hiệu quả. Cho dù hoàn cảnh có thật vọng thế nào đi nữa, hãy cố gắng tiến lên. Vì nếu bỏ cuộc, bạn chỉ còn lại hai lựa chọn. Hoặc là tập trung hoàn toàn vào việc học vì điểm số, nó không thú vị lắm đâu. Hoặc là buông xuôi tất cả, nghĩa là cuộc đời sinh viên của bạn đã chấm hết.
Nguyên tắc cuối cùng, nếu một người trong nhóm nản chí, bạn hãy truyền sự kiên nhẫn của mình cho người đó. Đây là lợi ích lớn nhất và cũng là duy nhất mà việc học một mình không thể có được. Edison từng nói: “Nhiều người bỏ cuộc ngay khi họ ở cách sự thành công một khoảng rất ngắn”. Sự động viên, giúp đỡ, ganh đua lẫn nhau trong nhóm tạo nên động lực mạnh mẽ cho các thành viên. Theo kinh nghiệm của riêng tôi, một nhóm học tập xuất phát từ nhóm những người bạn thân thường dễ xây dựng được những giá trị này hơn.
Hãy liên kết lại
Nếu bạn đang lẻ loi và cảm thấy mình học chưa tốt. Hãy tìm những người bạn. Nếu bạn đang lẻ loi nhưng tin rằng mình đang học tốt, bạn vẫn nên tìm những người bạn để có thể học tốt hơn. Hầu như những nhân vật thành công trong ngành CNTT đều có những người bạn cũng thành công không kém, họ đã từng cùng học tập và làm việc với nhau suốt thời tuổi trẻ: Bill Gates và Paul Allen ở Microsoft, Jerry Yang và David Filo ở Yahoo!,…
Một nhóm học tập hiệu quả được đánh giá qua một tiêu chuẩn duy nhất: nhóm ấy có giúp các thành viên hài hoà cả đối nội (học các môn trong trường và có điểm số tốt) lẫn đối ngoại (học những kiến thức vốn rất rộng lớn trong ngành CNTT). Nói cách khác, nhóm ấy có giúp thành viên học tốt hơn hay không.
Nên nhớ rằng, tập hợp những người học tốt lại với nhau không phải là cách để thành lập nhóm học tốt. Ngược lại, nhóm học tốt là nhóm mà nhờ chơi với nhau, những người bạn trong đó trở thành những người học tốt. Người đời thường nói: chọn bạn mà chơi. Tương tự, hãy nói cho tôi biết bạn đang chơi với ai, tôi sẽ cho biết bạn có đang học tốt ở khoa CNTT hay không.
Phải biết tự đánh giá mình
Không ai trong chúng ta lại muốn rằng sau bốn năm học ở đây, trình độ của mình so với lúc mới vào cũng chẳng khác là bao. Những viễn cảnh đen tối ấy hoàn toàn có thể xảy ra nếu bạn không có khả năng tự đánh giá bản thân mình.
Tự đánh giá có nghĩa là biết mình đang ở đâu. Ngay học kỳ đầu tiên, có thể bạn sẽ cảm thấy thua thiệt so với một số bạn bè. Nhưng đừng than thở rằng trước kia (hồi phổ thông), bạn chưa được chuẩn bị về kiến thức tin học cơ bản, chưa từng học qua lập trình, chưa quen đọc sách tiếng Anh. Cũng đừng nản chí nếu bạn chưa có máy vi tính, chưa tiếp xúc với Internet. Đó là những suy nghĩa tiêu cực và sẽ làm giảm sức phấn đấu của bạn. Mọi sinh viên được tuyển vào khoa CNTT đều dựa trên năng lực của họ, hoàn toàn không căn cứ vào điều kiện hay kiến thức chuyên ngành sẵn có. Tất cả được giả định là bắt đầu từ con số 0. Mọi người cùng có một chương trình học, cùng có một lượng thời gian, hoàn toàn bình đẳng như nhau. Nếu bạn chưa có gì, tức là bạn giống như phần đông sinh viên ở đây. Còn nếu bạn đã có sẵn nền tảng về tin học, đấy là một thuận lợi nhất định, nhưng không bảo đảm bạn sẽ học tốt hơn những người không có sự thuận lợi ấy. Xin nhắc lại, hoàn toàn không có sự bất lợi giữa những sinh viên khi mới vào đại học. Dĩ nhiên, ở đây tôi không xét đến những trường hợp đặc biệt khó khăn về tài chính, những bạn sinh viên này thật sự cần sự trợ giúp từ nhiều nguồn khác nhau.
Tự đánh giá còn có nghĩa là biết được bản thân mình cần gì và không cần gì. Một năm học đại cương có thể làm bạn lo lắng không biết mình cần chuẩn bị gì để bước vào chuyên ngành. Đúng là chương trình đại cương không có những môn học mang tính chuẩn bị hoặc định hướng cho sinh viên. Như đã nói, đây là lúc bạn nên cùng với những người xung quanh để hỗ trợ nhau tìm ra hướng đi cho chính mình. Bạn nên tìm hiểu từ sách báo, từ giảng viên, từ những sinh viên khóa trước. Nhưng quan trọng là bạn phải dám đưa ra một quyết định chính xác mình sẽ chọn lựa hướng đi nào. Sau đó hãy cố gắng thực hiện nó, nếu cùng với những người bạn khác thì càng tốt. Có thể vài lần thất bại mới có thể giúp bạn tìm ra được điều mà mình thực sự cần. Trong phạm vi hiểu biết của tôi, đó là cách tốt nhất để thực hiện.
Nhưng quan trọng hơn là biết nhận diện những gì thực sự không cần thiết và gạt hẳn chúng sang một bên. Ngành CNTT có rất nhiều lĩnh vực, muốn chuyên sâu vào một lĩnh vực đòi hỏi rất nhiều thời gian và công sức. Không chỉ riêng sinh viên ở khoa CNTT, mà hầu như rất nhiều bạn trẻ Việt Nam có khuynh hướng ôm đồm mọi thứ, kết cuộc là không tinh thông được thứ nào. Tinh thông ở đây có nghĩa là làm được việc trong lĩnh vực đó, hoặc có thể thích ứng nhanh với lĩnh vực ấy khi cần thiết. Biết nhiều mà chỉ hời hợt thì cũng giống như là không biết gì cả.
Một ví dụ khác, nhiều bạn sinh viên băn khoăn khi nghe nói rằng các trung tập đào tạo lập trình viên quốc tế như Aptech, Informatics, NIIT,… có chương trình đào tạo hiện đại và thực tế hơn rất nhiều so với trường đại học. Trong trường không dạy C/C++/C#, Java, SQL Server, ASP, JSP,… thì làm sao mai mốt đi làm được. Nếu suy nghĩ như vậy tức là bạn đã chưa tự đánh giá đúng trình độ của mình. Bạn đang được đào tạo để trở thành kỹ sư/cử nhân, trong khi những nơi kia đào tạo các kỹ thuật viên. Không có cấp bậc nào là “cao cấp” hơn, bởi vì chúng phục vụ cho những mục đích hoàn toàn khác nhau. Các trung tâm đào tạo bạn cách sử dụng công cụ, còn trường đại học đào tạo bạn suy nghĩ về công cụ và tạo ra công cụ. Dĩ nhiên, bạn phải biết cách sử dụng công cụ trước. Nhưng những kiến thức này được giả định là bạn phải biết và không có môn học cụ thể nào về chúng. Nếu bây giờ bạn chưa biết thì phải tự học để mà biết. Trong trường hợp bạn không thể tự học, mà nhất định phải đi học ở các trung tâm, có thể bạn đã ôm đồm nhiều thứ một lúc. Đó là tình trạng mà báo chí thường than phiền: thầy không ra thầy, thợ không ra thợ.
Ngoài ra, tự đánh giá cũng có nghĩa là biết nhìn nhận mọi sự việc theo đúng bản chất của nó. Bởi vì kiến thức trong ngành CNTT thật rộng lớn mà trình độ của mọi sinh viên khi mới vào trường thì đều chưa cao, nên các sinh viên thường hay bị dao động bởi cái gọi là “nghe nói rằng”. Chẳng hạn:
Nghe nói rằng C++ rất khó nên chưa dám học. Nghe nói rằng Java chạy rất chậm nên chưa muốn học. Nghe nói rằng phần cứng rất “chua”, lại không bảo đảm việc làm trong tương lai nên không muốn quan tâm. Nếu buộc phải học thì học một cách hời hợt.
Thậm chí, nghe nói rằng đề thi cuối kỳ sẽ lấy từ sách này nên đổ xô đi mua cuốn sách ấy. Thật hài hước phải không. Bạn đang học ngành công nghệ thông tin. Thông tin là những gì có thể tăng sự chắc chắn về một vấn đề nào đó. Nhìn sâu xuống dưới, thông tin được thể hiện bằng hai con số: 0 và 1 (không và có). “Nghe nói rằng” là những gì hoàn toàn không chắc chắn. Đừng để chúng điều khiển bạn.
Một biểu hiện quan trọng của tự đánh giá là phải biết lắng nghe và đưa ra ý kiến của mình. Ở khoa CNTT, biểu hiện của người thiếu tự tin là không dám nghe người thực sự am hiểu nói (mà chỉ quan tâm đến những cái “nghe nói rằng”), trong khi biểu hiện của người tự mãn là luôn nhận định đúng hoặc sai ngay khi người khác chưa trình bày xong vấn đề. Ví dụ mẩu đối thoại sau:
A : đoạn mã này có thể được viết bằng Java…
B : không thể nào, bởi vì một chương trình viết bằng Java chạy chậm hơn viết bằng C++ đến 10 lần, phải viết bằng C++.
A (chưa kịp nói) : bởi vì thời gian để thực hiện đoạn mã này chỉ chiếm 10% tổng thời gian thực hiện chương trình nên nó không nhất thiết là nơi cần phải tối ưu hóa tốc độ. Hơn nữa, nó được chạy trên máy chủ có tốc độ nhanh gấp 10 lần so với máy thường. Cuối cùng, đối với đoạn mã này thì dùng Java có thể rút ngắn thời gian viết code và debug hơn so dùng C++ xuống còn phân nửa.
Trong cả hai trường hợp, không biết lắng nghe sẽ làm cho bạn không tiếp thu được kiến thức từ những người khác. Ngược lại, khi đã lắng nghe xong, bạn phải có ý kiến của riêng mình. Một phong cách đáng chán của sinh viên khoa CNTT là không bao giờ phát biểu, dù chỉ là đúng hoặc sai, khi giảng viên hỏi. Tôi còn nhớ một lần thầy giáo hỏi: “Ai cho rằng cách này đúng?”. Có khoảng 5% giơ tay. “Ai cho rằng cách này sai?”. Cũng có khoảng 5% giơ tay, trong đó 2,3% là những người đã giơ tay lần đầu. Hơn 90% còn lại là cả một sự bí hiểm!
Có thể bạn không biết gì cả, hoặc đã biết những không thèm giơ tay vì chúng quá tầm thường. Khi đó, nên nghĩ lại xem bạn có mặt ở lớp học làm gì, bởi vì kiến thức quá cao siêu hoặc quá tầm thường đều cho thấy bạn đã không thích hợp với chúng. Ngược lại, nếu chỉ vì bạn đã đánh giá sai về chúng, thì hãy tự đánh giá lại cho chính xác.
Cuối cùng, tự đánh giá có nghĩa là biết nhận lấy thất bại. Khó có ai học suốt 4 năm trời mà chưa bao giờ bị điểm dưới trung bình, cũng có khi bạn thua kém bạn bè ở chính sở trường của mình, hoặc liên tiếp nhận các thất bại khiến bạn nghi ngờ khả năng của mình. Tôi đã từng học môn lý A1 đến 3 lần mới qua được. Tôi vẫn có nhớ cảm giác chua xót khi bạn bè tung tăng chuẩn bị vào chuyên ngành thì tôi vẫn phải lầm lũi làm luận án “tiến sĩ” về Lý A1. Hay như người bạn của tôi đã từng rớt môn Giáo dục quốc phòng, môn học mà ai-cũng-cho-rằng-không-thể-rớt. Nhưng chúng tôi đều có điểm chung là cảm thấy mạnh mẽ hơn sau những cú ngã tê tái đó.
Khả năng của một người là khái niệm vô hình, chỉ có thể đánh giá qua các kết quả cụ thể. Điều gì quyết định đến kết quả? Đó là phong độ và đẳng cấp của bạn. Chẳng hạn, phong độ trong một ngày thi sẽ ảnh hưởng phần nào đến kết quả bài thi hôm đó. Nhưng phần lớn là do đẳng cấp của bạn trong môn đó. Phong độ có thể thay đổi theo từng ngày, có thể do thời tiết, do người yêu của bạn, do ngày hôm trước có trực tiếp bóng đá,… Nhưng đẳng cấp thì chỉ tiến hoặc lùi sau một thời gian tương đối dài. Trở lại ví dụ trên, có thể trong một ngày xui xẻo, phong độ làm bài thi tệ hại đã xóa sạch đẳng cấp cao vốn có của bạn. Bạn phải nhận điểm thấp. Bạn cũng phải biết đánh giá đúng bản chất của thất bại, bởi vì: Phong độ là nhất thời, đẳng cấp mới là mãi mãi.
Sau đó hãy nhận lấy thất bại, từ đó bạn sẽ biết cần cải thiện phong độ hay đẳng cấp của mình. Còn nếu bạn vẫn ủ rũ chẳng biết làm gì, hoặc ngược lại, bạn cố nghĩ ra những lý do khách quan để không phải nhìn vào thực chất vấn đề, có thể bạn sẽ nhận thêm một kết quả tồi tệ hơn thế nữa.
Tóm lại, bạn cần phải biết mình đang đứng ở đâu và nên đi về hướng nào. Có như vậy bạn mới xác định được mình vừa tiến bộ hay thụt lùi. Tất cả những điều trên hoàn toàn là do bạn tự đánh giá lấy.
Tự học để đi tiếp con đường phía trước
Nếu chỉ xét khoảng thời gian bốn năm (hay nhiều hơn?) ở khoa CNTT, tự học chưa hẳn là yếu quan trọng nhất. Nhưng nếu xét đến cả một sự nghiệp trong thời gian dài, đây là điều phải nêu đầu tiên.
Đặc thù của ngành CNTT là kiến thức thay đổi rất nhanh. Phần cứng, cụ thể là vi xử lý, phát triển theo định luậtMoore, cứ mỗi 18 tháng thì tốc độ CPU tăng gấp đôi. Đây là sự phát triển cực nhanh nếu so với những ngành nghề khác. Nhưng đó cũng chưa phải là lĩnh vực có tốc độ phát triển nhanh nhất. Phần mềm còn phát triển nhanh hơn, bởi vì bạn luôn thấy phần cứng ra đời là để đáp ứng nhu cầu của phần mềm. Internet cũng là một môi trường phát triển chóng mặt.
Bạn làm gì để theo kịp tốc độ đó? Chỉ có thể là tự học.
Nhà trường chỉ có thể hỗ trợ cho bạn phần nền tảng (mặc dù hiện tại nhà trường cũng phải cải cách nhiều mới có thể thực hiện được đầy đủ nhiệm vụ này), còn bạn phải tự hướng dẫn mình đi trên con đường riêng.
Trở lại vấn đề thắc mắc muôn thuở của sinh viên, những kiến thức như C++, Java, ASP, JSP, PHP, Access, SQL Server… là phải tự học.

Ngoài ra, kỹ năng làm việc nhóm, kỹ năng giao tiếp, anh văn chuyên ngành,… cũng phải tự học là chính. Nhà trường chỉ có thể hỗ trợ phần nào.
Nhìn chung, có hai nhóm kiến thức bạn cần phải tự học. Thứ nhất, đó là những kiến thức được giả định là bạn phải biết. Những điều tôi vừa liệt kê ở trên nằm trong nhóm này. Thứ hai, đó là những kiến thức mà không một ai có thể dạy bạn. Không ai khác có thể chỉ rõ từng bước để bạn có thể nghiên cứu ra một công trình khoa học hoàn toàn mới, không ai khác có thể rèn luyện cho bạn kỹ năng lập trình thuần thục, không ai khác có thể giúp bạn mọi việc để dựng nên một công ty tin học,… Người đó chỉ có thể là bạn. Ở giữa hai nhóm trên, đó là những kiến thức mà nhà trường sẽ trang bị cho bạn.
Nhưng phải tự học thế nào? Bạn là người thầy giáo tốt nhất, và sách (cùng với Internet, CD, thư viện…) là phương tiện để người thầy đó truyền đạt kiến thức cho bạn.
Một số người nhìn vào các giáo trình tin học dày cộm và lắc đầu: “Tôi không đọc nổi!”. Đúng vậy, không một ai có thể đọc nổi những cuốn sách đó theo cách mà họ nghĩ: đọc toàn bộ từ đầu đến cuối trong một thời gian ngắn rồi thôi. Trong số lượng nhỏ nhoi những cuốn sách tin học mà tôi đã từng đọc, phải thành thật thừa nhận rằng chưa có cuốn nào mà tôi đọc trọn vẹn cả, tức là đọc không sót đoạn nào, giống như đọc tiểu thuyết vậy. Tôi chỉ đọc những phần mà tôi cảm thấy cần thiết vào thời điểm đó, và ít khi nào tôi đọc ngấu nghiến một cuốn sách. Ngoài ra, tôi cũng thường xuyên phải xem lại những sách mà mình đã đọc qua bởi vì có thể ở những lần đọc sau này, tôi mới hiểu ra được vấn đề mà sách muốn trình bày.
Dĩ nhiên, việc tự học sẽ chỉ hiệu quả nếu tìm được những cuốn sách tốt. Cách đọc sách và tìm sách để đọc là một vấn đề không đơn giản, tôi sẽ tổng hợp lại trong một tài liệu khác, đi kèm với tài liệu này. Chỉ lưu ý rằng bạn đừng theo quán tính của một số người, luôn than thở rằng thiếu thốn tài liệu, thiếu tiền bạc để mua tài liệu nên không thể tự học được. Không, hoàn toàn không phải như vậy, cái mà họ thiếu chính là tinh thần ham học hỏi và một lòng dũng cảm để thừa nhận sự thiếu thốn đó.
Nhớ rõ 3 nguyên tắc trên
Ngay từ bây giờ, bạn hãy tìm những người bạn có cùng suy nghĩ với mình về nguyên tắc:
Group-study.
Self-assessment.
Self-study.

Rồi hãy cùng nhau thực hiện.

5 căn bệnh phổ biến ở khoa CNTT
Học tập ở khoa CNTT không phải là việc dễ dàng. Nếu không cẩn thận, bạn dễ mắc phải các căn bệnh sau đây.
Bệnh than
Đây không phải là căn bệnh từng gieo rắc kinh hoàng cho nước Mỹ, mà là bệnh than thở. Hầu như mọi sinh viên ở khoa CNTT đều mắc bệnh này. Hãy nghe họ than thở những gì:
Than rằng học ở đây chán quá, khó quá, không thiết thực quá. Nhưng họ lại không trả lời được giảng dạy thế nào để họ không chán, không khó, thiết thực hơn. Họ lại thường so sánh với các trường ngoài, trung tâm bên ngoài, và cả nước ngoài. Vậy thì tại sao họ lại ở đây nhỉ?
Than rằng học mấy năm rồi mà thấy chẳng tiến bộ.
Than rằng không biết làm gì khi ra trường. Thế thì họ đã làm những gì khi ở trong trường?
Họ than thở những điều trên từ học kỳ này sang học kỳ khác. Thế hệ sinh viên này đến thế hệ sinh viên khác cũng than thở như vậy.
Bệnh nhát (sợ)
Thường thì sinh viên than thở về một môn học nào đó thì cũng sẽ gặp ngay môn đó. Chẳng hạn, than rằng phần cứng rất “oải” thì y như rằng sẽ gặp đồ án phần cứng. Lúc này thì bệnh than biến chứng trở thành bệnh nhát.
Mắc bệnh nhát thì không dám làm điều gì đang ở ngay trước mắt. Không làm nghĩa là chết, những vẫn không dám làm. Có thể nói, họ thà chết chứ không chịu hy sinh. Chẳng hạn, vừa nghe nói môn học X này là môn “sát thủ” , họ đã buông súng ngay từ tuần lễ đầu tiên của học kỳ. Thế là rớt, họ lại truyền đạt điều trên cho các đàn em yếu bóng vía, và thật tội nghiệp những em này. Bệnh này lây rất nhanh.
Hoặc, có quá nhiều lựa chọn nên cũng không dám chọn và làm một cái nào. Cuối cùng thì loay hoay mãi không biết mình nên chuyên phần cứng hay phần mềm, nên học C++ hay Java. Nếu họ chịu làm điều gì đó thì dù chưa chọn được đúng ý mình, trong trường hợp xấu nhất họ cũng biết được rằng mình không phù hợp với phần cứng, cũng không phù hợp với C++. Bây giờ thì còn Java để thử tiếp.
Bệnh hời hợt
Nhưng nếu bị buộc phải chọn lựa do hoàn cảnh thúc ép, họ sẽ làm một cách hời hợt. Chẳng hạn, nhận phải một đồ án xương xẩu, họ nghĩ thôi thì làm qua loa cho xong rồi học kỳ sau sẽ tìm được cái ngon hơn. Ai chắc rằng sẽ có cái ngon hơn, hay lại phải gặp cái mà họ cứ cho rằng là xương xẩu? Làm qua loa thì mãi sẽ không bao giờ thoát được cái vòng luẩn quẩn đó, nó còn tước mất cơ hội để mình thấy được điều đó thật ra cũng không xưởng xẩu như đã nghĩ.
Bệnh hời hợt ngăn cản ta đạt đến đỉnh cao trong một môn học nào đó. Nếu học một môn học mà việc kết quả cao, thấp, đậu, rớt, chương trình học, bài tập lớn không làm bạn có bất kỳ cảm xúc nào, chỉ đơn giản là đã qua được nó, thì bạn đã đánh mất một cơ hội của mình. Cần nhớ rằng, giáo trình học, giảng viên môn học đó có thể chưa làm bạn hài lòng, nhưng bản thân môn học đó là thực sự cần thiết. Học hời hợt chỉ vì không hợp với giảng viên, điều đó có nên hay không?
Bệnh la lối
Bệnh này thường xuất phát từ bệnh hời hợt, nó cũng tương tự như bệnh than nhưng sự bộc phát rất dữ dội. Sau khi loay hoay mãi trong cái vòng luẩn quẩn trên, họ kết tội cái đồ án đã làm hại họ, bộ môn này đã kìm hãm họ, nhà trường đã không tạo môi trường thuận lợi cho họ. Thế mà, họ không nhìn xem những người khác đã làm gì để không rơi vào tình trạng như họ, hoặc những người khác đã làm gì để vượt qua tình trạng đó.
Bệnh la lối là nguy hiểm nhất. Nó hủy hoại người bệnh một cách tàn khốc. Bệnh này cũng khó chữa nhất, nhất là khi nó đã vào thời kỳ cuối.
Bệnh lười
Bệnh này là nguồn gốc gây ra 4 căn bệnh đã kể trên. Lười biếng tức là đã tự đặt mình vào tình thế bị động.
Không thường xuyên làm bài tập sẽ làm cho kết quả thi thấp, thậm chí bị rớt.
Không chịu đọc sách, không chịu mày mò sẽ làm cho kiến thức nghèo nàn đi.
Và thế là mắc phải bệnh than. Cũng vì lười biếng mà bệnh than chuyển thành bệnh nhát, rồi bệnh hời hợt, rồi bệnh la lối. Bệnh lười lại dễ lây nhất. Mình lười biếng sẽ làm cho bạn của mình bị ảnh hưởng theo. Bạn mình siêng năng thì mình cũng siêng năng hơn.
Tránh xa những căn bệnh trên
Thường xuyên tự chuẩn đoán để biết mình đang mắc phải bệnh gì, rồi tìm cách chữa trị chúng. Nhưng nguyên tắc quan trọng là: phòng bệnh hơn chữa bệnh. Để phòng bệnh, hãy làm như sau:
Luôn suy nghĩ tích cực, đồng thời chuẩn bị những điều bất lợi sắp tới.
Khi chúng đến, đánh giá chúng.
Chấp nhận chúng.
Suy nghĩ tích cực để có thể “hưởng thụ” chúng.
Và tiếp tục như vậy.
Bạn cần có một kế hoạch ngay từ đầu
Việc học tập được hoạch định và tổ chức tốt sẽ giúp ích cho bạn rất nhiều trong suốt thời gian ở khoa CNTT. Cụ thể, bạn cần xây dựng cho mình một kế hoạch học tập, trong đó trình bày những mục tiêu mà bạn phấn đấu đạt được, khả năng của bạn, những việc mà bạn cần làm và thời gian dành cho chúng.
Bản kế hoạch này sẽ giúp bạn có phương hướng rõ ràng trong học tập. Nó chỉ cho bạn biết những thứ bạn cần học ở thời điểm hiện tại, điều gì chưa cần quan tâm ngay vào lúc này, nó còn đưa bạn vào một khuôn khổ để bạn chuyên cần hơn. Thiếu bản kế hoạch, bạn dễ bị rơi vào tình trạng hoang mang, chẳng biết học gì, làm gì ở khoa CNTT.
Đối với những sinh viên có tổ chức, học kỳ bắt đầu từ thời điểm trước đó khoảng hai tuần. Đây là thời điểm họ xây dựng kế hoạch cho học kỳ sắp tới. Ngược lại, đối với những sinh viên chưa có tổ chức, học kỳ mới bắt đầu từ tuần thứ hai hay thứ ba trở đi, thậm chí là tuần thứ bảy (tức là tuần trước khi thi giữa kỳ). Họ không có kế hoạch cho từng môn, để rồi hằng tuần cứ đến lớp rồi về nhà mà không ôn luyện gì cả. Đến lúc gần thi thì mới vắt giò lên cổ mà chạy. Thường thì lúc đó đã quá trễ, kể cả với những người vốn được đánh giá là thông minh nhất, nhưng một người không có tổ chức thì làm sao có thể gọi là thông minh nhỉ?
Kế hoạch và tiến trình công việc phải song hành.
Nguyên tắc cơ bản để lập kế hoạch học tập là các bản kế hoạch của bạn phải phản ánh đúng với hoàn cảnh của bạn, có như thế thì chúng mới mang tính khả thi. Một bản kế hoạch đầy đủ chi tiết, cố định ngay từ đầu, rồi bạn phải theo đó mà làm cho đến hết là không phù hợp với hoàn cảnh học tập của sinh viên. Chúng ta chưa đủ khả năng và kinh nghiệm để làm điều này.
Thay vì vậy, bản kế hoạch chỉ nên bắt đầu với những việc chắc chắn, mà theo đó bạn có thể thực hiện ngay và thực hiện một cách trọn vẹn. Sau đó, dựa vào những gì bạn đã làm, bạn sẽ điều chỉnh và bổ sung lại bản kế hoạch. Tóm lại, có Kế hoạch cũng cần được ghi lại trên giấy, hoặc soạn thảo bằng máy vi tính. Thậm chí, nếu bạn biết dùng Microsoft Project thì càng tốt. Nếu chỉ xác định trong đầu, bạn sẽ quên kế hoạch của mình vào một lúc nào đó, và sẽ không có cơ sở để đánh giá lại những gì mình đã làm. Ngoài ra, việc ngồi xuống, phác thảo ra bản kế hoạch của mình sẽ mang lại cho bạn niềm hưng phấn để bắt đầu với công việc mới.hai quá trình song song ở đây.
Nhưng cẩn thận, đừng dành quá nhiều thời gian chỉ để viết kế hoạch mà không làm gì cả. Phần lớn thời gian của bạn là để thực hiện những gì bạn đã hoạch địch. Đừng làm ngược lại. “Too much scheduling will kill you, if you can’t make up your mind.”
Lời kết
Một điều nữa mà tôi cần nói rõ là tài liệu này được viết dưới góc nhìn của một sinh viên. Tất cả những khó khăn, suy nghĩ, cách giải quyết ở đây đều mang ảnh hưởng trên. Có thể bạn sẽ nghĩ: “Vậy khoa CNTT làm gì trong trường hợp này?” khi đọc qua tài liệu này. Nhưng, điều đó hoàn toàn nằm ngoài phạm vi của một sinh viên, tức là nằm ngoài phạm vi bài viết này. Chúng ta cần phải kiến nghị lên trên khi có một vấn đề bức xúc, nhưng giải quyết những kiến nghị đó không phải là trách nhiệm của chúng ta. Thay vào đó, chúng ta nên tập trung vào những gì mà một sinh viên cần làm.
Tôi hy vọng bạn sẽ tìm được điều gì đó bổ ích từ tài liệu này. Dĩ nhiên, việc nén bốn năm các kinh nghiệm của nhiều thế hệ sinh viên vào trong 20 trang giấy không phải là điều dễ dàng. Hơn nữa, không phải mọi điều tôi trình bày ở đây đều hoàn toàn chính xác, và thậm chí còn rất nhiều điều chính xác đã bị tôi bỏ sót không đưa vào đây.
Nguồn: Forum Khoa CNTT ĐHBK HCM

Link: http://kithuatlaptrinh.tk/tong-quan/lam-the-de-hoc-tot-cntt-o-truong-dai-hoc#ixzz1WM9urnTz