- Một trong những việc đầu tiên khi vào công ty mới là mua một cuốn sổ mới, và điều đó không chỉ là niềm vui đơn thuần mà còn xuất phát từ nhận thức rằng đây là công cụ cốt lõi của một lập trình viên
- Viết code chỉ là giai đoạn cuối cùng; điều quan trọng hơn là quá trình suy nghĩ sẽ tạo ra cái gì và tạo ra như thế nào, và quá trình đó thường bắt đầu trên sổ tay chứ không phải trên máy tính
- Khi trực quan hóa suy nghĩ bằng chữ và hình vẽ trên sổ tay, các ý tưởng trừu tượng trở nên cụ thể hơn, những khoảng trống trong kiến thức cũng lộ ra, từ đó hỗ trợ thiết kế tốt hơn
- Thói quen xem lại đoạn code mình đã viết bằng cách diễn giải nó thành văn bản là một công cụ refactor hiệu quả để phát hiện những điểm không nhất quán hoặc thiết kế sai
- Những ghi chép như vậy cũng hữu ích cho chính bản thân trong tương lai như tài liệu khôi phục ngữ cảnh của các quyết định, và trở thành một dạng tài liệu hồi tưởng được tự động tạo ra
Vì sao bút và sổ tay là quan trọng nhất
- Một trong những điều được mong đợi nhất trước ngày đầu đi làm là chọn một cuốn sổ mới
- Với lập trình viên, sổ tay không chỉ là công cụ ghi chép mà còn là công cụ tư duy
- Viết code là phần thực thi ở cuối của quá trình tư duy, và quá trình suy nghĩ xem sẽ tạo ra gì mới là điều quan trọng hơn
- Trong nhiều trường hợp, ngồi trước máy tính không giúp dòng suy nghĩ sáng tạo vận hành tốt
- Khi mở editor, ta dễ rơi vào “chế độ chức năng”, chỉ tập trung vào “đoạn code chạy được”
Suy nghĩ khi rời xa máy tính
- Đi dạo, hoặc mang sổ ra ghế sofa hay ra ngoài trời để suy nghĩ về vấn đề
- Ghi vào sổ những nội dung như thiết kế cách tiếp cận cho vấn đề mới, phác thảo UI, lưu đồ, hay phân tích luồng dữ liệu của code hiện có và ý tưởng mở rộng tính năng
- Trực quan hóa tư duy bằng chữ và hình vẽ đặc biệt hiệu quả trong việc cụ thể hóa những ý tưởng còn mơ hồ
- Những khoảng trống logic dễ bị lược bỏ nhanh chóng trong đầu sẽ hiện ra rõ ràng khi viết xuống
Viết là công cụ refactor tốt nhất
- Sau khi viết code, hình thành thói quen viết ra như đang giải thích cho người khác
- Nếu có thể thì công khai dưới dạng blog, nhưng ngay cả khi chỉ là tài liệu nội bộ, quá trình diễn giải vẫn giúp phát hiện sự không nhất quán, thiết kế kém, sai sót, v.v.
- Bài liên quan: Viết là công cụ refactor mới mà tôi yêu thích nhất
Vừa là sản phẩm phụ của tư duy, vừa là tài sản của ghi chép
- Một ưu điểm khác của phương pháp tư duy bằng viết là dấu vết suy nghĩ được lưu lại một cách tự nhiên thành ghi chép
- Không cần tài liệu hóa riêng, sản phẩm phụ của việc sắp xếp suy nghĩ đã trở thành tài liệu hồi tưởng tuyệt vời
- Sau này nếu ai đó (đặc biệt là chính mình trong tương lai) hỏi “vì sao đã làm như vậy”, chỉ cần mở sổ ra và giải thích đúng theo những gì đã ghi
Về việc ghi chép công việc của lập trình viên một cách sâu sắc hơn
1 bình luận
Ý kiến Hacker News
Tôi cảm thấy đây là một cuộc thảo luận rất hay. Điều cốt lõi theo tôi không nằm ở bản thân sổ tay hay công cụ số, mà là ở việc chúng giúp chuyển số cho bộ não của tôi. Mỗi khi đổi chế độ, não lại chú ý theo cách khác, nên ngữ cảnh mới giúp tăng tập trung, sáng tạo và ghi nhớ. Ví dụ, sau một thời gian chỉ viết code, tôi bắt đầu một sở thích mới là viết lách vào buổi tối và cảm thấy như não được reset, hiệu suất ban ngày thực sự tăng lên. Khi lập kế hoạch, việc tạm chuyển từ môi trường số sang bút và giấy cũng phá vỡ thói quen và khiến não vận hành khác đi. Cuối cùng, điều quan trọng không phải là công cụ, mà là sự thức tỉnh đến từ thay đổi
Tôi tự hỏi trong số các lập trình viên ngày nay có bao nhiêu người từng bị bắt buộc học lớp cơ sở về vẽ kỹ thuật. Chắc nhiều người từng chơi Lego. Khi cần mô tả một vật thể 3D trên giấy 2D, thường phải vẽ hình chiếu từ ba hướng, và nếu nó phức tạp hơn không gian 3 chiều thì phải nhìn từ nhiều góc hơn mới diễn đạt được
Tôi rất ấn tượng với khái niệm 'disfluency' mà tôi đọc được trong cuốn 'Smarter Faster Better'. Phông chữ khó đọc, môi trường mới, công cụ khác lạ... đều giúp ta thoát khỏi chế độ lái tự động và suy nghĩ theo cách mới. Tôi chưa từng thấy khái niệm này ở nơi nào khác, nhưng trong 9 năm qua nó đã thay đổi hoàn toàn cách tôi tiếp cận việc học và giải quyết vấn đề. Với tôi, việc chuyển sang sổ tay cũng là một trigger rất tốt để tạo ra hiệu ứng này
Trường hợp của tôi là tôi thực sự ghi chép bằng ba phương tiện: sổ giấy, máy ghi âm kiểu cũ, và file văn bản. Mỗi phương tiện có ưu nhược điểm riêng nên ý tưởng cũng được biểu đạt khác nhau. Máy ghi âm ngày càng ít dùng hơn, nhưng khi thiếu thời gian và cần lướt nhanh qua thì nó là tối ưu. Khi nghe lại bản ghi rồi chép lại sau, mỗi vòng lặp như vậy lại biến đổi ý tưởng theo cách khác. Quá trình đó giúp nhìn cùng một ý tưởng từ nhiều góc độ
Tôi từng nghe một kết quả nghiên cứu nói rằng chuyển ngữ cảnh trung bình tốn khoảng 15 phút. Không biết chính xác đến đâu, nhưng các sếp của tôi cũng rất để tâm và tôn trọng điều này
Điều tôi trải nghiệm là khi nghe một chuỗi webinar trực tiếp và đồng thời ghi chú ngay bằng bút và giấy. Ban đầu rất khó theo kịp, nhưng sau vài ngày tôi dần thành thạo hơn trong việc vừa nghe vừa viết, và có cảm giác ghi nhớ thông tin bằng thính giác tốt hơn
Một số người thông minh nhất mà tôi từng gặp trong toán học, vật lý và computer science thậm chí không dùng sổ. Họ chỉ viết bằng bút lên giấy in rồi xong thì vứt đi. Tôi gần như chưa từng thấy ghi chép cá nhân từ rất lâu trước đây thực sự hữu ích. Thứ thực sự quan trọng là tài liệu hóa để người khác cũng có thể tìm thấy, còn những gì bắt buộc phải nhớ thì học bằng flashcard with spaced repetition. Tất nhiên đó là cách của tôi và có thể không hợp với người khác. Tiêu đề bài này chỉ đơn giản là chia sẻ triết lý của một lập trình viên, chứ không phải nói ai cũng phải làm theo. Nếu bút và sổ không hợp với bạn thì không cần dùng
Xét về mặt khoa học, việc viết thứ gì đó xuống giúp cải thiện trí nhớ, khả năng ghi nhớ và học tập. Ngay cả khi viết xong rồi vứt đi thì vẫn có hiệu quả. Cũng có bài viết liên quan. Viết tay kích hoạt nhiều giác quan và nhiều vùng não hơn so với gõ phím, đặc biệt là vỏ não vận động. Tôi cũng thường lấy đó làm cái cớ để muốn mua một cuốn Moleskine, nhưng chữ viết tay không hợp với workflow của tôi. Tôi gõ rất nhiều vào buffer văn bản thuần túy, rồi xử lý sau bằng LLM như GPT. Khi đầu óc bị khựng lại, tôi cứ gõ loạn cả những từ mình chưa hiểu, rồi dần dần tinh thần quay lại và từ đó nảy ra danh sách việc cần làm, bản nháp email, bản nháp code... Trong quá trình đó, hầu hết nét nguệch ngoạc ban đầu đều biến mất. Dù vậy, viết tay vẫn giúp ghi nhớ tốt hơn
Tôi đồng ý với suy nghĩ của bạn rằng ghi chép cũ thường vô dụng. Nhưng tôi vẫn giữ lại những cuốn sổ và tờ giấy đó. Lâu lâu nhìn lại, cảm giác giống như xem ảnh gia đình cũ, như những bức ảnh chụp quá trình tư duy của bản thân ngày xưa
Não tôi cũng hoạt động như vậy. Tôi cũng có sổ, nhưng cả một ngày suy nghĩ chỉ nằm trong một trang. Ngày hôm sau lại viết sang trang kế tiếp. Tôi gần như không bao giờ xem lại nội dung trước đó. Có thể việc nhìn lại quá khứ có giá trị nào đó, nhưng thực tế tôi không làm được
Với tôi, cách ghi chép chỉ hiệu quả khi nó hoàn toàn tự do và không có cấu trúc. Bàn phím khó mà giữ được dòng chảy đó. Tôi ghi lại dữ liệu phi tuyến tính, phi ngôn ngữ, mang tính quan hệ, mang tính không gian, hoặc thông tin dành cho trí nhớ ngắn hạn. Tôi định kỳ xem lại ghi chú và chuyển những gì có ý nghĩa sang hệ thống lưu trữ như lịch, ticket, wiki, spaced repetition... Cuối cùng, nội dung thực sự đáng lưu giữ là rất hiếm, nhưng điều đó không sao cả. Sổ giấy với tôi không phải hệ thống lưu trữ chính thức mà là phần mở rộng của working memory
Trước đây tôi hay làm mất sổ. Giờ tôi dùng công cụ công nghệ để chuyển ghi chú thành văn bản rồi sắp xếp trong Obsidian vault. Sau này tôi muốn thử tự động khám phá liên kết giữa các ghi chú hoặc gắn tag để tìm ý tưởng dễ hơn
Gọi sổ tay là "công cụ quan trọng nhất" thì hơi quá lãng mạn. Nó có thể hữu ích với một số người, nhưng nói nó quan trọng hơn debugger, version control hay CI thì là phóng đại. Software engineering không phải trò cosplay thợ thủ công
Tôi là OP. Mỗi lần blog của tôi lên HN là lại có người nói tôi "sống trong ảo tưởng" hay "thuần lãng mạn". Những công cụ bạn liệt kê dĩ nhiên đều quan trọng. Tôi cũng tránh phát triển phần mềm mà không có version control hay debugger vì sẽ rất kém hiệu quả. Nhưng với tôi, sổ tay thực sự quan trọng hơn. Những công cụ để viết và chạy code chỉ là thứ giúp công việc diễn ra, còn điều thực sự quan trọng trong phát triển phần mềm là tạo ra thứ có giá trị và giải quyết vấn đề. Lúc đó bản thân code chỉ là bước triển khai tương đối nhỏ. Việc suy nghĩ xem nên làm gì và làm như thế nào mới quan trọng hơn nhiều. Có người có thể suy nghĩ tốt hơn trong code editor hay công cụ số. Còn tôi, nếu chỉ ở trong code editor thì quá dễ sa vào chi tiết triển khai và khó hình dung cấu trúc tổng thể. Vì vậy, với tôi việc mang sổ tay và dùng nó trước, trong và sau khi code là một phần cực kỳ cốt lõi của công việc. Nếu không có công cụ này, năng lực tư duy, giải quyết vấn đề và sáng tạo của tôi sẽ bị cùn đi rất nhiều, và tôi sẽ làm ra phần mềm tệ
Điều bạn nói không phải software engineering mà là software fabrication. Khác biệt giữa blue-collar và white-collar nằm chính ở thái độ với "công cụ" này. Với kỹ sư, dù là slide rule, calculator hay supercomputer thì cũng chỉ là "công cụ". Không phải vì công cụ mà họ làm kỹ thuật. Bản chất là "tư duy", còn công cụ chỉ thúc đẩy quá trình đó. Với người gia công thì bản thân cái máy mới là tất cả. Không có máy thì không sản xuất được widget. Bản chất ở đây là "tư duy", không phải "sản xuất"
Nghe giống như nói rằng "khi xây nhà thì tất nhiên búa quan trọng hơn bản thiết kế. Đây đâu phải lớp mỹ thuật, đây là công trường xây dựng"
Cảm ơn vì đã chỉ ra điểm này. Có rất nhiều trường hợp cũng dành cực nhiều thời gian cho hệ thống năng suất, trang trí sổ gtd bằng tab và danh sách nhưng lại không làm được việc thực sự có ích. Mọi người viết rất nhiều về workflow Obsidian nhưng lại chẳng để lại ghi chú có ý nghĩa nào. Cũng có người dành hết thời gian để làm chính cái blog, nhưng rốt cuộc lại không viết bài. (Tôi cũng từng như vậy.) Tôi rất thích câu "đây không phải cosplay thợ thủ công mà là software engineering", tôi sẽ ghi nó vào sổ
Cụm "craftsmanship cosplay" hay thật. Tôi muốn xem dữ liệu về nghề nghiệp, sự nghiệp, tuổi tác, thu nhập và học vấn của từng người bình luận. Có vẻ ý kiến ở đây tiết lộ nhiều hơn về chính người nói so với bản thân việc phát triển phần mềm thành công. OP chỉ đang dùng cách giúp mình tập trung và sáng tạo tốt nhất. Xem bài viết hay lời chỉ trích như thể đó là tiêu chuẩn chung là một sai lầm. Bắt chước bề ngoài của một mẫu hình thì rốt cuộc cũng chẳng khác mấy hành vi cargo cult
Có vẻ hầu hết bình luận đang tập trung vào phần vật lý là 'bút và giấy', nhưng lại bỏ lỡ nguyên tắc cốt lõi. Tác giả dùng bút và giấy vì khi ngồi trước máy tính thì tự động chuyển sang "chế độ triển khai", tập trung vào implement hơn là thiết kế. Điểm quan trọng là khi cần thiết kế thì đừng chỉ lao vào triển khai, mà hãy tự chọn cách giữ cân bằng phù hợp với mình
Suy cho cùng đây là chuyện năng suất cá nhân. Hãy thử nhiều cách và tìm ra môi trường lẫn quy trình phù hợp với mình. Bút và giấy giúp dẫn dắt suy nghĩ và thiết kế mà không sa vào chi tiết quá mức hay bị xao nhãng. Tôi cũng thường luân phiên giữa những suy nghĩ ghi bằng bút giấy và những suy nghĩ viết thẳng vào Sublime Text, và cả hai đều hoạt động khá ổn
Meme bell curve nổi tiếng trên Reddit rất hợp ở đây. OP đã chạm đúng trọng tâm: hãy suy nghĩ trước khi code. Giờ khi sự nghiệp của tôi gần như sắp khép lại (bắt đầu từ năm 88, đã làm vài chục năm), một trong những điều thú vị nhất là sự thay đổi của công cụ. Tôi là senior principal software architect ở một công ty lớn và không viết một dòng code nào. Mọi đầu ra đều được tạo bằng Visio, Word, PowerPoint (thỉnh thoảng là PlantUML). Càng lên mức trừu tượng cao, công cụ lại càng đơn giản. Kiến trúc tôi vẽ là cho hệ thống quân sự, y tế, và nhà cung cấp cấp 1 ngành ô tô, phải chạy hơn 10 năm. Phần code thực tế để triển khai (chủ yếu là C, C++, trước đây là Ada, sau này có thể dùng Rust) hay ngôn ngữ cụ thể hoàn toàn không ảnh hưởng đến kiến trúc. Điều thực sự quan trọng là block, API và encapsulation. Vì chúng ảnh hưởng đến silicon, bảo mật, sản xuất và kiểm thử. Thứ cốt lõi là cái có thể giải thích bằng vài slide, chứ không phải bản thân code. (Tất nhiên, sơ đồ của tôi cũng phải chịu được việc phát hiện lỗi thiết kế. Đó lại là phần thú vị khác)
Sổ Leuchturm 1917 A4 Master (rất khuyên dùng loại dot grid). Chất lượng tuyệt vời, và dùng cùng bút máy thì thực sự rất thích. Khổ A4 đủ lớn để nhét thêm loose paper, và đặc biệt với thiết kế UI thì A4 là kích thước cực kỳ lý tưởng
Tôi đã làm phần mềm hơn 20 năm, trước đó còn làm nghiên cứu và có bằng tiến sĩ OChem. Tôi kiếm đủ tốt ở mức 'senior' tại Australia. Tôi bị aphantasia, nên dùng bút giấy hoặc bảng trắng cực nhiều. ERD, mind map, sequence diagram và đủ loại hình trực quan hóa. Từ khi dùng ReMarkable thì việc di chuyển nội dung dễ hơn nhiều và hiệu quả cũng tăng lên. Với ai đó điều này có thể trông như "thuần lãng mạn", nhưng với thành công của tôi thì bút và giấy là thiết yếu
Sau khi cố xây thói quen tổ chức với đủ loại công cụ và app ghi chú, năm nay tôi đặt mục tiêu đầu năm là mua một xấp notepad To-Do có thể ghi ngày, rồi trong họp hay lúc làm việc cứ thoải mái viết lên. Kết quả là năng suất tăng lên rất nhiều. Nếu ai tò mò thì đây là món tôi dùng
Một trong những điều tôi nhớ nhất khi còn làm ở văn phòng là khoảng thời gian đứng trước bảng trắng lớn để thiết kế cùng đồng nghiệp. Cầm bút marker và cùng nhau suy nghĩ về kiến trúc thường cho ra những thiết kế lớp thực sự tinh tế
Tôi dùng excalidraw cho việc này và thấy còn tốt hơn bảng trắng. 1) đẹp hơn và không lộn xộn, 2) marker kỹ thuật số không bao giờ hết mực, 3) dễ sửa và thay đổi hơn. Tôi luôn bắt đầu thiết kế kỹ thuật bằng excalidraw
Tôi dùng màn hình bút 24 inch. Hồi còn là CTO tôi còn cấp cho cả team. Bảng trắng số dùng chung tiện hơn rất nhiều vì có thể tiếp tục chỉnh sửa mà không phải vẽ đi vẽ lại nhiều lần. Cũng không cần chụp ảnh trước khi xóa bảng nữa
Bảng trắng (kể cả bảng phấn) là chân ái