如何充分利用電腦科學教育

大多數現代程式設計師在大學接受教育。 隨著時間的推移,這種情況會改變,但現在的情況是,IT公司的優秀人才仍然來自大學。 在這篇文章中,Acronis 大學關係總監 Stanislav Protasov 談論了他對未來程式設計師大學培訓特徵的看法。 教師、學生和僱用他們的人甚至可能會在其中找到一些有用的提示。

如何充分利用電腦科學教育

在過去 10 年裡,我一直在多所大學教授數學、演算法、程式語言和機器學習。 如今,除了在 Acronis 擔任職務外,我還是 MIPT 理論與應用電腦科學系的副系主任。 根據我在俄羅斯(不僅是)優秀大學的工作經驗,我對電腦學科學生的準備做了一些觀察。

30秒規則不再有效

我相信您已經遇到 30 秒規則,該規則規定程式設計師應該在快速查看程式碼後了解函數的用途。 它是很久以前就發明的,從那時起,出現了許多作業系統、語言、硬體和演算法。 我編寫程式碼已經有 12 年了,但最近我看到了一個產品的源代碼,乍一看對我來說就像魔法一樣。 今天,如果你沒有沉浸在主題領域,那麼 30 秒規則就不再運作了。 不然的話,不只是30秒,就是300秒也不夠你弄清楚是什麼。

例如,如果您想編寫驅動程序,則需要深入該領域並閱讀數千行特定程式碼。 透過這種研究主題的方法,專家會產生一種「心臟流感」。 就像在說唱中一樣,當良好的韻律和正確的節奏的感覺出現時,無需特殊的合理化。 同樣,訓練有素的程式設計師可以輕鬆識別無效或簡單的錯誤程式碼,而無需詳細研究發生樣式衝突或使用次優方法的位置(但這種感覺可能很難解釋)。

專業化和日益複雜性導致學士學位教育不再提供足夠深入研究所有領域的機會。 但正是在這一層次的教育中,人們需要獲得一種觀點。 之後,在研究所或工作中,您需要花一些時間讓自己沉浸在學科領域的問題和細節中,研究俚語、程式語言和同事的程式碼,閱讀文章和書籍。 在我看來,這是在大學的幫助下,為未來「打上橫梁」的唯一途徑。 T型專家.

什麼程式語言最適合在大學教授?

如何充分利用電腦科學教育
令我高興的是,大學老師已經放棄尋找「最好的程式語言是什麼?」這個問題的正確答案。 關於 C# 或 Java、Delphi 或 C++ 哪個更好的爭論實際上已經消失。 許多新的程式語言的出現和教學經驗的累積導致了學術環境中的既定認識:每種語言都有自己的利基市場。

使用一種或另一種程式語言進行教學的問題已不再是優先事項。 課程用什麼語言教授並不重要。 最主要的是語言的表達能力足夠。 書 ”多處理器程式設計的藝術」是這一觀察的一個很好的例證。 在這個現在的經典版本中,所有範例都以 Java 呈現,Java 是一種沒有指標但具有垃圾收集器的語言。 幾乎沒有人會認為 Java 遠非編寫高效能並行程式碼的最佳選擇。 但這種語言適合解釋書中提出的概念。 另一個例子 - 經典機器學習課程 Andrew Nna,在 Octave 環境中使用 Matlab 進行教學。 今天,您可以選擇不同的程式語言,但如果思想和方法很重要,那又有什麼區別呢?

更實用、更貼近現實

同時,近年來大學裡的實踐者也越來越多。 如果說早期的俄羅斯大學課程因脫離現實而受到積極批評,那麼今天的資訊科技教育卻不能這樣說。 10年前,大學裡幾乎沒有實際產業經驗的教師。 如今,專業系的課程越來越多地不是由全職電腦科學教師授課,而是由執業 IT 專家授課,他們在主要工作的空閒時間只教授 1-2 門課程。 從高品質的人才培訓、更新課程,當然還有尋找公司潛在員工的角度來看,這種方法是合理的。 我不認為我會說我們支持 MIPT 的基礎部門並與其他大學建立關係來透露這個秘密,包括為可以在 Acronis 開始職業生涯的學生做好準備。

數學家還是程式設計師?

如何充分利用電腦科學教育
以前圍繞著程式語言的聖戰已經轉向哲學方向。 現在所謂的「程式設計師」和「數學家」正在互相爭論。 原則上,這些學校可以分為兩個教育項目,但業界在區分這種微妙之處方面仍然很差,而且從一所大學到另一所大學,我們都有類似的教育,但重點略有不同。 這意味著學生和他將繼續工作的公司都必須用缺失的部分來補充知識拼圖。

