3 điểm bởi GN⁺ 2024-01-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kỹ năng lập trình không thể hình thành nhờ một cuốn sách nhập môn 24 giờ hay 21 ngày, và những gì đạt được qua việc học ngắn hạn phần lớn chỉ là sự quen thuộc hời hợt
  • Nghiên cứu về chuyên môn ở nhiều lĩnh vực như cờ vua, sáng tác, hội họa, bơi lội, nghiên cứu... cho thấy để đạt trình độ cao thường mất khoảng 10 năm, và cốt lõi không phải lặp lại đơn thuần mà là luyện tập có chủ đích
  • Để trở thành một lập trình viên giỏi, cần giữ được hứng thú, tự tay xây dựng sản phẩm, đọc mã của người khác, làm việc cùng người giỏi hơn và nhận phản hồi
  • Giáo dục đại học và sách vở có thể bổ sung về bằng cấp, tính hệ thống và chiều sâu, nhưng không thể thay thế trải nghiệm sửa lỗi và bảo trì trong các dự án thực tế
  • Khi chọn ngôn ngữ đầu tiên, có thể dựa vào bạn bè và cộng đồng, tính đơn giản, cùng môi trường thực thi tương tác; điều quan trọng là chọn một thứ và bắt đầu đều đặn

Giới hạn của lời hứa học lập trình trong thời gian ngắn

  • Trong hiệu sách và trên mạng có rất nhiều sách hứa dạy Java, C, SQL, Ruby, thuật toán... chỉ trong vài ngày hoặc vài giờ
    • Trong tìm kiếm nâng cao của Amazon, các sách xuất bản từ năm 2000 trở đi có cụm teach yourself hours trong tiêu đề cho ra 512 cuốn, và 9 trong 10 cuốn đứng đầu là sách lập trình
    • Nếu thay teach yourself bằng learn hoặc thay hours bằng days thì kết quả cũng tương tự
  • Những tiêu đề kiểu này tạo cảm giác rằng mọi người đang cố học lập trình thật gấp, hoặc rằng lập trình dễ học hơn rất nhiều so với các lĩnh vực khác
  • How to Design Programs của Felleisen và cộng sự châm biếm trào lưu này bằng ý như: “Lập trình tệ thì dễ. Người ngốc cũng có thể học trong 21 ngày”

“Teach Yourself C++ in 24 Hours” thực sự có thể có nghĩa gì

  • Teach Yourself

    • Trong 24 giờ không có đủ thời gian để viết nhiều chương trình có ý nghĩa, học từ thành công và thất bại, làm việc cùng các lập trình viên giàu kinh nghiệm, và hiểu việc sống trong môi trường C++ thực sự là như thế nào
    • Vì vậy, điều có thể đạt được không phải là hiểu sâu mà gần hơn với sự quen tay hời hợt
  • C++

    • Nếu đã biết ngôn ngữ khác, bạn có thể học một phần cú pháp C++ trong 24 giờ
    • Nhưng rất khó để học được C++ phù hợp với việc gì, không phù hợp với việc gì, và thực tế nên dùng ngôn ngữ này như thế nào
    • Như Alan Perlis từng nói: “Một ngôn ngữ không làm thay đổi cách bạn nghĩ về lập trình thì không đáng để biết”
  • 24 Hours

    • Bạn có thể học một chút C++, JavaScript hoặc Processing để kết nối với một công cụ cụ thể
    • Trong trường hợp đó, thứ bạn học gần hơn với cách hoàn thành một tác vụ cụ thể chứ không phải bản thân lập trình

Chuyên môn cần thời gian

  • Các nghiên cứu của Bloom, Bryan & Harter, Hayes, Simon & Chase... cho thấy việc hình thành chuyên môn trong nhiều lĩnh vực thường mất khoảng 10 năm
    • Các lĩnh vực ví dụ gồm cờ vua, sáng tác, điện báo, hội họa, piano, bơi lội, quần vợt, nghiên cứu thần kinh tâm lý học và tô pô học
  • Cốt lõi không phải lặp lại đơn thuần mà là luyện tập có chủ đích (deliberative practice)
    • Chọn các nhiệm vụ khó hơn một chút so với năng lực hiện tại
    • Phân tích kết quả trong khi làm và sau khi làm
    • Sửa sai rồi lặp lại
  • Mozart là thần đồng âm nhạc từ năm 4 tuổi, nhưng vẫn cần thêm 13 năm nữa để tạo ra âm nhạc đẳng cấp thế giới
  • Beatles được chú ý vào năm 1964 nhờ chương trình Ed Sullivan và các ca khúc đứng đầu bảng xếp hạng, nhưng từ năm 1957 họ đã biểu diễn ở các câu lạc bộ nhỏ tại Liverpool và Hamburg, còn Sgt. Pepper’s - tác phẩm thành công lớn về mặt phê bình - ra mắt năm 1967
  • Malcolm Gladwell đã phổ biến cụm 10.000 giờ, nhưng điều quan trọng ở đây không phải con số chính xác mà là sự rèn luyện bền bỉ qua nhiều năm
  • Với K. Anders Ericsson, 10.000 giờ là con số giúp hình dung rằng ngay cả người có năng khiếu cũng cần dành 10~20 giờ mỗi tuần trong nhiều năm để đạt đỉnh cao
  • Không thể có một con số duy nhất trả lời mọi thứ
    • Khó có thể cho rằng lập trình, cờ vua, cờ đam và âm nhạc đều đòi hỏi đúng cùng một lượng thời gian
    • Cũng khó cho rằng mọi người học với tốc độ giống nhau

