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

Post by dangsonbk on 25-03-2019

Bài viết của Peter Norvig

Tại sao mọi người lại nôn nóng như vậy?

Bước vào hiệu sách, bạn sẽ dễ dàng bắt gặp những tựa sách như Tự học lập trình Java trong 24 giờ hay đại loại như tự học C, SQL, Ruby, giải thuật lập trình v.v... trong vài ngày hay vài giờ đồng hồ. Tìm kiếm trên Amazon cũng cho ra kết quả tới 512 cuốn sách như vậy. Trong 10 kết quả nổ bật nhất thì 9 kết quả là sách về lập trình. Một Kết luận có thể được đưa ra đó là mọi người đang rất vội vàng học để có thể lập trình, hoặc cũng có thể họ nghĩ lập trình dễ học hơn bất kỳ thứ gì khác. Felleisen và cộng sự đề cập về xu hướng này trong cuốn sách How to Design Programs của họ, nói rằng 'Lập trình cho vui thì rất dễ. Những kẻ ngốc có thể học nó trong 21 ngày, ngay cả khi họ bị đần độn'. Abtruse Goose cũng có một mẩu truyện tranh nói về vấn đề này.

Bây giờ, hay xem chúng ta có gì với 1 tựa sách kiểu Tự học C++ trong 24 giờ:

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 phải mất khoảng thời gian tới cả chục năm để có chuyên môn trong bất kỳ lĩnh vực nào, bao gồm chơi cờ, sáng tác nhạc, vận hành điện báo, vẽ tranh, chơi piano, bơi lội, quần vợt, cũng như nghiên cứu về khoa học thần kinh và cấu trúc liên kết. Chìa khóa là nghiên cứu, rèn rũa khả năng một cách có chủ ý: không chỉ thực hiện lặp đi lặp lại mà còn thử thách bản thân với những nhiệm vụ vượt quá khả năng hiện tại của bạn, thử nó, đánh giá những gì bạn làm sửa chữa bất kỳ điểm yếu nào. Rồi lại lặp lại. Và lặp lại nhiều lần nữa. Dường như không có con đường nào ngắn hơn: ngay cả Mozart, một thần đồng âm nhạc năm từ năm 4 tuổi, phải mất thêm 13 năm trước khi anh bắt đầu sản xuất âm nhạc đẳng cấp ở tầm thế giới. Ở một thể loại khác, The Beatles dường như bùng nổ tại hiện trường với chuỗi những bản hit đứng đầu và xuất hiện trong chương trình Ed Sullivan năm 1964. Nhưng thực sự thì họ đã chơi các câu lạc bộ nhỏ ở Liverpool và Hamburg từ năm 1957, và trong khi họ đã có được những thành công như trên thì thực sự thành công quan trọng đầu tiên của họ, Sgt. Peppers, được phát hành vào năm 1967.

Malcolm Gladwell cũng truyền bá ý tưởng này, mặc dù ông dành sự tập trung trong 10.000 giờ chứ không phải 10 năm. Henri Cartier-Bresson (1908-2004) có một diễn giải khác: "10.000 bức ảnh chụp đầu tiên của bạn là tệ nhất". Bạn (Ông không lường trước được rằng với máy ảnh kỹ thuật số, một số người có thể đạt được khả năng đó trong một tuần.) Để đạt chuyên môn trong một ngành nghề nào đó có thể mất trọn đời: Samuel Johnson (1709-1784) cho biết "Sự xuất sắc trong bất lĩnh vực nào chỉ có thể đạt được bằng lao động của cả cuộc đời; Nó không thể được đánh đổi với giá thấp hơn". Chaucer (1340-1400) đã phàn nàn về việc: "Đời thì quá ngắn mà sự học thì quá dài". Hipp Hippocrates (c. 400BC) nổi tiếng với trích dẫn "ars longa, vita brevis", là một phần của đoạn trích dẫn dài hơn "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", trong tiếng Anh ám chỉ: "Cuộc đời ngắn ngủi, nghệ thuật thì dài hơi, cơ hội chỉ thoáng qua, thực nghiệm đầy bất trắc, phán đoán chẳng bao giờ dễ dàng". Tất nhiên, không có con số nào có thể là câu trả lời cuối cùng: có vẻ không hợp lý khi cho rằng tất cả các kỹ năng (ví dụ: lập trình, chơi cờ, chơi cờ và chơi nhạc) đều có thể yêu cầu chính xác cùng một lượng thời gian để làm chủ, cũng không phải tất cả mọi người sẽ mất chính xác cùng một lượng thời gian. Như giáo sư K. Anders Ericsson đã nói, "Trong hầu hết các lĩnh vực, thời gian để ngay cả những cá nhân tài năng nhất cũng cần phải khổ luyện để đạt được thành quả luôn là một con số ấn tượng. Con số 10.000 giờ chỉ mang đến cho bạn cảm nhận chung chung rằng ta đang ám chỉ việc hàng năm ròng luyện tập vỡi 10 đến 20 giờ một tuần mà những cá nhân tài năng nhất dành ra cho việc luyện tập đến cấp độ cao nhất".

