Cần lời khuyên về định hướng học tập & nghiên cứu toán học để bổ trợ chuyên ngành khoa học máy tính

Em muốn học và nghiên cứu thêm về toán học để bổ trợ và nâng cao chuyên ngành khoa học máy tính, cụ thể là các lĩnh vực như Algebraic Topology, Lambda Calculus, Abstract Computation Machine,… Những lĩnh vực đặt nền móng cho lập trình nhưng bị phần đông ngó lơ. Cá nhân em cảm thấy thật không thỏa đáng khi lập trình bị điều hướng bởi thị trường gia công, outsource thay vì được điều hướng bởi những nhà khoa học thực thụ.

Từ cấp 2, em đã ước mơ trở thành nhà khoa học nhưng hiểu được năng lực bản thân và hoàn cảnh gia đình nên em đã chọn học phát triển phần mềm để phù hợp hơn với nhu cầu thị trường. Tuy vậy, em chưa bao giờ thấy thỏa mãn với công việc hiện tại vì nó giống như công việc của một người thợ xây, thợ mộc. Em muốn trở thành một nghệ nhân hoặc nhà nghiên cứu thực thụ.

Hiện tại, em đã đi làm và sắp tốt nghiệp. Em đã tra cứu một số ngành học hệ từ xa về toán nhưng chưa tìm thấy trường đại học nào ở Việt Nam đào tạo. Em cũng không đủ xuất sắc hay thành tích tốt để học lên Thạc sĩ ở trường cũ hay du học nước ngoài. Nhưng em tin mình có trực giác và trí tưởng tượng, khả năng liên kết giữa các sự việc, lĩnh vực khá tốt và phù hợp để nghiên cứu.

Em muốn đi học thêm vì nghĩ mình cần một người sư phụ hoặc một môi trường lành mạnh để nghiên cứu, bên cạnh việc phát triển phần mềm 8 tiếng mỗi ngày.

Rất mong nhận được lời khuyên từ các tiền bối về định hướng và lựa chọn sao cho hiệu quả.

Cảm ơn rất nhiều !

Lời đầu tiên, mình thay mặt cộng đồng Toán học bé nhỏ nhưng đầy sự kết nối gửi lời cảm ơn cho mong muốn học Toán của bạn.

Vì cộng đồng Toán học rất là nhỏ, nên đa số đều chào mừng bạn đến với thế giới toán dù bất kì với lý do gì. Toán học có thể nói là một trong lĩnh vực tiên phong, chờ đợi ứng dụng có khi phải đến 50 năm hoặc 100 năm mới có.

Về cách thức nâng cao kiến thức Toán cho bản thân, bạn có thể tìm đến một vài nơi sau (hoặc có thể các nơi khác).

  • Viện nghiên cứu cao cấp về toán - VIASM.
  • Khoa Toán Cơ Tin học - trường Đại học Khoa học tự nhiên Hà Nội.
  • Khoa Toán Tin - trường Đại học Khoa học tự nhiên Hồ Chí Minh.

Bạn hãy liên hệ với các thầy/cô phụ trách các môn Toán riêng biệt để có thể tham dự các lớp học (Đại học hoặc Cao học). Hầu hết các lớp học đều hoan nghênh các bạn, vì lớp siêu ít sĩ số (trung bình 5 người / lớp). Số người có bằng Đại học hoặc Cao học thuần Toán chưa đến 10 người (chưa đủ 2 đầu ngón tay).

Yêu cầu duy nhất là mong bạn có thể kiên trì suốt buổi học, cố gắng đọc giáo trình trước khi đến lớp. Lý do thầy/cô toàn lấy giáo trình ra giảng trực tiếp, xong viết chi tiết bằng các công thức trên bảng.

2 Likes

Mình không rõ là chủ topic đang định theo Toán lý thuyết hay là Toán ứng dụng. Ngoài ra, nếu là một trong 2 thì cần xem cái nhỏ hơn nữa thay vì Toán lý thuyết/ ứng dụng nói chung. Không rõ là trước đây bạn có học sinh chuyên Toán hoặc Toán - Tin ở phổ thông? Lên đại học sao không học Toán - Tin nếu thích Toán mà lại chọn Tin? Có lẽ sau quá trình học như vậy, cái bạn cần là Algorithms chứ không phải là Toán lý thuyết. Vậy thì trước tiên là liên hệ bên bigocoding.com để hỏi xem ai đó bên đó có thể dành cho 1 buổi tư vấn?

