IT trong trường đại học - nên học gì?

Chào mọi người, mình là farmerboy, một sinh viên đang học Công nghệ thông tin của Trường Đại học Bách Khoa Đà Nẵng. Giới thiệu sơ qua một chút, mình là một Competitive Programmer (tức là những người chơi lập trình thi đấu), mình đã học thuật toán tầm 8 năm, nhưng chỉ thực sự học nghiêm túc chỉ từ 2-3 năm trở lại đây.

Nói một chút về quá trình học tập của mình, từ năm lớp 8, nhờ anh mình, mình đã được tiếp cận ngôn ngữ lập trình Pascal, mình đã thực sự rất thích việc in các dòng chữ ra màn hình, cảm giác như là một coder thực thụ vậy (suy nghĩ của một đứa nhóc tầm 13-14 tuổi). Ngày đó, chỉ cần biết đệ quy hay duyệt một cách phức tạp chút, bạn đã trở thành trùm, có thể kiếm giải ở các cuộc thi thành phố, cảm giác mới cấp 2 đã được đi thi tin học này nọ rất là sướng. Lên cấp 3, cũng với lối tư duy duyệt và đệ quy, mình đã thấy được hàng loạt hạn chế khi không tìm hiểu và học thêm, mình đã cố gắng học Quy hoạch động (Dynamic Programming - DP), nhưng ngặt nỗi mình không tài nào có thể học được nó. Thằng bạn mình thì học siêu khá cái này và mình rất nể nó, cùng với DP, các cấu trúc dữ liệu phức tạp hơn mình cũng không thể nào hiểu nổi. Thằng bạn mình thì hiểu nhanh và tốt lắm. Cuối cùng mình đi thi bằng cách học thuộc các bài toán có sẵn, vì mình không còn cách nào khác. Nhưng bằng một cách thần kì nào đó, mình vẫn giải cao hơn nó =)). Thực sự mình vẫn cảm thấy tiếc vì những năm cấp 3 không học hành nghiêm túc cũng như không có thầy hướng dẫn như các trường chuyên khác. Mình đã nghỉ học thuật toán trong toàn bộ năm lớp 12 vì kì thi đại học.

Lên đại học, mình đã nghĩ là sẽ có thầy hướng dẫn để có thể trở nên tiến bộ hơn và được tham dự vào kì thi ACM-ICPC mơ ước mà mình và thằng bạn đã hứa hẹn với nhau sẽ tham gia sau khi đậu đại học. Cuối cùng thì, mình vẫn bị mắc kẹt trong cái dớp không thể hiểu được DP và các cấu trúc dữ liệu khác trong năm đầu và nửa năm thứ hai đại học. Thực sự mình rất tiếc nuối khoảng thời gian này, mình đã có thể mạnh hơn rất nhiều nếu đi đúng hướng. Mình cũng đã hỏi nhiều người về cách học DP cho hiệu quả và câu trả lời luôn là "Làm nhiều thì sẽ quen thôi em". Bây giờ mình thấy câu nói đó rất đúng, làm nhiều thực sự mình đã quen dạng, tuy nhiên cái bản chất thì phải đến khi học Toán rời rạc trong trường thì mình mới hiểu rõ DP và từ đó việc học các thuật khác trở nên vô cùng dễ dàng (phần lớn là dễ, vẫn có những thuật khó nhưng hiểu nhanh). Đến nay đã gần hết năm thứ 4 của đại học. Và đây là những thứ mình đã đúc kết được trong quá trình học đại học:

+ Tiếng Anh: Rõ ràng, ngoài tiếng mẹ đẻ ra bạn cần phải học một ngôn ngữ thứ hai và không ngôn ngữ nào phổ biến bằng tiếng Anh. Trong quá trình học và thi ACM, kĩ năng đọc của mình tăng lên đáng kể. Nào là học thuật toán mới, học ngôn ngữ mới, học quá trời thứ mới, tài liệu tiếng Anh là thứ bạn bắt buộc phải đọc nếu muốn nâng tầm mình thật nhanh trong khi các tài liệu tiếng Việt chưa phổ biến và nếu có thì văn phong dịch lại cũng cực chuối khiến cho não bộ sợ mà chạy đi mất vì không hiểu tài liệu tiếng Việt viết cái gì. Tất nhiên ban đầu sẽ có rất nhiều khó khăn khi mà bạn phải vừa đọc vừa dịch, cực nản khi phải mở to mắt suốt đêm chỉ để xem câu này có nghĩa là gì, nhưng yên tâm, sau một thời gian đau khổ bạn sẽ có được kĩ năng đọc và skimming (đọc lướt) hoàn hảo và bạn cũng có thể tra cứu những thứ mình cần bằng tiếng Anh mà cách đó vài tháng bạn không thể tìm được với từ khóa bằng tiếng Việt.

