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

Lễ bảo vệ đồ án tốt nghiệp của 114 sinh viên FPT

Lễ bảo vệ đồ án tốt nghiệp của 114 sinh viên FPT

Ngày cập nhật: 27/08/2011 -nguồn: fpt.edu.vn
Trong hai ngày 25 và 26/8, 114 sinh viên ngành kỹ thuật phần mềm ĐH FPT đã tham gia bảo vệ đồ án tốt nghiệp tại tòa nhà Detech. Với nhiều đề tài khá mới mẻ và hấp dẫn được đánh giá tốt, các sinh viên đã có được thành quả xứng đáng cho những tháng ngày miệt mài chuẩn bị và hoàn thành đồ án.
Niềm vui của sinh viên FPT trong Lễ Bảo vệ đồ án tốt nghiệp

Đây là lần thứ ba ĐH FPT tổ chức Lễ bảo vệ đồ án tốt nghiệp cho các sinh viên chuyên ngành Kỹ thuật phần mềm, 114 sinh viên được chia thành 23 nhóm, tham gia bảo vệ tại 3 hội đồng. Các dự án của sinh viên chia làm hai chuyên ngành hẹp là IS (Information System- Hệ thống thông tin) và ES (Embeded System- Hệ thống nhúng). Trong đợt bảo vệ này, có duy nhất một đề tài thuộc chuyên ngành ES với tên gọi Wireless Module and Application (Ứng dụng mạng không dây). Các đề tài khá phong phú ở nhiều lĩnh vực: Quản lý tài liệu dự án Capstone, Nhóm mua cho tập đoàn FPT, Phát triển website chia sẻ sách, Hướng dẫn du lịch bằng điện thoại di động, Hệ thống quản lý trạm thu phí đường bộ... được các em đầu tư nghiên cứu, hoàn thiện nghiêm túc.
Tham gia bảo vệ đồ án, các sinh viên có cơ hội phát huy kĩ năng làm việc nhóm và thuyết trình

