PDA

View Full Version : Bạn có 5 thói quen lập trình tốt không?



zmt264
07-03-2009, 23:40
Nguồn:
http://www.ohisee.com/dd/showthread.php?tid=180

Thói quen 1:
Nên đặt tên là tiếng Anh và có ý nghĩa, tránh tên vô nghĩa như là a, d. Tất nhiên đôi khi đặt tên biến là i (trong vòng lặp for chẳng hạn) lại rõ nghĩa hơn là đặt là index hay count, hay tên dài loằng ngoằng)

Thói quen 2:
Tránh code 1 hàm quá dài, hàm nên ngắn gọn (trong 1 trang là vừa) và tập trung vào 1 chức năng nào đó

Thói quen 3:
Comment code, viết tài liệu cho code, nhấn mạnh vào những chỗ có thể khó hiểu hoặc gây nhầm lẫn. Tốt nhất là kết hợp với việc viết lại code (refactoring) cho code hiệu quả và dễ đọc hơn. Tôi nhấn mạnh là việc viết lại code cho dễ hiểu nhiều khi còn có tác dụng tốt hơn cả comment. Comment nên trả lời câu hỏi why, chứ không phải câu hỏi how, do đó comment quá nhiều, kể cả những câu như : a = 5;// gán a bằng 5, là thừa thải (thay vào đó nên giải thích tại sai a lại bằng 5 chứ không phải là 6, hay -5, tốt hơn nữa nên đặt 1 hằng có ý nghĩa thay cho số 5.

Thói quen 4:
Bắt lỗi đầy đủ, trong C thì ta không có cơ chế try catch, nhưng trong Java, Javascript, C#, C++ đều cung cấp cơ chế này. Và dù cho không có cơ chế try catch thì cũng nên tự bắt lỗi

Thói quen 5:
ĐỪNG BAO GIỜ copy và paste code. David Copy Paste không bao giờ được khuyến khích khi code cả. Một số học sinh có thể hiểu nhầm câu vừa rồi có là đừng copy bài của người khác. Tất nhiên là không nên làm thế. Nhưng câu trên có ý nghĩa khác. Đó là ví dụ khi ta viết nhiều câu lệnh giống nhau, thì không nên copy paste rồi sửa đi 1 chút, mà nên thay bằng vòng lặp hoặc là bằng hàm có tham số.

xelnaga
08-03-2009, 01:39
cái thói quen thứ 5 là copy paste code của người khác hay của chính mình :-?

Hok bik zì
08-03-2009, 09:22
Mỗi khi làm một project nào đó, em thường tạo ra vài chục cái "template project" --> làm sai quá nhiều thì bỏ, chỉ cut lấy những đoạn code tốt nhất paste vào "primary project" lol

Sau mỗi project lại lọc lấy những hàm có ứng dụng sau này, cho vào những file riêng và lưu trữ --> em gọi là "personal library" lol
Để ở dạng mã nguồn cho linh động, bạn bè cần thì dịch ra static hoặc share lib để cung cấp chứ ko đưa mã nguồn :w00t:

azlazco
08-03-2009, 09:37
Bây giờ thì phải nhanh và có thể tái sử dụng :D hehe Công việc yêu cầu vậy mà :D

Alien
08-03-2009, 10:00
Điều 1 và 3 không hẳn đúng hoàn toàn, 1 đoạn code chú thích đầy đủ và đặt tên biến dài ngoằng chưa chắc đã dễ đọc hơn 1 đoạn code ngược lại.

zmt264
08-03-2009, 12:03
cái thói quen thứ 5 là copy paste code của người khác hay của chính mình :-?

Theo mình hiểu thì là cả 2.

Không nên copy code người khác, mà nên dùng thư viện của người khác. Ví dụ không nên copy các đoạn javascript tạo hiệu ứng, mà nên dùng các thư viện như JQuery chẳng hạn. Cũng không nên copy code của chính mình, mà nên dùng vòng lặp hay các hàm, thậm chí các thư viện do chính mình tạo ra (nếu là 1 dự án lớn)

