寫作和編程的關係?能否認為編程是寫作的一種?

我是從Markdown中想到的問題。


Donald Knuth 提出的文學編程 (literate programming) 可能適合你。


我經常用寫作文來比喻編程,給大一的學弟學妹們樹立信心啊:

1.編程就和寫文章一樣,有的人寫的是詩,有的人寫的是屎。

2.有的人寫的是流水賬,而有的人則條理清晰、文筆流暢。

3."現在你們還在認字的階段,等你們有一定運用能力了,就能我手寫我心了。"

4.第三方庫就像名人名言,演算法就像好詞好句。


謝邀。

寫作和編程的共性,我認為在於,你都需要做的優雅,才能讓別人欣賞。

至於程序的解讀,寫的再丑,它也不會吐。


當你都賦予感情的時候,就一樣了。


編程是寫作的子集。

我和編程與寫作,經歷了互相交織且十分專註投入的時光。大量的實踐讓人深有感觸並體會到其中的一些奇妙關係。

寫作是高中失戀開始的,那是一段非常艱難且需要獨自面對的時光。最終我發現了寫作的治癒效果,把內心的感受和情緒一字字寫下來的過程。彷彿讓人可以勇敢的面對真正的悲傷細節,搞清楚原本混沌說不清楚的難過,反而心情會逐漸的平靜起來。在編程中也是,擊敗你的複雜,都是思路不清晰,邏輯混亂的原因。

後來就養成了寫作的習慣。開始只是抒發心情,最喜歡寫天氣,溫度,和一些瑣碎事務的細節。大概持續了有2年的時間,中間能夠慢慢感覺到對文字控制漸進的變化。大概就像文字和你的心緒能夠產生一種互動,心思與想法用文字來表達,文字也會反作用於你的思考。就像河床引導河流,河流潛移默化改變河床。

在這個過程中,你的文字會越來越簡潔有力,抽象程度高,具有可塑性的表達。這個過程編程也會出現。文字是信息的承載與傳遞者,就像代碼一樣。開始,都會表達起來很冗餘繁雜,信息量還少。後來,經過封裝抽象架構,表達會貫穿著優雅與深刻的壓縮信息。但你的思想達到駕馭文字與代碼的程度,就會展現出一種力量,文字的力量與代碼的力量。

慢慢的除了對現實的描述。會無端的想到一些奇怪的邏輯組合,自己會覺得或搞笑或不可思議,常常驚訝了自己。寫作無形中,培養了自己的洞察力,以及不斷把想法寫出來過程,強化了想法在大腦內創造的鏈路。這就增加了隨機的關聯性和意外的事物組合,這就是閃念和創造力。

在後來,生活中也會不斷積累知識和經歷,這些產生的觀點和價值主張,會被寫作重構並強化甚至升華。又過了2年,那些零碎的事物隨機組合的想法,慢慢點線面連接起來,會形成一些片段的情節。就像某種配方,這些情節場景,都融入了我的思想,性格,價值觀,以及幻想。

又過了2年,恰逢創業失敗賦閑在家。碰巧的時間上,很多因素組合在一起。特別有寫故事的衝動。那些片段不斷擴大,彼此之間的聯繫增大,就像一個拼圖逐漸清晰。寫故事就順理成章,接下來專心投入3個月寫小說。每天從早上寫到晚上,在寫到早上又寫到晚上。整天一行代碼都不寫,一方面是特別想進行文字創作,一方面想遠離代碼靜靜。這是一段美妙的經歷,心悅開心,和現實世界完全脫離,完全在文字的空間里。最終寫了大概有40w字左右,自己不是很滿意,就把所有的素材,草稿思路,架構圖全部塵封起來。因為我知道,不是放棄了,而是時機不夠成熟,我還無法寫出我想要的結果。因為我寫小說的練習,算是閃念和內心衝動,平時的積累和練習遠不及代碼。但,我相信有一天我的故事一定會躍然於紙上,感染他人。

後來又恢復到大部分時間編程,間或的寫作。但我的故事一直在背後發芽成長,因為我在慢慢豐富結構,細化層次與關鍵點劇情就像代碼里的演算法函數。如同代碼架構一樣,我是架構師只是放棄了實現,轉而慢慢打磨結構。

編程從學習以來,就一直保持編程頻率。用delphi寫過客戶端,c#寫過http://asp.net,後來轉戰j2ee研究架構思考模塊化,喜歡自己抽象通用中間層和工具庫。接觸了前端,對js充滿熱情所見所得的操作很有成就感。就業餘時間寫自己的js庫,實現css選擇器,動畫庫,封裝瀏覽器差異層。在後來開發手游一直到現在,開始用公司私有的引擎,後來切換到商業引擎。實現過單機動作,RPG,射擊,益智,跑酷,塔防遊戲,網遊有策略,卡牌,經營類的。最終,開始實現一個遊戲引擎。