Cách thực hành để trở thành lập trình viên

  • Cần cảm thấy hứng thú với lập trình và bắt đầu vì niềm vui
    • Niềm vui đó phải đủ để duy trì việc đầu tư 10 năm hoặc 10.000 giờ
  • Phải tự mình lập trình
    • Cách học tốt nhất là học thông qua thực hành
    • Việc học hiệu quả cần những bài toán rõ ràng với độ khó phù hợp từng cá nhân, phản hồi hữu ích, cùng cơ hội lặp lại và sửa lỗi
  • Cần trò chuyện với các lập trình viên khác và đọc các chương trình do người khác viết
    • Điều này quan trọng hơn bất kỳ cuốn sách hay khóa học nào
  • Nếu muốn, bạn có thể dành 4 năm ở đại học hoặc học tiếp lên cao học
    • Bằng cấp có thể giúp tiếp cận các nghề đòi hỏi chứng chỉ và mang lại hiểu biết sâu về lĩnh vực
    • Nếu không thích trường lớp, bạn vẫn có thể tự mình hoặc học tại nơi làm việc để đạt trải nghiệm tương tự bằng sự tận tâm
    • Chỉ học từ sách là không đủ
  • Cần làm dự án chung với các lập trình viên khác
    • Ở một số dự án, bạn có thể là người giỏi nhất để thử thách năng lực lãnh đạo và tầm nhìn
    • Ở dự án khác, bạn có thể là người yếu nhất để học người lành nghề làm gì và tránh làm gì
  • Cần xử lý các dự án hiện có sau khi những lập trình viên khác đã rời đi
    • Bạn sẽ học được cần gì để hiểu và sửa chương trình do người khác viết
    • Bạn cũng sẽ phải nghĩ về cách thiết kế cho người sẽ bảo trì sau này

Kinh nghiệm rộng với ngôn ngữ và hệ thống

  • Nên học ít nhất sáu ngôn ngữ lập trình
    • Ngôn ngữ nhấn mạnh trừu tượng lớp: Java, C++
    • Ngôn ngữ nhấn mạnh trừu tượng hàm: Lisp, ML, Haskell
    • Ngôn ngữ hỗ trợ trừu tượng cú pháp: Lisp
    • Ngôn ngữ hỗ trợ đặc tả khai báo: Prolog, C++ templates
    • Ngôn ngữ nhấn mạnh tính song song: Clojure, Go
  • Hãy nhớ rằng trong “computer science” có chữ computer
    • Cần biết các khoảng thời gian liên quan đến việc thực thi lệnh, lấy một từ từ bộ nhớ, cache miss, đọc tuần tự trên đĩa, seek trên đĩa...
  • Tham gia vào hoạt động chuẩn hóa ngôn ngữ cũng có ích
    • Có thể là hoạt động lớn như ủy ban ANSI C++, hoặc nhỏ như quyết định trong coding style cục bộ rằng nên thụt lề 2 hay 4 dấu cách
    • Bạn có thể học được người khác thích điều gì ở một ngôn ngữ và vì sao họ cảm nhận mạnh như vậy
  • Trong hoạt động chuẩn hóa cũng cần có sự tỉnh táo để rút lui càng sớm càng tốt khi cần

