Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính

Hầu hết các lập trình viên hiện đại đều nhận được sự giáo dục của họ tại các trường đại học. Theo thời gian, điều này sẽ thay đổi, nhưng hiện nay mọi chuyện đã như vậy, nhân sự giỏi ở các công ty CNTT vẫn đến từ các trường đại học. Trong bài đăng này, Stanislav Protasov, Giám đốc Quan hệ Đại học của Acronis, nói về tầm nhìn của ông về các đặc điểm của đào tạo đại học cho các lập trình viên tương lai. Giáo viên, sinh viên và những người thuê họ thậm chí có thể tìm thấy một số lời khuyên hữu ích khi cắt giảm.

Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính

Trong 10 năm qua, tôi đã dạy toán, thuật toán, ngôn ngữ lập trình và học máy tại nhiều trường đại học khác nhau. Hiện nay, ngoài chức vụ tại Acronis, tôi còn là phó trưởng khoa khoa học máy tính lý thuyết và ứng dụng tại MIPT. Từ kinh nghiệm làm việc tại các trường đại học tốt của Nga (và không chỉ), tôi đã đưa ra một số nhận xét về việc chuẩn bị cho sinh viên các ngành máy tính.

Quy tắc 30 giây không còn hiệu quả

Tôi chắc rằng bạn đã biết quy tắc 30 giây, trong đó quy định rằng lập trình viên phải hiểu mục đích của một hàm sau khi xem nhanh mã của nó. Nó đã được phát minh ra từ rất lâu và kể từ đó, nhiều hệ điều hành, ngôn ngữ, phần cứng và thuật toán đã xuất hiện. Tôi đã viết mã được 12 năm, nhưng gần đây tôi đã nhìn thấy mã nguồn của một sản phẩm, thoạt nhìn nó có vẻ giống như phép thuật đối với tôi. Ngày nay, nếu bạn không đắm chìm trong lĩnh vực chủ đề thì quy tắc 30 giây sẽ không còn hiệu quả nữa. Nếu không, không chỉ 30 mà cả 300 giây cũng sẽ không đủ để bạn tìm ra cái gì.

Ví dụ: nếu bạn muốn viết trình điều khiển, bạn sẽ cần phải đi sâu vào lĩnh vực này và đọc hàng nghìn dòng mã cụ thể. Với cách tiếp cận nghiên cứu một chủ đề này, một chuyên gia sẽ phát triển “cảm giác trôi chảy”. Giống như trong rap, khi cảm giác về một vần điệu hay và đúng nhịp xuất hiện mà không cần có sự hợp lý hóa đặc biệt. Tương tự như vậy, một lập trình viên được đào tạo tốt có thể dễ dàng nhận ra mã kém hiệu quả hoặc đơn giản là mã xấu mà không cần nghiên cứu chi tiết về nơi xảy ra vi phạm về kiểu hoặc cách tiếp cận dưới mức tối ưu đã được sử dụng (nhưng cảm giác này có thể rất khó giải thích).

Tính chuyên môn hóa và độ phức tạp ngày càng tăng dẫn đến thực tế là giáo dục cử nhân không còn mang lại cơ hội nghiên cứu đủ chiều sâu tất cả các lĩnh vực. Nhưng chính ở trình độ học vấn này người ta cần có được một tầm nhìn. Sau đó, ở trường cao học hoặc tại nơi làm việc, bạn sẽ cần dành một chút thời gian để đắm mình vào các vấn đề và chi tiết cụ thể của môn học, nghiên cứu tiếng lóng, ngôn ngữ lập trình và mật mã của đồng nghiệp, đọc các bài báo và sách. Với tôi, có vẻ như đây là cách duy nhất, với sự giúp đỡ của trường đại học, để “bơm xà ngang” cho tương lai. chuyên gia hình chữ T.

