程序員這一行業的知識有哪些本質性的東西?

最近看的一段話.

重視知識的本質,對於程序員來說這一點尤其重要。程序員行業的知識蕪雜海量,而且總是在增長變化。應對這個問題辦法只能是:抓住不變數。

大量的新技術其實只是一層皮,背後的支撐技術其實都是十來年不變的東西。底層知識永遠都不過時;演算法數據結構永遠都不過時;分析問題和解決問題的能力永遠都不過是;強大的學習能力和旺盛的求知慾永遠都不過時;你大腦的思維方式永遠都不過時


本質性的東西就是你們本科專業課的課程清單,說了你們又不願意相信。


Hello world 永遠不過時

……

……

……

……

開個玩笑,個人認為是演算法,數學,和解決問題的能力


四個字:沒有銀彈

道家說法:道可道,非常道,名可名,非常名

佛家說法:一切有為法,如夢幻泡影,如露亦如電,應作如是觀

孫子兵法:兵無常勢,水無常形,能因敵變化而取勝者,謂之神

白話文版:沒有什麼是萬能的,任何方法、數據結構、語言、編程模式都有其適用環境和局限性。所以編程一定要從問題本身出發去思考,根據對實際情況的理解和分析,從自己熟悉的工具中挑選最佳的來實現需求。那種因為手裡拿著鎚子,就看什麼都像釘子,然後都用鎚子去解決所有問題的行為是極不可取的。


在編程實現方面,最重要的能力是抽象。

程序員對業務的理解越深入越接近本質,其得出的抽象越簡潔,越簡潔的抽象越能適應翻雲覆雨的需求變化。


謝邀~!

數學,數據結構,演算法,邏輯學。


好身體。


VB

Private Sub textBox1_Changed
On Error Goto Fuck
textBox3.Text = textBox1.Text * textBox2.Text
Exit Sub
Fuck:
textBox3.Text = "&"
End Sub

Private Sub textBox2_Changed
On Error Goto Fuck
textBox3.Text = textBox1.Text * textBox2.Text
Exit Sub
Fuck:
textBox3.Text = "&"
End Sub

Delphi

procedure textBox1Changed(Sender : TObject)
begin
try
textBox3.Text := IntToStr(StrToInt(textBox1.Text) * StrToInt(textBox2.Text));
except
textBox3.Text := "&";
end;
end;

procedure textBox2Changed(Sender : TObject)
begin
try
textBox3.Text := IntToStr(StrToInt(textBox1.Text) * StrToInt(textBox2.Text));
except
textBox3.Text := "&";
end;
end;

.Net Windows Forms

private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
textBox3.Text = (int.Parse(textBox1.Text) * int.Parse(textBox2.Text)).ToString();
}
catch (Exception)
{
textBox3.Text = "&";
}
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
try
{
textBox3.Text = (int.Parse(textBox1.Text) * int.Parse(textBox2.Text)).ToString();
}
catch (Exception)
{
textBox3.Text = "&";
}
}

GacUI (Vczh Libraries · GitHub) (www.gaclib.net)

&""
/&>


規律+邏輯


0100101010101010101010101011100001110001010101010101001011000101010101010010101010101010101010101011001011001010101010101010101010101010111110000100101010100101010101010101010100011111000101010100101010101010101010100101001010101010101


掛一個傻逼程序員 @St Jason

在錢學森為什麼認為人體科學(特異功能)是真實的? - 氣功

評論下這個人是這樣回復我的

我理科不好,但真沒有看懂這個人寫的是啥呢?開天眼是科學訓練意識,可以提早跟另一個空間交流?這他媽說的雞毛我怎麼看不懂。為他未來未來的小孩悲哀,說不定六歲就要學習開天眼了。

物理和生物都得插手,請問打雷,電磁波跟佛家的相是怎麼聯繫的?你要發表造原子彈理論嗎哈哈哈。九年義務教育為什麼人家懂得這麼多呢?自嘆不如啊

程序員的本質知識可不是相信一些氣功大師傳授的量子物理學,不行,這件事和人實在是太搞笑了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈


論數字計算在決斷難題中的應用 圖靈在1936年發表的論文. 既然題主要本質,慢慢讀吧


免責:以下內容純主觀,學了點啥就往這拽。

回答者是個連實習都找不到的偽程序員。

計算模型,可以看這裡

Models of Computation, an Algorithmic Perspective

演算法和數據結構,可以看這裡

麻省理工學院公開課:演算法導論_全23集_網易公開課

Advanced Data Structures (6.851)

LeetCode Online Judge

抽象能力,這個不知道怎麼培養,各種方法能殊途同歸吧

編程原本 (豆瓣)

解決問題的能力,從狹義的演算法題,到現實中的瑣事、需求。怎麼解決掉。

挑戰程序設計競賽 (豆瓣)

Automate the Boring Stuff with Python


1. 手速,神經記憶(編輯器,我說的是Emacs)。

2. 排序和查找。

3. 有哪些問題是可以被圖靈機解決的,有哪些問題是無法解決的。

第二句話你可以找到原文的,計算機程序設計藝術第一卷第二章的一句話是,「所有的程序設計都可以歸類為排序和查找」。Knuth的話,不是我說的。

第一句話,Emacs和Lisp。Emacs在代碼實現方面的作用不可超越的吧。

為毛要提Lisp,鑒於你的問題是程序員的本質,Lisp的語法,你熟練了以後才會理解。但是如果你不想學Lisp,計算機程序設計藝術第一卷開頭,knuth同學依然給你列出了演算法的數學表現形式,那個表達式基本就是Lisp的思想,還是那句話,Knuth 說的,不是我。

大量的訓練和交流是看到本質的基礎。但是考慮到既然你已經問了這個問題,你可能已經不是很在乎這些了。如果你的想法是自己動手做一些東西,但是有要確保自己的東西不會像是閉門造車做出來的殘次品。我的建議是,你需要知道每一個經典工具,演算法或者數學概念的發明者的動機,或者故事會給你帶來更多的收穫。你會明白這些發明都是在他們人生道路上某一個時間段的必然結果。


數學,離散,數據結構,演算法。具體到一門語言(高級語言)的時候,已經上升到應用的層面了


演算法和邏輯


太極生兩儀(二進位),兩儀生四象,四象生八卦(八進位)

所以計算機是老子發明的。


最基本的,一門編程語言C或者Java,資料庫原理,演算法和數據結構對應的C或者JAVA實現版本,推薦看劍橋的教材。。。其它的方面感興趣的就多學點。。。


推薦閱讀:

最長公共子序列是否存在低於 O(n^2) 的演算法?
遺傳演算法相對於窮舉演算法可以減少多少計算量?
圍棋有沒有必勝策略?
怎樣判斷平面上一個矩形和一個圓形是否有重疊?

TAG:程序員 | 互聯網行業 | IT行業 | 演算法設計 | 程序員出路 |