大量寫作和編程的實踐,讓我感受到編程是寫作的一個子集。因為我在編程積累的過程中,能體驗到和寫作的一樣的樂趣和感受。兩者的積累從量變到質變的過程以是一致的。文字和代碼,都是一個媒介,和你的思想情緒互動糾纏,試圖把閃爍的靈感固化到現實世界。當然,只有創造性的編程和寫作才有快樂。如果是重複的流水賬文字,和無腦的複製代碼組合功能,毫無樂趣可言。

一個深深的體會是,文字和代碼是有生命的,只有不斷的練習積累和試圖探索,就能和他們產生通信,交流溝通起來。它們承載信息的片段組合就像DNA一樣,能夠自我複製和進化,能夠不斷的發展。雖然,代碼和文字是你寫的。但它說凝固的信息是不斷積累的,有可能你都忘記了那些記載數據,但是它們仍在那裡,並且與其它的數據產生不可思議的關聯和影響。這些數據,不是屬於你的,而是透過你捕捉的環境信息,所以這些信息是有生命的。

就像這篇文章,開始寫的時候,我的思路大概想要說的是想好的。但是過程中,文字的上下文會拉扯我的想法和思考,很多表達是寫的過程才有的,這是典型的信息來自其它文字代碼和環境信息。

文字,代碼,都有上下文。並且至關重要,只是一種內在的關聯性,並且會深遠的影響未來,連接著過去。

編程和寫作,都要探索事物背後的關係規律和邏輯。然後,編程是映射這種關係,寫作是描述刻畫這個關係。一個調理清晰,層次分明的邏輯,是優秀的文字和代碼的必要條件。

編程的時候需要掌控所有的細節,這個很耗費腦力。寫作的時候需要連接所有的細節,這個需要一些直覺和天賦。編程在給定數據範圍內,操作處理這些信息,並要確保所有細節的正確性。寫作並沒有局限數據,數據的操作體現在描述表達上很容易正確,只是不容易優雅,而對數據內在聯繫的捕獲上屬於架構範疇。

有時候,用寫作的關聯性去思考代碼探索關係,用編程細節處理的精確性去掌控文字,會有不一樣的意想不到的結果。

代碼和文字的追求都是結構的優雅,和細節的表達簡潔不冗餘。當反覆修改,寫出了滿意的文字和代碼時候的感覺是一樣的。就是,這就是我要的,並且反覆的閱讀文字還是代碼,內心都能體驗到一種美的感受。

而寫作有比編程更多的身心體驗,是一個超集。編程是在映射現實,解決現實問題。需求來自於現實。而寫作既可以是映射現實的,也可以是超越現實的,可以是幻想奇幻的架空的超現實。

編程的時候,我總是想著我要的結果,然後填補所有的過程細節。寫作的時候,結果我自己有時候都不知道,可能最後推翻了最開始設定。也就是說,寫作的過程有很多的隨機性,而編程是確定性。而,共同的樂趣都是創作。這種創造不存在的排列組合,會得到大腦的化學獎勵。我想這就是人類進步發展的源動力。

閱讀能保持心靈的純凈和自然 ,無論是閱讀代碼還是文字都是如此。

寫作還是編程,都能保持靈魂的清澈和自由。

編程是寫作的子集,那麼在未來,要麼編程,要麼被編程。。。


非常有意思的問題,代碼其實可以理解成一種特殊的文體,用代碼實現一個功能,實際上相當於用特定的文字和語法去講清楚一件事情。

代碼可以理解成編寫給計算機看的說明文或者敘事文、議論文之類,反過來也可以把這類文體看成寫試圖在人腦執行的代碼,當你的文章邏輯不通,大腦就會拒絕執行,行文啰嗦,閱讀起來接受效率就低。

最大的區別在於,代碼無法表達感情,通篇全是邏輯和敘述。

試想當你嘗試寫一封信,讓一個語法認知非常死板,不太懂什麼感情,理解事物總是要落實到特別具體、翔實,但是執行任務非常嚴謹的人去完成一項任務的時候,你寫出來的東西大概就相當於一種代碼了。

以上是從功能上來比較,從寫作思想和手法上來講,寫作和編碼也有相通之處。比如寫作要求段落劃分合理、條理清晰,編碼則要求函數功能明確、單一。一個上千行的、功能繁雜的函數給人的感覺,大概就像是一大段繞來繞去東拉西扯又臭又長的文字。

畢竟,用文字講清楚一件事情,和用代碼寫清楚一個功能,都有太多種方式,但最便於閱讀的,肯定都是遵照一些相通的思想去組織的。