Latin English
Vīta brevis, ars longa, occāsiō praeceps, opportunity fleeting, experīmentum perīculōsum, iūdicium difficile. Life is short, and art long, experimentations perilous, and judgement difficult.

Bạn muốn trở thành Lập trình viên?

Đây là công thức thành công của Peter Norvig:

Peter Norvig: "Với tất cả những điều đó, bạn có thể nghi ngờ việc bạn có thể đi được bao xa chỉ bằng cách học sách. Trước khi đứa con đầu lòng của tôi chào đời, tôi đã đọc tất cả các cuốn sách cơ bản và vẫn cảm thấy như một người mới không biết gì. 30 tháng sau, khi đứa con thứ hai của tôi chào đợi, tôi có quay lại đọc sách để ôn lại không? Không. Thay vào đó, tôi dựa vào kinh nghiệm cá nhân của mình, điều này hóa ra hữu ích và yên tâm hơn nhiều so với hàng ngàn trang được viết bởi các chuyên gia. " Fred Brooks, trong bài tiểu luận No Silver Bullet đã xác định một kế hoạch gồm ba phần để tìm kiếm các nhà thiết kế phần mềm tuyệt vời:

Điều này giả định rằng một số người đã có những phẩm chất cần thiết để trở thành một lập trình viên tuyệt vời; công việc là hỗ trợ họ đúng cách. Alan Perlis nói ngắn gọn hơn: "Mọi người đều có thể được dạy điêu khắc: Michelangelo có thể đã được dạy cách để không biết gì về điều khắc. Trở thành lập trình viên tuyệt vời cũng vậy". Perlis đang nói rằng những người vĩ đại có một số phẩm chất bên trong vượt qua sự đào tạo của họ. Nhưng kết quả đến từ đâu? Có phải là bẩm sinh? Hay họ phát triển nó thông qua sự siêng năng? Như Auguste Gusteau (nhân vật đầu bếp hư cấu trong phim Ratatouille) nói, "bất cứ ai cũng có thể nấu ăn, nhưng chỉ có người không sợ hãi mới có thể trở nên tuyệt vời". Tôi nghĩ về nó nhiều hơn là sẵn sàng dành một phần lớn cuộc sống của một người để thực hành có chủ ý. Nhưng có lẽ không sợ hãi là một cách để tóm tắt điều đó. Hoặc, như nhà phê bình của Gusteau, Anton Ego, nói: "Không phải ai cũng có thể trở thành một nghệ sĩ vĩ đại, nhưng một nghệ sĩ vĩ đại có thể đến từ bất cứ đâu". Vì vậy, hãy tiếp tục và mua cuốn sách Java/Ruby/Javascript/PHP đó; bạn có thể sẽ học được thứ gì đó có ích từ chúng. Bạn sẽ không thay đổi cuộc sống của bạn, hoặc chuyên môn thực sự của bạn trong 24 giờ hoặc 21 ngày. Vậy thì làm việc chăm chỉ để liên tục cải thiện trong 24 tháng thì sao? Thực sự thì khi đó bạn bắt đầu đạt được một cột mốc nào đó ...