2 Likes

Chào anh, em không có nền tảng chuyên toán hay tin.

Hồi bé em thích đọc những cuốn như Lược sử thời gian của Stephen Hawking, Vũ trụ của Carl Sagan, hay Giai điệu bí ẩn và Khát vọng tới cái vô hạn của nhà thiên văn học nổi tiếng người Việt là Trịnh Xuân Thuận. Nên nếu gia đình khá giả, thì em sẽ cố gắng theo Vật lý lý thuyết / Toán ứng dụng.

Đồng thời, tới cấp 3, khi đọc tiểu sử của Grigori Perelman - người được mệnh danh là nhà toán học vĩ đại nhất thế kỷ 21 của Nga, thấy tác giả có phán 1 câu là: “Những nhà toán học hụt thì thường trở thành lập trình viên”. Thế là em bắt đầu nghĩ đến ngành lập trình, phát triển phần mềm từ đó.

Em có tính hiếu kì rất cao nhưng cũng lan man, cũng là một nhược điểm lớn khi thích cái gì là dễ rằng tâm trí chỉ còn mỗi cái đó, nhưng nó chỉ kéo dài trong vài tiếng tới vài ngày. Nhiều lúc tâm trí em cũng nhảy nhót từ chủ đề này sang chủ đề khác rất nhanh một cách thiếu kiểm soát, trong Đạo Phật gọi là tâm con vượn.

Về thuật toán thì năm 1 năm 2 Đại học em cũng tìm hiểu, và cày code trên Hackerrank, LeetCode và thi thoảng ghé thăm Codeforces, tích lũy đủ để khi gặp vấn đề về thuật toán, em có thể tự tra cứu và biết cấu trúc dữ liệu nào hay giải thuật nào giúp được mình.

Sau khi học về Structured Programming, OOP, Functional Programming, … Nhận thấy hiện tại OOP đang là phong cách phổ biến nhất. Rõ ràng, OOP mô hình hóa các đối tượng một cách dễ hiểu, trực quan và hầu hết mọi người tán thành, nghiên cứu và dần dần phát triển những kỹ thuật và khái niệm dựa trên OOP. Tuy OOP có tính trừu tượng cao nên hiệu suất sẽ chỉ bằng 40 - 60% lập trình hướng thủ tục, nhưng phần cứng ngày nay đủ mạnh để lập trình viên không cần phải bận tâm đến hiệu suất khi chọn công nghệ trong phần lớn trường hợp, hoặc ít nhất, nó không phải yếu tố quyết định khi so với kinh phí, độ lớn của cộng đồng, xu hướng của team mình, … Thế nhưng, chúng ta đã quên mất công cụ mạnh mẽ để mô hình hóa, có hàng nghìn năm lịch sử khi so với OOP, đó là toán học.

Functional Programming có sự liên hệ mật thiết với toán học hơn, rất có tiềm năng, và em muốn tìm hiểu những nền tảng toán học đằng sau Khoa học máy tính như Lambda calculus, automata theory, number theory, …
Mục đích là vì niềm yêu thích của bản thân và muốn xây dựng những kỹ thuật lập trình chặt chẽ hơn dựa trên toán học, muốn tìm những kỹ thuật mô hình hóa các thực thể ngoài đời sống vào phần mềm bằng những phương pháp có thể chứng minh được, do đó, tin cậy hơn quy trình code - test - code tiếp - test truyền thống. Nếu không có toán học thì lập trình viên sẽ vẫn loay hoay trong các vấn đề code, fix bug, hacking vấn đề, thiết kế sai lầm, refactor, … Và dùng vòng lặp để tính tổng \left(\sum_{i=1}^n i\right) thay vì dùng công thức \frac{(n+1)n}{2}.
Tất nhiên, khát vọng của em là hạn chế những sai lầm bằng những kỹ thuật mới, chứ không loại bỏ hoàn toàn được ạ.
Học toán ở phổ thông em cũng không thực sự hiểu giải tích là gì, số học khác gì đại số, lớn hơn chút thì tưởng giải tích chỉ gồm 2 phần là giải tích vi phân và giải tích vi phân, nhưng thực ra giải thích là một hệ thống tính toán và còn rất nhiều nhánh nhỏ nữa.