大學裡用不同語言寫工業程式碼的從業人員的出現,讓學生獲得了更好的開發技能。 熟悉標準函式庫、框架和程式設計技術的實現,實踐程式設計師向學生灌輸編寫優秀程式碼的願望,並快速有效地完成它。

然而,這種有用的技能有時會導致那些喜歡重新發明輪子的人的出現。 程式設計學生會這樣想:“我是不是應該再寫200行好程式碼,正面解決問題呢?”

接受經典數學教育(例如,來自數學或應用數學學院)的教師經常在偽科學環境中工作,或在建模和數據分析領域工作。 「數學家」對電腦科學領域的問題有不同的看法。 它們主要不是使用程式碼,而是使用演算法、定理和形式模型來操作。 數學方法的一個重要優點是對可以解決什麼和不能解決什麼有清晰的基本理解。 以及如何解決。

因此,數學老師談論程式設計時偏向理論。 來自「數學家」的學生通常會想出經過深思熟慮且理論上優越的解決方案,但從語言學的角度來看通常不是最佳的,而且通常只是草率地編寫。 這樣的學生認為他的主要目標是展示原則上解決此類問題的能力。 但實施可能很蹩腳。

在學校或第一年作為程式設計師長大的孩子們都會帶著一輛“非常漂亮的自行車”,然而,這輛自行車通常漸近地工作效率不高。 相反,他們不會給自己設定深入理論和轉向教科書尋找最佳解決方案的任務,而是更喜歡漂亮的程式碼。

在不同的大學,在採訪學生時,我通常會看到他的教育背景是哪個「學校」。 而我在基礎教育方面幾乎從未遇到完美的平衡。 小時候,在我的城市,你可以準備數學奧林匹克競賽,但沒有程式設計俱樂部。 現在,在俱樂部裡,孩子們學習用「時尚」的 Go 和 Python 進行程式設計。 因此,即使在大學的錄取層面上,也存在著不同的做法。 我認為在大學裡保持這兩種技能很重要,否則要么是一個理論基礎不足的專家,要么是一個沒有學過、不想寫出好代碼的人來公司工作。

如何為未來“打氣” T型專家?

如何充分利用電腦科學教育
顯然,在這種情況下,學生只是選擇他最喜歡的東西。 老師只是傳達了與他更親近的觀點。 但如果程式碼寫得漂亮,並且從演算法的角度來看,一切都清晰、合理、有效,那麼每個人都會受益。

  • IT 視野。 電腦科學學士學位的畢業生是一位現成的專家,具有成熟的技術前景,他可能已經選擇了自己的個人資料。 但到了大三,我們不知道他或她會做什麼。 他可以進入科學或分析領域,或者相反,他可以每天編寫大量程式碼。 因此,需要向學生展示 IT 領域工作的各個方面並介紹所有工具。 理想情況下,理論課程的教師將表現出與實踐的連結(反之亦然)。
  • 增長點。 不讓自己走極端符合學生自己的利益。 要理解你是「數學家」還是「程式設計師」並不困難。 在解決問題時,傾聽第一衝動就足夠了:你想做什麼-查閱教科書尋找最佳方法,或寫幾個以後肯定有用的函數? 在此基礎上,你可以建立進一步互補的學習軌跡。
  • 替代知識來源。 碰巧這個程式很平衡,但是「系統程式設計」和「演算法」是由完全不同的人教授的,有些學生更接近第一個老師,而有些學生則更接近第二個老師。 但即使你不喜歡教授,這也不能成為你忽略某些科目而偏好其他科目的理由。 單身漢本身感興趣的是尋找利用知識來源的意願,並且在任何情況下都不相信激進的觀點,例如“數學是科學女王,最重要的是了解演算法”或“好的代碼可以彌補其他一切”。

您可以透過專業文獻和線上課程來加深您的理論知識。 您可以在 Coursera、Udacity 或 Stepik 上提高您的程式語言技能,其中提供了許多不同的課程。 此外,如果學生覺得演算法老師很了解數學,但無法回答複雜的實作問題,他們通常會開始觀看硬派語言課程。 不是每個人都會同意我的觀點,但在我的實踐中它已經證明了它很好 Yandex 的 C++ 專業化,其中越來越複雜的語言特徵被依次分析。 一般來說,選擇信譽良好的公司或大學評價較高的課程。

軟技能

如何充分利用電腦科學教育
從大學畢業到任何一家公司工作,從新創公司到大公司,即使是來自頂尖大學的學生也發現自己不太適應真正的工作環境。 事實上,今天的大學「照顧」了許多學生。 即使缺了很多課、沒有按時準備考試和考試、睡過頭或考試遲到,每個人都可以通過並重新參加考試——最終仍然可以獲得文憑。

