tek4

Học lập trình có khó không? Học lập trình như thế nào?

by - September. 21, 2021
Kiến thức
Học
<p style="text-align: justify;">C&oacute; lẽ hai c&acirc;u hỏi thường trực đầu ti&ecirc;n với tất cả những bạn mới bắt đầu học lập tr&igrave;nh đ&oacute; l&agrave;: "Học lập tr&igrave;nh th&igrave; c&oacute; kh&oacute; kh&ocirc;ng ạ?", "Em phải học lập tr&igrave;nh như thế n&agrave;o ạ", "Em thấy học lập tr&igrave;nh kh&oacute; qu&aacute;, học đi học lại v&agrave; em vẫn chẳng hiểu g&igrave;", hay kh&aacute; hơn ch&uacute;t l&agrave;: "Em hiểu hết c&aacute;c kiến thức thầy dạy tr&ecirc;n lớp, hiểu hết những nội dung đọc trong s&aacute;ch, nhưng kh&ocirc;ng hiểu sao khi l&agrave;m một b&agrave;i tập lập tr&igrave;nh thực tế lại kh&ocirc;ng thể l&agrave;m được"... C&oacute; v&ocirc; v&agrave;n c&acirc;u hỏi tương tự kiểu như vậy?</p> <p style="text-align: justify;">Nếu bạn cũng tr&oacute;t c&oacute; những c&acirc;u hỏi như vậy th&igrave; xin đừng cảm thấy lạ. Thực tế cho thấy rằng việc học lập tr&igrave;nh ở Việt Nam, ngay cả với sinh vi&ecirc;n c&aacute;c ng&agrave;nh c&ocirc;ng nghệ th&ocirc;ng tin hiện nay cũng kh&ocirc;ng phải l&agrave; một vấn đề dễ d&agrave;ng. Ngo&agrave;i c&aacute;c nguy&ecirc;n nh&acirc;n chủ quan như t&iacute;nh k&eacute;m chủ động v&agrave; "lười" t&igrave;m hiểu th&igrave; một nguy&ecirc;n nh&acirc;n kh&aacute;ch quan kh&aacute; quan trọng l&agrave; ch&uacute;ng ta kh&ocirc;ng biết học thế n&agrave;o v&agrave; kh&ocirc;ng biết bắt đầu từ đ&acirc;u. Điều n&agrave;y giống hệt với m&ocirc;n ngoại ngữ, đa phần đều học rất nhiều kh&oacute;a, từ A đến Z nhưng sau đ&oacute; lại nản v&agrave; chỉ đạt được từ A đến C sau đ&oacute; học lại từ đầu, học đi học lại m&agrave; vẫn chẳng biết g&igrave;, vẫn dậm ch&acirc;n tại chỗ, vẫn sợ lập tr&igrave;nh, v&agrave; vẫn chưa l&agrave;m được ứng dụng n&agrave;o thực tế.</p> <p style="text-align: justify;">Với hi vọng biến việc học lập tr&igrave;nh trở l&ecirc;n dễ d&agrave;ng v&agrave; th&uacute; vị hơn với mọi người, chuỗi b&agrave;i viết <a href="../../../lap-trinh-co-ban/">Lập tr&igrave;nh cơ bản</a> n&agrave;y sẽ tiếp tục với b&agrave;i viết n&agrave;y. B&agrave;i viết sẽ trả lời cho những c&acirc;u hỏi tr&ecirc;n v&agrave; cố gắng đưa đến cho bạn đọc những c&aacute;ch thức v&agrave; kinh nghiệm cần thiết nhất để bắt đầu cho một cuộc h&agrave;nh tr&igrave;nh mới th&uacute; vị trong vương quốc của c&aacute;c mạch điện tử.</p> <p style="text-align: justify;"><img class=" wp-image-354 aligncenter" src="../../../wp-content/uploads/2018/08/Learn-coding-online.jpeg" alt="Học lập tr&igrave;nh như thế n&agrave;o" width="571" height="357" /></p> <h3 style="text-align: justify;">Đầu ti&ecirc;n: Nhắc lại b&agrave;i trước lập tr&igrave;nh l&agrave; g&igrave;?</h3> <p style="text-align: justify;">Như ở <a href="../../../lap-trinh-la-gi-lam-da-lau-nhung-khong-phai-ai-cung-biet/">b&agrave;i trước</a> ch&uacute;ng ta đ&atilde; biết rằng: lập tr&igrave;nh l&agrave; việc ch&uacute;ng ta ra lệnh cho đối tượng m&aacute;y t&iacute;nh (hoặc thiết bị điện tử n&agrave;o đ&oacute;) thực hiện một c&ocirc;ng việc n&agrave;o đ&oacute;. Chẳng hạn ch&uacute;ng ta c&oacute; thể n&oacute;i: "N&agrave;y, m&aacute;y t&iacute;nh nấu cơm đi !". Nhưng th&ocirc;ng thường m&aacute;y t&iacute;nh kh&ocirc;ng hiểu ngữ nghĩa của con người m&agrave; phải th&ocirc;ng qua một giai đoạn dịch th&agrave;nh ng&ocirc;n ngữ m&aacute;y để hiểu được mệnh lệnh đ&oacute; l&agrave; g&igrave;. Điều n&agrave;y giống như khi ai đ&oacute; n&oacute;i với ch&uacute;ng ta "Cook for me, Please", ch&uacute;ng ta phải định h&igrave;nh v&agrave; dịch lại ra ng&ocirc;n ngữ ch&uacute;ng ta hiểu l&agrave; tiếng Việt, c&ograve;n đối với m&aacute;y t&iacute;nh l&agrave; c&aacute;c m&atilde; nhị ph&acirc;n 0 v&agrave; 1.</p> <p style="text-align: justify;">Ồ n&oacute;i đến đ&acirc;y c&oacute; vẻ như qu&aacute; đơn giản đ&uacute;ng kh&ocirc;ng ạ? Chỉ việc ra lệnh v&agrave; m&aacute;y t&iacute;nh sẽ thực hiện. Vậy lập tr&igrave;nh đ&acirc;u c&oacute; kh&oacute;, n&oacute; chỉ đơn giản l&agrave; l&agrave;m một &ocirc;ng chủ chỉ tay năm ng&oacute;n cho m&aacute;y l&agrave;m th&ocirc;i m&agrave;. Nhưng tr&ecirc;n thực tế mọi chuyện kh&ocirc;ng diễn ra đơn giản như vậy, v&igrave; m&aacute;y t&iacute;nh l&agrave; một n&ocirc; lệ kh&aacute; ngốc ngếch, n&oacute; chỉ hiểu được một số c&acirc;u v&agrave; chỉ thực hiện được từng thao t&aacute;c đơn giản (c&oacute; nghĩa l&agrave; chỉ đ&acirc;u đ&aacute;nh đấy). Do đ&oacute;, khi dịch một c&acirc;u ra ng&ocirc;n ngữ m&aacute;y n&oacute; chỉ hiểu được một số lượng rất hạn chế m&agrave; th&ocirc;i. V&agrave; tất nhi&ecirc;n, n&oacute; kh&ocirc;ng hiểu "nấu cơm" ở đ&acirc;y l&agrave; g&igrave;.</p> <p style="text-align: justify;">Mọi chuyện bắt đầu phức tạp. Do n&oacute; kh&ocirc;ng hiểu nấu cơm l&agrave; g&igrave;, v&igrave; vậy b&acirc;y giờ ch&uacute;ng ta phải giải th&iacute;ch cho n&oacute; hiểu nấu cơm l&agrave; g&igrave;, v&agrave; l&agrave;m thế n&agrave;o để nấu cơm (hoặc xa hơn: l&agrave;m thế n&agrave;o để nấu cơm ngon - hay một chương tr&igrave;nh chạy tối ưu v&agrave; &iacute;t lỗi). V&agrave; c&aacute;ch thức ch&uacute;ng ta diễn đạt cho m&aacute;y t&iacute;nh hiểu nấu cơm như thế n&agrave;o l&agrave; lập tr&igrave;nh. Nghĩa l&agrave; ch&uacute;ng ta đưa ra c&aacute;c bước, c&aacute;c chỉ thị để m&aacute;y t&iacute;nh thực hiện một c&ocirc;ng việc n&agrave;o đ&oacute; để đạt một mục ti&ecirc;u đề ra. Đ&oacute; l&agrave; lập tr&igrave;nh.</p> <p style="text-align: center;"><strong>Lập tr&igrave;nh = diễn đạt cho m&aacute;y hiểu + c&aacute;ch thức n&oacute; cần l&agrave;m như thế n&agrave;o.</strong></p> <h3 style="text-align: justify;">Vậy, học lập tr&igrave;nh l&agrave; g&igrave;?</h3> <p style="text-align: justify;">Như vậy, ở tr&ecirc;n ta đ&atilde; biết rằng, thực chất việc lập tr&igrave;nh l&agrave; việc ra lệnh cho m&aacute;y t&iacute;nh thực hiện một c&ocirc;ng việc g&igrave; đ&oacute; th&ocirc;ng qua việc hiểu ng&ocirc;n ngữ của n&oacute; v&agrave; diễn đạt c&ocirc;ng việc ch&uacute;ng ta mong muốn sang ng&ocirc;n ngữ của m&aacute;y t&iacute;nh.</p> <p style="text-align: justify;">C&oacute; bạn sẽ thắc mắc, tại sao kh&ocirc;ng l&agrave;m ra c&aacute;c m&aacute;y t&iacute;nh c&oacute; thể hiểu được trực tiếp con người lu&ocirc;n đi? Tất nhi&ecirc;n, người ta đang cố gắng tạo ra những cỗ m&aacute;y như vậy v&agrave; nghe ng&ocirc;n ngữ của người để thực hiện lu&ocirc;n c&ocirc;ng việc (c&aacute;c h&igrave;nh thức tr&iacute; tuệ nh&acirc;n tạo), tuy nhi&ecirc;n ẩn s&acirc;u trong n&oacute; vẫn l&agrave; c&aacute;c chương tr&igrave;nh, c&aacute;c tri thức m&agrave; con người đưa v&agrave;o n&oacute; để n&oacute; c&oacute; cơ sở tri thức ban đầu để hiểu được con người.</p> <p style="text-align: justify;">C&ograve;n về cơ bản ch&uacute;ng ta vẫn phải học lập tr&igrave;nh tức l&agrave; học c&aacute;ch diễn đạt cho m&aacute;y hiểu c&aacute;ch thức n&oacute; cần l&agrave;m để thực hiện một c&ocirc;ng việc g&igrave; đ&oacute;.</p> <p style="text-align: justify;">Như vậy, học lập tr&igrave;nh c&oacute; hai yếu tố:</p> <ul> <li style="text-align: justify;">Thứ nhất: c&aacute;ch thức thực hiện c&ocirc;ng việc (<strong>thuật to&aacute;n</strong>): quy định c&aacute;c bước, c&aacute;c chỉ thị cơ bản m&agrave; m&aacute;y cần thực hiện theo thứ tự để đạt đến một mục ti&ecirc;u n&agrave;o đ&oacute;.</li> <li style="text-align: justify;">Thứ hai: diễn đạt cho m&aacute;y hiểu (<strong>ng&ocirc;n ngữ lập tr&igrave;nh</strong>): trung gian giữa ng&ocirc;n ngữ con người v&agrave; ng&ocirc;n ngữ m&aacute;y để n&oacute;i cho m&aacute;y hiểu c&aacute;ch thức v&agrave; c&aacute;c bước n&oacute; cần l&agrave;m.</li> </ul> <p>Như vậy, học lập tr&igrave;nh nghĩa l&agrave; ch&uacute;ng ta học ng&ocirc;n ngữ lập tr&igrave;nh v&agrave; học thuật to&aacute;n.</p> <p style="text-align: justify;">Giống như một chiếc xe chỉ c&oacute; một số thao t&aacute;c rẽ tr&aacute;i, rẽ phải, phanh, l&ugrave;i, đi chậm lại, tăng tốc, m&aacute;y t&iacute;nh cũng chỉ c&oacute; một bộ rất nhỏ c&aacute;c thao t&aacute;c cơ sở (cộng, trừ, nh&acirc;n, chia, AND, OR, XOR, NOT,...) v&agrave; tất nhi&ecirc;n m&aacute;y t&iacute;nh cũng thực hiện được hạn chế những c&acirc;u ra lệnh li&ecirc;n quan đến c&aacute;c thao t&aacute;c n&agrave;y m&agrave; th&ocirc;i. Tuy nhi&ecirc;n, điều n&agrave;y tương đối kh&oacute; khăn cho con người v&igrave; n&oacute; kh&ocirc;ng trực quan v&agrave; kh&oacute; nhớ đối với ng&ocirc;n ngữ của con người. Do đ&oacute;, người ta đ&atilde; nghĩ ra những ng&ocirc;n ngữ trung gian giữa ng&ocirc;n ngữ m&aacute;y v&agrave; ng&ocirc;n ngữ con người bắt đầu từ những ng&ocirc;n ngữ bậc thấp như: <strong>Assembly</strong>, đến c&aacute;c ng&ocirc;n ngữ bậc cao hơn như: <strong>C</strong>, <strong>C++</strong>, <strong>Python</strong>, <strong>Java</strong>,... v&agrave; c&agrave;ng c&aacute;c ng&ocirc;n ngữ bậc cao th&igrave; c&agrave;ng gần gũi với ng&ocirc;n ngữ của con người v&agrave; c&agrave;ng dễ biểu diễn. V&agrave; việc dịch c&aacute;c ng&ocirc;n ngữ bậc cao xuống ng&ocirc;n ngữ m&aacute;y th&ocirc;ng qua một <strong>tr&igrave;nh bi&ecirc;n dịch</strong> hoặc <strong>th&ocirc;ng dịch</strong>. Vấn đề n&agrave;y c&oacute; vẻ hơi phức tạp một ch&uacute;t. Tuy nhi&ecirc;n c&aacute;c bạn chỉ cần biết sơ qua rằng, từ ng&ocirc;n ngữ con người sang ng&ocirc;n ngữ m&aacute;y th&igrave; c&oacute; một ng&ocirc;n ngữ trung gian ch&iacute;nh l&agrave; c&aacute;c ng&ocirc;n ngữ lập tr&igrave;nh m&agrave; ch&uacute;ng ta hay sử dụng.</p> <h3 style="text-align: justify;">Vậy học lập tr&igrave;nh c&oacute; kh&oacute; kh&ocirc;ng?</h3> <p style="text-align: justify;">Học lập tr&igrave;nh l&agrave; học ng&ocirc;n ngữ lập tr&igrave;nh v&agrave; thuật to&aacute;n, vậy <span class="fontstyle0">th&igrave; n&oacute; c&oacute; kh&oacute; kh&ocirc;ng?</span></p> <p style="text-align: justify;"><span class="fontstyle0">Đầu ti&ecirc;n l&agrave; kh&iacute;a cạnh ng&ocirc;n ngữ. Việc học một ng&ocirc;n ngữ lập tr&igrave;nh cũng giống như khi bạn học một ng&ocirc;n ngữ mới ngo&agrave;i tiếng mẹ đẻ. Sẽ c&oacute; đ&ocirc;i ch&uacute;t kh&oacute; khăn, c&aacute;c bạn biết đ&oacute;, ch&uacute;ng ta học tới 12 năm tiếng Anh phổ th&ocirc;ng nhưng vẫn kh&ocirc;ng thể n&agrave;o th&agrave;nh thạo được, phải kh&ocirc;ng? Nhưng tin vui l&agrave; ng&ocirc;n ngữ lập tr&igrave;nh về cơ bản đều rất dễ học (trừ một số ng&ocirc;n ngữ hack n&atilde;o như <a href="https://en.wikipedia.org/wiki/Brainfuck">BrainFuck</a>). Đa số c&aacute;c ng&ocirc;n ngữ lập tr&igrave;nh đều chỉ gồm một v&agrave;i từ kh&oacute;a cơ bản như if, else, for, while,... v&agrave; một số ph&eacute;p to&aacute;n logic, số học kh&aacute; cơ bản. Bạn thậm ch&iacute; c&oacute; thể học thuộc to&agrave;n bộ số từ kh&oacute;a n&agrave;y trong v&ograve;ng v&agrave;i ph&uacute;t. N&oacute; kh&aacute;c với tiếng Anh, hay bất cứ ng&ocirc;n ngữ n&agrave;o kh&aacute;c bạn cần phải học h&agrave;ng ng&agrave;n, thậm ch&iacute; trăm ng&agrave;n từ để c&oacute; thể sử dụng ở mức cơ bản. Ng&ocirc;n ngữ lập tr&igrave;nh th&igrave; kh&aacute;c, số lượng c&aacute;c từ của n&oacute; rất &iacute;t v&agrave; đều dễ học (đa phần rất ngắn v&agrave; gợi nhớ theo tiếng Anh). Những thứ m&agrave; bạn sẽ thấy như:&nbsp;<code class="EnlighterJSRAW" data-enlighter-language="csharp">DateTime.Now.ToString("yyyy-MM-ddThh:mm:ssTZD");</code></span>trong C# chủ yếu l&agrave; t&ecirc;n của c&aacute;c h&agrave;m v&agrave; thư viện hỗ trợ trong ng&ocirc;n ngữ m&agrave; c&aacute;c bạn sẽ học dần dần. Mọi thứ cũng kh&ocirc;ng hề nhiều v&agrave; rất dễ nhớ.</p> <p style="text-align: justify;">C&aacute;i kh&oacute; khăn nhất trong lập tr&igrave;nh đ&oacute; l&agrave; <strong>thuật to&aacute;n</strong>. Đ&acirc;y l&agrave; yếu tố cơ sở cốt l&otilde;i của chương tr&igrave;nh. Việc viết một chương tr&igrave;nh giống như viết một b&agrave;i văn tr&ecirc;n ng&ocirc;n ngữ lập tr&igrave;nh. Bạn viết hay hay kh&ocirc;ng, c&oacute; logic hay r&acirc;u &ocirc;ng nọ cắm cằm b&agrave; kia l&agrave; do ch&iacute;nh bản th&acirc;n thuật to&aacute;n. Thuật to&aacute;n sẽ quy định c&aacute;c bước thực hiện của m&aacute;y t&iacute;nh khi chạy chương tr&igrave;nh. M&aacute;y t&iacute;nh c&oacute; thể thực hiện đ&uacute;ng, thực hiện sai, thậm ch&iacute; treo l&agrave; do c&aacute;c lỗi trong thuật to&aacute;n khi lập tr&igrave;nh.</p> <p style="text-align: justify;"><span class="fontstyle0">Chờ đ&atilde;!!!. Vậy thuật to&aacute;n c&oacute; li&ecirc;n quan g&igrave; đến to&aacute;n v&agrave; liệu ch&uacute;ng ta c&oacute; bắt buộc phải rất si&ecirc;u to&aacute;n để bắt đầu học lập tr&igrave;nh hay kh&ocirc;ng?</span></p> <p style="text-align: justify;">Tin vui l&agrave;, để bắt đầu với lập tr&igrave;nh bạn kh&ocirc;ng cần phải l&agrave; "si&ecirc;u nh&acirc;n to&aacute;n" hay "nh&agrave; to&aacute;n học vĩ đại như Ng&ocirc; Bảo Ch&acirc;u". Với một nền tảng cơ bản như cộng, trừ, nh&acirc;n, chia...bạn ho&agrave;n to&agrave;n c&oacute; thể bắt đầu học lập tr&igrave;nh. Tuy nhi&ecirc;n tin buồn l&agrave; để học lập tr&igrave;nh đến một đẳng cấp n&agrave;o đ&oacute;, hoặc trong một lĩnh vực chuy&ecirc;n m&ocirc;n s&acirc;u li&ecirc;n quan đến to&aacute;n th&igrave; bạn lại bắt buộc phải c&oacute; tư duy to&aacute;n tốt. Sở dĩ ở đ&acirc;y t&ocirc;i kh&ocirc;ng d&ugrave;ng từ kiến thức to&aacute;n tốt, hay học to&aacute;n tốt m&agrave; l&agrave; "tư duy to&aacute;n tốt" bởi kiến thức v&agrave; những g&igrave; bạn học được ở to&aacute;n sẽ chẳng c&oacute; nghĩa l&iacute; g&igrave; nếu kh&ocirc;ng biết &aacute;p dụng v&agrave;o việc tư duy để x&acirc;y dựng c&aacute;c lời giải cho c&aacute;c b&agrave;i to&aacute;n lập tr&igrave;nh. C&aacute;c b&agrave;i to&aacute;n trong lập tr&igrave;nh kh&ocirc;ng phải bao giờ cũng hiển hiện v&agrave; r&otilde; r&agrave;ng như c&aacute;c b&agrave;i tập to&aacute;n tr&ecirc;n lớp. T&oacute;m lại, to&aacute;n học l&agrave; một lợi thế nhưng bạn kh&ocirc;ng nhất thiết phải sợ h&atilde;i khi chưa biết nhiều, hoặc &iacute;t ra khi trượt m&ocirc;n hoặc điểm thấp m&ocirc;n giải t&iacute;ch ở trường. Điều đ&oacute; kh&ocirc;ng phải l&agrave; dấu chấm hết cho việc học lập tr&igrave;nh khi chưa bắt đầu. Tư duy to&aacute;n học tạm ổn l&agrave; tất cả những g&igrave; bạn cần kh&ocirc;ng phải điểm số.&nbsp; Ngo&agrave;i ra c&aacute;c kiến thức to&aacute;n học kh&aacute;c sẽ <span class="fontstyle0">phụ thuộc v&agrave;o chương tr&igrave;nh m&agrave; bạn muốn ph&aacute;t triển, nếu đ&oacute; l&agrave; chương tr&igrave;nh li&ecirc;n quan đến to&aacute;n học, bạn bắt buộc phải hiểu biết nhiều về to&aacute;n. Nếu bạn muốn l&agrave;m một game 3D th&igrave; đ&ograve;i hỏi bạn phải c&oacute; kiến thức về h&igrave;nh học kh&ocirc;ng gian v&agrave; đại số tuyến t&iacute;nh... C&ograve;n để bắt đầu học lập tr&igrave;nh C, bạn kh&ocirc;ng cần thiết phải c&oacute; những kiến thức cao cấp n&agrave;o cả. H&atilde;y cứ bắt đầu bất cứ khi n&agrave;o bạn thực sự muốn. Nhưng để ph&aacute;t triển đến mức độ cao hơn, bạn cần trau đồi ng&agrave;y một nhiều hơn.&nbsp;</span></p> <h3 style="text-align: justify;">Ch&uacute;ng ta đang học lập tr&igrave;nh như thế n&agrave;o?</h3> <p style="text-align: justify;">Th&ocirc;ng thường, khi mới bắt đầu học lập tr&igrave;nh, ch&uacute;ng ta lu&ocirc;n được c&aacute;c thầy c&ocirc; gi&aacute;o của m&igrave;nh cho c&aacute;c b&agrave;i tập mẫu v&agrave; g&otilde; theo, sau đ&oacute; sẽ học c&aacute;c c&acirc;u lệnh, v&agrave; rồi học về c&aacute;c cấu tr&uacute;c phức tạp hơn như: cấu tr&uacute;c điều kiện, cấu tr&uacute;c lặp, h&agrave;m,... v&agrave; sau đ&oacute; l&agrave; l&agrave;m b&agrave;i tập, thi kiểm tra.</p> <p style="text-align: justify;">Tuy nhi&ecirc;n như đ&atilde; thấy ch&uacute;ng ta học kh&ocirc;ng hiệu quả, khi học xong gần như ch&uacute;ng ta chẳng biết ch&uacute;ng l&agrave;m g&igrave;.</p> <p style="text-align: justify;"><strong>Vậy ch&uacute;ng ta cần học lập tr&igrave;nh như thế n&agrave;o?</strong></p> <p style="text-align: justify;">Th&ocirc;ng thường để học một ng&ocirc;n ngữ hay bất cứ một vấn đề g&igrave;, ch&uacute;ng ta đều th&ocirc;ng qua c&aacute;c bước như sau: biết về n&oacute;, nhớ n&oacute;, hiểu được n&oacute;, sử dụng n&oacute; v&agrave; s&aacute;ng tạo từ n&oacute;. Cũng tương tự như vậy, để học lập tr&igrave;nh hiệu quả ch&uacute;ng ta cũng cần:</p> <ul> <li style="text-align: justify;">Biết về n&oacute;: đ&acirc;y l&agrave; giai đoạn m&agrave; ch&uacute;ng ta cần phải biết c&oacute; một thứ như vậy: tức l&agrave; ng&ocirc;n ngữ lập tr&igrave;nh n&agrave;o đ&oacute;, v&agrave; c&aacute;c c&acirc;u lệnh của n&oacute; (chưa cần biết n&oacute; l&agrave;m g&igrave;) h&atilde;y đọc qua một lượt kh&ocirc;ng cần hiểu. Ở giai đoạn n&agrave;y ch&uacute;ng ta sẽ cần t&igrave;m c&agrave;ng nhiều đoạn code mẫu để g&otilde; lại c&agrave;ng tốt, c&oacute; thể g&otilde; lại cả một chương tr&igrave;nh n&agrave;o đ&oacute; rất d&agrave;i chẳng hạn. V&agrave; cố gắng sửa lỗi để chạy được n&oacute;, từng ch&uacute;t, từng ch&uacute;t một. Việc l&agrave;m lại v&agrave; tự cố gắng hiểu c&aacute;c lỗi, sửa lỗi của c&aacute;c chương tr&igrave;nh cũ sẽ l&agrave;m cho ch&uacute;ng ta kh&ocirc;ng gặp lại những lỗi như vậy khi lập tr&igrave;nh. Để thực hiện được bước n&agrave;y, bạn n&ecirc;n c&oacute; một người học c&ugrave;ng hoặc một chỗ để hỏi những lỗi sai v&agrave; sửa chữa xem tại sao ch&uacute;ng lại xuất hiện.</li> <li style="text-align: justify;">Nhớ n&oacute;: Việc tiếp theo l&agrave; nhớ n&oacute;. Trong giai đoạn n&agrave;y ch&uacute;ng ta sẽ nhớ một số chương tr&igrave;nh c&oacute; t&aacute;c dụng t&acirc;m đắc n&agrave;o đ&oacute;, v&iacute; dụ nhập văn bản, kiểm tra đầu v&agrave;o, kiểm tra số nguy&ecirc;n, chuyển đổi số nguy&ecirc;n, sắp xếp,...Việc n&agrave;y sẽ gi&uacute;p c&aacute;c bạn "code nhanh như m&aacute;y" gặp đoạn n&agrave;o cần l&agrave; c&oacute; thể code lại m&agrave; kh&ocirc;ng cần tham khảo, thậm ch&iacute; code tr&ecirc;n giấy m&agrave; kh&ocirc;ng gặp lỗi syntax. Một số trường h&agrave;ng đầu hiện nay vẫn thi thoảng cho sinh vi&ecirc;n thi lập tr&igrave;nh bằng code tr&ecirc;n giấy hay một số c&ocirc;ng ty phỏng vấn lập tr&igrave;nh vi&ecirc;n vẫn sẽ cho ứng vi&ecirc;n một v&agrave;i tờ giấy v&agrave; y&ecirc;u cầu viết ra lời giải cho một vấn đề g&igrave; đ&oacute; ở tr&ecirc;n giấy. Điều n&agrave;y cũng kh&ocirc;ng hẳn l&agrave; kh&ocirc;ng c&oacute; t&aacute;c dụng nhất định. Tất nhi&ecirc;n việc thực h&agrave;nh ngay tr&ecirc;n m&aacute;y vẫn tốt hơn cả, n&oacute; sẽ gi&uacute;p l&agrave;m quen với c&ocirc;ng cụ v&agrave; qu&aacute; tr&igrave;nh l&agrave;m việc thực tế hơn.</li> <li style="text-align: justify;">Hiểu về n&oacute;: Đ&acirc;y l&agrave; giai đoạn m&agrave; ch&uacute;ng ta đọc code của người kh&aacute;c v&agrave; phải hiểu được đoạn code đ&oacute; để l&agrave;m g&igrave;? Tại sao người ta lại l&agrave;m như vậy, liệu c&oacute; phương &aacute;n n&agrave;o l&agrave;m kh&aacute;c tốt hơn hay kh&ocirc;ng? Khi đ&atilde; hiểu bản chất v&agrave; tinh chỉnh, tối ưu được code của người kh&aacute;c th&igrave; bạn đ&atilde; bắt đầu l&ecirc;n được một tầm cao mới trong việc học lập tr&igrave;nh. Đến đ&acirc;y bạn đ&atilde; c&oacute; thể bắt đầu tung ho&agrave;nh ở nhiều dự &aacute;n thực tế kh&aacute;c nhau v&agrave; tr&ecirc;n đường tiến tới những thứ xa hơn.</li> <li style="text-align: justify;">Sử dụng n&oacute;: Đ&acirc;y l&agrave; giai đoạn m&agrave; ch&uacute;ng ta bắt đầu c&oacute; thể tự &aacute;p dụng những đoạn code m&agrave; ch&uacute;ng ta đ&atilde; hiểu, đ&atilde; nhớ để&nbsp; gh&eacute;p lại theo một c&aacute;ch n&agrave;o đ&oacute; để giải quyết một b&agrave;i to&aacute;n c&oacute; &yacute; nghĩa m&agrave; ch&uacute;ng ta tự nghĩ ra, hoặc ở đ&acirc;u đ&oacute;. Chẳng hạn, khi đi ra đường ch&uacute;ng ta nh&igrave;n thấy c&aacute;c đ&egrave;n giao th&ocirc;ng ở c&aacute;c ng&atilde; tư với số gi&acirc;y chờ kh&aacute;c nhau, ch&uacute;ng ta c&oacute; thể tự đặt ra cho m&igrave;nh một b&agrave;i to&aacute;n: "T&iacute;nh thời gian trung b&igrave;nh chờ đ&egrave;n đỏ cho mỗi tốc độ xe ch&uacute;ng ta chọn", v&agrave; cố gắng &aacute;p dụng những đoạn code m&agrave; ch&uacute;ng ta đ&atilde; đọc v&agrave; đ&atilde; hiểu. Hoặc đơn giản chỉ l&agrave; một b&agrave;i to&aacute;n giải phương tr&igrave;nh bậc 2, ch&uacute;ng ta cần c&oacute; lệnh rẽ nh&aacute;nh sau khi so s&aacute;nh điều kiện, t&iacute;nh to&aacute;n số học, t&iacute;nh căn,... v&agrave; gh&eacute;p ch&uacute;ng lại với nhau. Đa phần c&aacute;c b&agrave;i to&aacute;n tr&ecirc;n thực tế đều được giải bằng c&aacute;ch gh&eacute;p c&aacute;c b&agrave;i to&aacute;n con với lời giải nhỏ hơn.</li> <li style="text-align: justify;">S&aacute;ng tạo từ n&oacute;: Đ&acirc;y l&agrave; giai đoạn m&agrave; ch&uacute;ng ta đ&atilde; thăng hoa về chất, nghĩa l&agrave; ch&uacute;ng ta đ&atilde; bắt đầu c&oacute; thể tự nghĩ ra c&aacute;c thuật to&aacute;n. Đ&acirc;y l&agrave; giai đoạn thử th&aacute;ch với c&aacute;c b&agrave;i to&aacute;n thực tế v&agrave; kh&oacute; giải quyết.</li> </ul> <p>Nhưng chờ đ&atilde;, ch&uacute;ng ta b&igrave;nh thường vẫn học "gần" như thế m&agrave;. Tại sao lại vẫn kh&ocirc;ng hiệu quả?</p> <p style="text-align: justify;">Đ&uacute;ng vậy, b&igrave;nh thường ch&uacute;ng ta vẫn học "gần" như vậy, tuy nhi&ecirc;n c&oacute; 4 vấn đề xảy ra ở đ&acirc;y:</p> <ul> <li style="text-align: justify;">Thứ nhất, rất nhiều trong ch&uacute;ng ta "qu&ecirc;n" đi một v&agrave;i bước. C&oacute; người qu&ecirc;n "hiểu" c&aacute;c đoạn code, nghĩa l&agrave; chỉ đọc c&aacute;c đoạn m&atilde; v&agrave; nếu chia nhỏ được c&aacute;c b&agrave;i to&aacute;n th&igrave; sẽ cố gắng t&igrave;m kiếm c&aacute;c b&agrave;i to&aacute;n đ&oacute; tr&ecirc;n google hoặc stackoverflow v&agrave; đơn giản chỉ copy lại chứ kh&ocirc;ng chịu đọc kỹ để hiểu. Nhiều người kh&aacute;c, điển h&igrave;nh l&agrave; t&aacute;c giả b&agrave;i viết n&agrave;y, đ&atilde; bỏ qua giai đoạn biết v&agrave; nhớ tức l&agrave; h&uacute;c đầu v&agrave;o l&agrave;m lu&ocirc;n, tự suy nghĩ c&aacute;ch giải quyết vấn đề (v&agrave; tất nhi&ecirc;n nhiều l&uacute;c code rất tệ v&igrave; chắp v&aacute; suy nghĩ chứ kh&ocirc;ng chịu nghĩ c&aacute;ch chia nhỏ v&agrave; x&acirc;y dựng l&ecirc;n từ c&aacute;c code mẫu) v&agrave; đa phần th&igrave; bỏ qua bước cuối c&ugrave;ng l&agrave; s&aacute;ng tạo từ n&oacute;.</li> <li style="text-align: justify;">Thứ hai, ch&uacute;ng ta kh&ocirc;ng giải quyết c&aacute;c b&agrave;i to&aacute;n thực tế m&agrave; chỉ chăm chăm đi giải c&aacute;c b&agrave;i tập thi, điều n&agrave;y l&agrave;m cho ch&uacute;ng ta mất đi hứng th&uacute;, ch&uacute;ng ta kh&ocirc;ng hiểu học c&aacute;i m&ocirc;n n&agrave;y để l&agrave;m g&igrave;, v&agrave; sẽ mất đi c&aacute;i nh&igrave;n tổng quan, cảm thấy sợ h&atilde;i v&agrave; tự ti rằng ch&uacute;ng ta sẽ kh&ocirc;ng thể l&agrave;m được c&aacute;c phần mềm ứng dụng thực tế.</li> <li style="text-align: justify;">Thứ 3, trước khi code, ch&uacute;ng ta kh&ocirc;ng chịu suy nghĩ thiết kế m&agrave; bạ đ&acirc;u code đấy, cần đến đ&acirc;u chắp v&aacute; đến đấy, điều n&agrave;y gi&uacute;p ch&uacute;ng ta ăn xổi kh&aacute; nhanh, nhưng về l&acirc;u về d&agrave;i n&oacute; tạo ra th&oacute;i quen rất xấu v&agrave; thường tạo ra những sản phẩm rất tồi (trong trường hợp l&agrave;m được), v&agrave; điều n&agrave;y kh&ocirc;ng l&agrave;m tăng kinh nghiệm l&ecirc;n nhiều, ch&uacute;ng ta vẫn sẽ m&atilde;i dậm ch&acirc;n tại chỗ, đủ khả năng l&agrave;m ra một sản phẩm chơi chơi demo, hoặc một sản phẩm đầy lỗi, v&agrave; khi để l&agrave;m lại một ứng dụng c&oacute; chức năng gần tương tự ch&uacute;ng ta lại gần như bắt đầu lại từ đầu. Với c&aacute;ch l&agrave;m n&agrave;y, ch&uacute;ng ta chỉ l&agrave;m cho kinh nghiệm của ch&uacute;ng ta dừng lại ở một tr&igrave;nh độ nhất định.</li> <li style="text-align: justify;">Thứ 4, điều cuối c&ugrave;ng mắc phải đ&oacute; l&agrave; ch&uacute;ng ta v&ocirc; kỷ luật. Theo c&aacute;c nghi&ecirc;n cứu về hoạt động của n&atilde;o bộ chỉ ra rằng để tinh th&ocirc;ng trong bất cứ lĩnh vực g&igrave; ch&uacute;ng ta cần bỏ ra &iacute;t nhất 10.000 giờ luyện tập li&ecirc;n tục c&oacute; chủ đ&iacute;ch, tức l&agrave; luyện tập một c&aacute;ch đ&uacute;ng đắn trong thời gian đủ l&acirc;u d&agrave;i một c&aacute;ch li&ecirc;n tục. Ch&uacute;ng ta kh&ocirc;ng thể giỏi lập tr&igrave;nh chỉ sau 1,2 th&aacute;ng học bập bẹ sau đ&oacute; bỏ bẵng rồi lại học lại. Nếu kh&ocirc;ng c&oacute; luyện tập li&ecirc;n tục, ch&uacute;ng ta sẽ m&atilde;i bắt đầu học với b&agrave;i học vỡ l&ograve;ng, v&agrave; d&ugrave; c&oacute; t&iacute;ch g&oacute;p đủ 10.000 giờ th&igrave; cho đến cuối c&ugrave;ng vẫn chỉ thu được l&agrave; con số 0. Ch&uacute;ng ta sẽ m&atilde;i dừng lại nếu kh&ocirc;ng hoạt động li&ecirc;n tục. Ch&uacute;ng ta đi tr&ecirc;n một d&ograve;ng s&ocirc;ng chảy ngược, v&agrave; nếu kh&ocirc;ng đi li&ecirc;n tục m&agrave; dừng lại ch&uacute;ng ta sẽ bị cuốn trở lại v&agrave; lại bắt đầu từ đầu. V&agrave; d&ugrave; c&oacute; bắt đầu 10.000 lần nhưng dừng lại 9999 lần th&igrave; ch&uacute;ng ta vẫn ở vị tr&iacute; số 0.</li> </ul> <p style="text-align: justify;">T&oacute;m lại, để giỏi lập tr&igrave;nh kh&ocirc;ng c&oacute; con đường tắt, n&oacute; l&agrave; một qu&aacute; tr&igrave;nh phấn đấu v&agrave; nỗ lực kh&ocirc;ng ngừng nghỉ, nhưng điều quan trọng l&agrave; phải đ&uacute;ng c&aacute;ch. Đ&uacute;ng c&aacute;ch như thế n&agrave;o. Đ&uacute;ng c&aacute;ch l&agrave; khi ch&uacute;ng ta bỏ thời gian để ph&acirc;n t&iacute;ch m&atilde; nguồn của người kh&aacute;c v&agrave; m&atilde; nguồn của ch&iacute;nh m&igrave;nh sau c&aacute;c dự &aacute;n để xem ch&uacute;ng ta c&oacute; thể hiểu được ch&uacute;ng v&agrave; cải tiến được ch&uacute;ng hay kh&ocirc;ng. V&agrave; &iacute;t nhất để xem ch&uacute;ng ta đ&atilde; l&agrave;m được g&igrave;. Học từ c&aacute;c lỗi sai v&agrave; những thứ c&oacute; sẵn đồng thời ki&ecirc;n tr&igrave; li&ecirc;n tục s&aacute;ng tạo, ch&uacute;ng ta sẽ c&oacute; được những điều ch&uacute;ng ta muốn.</p> <p style="text-align: justify;">Đến đ&acirc;y, ch&uacute;ng ta tạm kết lại b&agrave;i n&agrave;y. Trong chuỗi b&agrave;i viết n&agrave;y, t&aacute;c giả sẽ cố gắng tr&igrave;nh b&agrave;y những g&igrave; nền tảng v&agrave; cơ sở nhất với những v&iacute; dụ dễ hiểu, chi tiết, ph&acirc;n t&iacute;ch để l&agrave;m nền tảng cho những người mới bắt đầu.</p> <p style="text-align: justify;">Trong b&agrave;i viết sau: "Học ng&ocirc;n ngữ lập tr&igrave;nh n&agrave;o cho người mới bắt đầu?" ch&uacute;ng ta sẽ t&igrave;m hiểu v&agrave; xem x&eacute;t một số ng&ocirc;n ngữ lập tr&igrave;nh phổ biến, những ưu điểm v&agrave; nhược điểm của n&oacute; để từ đ&oacute; chọn một ng&ocirc;n ngữ lập tr&igrave;nh cho bản th&acirc;n m&igrave;nh.</p> <p style="text-align: justify;">H&atilde;y tiếp tục theo d&otilde;i chuy&ecirc;n mục n&agrave;y v&agrave; để lại comment ph&iacute;a dưới nh&eacute;.</p>