Ngôn ngữ lập trình nào là tốt nhất để dạy ở trường đại học?

Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính
Tôi rất vui mừng khi các giáo viên đại học đã từ bỏ việc tìm kiếm câu trả lời chính xác cho câu hỏi: “Ngôn ngữ tốt nhất để lập trình là gì?” Cuộc tranh luận về cái nào tốt hơn - C# hay Java, Delphi hay C++ - hầu như đã biến mất. Sự xuất hiện của nhiều ngôn ngữ lập trình mới và sự tích lũy kinh nghiệm sư phạm đã dẫn đến sự hiểu biết lâu dài trong môi trường học thuật: mỗi ngôn ngữ đều có vị trí thích hợp riêng.

Vấn đề giảng dạy bằng ngôn ngữ lập trình này hay ngôn ngữ lập trình khác đã không còn được ưu tiên. Không quan trọng khóa học được dạy bằng ngôn ngữ nào. Điều chính là đủ tính biểu cảm của ngôn ngữ. Sách "Nghệ thuật lập trình đa xử lý” là một minh họa tốt cho quan sát này. Trong phiên bản cổ điển này, tất cả các ví dụ đều được trình bày bằng Java - một ngôn ngữ không có con trỏ nhưng có Trình thu gom rác. Hầu như không ai có thể tranh luận rằng Java không phải là sự lựa chọn tối ưu để viết mã song song hiệu suất cao. Nhưng ngôn ngữ này phù hợp để giải thích các khái niệm được trình bày trong cuốn sách. Một vi dụ khac - khóa học máy cổ điển Andrew Nna, dạy Matlab trong môi trường Octave. Ngày nay bạn có thể chọn một ngôn ngữ lập trình khác, nhưng điều đó thực sự tạo ra sự khác biệt gì nếu ý tưởng và cách tiếp cận là quan trọng?

Thực tế hơn và gần gũi hơn với thực tế

Đồng thời, trong những năm gần đây số lượng học viên ở các trường đại học ngày càng nhiều. Nếu các chương trình đại học trước đây của Nga bị chỉ trích tích cực vì xa rời thực tế thì ngày nay điều tương tự cũng không thể xảy ra với giáo dục CNTT. 10 năm trước hầu như không có giáo viên nào ở các trường đại học có kinh nghiệm thực tế trong ngành. Ngày nay, ngày càng thường xuyên, các lớp học tại một khoa chuyên ngành không được giảng dạy bởi các giáo viên khoa học máy tính toàn thời gian mà bởi các chuyên gia CNTT thực hành, những người chỉ dạy 1-2 khóa học trong thời gian rảnh rỗi ngoài công việc chính của họ. Cách tiếp cận này tự chứng minh dựa trên quan điểm đào tạo nhân sự chất lượng cao, cập nhật các khóa học và tất nhiên là tìm kiếm những nhân viên tiềm năng trong công ty. Tôi không nghĩ mình sẽ tiết lộ bí mật bằng cách nói rằng chúng tôi hỗ trợ một khoa cơ bản tại MIPT và xây dựng mối quan hệ với các trường đại học khác, bao gồm cả việc chuẩn bị cho những sinh viên có thể bắt đầu sự nghiệp của họ tại Acronis.

Nhà toán học hay lập trình viên?

Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính
Holy Wars, trước đây xoay quanh các ngôn ngữ lập trình, đã chuyển sang hướng triết học. Bây giờ những người được gọi là “lập trình viên” và “nhà toán học” đang tranh cãi với nhau. Về nguyên tắc, các trường này có thể được tách thành hai chương trình giáo dục, nhưng ngành này vẫn còn kém trong việc tách biệt những chi tiết đó và từ đại học này sang đại học khác, chúng ta có nền giáo dục tương tự với trọng tâm hơi khác nhau. Điều này có nghĩa là cả sinh viên và công ty mà anh ta sẽ tiếp tục làm việc sẽ phải bổ sung những mảnh ghép còn thiếu vào câu đố kiến ​​\uXNUMXb\uXNUMXbthức.

Sự xuất hiện của những người hành nghề trong các trường đại học viết mã công nghiệp bằng các ngôn ngữ khác nhau giúp sinh viên có kỹ năng phát triển tốt hơn. Làm quen tốt với việc triển khai các thư viện, khung và kỹ thuật lập trình tiêu chuẩn, các lập trình viên thực hành truyền cho sinh viên mong muốn viết mã tốt, thực hiện nhanh chóng và hiệu quả.