Kĩ năng nghe của mình cũng tốt vì mình coi phim US rất nhiều và học được không ít cấu trúc hay. Mình không biết khuyên các bạn nghe khó khăn như thế nào để tiến bộ vì kĩ năng nghe của mình rất tự nhiên và không qua bất kỳ việc học nào. Nếu có khuyên thì mình chỉ khuyên các bạn nên nghe báo đài nhiều hoặc xem những phim tiếng Anh mà mình yêu thích, có thích thì mới tập trung nghe nhân vật nói gì và từ đó phát triển thêm, chứ việc nghe các bài thi thực sự rất là đau đầu và mình nghĩ ép buộc nghe các bài thi thì chỉ có hư não thêm chứ chẳng cải thiên được gì. Tiêu chí của mình là phải thích thì mới làm được, nếu muốn tiến bộ.

Về kĩ năng nói và viết thì đây là 2 yếu điểm lớn nhất của mình. Nhờ việc phỏng vấn với các công ty nước ngoài nên mình đã tự tin hơn một chút khi nói. Mình thực sự khuyên các bạn hãy chớp lấy bất kỳ cơ hội nào để nói chuyện với người nước ngoài, có một người bạn Tây thì càng tốt, mình thấy đây là cách tốt nhất để bạn trau dồi kĩ năng nói. Viết thì bạn nên đi học vì đây là một kỹ năng khá là academic, việc có thầy cô hướng dẫn sẽ tốt hơn là bạn ngồi nhà tự viết mà không hiểu được mình sai chỗ nào khi kiểm tra luôn luôn bị điểm thấp.

+ Giao tiếp: Giao tiếp là một khía cạnh khá là chung chung, cụ thể thì chúng ta sẽ làm gì? Đó không chỉ là cách bạn nói chuyện - talk (mình không nói đến việc tán gẫu - chat) với người khác, đó còn là cách bạn bày tỏ quan điểm, nói ra thứ mà mình nghĩ, bày tỏ tư duy giải quyết vấn đề, thuyết trình trước đám đông. Đây là những kỹ năng cực kỳ quan trọng, then chốt nếu bạn muốn đi làm cho nghiêm chỉnh. Do đó, hãy tận dụng những buổi thuyết trình, những bài tập của thầy cô giúp bạn trình bày quan điểm và suy nghĩ của bản thân, và đôi khi, nên áp dụng tiếng Anh để tập trình bày suy nghĩ, mô tả vấn đề, đây là điểm yếu mà mình nhận ra sau khi phỏng vấn Google và Facebook, Sếp của bạn chắc chắn sẽ không biết bạn đang nghĩ gì nếu bạn không nói, nhưng nói cũng phải cho thuyết phục và có tính toán, chứ không phải nói một cách lung tung. Nếu giao tiếp tốt, khả năng bạn vào được các công ty công nghệ hàng đầu thế giới là rất cao.

Một vấn đề nữa về giao tiếp mà mình thấy cũng cần thiết đó chính là việc hỏi. Lúc học thuật toán mình rất ít khi hỏi, mà chủ yếu tìm kiếm những câu hỏi của người khác :)). Không biết điều đó là tốt hay xấu nhưng mình rất sợ việc hỏi mà không tinh ý sẽ làm phật lòng người khác (mình đang đi nhờ người ta mà). Mình đã từng chửi nhau với một ông sinh năm 88 vì xin một bài tập mà chỉ nói cụt ngủn "Xin bài ...". Mình nghĩ khi các bạn đi nhờ người khác thì nên nói chuyện một cách đứng đắn, chủ ngữ vị ngữ đàng hoàng, để bị ghét thì ai mà giúp cho được :)). Hỏi cũng là một cách rất nhanh để giải quyết vấn đề nếu bạn đang tuyệt vọng với Google Search, ngoài ra nếu hỏi lịch sự cũng tạo ra một mối quan hệ rất tốt với người được hỏi, và họ sẽ vui lòng trả lời câu hỏi của các bạn vào những lần sau, có thể trao đổi kiến thức một cách tốt hơn. Cách hỏi bài một cách lịch sự có thể xem ở đây: https://sites.google.com/site/kc97blb/home/huong-dan-cach-hoi-bai-lich-su