[=========> Bổ sung bài viết <=========]


Điều 1 và 3 không hẳn đúng hoàn toàn, 1 đoạn code chú thích đầy đủ và đặt tên biến dài ngoằng chưa chắc đã dễ đọc hơn 1 đoạn code ngược lại.

Tôi tóm tắt nên chưa rõ ý, trong bài gốc người ta viết rất rõ trường hợp bạn nêu. Vì câu comment của bạn nên tôi đã sửa lại bài viết đầu tiên của mình cho rõ ý hơn.

[=========> Bổ sung bài viết <=========]


Mỗi khi làm một project nào đó, em thường tạo ra vài chục cái "template project" --> làm sai quá nhiều thì bỏ, chỉ cut lấy những đoạn code tốt nhất paste vào "primary project" lol

Sau mỗi project lại lọc lấy những hàm có ứng dụng sau này, cho vào những file riêng và lưu trữ --> em gọi là "personal library" lol
Để ở dạng mã nguồn cho linh động, bạn bè cần thì dịch ra static hoặc share lib để cung cấp chứ ko đưa mã nguồn :w00t:

em code C++ hay cái gì vậy?

dummiesask
09-03-2009, 10:14
ddth toàn pro nhỉ :D

Hok bik zì
09-03-2009, 10:21
em code C++ hay cái gì vậy?

Hiện giờ em chủ yếu code C/C++ (STL, WinAPI, MFC). Đang tập tành thêm PHP :emlaugh:

dinhanhency
09-03-2009, 10:22
ddth toàn pro nhỉ :D

Chú có ý gì? Chú đừng có mà vơ cả nắm nhé.

mysmile
10-03-2009, 02:54
Mọi ngườ ơi vào mục phần mềm giúp mình vụ LHT cái!

zmt264
10-03-2009, 13:32
Hiện giờ em chủ yếu code C/C++ (STL, WinAPI, MFC). Đang tập tành thêm PHP :emlaugh:

Em là admin của congdongcviet à :D , trao đổi link với ohisee đi :D (PR 4, Alexa 1.2 tr)

[=========> Bổ sung bài viết <=========]


Mọi ngườ ơi vào mục phần mềm giúp mình vụ LHT cái!

Bó tay :( , cậu sinh năm 9x à?

dummiesask
10-03-2009, 16:22
Chú có ý gì? Chú đừng có mà vơ cả nắm nhé.

Vậy thôi, em không vơ bác nữa, chắc bác không phải coder hả? :D

Hok bik zì
11-03-2009, 19:33
Em là admin của congdongcviet à :D , trao đổi link với ohisee đi :D (PR 4, Alexa 1.2 tr)


í anh hiểu nhầm rồi ! :D Em chỉ là mem bên đó thôi, thấy 4rum hữu ích cho mọi người thì quảng cáo tí :D

trannampro
23-06-2009, 06:49
Viết làm sao cho mình hiểu là được rồi. Nếu là mã nguồn mở thì viết dễ hiểu. Chứ làm độc lập cho mình thì càng khó hiểu càng tốt he he!

zmt264
01-07-2009, 20:12
làm độc lập cho mình thì càng khó hiểu càng tốt he he!

Sao lại thế hả bạn Web Cu A To ?

luat82
01-07-2009, 20:19
Bà con hàng xóm ơi tui đang học lập trình, mà sao tui lại không chịu khó học bài(cảm thấy hơi chán chán), không có kiến thức thì sau này làm việc gì đây. ai mạnh dạn giúp đỡ tui với tui cám ơn nhiều lắm

luat82
06-07-2009, 00:43
Trời đất sao không có ai trả lời tui vậy, tui hỏi thật lòng mà!!

happylot
06-07-2009, 09:29
chẳng ai có thể giúp bạn, ngoài chính bạn. Lời khuyên thì mình cũng chả có gì google nhiều lắm. Tự học, nó mới ngấm vào đầu được!

zmt264
15-07-2009, 19:42
Trời đất sao không có ai trả lời tui vậy, tui hỏi thật lòng mà!!

Nếu mà u là girl + xinh + sinh năm 9x thì có nhiều người sẵn sàng giúp lắm :D
Còn nếu là boy 82 thì chắc phải nhờ Mr Gu Gồ, hoặc bỏ xiền ra học rồi :)