Em không chắc không thứ mà em cần học sẽ được phân loại là lĩnh vực toán thuần túy hay toán ứng dụng. Hay cần đến một mô hình / nhánh riêng của toán học. Tuy nhiên, bước đầu em có thể xác định là cần liên quan tới lambda calculus, automata theory, algebraic topology

Sau đây là quan điểm cá nhân khi em tìm hiểu được về công nghiệp phần mềm, trích từ bài viết của mình:

Công nghiệp phần mềm cũng thật khác biệt với những ngành công nghiệp khác, từ một lĩnh vực mà chỉ những nhà toán học mới có thể hiểu và thực thi, thì giờ đây nó đã được phát triển (theo khía cạnh tích cực) hoặc biến chất (theo khía cạnh tiêu cực).

Chúng ta đang coi nhẹ sự khác biệt của kỹ thuật phần mềm, điển hình là việc sử dụng các thuật ngữ một cách lạm dụng, có thể kể đến như:

𝟏. “𝐊ỹ 𝐭𝐡𝐮ậ𝐭 𝐩𝐡ầ𝐧 𝐦ề𝐦” - Vận dụng kiến thức khoa học để tạo ra những giải pháp công nghệ phục vụ cho công việc, đời sống:

Vấn đề ở đây là lập trình có nền tảng phát triển, chứng minh từ toán học, nhưng nó phát triển nhanh đến mức bật khỏi cái nền tảng toán học của nó để phù hợp với đại chúng. Cho nên, câu hỏi “Lập trình viên có cần giỏi toán ?” nếu đặt ở thời điểm hiện tại, thì câu trả lời chắc chắn là “không”.

Nó dẫn đến một điều tàn nhẫn rằng bạn và mình không thể lập trình, vì chúng ta muốn lập trình ra những giải pháp đáp ứng yêu cầu đề ra, nhưng không bao giờ chứng minh được nó. Cụ thể hơn, chúng ta có thể thấy sự hiện diện của lỗi trong chương trình, nhưng không bao giờ chứng minh được sự biến mất của chúng. Mọi chương trình đều có lỗi tiềm ẩn.

𝟐. “𝐁ả𝐨 𝐭𝐫ì 𝐩𝐡ầ𝐧 𝐦ề𝐦”: Phần mềm không bị mòn như các thiết bị cơ giới, nó có thể cần nâng cấp, cải tiến để phù hợp với nền công nghệ liên tục phát triển và phù hợp hơn với yêu cầu người dùng, khiến nó có cảm giác bị “mòn”. Nhưng rõ ràng, phần mềm là khác biệt để có thể sử dụng từ “bảo trì” một cách hiển nhiên và đặt ngoài ngoặc kép.

𝟑. “𝐁𝐮𝐠”: Một lỗi trong lập trình rất dễ phá hỏng cả chương trình, khi so sánh với một lỗi lầm trong sản xuất thuộc lĩnh vực khác. Việc coi lỗi là một con bọ (bug) len lỏi vào chương trình trong khi các lập trình viên không để ý, thay vì thừa nhận rằng lỗi là do lập trình viên tạo ra là một che đậy thiếu trung thực về mặt trí tuệ.

Hay một cách cảm thông hơn, vì chính những nhu cầu thị trường và thị hiếu kéo theo mệnh đề rằng “chúng ta không thể lập trình được” do không chứng minh được tính đúng đắn của chương trình, việc thừa nhận rằng lập trình là rất khó, chúng ta tạo ra những phương pháp, công nghệ và quy trình để giảm thiểu lỗi và phạm vi ảnh hưởng của chúng, là cần thiết để đáp ứng được nhu cầu thực tế.