Phụ lục

Thời gian gần đúng cho các hoạt động khác nhau trên một PC điển hình:

Công việc Thời gian thực hiện
execute typical instruction 1/1,000,000,000s = 1 ns
fetch from L1 cache memory 0.5 ns
branch misprediction 5 ns
fetch from L2 cache memory 7 ns
Mutex lock/unlock 25 ns
fetch from main memory 100 ns
send 2K bytes over 1Gbps network 20,000 ns
read 1MB sequentially from memory 250,000 ns
fetch from new disk location (seek) 8,000,000 ns
read 1MB sequentially from disk 20,000,000 ns
send packet US to Europe and back 150 milliseconds = 150,000,000 ns

Phụ lục: Chọn ngôn ngữ lập trình

Một số người đã hỏi ngôn ngữ lập trình nào họ nên học trước. Không có câu trả lời cụ thể, nhưng hãy xem xét những điểm sau:
- Tham khảo bạn bè. Khi được hỏi "tôi nên sử dụng hệ điều hành nào, Windows, Unix hoặc Mac?", Câu trả lời của tôi thường là: "sử dụng bất cứ thứ gì bạn bè của bạn sử dụng". Lợi thế bạn có được từ việc học hỏi từ bạn bè sẽ bù đắp cho bất kỳ sự khác biệt nội tại nào giữa HĐH hoặc giữa các ngôn ngữ lập trình. Cũng xem xét những người bạn tương lai của bạn: cộng đồng lập trình viên mà bạn sẽ tham gia nếu bạn tiếp tục. Ngôn ngữ bạn chọn có một cộng đồng đang phát triển lớn hay một cộng đồng nhỏ đang hấp hối? Có sách, trang web và diễn đàn trực tuyến để nhận câu trả lời không? Bạn có thích những người trong các diễn đàn?
- Giữ cho nó đơn giản. Các ngôn ngữ lập trình như C ++ và Java được thiết kế để phát triển chuyên nghiệp bởi các nhóm lập trình viên lớn có kinh nghiệm, những người quan tâm đến hiệu quả thời gian chạy của mã của họ. Kết quả là, các ngôn ngữ này có các phần phức tạp được thiết kế cho các trường hợp này. Bạn quan tâm đến việc học lập trình. Bạn không cần sự phức tạp đó. Bạn muốn một ngôn ngữ được thiết kế để dễ học và dễ nhớ bởi một lập trình viên mới.
- Vui. Cách nào bạn muốn học chơi piano: bằng cách tương tác, nghe từng nốt ngay khi bạn nhấn phím hoặc chế độ "cả bài", nghe toàn bộ bài hát rồi nghe từng nốt? Rõ ràng, chế độ tương tác làm cho việc học đàn piano trở nên dễ dàng hơn, trong lập trình cũng vậy. Nhấn mạnh vào một ngôn ngữ với chế độ tương tác và sử dụng nó.

Đưa ra các tiêu chí này, các đề xuất của tôi cho ngôn ngữ lập trình đầu tiên sẽ là Python hoặc Scheme. Một lựa chọn khác là Javascript, không phải vì nó được thiết kế hoàn hảo cho người mới bắt đầu, mà bởi vì có rất nhiều hướng dẫn trực tuyến cho nó, chẳng hạn như hướng dẫn của Khan Academy. Nhưng hoàn cảnh của bạn có thể thay đổi, và có những lựa chọn tốt khác. Nếu tuổi của bạn là một chữ số, bạn có thể thích Alice hoặc Squeak hoặc Blockly (những người học lớn tuổi hơn cũng có thể thích những thứ này). Điều quan trọng là bạn chọn và bắt đầu.

tags: tu hoc lap trinh, tu hoc, lap trinh