Chỉ sách và giáo dục là không đủ

  • Dù đọc nhiều sách về nuôi dạy con, khi đứa con đầu lòng chào đời bạn vẫn có thể thấy mình như người mới bắt đầu; đến khi đứa con thứ hai ra đời, bạn có xu hướng dựa vào kinh nghiệm cá nhân hơn là quay lại sách
  • No Silver Bullet của Fred Brooks đề xuất một kế hoạch ba phần để tìm ra những nhà thiết kế phần mềm xuất sắc
    • Xác định một cách có hệ thống những nhà thiết kế giỏi nhất càng sớm càng tốt
    • Chỉ định một người cố vấn nghề nghiệp chịu trách nhiệm cho sự phát triển của họ và quản lý hồ sơ nghề nghiệp
    • Tạo cơ hội để các nhà thiết kế đang trưởng thành giao lưu và kích thích lẫn nhau
  • Alan Perlis nói: “Ai cũng có thể học điêu khắc, nhưng với Michelangelo thì có lẽ phải dạy ông cách không điêu khắc”
  • Những lập trình viên xuất sắc có thể có các đặc điểm nội tại vượt lên trên huấn luyện, nhưng không thể khẳng định đó là bẩm sinh hay được phát triển nhờ chăm chỉ
  • Sách về Java, Ruby, JavaScript, PHP có thể hữu ích, nhưng không thể thay đổi cuộc đời hay toàn bộ trình độ chuyên môn chỉ trong 24 giờ hay 21 ngày
  • Làm việc chăm chỉ để không ngừng cải thiện trong 24 tháng là một điểm khởi đầu có ý nghĩa

Cảm nhận về thời gian hoạt động của máy tính

  • Trên một PC thông thường, thời gian xấp xỉ của nhiều tác vụ như sau
    • Thực thi lệnh thông thường: 1 nano giây
    • Lấy từ bộ nhớ cache L1: 0,5 nano giây
    • Dự đoán nhánh sai: 5 nano giây
    • Lấy từ bộ nhớ cache L2: 7 nano giây
    • Khóa/mở khóa mutex: 25 nano giây
    • Lấy từ bộ nhớ chính: 100 nano giây
    • Gửi 2KB qua mạng 1Gbps: 20.000 nano giây
    • Đọc tuần tự 1MB từ bộ nhớ: 250.000 nano giây
    • Seek đến vị trí mới trên đĩa: 8.000.000 nano giây
    • Đọc tuần tự 1MB từ đĩa: 20.000.000 nano giây
    • Vòng khứ hồi gói tin giữa Mỹ và châu Âu: 150 mili giây, tức 150.000.000 nano giây

Tiêu chí chọn ngôn ngữ lập trình đầu tiên

  • Không có một đáp án đúng duy nhất cho ngôn ngữ đầu tiên
  • Có thể lấy bạn bè và cộng đồng làm tiêu chí
    • Điều này giống như lời khuyên khi chọn hệ điều hành: hãy dùng thứ mà bạn bè bạn dùng
    • Lợi ích của việc có thể học từ bạn bè có thể bù đắp cho khác biệt của chính hệ điều hành hay ngôn ngữ đó
    • Cũng nên cân nhắc xem ngôn ngữ đã chọn có cộng đồng đang phát triển, sách, website và diễn đàn trực tuyến hay không
  • Tính đơn giản là quan trọng
    • C++ và Java được thiết kế để các lập trình viên nhiều kinh nghiệm phát triển chuyên nghiệp trong các nhóm lớn, và có những phần phức tạp để tính đến hiệu năng thực thi
    • Người mới bắt đầu không cần sự phức tạp đó
  • Môi trường thực thi tương tác giúp việc học dễ hơn
    • Điều này giống như học piano: nghe âm thanh ngay khi nhấn phím sẽ dễ học hơn cách phải chờ đến khi chơi xong cả bản nhạc mới được nghe
    • Trong lập trình cũng vậy, các ngôn ngữ cung cấp chế độ tương tác có lợi thế
  • Theo các tiêu chí này, Python hoặc Scheme được khuyến nghị là ngôn ngữ đầu tiên
  • JavaScript có thể là một lựa chọn không phải vì nó được thiết kế hoàn hảo cho người mới, mà vì có rất nhiều hướng dẫn trực tuyến
  • Người học ở độ tuổi một chữ số có thể thích Alice, Squeak, Blockly, và người học lớn tuổi hơn cũng có thể thấy thú vị
  • Điều quan trọng là chọn một thứ và bắt đầu

Sách và tài liệu được khuyến nghị

  • Chỉ sách thôi là không đủ, nhưng các tài liệu sau có thể giúp ích cho việc học
  • Structure and Interpretation of Computer Programs

  • How to Design Programs

    • How to Design Programs là một trong những cuốn sách hay viết về cách thiết kế chương trình thực sự theo phong cách thanh lịch và hàm với Scheme
  • Python

  • Oz

    • Concepts, Techniques, and Models of Computer Programming được một số người xem là người kế thừa hiện đại của Abelson & Sussman
    • Cuốn sách bao quát rộng các ý tưởng lớn trong lập trình, và dù dùng Oz - một ngôn ngữ không quá phổ biến - nó vẫn có thể trở thành nền tảng để học các ngôn ngữ khác