Tuy nhiên, kỹ năng hữu ích này đôi khi dẫn đến sự xuất hiện của những người thích phát minh lại bánh xe. Sinh viên lập trình nghĩ như thế này: “Tôi có nên viết thêm 200 dòng mã tốt nữa để giải quyết trực tiếp vấn đề không?”

Những giáo viên đã được đào tạo về toán học cổ điển (ví dụ: từ Khoa Toán học hoặc Toán ứng dụng) thường làm việc trong môi trường giả khoa học hoặc trong lĩnh vực mô hình hóa và phân tích dữ liệu. Các “nhà toán học” nhìn nhận các vấn đề trong lĩnh vực Khoa học Máy tính theo cách khác. Họ chủ yếu hoạt động không phải bằng mã mà bằng các thuật toán, định lý và mô hình hình thức. Một lợi thế quan trọng của phương pháp toán học là sự hiểu biết cơ bản rõ ràng về những gì có thể và không thể giải quyết được. Và làm thế nào để giải quyết nó.

Theo đó, giáo viên dạy toán nói về lập trình thiên về lý thuyết. Những sinh viên đến từ “các nhà toán học” thường đưa ra những giải pháp được cân nhắc kỹ lưỡng và vượt trội về mặt lý thuyết, nhưng thường không tối ưu theo quan điểm ngôn ngữ học và thường viết đơn giản một cách cẩu thả. Một học sinh như vậy tin rằng mục tiêu chính của mình là thể hiện khả năng giải quyết những vấn đề như vậy về nguyên tắc. Nhưng việc thực hiện có thể khập khiễng.

Những đứa trẻ được nuôi dạy như những lập trình viên ở trường hoặc trong những năm đầu đời đều mang theo một “chiếc xe đạp rất đẹp”, tuy nhiên, loại xe này thường không hoạt động hiệu quả theo kiểu tiệm cận. Ngược lại, họ không tự đặt cho mình nhiệm vụ lý thuyết sâu sắc mà tìm đến sách giáo khoa để tìm kiếm giải pháp tối ưu, ưa thích code đẹp.

Ở các trường đại học khác nhau, trong các cuộc phỏng vấn sinh viên, tôi thường xem “trường học” nào làm nền tảng cho việc học của anh ấy. Và tôi gần như chưa bao giờ đạt được sự cân bằng hoàn hảo trong giáo dục cơ bản. Khi còn nhỏ, ở thành phố của tôi, bạn có thể chuẩn bị cho các kỳ thi Olympic toán, nhưng không có câu lạc bộ lập trình nào. Giờ đây, trong các câu lạc bộ, trẻ em học lập trình bằng ngôn ngữ Go và Python “thời thượng”. Vì vậy, ngay cả ở cấp độ tuyển sinh vào các trường đại học cũng có sự khác biệt về cách tiếp cận. Tôi tin rằng điều quan trọng là phải duy trì cả hai kỹ năng ở trường đại học, nếu không, một chuyên gia không đủ cơ sở lý thuyết hoặc một người chưa học và không muốn viết mã giỏi sẽ đến làm việc tại công ty.

