原文:http://www.reibang.com/u/511ccb5a2012
文章目錄
為什么寫這篇文章宏邮?
程序設(shè)計過程
程序編碼過程
程序測試過程
1
為什么寫這篇文章佳头?
我發(fā)現(xiàn) 很多程序員都不想做一輩子的程序員乙帮,包括我周圍的程序員朋友也跟我說 當(dāng)他看到公司來了一名四十多歲的程序員時关贵,他心情是焦慮的棱诱,因為他不想自己四十多歲了還坐在電腦面前寫代碼臼疫。
聽了之后砰琢,我不知道該怎么接?
這種想法會產(chǎn)生一個阻力履植,這個阻力會阻礙我們成為更優(yōu)秀的程序員计雌。當(dāng)然這種想法或許已經(jīng)透漏出 成為優(yōu)秀的程序員 已經(jīng)沒有誘惑力了。
那么静尼,既然沒有誘惑力白粉,為何你還在苦逼編程?
我寫這篇文章并不是希望你轉(zhuǎn)行鼠渺,而是想說 其實編程不僅僅是編程。
不管從事什么行業(yè)眷细,也不管學(xué)的什么專業(yè)拦盹,其實它們之間都是互通的。
例如編程溪椎,不要只看編程本身普舆,看到更多的應(yīng)該是在編程過程中如何提升我們的認(rèn)知的恬口。或者 如何通過編程來提升我們的認(rèn)知沼侣?
根據(jù)芒格的格柵理論祖能,我認(rèn)為就是所謂的跨界學(xué)習(xí)。也就是說 不同的專業(yè)學(xué)術(shù)蛾洛,都有它的思想理念养铸,掌握這些思想理念,將其納入自己的思維格柵中轧膘,它能幫助我們在多個維度來分析問題钞螟,從而作出更理性的決策。
我目前差不多近三年的編程經(jīng)驗了(不多也不少吧)谎碍,下面我分享一下 編程給我?guī)砹四男┧季S上的提升鳞滨。
2
程序設(shè)計過程
在一開始程序編寫過程也許不存在設(shè)計過程。但慢慢會發(fā)現(xiàn) 如果沒有良好的設(shè)計蟆淀,程序在未來維護起來是很困難的拯啦。
甚至不需要等到維護階段,在測試過程中 就會發(fā)現(xiàn)各種偶然性問題熔任,偶然性問題的根本原因不是出自偶然提岔,而是程序流程混亂導(dǎo)致的。
想到這種問題的根本原因在于:
一種思維模式:
程序的一種特征是 指定一個輸入 必然會有一個對應(yīng)的輸出笋敞。程序是單純的碱蒙。
所以 一個錯誤的輸出 肯定來源于一個錯誤的輸入。
而程序又是一段一個接一個的執(zhí)行過程夯巷,所以錯誤的輸出 肯定是因為這個流程中出了問題赛惩。
這種思維方式對我們測試程序很有幫助。
這應(yīng)該算是一種看待世界的方式既:
如果要解決問題 就要找到問題的根本原因趁餐。
就像我們分析源碼的目的一樣喷兼,“知其然 也要知其所以然”,相信所有事物運轉(zhuǎn)正常都有它內(nèi)在原理后雷。
偶然性問題也許是因為:
它也許不是真的能工作
你依靠的邊界條件也許只是一個偶然季惯,在不同情形下 它的表現(xiàn)可能就會不同
也許你都不知道它為什么能工作
...
解決偶然性問題的方法就是在編碼之前做好程序的設(shè)計工作。
主要設(shè)計包括:
程序結(jié)構(gòu)設(shè)計
這種設(shè)計 可以提升我們的抽象思維臀突。
這種結(jié)構(gòu)設(shè)計 就是我們經(jīng)常說到的 模塊化勉抓、組件化等架構(gòu)相關(guān)的內(nèi)容。
它需要我們將一個復(fù)雜的東西 拆分成具體可實施的小模塊候学。
這也是一種思維模式:
將復(fù)雜問題 分解成多個可解決的問題藕筋。
這種思維模式同樣也可以運用在其它領(lǐng)域。
如何運用的呢梳码?
碰到一個難解的問題隐圾,就試著分解這個問題伍掀,分解到具體可以實施的地步,再一個一個的解決暇藏。
模塊化蜜笤、組件化等架構(gòu)設(shè)計的目的是為了解藕。解藕的目的是便于管理盐碱。
這種思維模式可以運用到管理中把兔,就是我們經(jīng)常見到的 各司其職。
上到國家管理 下到公司的管理甸各,都是如此垛贤。
程序流程設(shè)計
簡單來說 就是如何讓程序跑起來正常、可控趣倾。
首先就是如何保證正常聘惦,比如:處理同步異步問題的方法。
讓整個流程是正常的儒恋,也就是上面所說的 非偶然性的正確輸出善绎。
可控,在以后新增诫尽、更改需求也能保證流程正常禀酱。
這里就涉及到了各種設(shè)計模式,以及一些編程語言
(很多編程語言之所以能提升效率 我認(rèn)為就是它的設(shè)計能讓程序更加可控牧嫉,例如:函數(shù)式編程里函數(shù)作為一等公民剂跟,可以像普通變量一樣傳遞,讓我們省心去設(shè)計一些復(fù)雜的東西酣藻,因為每多寫一行代碼 可能就會多一個bug)
在其它領(lǐng)域中的應(yīng)用:
比如:工廠的流水線設(shè)計曹洽、各種流程手續(xù)的辦理等。
正常 就類似于 流水線能夠正常運轉(zhuǎn)辽剧;
可控 就類似于 在流水線中間加入一個環(huán)節(jié)或者減少一個環(huán)節(jié) 不會干擾到其它環(huán)節(jié)送淆。
3
程序編碼過程
有了設(shè)計過程,編碼過程就應(yīng)該是按照設(shè)計合約來完成的怕轿。當(dāng)然設(shè)計也不能保證完美無缺偷崩,所以在編碼過程中 如果發(fā)現(xiàn)設(shè)計有問題或者是設(shè)計過程未想到的場景,應(yīng)該更新設(shè)計(剛開始做設(shè)計會經(jīng)常出現(xiàn)設(shè)計不完善問題)撞羽。
在這個過程中能讓思維更加謹(jǐn)密阐斜。
在其它領(lǐng)域也一樣,這種謹(jǐn)密的思維 能減少出錯的機率放吩。
4
程序測試過程
我們程序員都知道智听,不管代碼寫得多優(yōu)雅、流程多風(fēng)騷渡紫,都需要來一場測試拼殺到推。
測完得到了一堆bug,往往能給我們更多反思惕澎,測試之前的自信哪來的莉测?
或者是,
我就知道會有這么多bug唧喉,因為我寫得爛嘛~
然后就是一個一個的解決它捣卤,BUT,沒那么容易
在 bug 的解決過程中八孝,你又會發(fā)現(xiàn) 如果一個問題解決方法不對 這個解決方法又會產(chǎn)生新的問題董朝。
也或許是因為對問題的定義不對而導(dǎo)致的。
所以說干跛,問題的定義決定了問題的解決方法子姜,而問題解決方法又決定了新問題的來源。
所以 “我們有必要對方案實施后可能產(chǎn)生的后果進行預(yù)判”
但 就算進行了預(yù)判楼入,之后又可能出現(xiàn)其它問題哥捕。
不過 就算永遠(yuǎn)無法確定已經(jīng)找到的問題定義是正確的,但是永遠(yuǎn)不要停下來尋找正確定義的腳步
這是不是也算一種人生的態(tài)度呢嘉熊?
回到開頭遥赚,為什么 不想做一輩子程序員?這個問題的本質(zhì)是什么阐肤?
是因為程序員太累凫佛?還是覺得做一輩子程序員沒出息,工資太低孕惜?或者是覺得自己應(yīng)該干一番大事愧薛,而做程序員格局太小了?
問題的本質(zhì)其實就是在于理想與現(xiàn)實之間的區(qū)別诊赊。
如何解決這個問題厚满,就看你怎么定義這個問題了。
我覺得編程確實可以給我們程序員帶來很多提升碧磅,能有多大提升 這就在于你有多在意它碘箍。而把編程思維納入到我們自己的思維格柵中 不管未來從事什么行業(yè),都是很有幫助的鲸郊,所以說了這么多 其實就是好好的對待你的代碼吧丰榴。哈哈~
八戒推薦