Tại đây, mỗi nhóm sinh viên có từ 60 đến 90 phút trình bày, giới thiệu, demo và phản biện những câu hỏi của Hội đồng bảo vệ đồ án. Tuy hồi hộp và lo lắng trước giờ bảo vệ nhưng đa số sinh viên đều cảm thấy rất tự tin và mong chờ đến lượt bảo vệ của nhóm mình.
Đây cũng là dịp để các nhóm trình bày, giới thiệu nhiều ý tưởng, sản phẩm mới có ý nghĩa
Vượt qua ý nghĩa của một kì thi lớn, Lễ Bảo vệ tốt nghiệp trở thành nơi sinh viên thể hiện kiến thức tích lũy trong thời gian học tập ở ĐH FPT thông qua nhiều ý tưởng, dự án mới lạ, có tính thực tiễn cao. Sinh viên Nguyễn Công Danh, MSSV 00739 chia sẻ: “Ý tưởng đồ án của chúng em xuất phát từ hiện trạng nền kinh tế đang có nhiều biến chuyển, nhu cầu mua hàng với giá ưu đãi của người tiêu dùng ngày càng tăng cao, đặc biệt là Tập đoàn FPT với lượng nhân sự rất đông. Ngoài ra, chiến lược One FPT được triển khai gần đây phát huy tính tập trung các công ty thành viên của tập đoàn, cả nhóm nhận thức rằng giải pháp kinh tế “mua chung” chắc sẽ thu hút được quan tâm của nhiều đơn vị. Hơn nữa, TGĐ Tập đoàn FPT Trương Đình Anh đã xem xét ý tưởng này và hứa hẹn sẽ đầu tư hiện thực hóa nếu đồ án có tính ứng dụng cao; điều đó tạo động lực cho chúng em cố gắng rất nhiều để hoàn thiện đồ án tốt nhất”. Group Purchasing for FPT Corporation (Nhóm mua cho tập đoàn FPT) là một trong những dự án được Hội đồng bảo vệ đánh giá có khả năng ứng dụng thực tiễn trong tương lai.
Thành viên trong Hội đồng Bảo vệ đang đặt ra những câu hỏi chất vấn sinh viên
Cũng trong 2 ngày bảo vệ đồ án tốt nghiệp, ĐH FPT đã ghi nhận sự xuất hiện của nhiều công ty, doanh nghiệp như: Công ty Synergix (Singapore), Gameloft Việt Nam, eXo Platform Sea và đại diện một số công ty nơi có các sinh viên FPT từng thực tập, đang làm việc đến cổ vũ những “cán bộ trẻ” của mình. Qua việc tham dự, đại diện các doanh nghiệp có thể đánh giá phần nào về tác phong, khả năng chuyên môn của sinh viên FPT, đặc biệt cơ hội việc làm cho các bạn, những sinh viên có đủ tố chất đáp ứng yêu cầu nhân sự mới ở những vị trí khác nhau đã lọt vào “tầm ngắm” của các nhà tuyển dụng.
Các bậc phụ huynh có mặt trong thời khắc quan trọng của mỗi sinh viên, tiếp thêm sức mạnh tinh thần và sẻ chia niềm vui cùng các em.
Đợt bảo vệ còn là dịp để các bậc phụ huynh, người thân, gia đình của sinh viên gặp gỡ và chứng kiến được thành quả của con em mình sau thời gian phấn đấu, nỗ lực trong học tập. Mọi người đều muốn có mặt để động viên, khích lệ tinh thần, tiếp thêm niềm tin cho các sinh viên vào giờ khắc quan trọng. Cô Toán Thị Hương, mẹ em Lê Tố Trang xúc động tâm sự: “Ngày hôm nay, cả cô và chú đều đã thu xếp công việc ở cơ quan để đến tham dự buổi bảo vệ đồ án của Trang, thời điểm đánh dấu sự cố gắng của em đã có kết quả. Nỗi lòng của cha mẹ thật hạnh phúc, tự hào khi thấy con gái mình đã trưởng thành hơn sau suốt quá trình học tập, rèn luyện; nhìn con thuyết trình dõng dạc, phản biện nhanh nhạy, chúng tôi cũng cảm thấy bớt đi sự lo lắng khi em sắp bước sang một trang đời mới đòi hỏi tính độc lập nhiều hơn trong cuộc sống”. Nhiều vị phụ huynh cũng chia sẻ thêm, trong quá trình thực hiện đồ án, các sinh viên thường xuyên “trưng cầu dân ý” ở gia đình, tiếp thu những ý kiến đóng góp của thế hệ trước để hoàn thiện đồ án một cách chân thực, khách quan và sát với thực tiễn nhất.
Kết thúc Lễ bảo vệ đồ án tốt nghiệp, sinh viên chuẩn bị hành tranh tiếp tục phấn đấu trên một chặng đường mới với nhiều cơ hội rộng mở.
Kết thúc 2 ngày bảo vệ đồ án, sinh viên dường như cảm thấy nhẹ nhõm, thoải mái và tương đối hài lòng với sản phẩm của nhóm mình. Nhận định tổng quan của thầy Nguyễn Trường Long – Trưởng Ban Đào tạo ĐH FPT sau Lễ Bảo vệ: “Trong bất cứ một tập thể, một cuộc thi cũng như một lễ bảo vệ đồ án, ắt hẳn sẽ có cái được và cái chưa được, có đồ án tốt và đồ án chưa tốt; đó là lẽ hết sức bình thường và dễ hiểu. Song, điều các em thu nhận được ở đây là cách thức vận hành nhóm, phương pháp triển khai công việc, cùng trao đổi nhiều ý tưởng mới giữa các nhóm với nhau, trong đó nhiều đồ án có khả năng phát triển khá tốt. Hội đồng đánh giá cao tinh thần, thái độ làm việc của sinh viên, cũng như góp ý thẳng thắn về những thiếu sót, hạn chế trong đồ án để các em hoàn thiện dần trong tương lai. Sau khi kết thúc Lễ bảo vệ đồ án tốt nghiệp này, nhà trường yên tâm rằng sinh viên FPT đã có thêm bản lĩnh và sự tự tin để chuẩn bị trở thành những tân kĩ sư CNTT.”
Một số hình ảnh tại Lễ bảo vệ đồ án tốt nghiệp:

Diện mạo của các sinh viên trong Lễ bảo vệ đồ án chững chạc hơn


Phong thái tự tin thể hiện lúc thuyết trình, bảo vệ sản phẩm


Sinh viên phản biện trước những câu hỏi “hóc búa”của Hội đồng bảo vệ


Niềm tự hào, hạnh phúc của gia đình sinh viên trong khoảnh khắc chứng kiến thành quả các em đạt được sau những tháng ngày phấn đấu.


Bạn bè, người thân sinh viên có mặt sớm tại Lễ bảo vệ tốt nghiệp, trong số đó có nhiều sinh viên FPT khóa dưới tham dự để đúc rút kinh nghiệm cho lần bảo vệ sắp tới của mình


Chúc mừng con đã bảo vệ thành công!


Nụ cười tươi tắn luôn thường trực trên khuôn mặt của những chàng trai lịch lãm trong Lễ bảo vệ đồ án


Sự cố gắng miệt mài của thầy và trò đã có kết quả xứng đáng trong ngày hôm nay.

Hà Phương
Số lượt đọc:231-Cập nhật gần nhất:27/08/2011