Quảng Cáo

Cpm Affiliation : the cpm advertising network

Tự học lập trình trong 10 năm

Đây là quan điểm của Peter Norvig - GĐ trung tâm nghiên cứu của Google - về các loại sách "ăn xổi" bày bán ngoài thị trường hiện nay với những cái "tít" nghe rất ư là hứng khởi: "Tự học Java trong 7 ngày" hay "Học Visual C++.NET trong 24 giờ",v.v… Tất nhiên, mỗi người đều có động cơ và mục đích riêng khi học lập trình. Nhưng Peter cho rằng để trở thành một "expert programmer", bạn cần ít nhất 10 năm, và việc trông chờ vào những cuốn sách kiểu như trên để "thay da đổi thịt" là điều không tưởng.

Ý kiến dưới đây của Peter Norvig cũng đáng để mọi người cùng nhau thưởng thức và suy ngẫm:
Tại sao bây giờ người ta lại vội vàng đến như vậy?
Rảo bước quanh các cửa hàng sách, bạn sẽ thấy cái tựa: "Hướng dẫn lập trình Java trong 7 ngày" nằm bên cạnh một dãy dài vô tận những lời "đề nghị dạy học" đại loại như vậy về Visual Basic, Windows hay Internet… chỉ cần vài ngày hay vài giờ ngắn ngủi. Tôi đã thử thực hiện một tìm kiếm nâng cao tại Amazon.com:
pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
và nhận được 248 kết quả. 78 kết quả đầu tiên là sách về máy tính (cuốn thứ 79 là Learn Bengali in 30 days). Thử thay "days" bằng "hours", những gì thu được cũng hoàn toàn tương tự: 253 kết quả, với 77 kết quả đầu tiên là máy tính (cuốn thứ 78 là Teach Yourself Grammar and Style in 24 Hours). Khi 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ừ đây có thể rút ra 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 máy tính không hiểu vì một lí do hoang đường nào đó lại trở nên dễ học hơn những thứ khác". Chẳng có quyển sách nào hướng dẫn học Beethoven, Vật lý Lượng tử hay thậm chí là "chăm sóc cho chó" (Dog Grooming) chỉ trong có vài ngày. Felleisen và các đồng sự đồng tình với xu hướng này trong cuốn How to Design Programs, khi họ cho rằng "lập trình bẩn là rất dễ, những kẻ ngốc, thậm chí đần độn có thể học nó trong 24 giờ".
Hãy thử xem cái title: Learn C++ in Three Days gợi lên được điều gì:
Learn: Trong 3 ngày thậm chí bạn còn chưa đủ thời gian viết được một vài chương trình cho ra hồn chứ đừng nói đến việc học từ những thành công và thất bại. Bạn cũng không có cơ hội làm việc với những người có kinh nghiệm và hiểu xem cái gì đang xảy ra xung quanh mình. Nói tóm lại là bạn chẳng thể nào học cho cặn kẽ được. 3 ngày chỉ đủ để bạn làm quen với phần nổi bề ngoài, đó không phải sự thấu hiểu. Và như Alexander Pope đã từng nói: "Hiểu biết nông cạn còn nguy hiểm hơn kẻ mù chữ" (A little learning is a dangerous thing).
C++: Trong 3 ngày có thể bạn học xong cú pháp của C++ (nếu bạn đã thực sự biết một vài ngôn ngữ lập trình khác), nhưng bạn khó mà học được cách sử dụng chúng. Nói ngắn gọn, nếu bạn là một lập trình viên Basic, bạn có thể viết những chương trình theo phong cách Basic sử dụng cú pháp của Pascal, nhưng bạn sẽ chẳng hiểu được những ưu điểm hay nhược điểm của Pascal. Vậy quan điểm ở đây là gì? Alan Perlis (ND: giáo sư đại học Yale), trong Epigrams on Programming đã từng nói: "Một ngôn ngữ mà chẳng ảnh hưởng gì đến cách bạn tư duy về lập trình, ngôn ngữ ấy chỉ là đồ bỏ đi, không đáng để học". Có thể chấp nhận được nếu bạn chỉ định học đôi chút về Pascal (hoặc Visual Basic hay JavaScript) vì bạn chỉ cần làm quen với những công cụ có sẵn để làm một việc nào đó. Nhưng đấy không phải là bạn học ngôn ngữ để lập trình, bạn chỉ học để hoàn thành nhiệm vụ cụ thể của mình mà thôi.
Trong 3 ngày: Thật đáng tiếc, điều này là không thể, như tôi sẽ chỉ ra dưới đây.
Tự học lập trình trong 10 năm
Các nhà nghiên cứu (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) đã chỉ ra rằng cần ít nhất 10 năm để đạt được sự tinh thông trong nhiều lĩnh vực, từ đánh cờ, sáng tác âm nhạc, hội họa, bơi lội, tennis, hay thu được kết quả trong tâm lí thần kinh hay hình học topo. Điều quan trọng là bàn về phương pháp thực hành: không chỉ là việc lặp đi lặp lại đơn thuần, mà còn thử thách chính mình bằng những nhiệm vụ như vượt qua khả năng hiện tại của bản thân, cố gắng, phân tích hiệu xuất của mình trong và sau quá trình rèn luyện, và sửa chữa bất kỳ sai lầm nào. Cứ như vậy, lặp đi lặp lại. Và lịch sử đã chứng minh không thể có con đường tắt: dù cho đó là Mozart, thiên tài âm nhạc nảy nở từ năm lên 4 tuổi, cũng phải mất 13 năm để cho ra đời tác phẩm nhạc cổ điển đầu tiên. Dù cho đó là Beatles, trước khi xuất bản #1 đầu tiên vào năm 1964, họ cũng đã phải cặm cụi trong những câu lạc bộ nhỏ tại Liverpool hay Hamburg từ năm 1957, và trong khi họ có sức hấp dẫn đại chúng từ rất sớm, thành công quan trọng đầu tiên của nhóm là Sgt. Pepper, album được phát hành năm 1967. Malcolm Gladwell có bài báo nghiên cứu so sánh về các sinh viên tại Học viện âm nhạc Berlin trong ba nhóm tốt, khá và trung bình và hỏi họ đã thực hành chăm chỉ như nào:
Tất cả mọi người, từ tất cả ba nhóm, bắt đầu chơi ở cùng một khoảng thời gian – tầm khoảng năm tuổi. Trong những năm đầu tiên, tất cả mọi người thực hành một lượng như nhau – khoảng hai hoặc ba giờ một tuần. Nhưng tầm tám tuổi sự khác biệt thực sự bắt đầu xuất hiện. Các sinh viên trong nhóm tốt nhất, họ bắt đầu thực hành nhiều hơn những người khác: sáu giờ một tuần lúc chín tuổi, tám tuổi là 12 giờ, 16 giờ một tuần khi 14 tuổi, và tăng lên dần, cho đến tuổi 20 họ đã được tập luyện 30 giờ một tuần. 20 tuổi, nghệ sĩ ưu tú đã có tất cả 10.000 giờ thực hành trong cuộc sống của họ. Các sinh viên chỉ đơn thuần là tốt đã đạt 8.000 giờ, và giáo viên âm nhạc trong tương lai là hơn 4.000 giờ.
Vì vậy, có thể 10.000 giờ, chứ không phải 10 năm, là con số kỳ diệu. (Henri Cartier-Bresson (1908-2004) nói: "10.000 bức ảnh đầu tiên của bạn là tệ nhất", nhưng ông đã chụp nhiều hơn một bức trong một giờ.). Samuel Johnson (1709-1784) nghĩ rằng việc này thậm chí còn lâu hơn: "Sự vượt trội ở bất cứ lĩnh vực nào cũng chỉ có thể đạt được bằng lao động cật lực trong suốt cuộc đời, bạn không thể mua nó bằng một cái giá rẻ hơn". Và Chaucer (1340-1400) phàn nàn rằng: "Cuộc đời quá ngắn ngủi, trong khi những mánh khóe thì lại quá dài để có thể học được". Hippocrates (khoảng 400BC) được biết đến với các trích đoạn "ars longa, vita brevis", là một phần của chích đoạn dài hơn "Ars longa, vita brevis, occasio praeceps, periculosum experimentum, iudicium difficile", với nghĩa tạm dịch là "Cuộc đời là ngắn ngủi, với cơ hội phù du, đầy dãy các kỹ năng, với các thử nghiệm nguy hiểm, và phán quyết khó khăn". Mặc dù trong tiếng Latin, ars có thể có nghĩa là nghệ thuật, hoặc mánh khóe, nếu so từ gốc tiếng Hy Lạp "techne" thì chỉ có thể có nghĩa là "kỹ năng", không phải "nghệ thuật".
Và nếu bạn muốn trở thành lập trình viên, đây là công thức cho những thành công của tôi trong lập trình:
- Hãy yêu thích nó, bạn làm vì bạn cảm thấy vui vẻ và hào hứng. Hãy chắc chắn rằng bạn luôn như thế trong 10 năm…
- Hãy trao đổi với những lập trình viên khác, đọc chương trình của họ viết. Điều này còn quan trọng hơn bất kì quyển sách hay khóa đào tạo nào.
- Lập trình: Cách học tốt nhất là học đi đôi với hành (learning by doing). Nói cho rõ ràng hơn thì: "Tầm cao nhất của một lĩnh vực nào đó không thể có được chỉ thông qua sự bổ sung về mặt kinh nghiệm. Nhưng kể cả khi đã có rất nhiều kinh nghiệm, nếu cố gắng và nỗ lực, bạn vẫn có thể tiến xa hơn" và "để học tập một cách hiệu quả nhất, bạn cần phải xác định rõ khả năng hiện tại của mình, thu thập kiến thức từ người khác, và tự tìm lấy những cơ hội để học theo và sửa đổi sai lầm của chính mình". Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life là một cuốn sách rất hữu ích cho quan điểm này.
- Nếu bạn muốn, hãy giành 4 năm ở đại học (và nhiều hơn ở trường phổ thông). Bạn sẽ có cơ hội làm những công việc yêu cầu khả năng và hiểu biết chuyên sâu hơn trong một vài lĩnh vực, nhưng nếu bạn không thích trường học, bạn có thể (với một số sự nỗi lực và cống hiến) có được kinh nghiệm tương tự của riêng bạn hoặc trong công việc. Trong bất kì trường hợp nào, chỉ đọc sách thôi là chưa đủ. "Bút vẽ và mực màu không thể biến bạn trở thành họa sĩ, cũng như những bài giảng về khoa học máy tính trên lớp không thể giúp bạn trở thành chuyên gia lập trình", Eric Raymond, tác giả của The New Hacker Dictionary đã nói như vậy. Một trong những lập trình viên giỏi nhất mà tôi đã từng thuê chưa từng có bằng đại học, nhưng anh ta đã tham gia viết những phần mềm tuyệt vời (ví dụ), có news group của riêng mình và anh ta thậm chí còn giàu hơn cả tôi.
- Hãy tham gia vào các projects với những lập trình viên khác. Bạn có thể là best programmertrong một projects, nhưng cũng có thể là worst. Nếu là best, hãy thử khả năng làm leader của mình. Còn ngược lại, hãy học hỏi xem người giỏi nhất làm gì, và học xem họ không làm gì (vì họ muốn bạn làm những việc đó).
- Trong một project, hãy bắt tay làm việc sau những lập trình viên khác, khi bạn đã hiểu chương trình của họ. Hãy tìm xem những gì cần thiết để hiểu và chỉnh sửa khi người viết ra chương trình đó không có mặt ở đây. Thử nghĩ xem làm thế nào để thiết kế những chương trình giúp cho những người sau này có thể dễ dàng hơn trong việc bảo trì nó.
- Hãy học ít nhất khoảng nửa tá ngôn ngữ lập trình, bao gồm:
 + Một ngôn ngữ hỗ trợ việc tạo các lớp trừu tượng (Java hoặc C++)
 + Một ngôn ngữ lập trình hàm (Lisp hoặc ML)
 + Một ngôn ngữ cú pháp (Lisp)
 + Một ngôn ngữ hỗ trợ khai báo định danh (Prolog hoặc C++ templates)
 + Một ngôn ngữ hỗ trợ coroutine (Icon hay Scheme)
 + Một ngôn ngữ hỗ trợ song song (Sisal)
- Hãy nhớ rằng "máy tính" là một phần của "khoa học máy tính". Nên nắm rõ thời gian để máy tính thực hiện một chỉ thị, lấy một từ trong bộ nhớ (có hay không có cache), đọc những từ liên tiếp trong ổ đĩa, hay tìm kiếm một vùng nhớ cụ thể.
Thank for sharing!

About The Author


NamPNQ

Không biết viết gì ở đây :D

Quảng cáo