Cụ thể các kiến thức học được ở Đại học giúp lập trình viên đi xa như thế nào?

Em đang là sinh viên. Em thắc mắc là những kiến thức “nền tảng” mà trường đại học đang giảng dạy giúp lập trình viên đi xa như thế nào khi mà hấu hết các vấn đề trong lập trình đều đã có sẵn các framework để giải quyết rồi ạ? Em cần mấy anh giúp giải ngố cái này trước khi đâm đầu vào làm mấy “bài kiểm tra giấy” mỗi cuối kỳ.

(Em không giỏi văn, kinh nghiệm trong ngành còn non nớt nên nếu câu hỏi có hơi gây “khó chịu” thì em không cố ý “ra dẻ” đâu ạ :blush: )

  1. Khối lượng kiến thức thì em đủ khả năng nuốt nổi nhưng em không có tí động lực nào để tập trung học học tốt được vì chả hiểu sao này mình dùng nó CỤ THỂ để giải quyết cái gì! !?.

  2. Nếu đi theo hướng quản lý thì liệu những kiến thức như trên giúp gì khi mình leo lên vị trí senior ạ? Em thấy chỉ cần đủ kinh nghiệm làm việc, kĩ năng mềm là đủ rồi chứ ạ?

  3. Em có hai dự định: Một là học vượt các môn ra trường sớm hoặc tạm hoãn kết quả học tập một năm để xin thực tập lấy trước kinh nghiệm rồi quay lại lấy bằng. Ngồi trên giảng đường chỉ có mỗi lý thuyết suông em chán kinh khủng :frowning: .

Bạn đặt ra vấn đề này, vậy bạn đã thực sự làm ra một cái gì đó thực tế xài được chưa? Chưa thì thử xem có dễ dàng không, các framework đã có docs khá đầy đủ, thậm chí code trên mạng hầu như cũng đủ cover hết những vấn đề thông thường
Code luôn có sẵn trên stackoverflow, copy về là chạy, nhưng copy gì? paste và sử như nào thì làm sao biết được?
Sao có người code app chạy ngon, có người code thì chạy chậm, lỗi tùm lum, thậm chí là không điều tra được code của chính mình bị gì

Anyway, bạn thấy không cần thiết thì cứ học cho qua

“CỤ THỂ” thì khi nào bạn gặp thì mới biết được, còn kinh nghiệm mà đi hỏi để tích lũy được thì đã không đáng tiền nữa rồi

ý 2 này cũng như ý 1, nếu kinh nghiệm mà gõ vài dòng chia sẻ được thì chẳng có gì quý nữa rồi
nó giống như AI, dạy mãi những chẳng thể “khôn” hơn con người được

câu này không hiểu sao bạn lại hỏi được

  1. Bạn có chắc tạm hoãn thì tìm được chỗ nhận bạn không? Có chắc là được nhận thì sẽ phát triển tốt không?
  2. Hoãn thì cũng phải học lại, có gì tốt hơn học cho lẹ để ra trường nhanh không

Hỏi câu này cũng đã một phần nào chứng minh năng lực của bạn

3 Likes

Cảm ơn anh @kisuluoibieng
Em không hiểu dự định em dính dáng gì tới năng lực của em :sweat_smile:. Nhưng mà em xin phản biện anh hai điểm này(vẫn là mấy suy nghĩ non nớt mong anh rep nếu thiếu sót ạ :blush: )

  1. Ra trường thì cũng chắc gì đã có người nhận :smiley:. Tất nhiên được tấm bằng cũng đã chứng minh phần nào năng lực của mình nhưng năng lực học khác với năng lực làm việc mà anh. Đâu phải Software engineer là cắm mặt vào code đâu ạ ?

  2. Em nghĩ nó khác ở chỗ mình được va chạm thực tế để biết thiếu sót ở đâu rồi về trường dành thời gian củng cố lại. Lúc đó, kiến thức + kinh nghiệm nó cho em định hướng rõ ràng hơn, lý thuyết suông không thì mờ hồ lắm ạ. Dùng ở đâu? Tại sao cần? Chứ quy mô đồ án ở trường sao mà so với ngoài thị trường ạ.

