⑴ 大家怎麼理解「業務代碼」為什麼有人覺得寫業務代碼很low
在我眼裡,也經常會把程序員分成兩類:一種是我等這種寫業務代碼的程序員,另外一種是研究高深演算法、造「輪子」的「科學家」...
將他們稱之為科學家是有些誇張,第一次冒出這樣的想法是參加一個技術大會,當別的嘉賓都在分享開發、設計、架構、管理方面的經驗時,一名在騰訊工作的演算法工程師(應該已經是一個小領導了),他上台分享了一些諸如:滑動平均自回歸模型、神經網路基因表達式編程、SVM回歸機集成學習...坐在台下的我第一次冒出這樣的念頭:「這**是科學家研究的東西吧。」
當然,倒也不能說寫業務代碼就很 low,寫業務代碼也不是想像中那麼簡單的。
寫業務相關的代碼,必須了解業務流程,還需要了解業務人員心裡是怎麼想的,也就是業務出發點是什麼樣子的。
比如我最近遇到一個需求,過程大概是這樣的:銷售人員在賣一款產品,這款產品非常火,有些優秀的銷售人員一周可能能賣出去幾百上千單;結果我們接到一個需求,要限制每個代理人的銷售數量,比如每人只能賣 10 個(之前已經賣掉的不算);這就讓我們非常奇怪,本來賣的好好的,為什麼要做這個限制呢?這個需求看起來就非常的不合理。
後來業務人員和我們解釋了一下原因:因為這款產品公司不掙錢,銷售人員為了推這個產品,花在別的產品上的時間就少了,所以出這個功能,就是讓銷售人員「收收心」,把精力放在其他產品上。
這么一解釋,我們就立刻明白了;所以如果你不明白業務的時候,看著需求敲代碼也是非常容易出錯的。
有些人會認為業務邏輯就是一堆 if-else,但是我認為在實際工作中,這些 if-else 也是非常難做到的。
業務邏輯是人設計的,業務邏輯難不可怕,可怕的是它不嚴謹和變化快;業務邏輯和那些確定性的東西不一樣,比如我們寫好的代碼 if-else 兩個分支,那麼再怎麼也不會跳出這個范圍,業務邏輯就不一樣了,它是非常靈活的、不確定的,業務機會來的快消失的也快,我們很難開發出來一套全面的、完善的、靈活的的系統,去應對將來可能會發生的需求。
所以在開發過程中,如果可以將業務流程拆分成多個組件模型,組件和組件配合完成一個完成的業務流程;當業務發生變化或有新業務的時候,只需要重新編排這些組件,或對某一個組件做少量更改,就可以滿足業務變化;如果能做到這個程度,也是非常不容易的。
在這個過程中,你需要做到高內聚低耦合,避免過度抽象,從業務流程和動機出發,已滿足業務需要為主;既然做不了「科學家」,我們就努力把業務代碼寫好把。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
首先,我認為寫業務代碼不「low」,但是大部分不假思索拷貝粘貼的業務代碼比較「low」,換句話說就是所謂的五年工作經驗就是把第一年的工作重復了五遍。
技術人員成長一般有兩條線,一條是成為技術專家,一條是成為領域專家。所謂的轉管理我理解也就是領域專家,畢竟不懂得領域知識是無法做好管理的,比如說你是互聯網金融某個業務部門的leader,那麼你肯定要懂金融。領域知識就是在不斷的寫業務代碼和思考中積累起來。
還有一個問題就是如何定義業務,比如說「實現一個修改訂單功能」,這是一個業務需求,看起來很low,但是如果業務需求改成「實現一個修改訂單功能,要求在有限資源的情況下並發10k,響應時間不高於10ms」,那這個需求就有挑戰。說這個問題想說明白一件事情,如果做業務不要停留的在業務表面,僅僅滿足於實現功能,要主動思考。
最後總結一下,沒有最好的技術,只有最適合業務的技術。技術是內功,業務是招式,內功不足,後續成長乏力,沒有招式,內功也不能發揮威力。這是也很多互聯網創業公司做大了之後要技術轉型的原因。
業務程序開發相對於底層基礎架構層的程序開發有所不同:
業務開發的時間比較緊,變化快。
這個特點導致程序員沒有時間重構代碼,或者不願意重構代碼,而是用最簡單粗暴的復制黏貼的方式快速實現業務邏輯。其實所有的復制黏貼都意味著需要重構。
底層系統的開發,一般是架構師和高級程序員來設計和控制項目時間。相對來說,開發周期長,變化緩慢。會更加註重架構的合理性和穩定性,而且會不斷重構和改進。
業務開發一旦完成,只要平穩運行就不會有人再回來補技術債務,不會把它寫得更好。除非這個業務爆發了,不得不從新架構以支持更高的並發。如果上線之後表現不佳,很可能下線不再維護。所以公司也不太願意花太多精力在一個還沒有被市場認可的產品項目上。
而底層架構框架的項目會在不同的產品項目中不斷應用。不斷地進化。就像Spring之類的開源框架一樣,不斷的升級和完善。
相對來說,業務開發程序員會花大量的時間學習和理解業務知識;而底層框架程序員更多的時間在學習技術架構。如果業務知識在行業內通用,比如財務,金融行業知識。那麼長期的積累對業務開發也是很有幫助的。如果業務是很小眾的,甚至,這幾個月做這個業務,下半年又做另一個業務,做的時候也一知半解,就像很多外包一樣,那就沒有什麼業務沉澱了。
我就是寫業務代碼的,不過我覺得這很正常啊,不知道你是怎麼就覺得low啦?
所以,做為一個企業,支撐發展的肯定是他的業務,不管是賣什麼服務,都要通過業務來賺錢,可能針對業務,企業內部還會做一些細化。比如說,有人會是做一些前端,一些人做後端,還有運維,運營,產品的配合。前端再細化,一部分人會做一些頁面的展示,呈現,還有一部分人會做一些適合業務的工具,來提升開發效率。
那如果你自己的定位是只是單單寫頁面的,那隻能說你對自己的要求有點低,你沒有去考慮如何做一些提升工作效率的事情。舉個例子,比如說常見的後台管理系統,因為功能都很類似的,那你有去考慮如何做一個通用的模版嗎,還是就是不斷地去重復。
這個別人的產出,做了一個vue的後台管理系統的模版,現在的GitHub star在6萬多,通過這個項目,他就可以得到更多人的認可,也能得到更多的好的工作機會。
所以,不要覺得業務代碼就是low的,要善於去總結,然後再分享自己的經驗,沒准你也能成為一個領域內的Top。
不要太在意所謂low與不low,需要在意的是做了這個項目或業務後,對自己的能力有沒有長進,如果有,那說明不low。如果沒有,那說明你只是在機械的勞動而已。
每個大佬都是從業務代碼做起的,大佬們注重的是能否成長,學習實踐的機會,以及平台的大小和未來是否和自己的目標相匹配。
總結來說,只要能提升自己能力的任何工作,都是值得的。
業務代碼不一定low,能完成用戶需求的代碼就是好代碼。
另外,對於我們搞嵌入式軟體、EDA工具軟體的來說,業務軟體反而是更有技術含量的,更具科學意義的代碼,而軟體可能只是載體,你啥時候透過代碼理解了它們背後的物理概念、數學公式,你就超越了程序員,能向科學家又邁進一步。
互聯網軟體其實也一樣,軟體實現的是一個業務流程的自動化,你完全可以透過你寫的程序還原甲方用戶的業務流程,而這種流程是老闆制訂的,認識會上一個層次,將來可以向老闆邁進
我覺得首先大家要理解什麼是「業務代碼」,業務代碼是一個相對的概念。
1.對於一個一般的物聯網應用型公司來說,業務代碼就是根據客戶需求基於一個MCU或者MPU的應用控制邏輯的實現。
2.對於一個做純上層應用的公司來說,業務代碼就是基於一個操作系統為客戶量身定製對應的app,並實現對應的應用邏輯。
3.對於一個微型控制器設計廠商,業務代碼就是底層架構裸機的具體實現和各個外設驅動的框架設計。
4.對於一個設計操作系統的開發人員來說,業務代碼就是架構設計、內存管理、調度機制優化、優先順序管理、進程間通信機制優化、線程管理和內核完善等等。
所謂」業務代碼」都是相對的,沒有參考系怎麼談。像操作系統,站在操作系統內核提供方的角度看,上層所有的應用框架,進程服務,都是業務代碼,我是為他們服務的。技術只是工具,業務實現才是目的,站在不同供應商的角度,只要涉及代碼的地方都可以稱之為業務代碼。所以站在這個維度,如果要說業務代碼「LOW」,那就沒有代碼是不"LOW"的了。
不過,真正接觸底層或者實現RTOS底層業務框架的工程師其實是很少的。大部分工程師基本上都是對於客戶需求做一些非驅動底層非操作系統框架的應用型的開發,所以大多時候「業務代碼「又單一的被指向了那些只是對客戶的上層應用的需求做開發、調整或者迭代的代碼。
而這部分代碼究竟"LOW"還是不"LOW"呢,我的答案是:不"LOW"。但是現實卻是很「LOW」,之所以會被想成LOW,是因為:
1.判斷一個程序員的優秀程度已經不單單看你寫了多少應用型的代碼,設計了多少應用框架,而是你懂不懂底層驅動邏輯,懂不懂操作系統內核,懂不懂內核裁減等等。所以這種情況會經常出現在面試過程中,面試官會因為你不懂底層驅動、不懂內核而給你比較低的薪水。
2.懂得寫業務代碼的人,他的程序員基礎並不一定就牢固。因為上層應用可能對業務比較看重,但是對於一些特定的語言的編程並沒有那麼嚴謹。能用就可以,所以會自然而然的認為這樣的程序員「LOW」。而一個會寫底層驅動的人,他考慮更多的是基礎代碼的安全、嚴謹性和容量問題等等,他們的語言基礎相對來說要牢固很多。
3.技術負責人一般都是全能型的人。會寫底層驅動或者更懂操作系統內核的人更容易成為技術的領頭人。而那些只會「業務代碼」的人,放在大部分公司,一般都不會有太多的上升空間。
根據以上分析過後呢,做「業務代碼」的程序員基本上會被想的很「LOW」,但是結合我的親身經歷,不同的人對於這個事情卻會有不同的看法。
比如對於領導來說,那就不一樣了。你將「業務代碼」的需求迭代了,完善了,提前任務完成了,客戶很滿意。那領導不會認為你是一個很「LOW」的程序員。你很高級,領導很欣賞,「後果」很舒服。但是對於一個面試官來說,你就會點上層應用的調用和設計。我為什麼要給你這么多薪水?雖然會被想成很"LOW",但是也是現實。
好了,這個問題就回答到這里,以上都是個人結合實際經歷的一些體會,喜歡的加關注,我是一名深漂的嵌入式程序員,歡迎私信留言,感謝!
我有面試過一個40歲的程序員,做過幾百個網站,要求工資才6000元,他只會做簡單的企業網站,因為他一直在很小的公司工作,只能做小項目,這我覺得是業務代碼,就是做一些重復和沒難道的工作。
林子大了什麼鳥都有,不知道你說的有人是指多少比例的人。我的理解代碼可以分為兩類:1:工具欄或者框架類2:業務類。寫工具類偏重於健壯可拓展可復用;寫業務類偏重於邏輯嚴謹沒有漏洞,化繁為簡。畢竟有些時候需求或者業務都不甚清楚他們想要的邏輯。有時候復雜的業務流程你捋都不順,更別說代碼寫的好了。當然,工具類到高深,工具好用,框架優秀確實需要的技術功底深厚,比業務類要考慮的東西也多,但不代表寫業務類代碼很low。當然,不管寫什麼代碼,完全復制黏貼而不去考慮與實際場景結合,不去想為什麼?有沒有更好的處理方案是比較low的
有人覺得low
1.可能是覺得沒有什麼技術含量吧,用的都是一些成熟的技術框架,就是一些增刪改查而已,但是這並不意味著寫業務代碼就很簡單,因為這裡麵包含著業務邏輯,業務邏輯有簡單的也有復雜的,如果對業務邏輯業務背景不理解或理解不透就很難實施下去,其實現在很多專家級別的程序員並不是技術有多牛,而是對某個行業領域有比較深刻的理解。
2.還有可能就是內心裡對業務就很輕視,這個更是不應該的,因為技術是為業務服務的,是業務讓技術變的有價值。
⑵ 作為一個程序員,應該有哪些必須知道的事
拿得起放得下。不要害怕替換、重寫、重構或者放棄垃圾代碼。有時候,如果碰到可留可不留的代碼,直接扔掉才是上策。永遠不要愛上你的代碼。
⑶ 大家怎麼理解「業務代碼」為什麼有人覺得寫業務代碼很low
在我眼裡,也經常會把程序員分成兩類:一種是我等這種寫業務代碼的程序員,另外一種是研究高深演算法、造「輪子」的「科學家」...
將他們稱之為科學家是有些誇張,第一次冒出這樣的想法是參加一個技術大會,當別的嘉賓都在分享開發、設計、架構、管理方面的經驗時,一名在騰訊工作的演算法工程師(應該已經是一個小領導了),他上台分享了一些諸如:滑動平均自回歸模型、神經網路基因表達式編程、SVM回歸機集成學習...坐在台下的我第一次冒出這樣的念頭:「這**是科學家研究的東西吧。」
當然,倒也不能說寫業務代碼就很 low,寫業務代碼也不是想像中那麼簡單的。
寫業務相關的代碼,必須了解業務流程,還需要了解業務人員心裡是怎麼想的,也就是業務出發點是什麼樣子的。
比如我最近遇到一個需求,過程大概是這樣的:銷售人員在賣一款產品,這款產品非常火,有些優秀的銷售人員一周可能能賣出去幾百上千單;結果我們接到一個需求,要限制每個代理人的銷售數量,比如每人只能賣 10 個(之前已經賣掉的不算);這就讓我們非常奇怪,本來賣的好好的,為什麼要做這個限制呢?這個需求看起來就非常的不合理。
後來業務人員和我們解釋了一下原因:因為這款產品公司不掙錢,銷售人員為了推這個產品,花在別的產品上的時間就少了,所以出這個功能,就是讓銷售人員「收收心」,把精力放在其他產品上。
這么一解釋,我們就立刻明白了;所以如果你不明白業務的時候,看著需求敲代碼也是非常容易出錯的。
有些人會認為業務邏輯就是一堆 if-else,但是我認為在實際工作中,這些 if-else 也是非常難做到的。
業務邏輯是人設計的,業務邏輯難不可怕,可怕的是它不嚴謹和變化快;業務邏輯和那些確定性的東西不一樣,比如我們寫好的代碼 if-else 兩個分支,那麼再怎麼也不會跳出這個范圍,業務邏輯就不一樣了,它是非常靈活的、不確定的,業務機會來的快消失的也快,我們很難開發出來一套全面的、完善的、靈活的的系統,去應對將來可能會發生的需求。
所以在開發過程中,如果可以將業務流程拆分成多個組件模型,組件和組件配合完成一個完成的業務流程;當業務發生變化或有新業務的時候,只需要重新編排這些組件,或對某一個組件做少量更改,就可以滿足業務變化;如果能做到這個程度,也是非常不容易的。
在這個過程中,你需要做到高內聚低耦合,避免過度抽象,從業務流程和動機出發,已滿足業務需要為主;既然做不了「科學家」,我們就努力把業務代碼寫好把。
首先,我認為寫業務代碼不「low」,但是大部分不假思索拷貝粘貼的業務代碼比較「low」,換句話說就是所謂的五年工作經驗就是把第一年的工作重復了五遍。
技術人員成長一般有兩條線,一條是成為技術專家,一條是成為領域專家。所謂的轉管理我理解也就是領域專家,畢竟不懂得領域知識是無法做好管理的,比如說你是互聯網金融某個業務部門的leader,那麼你肯定要懂金融。領域知識就是在不斷的寫業務代碼和思考中積累起來。
還有一個問題就是如何定義業務,比如說「實現一個修改訂單功能」,這是一個業務需求,看起來很low,但是如果業務需求改成「實現一個修改訂單功能,要求在有限資源的情況下並發10k,響應時間不高於10ms」,那這個需求就有挑戰。說這個問題想說明白一件事情,如果做業務不要停留的在業務表面,僅僅滿足於實現功能,要主動思考。
最後總結一下,沒有最好的技術,只有最適合業務的技術。技術是內功,業務是招式,內功不足,後續成長乏力,沒有招式,內功也不能發揮威力。這是也很多互聯網創業公司做大了之後要技術轉型的原因。
作為一個程序員,我也是寫代碼的,我不覺得寫業務代碼很low。
1.首先大家所認為的業務代碼就是一些和業務相關的增刪改查,涉及到的技術點相對來說是固定的,寫熟了之後,就是復制,粘貼,不存在什麼技術阻礙,很多人就覺得非常的簡單,沒有技術含量,做這些工作的人也顯得非常的low,如果你也是這樣認為的,那你就錯了,因為寫業務代碼的基本都是初級,中級的程序員,工作經驗有限,不具備寫一些公共方法和介面的能力,但是並不代表以後能力不會提升,如果持續努力,也會成長為高級程序員或是架構師,誰天生就是高級程序員呢,不都是一點點積累起來的嗎?而且就算是寫業務代碼也不能就是low呀,有些業務場景是非常復雜的,邏輯必須十分嚴謹,稍有差錯可能就會出現bug,對公司造成巨大的損失,不是寫業務代碼就是很容易的。
2.除了業務代碼就是非業務代碼了,比如開發資料庫,開發框架,或是寫一些公共的方法或是介面,供初級開發者調用。寫非業務代碼的人技術也不一定就非常的厲害,因為就算是開發框架或是資料庫之類的項目,也不一定都是高級開發,也會有一些水平較低的開發,因為寫業務代碼還是非業務代碼和項目也有關系,如果你們團隊開發的是開發框架或是資料庫這種的項目,那麼你們團隊沒有人寫業務代碼,也不能說明你們團隊每個人技術都很厲害,只是項目性質不一樣罷了。
3.業務代碼這個詞看你的理解吧,我認為其實所有的代碼都可以成為是業務代碼,無論開發什麼產品,都是有業務需求的,有了需求才有開發的動力,對於開發資料庫來說,資料庫的需求就是業務,對於開發框架來說,框架的功能就是業務,所以我認為廣義上來講都是業務代碼,沒有非業務代碼這一說,所以具體看你認為業務的定義是什麼了。不過無論如何也不應該去嘲笑或是去貶低別人吧,嘲笑或是貶低一類人就更不應該了。
業務程序開發相對於底層基礎架構層的程序開發有所不同:
業務開發的時間比較緊,變化快。
這個特點導致程序員沒有時間重構代碼,或者不願意重構代碼,而是用最簡單粗暴的復制黏貼的方式快速實現業務邏輯。其實所有的復制黏貼都意味著需要重構。
底層系統的開發,一般是架構師和高級程序員來設計和控制項目時間。相對來說,開發周期長,變化緩慢。會更加註重架構的合理性和穩定性,而且會不斷重構和改進。
業務開發一旦完成,只要平穩運行就不會有人再回來補技術債務,不會把它寫得更好。除非這個業務爆發了,不得不從新架構以支持更高的並發。如果上線之後表現不佳,很可能下線不再維護。所以公司也不太願意花太多精力在一個還沒有被市場認可的產品項目上。
而底層架構框架的項目會在不同的產品項目中不斷應用。不斷地進化。就像Spring之類的開源框架一樣,不斷的升級和完善。
相對來說,業務開發程序員會花大量的時間學習和理解業務知識;而底層框架程序員更多的時間在學習技術架構。如果業務知識在行業內通用,比如財務,金融行業知識。那麼長期的積累對業務開發也是很有幫助的。如果業務是很小眾的,甚至,這幾個月做這個業務,下半年又做另一個業務,做的時候也一知半解,就像很多外包一樣,那就沒有什麼業務沉澱了。
不要太在意所謂low與不low,需要在意的是做了這個項目或業務後,對自己的能力有沒有長進,如果有,那說明不low。如果沒有,那說明你只是在機械的勞動而已。
每個大佬都是從業務代碼做起的,大佬們注重的是能否成長,學習實踐的機會,以及平台的大小和未來是否和自己的目標相匹配。
總結來說,只要能提升自己能力的任何工作,都是值得的。
我覺得首先大家要理解什麼是「業務代碼」,業務代碼是一個相對的概念。
1.對於一個一般的物聯網應用型公司來說,業務代碼就是根據客戶需求基於一個MCU或者MPU的應用控制邏輯的實現。
2.對於一個做純上層應用的公司來說,業務代碼就是基於一個操作系統為客戶量身定製對應的app,並實現對應的應用邏輯。
3.對於一個微型控制器設計廠商,業務代碼就是底層架構裸機的具體實現和各個外設驅動的框架設計。
4.對於一個設計操作系統的開發人員來說,業務代碼就是架構設計、內存管理、調度機制優化、優先順序管理、進程間通信機制優化、線程管理和內核完善等等。
所謂」業務代碼」都是相對的,沒有參考系怎麼談。像操作系統,站在操作系統內核提供方的角度看,上層所有的應用框架,進程服務,都是業務代碼,我是為他們服務的。技術只是工具,業務實現才是目的,站在不同供應商的角度,只要涉及代碼的地方都可以稱之為業務代碼。所以站在這個維度,如果要說業務代碼「LOW」,那就沒有代碼是不"LOW"的了。
不過,真正接觸底層或者實現RTOS底層業務框架的工程師其實是很少的。大部分工程師基本上都是對於客戶需求做一些非驅動底層非操作系統框架的應用型的開發,所以大多時候「業務代碼「又單一的被指向了那些只是對客戶的上層應用的需求做開發、調整或者迭代的代碼。
而這部分代碼究竟"LOW"還是不"LOW"呢,我的答案是:不"LOW"。但是現實卻是很「LOW」,之所以會被想成LOW,是因為:
1.判斷一個程序員的優秀程度已經不單單看你寫了多少應用型的代碼,設計了多少應用框架,而是你懂不懂底層驅動邏輯,懂不懂操作系統內核,懂不懂內核裁減等等。所以這種情況會經常出現在面試過程中,面試官會因為你不懂底層驅動、不懂內核而給你比較低的薪水。
2.懂得寫業務代碼的人,他的程序員基礎並不一定就牢固。因為上層應用可能對業務比較看重,但是對於一些特定的語言的編程並沒有那麼嚴謹。能用就可以,所以會自然而然的認為這樣的程序員「LOW」。而一個會寫底層驅動的人,他考慮更多的是基礎代碼的安全、嚴謹性和容量問題等等,他們的語言基礎相對來說要牢固很多。
3.技術負責人一般都是全能型的人。會寫底層驅動或者更懂操作系統內核的人更容易成為技術的領頭人。而那些只會「業務代碼」的人,放在大部分公司,一般都不會有太多的上升空間。
根據以上分析過後呢,做「業務代碼」的程序員基本上會被想的很「LOW」,但是結合我的親身經歷,不同的人對於這個事情卻會有不同的看法。
比如對於領導來說,那就不一樣了。你將「業務代碼」的需求迭代了,完善了,提前任務完成了,客戶很滿意。那領導不會認為你是一個很「LOW」的程序員。你很高級,領導很欣賞,「後果」很舒服。但是對於一個面試官來說,你就會點上層應用的調用和設計。我為什麼要給你這么多薪水?雖然會被想成很"LOW",但是也是現實。
業務代碼不一定low,能完成用戶需求的代碼就是好代碼。
另外,對於我們搞嵌入式軟體、EDA工具軟體的來說,業務軟體反而是更有技術含量的,更具科學意義的代碼,而軟體可能只是載體,你啥時候透過代碼理解了它們背後的物理概念、數學公式,你就超越了程序員,能向科學家又邁進一步。
互聯網軟體其實也一樣,軟體實現的是一個業務流程的自動化,你完全可以透過你寫的程序還原甲方用戶的業務流程,而這種流程是老闆制訂的,認識會上一個層次,將來可以向老闆邁進
我發現很多程序員對於處理業務邏輯都是「嗤之以鼻」。感覺自己天天寫業務邏輯代碼,改 Bug 都沒有時間學習,沒有時間實現個人成長?
但是,作為程序員來講,如果不是做底層基礎技術研發的話,大部分的工作不就是做這些擰螺絲的工作嗎?其實擰螺絲有那麼容易嗎?可能擰螺絲很容易,但是擰好螺絲就不那麼簡單了。
別小瞧業務邏輯代碼,如果真正寫好,要把邏輯寫得清晰簡單易用,功能健壯穩定,性能同時達到要求的話,其實是挺難的。
其實很多程序員都跟他一樣,都在痛苦的編程,一方面對自己有更高的要求,一方面又嫌棄現在寫的代碼沒有技術含量。又有更高的要去和希望,又嫌棄現在的工作,就是不思考出現的原因,不去付諸行動。還不停的抱怨: 感覺自己天天寫業務邏輯代碼,改 Bug 都沒有時間學習,沒有時間實現個人成長?
到這里,我們不禁一問:那我們該如何擺脫這種現狀呢?其實很簡單,我們應該擺正自己的態度和觀點,正確看待寫業務邏輯這些代碼就行了。
堅持不懈的寫好業務邏輯代碼
就像我在上面說的: 別小瞧業務邏輯代碼,如果真正寫好,要把邏輯寫得清晰簡單易用,功能健壯穩定,性能同時達到要求的話,其實是挺難的。
所以,我們要正確看待寫業務邏輯的代碼,應該擺正心態,堅持不懈的去寫,所謂量變引起質變,就是這個道理。寫業務代碼,積累代碼量,一力降十會,在積累了巨量的代碼量之後,幾乎任何所謂的有技術含量的東西都構不成挑戰性。當然,要想真正的通過自己寫業務代碼,寫好業務代碼還應該有接下來的這個思考。
其實業務邏輯代碼一樣可以玩出很多花樣,而這才是能夠提升你能力的本質。比如:你寫了一個處理單任務的業務邏輯,雖然滿足了用戶的需求,但是你這時能不能對自己有一個更高的要求呢?單任務雖然是功能實現了,但是效率可能不行,處理慢,那搞個多任務處理的邏輯怎麼樣?任務池、線程池、內存池、並發、同步等等這些技術點都來了。如果你對自己有這樣的要求,而你自己有追求的話,就會進一步思考如何去做到這些,你做到了,你能力就提升了。
同樣,很多人感覺處理業務邏輯,就是一些各種循環,條件判斷,只要邏輯稍微嚴謹點,功能就都沒問題,就都實現了,確實是這樣的。這就是你對於業務邏輯沒有興趣的根點所在。
那你為什麼不想想: 如何使用循環和條件判斷可以提升效率呢?滿足了功能的那些需求,是不是有些地方可以優化一下呢?是不是可以提升一下性能呢?
其實,這個技術的進步和積累,就在於自己內心對自己有沒有更高的要求和追求。這是大實話,也是大白話。很多人就感覺只要實現了功能需求就夠了,滿足了用戶就行了。然後,這個項目完事了,下個項目遇到差不多的邏輯,還是這么處理,又完事了,每個項目,每個功能都是這樣重復的處理,從來不思考最優的實現方式,你感覺能夠進步嗎?你能不煩氣嗎?十年如一日的工作,10 年也就積累了一年的工作經驗,在重復使用。
業務邏輯的最優方式,就是思考如何大道至簡
通過一個業務邏輯實現一個功能,基本上只要是程序員,腦子不笨,都能做出來,做出來是一回事,但是做好是另外一回事。大道至簡,我們要做就得想辦法做到最好。這里的好有很多層意思。
比如: 你寫的業務邏輯代碼 是否能夠做到准確,穩定,高效,易讀,易擴展,易維護,兼容性強呢? 問自己一句,如果你能做到這些,那確實是好。如果做不到,你還是處理初級水平,當然不行,這就是你在工作中提升能力的機會。別說沒時間,都是借口。
精益求精是對代碼大道至簡的永恆的追求,也是我們在處理業務邏輯代碼中不斷提高自己能力的過程。
明明自己水平初級,就容易驕傲自滿,感覺可以了,我想學更高的技術,那麼更高的技術是自己在處理業務邏輯中一步一步積累出來的,不是幹了初級的活,不用積累,直接學高級的技術,就能高級了。
我特別喜歡網上有個網友寫的一段話:
其實很多技術大牛和技術專家,都是從業務邏輯做起,慢慢積累思考起來的。比如:在處理業務邏輯之前,會思考如何設計這個架構,可以讓代碼更好的擴展和維護。在處理業務邏輯的時候,思考如何的處理才能提高性能和效率?一步一步的實驗和總結,積累,才成就了今天的成績。
所以,不要對處理業務邏輯嗤之以鼻,不要以為能夠滿足需求就夠了。你重復不思考的粘貼和復制肯定是不行的,必然會對編程失去興趣,自然無法更好的成長和進步。應該在編程的過程中追求更高的要求,尋找更高的興趣,這樣才能讓你持續進步,從而進階。
林子大了什麼鳥都有,不知道你說的有人是指多少比例的人。我的理解代碼可以分為兩類:1:工具欄或者框架類2:業務類。寫工具類偏重於健壯可拓展可復用;寫業務類偏重於邏輯嚴謹沒有漏洞,化繁為簡。畢竟有些時候需求或者業務都不甚清楚他們想要的邏輯。有時候復雜的業務流程你捋都不順,更別說代碼寫的好了。當然,工具類到高深,工具好用,框架優秀確實需要的技術功底深厚,比業務類要考慮的東西也多,但不代表寫業務類代碼很low。當然,不管寫什麼代碼,完全復制黏貼而不去考慮與實際場景結合,不去想為什麼?有沒有更好的處理方案是比較low的
天天給我講技術棧,讓你這個業務代碼,半個月搞不定,然後又bug一大堆。業務代碼培養人的邏輯思維和全局控制,這個是基礎沒有捷徑。至於技術,外面一大堆,看你怎麼選擇。
⑷ 為什麼國內程序員都很少進行代碼重構
說到代碼的重構對於國外的程序員提到的比較多,特別是大型的開源工程,基本上一個模塊或者函數的實現會反復的修改,一個文件能被修改成千上萬次,曾經訂閱了linux內核組的郵件,每天的收到的修改文件成千上萬,有時候一個文件都能被修改上百次,對於文件修改最瘋狂的是google的chrome源碼,重構的次數,讓你覺得每天都在重寫但是功能上感覺越來越流暢。為什麼我們周圍的程序員絕大部分時間做的不是這樣的事情。
為啥從直覺上覺得老外的寫的代買質量比我們的要高,我們國內的程序員絕大部分的時間是在趕進度,准確的來講忙著增加功能和修改bug,其實也從側面反映出為什麼國內出不了android以及Linux等影響深遠的 科技 創新,從全球開源代碼的佔比就可以看出,差距還是很巨大的。
為什麼覺得老外寫的代碼比我們的強?
1.國內軟體發展主要階段還在解決有沒有,還遠談不上強大
中國的軟體經過近幾十年長足的發展,已經取得了巨大的成就,特別在互聯網行業已經有幾個巨頭躋身世界前列了,最近炒的很熱的臉書的用戶數據泄密事件,作為當事人扎克伯格,也在論述中提到中國有幾個很厲害的互聯網公司,這說明中國在互聯網領域還是取得了相當大的成就,但是在一些核心的領域,或者門檻很高的領域差別還是非常巨大。
任何事情在發展的初級階段首要考慮的是不是有沒有,所以如同創業初期的公司會選擇短時間內搞出來個產品,哪怕是不成熟的產品,然後快速的投入市場,根據市場用戶的反應同步追蹤問題,等到產品差不多穩定,並且產品在市場上有了一席之地之後,後續的事情就要考慮優化功能,對裡面的代碼或者產品的性能進行全方面的提升,目前國內大部分的互聯網一般比較年輕,還在解決有沒有的問題,相信隨著時間的推移以及國內軟體的發展,也會有大量的高質量的開源框架代碼出來,但這一切都需要很長的時間。
所以國內的程序員大部分時間都是在趕進度和根據需求完成功能代碼。
2.軟體產業的底子還很薄弱, 歷史 積淀還不夠
舉個很典型的例子,現在很多國內的程序員到了30多歲就開始考慮後續的轉型了,因為後面的輕輕人會帶來很大的沖擊,所以大部分的30多歲的程序員都在考慮自己後路,都要考慮轉型的問題。老的有經驗的程序員反而轉型去做管理或者合夥創業了,哪有幾個還在安心搞技術,年齡大了還在搞技術的還被人鄙視,覺得自己沒有出息。
但是在國外寫代碼是一種很常見的職業,和別的工種沒有多大的差異,40,50歲了寫代碼也是比比皆是,做軟體是一種技術工種,經驗的佔比是很高的,所以老程序員寫出來的代碼更加有深度,穩定性更高,一切的根源還是產業的發展不夠成熟,需要時間和 歷史 的積淀,從這方面講國內的軟體整體產業還是比較薄弱,從業人員的整體素質和工作氛圍還有待慢慢的成熟,周圍都是有經驗的程序員在帶領著如何去重構代碼,如何提升代碼的質量,而國內大部分的程序要還是被產品經理鞭策著增加需求和修改代碼。
3.公司的文化差異
目前很多的中國技術公司更多的追求的是短期利益的最大化,在基礎軟體的投入遠遠不夠,畢竟基礎的投入很難短期見成效,在一個具體的場景,有一個產品主體的功能已經實現了,也能在用戶那邊投入使用了,一般的公司很難拿出時間來,讓你做代碼的重構,畢竟這種事情很難直接產生經濟效益。這與公司本身的文化差異有很大的關系,重視的技術或者懂得技術的公司對於這方面相對比較重視,反之就差很多。
小時候課本上就說著我們落後100年,所以高樓大廈不是一天建成的,所以在追趕的道路很漫長,所以承認存在差距,然後努力加倍的去追趕。
Time is money. 以目前國內互聯網的情況,需求應接不暇,程序員基本上都是被需求與業務趕著走,時間非常緊張,在這種情況下,程序員很多時候唯一的選擇就是趕緊實現需求的功能。所以,一個項目下來,代碼基本上都變得非常非常的「垃圾」。
也有很多程序員想過在項目結尾的時候進行代碼的重構,基本上每個程序員也都知道重構代碼的好處,但是並不代表著真正能做起來。還是那個原因,國內互聯網的速度太快,需求應接不暇,做為程序員,基本上沒有時間來做這件事情。
而另外一個原因是跟團隊負責人有關。若團隊負責人能夠意識到重構的好處,那麼他可以為此單獨劃分一段開發時間出來,讓大家分別負責一個模塊進行重構,這都是可以安排做起來的。這也需要團隊負責人如何在需求人員的需求與代碼質量的進度上做一個平衡,進行統籌安排。
最後我想說一個可能很少意識到的原因,那就是人員流動問題。國內互聯網目前人員流動非常的大,尤其是北上深這樣的互聯網發達的城市,基本上是平均兩年就會走一大波人,在這樣的情況下,也會考驗從業人員的職業道德,即我到底要把代碼寫的多好,要把代碼的可維護性做到多好,其實這都是從業人員自身需要考驗的問題,因為完成一個功能很容易,但是要考慮的全面就是另外一回事了。而人員流動帶來的另一個問題就是有一些代碼是很難看懂的,即有些代碼在人員離開後成為了「 歷史 」,無人敢動。這也會阻礙著軟體的重構工作的進行。
從我所講的這幾種情況來看,重構其實是大家都能知道的好處,但是真正實施起來卻又有現實的約束,需要負責人來做這樣的統籌安排與推動。
成本太大
大多數軟體產品的開發都是經過了很多開發人員的付出,如果進行代碼重構需要了解產品、了解框架、了解代碼邏輯,這個過程會花費大量的時間和人力成本,對於企業來說,效益是第一位的,與其花費精力進行效益不大的產品重構,不如去承接更多的項目來的實在。
領導決策
由於大部分企業的老闆都是非技術人員出身,他們更關注效益和客戶,為了符合企業的發展,在進行產品開發時會更多的採用新技術來吸引客戶,花費精力重構代碼不如開發一套新產品或者開發更酷炫的效果更具有實在意義。
代碼規范不足
由於國內互聯網較之國外起步較晚,很多企業發展時間較短,加之人員流動比較大等多方面的因素,很難形成標准、嚴謹、行之有效的代碼規范,所以很多技術人員在開發時都是根據個人風格習慣在開發,等其他人接手代碼時,缺少相關標准和文檔,很難理解代碼邏輯,花時間去了解代碼、重構代碼不如直接推翻重做來的方便。
客戶定製化需求
部分企業創業初期對企業信息化是不夠重視的,只有企業發展到一定程度才會考慮信息化建設,而由於業務的限制,大多數標准化的互聯網產品都很難滿足企業的實際需求,需要進行大量定製化的開發,對於互聯網企業來說,即使產品開發足夠完善,在實際項目中也需要進行擴展,倒不如直接在項目中進行調整。
程序員的發展限定
在國內很少有終身的程序員,大部分都會逐漸轉向銷售、售前、項目經理、產品經理等崗位,而這些崗位則需要了解業務、了解客戶,對技術的需求反而不會太高,所以與其花時間去專研技術不如將更多的精力用在業務和項目層面。
代碼能夠重構對底層框架要求深度掌握、且代碼框架本身要足夠靈活,而國內絕大部分技術人員都是停留在對框架的使用層面、少數可以完善、結合使用,極個別的在做同語言山寨或者換一種語言重寫,能夠對產品體系進行把握、與時俱進擴展實在是鳳毛麟角。隨著國家的經濟提升、IT行業逐漸成熟,在我國這么多IT公司基數下,即便是鳳毛麟角的概率,重視基礎框架、積累萃取、不斷迭代完善的一些技術公司也會慢慢嶄露頭角、涌現出來的。
【國內程序員很少進行代碼重構】,這個現象雖然沒有什麼調查統計,不過我寫了十多年代碼,也發現身邊的程序員大多數是這樣的,【寧可寫新的代碼,也不願意重構老代碼】。下面我也談談自己的看法:
系統沒有問題,就是最大的功勞
我見過的大部分的傳統行業的軟體公司或IT部門是這樣的(互聯網公司不太了解),「只要系統穩定,那麼就是最大的功勞」,而保持系統穩定最好的方法是什麼? 就是盡可能的不要動系統!
可能很多人不能理解,但很多公司確實是這樣,甚至公司對項目的考核標准中,項目有什麼突破的權重很低,是否有生產事故的權重很高。所以很多「機智」的項目組成員,千方百計的不接需求,或者把需求推給別的項目組。在這種單位裡面,別說重構了,新代碼都寫的不多。
測試覆蓋度太低,重構代碼沒辦法保證質量
代碼重構,很重要的一個問題:「重構後的代碼誰來保證?如果影響到原有的功能怎麼辦?」
這時候很有效的一個方法,是使用各種自動化的測試來保證重構代碼的質量。
但是,大部分公司,不管是單元測試還是其他的自動化測試,都是不健全的,甚至是沒有的。所以只要不是被逼不得已,程序員寧可重新寫一個方法,也不願意重構之前的代碼。
其他
進行代碼重構不是一件容易的事情,務必需要對需求熟悉;對代碼 歷史 變更熟悉;對代碼框架,模塊熟悉;對產品更新迭代做好風險把控,時間成本把控……
進行代碼重構需要能力非常高,責任心非常強的人進行,甚至需要一個優秀的團隊完成。
為什麼要代碼重構?理由一大堆,我認為主要有兩條,一是原代碼已不適合擴展新需求,二是原代碼已擁腫不堪,亂七八糟。
為什麼很少重構?除了上述分析外,還有其他因素,如人員流動快,原團隊原作者早已不知何去何從了。又如需求和業務繁多,完成工作開發都累得半死不活,日理萬機似的,哪有時間和心情重構?
謝謝大家。
1.國內程序員技術能力不足以進行代碼重構
大量的軟體從業人員連編程規范都不熟悉,怎麼可能做代碼重構?更多的人只會寫寫hello world,只會拷貝粘貼小段代碼,連if else這種語句都寫不清楚甚至漏掉邏輯,連面向對象的編程思想都沒有,談何重構?
2.國內程序員的溝通能力說服能力一般。
進行軟體重構,必須說服經理,讓經理相信重構會帶來軟體質量的提高和故障率的逐步降低,這樣經理才會安排人力進行重構。
3.國內軟體開發更注重bug的及時解決
國內軟體開發大量的人力被分配到解決短期的某個bug,沒人抽時間思考如何長久的徹底的解決軟體缺陷,其實解決bug不重要,找到軟體的缺陷或者性能低下的地方才重要,這些才是重構的點。國內加班加點疲於奔命式的開發,沒人考慮bug率是否長期內能夠收斂,總是先解決眼前的問題再說,處於一個永遠解決bug的死循環里。
這種工作模式是愚蠢的,不是smart的。
軟體開發,一定要動腦子,不要蠻干,這不是耕地,力氣大就耕的多。
重構代碼的目的說白了,就是讓軟體開發人員更自由。
謝謝樓主的問題,這是一個我特別想回答的問題?
為什麼?因為,第一,我是一個對代碼有潔癖的人,受不了一坨,一坨那樣的代碼。第二,我是一個踐行Clean Code 的人,給大家我主要負責的一個項目的一組數據(JAVA),總代碼量20萬行,UT coverage(單元測試代碼覆蓋率)82%,代碼重復率0.5%,代碼規則(sonar)違反(Code issue)0,甚至連最低的違反都沒有。
也正是因為我的項目在實踐Clean Code上的數據,我經常去給不同的團隊做分享,也對團隊對這個重構不太上心有一些理解。
大致以下幾個原因。
第一,也是最多的,交付壓力,大部分人都會抱怨,你看我們有這么多新功能,還有那麼多bug,根本忙不過來,哪有時間重構?
第二,重構意識不足,老闆,管理人員總是希望這個我們要有,那個我們也要實現?為什麼?因為別人有,別人有我們沒有可能會造成用戶流逝。即使有一些有見識的程序員和老闆反應這個重構問題,但是重構從來不是高優先順序的。畢竟,現在的軟體的生命周期可能很短。
第三,人員流動性大,這個是我聽過最奇葩的一個理由,我問一個來聽培訓的哥們,說你代碼寫成這樣,以後怎麼維護?這個哥們說,我也知道難維護,但我明年就跳槽了。
第四,設計上就不需要重構,曾經給一個保險公司做分享,我本人也是做金融相關產品後台的,我就問你們這樣寫代碼,可能三四年以後就非常難維護了,還是要盡快重構。他們的回答是,我們不重構,我們只重寫。什麼意思那?就是一個系統,三四年以後在寫一遍。
第五,程序員本身的問題,可能第一寫單元測試,修改命名,修改代碼結構,是一件很沒有成就感的事情,也是一個沒有多少附加值的事情。畢竟現在你去找工作,這個代碼質量方面的問題會問得很少。
第六,我見過的我不能反駁的一個回答,我的英文太差,不能很好的命名,而我也不想學英文。
第七,反正我已經實現了功能。
最後,用一句話來提醒程序員們,重構是多麼重要。
出來混遲早要還的,挖了坑遲早要填的。
在國內,【重構】這件事是程序員最喜歡做的事,而不是公司喜歡做的事。
但程序員喜歡並不能影響公司的決策,所以,國內的現象就是軟體系統很少有重構。
其根本的原因在於,國內的公司所推出的系統大多沒有重構的價值。
1、國內的互聯網公司存在這樣一種快節奏,那就是發現一個有價值的創意,就馬上進入開發,開發完成立即上線,並立馬推廣使用。這是一種快速試錯的模式,一旦發現系統在 社會 中沒有引起反響,那就馬上把系統再下線。這種情況下的系統哪來的重構價值呢?
2、即使一個系統上線成功了,也積累了大量的用戶,貌似為了系統的穩定性和性能,可以有重構的機會。但事實上不是,國內公司仍舊不會選擇重構,因為重構帶不來新的價值。所以,公司多數都會在系統上添加新的功能來吸引新的客戶,而不會考慮重構現有系統。
總得來說,引起重構的原因在於能夠有持續的價值。沒有價值的事,企業當然不會做,僅是程序員的一廂情願而已。
你只是見到了你所在的公司現象,不代表所有,也不能代表大部分的。
代碼重構還是存在的現象
代碼設計爛,經常出問題、擴展麻煩、維護心累、數據混亂、結果不清醒、模塊劃分混亂
就可能要考慮到重構了
呵呵,
老大說:
你趕緊去修復一下這個bug,
還有幾個功能沒有實現,加班搞一下,
pm 說:
這個功能改一下,
還有這個,界面重新調整一下,
這個業務流,現在不一樣了,
客戶需求需要多幾個功能,
老闆說:
這東西下周能出來嗎?
⑸ 作為一個程序員,面對別人寫的稀爛的代碼,怎麼辦
這心情大概就像幾百個人堆積木。堆得歪歪扭扭,搖搖晃晃,亂七八糟,你千萬不能抽裡面的積木,指不定抽了一塊就塌了。只能看見哪裡覺得不牢靠不停的往那邊填積木。只要不倒就好了。
每一位接手者在看代碼之後,心裡都想著重構。但其實重構了幾個方法後,放棄的概率可能會越來越大...
還有些情況其實並不是代碼垃圾,而是維護這個代碼的人一波又一波的換。新上的人在沒有完全熟悉這款業務的時候又不敢隨便改,等熟悉了以後,又想著跳槽,或者偷懶。除非遇到一個極其負責的人維護,但是這種人很少。
綜上,code review很重要,利用好code review 去統一和實踐以及監督,相信可以有效提升代碼質量。
網頁鏈接
⑹ 為什麼國內程序員很少進行代碼重構
我們國內的程序員絕大部分的時間是在趕進度,准確的來講忙著增加功能和修改bug,其實也從側面反映出為什麼國內出不了android以及Linux等影響深遠的科技創新,從全球開源代碼的佔比就可以看出,差距還是很巨大的。
希望可以幫到你,謝謝!
⑺ 大家怎麼理解「業務代碼」為什麼有人覺得寫業務代碼很low
在我眼裡,也經常會把程序員分成兩類:一種是我等這種寫業務代碼的程序員,另外一種是研究高深演算法、造「輪子」的「科學家」...
將他們稱之為科學家是有些誇張,第一次冒出這樣的想法是參加一個技術大會,當別的嘉賓都在分享開發、設計、架構、管理方面的經驗時,一名在騰訊工作的演算法工程師(應該已經是一個小領導了),他上台分享了一些諸如:滑動平均自回歸模型、神經網路基因表達式編程、SVM回歸機集成學習...坐在台下的我第一次冒出這樣的念頭:「這**是科學家研究的東西吧。」
當然,倒也不能說寫業務代碼就很 low,寫業務代碼也不是想像中那麼簡單的。
寫業務相關的代碼,必須了解業務流程,還需要了解業務人員心裡是怎麼想的,也就是業務出發點是什麼樣子的。
比如我最近遇到一個需求,過程大概是這樣的:銷售人員在賣一款產品,這款產品非常火,有些優秀的銷售人員一周可能能賣出去幾百上千單;結果我們接到一個需求,要限制每個代理人的銷售數量,比如每人只能賣 10 個(之前已經賣掉的不算);這就讓我們非常奇怪,本來賣的好好的,為什麼要做這個限制呢?這個需求看起來就非常的不合理。
後來業務人員和我們解釋了一下原因:因為這款產品公司不掙錢,銷售人員為了推這個產品,花在別的產品上的時間就少了,所以出這個功能,就是讓銷售人員「收收心」,把精力放在其他產品上。
這么一解釋,我們就立刻明白了;所以如果你不明白業務的時候,看著需求敲代碼也是非常容易出錯的。
有些人會認為業務邏輯就是一堆 if-else,但是我認為在實際工作中,這些 if-else 也是非常難做到的。
業務邏輯是人設計的,業務邏輯難不可怕,可怕的是它不嚴謹和變化快;業務邏輯和那些確定性的東西不一樣,比如我們寫好的代碼 if-else 兩個分支,那麼再怎麼也不會跳出這個范圍,業務邏輯就不一樣了,它是非常靈活的、不確定的,業務機會來的快消失的也快,我們很難開發出來一套全面的、完善的、靈活的的系統,去應對將來可能會發生的需求。
所以在開發過程中,如果可以將業務流程拆分成多個組件模型,組件和組件配合完成一個完成的業務流程;當業務發生變化或有新業務的時候,只需要重新編排這些組件,或對某一個組件做少量更改,就可以滿足業務變化;如果能做到這個程度,也是非常不容易的。
在這個過程中,你需要做到高內聚低耦合,避免過度抽象,從業務流程和動機出發,已滿足業務需要為主;既然做不了「科學家」,我們就努力把業務代碼寫好把。
首先,我認為寫業務代碼不「low」,但是大部分不假思索拷貝粘貼的業務代碼比較「low」,換句話說就是所謂的五年工作經驗就是把第一年的工作重復了五遍。
技術人員成長一般有兩條線,一條是成為技術專家,一條是成為領域專家。所謂的轉管理我理解也就是領域專家,畢竟不懂得領域知識是無法做好管理的,比如說你是互聯網金融某個業務部門的leader,那麼你肯定要懂金融。領域知識就是在不斷的寫業務代碼和思考中積累起來。
還有一個問題就是如何定義業務,比如說「實現一個修改訂單功能」,這是一個業務需求,看起來很low,但是如果業務需求改成「實現一個修改訂單功能,要求在有限資源的情況下並發10k,響應時間不高於10ms」,那這個需求就有挑戰。說這個問題想說明白一件事情,如果做業務不要停留的在業務表面,僅僅滿足於實現功能,要主動思考。
最後總結一下,沒有最好的技術,只有最適合業務的技術。技術是內功,業務是招式,內功不足,後續成長乏力,沒有招式,內功也不能發揮威力。這是也很多互聯網創業公司做大了之後要技術轉型的原因。
作為一個程序員,我也是寫代碼的,我不覺得寫業務代碼很low。
1.首先大家所認為的業務代碼就是一些和業務相關的增刪改查,涉及到的技術點相對來說是固定的,寫熟了之後,就是復制,粘貼,不存在什麼技術阻礙,很多人就覺得非常的簡單,沒有技術含量,做這些工作的人也顯得非常的low,如果你也是這樣認為的,那你就錯了,因為寫業務代碼的基本都是初級,中級的程序員,工作經驗有限,不具備寫一些公共方法和介面的能力,但是並不代表以後能力不會提升,如果持續努力,也會成長為高級程序員或是架構師,誰天生就是高級程序員呢,不都是一點點積累起來的嗎?而且就算是寫業務代碼也不能就是low呀,有些業務場景是非常復雜的,邏輯必須十分嚴謹,稍有差錯可能就會出現bug,對公司造成巨大的損失,不是寫業務代碼就是很容易的。
2.除了業務代碼就是非業務代碼了,比如開發資料庫,開發框架,或是寫一些公共的方法或是介面,供初級開發者調用。寫非業務代碼的人技術也不一定就非常的厲害,因為就算是開發框架或是資料庫之類的項目,也不一定都是高級開發,也會有一些水平較低的開發,因為寫業務代碼還是非業務代碼和項目也有關系,如果你們團隊開發的是開發框架或是資料庫這種的項目,那麼你們團隊沒有人寫業務代碼,也不能說明你們團隊每個人技術都很厲害,只是項目性質不一樣罷了。
3.業務代碼這個詞看你的理解吧,我認為其實所有的代碼都可以成為是業務代碼,無論開發什麼產品,都是有業務需求的,有了需求才有開發的動力,對於開發資料庫來說,資料庫的需求就是業務,對於開發框架來說,框架的功能就是業務,所以我認為廣義上來講都是業務代碼,沒有非業務代碼這一說,所以具體看你認為業務的定義是什麼了。不過無論如何也不應該去嘲笑或是去貶低別人吧,嘲笑或是貶低一類人就更不應該了。
業務程序開發相對於底層基礎架構層的程序開發有所不同:
業務開發的時間比較緊,變化快。
這個特點導致程序員沒有時間重構代碼,或者不願意重構代碼,而是用最簡單粗暴的復制黏貼的方式快速實現業務邏輯。其實所有的復制黏貼都意味著需要重構。
底層系統的開發,一般是架構師和高級程序員來設計和控制項目時間。相對來說,開發周期長,變化緩慢。會更加註重架構的合理性和穩定性,而且會不斷重構和改進。
業務開發一旦完成,只要平穩運行就不會有人再回來補技術債務,不會把它寫得更好。除非這個業務爆發了,不得不從新架構以支持更高的並發。如果上線之後表現不佳,很可能下線不再維護。所以公司也不太願意花太多精力在一個還沒有被市場認可的產品項目上。
而底層架構框架的項目會在不同的產品項目中不斷應用。不斷地進化。就像Spring之類的開源框架一樣,不斷的升級和完善。
相對來說,業務開發程序員會花大量的時間學習和理解業務知識;而底層框架程序員更多的時間在學習技術架構。如果業務知識在行業內通用,比如財務,金融行業知識。那麼長期的積累對業務開發也是很有幫助的。如果業務是很小眾的,甚至,這幾個月做這個業務,下半年又做另一個業務,做的時候也一知半解,就像很多外包一樣,那就沒有什麼業務沉澱了。
我就是寫業務代碼的,不過我覺得這很正常啊,不知道你是怎麼就覺得low啦?
所以,做為一個企業,支撐發展的肯定是他的業務,不管是賣什麼服務,都要通過業務來賺錢,可能針對業務,企業內部還會做一些細化。比如說,有人會是做一些前端,一些人做後端,還有運維,運營,產品的配合。前端再細化,一部分人會做一些頁面的展示,呈現,還有一部分人會做一些適合業務的工具,來提升開發效率。
那如果你自己的定位是只是單單寫頁面的,那隻能說你對自己的要求有點低,你沒有去考慮如何做一些提升工作效率的事情。舉個例子,比如說常見的後台管理系統,因為功能都很類似的,那你有去考慮如何做一個通用的模版嗎,還是就是不斷地去重復。
這個別人的產出,做了一個vue的後台管理系統的模版,現在的GitHub star在6萬多,通過這個項目,他就可以得到更多人的認可,也能得到更多的好的工作機會。
所以,不要覺得業務代碼就是low的,要善於去總結,然後再分享自己的經驗,沒准你也能成為一個領域內的Top。
不要太在意所謂low與不low,需要在意的是做了這個項目或業務後,對自己的能力有沒有長進,如果有,那說明不low。如果沒有,那說明你只是在機械的勞動而已。
每個大佬都是從業務代碼做起的,大佬們注重的是能否成長,學習實踐的機會,以及平台的大小和未來是否和自己的目標相匹配。
總結來說,只要能提升自己能力的任何工作,都是值得的。
我覺得首先大家要理解什麼是「業務代碼」,業務代碼是一個相對的概念。
1.對於一個一般的物聯網應用型公司來說,業務代碼就是根據客戶需求基於一個MCU或者MPU的應用控制邏輯的實現。
2.對於一個做純上層應用的公司來說,業務代碼就是基於一個操作系統為客戶量身定製對應的app,並實現對應的應用邏輯。
3.對於一個微型控制器設計廠商,業務代碼就是底層架構裸機的具體實現和各個外設驅動的框架設計。
4.對於一個設計操作系統的開發人員來說,業務代碼就是架構設計、內存管理、調度機制優化、優先順序管理、進程間通信機制優化、線程管理和內核完善等等。
所謂」業務代碼」都是相對的,沒有參考系怎麼談。像操作系統,站在操作系統內核提供方的角度看,上層所有的應用框架,進程服務,都是業務代碼,我是為他們服務的。技術只是工具,業務實現才是目的,站在不同供應商的角度,只要涉及代碼的地方都可以稱之為業務代碼。所以站在這個維度,如果要說業務代碼「LOW」,那就沒有代碼是不"LOW"的了。
不過,真正接觸底層或者實現RTOS底層業務框架的工程師其實是很少的。大部分工程師基本上都是對於客戶需求做一些非驅動底層非操作系統框架的應用型的開發,所以大多時候「業務代碼「又單一的被指向了那些只是對客戶的上層應用的需求做開發、調整或者迭代的代碼。
而這部分代碼究竟"LOW"還是不"LOW"呢,我的答案是:不"LOW"。但是現實卻是很「LOW」,之所以會被想成LOW,是因為:
1.判斷一個程序員的優秀程度已經不單單看你寫了多少應用型的代碼,設計了多少應用框架,而是你懂不懂底層驅動邏輯,懂不懂操作系統內核,懂不懂內核裁減等等。所以這種情況會經常出現在面試過程中,面試官會因為你不懂底層驅動、不懂內核而給你比較低的薪水。
2.懂得寫業務代碼的人,他的程序員基礎並不一定就牢固。因為上層應用可能對業務比較看重,但是對於一些特定的語言的編程並沒有那麼嚴謹。能用就可以,所以會自然而然的認為這樣的程序員「LOW」。而一個會寫底層驅動的人,他考慮更多的是基礎代碼的安全、嚴謹性和容量問題等等,他們的語言基礎相對來說要牢固很多。
3.技術負責人一般都是全能型的人。會寫底層驅動或者更懂操作系統內核的人更容易成為技術的領頭人。而那些只會「業務代碼」的人,放在大部分公司,一般都不會有太多的上升空間。
根據以上分析過後呢,做「業務代碼」的程序員基本上會被想的很「LOW」,但是結合我的親身經歷,不同的人對於這個事情卻會有不同的看法。
比如對於領導來說,那就不一樣了。你將「業務代碼」的需求迭代了,完善了,提前任務完成了,客戶很滿意。那領導不會認為你是一個很「LOW」的程序員。你很高級,領導很欣賞,「後果」很舒服。但是對於一個面試官來說,你就會點上層應用的調用和設計。我為什麼要給你這么多薪水?雖然會被想成很"LOW",但是也是現實。
業務代碼不一定low,能完成用戶需求的代碼就是好代碼。
另外,對於我們搞嵌入式軟體、EDA工具軟體的來說,業務軟體反而是更有技術含量的,更具科學意義的代碼,而軟體可能只是載體,你啥時候透過代碼理解了它們背後的物理概念、數學公式,你就超越了程序員,能向科學家又邁進一步。
互聯網軟體其實也一樣,軟體實現的是一個業務流程的自動化,你完全可以透過你寫的程序還原甲方用戶的業務流程,而這種流程是老闆制訂的,認識會上一個層次,將來可以向老闆邁進
我發現很多程序員對於處理業務邏輯都是「嗤之以鼻」。感覺自己天天寫業務邏輯代碼,改 Bug 都沒有時間學習,沒有時間實現個人成長?
但是,作為程序員來講,如果不是做底層基礎技術研發的話,大部分的工作不就是做這些擰螺絲的工作嗎?其實擰螺絲有那麼容易嗎?可能擰螺絲很容易,但是擰好螺絲就不那麼簡單了。
別小瞧業務邏輯代碼,如果真正寫好,要把邏輯寫得清晰簡單易用,功能健壯穩定,性能同時達到要求的話,其實是挺難的。
其實很多程序員都跟他一樣,都在痛苦的編程,一方面對自己有更高的要求,一方面又嫌棄現在寫的代碼沒有技術含量。又有更高的要去和希望,又嫌棄現在的工作,就是不思考出現的原因,不去付諸行動。還不停的抱怨: 感覺自己天天寫業務邏輯代碼,改 Bug 都沒有時間學習,沒有時間實現個人成長?
到這里,我們不禁一問:那我們該如何擺脫這種現狀呢?其實很簡單,我們應該擺正自己的態度和觀點,正確看待寫業務邏輯這些代碼就行了。
堅持不懈的寫好業務邏輯代碼
就像我在上面說的: 別小瞧業務邏輯代碼,如果真正寫好,要把邏輯寫得清晰簡單易用,功能健壯穩定,性能同時達到要求的話,其實是挺難的。
所以,我們要正確看待寫業務邏輯的代碼,應該擺正心態,堅持不懈的去寫,所謂量變引起質變,就是這個道理。寫業務代碼,積累代碼量,一力降十會,在積累了巨量的代碼量之後,幾乎任何所謂的有技術含量的東西都構不成挑戰性。當然,要想真正的通過自己寫業務代碼,寫好業務代碼還應該有接下來的這個思考。
其實業務邏輯代碼一樣可以玩出很多花樣,而這才是能夠提升你能力的本質。比如:你寫了一個處理單任務的業務邏輯,雖然滿足了用戶的需求,但是你這時能不能對自己有一個更高的要求呢?單任務雖然是功能實現了,但是效率可能不行,處理慢,那搞個多任務處理的邏輯怎麼樣?任務池、線程池、內存池、並發、同步等等這些技術點都來了。如果你對自己有這樣的要求,而你自己有追求的話,就會進一步思考如何去做到這些,你做到了,你能力就提升了。
同樣,很多人感覺處理業務邏輯,就是一些各種循環,條件判斷,只要邏輯稍微嚴謹點,功能就都沒問題,就都實現了,確實是這樣的。這就是你對於業務邏輯沒有興趣的根點所在。
那你為什麼不想想: 如何使用循環和條件判斷可以提升效率呢?滿足了功能的那些需求,是不是有些地方可以優化一下呢?是不是可以提升一下性能呢?
其實,這個技術的進步和積累,就在於自己內心對自己有沒有更高的要求和追求。這是大實話,也是大白話。很多人就感覺只要實現了功能需求就夠了,滿足了用戶就行了。然後,這個項目完事了,下個項目遇到差不多的邏輯,還是這么處理,又完事了,每個項目,每個功能都是這樣重復的處理,從來不思考最優的實現方式,你感覺能夠進步嗎?你能不煩氣嗎?十年如一日的工作,10 年也就積累了一年的工作經驗,在重復使用。
業務邏輯的最優方式,就是思考如何大道至簡
通過一個業務邏輯實現一個功能,基本上只要是程序員,腦子不笨,都能做出來,做出來是一回事,但是做好是另外一回事。大道至簡,我們要做就得想辦法做到最好。這里的好有很多層意思。
比如: 你寫的業務邏輯代碼 是否能夠做到准確,穩定,高效,易讀,易擴展,易維護,兼容性強呢? 問自己一句,如果你能做到這些,那確實是好。如果做不到,你還是處理初級水平,當然不行,這就是你在工作中提升能力的機會。別說沒時間,都是借口。
精益求精是對代碼大道至簡的永恆的追求,也是我們在處理業務邏輯代碼中不斷提高自己能力的過程。
明明自己水平初級,就容易驕傲自滿,感覺可以了,我想學更高的技術,那麼更高的技術是自己在處理業務邏輯中一步一步積累出來的,不是幹了初級的活,不用積累,直接學高級的技術,就能高級了。
我特別喜歡網上有個網友寫的一段話:
其實很多技術大牛和技術專家,都是從業務邏輯做起,慢慢積累思考起來的。比如:在處理業務邏輯之前,會思考如何設計這個架構,可以讓代碼更好的擴展和維護。在處理業務邏輯的時候,思考如何的處理才能提高性能和效率?一步一步的實驗和總結,積累,才成就了今天的成績。
所以,不要對處理業務邏輯嗤之以鼻,不要以為能夠滿足需求就夠了。你重復不思考的粘貼和復制肯定是不行的,必然會對編程失去興趣,自然無法更好的成長和進步。應該在編程的過程中追求更高的要求,尋找更高的興趣,這樣才能讓你持續進步,從而進階。
林子大了什麼鳥都有,不知道你說的有人是指多少比例的人。我的理解代碼可以分為兩類:1:工具欄或者框架類2:業務類。寫工具類偏重於健壯可拓展可復用;寫業務類偏重於邏輯嚴謹沒有漏洞,化繁為簡。畢竟有些時候需求或者業務都不甚清楚他們想要的邏輯。有時候復雜的業務流程你捋都不順,更別說代碼寫的好了。當然,工具類到高深,工具好用,框架優秀確實需要的技術功底深厚,比業務類要考慮的東西也多,但不代表寫業務類代碼很low。當然,不管寫什麼代碼,完全復制黏貼而不去考慮與實際場景結合,不去想為什麼?有沒有更好的處理方案是比較low的
⑻ 作為一個程序員,面對別人寫的稀爛的代碼,怎麼辦
在查閱代碼時,經常會發現一些寫的不合理的代碼。
面對這些代碼,首先需要確認修正這些代碼的影響范圍。
最理想的處置是對代碼進行重構,從根本解決代碼的混亂問題。
但是大多數情況,我們沒有時間進行重構,或者無法確保重構之後的代碼不會出現問題。
建議先解決最棘手的問題,然後慢慢對代碼進行分析,重構。
⑼ 如何避免重構帶來的危險
重構代碼很危險,它會給測試工作增加巨大的負擔。除非你的程序需要重構,一定不要輕易重構代碼。我這里所說的並不是把一個for循環改成while循環,或把一個StringBuffer改成StringBuilder,我說的是大動作,例如重寫一個方法,一個函數,甚至整個類或包。如果你缺乏對一個方法或一個類的了解,那你重構它的條件就不充分。即使你有一個天才的計劃,你也需要和團隊一起設計其中重大的修改。當屬於下列情況時,你不該重構對於你來說,它的邏輯看起來過於復雜,你沒有花時間去分析它。你不理解為什麼前任程序員要這樣編寫。你著手的是一個很重要的系統,而且時間很緊。你是團隊里的新成員,或新接觸這個項目,或這種語言。當屬於下列情況時,你可以重構現有的代碼對它要實現的功能顯得過於復雜,並且你分析過它。修改後的代碼遠比現存的代碼邏輯要清晰。你有足夠的時間,人手,財力來支持對項目進行回歸測試。現有的代碼陳舊無效率。無人認領的,寫的很爛的代碼都屬於此類。跟你的一位同事談論對這部分程序進行重構的好處和存在的風險,你們兩個都贊成重構。如何降低重構的風險權衡一下對一段代碼進行重構的利與弊,找出降低風險的方法。調試一段你經過重構但卻使產品崩潰的代碼,這對你來說將會是在這個行業中最有壓力的事情。使用自動化的回歸測試,快速的驗證你的修改。這非常重要,如果沒有準備自動化測試,你應該在做任何修改前建好它。盡量讓你的重構處於很短的開發周期,產品更新發布周期也盡可能短。把你重構的代碼和其它程序隔離開,這樣能讓你更容易找到出問題的地方。為你的重構活動准備測試計劃,包括回歸測試,功能測試,反向測試,負載測試,性能測試和用戶確認測試。投入全部精力來研究其中的邏輯,不要分心做其它事情。在需要的地方使用設計模式。不要為了設計模式而增加設計模式。設計模式應該用在合適的時間和合適地方。小粒度重構當你在開封一個方法時,如果你發現其中有一部分可以改進,那你就該考慮它,改進它。整潔的代碼是我們需要的,因為寫的很爛的代碼我們到處可見。和你的同事討論它們,當有人要修改你的代碼時不要固守己見。重構,然後回歸測試,然後才提交代碼。沒有人希望自己提交的代碼會弄垮系統。下面是一些比較有深度的閱讀材料。重構:改善既有代碼的設計 代碼整潔之道 Working Effectively with Legacy Code程序員的職業素養忍住你的慾望,不要試圖重構你不理解的代碼。多問問題,努力能清楚他們為什麼要把程序寫成這樣。也許他們有很好的理由。如果你找到一段很古老的代碼,很有可能它們是按照古老的方式寫的。每天都在新增的API,模式,需求和新領會都會讓這些老的方式顯得陳舊。不斷努力學習新的技術,但不要為了要使用這些技術而過於熱心的在重構中使用它們。
⑽ 程序員最容易犯的幾個技術上的錯誤 –
為錢而編程
如果你對編程不感興趣,你的代碼一定會寫的很爛。結果不僅僅你的事業沒有任何前途,你的團隊也會因此而痛苦不堪。
缺乏基本的能力
對諸如抽象、多態、介面、異常處理最佳方案等編程概念不熟悉的人寫出的代碼必然是設計糟糕,可讀性和可維護性都極差。
自作聰明
有些程序員喜歡過於聰明的在一個復雜的語句里包含多個步驟的代碼。這會使代碼的可讀性很差,沒人會喜歡維護這樣的代碼。
喜歡賣弄新學到的技術
當學到了某些新知識時,你很自然的有一種傾向想立即應用它們。耐心點兒。當真正需要時再用。
目標過多
為性能、內存使用、健壯性和可靠性設定了太多目標的程序會需要更長的時間去開發,導致產生過於復雜的代碼。
不重構代碼
軟體是一種不斷進化的產品。當代碼庫在增長時,單個的類、方法等會變得越來越復雜。懶程序員不願重構代碼,致使代碼過於復雜。
惡意復雜化
有些程序員蓄意的讓他們的代碼異常的復雜,以此來構築他們自己的領地。他們這樣做來迫使公司依賴他們,這是一種保護工作機會的伎倆。
希望可以幫到你,謝謝!