+ Thuật toán: Khi bạn học công nghệ thông tin, một trong những thứ quan trọng nhất chính là thuật toán (không biết bên design có phải học không nhỉ). Nói về thuật toán thì ôi thôi, cực kỳ nhiều kiến thức hay và quan trọng. Mình xin trích một đoạn trong note của thầy Phạm Nguyễn Sơn Tùng (HCMUS): "Thuật toán không phải là chiếc đũa thần, nó không làm được tất cả mọi thứ trên đời, nhưng nếu bạn nắm vững thuật toán, bạn sẽ có lợi thế vô cùng lớn trong cuộc cạnh tranh ngành nghề khốc liệt hiện nay. Vì thế nếu có cơ hội làm quen với thuật toán bạn hãy học nó càng sớm càng tốt." (Các bạn có thể xem đầy đủ note tại đây: Note về thuật toán của thầy Phạm Nguyễn Sơn Tùng). Thật vậy, hãy nhìn vào các công ty công nghệ lớn trên thế giới, có bao giờ bạn tự hỏi rằng, sao Google lại tìm kiếm nhanh đến như vậy, sao Facebook có thể gợi ý kết bạn một người mà bạn vừa gặp lúc sáng... Đó là vì họ có những thuật toán vĩ đại, có thể xử lý một lượng thông tin vô cùng lớn. Và đầu vào của họ cũng là những người giỏi thuật toán. Ngoài việc qua các môn học trên trường một cách dễ dàng, thuật toán còn giúp cho các bạn phát triển tư duy, cách suy nghĩ để giải quyết vấn đề và cũng là mấu chốt để các bạn đi phỏng vấn Google, Facebook, Amazon...

Có thể sẽ có bạn nghĩ là "ôi dào, học thuật toán làm gì cho mệt, cứ ra mấy trung tâm học ngôn ngữ lập trình với công nghệ rồi họ giới thiệu việc làm là xong chứ gì". Đúng, có thể là bạn sẽ được học công nghệ, rồi trung tâm có thể giới thiệu việc làm cho bạn, nhưng bạn ra làm cho họ như những cái máy. Mình không phủ nhận vai trò của các trung tâm, họ dạy trước những kiến thức mà trong trường đại học có thể dạy bạn rất trễ hoặc không dạy bạn. Mình cũng là người đi học ở trung tâm (mình học Java ở trung tâm, đợi trường dạy chắc mình đã chết khô), thử nghĩ mà xem, thời gian ngắn, khối lượng kiến thức lớn, giá học thì cũng không rẻ, nhiều lúc mình làm theo trên bảng làm mà không hiểu sao phải làm như thế, thời gian thì quá gấp khiến giáo viên cũng không có thời gian chỉ kỹ cho bạn. Điều này khiến cho khi bạn đi làm, bạn chỉ làm theo những gì bạn nhớ, chứ không làm theo những gì bạn nghĩ. Nếu nghĩ theo hướng tích cực thì trung tâm là nơi sẽ kéo bạn ra khỏi vũng lầy của việc tự học, sẽ có người hướng dẫn bạn (mình đã thử tự học Java và OOP nhưng không thành công và mình đã đi học trung tâm :v). Công nghệ là thứ bạn có thể tự xem trên mạng được, nhưng tư duy và suy nghĩ thì phải cần một quá trình, hơn nữa, mấu chốt của các phần mềm hoặc hệ thống vẫn dựa hoàn toàn vào các thuật toán. Học thuật toán đi, cái bạn thu được chắc chắn là rất lớn đấy.

+ Các môn học cơ sở ngành:  Ở đây mình muốn nói một chút về các môn học ở đại học, mình biết là đa số môn học rất chán, chán đến mức bạn có thể ôm gối lên trường ngủ, nhưng cũng chính vì lối suy nghĩ đó đã khiến cho mình bỏ qua nhiều môn học có thể gọi là then chốt, cực kỳ then chốt. Mình muốn recommend một số môn học mà bạn không nên bỏ lỡ khi học đại học, dù cho có chán đến mức nào đi chăng nữa, bạn cũng phải tìm tòi những kiến thức của các môn học này, các công ty nước ngoài yêu cầu rất cao về những kiến thức này:
- Các môn học về thuật toán (Cấu trúc dữ liệu, Tin học đại cương...)
- Cơ sở dữ liệu (Phải học cực chắc môn này)
- Các môn học liên quan đến mạng (Mạng máy tính, Lập trình mạng.... cực kỳ quan trọng)
- Nguyên lý hệ điều hành (Mình đã rất hối hận khi học qua loa môn này)
- Toán (Những khía cạnh cần cho tin học như Xác suất, đếm...)

Mình thật lòng khuyên các bạn đừng coi thường những môn học này, kiến thức của chúng chắc chắn là sẽ không thừa và sẽ rất có ích trong quá trình đi xin việc của các bạn.

Ngoài ra việc học trước những ngôn ngữ hoặc nền tảng khác cũng tốt lắm nhé, như Java, Android, .NET, HTML... sẽ giúp các bạn rất nhiều (nhờ học trước Java mình làm đồ án giải thuật cực khỏe :v)

Trên đây là những cái mình nghĩ là sẽ giúp ích cho sinh viên CNTT trong quá trình học đại học, đây là lần đầu tiên mình viết blog nên không tránh khỏi sai sót hoặc các luận điểm thiếu thuyết phục. Cảm ơn mọi người đã đọc đến hết bài viết siêu chuối của mình. Mong các bạn ủng hộ và chúc các bạn thành công trên con đường IT này ^^.

17/03/2017

farmerboy

Nhận xét

Đăng nhận xét

Bài đăng phổ biến