Thường từ senior thì kiến thức Đại học mới hữu dụng.

2 Likes

Cảm ơn anh @hungaya. Cụ thể như thế nào vậy ạ? Anh chia sẻ sâu hơn một tí được không anh :blush:.

ý này của bạn là muốn phản biện điều gì? đây là điều ai cũng biết

bạn đang đưa ra 2 lựa chọn A và B,

mình nói A không có gì tốt hơn B,
bạn phản biện bằng cách B cũng không có gì tốt hơn A

như vậy thì dẫn tới được kết luận gì? hóa ra cũng chỉ là đi về vạch xuất phát
cái này cũng giống như tranh luận bún bò với hủ tiếu, cái nào ngon hơn, chả đi tới đâu cả

việc bạn đặt ra 1 vấn đề chả đi tới đâu, thậm chí là bạn đưa ra những ý tưởng giống y như bạn chắc chắn nó là con đường đúng, trong khi bạn thì chưa trải nghiệm

theo bạn thì nếu không chỉ rõ, trực quan, thì bạn sẽ không bao giờ tin/nghe
cái này cũng giống như giải thích cách dùng tích phân để tính diện tích cho một đứa học sinh cấp 1, không hiểu thì auto không tin

theo cách tranh luận của bạn, thì mình xin dừng ý kiến lại, con đường là do bạn lựa chọn thôi, bạn đã tự tin vạch ra được con đường riêng cho mình rồi thì đi thôi

mấy cái này đâu có đúng sai, người thành công thì sau này muốn nói gì thì nói thôi, ai mà cãi được

2 Likes

Đến cái lúc em đi viết library cho team em xài, hoặc em viết một khung project cho team dùng, thì kinh nghiệm đó là senior rồi chứ gì nữa.

Ví dụ một task viết một phương thức truyền giữa hai thiết bị, là để truyền cho nhanh, thì em không truyền text nữa, mà truyền kiểu bytes. Lúc đó quyết định lấy mấy bytes là thuộc tính này, mấy bytes là thuộc tính kia, code kiểm tra xem data bên nhận có giống bên gửi hay không,… Về giao thức trao đổi thì có thể tham khảo trong mạng máy tính nè, về kiểm tra thì có Coding theory nè, về cách chọn bytes thì có Kỹ thuật số (bên Điện), hoặc Hệ thống số (Kĩ thuật máy tính).

Kiến thức Đại học không vô dụng đâu.

4 Likes

Bộ 3 thần thánh: Cấu trúc dữ liệu, mạng máy tính, nhập môn CSDL mà mất gốc thì sao đi làm được.

1 Like

Hi there,

Đầu tiên, tớ rất ấn tượng với cách cậu đưa ra câu hỏi rất thực tiễn này. Đây chính xác là tinh thần mà một kỹ sư nên có: luôn tự hỏi mình đang làm để giải quyết điều gì.

vì chả hiểu sao này mình dùng nó CỤ THỂ để giải quyết cái gì! !?

Dù đây là câu hỏi hay và thực tiễn, cơ mà tớ không chắc có thể đưa cho cậu một câu trả lời trọn vẹn được. Hi vọng các bạn khác sẽ bổ sung cho cuộc thảo luận này.
Cơ mà, câu trả lời này sẽ tương đối dài đó. Khó để có thể nói ngắn gọn lắm :smile: Chịu khó đọc nhé cậu!


Về câu hỏi chính của cậu:

Em thắc mắc là những kiến thức “nền tảng” mà trường đại học đang giảng dạy giúp lập trình viên đi xa như thế nào khi mà hấu hết các vấn đề trong lập trình đều đã có sẵn các framework để giải quyết rồi ạ?

