[Bài viết] Học lập trình thế nào cho hiệu quả?

Học lập trình thế nào cho hiệu quả?



Các bạn thân mến! Lập trình là một công việc thú vị nhưng không đơn giản. Vậy làm thế nào để học lập trình 1 cách tốt nhất? Tôi – một sinh viên trẻ, tất nhiên chưa có nhiều kinh nghiệm, song xin chia sẻ một vài suy nghĩ của tôi cũng như của những “đàn anh” đi trước.

I. TỪ NHỮNG QUYỂN SÁCH…

Ngày nay, Tin học đã trở thành 1 phần không thể thiếu trong cuộc sống. Với chiếc máy tính, ai cũng muốn có “chiếc đũa thần” để điều khiển nó theo ý mình. Đáp ứng nhu cầu của thị trường, hàng loạt các đầu sách tin học được xuất bản với rất nhiều nội dung phong phú, trong số đó có khoảng 30% số đầu sách dành cho Lập trình. Dạo qua các hàng sách, tôi đặc biệt chú ý tới các quyển sách có tên: “Tự học Java trong 7 ngày”, “Học Visual C trong 24 giờ” hay “Học Visual Basic trong 12 giờ”… Những đầu sách đó luôn thu hút chú ý của những bạn đọc, và luôn là những cuốn sách bán chạy nhất của các cửa hàng.

Peter Norvig, Giám đốc trung tâm nghiên cứu của Google Inc., đã thực hiện động tác tìm kiếm trên Amazon.com: pubdate: after 1992 and title: days and (title: learn or title: teach yourself) và nhận được 248 kết quả, 78 hits đầu tiên đều về máy tính (cuốn thứ 79 là: Learn Bengali in 30 days – Tự học tiếng Bang-gan trong 30 ngày). Khi thay “days” bằng “hours”, kết quả nhận được cũng tương tự: 254 kết quả, 77 hits đầu là sách về máy tính (cuốn thứ 79 là: Teach Yourself Grammar and Style in 24 hours – tự học ngữ pháp và phong cách trong 24 giờ (chắc là học Tiếng Anh)), vượt ra ngoài top 200, tất cả các cuốn sách đều là sách về máy tính. Từ đó, ông có kết luận “Hoặc là bây giờ người ta đổ xô đi tìm hiểu về máy tính, hoặc là máy tính không hiểu vì lý do hoang đường nào đó lại trở nên dễ học hơn những thứ khác”. Chẳng có cuốn sách nào hướng dẫn bạn soạn thảo bằng Microsoft Words trong vòng 24 giờ cả, vậy tại sao những cuốn sách đó vẫn bán chạy như vậy? Theo tôi, có 1 vài lý do:

• Từ người viết: Mặc dù mới ra đời, song hiện nay, số sách dạy tin học nhiều hơn rất nhiều số sách về các thể loại khác (có lẽ chỉ thua số lượng sách Toán học và Văn học). Tin học – một khoa học mới – không có quá nhiều kiến thức như Toán, không nhiều chủ đề như Văn... lại có 1 số lượng “fan” hâm mộ quá lớn, luôn yêu cầu học hỏi không ngừng. Vì thế, thiên hướng sách dạy Tin học hiện nay thường viết theo lối “dễ dãi”, “ăn liền”... Với số lượng sách sắp trở nên bão hòa, các tác giả phải biết chọn tên ấn tượng cho những quyển sách của mình, phù hợp với thị hiếu của độc giả. Có lẽ vì thế mà những cuốn sách dạy lập trình trong 1 tuần lễ, thậm chí là 1 ngày ra đời.

• Từ phía độc giả: Có lẽ độc giả ngày nay vội vã thật. Khoa học máy tính phát triển và có quá nhiều thứ để học, số lượng người học tin học ngày càng đông, chỉ cần “chậm” 1 chút là bị người khác bỏ xa ngay. Cũng có thể, họ cần học Lập trình gấp (như những sinh viên sắp đến kì thi chẳng hạn). Vì thế, độc giả luôn ưu thích những cuốn sách dạng “ăn liền” kiểu như vậy. Họ hài lòng vì có hiểu biết sơ sài về một ngôn ngữ lập trình hay có thể viết được một chương trình lạ mắt.