Làm thế nào để “bơm xà ngang” cho tương lai Chuyên gia hình chữ T?

Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính
Rõ ràng là trong những điều kiện như vậy, học sinh chỉ cần chọn những gì mình thích nhất. Giáo viên chỉ đơn giản là truyền đạt quan điểm gần gũi hơn với mình. Nhưng mọi người sẽ được hưởng lợi nếu mã được viết đẹp và theo quan điểm của thuật toán, mọi thứ đều rõ ràng, hợp lý và hiệu quả.

  • chân trời CNTT. Một người tốt nghiệp bằng cử nhân Khoa học Máy tính là một chuyên gia có sẵn với tầm nhìn kỹ thuật phát triển, người có lẽ đã chọn hồ sơ của mình. Nhưng vào năm học cuối cấp, chúng tôi không biết cậu ấy hoặc cô ấy sẽ làm gì. Anh ta có thể đi sâu vào khoa học hoặc phân tích, hoặc ngược lại, anh ta có thể viết một lượng lớn mã mỗi ngày. Vì vậy, sinh viên cần được hướng dẫn mọi khía cạnh khi làm việc trong lĩnh vực CNTT và được làm quen với tất cả các công cụ. Lý tưởng nhất là giáo viên dạy các môn lý thuyết sẽ thể hiện mối liên hệ với thực hành (và ngược lại).
  • điểm tăng trưởng. Vì lợi ích của bản thân học sinh là không cho phép mình đi đến cực đoan. Để hiểu bạn là “nhà toán học” hay “lập trình viên” không khó. Chỉ cần lắng nghe xung động đầu tiên khi giải một bài toán là đủ: bạn muốn làm gì - tra cứu sách giáo khoa để tìm cách tiếp cận tối ưu hoặc viết một vài hàm chắc chắn sẽ hữu ích sau này? Dựa trên điều này, bạn có thể xây dựng một quỹ đạo bổ sung hơn nữa cho việc học của mình.
  • Nguồn kiến ​​thức thay thế. Điều xảy ra là chương trình được cân bằng tốt, nhưng “Lập trình hệ thống” và “Thuật toán” được dạy bởi những người hoàn toàn khác nhau và một số học sinh gần gũi hơn với giáo viên đầu tiên và những học sinh khác - với giáo viên thứ hai. Nhưng ngay cả khi bạn không thích giáo sư, đây không phải là lý do để bỏ qua một số môn học để ưu tiên những môn học khác. Bản thân các cử nhân cũng quan tâm đến việc tìm kiếm ý chí làm việc với các nguồn kiến ​​thức và không bao giờ tin tưởng vào những ý kiến ​​cấp tiến như “toán học là nữ hoàng của khoa học, điều quan trọng nhất là phải biết các thuật toán” hoặc “mã tốt sẽ bù đắp cho mọi thứ khác”.

Bạn có thể đào sâu kiến ​​thức về lý thuyết bằng cách chuyển sang các tài liệu chuyên ngành và các khóa học trực tuyến. Bạn có thể cải thiện kỹ năng của mình về ngôn ngữ lập trình trên Coursera, Udacity hoặc Stepik, nơi có nhiều khóa học khác nhau được trình bày. Ngoài ra, sinh viên thường bắt đầu xem các khóa học ngôn ngữ khó nếu họ cảm thấy giáo viên thuật toán biết rõ về toán nhưng không thể trả lời các câu hỏi triển khai phức tạp. Không phải ai cũng đồng ý với tôi, nhưng trong thực tế của tôi, điều đó đã được chứng minh là tốt chuyên môn về C++ từ Yandex, trong đó ngày càng có nhiều tính năng phức tạp của ngôn ngữ được phân tích tuần tự. Nói chung, hãy chọn khóa học có xếp hạng cao từ các công ty hoặc trường đại học có uy tín.

Các kĩ năng mềm

Làm thế nào để tận dụng tối đa nền giáo dục khoa học máy tính
Xuất thân từ trường đại học đến làm việc ở bất kỳ công ty nào, từ một công ty khởi nghiệp cho đến một tập đoàn lớn, sinh viên ngay cả những trường đại học hàng đầu cũng thấy mình kém thích nghi với môi trường làm việc thực tế. Sự kiện là ngày nay các đại học “bảo mẫu” sinh viên rất nhiều. Ngay cả khi bỏ lỡ rất nhiều buổi học, không chuẩn bị cho các bài kiểm tra và bài kiểm tra đúng giờ, ngủ quên hoặc đi thi muộn, mọi người vẫn có thể đậu và thi lại - và cuối cùng vẫn nhận được bằng tốt nghiệp.