Đầu tiên, cậu cần hiểu các kiến thức “nền tảng” bao gồm những gì. Tớ chắc chắn cậu có thể google, hay đọc chương trình học của bọn cậu, để biết được chi tiết, vậy nên tớ chỉ tóm tắt như này:

  • Kiến thức “khoa học thường thức”: các kiến thức nền tảng về khoa học máy tính, như toán rời rạc, đại số bool, cấu trúc dữ liệu và giải thuật, xác suất thống kê, etc.
  • Kiến thức tổng quan về máy tính: tổng quan hệ thống máy tính, kiến trúc máy tính, hệ điều hành, etc.
  • Kiến thức cơ bản về network: tổng quan về network, các lý thuyết về lập trình mạng, socket, etc
  • Kiến thức cơ bản về hệ thống dữ liệu như database, và cách sử dụng, thiết kế mô hình dữ liệu, etc.
  • Kiến thức cơ bản về ngôn ngữ lập trình, chương trình dịch.
  • Quy trình phát triển phần mềm cổ điển.
  • Hình như là còn nhiều nữa :smile:

Nếu cậu học chuyên sâu về công nghệ phần mềm, cậu sẽ cần học thêm nền tảng của software engineering:

  • OOP
  • Kiến trúc phần mềm cơ bản.
  • Quy trình phât triển phần mềm: tất cả các bước của quy trình phát triển phần mềm, cách quản lý dự án, etc.
  • Các phương pháp phát triển phần mềm.
  • Các phương pháp mô hình hóa dữ liệu
  • AI nhập môn, kỹ nghệ tri thức, etc
  • Lý thuyết về tương tác người, máy.
  • Hình như là còn nhiều nữa :smile:

Những kiến thức kể trên đa số đều rất tổng quát và cơ bản, dù nó khá nhiều. Và tớ đồng ý là cậu có rất nhiều lý thuyết ở đây, cơ mà, nó không “suông” :smile:
Tất cả những kiến thức kể trên đều là “building block” cho cậu để học các kiến thức khác. Cậu có thể nhìn thấy điều tương tự từ các ngành nghề khác, như bác sĩ, kỹ sư cơ khí, ca sĩ, vận động viên thể thao, etc. Không có nó, cậu sẽ mất rất nhiều công sức để có thể hiểu tường tận bất cứ khái niệm mới nào trong ngành này.
Chẳng hạn, ngay từ thắc mắc của cậu, “hầu hết các vấn đề trong lập trình đều đã có sẵn các framework để giải quyết”, nên kiến thức ở đại học có cần thiết không. Đúng là các framework đã giải quyết rất nhiều vấn đề cơ bản trong lập trình, nhưng:

  • Framework bao giờ cũng đưa ra giải pháp generic, cậu phải cài đặt cụ thể cậu sẽ giải quyết như thế nào.
    Nếu cậu không có kiến thức nền tảng, cậu khó có thể hiểu được tài liệu của framework đó (họ bao giờ cũng viết cho những người đã được đào tạo nhất định rồi, không ai sẽ giải thích từng khái niệm cơ bản cho cậu ở đó). Cậu chỉ có thể đọc một tutorial từ các bạn Ấn Độ nào đó, copy paste code từ stackoverflow, và không thể giải thích được tại sao cậu cần viết như vậy.
    Cậu có thể thắc mắc “cần gì phải hiểu? Nó chạy là được”, đó là vấn đề. Kỹ sư lập trình không chỉ viết code, họ còn maintain, troubleshoot/debug để tìm lỗi. Nếu cậu không hiểu code (dù chỉ một vài dòng), cậu sẽ luôn luôn bỏ sót thứ gì đó, và đi sai hướng rất nhiều lần khi tìm kiếm nguyên nhân gây ra lỗi. Cậu cũng sẽ trở thành kiểu kỹ sư có xu hướng đổ lỗi cho công nghệ, cú pháp lập trình, etc… (tớ đã gặp rất nhiều kỹ sư kiểu này, điểm chung là họ luôn sử dụng công nghệ sai cách, do thiếu đi sự lý giải cơ bản về công nghệ đó - symptom của việc kiến thức nền tảng kém) :smile:
  • Cậu đã bao giờ gặp kỹ sư muốn dùng nodeJS cho tất cả các kiểu hệ thống, bởi theo quảng cáo nó “non blocking IO” nên tối ưu hóa sử dụng CPU chưa? :smile:
    Mọi công nghệ đều chỉ giải quyết một tập các vấn đề mà nó được thiết kế. Luôn có trade-off khi sử dụng một công nghệ để giải quyết vấn đề, mà cậu buộc phải hiểu rõ điều đó để có thể chọn công nghệ phù hợp với vấn đề của cậu. Cậu có cái búa, không có nghĩa tất cả mọi thứ là cái đinh :smile:
    Không có kiến thức nền tảng và rất nhiều thử nghiệm, cậu khó có thể hiểu rõ được trade off của công nghệ mà cậu cân nhắc. Từ đó, gần như cậu sẽ là kiểu kỹ sư sử dụng 1 stack để giải quyết tất cả các vấn đề.
  • Cậu cũng sẽ mất rất nhiều thời gian để học một công nghệ nếu không có nền tảng.
    Việc học là việc “connect the dots”. Khi cậu học kiến thức mới (giới thiệu “new dot”), nếu cậu có thể kết nối với các kiến thức cũ, để có hiểu biết vững chắc hơn. Đấy là lý do một người càng có nhiều kiến thức (nhiều “dot” sẵn có) càng học nhanh hơn.
    Nếu cậu không có những “dot” nền tảng, bất cứ “dot” mới nào cũng sẽ chỉ là một “dot” rời rạc trong hệ thống kiến thức của cậu. Đó là lý do cậu khó có thể có bức tranh toàn cảnh của bất cứ kiến thức nào cậu có thể học.

