1. 程式人生 > >What every computer science major should know

What every computer science major should know

What every computer science major should know

轉載請註明出處:https://blog.csdn.net/jpch89/article/details/85276670


文章目錄


0. 原文

每個電腦科學專業的學生都應該知道的事
What every computer science major should know


1. 單詞、短語與句型

coalesce:合併,結合,聯合
benefit society:回饋社會
factor into:考慮到
a command of sth.:對於某事的掌握
second-to-last:倒數第二個
errant:流浪的
sneer at:嘲笑,蔑視
remain without rival in doing sth.:做某事無可匹敵
embodiment:體現,化身,具體化
crown jewel:王冠上的寶石(意思是 最珍貴的部分
nitty-gritty:細節,本質
tractability:溫順,易處理
cryptography:密碼學


2. 翻譯、摘錄與批註

Given the expansive growth in the field, it’s become challenging to discern what belongs in a modern computer science degree.

My own faculty is engaging in this debate, so I’ve coalesced my thoughts as an answer to the question, “What should every computer science major know?”

這個開篇可以用在 GT

作文裡面。

作者從四個維度回答問題:

  • 怎樣找到一份好工作
  • 怎樣保持終身僱傭狀態
  • 怎樣進入研究生院學習
  • 怎樣回饋社會 benefit society

My thoughts below factor into both general principles and specific recommendations relevant to the modern computing landscape.

factor into A and BAB 納入考慮

專案集 portfolio 比簡歷 resume 更能體現程式設計師的能力。

  • 簡單的專案集:可以做一個個人部落格,把每個專案和成就寫成一篇博文。
  • 更好的專案集:每個專案做一個頁面,程式碼可以讓公眾瀏覽(可以託管於 github 或者 Google code
  • 對開源專案的貢獻要給出連結和記錄。

技術溝通能力很重要
推薦掌握一種演示工具:比如 PowerPoint 或者 Keynote

要具備基本的工程師素養
推薦學習實分析、線性代數、微積分、概率論和物理。
In constructing sound simulations, a command of probability and (often times) linear algebra is invaluable.

a command of sth. 對於某事的掌握

要熟悉命令列互動模式,文字檔案配置和沒有整合開發環境的軟體開發流程。

掌握基本的 Unix 系統操作

  • 操作檔案系統
  • 使用管道 pipe 實現程序間通訊
  • 使用 emacsvim 編輯檔案
  • 掌握 Makefile
  • 寫簡單的 shell 指令碼

系統管理
Some computer scientists sneer at systems administration as an “IT” task.
比如應該掌握:

  • 安裝並管理 Linux 系統
  • 配置和編譯 Linux 核心
  • 使用 digpingtraceroute 解決連線問題
  • 編譯和配置 web 伺服器(比如 apache
  • 編譯和配置 DNS 映象
  • 用文字編輯器維護一個網站
  • 製作網線

製作網線:???

程式語言
要知道如何自學一門新的程式語言,而不是等著學校教。
最好的學習程式語言的方式是學習多種程式語言和程式設計正規化。
The difficulty of learning the nth language is half the difficulty of the (n-1)th.
n 門語言的學習難度是第 n-1 門語言的一半。
然而要 真正地 瞭解程式語言就是自己實現一個。至少要實現一個直譯器 interpreter,最好是實現一個編譯器 compiler

推薦的語言

沒有 Python???

  • Racket
    Lisp 的一個方言。
  • C
    C remains without rival in programming embedded systems.
    C 語言在嵌入式系統程式設計中無可匹敵。
    推薦閱讀:ANSI C by Kernighan and Ritchie
  • JavaScript
  • Squeak
    Smalltalk 的現代方言,可以學習面向物件程式設計。
  • Java
  • Standard ML
    Hindley-Milner system 的體現。
  • Prolog
    邏輯程式設計 logic programming。想要在其他程式設計正規化中實現邏輯程式設計的時候,需要了解。另外一門邏輯語言是 miniKanren,它強調純粹的邏輯程式設計,衍生出了邏輯程式設計的另一種風格:relational programming
  • Scala
    Scala 很好地融合了函數語言程式設計和麵向物件程式語言。它是 Java 應該有的樣子。 Scala is what Java should have been.(意思是 Java 要向 Scala 好好學學。)
    Scala 基於 JVM,被認為是 Java 最有可能的繼任者。

Java 最有可能的繼任者難道不是 Kotlin

  • Haskell
    Haskell is the crown jewel of the Hindley-Milner family of languages.
    Haskell 最像是用純數學在程式設計。
  • C++
    學就要學徹底,需要學它的模板和超程式設計。template meta-programming
  • Assembly
    任何一種組合語言都可以,可以學 x86 的。
    學習編譯器 compiler 是學習彙編的最好途徑。

離散數學

資料結構和演算法

結構
電腦的組成。
設計和模擬一個 CPU

作業系統

  • 在啟動的時候列印 hello, world
  • 設計排程程式 scheduler
  • modify the page-handling policy

???

  • 建立自己的檔案系統 file system

網路
推薦瞭解以下協議:

  • 802.3 and 802.11
  • IPv4 and IPv6
  • DNS, SMTP and HTTP

實現以下專案:

  • an HTTP client and daemon;
  • a DNS resolver and server; and
  • a command-line SMTP mailer.

安全
They need to develop a sense of defensive programming–a mind for thinking about how their own code might be attacked.
防禦性程式設計,要預想自己的程式碼會被如何攻擊。

密碼學 Cryptography

未完待續…
2018.12.27 更新