nguoihp
27-07-2009, 19:50
Viết làm sao cho mình hiểu là được rồi. Nếu là mã nguồn mở thì viết dễ hiểu. Chứ làm độc lập cho mình thì càng khó hiểu càng tốt he he!

Bạn pro quá. Một mục tiêu quan trọng trong việc phát triển phần mềm là có thể sử dụng lại. Bạn viết khó hiểu thì không đảm bảo một thời gian sau đọc lại code bạn có thể hiểu code của chính mình đâu:w00t:

H.A_mylove
27-07-2009, 20:41
Đọc các bài mấy bác viết mà em cảm thấy lâu j em lập trình gà quá, mong các bác chỉ giáo nhìu thêm ,thank.

TranTu_An
27-07-2009, 21:25
Thói sấu nhất của mình là không rút gọn được hàm( tối ưu).Đang cố gắng sửa

khzaof
27-07-2009, 21:56
mình vẫn đang trong giai đoạn copy --> paste :D

trumdkny
28-07-2009, 15:29
Bạn pro quá. Một mục tiêu quan trọng trong việc phát triển phần mềm là có thể sử dụng lại. Bạn viết khó hiểu thì không đảm bảo một thời gian sau đọc lại code bạn có thể hiểu code của chính mình đâu:w00t:

pro này đã bước qua giai đọan viết code sáng rùi .
giai đoạn đầu ai cũng cố gắng viết code thật sáng để ai cũng có thể hiểu nhưng khi cao thủ rùi thì lại cố găng viết code thật là tối để không ai hiểu được . đó là cách bảo vệ code hiệu quả nhất

[=========> Bổ sung bài viết <=========]


Bà con hàng xóm ơi tui đang học lập trình, mà sao tui lại không chịu khó học bài(cảm thấy hơi chán chán), không có kiến thức thì sau này làm việc gì đây. ai mạnh dạn giúp đỡ tui với tui cám ơn nhiều lắm

cách tốt nhất là bạn nên đổi nghề , kéo dài thêm chỉ làm khổ bạn thân mình , làm thui chột tài năng của bạn , lãng phí công sức

mo dung phuc
29-07-2009, 01:03
@trumdkny: bảo vệ code kiểu gì thế bác??? code theo team thì làm thế thì chết, mà code cho mình thì bảo vệ làm gì, không lẽ code xong public ra cho bọn nó nhìn code mà sợ :)) (có khi mình nhìn lại còn sợ hơn ý chứ, đến lúc phải bảo trì hay upgrade lại ngất ra đấy thì ốm đòn :P)

kangoo1707
12-09-2009, 01:28
Viết hàm ngắn, dài cũng còn tùy

1.Viết hàm ngắn -> chia nhỏ ra để gọi nhiều lần -> tốc độ chương trình giảm đáng kể (có thể cải thiện bằng inline nhưng không phải lúc nào cũng dc, và dùng inline nhiều sẽ làm tăng kích thước mã)
2.Viết hàm ngắn nên các khối dữ liệu bị phân mảnh -> cache chậm hơn là 1 hàm duy nhất với các khối bộ nhớ dc thao tác liền nhau.
3.Các thao tác với bộ nhớ động nên nằm trong 1 hàm để dễ xử lý, tránh rò rỉ bộ nhớ
4.Viết hàm dài -> ít gọi, theo kiểu "vài hàm cho tất cả" -> tốc độ nhanh hơn do không phải chép tham số, lưu stack và các biến cục bộ
5.Viết hàm dài -> nhìn mù con mắt -> đương nhiên là khó bảo trì hơn