Cậu có thể thấy rất nhiều lớp học cấp tốc vài tháng để trở thành lập trình viên hiện nay. Tớ hi vọng cậu không bị “fool” vì những điều đó. Tất cả các bạn xuất phát từ lớp đó, có thể viết code, nhưng sẽ sớm “đâm đầu vào tường” trong vòng 2 tới 3 năm đầu sự nghiệp. Cuối cùng, bằng cách này hay cách khác, họ cũng phải quay lại kiến thức nền tảng :smile:

Đó là lý do cậu nên học tốt ở đại học. Tất nhiên, chỉ biết kiến thức nền tảng chắc chắn sẽ không giúp cậu có việc. Cậu cũng cần hands on experience trong việc viết phần mềm, sử dụng công nghệ,… để trở thành một kỹ sư làm được việc.

Về câu hỏi tiếp theo của cậu:

Nếu đi theo hướng quản lý thì liệu những kiến thức như trên giúp gì khi mình leo lên vị trí senior ạ? Em thấy chỉ cần đủ kinh nghiệm làm việc, kĩ năng mềm là đủ rồi chứ ạ?

Có chứ cậu. Kiến thức nền tảng này chắc chắn cần để cậu lên mức senior.

Đầu tiên, cậu cần hiểu “đủ kinh nghiệm làm việc” là gì.
Bất cứ cậu nhóc mới tốt nghiệp nào cũng có thể trình bày rất rõ ràng tất cả các lý thuyết lập trình, quy trình dự án tiêu chuẩn, cách viết code dễ maintain, etc. Cơ mà, thường thì các bạn ấy không hiểu chính xác lý do cho từng lý thuyết lập trình, quy trình dự án, cách viết code, etc… đó.
Sự khác biệt nằm ở trải nghiệm ở mức độ chuyên nghiệp, với yêu cầu cao, với vô số sai lầm, rút kinh nghiệm, xây dựng phương pháp tiếp cận vấn đề riêng, etc. Cơ mà, để học được từ những trải nghiệm đó, cậu lại phải “connect the dot” :smile:
Có rất nhiều người làm cả chục năm, nhưng vẫn giải quyết vấn đề, hay hiểu biết như một junior engineer. Hoặc là, họ chỉ làm đi làm lại một công việc không có yêu cầu cao, từ đó không có nhiều cơ hội để học những điều mới, hoặc là, họ không đủ khả năng và nền tảng để học hỏi kiến thức mới, dẫn đến việc họ bị chững lại ở một mức trong thời gian dài. Tất nhiên, họ sẽ sớm bị outdate so với market, và bị thay thế bởi lớp trẻ.
Về soft skills, đó là những kỹ năng quan trọng, và đôi khi khó thiết lập hơn cả hard skills. Tớ đồng ý là nhiều khi, có những người có thể lên được vị trí cao tuy thiếu technical hoặc management hard skills, cơ mà bù lại, họ có các bộ kỹ năng tốt khác, như các soft skill liên quan tới xây dựng network và kết dính tổ chức, cùng với complex problem solving skill (tớ chỉ đề cập tới những tấm gương tốt thôi nha :smile: và hoàn toàn không vấn đề gì nếu cậu muốn theo cách đó, có rất nhiều cách để build career mà :smile: ). Cơ mà, nếu cậu muốn đi lên theo hướng engineering manager (hoặc manager ở một công ty công nghệ), cậu chắc chắn cần là một engineer tốt trước, và đó là nơi cậu cần kiến thức nền tảng.
Vậy nên, để có cả “kinh nghiệm” lẫn một bộ skill tốt nếu theo hướng engineering manager, cậu đều cần kiến thức nền tảng ở đại học.