然而,今天學生已經具備了為成年生活和獨立職業活動做好準備的一切條件。 他們不僅要編程,還要溝通。 這也是需要教導的。 大學有多種形式來培養這些技能,但可惜的是,它們往往沒有得到足夠的重視。 然而,我們有很多機會獲得有效的團隊合作技能。

  • 書面商務溝通。 不幸的是,大多數大學畢業生對通信禮儀一無所知。 即時訊息通訊的特殊性在於日夜交換訊息以及使用對話風格和非正式詞彙。 然而,當學生與系所和大學交流時,可以訓練書面演講。

    在實務中,管理者經常面臨將大專案分解為小任務的需要。 為此,您需要清楚地描述每個任務及其組件,以便初級開發人員了解他們的要求。 定義不明確的任務通常會導致需要重做某些事情,這就是為什麼書面溝通的經驗有助於畢業生在分散式團隊中工作。

  • 書面展示你的工作成果。 為了展示他們的教育項目,高年級學生可以在 Habr 上發表貼文、科學文章,也可以只是報告。 這樣做的機會有很多——一些大學的課程工作從第二年開始。 您也可以使用論文作為一種控制形式 - 它們通常在形式上更接近新聞文章。 這種方法已經在國立研究大學高等經濟學院實施。

    如果一家公司採用​​靈活的開發方法,它必須以較小的部分但更頻繁地展示其工作成果。 為此,能夠簡要傳達一位專家或整個團隊的工作成果非常重要。 此外,如今許多公司每年或半年都會進行一次「審查」。 員工討論結果和工作前景。 成功的審核是職業發展、獎金的主要原因,例如在 Microsoft、Acronis 或 Yandex。 是的,你可以很好地編程,但是“坐在角落裡”,即使是一個很酷的專家也總是會輸給那些知道如何很好地展示自己成功的人。

  • 學術寫作。 學術寫作值得特別提及。 對於學生來說,熟悉撰寫科學文本、使用論證、在各種來源中搜尋資訊以及格式化這些來源的引用的規則是有用的。 建議用英文進行,因為國際學術界還有很多好的文本,而且各個學科已經建立了展示科學成果的範本。 當然,準備俄語出版物時也需要學術寫作技巧,但優秀的現代英語文章的例子卻少得多。 這些技能可以透過適當的課程獲得,這些課程現在已包含在許多教育計劃中。
  • 主持會議。 大多數學生不知道如何準備會議、做會議記錄和處理資料。 但如果我們在大學裡培養這種技能,例如透過參與團隊項目,我們就可以避免在工作場所浪費時間。 這就需要對學生的專案工作進行監督,以教導他們如何有效地召開會議。 實際上,這會讓每個公司花費大量金錢 - 畢竟,如果幾個拿著高薪的人在集會上花費一個小時的工作時間,你希望得到相應的回報。
  • 公開演講。 許多學生只需要在論文答辯時公開發言。 並不是每個人都為此做好了準備。 我見過很多學生:
    • 背對觀眾站立,
    • 搖擺著,試圖將委員會引入恍惚狀態,
    • 折斷鋼筆、鉛筆和教鞭,
    • 繞圈走
    • 看看地板。

    當一個人第一次表演時,這是正常的。 但你需要儘早開始應對這種壓力——在友善的氛圍中,在同學中捍衛你的課程作業。

    此外,公司的標準做法是讓員工有機會提出想法並為此獲得資金、職位或專門專案。 但是,如果你仔細想想,這與課程作業的保護是一樣的,只是等級更高。 為什麼不在學習的同時練習這些有用的職業技能呢?

我錯過了什麼?

寫這篇文章的原因之一是這篇文章, 發表在秋明州立大學網站上。 文章作者只關注外教注意到的俄羅斯學生的缺點。 我在不同大學的教學實踐表明,俄羅斯學校和高等教育提供了良好的基礎。 俄羅斯學生精通數學和演算法,更容易與他們建立專業交流。

相反,對於外國學生來說,俄羅斯老師的期望有時可能太高。 例如,在數學方面的基礎訓練水準上,我遇到的印度學生和俄羅斯學生差不多。 然而,他們在本科畢業時有時缺乏專業知識。 優秀的歐洲學生在學校的數學背景可能不太強。

如果您在大學學習或工作,現在可以練習溝通技巧(您自己或您學生的)、擴展您的基礎基礎並練習程式設計。 為此,俄羅斯教育體系提供了所有的機會——你只需要正確地利用它們。

如果您在帖子的評論中分享有助於均衡教育平衡的課程和方法的鏈接,以及在大學學習期間提高軟技能的其他方法,我將很高興。

來源: www.habr.com

添加評論