• Công nghệ: Từ khi ngôn ngữ C/C++ ra đời, người ta đã biết đến Lập trình hướng đối tượng. Ngày nay, công nghệ đã phát triển rất nhiều, các nhà cung cấp phần mền phát triển cũng không ngừng nâng cấp sản phẩm của mình theo xu hướng hỗ trợ cho lập trình viên môi trường làm việc tốt nhất: đơn giản và hiệu suất – tức là xa dần (thậm chí có thể bỏ qua) việc quan tâm tới máy tính và hệ điều hành. Trong đó, việc phát triển thư viện hàm mẫu (function template library) và các đối tượng (object) cùng với môi trường làm việc trực quan (visual display) được ưu tiên hơn cả. Chính vì thư viện hàm mẫu và thư viện đối tượng quá lớn được tích hợp trong môi trường đồ họa trực quan, công việc viết phần mền với lập trình viên đơn giản như “ăn kẹo”. Để làm 1 phần mền đơn giản, công việc của họ chỉ là “kéo và thả” (drap and drop), rồi viết những đoạn mã đơn giản.

Những lý do trên, theo tôi là những lý do khiến những cuốn sách trên vẫn nằm trên giá sách của nhiều người.

II… ĐẾN VIỆC TRỞ THÀNH LẬP TRÌNH VIÊN

Song song với những cuốn sách là một số lượng lớn những người “biết lập trình” nhưng không được coi là “lập trình viên” (programer) hay “chuyên gia lập trình” (expert programer).

Không thể có chuyện đọc xong 1 hay 2 quyển sách trong 1 vài tuần lễ (chứ đừng nói đến ngày hay giờ) mà có thể trở thành một lập trình viên. Trong 1 ngày, bạn không đủ thời gian để biết hết cách khai và báo và sử dụng thành thục các câu lệnh chứ đừng nói đến hiểu cấu trúc chương trình. Thư viện các hàm hỗ trợ là quá lớn để học trong 1 tuần lễ. Phải cần ít nhất 1 tháng để bạn viết được một chương trình tương đối khó. Có thể, những người học thêm một ngôn ngữ lập trình khi họ đã biết một số ngôn ngữ lập trình khác, điều đó sẽ thuận lợi hơn, rút ngắn được thời gian. Nhưng, trong 1 tháng, họ cũng không kịp bắt nhịp với lối tư duy của ngôn ngữ mới. Mỗi ngôn ngữ lập trình luôn ảnh hưởng đến lối tư duy của bạn. Lấy ví dụ, bạn đã học Lập trình Pascal, điều đó giúp bạn dễ dàng hơn khi tiếp cận C/C++, song với lối tư duy của Pascal, bạn không thể hiểu được thế nào là Hướng đối tượng và cách để sử dụng các hàm thừa kế.

Do đó, hãy kiên nhẫn vì để trở thành một lập trình viên không phải là chuyện đơn giản với thời gian học tập và làm việc được tính bằng ngày hay tháng.

Một lập trình viên chuyên nghiệp cần ít nhất 2 yếu tố:

• Biết cách giải quyết bài toán: Một chương trình được viết phải có mục đích rõ ràng. Dù viết một chương trình hay phần mềm (gọi chung là “dự án” – project) nhỏ, lập trình viên cũng cần giải quyết một hay nhiều bài toán cụ thể, số lượng bài toán tăng theo quy mô của project. Các bài toán này không đơn giản đứng tách biệt mà luôn gắn liền với “cấu trúc dữ liệu” (data structure ) , thực tế điều kiện của công nghệ hiên tại hay thực tế thiết bị sử dụng… Đây là điều rất quan trọng, quyết định trình độ của lập trình viên, và tất nhiên, không thể học trong thời gian ngắn.