Về point cuối của cậu:

  1. Em có hai dự định: Một là học vượt các môn ra trường sớm hoặc tạm hoãn kết quả học tập một năm để xin thực tập lấy trước kinh nghiệm rồi quay lại lấy bằng. Ngồi trên giảng đường chỉ có mỗi lý thuyết suông em chán kinh khủng :frowning: .

Cậu có thể chọn cách phù hợp với mục tiêu của cậu. Cá nhân tớ thì thấy:

  • Cậu có nhiều cách để lấy kinh nghiệm khi vẫn đang học đại học. Chẳng hạn, cậu nên tận dụng thời gian ở trường để đi thực tập, tham gia các lab, nghiên cứu công nghệ, xây dựng network, etc.
    Ở thời gian này, cậu có cơ hội để mắc sai lầm mà không phải trả giá lớn. Cậu không có sự xa hoa đó khi đi làm đâu :smile:
    Mắc càng nhiều sai lầm, kết hợp với việc áp dụng những thứ đã học ở trường trong giai đoạn này càng nhiều càng tốt. Đó có lẽ là sự kết hợp bền vững hơn cho cậu.
    Tớ cũng muốn cảnh báo trước cho cậu, cậu có thể gặp khủng hoảng khi ra trường, nếu như cậu chưa chuẩn bị sẵn về mặt tinh thần.
  • Hoãn 1 năm chỉ để đi thực tập cũng không phải lựa chọn tốt.
    Tớ đoán cậu đang học năm nhất đại học. Việc đi thực tập quá sớm có thể hại cho cậu ở giai đoạn đầu của sự nghiệp, khi cậu thiếu thời gian hiểu các kiến thức nền tảng.
    Thường thì, cậu nên đi thực tập khi đã có một chút kiến thức cơ bản (khoảng năm 3 cậu chắc chắn phải đi thực tập). Nếu không, cậu khó có thể tận dụng tốt thời gian thực tập cho việc học hỏi kinh nghiệm.
    Cơ mà, nếu cậu thấy cậu cần 1 năm nghỉ ngơi, go ahead, take a gap year và làm điều cậu thích. Cậu là người duy nhất hiểu rõ cậu cần gì, cũng như muốn gì, và tớ cũng nghĩ đó là lựa chọn lành mạnh.

Hi vọng cậu có cái nhìn rõ ràng hơn về việc các kiến thức đại học giúp gì trong tương lai, qua câu trả lời rất dài này!

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