Tuy nhiên, ngày nay có đầy đủ các điều kiện để học sinh chuẩn bị cho cuộc sống trưởng thành và hoạt động nghề nghiệp độc lập. Họ sẽ không chỉ phải lập trình mà còn phải giao tiếp. Và điều này cũng cần được dạy. Các trường đại học có nhiều hình thức khác nhau để phát triển những kỹ năng này, nhưng than ôi, chúng thường không được quan tâm đầy đủ. Tuy nhiên, chúng ta có nhiều cơ hội để đạt được kỹ năng làm việc nhóm hiệu quả.

  • Giao tiếp kinh doanh bằng văn bản. Thật không may, hầu hết sinh viên tốt nghiệp đại học đều không biết gì về nghi thức giao tiếp. Đặc điểm của giao tiếp trong các ứng dụng nhắn tin tức thời là việc trao đổi tin nhắn cả ngày lẫn đêm cũng như việc sử dụng phong cách đàm thoại và từ vựng thân mật. Tuy nhiên, có thể đào tạo bài phát biểu bằng văn bản khi sinh viên giao tiếp với khoa và trường đại học.

    Trong thực tế, các nhà quản lý thường phải đối mặt với nhu cầu chia một dự án lớn thành các nhiệm vụ nhỏ. Để làm được điều này, bạn cần mô tả rõ ràng từng nhiệm vụ và các thành phần của nó để các nhà phát triển cấp dưới hiểu được yêu cầu của chúng. Một nhiệm vụ được xác định kém thường dẫn đến việc phải làm lại điều gì đó, đó là lý do tại sao kinh nghiệm giao tiếp bằng văn bản giúp sinh viên tốt nghiệp làm việc trong các nhóm phân tán.

  • Trình bày bằng văn bản kết quả công việc của bạn. Để trình bày các dự án giáo dục của mình, học sinh cuối cấp có thể viết bài trên Habr, các bài báo khoa học và thậm chí cả các báo cáo. Có rất nhiều cơ hội cho việc này - khóa học bắt đầu vào năm thứ hai tại một số trường đại học. Bạn cũng có thể sử dụng các bài luận như một hình thức kiểm soát - chúng thường có hình thức gần giống với một bài báo hơn. Cách tiếp cận này đã được triển khai tại Trường Kinh tế Cao cấp thuộc Đại học Nghiên cứu Quốc gia.

    Nếu một công ty áp dụng cách tiếp cận phát triển linh hoạt, công ty đó phải trình bày kết quả công việc của mình theo từng phần nhỏ hơn nhưng thường xuyên hơn. Để làm được điều này, điều quan trọng là có thể truyền đạt ngắn gọn kết quả công việc của một chuyên gia hoặc toàn bộ nhóm. Ngoài ra, nhiều công ty ngày nay tiến hành "đánh giá" - hàng năm hoặc nửa năm. Nhân viên thảo luận về kết quả và triển vọng công việc. Đánh giá thành công là lý do chính cho sự phát triển nghề nghiệp, tiền thưởng, chẳng hạn như ở Microsoft, Acronis hoặc Yandex. Đúng, bạn có thể lập trình tốt, nhưng “ngồi trong góc” ngay cả một chuyên gia ngầu cũng sẽ luôn thua người biết thể hiện tốt thành công của mình.

  • Viết học thuật. Bài viết học thuật xứng đáng được đề cập đặc biệt. Sẽ rất hữu ích nếu học sinh làm quen với các quy tắc viết văn bản khoa học, sử dụng lập luận, tìm kiếm thông tin từ nhiều nguồn khác nhau và định dạng tài liệu tham khảo cho các nguồn này. Nên làm điều này bằng tiếng Anh, vì cộng đồng học thuật quốc tế có nhiều văn bản hay hơn và đối với các ngành khác nhau, đã có sẵn các mẫu để trình bày kết quả khoa học. Tất nhiên, kỹ năng viết học thuật cũng cần thiết khi chuẩn bị các ấn phẩm bằng tiếng Nga, nhưng có rất ít ví dụ về các bài báo hiện đại hay bằng tiếng Anh. Những kỹ năng này có thể đạt được thông qua một khóa học thích hợp, hiện được đưa vào nhiều chương trình giáo dục.
  • Các cuộc họp chủ trì. Hầu hết sinh viên không biết cách chuẩn bị cho cuộc họp, lập biên bản và xử lý dữ liệu. Nhưng nếu chúng ta phát triển kỹ năng này ở trường đại học, chẳng hạn như bằng cách tham gia vào các dự án nhóm, chúng ta có thể tránh lãng phí thời gian ở nơi làm việc. Điều này đòi hỏi sự giám sát công việc dự án của sinh viên để dạy họ cách tiến hành các cuộc họp một cách hiệu quả. Trên thực tế, điều này khiến mỗi công ty tốn rất nhiều tiền - xét cho cùng, nếu một số người nhận được mức lương lớn dành một giờ làm việc tại một cuộc biểu tình, thì bạn muốn có một khoản lợi nhuận tương ứng cho việc đó.
  • Nói trước công chúng. Nhiều sinh viên phải đối mặt với nhu cầu chỉ phát biểu công khai khi bảo vệ luận án của mình. Và không phải ai cũng sẵn sàng cho việc này. Tôi đã chứng kiến ​​nhiều sinh viên:
    • đứng quay lưng về phía khán giả,
    • lắc lư, cố gắng đưa hoa hồng vào trạng thái xuất thần,
    • bẻ bút, bút chì và bút trỏ,
    • đi vòng tròn
    • nhìn xuống sàn nhà.

    Điều này là bình thường khi một người biểu diễn lần đầu tiên. Nhưng bạn cần phải bắt đầu giải quyết sự căng thẳng này sớm hơn - bằng cách bảo vệ bài tập của mình trong bầu không khí thân thiện giữa các bạn cùng lớp.

    Ngoài ra, thông lệ tiêu chuẩn trong các tập đoàn là tạo cơ hội cho nhân viên đề xuất ý tưởng và nhận tài trợ, một vị trí hoặc một dự án dành riêng cho ý tưởng đó. Tuy nhiên, nếu bạn nghĩ về điều đó, đây cũng là sự bảo vệ tương tự cho các khóa học, chỉ ở cấp độ cao hơn. Tại sao không rèn luyện những kỹ năng nghề nghiệp hữu ích như vậy trong khi học?