--->Viết hàm ngắn hay dài thì tùy vào mục tiêu cần nhắm tới(nhanh hoặc là gọn, dễ hiểu), ko nên xem đây là một thói quen, càng ko thể nói ngắn tốt hay dài tốt

Bắt lỗi còn làm chương trình chạy chậm nữa. Hạn chế dc thì cứ hạn chế, chỉ nên bắt lỗi ở những chỗ thường có lỗi. Với lại code có bắt lỗi tuy dễ bảo trì, debug nhưng khó nhìn, nhất là khi có nhiều khối try..catch lồng vào nhau

ngọa hổ
13-09-2009, 17:15
copy của mình cho đỡ phải viết lại có -5 điểm không
mỗi dòng code là vài dòng comment có +3 điểm không
em thì không có thói quen comment nhiều, cái nào mà khó nhớ thì viết vào cho dễ, không thì thôi.

à mà chia hàm quá nhiều thì gây rối, em chả thích, kiểu này em nhiều thói quen xấu quá.

songpham
20-10-2009, 07:20
Viết hàm ngắn, dài cũng còn tùy

1.Viết hàm ngắn -> chia nhỏ ra để gọi nhiều lần -> tốc độ chương trình giảm đáng kể (có thể cải thiện bằng inline nhưng không phải lúc nào cũng dc, và dùng inline nhiều sẽ làm tăng kích thước mã)
2.Viết hàm ngắn nên các khối dữ liệu bị phân mảnh -> cache chậm hơn là 1 hàm duy nhất với các khối bộ nhớ dc thao tác liền nhau.
3.Các thao tác với bộ nhớ động nên nằm trong 1 hàm để dễ xử lý, tránh rò rỉ bộ nhớ
4.Viết hàm dài -> ít gọi, theo kiểu "vài hàm cho tất cả" -> tốc độ nhanh hơn do không phải chép tham số, lưu stack và các biến cục bộ
5.Viết hàm dài -> nhìn mù con mắt -> đương nhiên là khó bảo trì hơn

--->Viết hàm ngắn hay dài thì tùy vào mục tiêu cần nhắm tới(nhanh hoặc là gọn, dễ hiểu), ko nên xem đây là một thói quen, càng ko thể nói ngắn tốt hay dài tốt

Bắt lỗi còn làm chương trình chạy chậm nữa. Hạn chế dc thì cứ hạn chế, chỉ nên bắt lỗi ở những chỗ thường có lỗi. Với lại code có bắt lỗi tuy dễ bảo trì, debug nhưng khó nhìn, nhất là khi có nhiều khối try..catch lồng vào nhau


Đúng rồi , hàm dài viết xong thì vui lắm , vì hoàn thành được , nhưng mai mốt đọc lại 1 là chả bík jì , 2 là cũng lười ! Cứ chia ra các hàm ngắn , gọi vào là xong, mai mốt đọc đọc cách sử dụng hàm thôy .

kangoo1707
20-10-2009, 08:34
comment đây đủ từng khối trong hàm thì hàm ngắn với dài cũng dễ đọc như nhau thôi.

Ỉn con
27-10-2009, 21:19
hiz, hiện thời em đang rất ngu về mấy cái thuật toán pascal
cho em hỏi là làm thế nào để có thể chuyển đổi từ toán sang tin học được?
nghĩa là làm sao để có cách nghĩ trong tin giống như trong toán ấy :|

phungtam65
27-10-2009, 22:07
mấy bác nói gì không hiễu gì hết.

[=========> Bổ sung bài viết <=========]

mấy bác nói gì không hiể gi hết

