Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

Em muốn trở thành 1 lập trình viên. Hãy giúp em điểm bắt đầu ....

Theo tôi, tốt nhất để bắt đầu, bạn hãy mở một cuốn sách Visual Basic và tự bạn gõ từng dòng lệnh theo nó. Nếu là Ebook, đừng copy/paste nhé, hãy tự gõ vào. Bạn sẽ gặp rất nhiều lỗi. Bạn debug từng dòng theo chỉ dẫn, và bạn sẽ khá lên từng ngày. Vì sao lại là Visual Basic mặc dù nhiều người nói với bạn rằng đó là thứ ngôn ngữ "kém cỏi"? Chẳng có gì kém cỏi cả. Đừng đặt nặng vấn đề ngôn ngữ, vì ngôn ngữ gắn liền với công nghệ. Công nghệ thay đổi liên tục để phục vụ nhu cầu thực tế và nhu cầu thị trường, nên chẳng có gì là "kém cỏi" cả. Quan trọng là nó giúp bạn có được một tư duy sáng sủa về xử lý Thông Tin. (Thế mới gọi là Công Nghệ_Thông Tin, phải nắm chắc về các quy tắc Thông Tin trước, sau đó tha hồ tìm hiểu về Công Nghệ).

Visual Basic là một gạch nối hoàn hảo giữa những thứ cổ điển (Pascal, C/C++... for DOS) và những thứ hiện đại (J2EE, VC++, VJ++, và đặc biệt là VC# for .Net). Nó là một ngôn ngữ dễ tiếp cận, hiệu quả tức thì và trên hết là nó thú vị cho bạn, một newbie. Bạn sẽ không cảm thấy khô cứng và đơn điệu như khi lập trình trên màn hình xanh/đen cho DOS (vẫn đang được lải nhải giảng dạy trong trường). Bạn cũng sẽ không thấy quá rối rắm khi phải tìm hiểu về các namespace, các lớp đối tượng, các môi trường trung gian (các framework, application server, hay các "máy ảo") như ở các ngôn ngữ hiện đại. 

Visual Basic có một chút lập trình hướng cấu trúc như Pascal/C, một chút lập trình hướng đối tượng như C++/Java, nhưng rõ nét nhất là hướng sự kiện, tức là từng cái click chuột, từng cái nút bấm bây giờ đều do bạn làm chủ. Những thứ này bạn đã quá quen thuộc: khởi động máy lên, vào windows, mở các ứng dụng, nhấn phím, click chuột... tất cả là các "sự kiện" trên môi trường hệ điều hành Windows. Có thể nói Visual Basic 6 là ngôn ngữ lập trình của Windows, cho Windows, và vì Windows  

Khi đã khá thạo (khoảng 1 tháng), bạn tiếp tục tìm hiểu sâu hơn về hướng đối tượng. Lúc này mở lại cuốn C++ cũng không muộn, và bạn sẽ thấy rằng C/C++ chẳng có gì là "bác học" cả, cho nên người ta mới liên tục phải cải tiến nó. Cái thời khó khăn, thiếu RAM, thiếu CPU đã qua rồi và những thứ rắc rối dễ gây lỗi như "con trỏ cấp phát động" của C/C++ cũng một đi không trở lại. Không cần thực hành, chỉ cần hiểu lý thuyết là đủ (mất khoảng 1 tuần). Sau khi hiểu rõ thế nào là "hướng đối tượng" thì tiếp tục nghiên cứu C#. Quá hiện đại, quá mềm dẻo, quá dễ dàng, quá mạnh. Bạn sẽ gặp lại tất cả những gì đã gặp vì đã chăm chỉ thực hành VB và đọc lý thuyết hướng đối tượng C++... Nếu không thích cách làm (cú pháp, quy tắc, từ khóa) của dòng họ nhà C thì vẫn có thể tiếp tục với Visual Basic.Net (VB 7), chẳng có nhiều khác biệt. Tóm lại, đừng đặt nặng vấn đề ngôn ngữ. Hãy học những gì gắn liền với thực tiễn, với nhu cầu thị trường và có hiệu quả nhanh. 

Cũng đừng lan man nhiều thứ. Hãy biết nhiều thứ, nhưng phải thật giỏi một thứ. Chẳng phải C/C++, chẳng phải C#, chẳng phải J2EE, mà chỉ cần bạn siêu SQL và bạn đam mê trở thành một chuyên gia về Database, bạn sẽ là ông trùm. Những anh bạn thích khoe khoang nào là C/C++ "bác học", nào là Java "cao siêu"... sẽ chẳng thể bằng bạn được, vì họ không thực tế. Chúc bạn luôn đam mê lập trình. Sau 6 tháng tự học, bạn sẽ trở thành một chuyên gia. 

Nhưng nên nhớ đó chỉ là chuyên gia coder thôi nhé, mà trong các công ty, coder không được coi trọng như các bạn vẫn nghĩ. Để trở thành chuyên gia CNTT thực thụ, bạn phải va chạm và đập phá nhiều thứ: mạng, security, hacking (nếu bạn muốn làm chuyên gia lập trình mạng); nghiệp vụ kế toán, nghiệp vụ ngân hàng, bảo hiểm, tài chính, chứng khoán, thậm chí cả chính trị nữa (nếu bạn muốn làm chuyên gia cơ sở dữ liệu hay tư vấn giải pháp)... và không thể thiếu là tiếng Anh. Sống chết gì cũng phải học tiếng Anh thật tốt. Khi đi giao dịch với khách hàng, ngôn ngữ lập trình không quan trọng bằng ngôn ngữ... tiếng Anh 

Tóm lại là phải có tinh thần tự học. Học theo các thầy cô trong trường không ổn tí nào, vì tự họ cũng thấy họ đang bế tắc, viển vông nhiều, thiếu thực tế.

Học xong một ngôn ngữ không có nghĩa là bạn đã trở thành một lập trình viên đâu,để trở thành 1 LVT đúng nghĩa thì ít nhất bạn phải qua đại học hoặc tương đương, đã lăn lộn nhiều năm trong nghề và thạo tới nửa tá các NNLT ... nếu ko chỉ có thể gọi bạn là coder- người viết mã mà thôi.

Để có được hướng đi đúng và nhanh trong việc theo nghiệp coding thì tôi góp ý với bạn như sau:

+ Công nghệ thông tin là 1 trong các lĩnh vực có sự phát triển nhanh đến chóng mặt, nếu cứ chú trọng học lấy lền tảng trước rùi học dần lên ngọn thì xin lỗi--> chẳng bao giờ các bạn có thể viết nổi một chương trình ra hồn

, Nhiều bạn nói rằng có thể học 1 ngôn ngữ trong vòng vài ngày thì tôi tin rằng bạn đó nổ hơi to hoặc bạn đó nói đúng khi cậu ta cho rằng học xong 1 ngôn ngữ là viết xong cái helllo world application , Cứ dõi theo microsoft thì thấy hãng này ko bao giờ bằng lòng với sản phẩm mình tạo ra, ngay bây giờ , nhiều LTV còn chưa rành VS 2kK3, thì các version sau đã liên tiếp ra đơi Vs2k5 với những cải tiến vượt bậc rồi Vs2k8 đã rục rịch với các công nghệ mới.Nhiều bạn có lẽ sẽ bị động, học cái gì ,nhiều quá,hướng thủ tục, hướng sự kiện, hướng đối tượng,SOAP,..?? các hình thức truy xuất dữ liệu thì có hàng mớ RDO,OLEDB,ODBC,ADO,DAO...., các ngôn ngữ thì gia tăng theo cấp số cộng....nào là ASM,C,Pascal,C++,Delphi,FOX,Prolog,#......

Có lẽ đến đây nhiều bạn sẽ cảm thấy bối rối bởi mặc dù tôi mới chỉ đề cập đên 1 phần nhỏ của lĩnh vực phần mềm, còn phần cứng ( 1 trong các yếu tố then chốt thúc đẩy sự phát triển của PM) sẽ làm bạn càng chóng mặt hơn, chỉ trong vài năm quá nhiều sự thay đổi mà ko ai ko nhận ra.

Do vậy, với thời điểm hiện nay cách học lập trình tốt nhất là đứng trên vai người khổng lồ để tiếp tục đón nhận các tri thức tiên tiến của loài người thay vì làm 1 chú dã tràng ngày ngay xe cát , chẳng có tương lai bạn ạ...

Hãy chú trọng thừa kế và phát huy thay vì phát minh lại bánh xe, hãy bỏ qua các kỹ thuật đã lạc hậu và lỗi thời như ASM, C và thậm chí cả C++ để tiếp cận nhanh chóng với các ngôn ngữ thế hệ mới như C#.

Đừng bao giờ có tư tưởng phát minh lại bánh xe,nếu như nhiều bạn cho rằng học C , C++ để viết game engine chạy cho tít thì bạn có biết rằng các game engine chuẩn đã được free trên rất nhiều 4 room rùi ko, nhiều hãng lớn vì 1 lý do nào đó mà ko dùng các game engine có sẵn mà tự viết lại theo ý mình dẫn đến tăng chi phí và thời gian sx đồng thời sự ổn địng lại thua xa các engine chuẩn đã qua thời gian kiểm định .Đơn giản hơn nữa nhièu bạn cho rằng C,C++ APP chạy nhanh hơn C# nhưng xét trên nhiều khía cạnh thì :

+ Chí phí viết 1 chương trình = C,C++ cao gấp 5 lần C#

+ Thời gian phát triển + debug sẽ gấp 10 lần hoặc hơn 

+ Ưu điểm nhanh hơn sẽ chẳng còn ý nghĩa gì khi mà phần cứng ngày càng rẻ , các máy tính mạng và phổ biến bây giờ đủ sức đạp ứng

+ Đặc biệt với các ứng dụng chuyên về CSDL ,các ứng dụng đa lớp thì .net càng tỏ ưu thế vượt trôi với các kỹ thuật tiên tiến như ado.net

Người Việt Nam có rất nhiều ưu điểm. Nhưng bên cạnh đó có những nhược điểm quá lớn, đó là sự thụ động và tính e dè, sợ thay đổi. Đã trung thành với cái gì thì bám vào mãi, nhiều khi trở nên mê muội mù quáng. Đó không phải là trung thành mà đó là sự ngu trung, không tốt chút nào. 

Nhiều người đổ lỗi là do tâm lý và văn hóa người Việt Nam bị ảnh hưởng nhiều bởi văn hóa Khổng Giáo của Trung Quốc. Nhưng hãy nhìn xem, người Trung Quốc rất năng động. Khổng Tử thực sự không dạy người ta phải trung thành mù quáng mà ông ấy bảo người Trung Quốc rằng: "Người quân tử, cái gì hợp nghĩa hợp lý thì làm".

Nghề lập trình cũng vậy. Không ai vứt bỏ hay "lật đổ" cái gì cả (lật đổ chế độ C/C++ :-). Động một tí lại nghĩ rằng bọn trẻ chúng nó định "lật đổ" cái này cái nọ, đó là cách nghĩ hời hợt không tốt. Phải khẳng định là muốn "lật đổ" cũng không được vì thực tế những tinh hoa của C/C++ đã được chắt lọc và được sử dụng lại trong các công nghệ mới. Vấn đề là tuổi trẻ Việt Nam bị áp đặt quá mức, và cách làm đó hoàn toàn phản khoa học. Tư tưởng bị áp đặt, giáo trình bị áp đặt, công nghệ bị áp đặt... Nó chỉ khiến các sinh viên (ngoan hiền) thụ động thêm mà thôi. Tại sao lại phải ngoan hiền nhẫn nhục cam chịu đến mức như vậy nhỉ?

Thay vì sinh viên phải lọ mọ cả một kỳ với màn hình tối tăm mù mịt của C/C++ cho DOS, hãy tiếp cận thẳng vào môi trường lập trình giao diện đồ họa vừa thân thiện, vừa hứng thú của Visual Basic 6. Sau đó chỉ cần một tuần quay lại học lý thuyết hướng đối tượng C++, tham khảo nghiêm túc UML là đã có thể nắm chắc nguyên lý OOP, sau đó đi thẳng tới VC#. Còn gì tiện lợi hơn? Phương pháp tiếp cận nào hợp lý hơn? 

Sau 6 tháng hiểu rõ thế nào là "lập trình", không ai có thể ngăn cản các bạn chuyển sang nghiên cứu về *****ing, Reverse Engineering, Packing & Unpacking, Assembling & Deassembling... Rất nhanh chóng, các bạn sẽ thực sự thấu hiểu cái file .exe (file thực thi được - PE file - Portable executable file), .dll (thư viện động), .ocx (activeX control) mà các bạn tạo ra từ Visual Basic 6 (hay C/C++ "bác học" cũng thế thôi) nó là cái gì, cấu trúc như thế nào; trình biên dịch (compiler) thực ra là cái gì; bộ SDK (software development kit) thực chất là cái gì, sao có nhiều bộ SDK như vậy... Đâu chỉ là ngôn ngữ cấp thấp Assembly "bác học" mà là cả một thế giới công nghệ số cần tìm hiểu phải không nào. Nó sẽ dẫn các bạn tới gần hơn với thế giới phần cứng: các thanh ghi, các ngắt, các thành phần đã mã hóa của bộ xử lý trung tâm... những thứ mà "thầy cô" chỉ nói cho các bạn biết một cách "cưỡi ngựa xem hoa". 

Và cuối cùng, đơn giản nhưng lại quan trọng, các bạn sẽ thực sự thấu hiểu vì sao chỉ từ hai con số 0 và 1 vô hồn, loài người lại sáng tạo ra nền công nghệ thông tin rực rỡ như thế. Lúc này thì ngôn ngữ cấp thấp Assembly với những PUSH, POP, MOV, CMP, JMP... chỉ còn là trò chơi cộng trừ của học sinh tiểu học. Nó dễ hơn cả trò chơi ô ăn quan, và sự thật là như thế. Nếu không tin, các bạn cứ thử vào các forum *****ing / Reverse Engineering xem các Pro *****er / Keymaker phát biểu như thế nào. Cho nên không có gì lạ khi các bạn sinh viên CNTT cảm thấy mất phương hướng, ra trường rồi mà chỉ cần bị hỏi về hai chữ "nhị phân" là lúng túng ngay. Trong khi đó, có những bạn sinh viên Ngoại ngữ chẳng hạn lại trả lời rất tốt: "Em thấy lập trình chẳng có gì khó, chỉ là Nếu thế này... Thì thế kia". Quá đúng phải không nào.

Kỹ sư chúng ta qua môi trường đại học, cái quý nhất là được đào tạo về phương pháp tư duy. Nhưng phương pháp hiện nay không tốt vì nó sai từ triết lý giáo dục và triết lý phát triển của đất nước (các thầy Hoàng Tụy, Phan Đình Diệu nói đúng thì bị quy kết là "chệch hướng"). Bảo thủ nhỉ.

Tôi muốn nói với các bạn muốn bước vào nghề coding một điều: Các bạn phải tự tin và chăm chỉ.

Hãy quên đi những huyền thoại "cao thủ lập trình" quanh bạn, vì hầu hết đó chỉ là giả tạo. Ngay cả các thầy cô, rất nhiều trong số họ đã mắc một thứ bệnh nguy hiểm của thời đại, đó là bệnh sĩ. Họ cố gắng tạo ra một màn sương mù bí ẩn xung quanh họ khiến bạn cảm thấy họ tài giỏi kinh hồn, mặc dù kiến thức của họ chẳng đâu vào đâu cả, người thực sự hiểu biết sẽ phát hiện ra ngay. Nếu các bạn chỉ nghe những lời khoa trương của họ, rằng thứ này cao siêu, thứ kia bác học, các bạn sẽ trở nên tự ti, không biết bao giờ mình mới có được 1/10 kiến thức của họ. Các bạn đang tự dìm mình xuống bùn. 

Sự thực là, không có cái gì cao siêu và quá khó hiểu trong ngành khoa học máy tính, công nghệ thông tin nói chung cũng như lập trình, gia công phần mềm nói riêng. Mọi thứ đã được những người tốt bụng đi trước (nước ngoài có, Việt Nam có) nghiên cứu, tổng hợp, chia sẻ free đâu đó trên mạng. Hãy cảm ơn họ và kiên trì tìm kiếm, nghiên cứu. Đến lượt các bạn, nếu tìm ra được một hướng tiếp cận hiệu quả, hãy chia sẻ cho những người đi sau, không khoa trương, không giấu giếm.

Tôi lấy ví dụ, có rất nhiều người đang hiểu sai về c_racking. Bẻ khóa phần mềm có thể bị coi là một tội ác, nhưng nó chỉ là một hạt cát trong sa mạc được gọi là Reverse Engineering, kỹ thuật dịch ngược nhằm chỉnh sửa mã thực thi ở cấp thấp (thập lục phân - Hex hay mã Assembly). Nhưng điều đáng nói là bất cứ ai với một nền tảng cơ bản nhưng vững chắc về lập trình (không phân biệt VB hay C/C++ "bác học"), về cách chuyển đổi giữa các hệ cơ số (nhị phân, thập phân, thập lục phân)... đều có thể tiếp cận Reverse Engineering chứ nó không có gì là bí hiểm cao siêu như người ta tô vẽ. 

Reverse Engeneering cũng phân ra hai phái hắc/bạch rõ rệt: Một bộ phận là những người nghiêm chỉnh nghiên cứu về bảo mật (chống virus, spyware), về tối ưu (các phương pháp nén file cho nhỏ hơn, đóng gói cho gọn hơn và an toàn hơn, cách phân hoạch tốt hơn cho các section của file thực thi giúp chúng có độ tương thích và độ tin cậy cao hơn). 

Bên cạnh đó là những người phá phách cho vui (bẻ khóa phần mềm, thêm mã độc hại, viết virus). Người ta chẳng cần hiểu biết quá sâu sắc về ngôn ngữ ASM cũng có thể bẻ khóa phần mềm như thường, chẳng hạn dùng kỹ thuật NOP - No operation chỉ cần click chuột phải sau đó nhấn lệnh vô hiệu hóa đoạn mã yêu cầu đăng ký license; kỹ thuật đảo ngược JMP 74-75, tức là nhập mã đăng ký sai vẫn được chấp nhận; hay kỹ thuật dò Real Serial Number cho những phần mềm cực nhỏ mà người viết ra chẳng thèm quan tâm nhiều đến license... Những kỹ thuật c_racking "bác học" này dễ hơn cả việc bạn dò giá trị trong ArtMoney hay Cheat Engine khi muốn cheat game. 

Vậy có cần phải thần thánh hóa vấn đề không? Có cần phải thần tượng hóa những thiên tài ảo tưởng không? Tất nhiên là không, vì ta đã hiểu ra vấn đề. Để rõ hơn, chẳng hạn ta có một đoạn mã chương trình kinh điển dùng để chuyển đổi chữ thường sang chữ hoa nằm trong file UpperCase.exe viết bằng Delphi như sau: 

10000011111011000010000001010011010101100101011111 11111100010101100000000000000001100111101101110100 011100110001000000101000000

chuyển sang thập lục phân Hex thành:

83EC20535657FF158C40400033DBA39881400053

rồi chuyển sang ASM thành:

sub esp, 20h 

push ebx 

push esi 

push edi 

call ds:GetProcessHeap 

xor ebx, ebx 

mov hHeap, eax 

push ebx ; lpModuleName

Chương trình rất ngắn, rất đơn giản. Theo quá trình dịch ngược này, các bạn có thể thấy rằng thậm chí người ta chẳng cần biết ngôn ngữ ASM "bác học", chỉ cần một trình Hex Editor, một chiếc máy tính Calc sẵn có của Windows, một bản Appendix (phụ lục) ghi rõ quy ước chuyển đổi mã Hex, thế là có thể mò mẫm trở thành thành "chuyên gia" c_raking rồi. Tất nhiên phải rất kiên trì. Chuyển đổi trực tiếp mã nhị phân 0-1 (Binary) đòi hỏi kiên trì hơn chút nữa, và đó là công việc của các chuyên gia Intel, Asus, những người sản xuất chip, mainboard; hay các chuyên gia tạo dựng các trình biên dịch (Compiler) thế hệ sơ khai.

Như vậy, huyền thoại về một thứ ngôn ngữ ASM "bác học" chỉ là huyền thoại mà thôi, không có gì cao siêu cả. C/C++ cũng vậy, vì chúng đơn thuần là những ngôn ngữ cao hơn ASM một chút, và hoàn toàn có thể dịch ngược toàn bộ đoạn mã trên thành mã C, chẳng có gì bí ẩn hết, cả thế giới đều biết. Những người đạt được khả năng dịch ngược từ ASM sang C và sẵn sàng chia sẻ kinh nghiệm với bạn, đó là những người đáng nể vì họ hiểu biết thực sự. Họ là những người có khả năng làm ra các file K_e_y_gen tạo mã license hợp lệ cho các phần mềm đắt đỏ, có ích cho những người nghèo không có tiền mua nhưng vẫn muốn sử dụng phần mềm để nâng cao dân trí. Đẳng cấp, trí tuệ và thường cả đạo đức của những Keymaker này cao hơn những nhà c_racker nửa mùa một bậc.

Nhưng làm thế nào mà cái đoạn 1000001111101100001000000101001101... kia có thể chạy như một chương trình chuyển đổi từ chữ thường ra chữ hoa? Câu trả lời là tất cả đã được mã hóa sẵn trong các bộ vi xử lý. Một chương trình đặc biệt của hệ điều hành, với hệ điều hành Windows thì đó là Windows Loader, sẽ tải nó vào hệ thống bus trong máy tính. Có rất nhiều bộ vi xử lý nhận lấy tín hiệu này, sau đó chúng được họp lại tại bộ xử lý trung tâm, lưu một phần đệm vào RAM hoặc ra bộ nhớ ảo trên đĩa cứng (pagefile.sys) nếu cần để chờ xử lý (liên quan đến các khái niệm ngăn xếp, hàng đợi). Bộ xử lý trung tâm sẽ biết 10000011111... nghĩa là gì, 110000100... nghĩa là gì. Sau đó thông qua bus địa chỉ, bus điều khiển, bus dữ liệu, nó gửi tín hiệu tới card màn hình và bảo card màn hình cách phóng tia điện tử vẽ lên màn hình những gì mã chương trình muốn thể hiện.

Trên đây là vài dòng sơ lược cùng các bạn, nhằm phần nào giúp các bạn newbie xua tan đi những mặc cảm tự ti và những huyễn hoặc về các khó khăn hay sự "cao siêu" này nọ của các ngôn ngữ. Hãy tự tin lựa chọn nghề coding, vì đó là một nghề tốt, đến lúc râu tóc bạc phơ vẫn làm việc được như thường (các bạn có thấy những ông thầy viết sách lập trình lừng danh thế giới đều râu tóc bạc phơ không, đâu phải 35 tuổi là sẽ bị đào thải). Xin khẳng định lại một lần nữa là các bạn đừng quá đặt nặng vấn đề ngôn ngữ. Cái nào tính thực tiễn cao, tư duy ngôn ngữ sáng sủa, hiệu quả tức thì, đó là sự lựa chọn lý tưởng cho các bạn.

Thế này nhé, người lập topic này đã nói rất rõ ràng:

1. Bạn ấy muốn đi theo "nghiệp" lập trình

2. Bạn ấy đang chọn một hướng tiếp cận

3. Bạn ấy chưa có nhiều kỹ năng

4. Bạn ấy chưa có nhiều kinh nghiệm

5. Bạn ấy muốn được nghe lời tư vấn

Như vậy cậu ta biết rõ mình đang ở đâu và sẽ đi đâu rồi đấy chứ.

Còn tôi (và nhiều bạn khác) cũng đang bám rất sát chủ đề này. Chúng tôi muốn chỉ cho bạn ấy cách tiếp cận hợp lý nhất. Bên cạnh đó là xét lại thậm chí xóa bỏ một số định kiến không đúng từ trước đến nay về nghề coding, về vấn đề ngôn ngữ... Rất vui vì ngày càng có nhiều người có suy nghĩ thoáng đáng và đúng đắn.

Còn về đoạn code minh họa trên kia, xin nói lại với các bạn thế này. Tôi muốn chứng minh điều gì qua ví dụ đó?

Một là, các bạn có thừa nhận với tôi rằng dù dùng VB, Delphi hay C/C++ "bác học" thì cuối cùng kết quả vẫn là một chuỗi nhị phân tương tự nhau mà thôi. Cái này đơn giản quá, không ai phản đối được phải không ạ? Thế thì có nên tiếp tục tán dương quá mức huyền thoại C/C++ "bác học" này nọ hay không? Tất nhiên là không. Còn cái đoạn dịch ngược từ nhị phân lên cấp ASM dùng để minh họa ở trên là do trình decompiler giúp ta tạo ra, cả thế giới đều biết, có ai bảo không đâu nhỉ? Delphi gì ở đó nữa? Nếu không có trình decompiler thì hoàn toàn có thể làm bằng tay nhưng vất vả hơn, không đúng sao? Trình decompiler cũng có nhiều loại, có cái cao cấp thì chỉ ra được tận ngọn ngành chuỗi Hex đó là hàm nào, bộ SDK nào... có cái "thấp cấp" thì người dùng phải tự hiểu và ghi chú lấy... Đó chỉ là những điều sơ lược mang tính chất minh họa chứ không phải khoe khoang nên không có gì phải thắc mắc cả.

Tôi cũng đã khẳng định đó là một ví dụ kinh điển mà hầu hết những người tìm hiểu về Reverse Engineering đều biết, tìm ở đâu cũng thấy, có giấu giếm gì đâu. Nó chỉ là một ví dụ để khẳng định chuyện debug ngược là chuyện hiển nhiên, không có gì bí ẩn cao siêu như một số người vẫn khoa trương tô vẽ.

Hai là, huyền thoại ASM. Rất nhiều người cho rằng nó cao siêu và chỉ những thiên tài mới hiểu và sử dụng được. Nó tạo ra tâm lý lệch lạc và gây thiếu tự tin cho các bạn newbie. Sự thật thì ngược lại, nó đúng nghĩa là một thứ ngôn ngữ bậc thấp, không có gì cao sang cả. Cứ hình dung thế này. Chỉ cần nhấn một nút, bạn cày xong một thửa ruộng, trong khi có những ông nông dân cổ hủ cứ nhất định dùng con trâu và cái cày làm việc hùng hục đến vã mồ hôi và khăng khăng rằng cày bằng trâu mới là lao động thực sự, đáng được biểu dương. Cày bằng máy là cách làm của bọn Tư Bản thối nát, không thèm chấp. Rất vô lý và hài hước.

Ba là, phải biết cày bằng trâu trên những thửa ruộng gai góc trước khi cày bằng máy, đó mới là nông dân đích thực. Người ta gọi cái này là lý luận của Bờm cũng đúng. Qua ví dụ trên kia, tôi muốn chỉ ra rằng những người có tư duy thoáng đãng không bao giờ nghĩ thế. Sau khi đã nắm rõ các nguyên lý lập trình với một ngôn ngữ bậc cao, việc tìm hiểu các ngôn ngữ bậc thấp, OS, cấu trúc PE file, mã nhị phân, Hex... sẽ dễ dàng và vững chắc hơn rất nhiều. Tất nhiên như đã nói, chỉ một số người yêu thích làm việc trong những lĩnh vực liên quan thì mới nghiên cứu sâu về những thứ đó. Đây là do yêu cầu công việc chứ bản thân họ cũng chẳng dám tự nhận là giỏi giang hay "lập trình viên đích thực" gì hết.

Học thuật toán thì lại càng không liên quan gì đến ngôn ngữ C.

Thực ra hồi bằng tuổi bạn tôi cũng có suy nghĩ như bạn bây giờ. Tôi được dạy thế và tôi đinh ninh đó là chân lý. Hồi đó Pascal là nhất, Pascal là thuật toán, Pascal là máy tính, Pascal là lập trình, nói chung là mọi thứ... 

Nhưng rồi tôi đọc được ở đâu đó: Tư duy khoa học là phải biết hoài nghi. Đại loại như vậy. Cho nên cái gì cũng nên xem xét lại một chút. Thử đặt câu hỏi nhé: Chẳng lẽ thuật toán giải phương trình bậc hai của ngôn ngữ C khác Pascal, khác VB? Chẳng lẽ lập trình Visual Basic không cần thuật toán?

Tôi khẳng định với bạn rằng bạn sẽ học được nhiều thuật toán hơn, kỹ hơn, nhớ lâu hơn nếu bạn dùng Visual Basic 6 thay vì Pascal hay C. Trong khi bạn đang loay hoay với những dòng readln, writeln... thì người bên cạnh bạn dùng VB đã viết xong toàn bộ chương trình và bắt đầu chuyển sang bài toán vẽ đồ thị... Khi bạn toát mồ hôi mới làm xong chương trình vẽ đồ thị thì anh ta đã gấp quyển sách thuật toán lại rồi, xong hết rồi. Và anh ta hiểu ra rằng, chẳng cần VB hay C, anh ta có thể dùng mã giả và "test khô" để giải quyết mọi bài toán. Thế là anh ta trở thành chuyên gia phân tích thiết kế hệ thống. Anh ta quẳng mớ mã giả và tài liệu phân tích thiết kế lại cho các coder, bắt họ dịch mã giả sang bất cứ ngôn ngữ nào khách hàng yêu cầu. Trong khi các coder (trong đó có bạn) hì hục dịch mã toét mắt, anh ta ngồi nhâm nhi cafe, viết tài liệu hướng dẫn bằng Microsoft Word một cách nhàn hạ. Nhưng đố ai ganh tị được nhé, vì thiếu tài liệu "lập trình trên Word" của anh ta thì bố bảo khách hàng cũng không dám bỏ tiền ra mua chương trình.

Không chỉ vấn đề thuật toán, nhiều người còn cho rằng dùng C thì mã chương trình sẽ cô đọng hơn, chương trình chạy nhanh hơn. Mã càng cô đọng, càng ngắn, càng khó hiểu thì càng chứng tỏ sự thông minh vượt trội của mình. Sự thật không phải thế mà ngược lại, bạn càng viết rõ ràng, dài dòng một chút, cặn kẽ một chút thì máy tính càng hiểu bạn tốt hơn, chạy nhanh hơn. Vậy thì không có lý do gì để từ chối các ngôn ngữ bậc cao. Đó là chưa kể đến vấn đề bảo trì và tái sử dụng, một việc quan trọng hàng đầu trong nghề coding. Càng cô đọng và khó hiểu theo kiểu tư duy C/C++ "bác học" sẽ chỉ làm hại chính mình và người khác sau này khi phải bảo trì code mà thôi.

Ngày trước, những thứ như "con trỏ cấp phát động" hay "đệ quy" là những thứ rất cao cấp (và cao siêu nữa). Bạn nào trong lớp muốn được khen là "giỏi" thì phải rất thạo những thứ này. Nhưng nó cao cấp và cao siêu không phải vì nó rèn luyện cho bạn một tư duy tốt, mà chủ yếu vì nó gây khó hiểu cho người khác và rất mạo hiểm, rất dễ gây lỗi. Hồi đó chúng tôi rất ích kỷ và xấu tính, rất khoái chí khi người khác đọc và không thể hiểu code của mình. Hậu quả là ra trường làm việc đơn lẻ thì được, nhưng làm việc nhóm thì cực kỳ tồi tệ vì chúng tôi không có thói quen chia sẻ, đúng hơn là không có khả năng chia sẻ.

Bây giờ thì những thứ ấu trĩ này (con trỏ, đệ quy) không còn được mấy người ca tụng nữa, đơn giản vì có nhiều con đường khác tốt hơn. Nhiều con đường tốt hơn để đi đến cùng một đích, vậy tại sao cứ phải cắm đầu vào con đường nguy hiểm đầy gai góc, ngoài lý do thích chơi trội?

Mình thấy bác ccom có vẻ hết lòng ca ngợi c# và vb quá nhỉ?Tùy vào mỗi người thích làm gì thì khuyên học ngôn ngữ gì chứ. mình thấy vb chủ yếu dùng để phát triển phần mềm quản lý, tất nhiên dùng để làm xử lý những việc khác cũng có thể làm được, nhưng cũng cần phải xem có thích hợp không?có nhanh không?

Bạn viết c/c++ hay vb, c# bạn cũng cần có thuật toán như mình đã nói ở trên, còn ngôn ngữ chỉ là công cụ để bạn thể hiện thuật toán của bạn lên máy tính, làm cho máy tính hiểu và thực hiện điều bạn muốn làm. Mình thấy các bạn đều tranh cãi nhau về học ngôn ngữ nào phù hợp với bây giờ và theo mình thấy thì các bạn vô tình tranh cãi nhau làm thế nào trở thành coder chứ ko phải là programmer mà chẳng hiểu, cũng chẳng giải quyết được vấn đề trước mắt của người đặt câu hỏi: là muốn trở thành lập trình viên.

Có thể có 1 số tự phụ cho mình là nhất hỏi lại tôi là coder và programmer khác gì nhau. Thưa rằng, theo ngu ý của tôi thì coder chỉ là những người dùng công cụ để thể hiện thuật toán, suy nghĩ của người khác thành chương trình, programmer mới là những người có đầu tạo ra thuật toán, suy nghĩ mới mẻ. Nhớ lại trước đây, tôi cũng rơi vào tình trạng như bạn ấy. cũng tham gia rất nhiều diễn đàn, vì tôi tự học không theo trường lớp, không có ai chỉ bảo đường đi nước bước cả. Tôi cũng đã có học 1 chút pascal, c/c++, rồi đến vb 6, cũng có tập tành làm phần mềm quản lý này nọ. giờ lại quay lại học lại c/c++ vì tôi thấy rằng ngôn ngữ c/c++ là ngôn ngữ giúp mình hiểu thuật toán tốt nhất. Và cũng có thể sau này nó giúp cho tôi trong công việc thì sao. mà nếu như sau này, công việc có bắt buộc tôi phải dùng ngôn ngữ khác như vb hay c# để làm thì tôi tin 1 khi tôi nắm vững những điều cơ bản của lập trình thì chuyển sang 1 ngôn ngữ mới sẽ nhanh hơn khi mới bắt đầu học 1 ngôn ngữ lập trình.

Sẽ có bạn thắc mắc thì dùng c# hay vb cũng được chứ sao.Tôi không cấm hay ngăn cản nhưng với tôi, tôi sẽ chọn c/c++ để học trước tiên. Mỗi người có 1 chí hướng, 1 con đường đi của riêng mình miễn sao hãy làm tốt công việc của mình thì bạn sẽ đủ sống, có khi lại có dư dả trong cuộc sống.

Tôi không nói đâu xa. lấy ông anh rể tôi ra làm ví dụ. Ông này học khoa học máy tính ở trường đại học tokyo nhật bản. ông ấy đã làm thạc sỹ và có thể hoàn thiện luận án tiến sỹ ở mỹ nếu không vướng vợ con, phải bỏ dở luận án để đi làm kiếm tiền nuôi vợ con. tôi có hỏi ông ấy anh biết và dùng ngôn ngữ gì để lập trình. ông ấy trả lời rằng chỉ dùng c/c++ và php để viết.máy tính ông ấy cấu hình: celeron mobile 1.5, ram 256, hdd 40gb. ko phải ông ấy không đủ tiền mua máy cấu hình mạnh để chạy các ngôn ngữ như c#, vb.net nhưng ông ấy chỉ dùng c++ để viết và dùng cygwin để complie, vẫn hoàn thành công việc chán. tôi nói như vậy không phải là để khen này khen nọ nhưng chỉ để nói là với trình độ ông ấy chỉ dùng c/c++ để viết phần mềm ứng dụng thì chúng ta cũng cần phải suy nghĩ tại sao chứ. mới gần đây tôi có nói chuyện trao đổi với ông ấy về việc học cntt. Vì tôi đang định đi học văn bằng 2 cntt ở hv kỹ thuật quân sự mà. ông ấy nói ngày trước đi học chỉ toàn học toán và thuật toán còn học ngôn ngữ lập trình rất ít, chỉ là lấy tín chỉ thôi. Nói như vậy các bạn hiểu tầm quan trọng của thuật toán rồi chứ. còn ngôn ngữ chỉ là phụ thôi. 

Còn nếu nói c/c++ ko thể chia sẻ thì bạn hơi nhầm. Bạn nghĩ viết vb mới là có thể chia sẻ ư? Mình chỉ hỏi bạn theo bạn, viết chương trình chia thành nhiều module là gì?Chẳng qua là mỗi module mà trong vb 6 có đuôi mở rộng là *.bas là tập hợp 1 hay nhiều thủ tục hoặc hàm mà hợp thành. Bạn có thể 1 đoạn thủ tục hoặc hàm này bạn cho vào module này cũng được, hay cho vào module kia cũng được, miễn sao khi bạn cần sử dụng có thể gọi lên được hàm hay thủ tục đó.Trong c/c++ cũng có đấy chứ. đâu có phải là không đâu. Còn cách liên kết những module này lại với nhau như thế nào thì mình không biết vì mình mới học c mà. có thể có bạn cho rằng tôi tự học chẳng có ai đào tạo thì biết gì mà nói. thì xin thưa rằng bạn chẳng hiểu gì về cuộc sống. có thể trình độ của tôi kém hơn các bạn. nhưng tôi biết tôi đã có ít nhất 3 năm để tìm hiểu mình cần gì, mình muốn gì, và mình phải làm gì để đạt được nhữn điều mình muốn, mình cần. Tôi chỉ trao đổi hiểu biết, ý kiến của mình cho những bạn mới sử dụng máy tính, mới học lập trình biết lắng nghe ý kiến trong chính bản thân các bạn và của người khác. Thân!

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #kienpro