Công nghệ lập trình đang phát triển rất nhanh, đó là điều đáng mừng, nhưng hơi đáng tiếc ở chỗ nó được phát triển điều hướng theo nhu cầu gia công tối ưu, giá rẻ của doanh nghiệp, điều hướng theo thị hiếu đám đông, cố gắng làm giảm sự liên quan với những chủ đề mang tính hàn lâm nhưng ý nghĩa lại.

Đơn cử như package manager npm của Node Js, nó được chính tác giả của JS Runtime này thừa nhận cơ chế của npm là một điểm trừ lớn của Node Js, nhưng được cộng đồng thúc đẩy quá nhanh đến mức không kiềm hãm được. Hay như PHP, một ngôn ngữ được thiết kế tạm bợ, nhưng có sức phổ biến kinh khủng.

Thiệt ra mấy tay bên Toán ứng dụng, Thống kê, Vật lý lý thuyết, Vật lý thực nghiệm,… đều khuyến khích bổ sung Toán lý thuyết trước á, nhưng giới hạn ở bậc Đại học thôi. Từ cái căn cơ lý thuyết vững vàng rổi đẩy lên học mấy cái “ứng dụng”. Mà mấy nghiên cứu trong trường, hay dự án trong công nghiệp toàn vô làm lý thuyết trong cái “ứng dụng” đó hết, chạy không thoát được.

Hiện mình đang dạy 2 lớp, một lớp chính quy về lý thuyết Automata, và một lớp seminar thảo luận bên Algebraic Topology. Chủ yếu toàn chứng minh chứng minh. Mấy sinh viên bên CNTT nhào vô chịu không nổi, chỉ có mấy đứa bên Algebra còn trụ được (một nhánh của Toán lý thuyết).

2 Likes

Cảm ơn anh rất nhiều.

Xin được hỏi là các môn học về Automata, Seminar về Algebraic Topology có thời gian thế nào, và kiến thức tiên quyết để một sinh viên có thể được tham dự. Bên cạnh đó, các thành viên trong Cộng đồng toán học thường liên lạc và trao đổi kiến thức thông qua diễn đàn, kênh nào vậy ạ ?

Automata không cần tiên quyết, nhưng khuyến khích đã học qua Abstract Algebra, vì phong cách chứng minh sẽ gần giống như Algebra.

Algebraic Topology về tiên quyết thì có Point-set Topology. Môn Topology thì không cần tiên quyết, nhưng nên học xong Mathematical Analysis (metric spaces, continuous functions, multivariate analysis), do Topology là sự tổng quát hoá các khái niệm trong Analysis.

Cộng đồng Toán học ở Việt Nam thì có VIASM đó. Riêng lớp mình tổ chức ở bên Mỹ.

3 Likes

Đồng ý với ý này.

Mình dùng chữ “lý thuyết” ý nói bạn chủ topic hiểu rằng ở mức anh ấy bây giờ khó mà đi theo Toán kiểu các nhân vật Lê Văn Thiêm, Hoàng Tuỵ, Vũ Hà Văn, Ngô Bảo Châu,… vì những người đó đã xác định Toán là lẽ sống từ rất sớm, đã ăn học theo định hướng trở thành nhà toán học. Mình muốn phân biệt “toán học thuần tuý” với “toán học ứng dụng” ấy. Và rõ ràng là giờ đây chủ topic nghiên cứu toán như một thú vui, việc đó ích phần nào cho công việc lập trình, được thì tốt, không đuọc cũng chẳng phải đau khổ gì. Nghề kiếm sống vẫn nên là lập trình viên hơn là trở thành giáo sư toán hoặc nhà toán học vì điều đó thực tế, trong tầm tay. Còn cơ duyên đến, cánh cửa đầy ánh sáng nào mở ra để thành “dân Toán” đó là chuyện mang tính triết học, tâm linh, ngoài khả năng mình nắm bắt để bàn đến.

3 Likes

wow, anh dạy trường nào vậy ạ, em thì đam mê bộ môn lý thuyết số + tổ hợp, nên cũng có mua thêm sách về luyện tập, tuy nhiên, e chỉ làm for fun chứ không có định hướng rõ ràng là sẽ phục vụ cho mục đích gì cả :sweat:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?