chick chick
28-12-2009, 19:07
điểm của em: -1+2-3+4-5=-3, thế là tốt hay xấu ạ?

tori.vn
25-02-2010, 13:06
Mỗi người có một cách có khi giống nhau, nói chung là cảm thấy nhanh tiện, hiệu quả đối với mình là được

lastcreate
25-02-2010, 20:00
Xem trong bình chọn thì thấy người giỏi nhiều hơn người dốt ha :D

Kỳ Nam
26-02-2010, 15:45
hên quá tui chẳng bị dính thói quen lập trình tốt nào hết

sẵn tiện quăng coi cho dui 1 đoạn code tui đang đụng chạm tới , để chứng tỏ trình độ cùn của mình

bool CInputMethodService::OnKeyDown(const uint Key) {
if (Suspended)
return false;

bool Cancel = false;
ReplaceKeyByNone = false;

switch (Key) {
case VK_LCONTROL:
case VK_RCONTROL:
KeyModifiers = (MOD) (KeyModifiers | MOD_Control);
break;

case VK_LSHIFT:
case VK_RSHIFT:
KeyModifiers = (MOD) (KeyModifiers | MOD_Shift);
break;

case VK_LMENU:
case VK_RMENU:
KeyModifiers = (MOD) (KeyModifiers | MOD_Alt);
break;

case VK_LWIN:
case VK_RWIN:
KeyModifiers = (MOD) (KeyModifiers | MOD_Win);
break;

default:
Cancel = CheckHotKeys(Key);

if (KeyModifiers != 0 && KeyModifiers != MOD_Shift) {
DontCheckHotKeysOnKeyUp = true;
Commit();
} else //if (!Cancel & (_Enabled | BoGo->GoTatKhiTatGTV) & Enabled2) {
{
try {
if (Key == VK_BACK) {
if (BoGo->TatCaKT(false).length() > 0) {
Cancel = BoGo->Backspace();
UpdatePreeditText();
Cancel = true;
if (BoGo->TatCaKT(false).length() == 0) {
ibus_engine_hide_preedit_text(engine);
}
}
if (_Suggestion) {
ShowSuggestion();
}
} else if (Key == VK_SPACE) {

if (BoGo->HasData) {
Cancel = BoGo->KetThucTu(L' ');
if (EnableMouseHook) {
UpdatePreeditText();
} else {
if (!Cancel)
Commit();
else
UpdatePreeditText();
}
Cancel = true;
}

if (_Suggestion) {
ShowSuggestion();
}
} else if ((Key == VK_RETURN) | (Key == VK_TAB) | (Key == VK_ESCAPE)) {
// if (ACW->Visible())
// Clear();
// else {
if (BoGo->HasData) {
Cancel = BoGo->KetThucTu(0);
if (!Cancel)
Commit();
else {
UpdatePreeditText();
Cancel = true;
}
}
//
// }
} else if (Key == IBUS_Up) {
if (_Suggestion && SuggestionWindowHookUpDownKey && ACW->Visible()) {
ACW->MoveUp();
Cancel = true;
} else {
Clear();
}
} else if (Key == IBUS_Down) {
if (_Suggestion && SuggestionWindowHookUpDownKey && ACW->Visible()) {
ACW->MoveDown();
Cancel = true;
} else {
Clear();
}
}

// else if ((Key >= VK_PRIOR) & (Key <= VK_DOWN)) {
// if (_Suggestion && ACW->Visible()) {
// if (SuggestionWindowHookUpDownKey || (Key != VK_DOWN && Key != VK_DOWN)) {
// Cancel = ACW->ProcessNavigateKeys(WParam, Key);
// }
// if (!Cancel) {
// Clear();
// }
// } else {
// Clear();
// }
// } else if ((Key >= VK_F1) & (Key <= VK_F12)) {
// if (_Suggestion && ACW->Visible()) {
// int Index = Key - VK_F1;
// if ((KeyboardState[VK_SHIFT] & KeyState::Down) != 0) {
// Index += 12;
// }
// if (AC->Results.size() > (size_t) ACW->GetItemIndex(Index)) {
// DoSuggestion(ACW->GetItemIndex(Index));
// Cancel = true;
// }
// else {
// Clear();
// }
// } else {
// Clear();
// }
// }
else //VK.D0 To VK.Z, VK.Oem1 To VK.Oem8
{
if ((Key >= IBUS_space && Key <= IBUS_asciitilde)) {
Cancel = BoGo->OnChar((wchar_t) (Key));
UpdatePreeditText();
Cancel = true;
if (_Suggestion) {
ShowSuggestion();
}
} else {
// if(EnableMouseHook){
//
// }
Commit();
// IsNumpad = (Key >= VK_NUMPAD0 && Key <= VK_NUMPAD9);
}
}
} catch (exception* ex) {
// OnException(ex);
}
}
// if (!Debug.Empty())
// CallBoGoDebug();
break;
}

return Cancel;
}