Tôi đã bỏ lỡ cái gì?

Một trong những lý do để viết bài này là bài viết, được công bố trên trang web của Đại học bang Tyumen. Tác giả bài viết chỉ tập trung vào những khuyết điểm của học sinh Nga được giáo viên nước ngoài nhận thấy. Việc giảng dạy của tôi tại các trường đại học khác nhau cho thấy rằng trường học và giáo dục đại học ở Nga mang lại một nền tảng tốt. Sinh viên Nga am hiểu về toán học và thuật toán nên việc xây dựng khả năng giao tiếp chuyên nghiệp với họ sẽ dễ dàng hơn.

Ngược lại, đối với sinh viên nước ngoài, kỳ vọng của giáo viên tiếng Nga đôi khi có thể quá cao. Ví dụ, ở cấp độ đào tạo cơ bản về toán học, sinh viên Ấn Độ mà tôi gặp đều tương tự như sinh viên Nga. Tuy nhiên, đôi khi họ thiếu kiến ​​thức chuyên ngành khi tốt nghiệp đại học. Học sinh giỏi ở châu Âu có thể có nền tảng toán học kém hơn ở cấp phổ thông.

Và nếu bạn học hoặc làm việc tại một trường đại học, giờ đây bạn có thể rèn luyện các kỹ năng giao tiếp (của chính bạn hoặc của sinh viên), mở rộng nền tảng cơ bản và thực hành lập trình. Vì mục đích này, hệ thống giáo dục Nga cung cấp tất cả các cơ hội - bạn chỉ cần sử dụng chúng một cách chính xác.

Tôi sẽ rất vui nếu trong phần bình luận của bài đăng, bạn chia sẻ liên kết của mình đến các khóa học và phương pháp giúp cân bằng sự cân bằng trong giáo dục cũng như các cách khác để cải thiện kỹ năng mềm khi học tại trường đại học.

Nguồn: www.habr.com

Thêm một lời nhận xét