編程是一種藝術,就跟寫作一樣。

編程中的函數,你可以自定義。

寫作的文體你,你可以自定義。

你可以用代碼寫一段故事。

你可以用寫作抒發感情。


謝邀,我認為可以。尤其是當你寫這種東西的時候。

出處:GitHub - icela/FriceEngine: An easy, light weight, native game engine running on JVM

inline fun & T.loop(block: T.() -&> Unit): T {
while (true) block.invoke(this)
}

inline fun & T.loop(count: Int, block: T.(Int) -&> Unit): T {
for (index in 0..count - 1) block.invoke(this, index)
return this
}

inline fun & T.loopIf(condition: () -&> Boolean, block: T.() -&> Unit): T {
while (true) if (condition.invoke()) block.invoke(this)
}

inline fun & T.forceRun(block: T.() -&> Unit): T {
try {
block.invoke(this)
} catch (e: Throwable) {
}
return this
}

inline fun & T.forceGet(default: Any, block: T.() -&> Any): Any {
return try {
block.invoke(this)
} catch (e: Throwable) {
default
}
}

/**
* if there"s exception, it will exit
*/
inline fun & T.forceLoop(block: T.() -&> Unit) = forceRun { loop(block) }

fun & T.pause(length: Int) = pause(length.toLong())

fun & T.pause(length: Double) = pause(length.toLong())

fun & T.pause(length: Long): T {
Thread.sleep(length)
return this
}

/**
* an anko-like async block
*/
inline fun & T.async(crossinline block: T.() -&> Unit): T {
Thread({ block.invoke(this) }).start()
return this
}


不一樣。

寫作是對人類表達自己的思想,完全自由的。

編程是對機器表達自己的意圖,必須遵循計算機運行法則的。

寫作的目的可以是單純記錄,可以是抒情,可以是溝通,也可以是藝術創作。

編程的唯一目的就是告訴機器如何去完成它的工作。


當然可以這麼理解。王小波就是例子。


首先,你要面向過程。


當然可以,,覺得寫作和編程都是一種表達,,

所以起了個花名叫逐言。。

寫好文章,,寫好代碼,,表達好自己

另外為什麼是 逐 不是 無言,默言,直言等等

因為這些都太窄,,最好的方式一定是多變的,,需要不斷追逐的

哈哈


曾經也思考過類似題主這樣的問題。

我認為可以。兩者有很多類似的地方:

1、都是用一種語言來描述一種抽象概念。文學用自然語言描述生理、心理或者在社群中的感受。編程用人工語言描述一系列的邏輯。

2、雖然每個人看同樣的東西感受會不同,但文學和代碼都有一個判斷優劣的標準,而要做到更優,需要有足夠強的片段組織能力,並需要為此閱讀和學習。

3、一般細節方面懂得越多,別人越佩服你。比如大多數人喜歡優美的遣詞造句,清楚語言各種細節和小的執行規則的人會被稱作大牛等。

------------------------------------------------------------------

暫時想到這麼多榮後補充。堅信每一個能寫出優雅代碼的程序員內心深處都是一個詩人!(霧


寫作:我的臉紅了...

讀者:害羞啥,趕快上啊!

編程:我的臉.color=rgb(255,0,0)

電腦:&>我的臉又紅又燙燙燙。。。


黑客與畫家?


寫作是否可以看成一串文字不斷產生有效信息流?只不過有編排、用詞之分。

那編程似乎神奇般地,也是不斷地組合代碼產生機器能解析的目標指令。只是存在了各異的代碼風格,或者是不斷包裝後的語法糖,更有充滿所謂藝術感的設計模式。

高德納從不認為編程是一門科學,而是一門藝術。藝術是人創造的,而科學不是;藝術是可以無止境提高的,而科學不能;藝術創造需要天賦,而科學不需要。


用了markdown之後才發現寫作和寫代碼原來可以如此的優雅!

一小段文字+一大段代碼,整一篇博客,看起來賞心悅目,排版優雅!


這麼說來,算是應用文 ~


我覺得邏輯性是相通的,例如寫一本小說,背景如何設定,故事架構怎麼搭建,不是和寫程序一樣~


我作文寫的不錯,編程一塌糊塗

所以你說呢


推薦閱讀:

程序間以結構化數據而不是字元串傳遞信息是否更合理?
在循環語句中,for(i=0;i<n;i++)和for(i=0;i<n;++i)有什麼區別?
編寫彙編代碼最好的IDE是什麼?
做了很久的項目,結果代碼全沒了是一種怎樣的體驗?
在 GitHub 可以做什麼,用戶又習慣做些什麼?

TAG:程序員 | 信息技術IT | 代碼 | IT行業 | Markdown |