baoquocmt159
27-02-2010, 17:27
tuyet voi.rat la cun

tesulakata
30-03-2010, 18:18
Xin lỗi. Mình muốn hiểu đoạn code trên
AI giúp mình được hẻm
^^!

anh2604
02-04-2010, 12:09
theo e mục copy past tùy từng trường hợp thoy. Nếu 2 project khác nhau nhưng có 1 đoạn code nào đó gần giống nhau, thì copy past là nhanh nhất, nhưng đó là đối với người đã thành thạo thì copy past hok hề hấn j, bạn mới học thì hok nên copy past, vì gõ lại sẽ làm bạn tiếp thu cặn kẽ hơn của vấn đề.

Tadius.ffx
11-04-2010, 01:36
1.Không nên nhảy vào code ngay, hãy suy nghĩ kỹ về bài toán mình cần giải,
cần những kiến thức gì, tổ chức cấu trúc dữ liệu ra sao cho hợp lý và sau đó tìm hoặc viết các giải thuật liên quan. Nói chung bước này là phân tích thiết kế chi tiết. Nó sẽ giúp bạn tiết kiệm rất nhiều thời gian đó.

2.Comment code của bạn càng chi tiết càng tốt. Sau này còn biết chỗ nào cần sửa và sửa thế nào. Làm tốt sẽ tiết kiệm thời gian debug chương trình và sau này nếu dùng lại code đó cho project khác bạn cũng biết nó làm những công việc gì. Đầu của lập trình viên là nhớ và nghĩ giải thuật, chứ không phải nhớ từng dòng code một. Thế nên lập trình viên không có ai là người học thuộc lòng code cả

3.Viết từ những module nhỏ đến phức tạp.Các module (hàm, thủ tục ,lớp) không bị phụ thuộc hay có lời gọi đến bất kỳ các module nào khác thì viết trước.
Và viết xong nên kiểm thử ngay xem nó có hoạt động chính xác như mong muốn hay không.

4.Viết sao cho có tính mở. Tức là sau này gặp các bài toán tương tự , bạn có thể sử dụng lại một phần các module đã viết trước đó. Rất tiết kiệm thời gian.Có thể chỉ cần sửa 1 vài dòng code hoặc tốt hơn nữa là copy and paste.

5.Nên tìm kiếm trên mạng và tham khảo các code demo. Nó giúp ta có tư tưởng và phương hướng. "Hãy đứng trên vai người khổng lồ, bạn sẽ cao hơn họ,chứ đừng bò từ dưới lên".

tangoctinh
01-05-2010, 07:37
1 vote cho -5: Bạn thường cope paste cho đỡ phải nghỉ nhiều

gacon09
02-05-2010, 17:23
cuộc đời như một giấc mơ .............................

grnleaf
17-05-2010, 22:30
Chạy được là được :D