1 bình luận

 
GN⁺ 2024-01-16
Các ý kiến trên Hacker News
  • Năm 1999, tôi mua "Sams Teach Yourself C++ in 24 Hours" ở CompUSA; nhân viên thu ngân nhìn thấy, bật cười rồi chỉ cho tôi bài viết này.
    Năm 16 tuổi, khi tôi đang xem sách lập trình ở Borders, có người đưa cho tôi cuốn "The C Programming Language", và nó đã thay đổi cuộc đời tôi.
    Một phần đáng kể sự nghiệp của tôi được định hình nhờ tình cờ gặp các lập trình viên hoặc những người quan tâm đến lập trình ngoài đời thực.

    • Một số cuốn trong những loại sách đó tệ đến mức buồn cười, nhưng vào thời ấy, một cuốn sách giống như chiếc chìa khóa khởi đầu giúp biến ý tưởng chương trình kỳ quặc trong đầu thành thứ có thể thật sự làm ra.
      Lần cuối tôi có cảm giác như vậy là khi bước ra khỏi Microcenter với một chiếc MacBook mới và iPod Touch, cảm thấy mình đã sẵn sàng tạo ra Angry Birds tiếp theo.
    • Cuốn sách thay đổi đời tôi là sổ tay BASIC đi kèm chiếc C64.
      Khoảng 8 năm sau, khi mua Turbo Pascal, trong đó cũng có đủ tài liệu cần thiết nên tôi có thể học rất nhanh; và khi bắt đầu dùng Linux năm 1995, chỉ với man page và tài liệu info, tôi đã học được gần như mọi thứ cần thiết để lập trình trên hệ thống đó.
      Tôi cũng còn nhớ việc đọc sổ tay EGCS từ đầu đến cuối vào cuối thập niên 90.
      Tôi nhớ thời phần mềm cung cấp kèm toàn bộ thông tin cần thiết, và thấy tiếc cho cách hiện nay phải lục Google để tìm trang sản phẩm hay tài liệu hướng dẫn.
      Có lẽ khoảng 5 năm nữa, khi thông tin liên quan chỉ được đăng trên Discord và không được lập chỉ mục, chúng ta thậm chí sẽ nhớ cả tìm kiếm Google từng được dùng thay cho manual.
      Đầu những năm 2000, tôi cũng học lập trình socket trên Linux và FreeBSD chỉ bằng man page; về sau khi đọc sách của Stevens, nhờ man page và kinh nghiệm viết vài chương trình trước đó, tôi có thể đọc rất nhanh.
    • Điểm khởi đầu của tôi là cuốn "Visual Basic Professional 3.0 Programming by Thomas W. Torgerson" mua ở Barnes and Nobles năm 1997.
      Tôi muốn học cách tải Visual Basic 3.0 trên AOL dưới dạng 100 tệp đính kèm email để làm punter/prog.
      Tôi chép mã trong sách để phát một tệp âm thanh khi chương trình khởi động, và khi nó thật sự chạy, tôi đã rất kinh ngạc.
      Sau đó, việc có thể xây dựng sự nghiệp trong phát triển phần mềm là một vinh dự lớn.
    • Đừng cười khi thấy một bé gái ở kệ sách lập trình.
      Vào thập niên 90, thay vì lời khuyên, việc chỉ nhận lại phản ứng không tin nổi là khá phổ biến.
    • Tôi có thể khẳng định đến cùng rằng "The C Programming Language" là cuốn sách về ngôn ngữ lập trình hay nhất tôi từng đọc.
      Mọi lập trình viên nên đọc và học C cùng K&R ít nhất một lần, dù rồi sau đó có nhanh chóng quên C đi nữa.
  • Bài viết này có ý nghĩa đặc biệt với cá nhân tôi, vì tôi đọc nó lần đầu khi còn là thiếu niên mới bắt đầu học code.
    Đọc lại, tôi ngạc nhiên khi thấy Malcolm Gladwell được nhắc tới, vì tôi nhớ Outliers chỉ trở thành chủ đề nóng muộn hơn nhiều.
    Đến khi thấy nhắc tới Ratatouille, tôi mới biết bài viết đã được cập nhật sau khi đăng năm 1998; bản gốc vẫn còn trong kho lưu trữ và ngắn hơn nhiều: https://web.archive.org/web/19980206223800/https://norvig.co...
    Việc Peter Norvig tiếp tục chỉnh sửa bài viết của mình trong nhiều năm là điều đáng trân trọng.

    • Có lẽ vì hồi trung học tôi bị giao đọc Gladwell nên đến giờ vẫn không thích ông ấy lắm.
      Ông ấy được trích dẫn quá thường xuyên, và quy tắc 10.000 giờ giờ đây cảm giác chỉ như một meme.
    • Tôi nhớ lại hình ảnh mình 10 năm trước, đang đọc bài này trong phòng máy của thư viện đại học.
      Giờ thì tôi đã tự học lập trình, nhưng hành trình đó khó khăn và ngoằn ngoèo hơn rất nhiều so với những gì tôi tưởng tượng lúc ấy.
    • Trước "Outliers" cũng đã có "The Tipping Point" và "Blink".
  • Tôi cũng thuộc kiểu học bằng sách, nhưng thái độ đó thường phù hợp hơn với các lĩnh vực phi điện toán thay đổi chậm như toán học và vật lý.
    Một ví dụ không hay gần đây là cuốn Quantum Programming của O'Reilly, nó không đi đủ chi tiết về mạch lượng tử để tôi thật sự hiểu mình đang làm gì.
    Tuy vậy, đó cũng có thể là sự thổi phồng của chính điện toán lượng tử; cuốn Nielsen/Chuang tôi đang đọc hiện rất lý thuyết nhưng giải thích cực kỳ rõ ràng, nên có thể sau này tôi sẽ quay lại.
    Sách chỉ là công cụ học tập, và các dự án sở thích, nhờ tích lũy kinh nghiệm, thậm chí có thể là công cụ học hiệu quả hơn.
    Dù vậy, tri thức là sức mạnh, và sách rất tuyệt trong việc giúp bạn đi đúng hướng, với điều kiện bạn đã tìm được cuốn phù hợp với nhu cầu của mình.
    Tôi biết có những người nếu không chắc mình có thể đọc hết một cuốn sách thì thậm chí không mở nó ra; tôi cho rằng thái độ đó thật vô lý.
    Tôi vừa đặt mua cuốn Generative Deep Learning của O'Reilly, và chỉ cần nhặt được vài mảnh có thể dùng trong sự nghiệp là đã đủ lời rồi.
    Ít nhất thì nó sẽ trông đẹp trên giá sách.

    • Các nguyên lý nền tảng không thay đổi.
      Tuần nào cũng có framework frontend mới xuất hiện, nhưng rốt cuộc tất cả đều tạo ra HTML.
  • Đây là các thread trải dài 16 năm
    Bài đăng lại thì sau khoảng 1 năm là ổn, còn các liên kết tới thread cũ là dành cho độc giả muốn tìm hiểu thêm
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=33287618 - tháng 10/2022, 112 bình luận
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=27411276 - tháng 6/2021, 115 bình luận
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=20543495 - tháng 7/2019, 87 bình luận
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=16574248 - tháng 3/2018, 51 bình luận
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=9395284 - tháng 4/2015, 61 bình luận
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=5519158 - tháng 4/2013, 86 bình luận
    Teach Yourself Programming in Ten Years by Peter Norvig (2001) - https://news.ycombinator.com/item?id=3439772 - tháng 1/2012, 29 bình luận
    Teach Yourself Programming in 10 Years. - https://news.ycombinator.com/item?id=1060176 - tháng 1/2010, 32 bình luận
    Teach Yourself Programming in Ten Years - https://news.ycombinator.com/item?id=191235 - tháng 5/2008, 19 bình luận
    Norvig: Teach Yourself Programming in Ten Years - https://news.ycombinator.com/item?id=43243 - tháng 8/2007, 7 bình luận

    • Tôi tò mò liệu những người đã bình luận trong giai đoạn 2007–2013 có thể chia sẻ những gì họ đã học được trong 10 năm qua không
    • Giá mà có cách thông báo các thread cũ trước khi đăng bài thì tốt
    • Tôi không rõ đây là lời phê phán rằng bài này được đăng lại quá nhiều, hay là ý nói trùng lặp khoảng mỗi năm một lần thì vẫn lành mạnh
  • Thật ấn tượng là liên kết Amazon.com cũ trên trang, dù kèm cả các tham số truy vấn khá phức tạp, đến nay vẫn trả về kết quả liên quan
    Đây là một ví dụ hay cho câu “Cool URIs don't change”
    [0] http://www.amazon.com/gp/search/ref=sr_adv_b/?search-alias=s...
    [1] https://www.w3.org/Provider/Style/URI

    • Thú vị là liên kết Amazon đó lại trả về lỗi với tôi
  • Tôi đã gặp khá nhiều người hỏi làm thế nào để có được một công việc lập trình ở công ty hoặc ở nơi khác
    Khi tôi kể về con đường của mình — bắt đầu học từ nhỏ, coi đó là sở thích lớn, rồi học bằng khoa học máy tính và thực tập — họ ngạc nhiên và thất vọng vì không có con đường nhanh
    Hay là có con đường nhanh? Tôi tò mò liệu có ai đã hoàn thành thành công một bootcamp đi từ 0 lên 1 không

    • Tôi tốt nghiệp bootcamp và đã lập trình chuyên nghiệp được 8 năm
      Tôi từng học vài lớp lập trình cho vui ở trung học và đại học, nhưng kiến thức rất hạn chế
      Bootcamp đó đúng như tên gọi, giờ học cơ bản là 9 giờ sáng đến 5 giờ chiều, nhưng nhiều người đến lúc 7 giờ sáng và rời đi lúc 10 giờ tối
      Cuối tuần cũng đến, đôi khi chỉ nghỉ Chủ nhật
      Tôi cố tình chọn bootcamp ở một thành phố khác để đời sống xã hội không làm mình xao nhãng
      Chương trình tập trung vào Ruby và JavaScript, và vài tháng sau khi tốt nghiệp tôi kiếm được việc thực tập C#/.NET
      Vì nghĩ sẽ khó thuyết phục họ nhận mình ngay vào vị trí developer junior, tôi chọn thực tập, rồi được thăng lên developer junior sau 2 tuần
      Trường đó đã biến mất sau khi bị Kaplan mua lại
    • Những người thành công nhờ bootcamp đều hoặc là vốn đã rất thông minh, hoặc xuất thân từ nền tảng kỹ thuật/toán cao cấp
    • Tôi bỏ ngành khoa học máy tính sau 3 tháng, và trước đó chưa từng lập trình
      Tôi tự học các nền tảng JavaScript trong 8 tháng ở tầng hầm nhà mẹ và đã có thể kiếm được việc
      Sau đó tôi đổ cực kỳ nhiều thời gian vào lập trình, đến nay đã vượt quá hàng chục nghìn giờ
      Tôi đã làm với compiler, đồ họa 3D, bán dẫn và game engine
      Trải nghiệm của tôi có vẻ ủng hộ cả hai phía
      Khoảng năm 2012, có thể bước vào ngành tương đối dễ dù ít kinh nghiệm, nhưng sau đó để trở thành một kỹ sư giỏi mà những người có dự án thú vị muốn tuyển thì cần nỗ lực khổng lồ
    • Tôi từng tuyển người xuất thân từ bootcamp, nhưng bản thân chưa từng học bootcamp
      Dựa trên dữ liệu hạn chế, cũng giống như developer được đào tạo truyền thống, đây là chuyện hên xui
      Kết quả tốt nhất là những người được đào tạo theo các ngành kinh điển như vật lý, hóa học, kỹ thuật muốn chuyển nghề; họ gần với junior cao cấp có đường cong học tập nhanh
      Nếu muốn đưa một người mới có động lực vào các mảng phần mềm mà lập trình thuần túy không quá quan trọng, đó có thể là một tuyển dụng tuyệt vời
      Độ lệch chuẩn lớn, nhưng tôi không chắc có lớn hơn so với người tốt nghiệp cao đẳng 2 năm hay không
    • Tôi đã trải qua một chương trình cho sinh viên mới tốt nghiệp của một công ty tư vấn: họ đào tạo 3 tháng rồi làm việc theo hợp đồng 2 năm
      Ở đại học tôi học nhân văn và chưa từng code
      Hai năm đầu thật sự rất vất vả; vì không có nền tảng nên tôi luôn có cảm giác như đang bơi ngược dòng
      Chỉ đến gần cuối chương trình 2 năm tôi mới cảm thấy mình có thể tạo ra giá trị một cách độc lập
      Kiến thức của tôi khá thiên về ứng dụng, và vì thiếu nền tảng khoa học máy tính nên đôi khi khó hơn vì phải vừa làm vừa học các kiến thức cơ bản
      Tuy vậy vai trò hiện tại của tôi là data engineer, nên các mảng khoa học máy tính truyền thống như cấu trúc dữ liệu và thuật toán tương đối ít được đòi hỏi hơn
  • Cốt lõi là luyện tập có chủ đích
    Không phải chỉ lặp đi lặp lại, mà phải thử thách bản thân với những nhiệm vụ hơi khó hơn năng lực hiện tại, thử làm, phân tích trong và sau khi thực hiện, sửa lỗi rồi lặp lại
    Để tiếp tục học, bạn phải thử thách chính mình và bước ra khỏi vùng an toàn

    • Tôi tò mò các công cụ AI như GitHub Copilot sẽ thay đổi thói quen học tập của mọi người ra sao
      Tôi dùng nó vài tháng rồi tình cờ bị đăng xuất, và đang thấy sự bất tiện nho nhỏ của việc tra tài liệu chính thức lại có giá trị
      Tuần đầu tiên tôi ngạc nhiên vì cảm thấy mình chậm chạp hơn hẳn
      Việc đi thêm các bước để học từ tài liệu gốc, và đôi khi trân trọng sự bất tiện, là điều quan trọng để trưởng thành như một lập trình viên
    • Với tư cách là một software developer và từng có kinh nghiệm làm tutor/trợ giảng, tôi lo liệu thế hệ developer tiếp theo có thật sự biết code không
      Đặc biệt nếu họ hoàn thành các bài tập trình độ năm 1–2 chỉ bằng Copilot, thì có thể họ đang tự động hóa để loại bỏ chính sự hữu dụng của mình
      Mặt khác, chúng ta cũng đã nói những điều tương tự về “thế hệ trẻ dùng iPad”
      iPad cũng có file system, và các app cũng ngày càng nhiều chức năng trong phạm vi cách Apple phê duyệt, nên tôi không nghĩ nó là một bản xấp xỉ tệ của laptop
      Tôi cũng dùng Copilot, nhưng chủ yếu như một autocomplete thông minh cho việc đặt biến hoặc các tác vụ lặp lại lặt vặt
      Nó dùng để tiết kiệm thời gian cho việc ngữ cảnh hóa cách giải quyết vấn đề và tương tác với đồng đội, chứ không phải thứ thay thế kỹ sư
    • Nói vậy là đúng, nhưng diễn đạt tốt hơn thì cốt lõi là làm như một sở thích
      Chuyên môn đến từ trải nghiệm, và trải nghiệm chỉ tích lũy khi bạn liên tục quay lại với nó
      Có người có thể ép mình chịu khổ không ngừng, nhưng với người bình thường, khôn ngoan hơn là bắt đầu bằng cách tìm một phần nào đó của phần mềm mà mình có thể thật lòng yêu thích và nuôi dưỡng nó
    • Bạn phải thích việc bị thử thách
      Tôi đã thấy những người chắc chắn thông minh hơn tôi trong lĩnh vực coding rời đi vì họ quá thông minh
      Vì họ cảm thấy nó không còn thách thức nữa, hoặc mệt mỏi với kiểu thử thách sai lầm như “chờ người khác bắt kịp”
      Thường thì họ là những người làm với công nghệ tiên tiến mà vài năm sau mới trở thành tiêu chuẩn
      Nếu động lực là sự mê hoặc, có lẽ cũng nên thấy may vì mình không quá thông minh
    • Trong lý thuyết giáo dục, điều này được gọi là vùng phát triển gần
  • Bài được ghi là từ năm 1998, nhưng có nhắc đến những thứ như Clojure và Go, nên có vẻ đã được cập nhật về sau

    • Cuối trang ghi Peter Norvig (Copyright 2001—2014)
  • Bài viết hay
    Với tiêu chuẩn 8 giờ mỗi ngày, 40 giờ mỗi tuần, để đạt 10.000 giờ sẽ mất 250 tuần
    Ngay cả lập trình gần như không nghỉ thì cũng khoảng 5 năm, và thực tế thì để đạt mục tiêu có lẽ gần 10 năm hơn

    • Thực tế thì còn tùy bạn thích lập trình đến mức nào
      Nếu lập trình nhiều, có thể dễ dàng đạt 3.000 giờ mỗi năm
      Tôi lập trình 12 giờ mỗi ngày trong hầu hết các ngày, và 6–7 ngày mỗi tuần trong hầu hết các tuần
      Những ngày cực kỳ có động lực thì làm cả 18 giờ
      Tôi đã làm như vậy gần 10 năm, thỉnh thoảng nghỉ khoảng một tháng và giảm xuống còn 3–4 ngày mỗi tuần nhưng vẫn làm nhiều giờ
      Tính dè dặt thì cũng khoảng 3.500 giờ mỗi năm
      Lý do tôi làm nhiều như vậy là vì tôi thật sự yêu lập trình, và ngoài lướt sóng buổi sáng ra thì không có việc gì tôi muốn làm hơn thế
    • Heuristic 10.000 giờ không đặc biệt chính xác, chỉ là nổi tiếng thôi
      Dù vậy, khoảng 10 năm kinh nghiệm chuyên môn để trở thành một lập trình viên vững vàng nhìn chung có vẻ đúng
      Tôi chưa từng thấy ai thật sự đạt đến trình độ đó chỉ sau 5 năm
      Những người đã làm một cách ám ảnh từ thời thiếu niên có thể rút ngắn vài năm, nhưng đến một thời điểm nào đó thì khoảng thời gian ấy cũng chồng lấn lên nhau
      Tất nhiên cũng có câu nói cũ rằng vấn đề là “lặp lại 1 năm kinh nghiệm 10 lần”
      Tôi cũng đã thấy nhiều lập trình viên hơn 10 năm kinh nghiệm nhưng vẫn không vững
    • 5 năm với 40 giờ mỗi tuần thì về cơ bản chẳng phải là một nghề phần mềm sao?
      Có vẻ chỉ cần vào một vai trò junior rồi làm 5 năm và thăng tiến là được
    • Nghề nào cũng vậy thôi
      Trực giác được tích lũy khi bạn giải quyết các nhiệm vụ ngày càng khó hơn
      Đến một lúc nào đó, bạn có thể kết nối và áp dụng điều mình biết ở một lĩnh vực sang lĩnh vực khác, và khi đó sự sáng tạo bắt đầu phát huy
  • Tôi không tìm được nguồn video đã xem 5–6 năm trước, nhưng đại ý là khi số lượng lập trình viên tăng lên, đa số có dưới 5 năm kinh nghiệm
    Trong bối cảnh IT và web ngày càng can dự sâu hơn vào đời sống, điều đó có lý
    [0] https://youtu.be/ecIWPzGEbFc?si=A4qBR2YdX-0CV2bM tìm được nhờ bình luận của wild_egg
    Sau 20 năm làm việc, giờ đây có khá nhiều thông tin tôi không còn cần biết nữa, và nhiều thông tin mà những người dưới 5 năm kinh nghiệm có lẽ hoàn toàn không cần
    Ngược lại, kinh nghiệm vẫn là kinh nghiệm, và việc biết mọi thứ được tạo ra với cấu trúc nào và vì sao chúng tồn tại luôn hữu ích
    Cũng có rất nhiều lập trình viên dù ít kinh nghiệm hơn tôi nhưng có thể làm những việc tôi thậm chí không tưởng tượng nổi
    Thành thật mà nói, lĩnh vực có tính Turing-complete này khá rộng

    • Tôi đã lập trình 40 năm, trong đó 33 năm làm nghề, nhưng ngoài scrum ra thì tôi không nghĩ ra thứ gì mình đã học mà lại là lãng phí
      Tôi chưa từng học thuộc cú pháp riêng biệt; tôi luôn mở man page và manual khi lập trình
      Nhưng mọi ngôn ngữ và công nghệ tôi đã học đều dạy cho tôi điều gì đó hữu ích về các vấn đề nền tảng của điện toán và hệ thống
      Cách xử lý vấn đề có thể khoác những bộ áo khác nhau, nhưng bản thân vấn đề thì vẫn vậy
      Không có đường tắt, và tôi chắc chắn rằng tôi của hiện tại, với tư cách lập trình viên, giỏi hơn tôi ở năm thứ 5 vài bậc độ lớn
      Lý do tôi háo hức hơn bao giờ hết với việc học cái mới và làm việc mới là vì chúng sẽ mở ra thêm nhiều phần của công nghệ này
      Điều tôi lo là một ngày nào đó cơ thể và tâm trí không còn theo kịp, chứ không phải hết thứ để học hay bị người trẻ vượt qua
    • Đó có lẽ là nội dung trong bài nói chuyện "The Future of Programming" của Bob Martin
      https://youtu.be/ecIWPzGEbFc?si=A4qBR2YdX-0CV2bM
    • Vì lĩnh vực này còn trẻ nên nó phát triển nhanh, và việc tích tụ nhiều thông tin nhất thời cũng là tự nhiên
      Nó vẫn có cảm giác như thời của các nhà giả kim
      Một ngày nào đó các nhà hóa học sẽ xuất hiện, hệ thống hóa những quan sát kiểu chắp vá tạm bợ và loại bỏ rất nhiều thứ
      Cho đến lúc đó… Newton cũng là một nhà giả kim, nhưng dù vậy ông đã có những đóng góp khá lớn