• Biết cách thể hiện bài toán: Chính xác là “Biết cách thể hiện lời giải của bài toán bằng chương trình cụ thể”. Nếu chỉ biết “giải quyết bài toán”, bạn chỉ là một người nghiên cứu chứ không phải là một lập trình viên. Một lập trình viên cần thông thạo ít nhất một ngôn ngữ lập trình, biết cách sử dụng nó để thể hiện ý tưởng của mình. Trình độ của lập trình viên cũng tỉ lệ với trình độ sử dụng, khai thác phần mềm phát triển cũng như trình độ thể hiện và tối ưu mã lệnh lập trình của anh ta.

Nói chung, để trở thành một lập trình viên (programer) không phải là việc quá khó, song trở thành một chuyên gia lập trình (expert programer) là việc làm rất khó, đòi hỏi ta phải lao động cật lực trong thời gian dài. Ngòai 2 yếu tố trên, một chuyên gia lập trình cần phải có hiểu biết sâu sắc về hầu hết các lĩnh vực của Tin học. Tất nhiên, lao động liên tục vẫn là điều quan trọng nhất quyết định thành công, song, tôi xin giới thiệu một số kinh nghiệm của những người đi trước, có thể nó sẽ giúp ích cho bạn và cho tôi.

• Làm việc với niềm say mê: Không một ai thành công trong lĩnh vực mà họ không thích thú! Hãy chắc chắn rằng bạn luôn giữ được niềm đam mê Lập trình trong suốt thời gian dài từ…10 đến 20 năm. Các chuyên gia đã chỉ ra rằng, để đạt được thành công về một lĩnh vực, dù có là thiên tài, cũng cần từ 10 đến 20 năm. Với công việc Lập trình luôn vất vả, giữ được niềm đam mê trong suốt 1 thời gian dài là điều khó khăn, song hãy cố gắng để có thành công.

Học tập căn bản: Bạn nên dành hết thời gian học Đại học, thậm chí ngay cả khi học phổ thông, để học những điều cơ bản nhất. Trường đại học không dạy cho chúng ta tất cả, nhưng đó là nơi dạy cho chúng ta những điều cơ bản nhất, tạo cơ sở để nắm bắt những điều khác, mới mẻ hơn, hiện đại hơn. Hãy luôn nhớ: Không một môn khoa học tự nhiên nào là thừa cả. Lấy một ví dụ, những kiến thức của môn Giải tích và Đại số là cơ sở trong các phép tính xấp xỉ, hay các phép xử lý ảnh số… Môn Vật lý giúp chúng ta hiểu cách thức chuyển động của vật hay cách để chiếu sáng bề mặt của vật trong không gian… Đừng vội vàng chạy theo cách học “ăn liền”, cách học đó giúp chúng ta nhanh chóng vượt lên trên người khác về một mặt nào đó, nhưng lại rất khó để tiến xa hơn họ. Với những điều đơn giản, bạn dễ dàng nắm bắt được nó nhưng khi càng tiến xa hơn, những kiến thức yêu cầu một nền tảng vững chắc thì vấn đề của bạn trở nên khó khăn hơn nhiều. Thường thì khi đã “mất gốc”, người ta có 2 cách giải quyết: Hoặc cố gắng học lại để hiểu hoặc bỏ qua, thừa nhận và bắt chước. Cả hai việc đó đều khiến ta mất rất nhiều thời gian cũng như không thể hiểu biết sâu sắc được. Hãy nhìn cách đội tuyển thi Olimpic Tin học quốc tế của Trung Quốc chuẩn bị trước khi thi: học Tóan cùng đội tuyển Olimpic Toán. Và, thật khó để tìm được năm nào mà đội Olimpic Tin học của Trung Quốc không đạt 4 huy chương vàng.

• Học tập có tập trung: Nghe có vẻ mâu thuẫn với những lời trên nhưng đó là điều hợp lý. CNTT ngày càng phát triển mạnh mẽ với khối lượng kiến thức khổng lồ, bạn không thể nào chuyên sâu vào tất cả mọi lĩnh vực được. Công việc lập trình cũng vậy. Cố gắng học tất cả để hiểu những điều cơ bản, song bạn phải nhanh chóng lựa chọn cho mình một lĩnh vực để chuyên sâu (viết phần mềm, viết web…). Lựa chọn đó phải phù hợp với trình độ và, quan trọng hơn, là sở thích của bạn. Đừng chạy theo “mốt” cũng như theo số đông. Các phần mềm phát triển có đông người sử dụng sẽ có 1 cộng đồng mã nguồn mở đông hơn, được trợ giúp nhiều hơn, nhưng những điều đó cũng sẽ chẳng là gì nếu bạn không yêu thích nó.

• Học bằng các ví dụ: Việc học qua các ví dụ bao giờ cũng đơn giản hơn. Không những bạn được thấy những mớ lý thuyết khô khan trở thành thực tiễn như thế nào mà, những ví dụ và những sản phẩm luôn khiến bạn thích thú và nuôi dưỡng được niềm đam mê. Song, với mỗi ví dụ đọc được, hãy xem xét nó dưới nhiều góc độ, xem xét nó như 1 đối tượng để nghiên cứu và phát triển.

• Tích lũy kinh nghiệm: Bạn có bao giờ đặt câu hỏi: “Với nghề Lập trình vất vả, rõ ràng những người trẻ, có sức trẻ, có hiểu biết, có lợi thế hơn song những người dù đã nhiều tuổi vẫn được tin dùng?” Bởi vì họ có kinh nghiệm. Với một bài toán, có rất nhiều cách khác nhau để tiếp cận và đi đến lời giải. Với những người lâu năm trong nghề, kinh nghiệm cho họ thấy con đường con đường đi nhanh chóng hơn. Ngay từ bây giờ, hãy bắt đầu tích lũy cho mình những kinh nghiệm quý báu sau mỗi lần thành công hay thất bại. Một bài toán có nhiều cách giải, cũng như vậy, một chương trình có nhiều cách viết. Vậy, nếu bạn hoàn thành phần mềm một cách xuất sắc, hãy dành một chút thời gian nhìn lại, để thấy tại sao mình đã thành công, và có thể làm tốt hơn nữa không? Nếu chương trình chưa thành công, tìm hiểu nguyên nhân và cố tìm cách giải quyết nếu có thể. Việc đó giúp bạn tìm ra một bài toán mới và một kiến thức mới. Nếu có thể, hãy tham gia tất cả các cuộc thi Lập trình. Trước mỗi kì thi, bạn luôn phải học tập rất nhiều; sau đó, bạn lại có thêm kinh nghiệm. Các kì thi vừa là động lực giúp bạn học tập và phát triên vừa là nơi để bạn giao lưu, học hỏi, tích lũy thêm kinh nghiệm.

• Học hỏi từ những người xung quanh còn quý hơn rất nhiều những quyển sách quý. Những buổi thảo luận (hay tranh luận) đều mang lại cho bạn những điều bổ ích, bạn sẽ học được rất nhiều qua những lời nói đơn giản, chứ không phải là những mớ lý thuyết khó nhớ. Mặc dù việc đọc và hiểu các đoạn mã (source code) không phải của mình là việc làm khó. Song, bạn hãy cố giành thời gian làm việc đó. Nếu hiểu được người khác đã làm gì (và đã không làm gì) hay họ đã tối ưu mã như thế nào, bạn đã thành công. Trước khi học một ngôn ngữ lập trình nào, hãy xem những người xung quanh nhận xét gì về nó, ưu, nhược điểm của nó. Bởi, có thể, bạn sẽ làm việc với nó cả đời, chịu ảnh hưởng tư duy từ nó.

Trên đây, ngoài những ý kiến chủ quan của tôi, là kinh nghiệm của những chuyên gia hay chỉ là “người đi trước” – song họ đã thành công. Tôi đã rất sung sướng khi đọc được những kinh nghiệm quý báu này, và muốn chia sẻ nó với các bạn. Hy vọng các bạn sẽ tìm được những điều bổ ích trong bài viết này.

Sưu tầm