1. 程式人生 > >碼農,有趣的靈魂……

碼農,有趣的靈魂……

本文旨在用最通俗的語言講述最枯燥的基本知識

今日,看到有些文章對碼農和程式設計師做了一些界限劃定和差異分析,嚇得作者趕緊研究一下自己屬於哪個身份,但當仔細查看了這些文章後,發現其實對於寫程式碼的人來說,無非就像周星馳嘴裡的”龍套“和”演員“之分,頓時感悟,你是屬於碼農還是程式設計師,並不是外界給你定義的,而是你自己對這份職業的態度和付出而形成的一個一種身份。剛好可以藉助這段時間作者的一些所見所聞,寫幾個故事,逐一分析。

文章提綱:

  1. 有趣的碼農
  2. 程式設計師的自我修養
  3. 寫一下工作週報吧
  4. 不要離公司太近了

1. 有趣的碼農

最近忙於對公司某個專案進行重構,幾乎所有時間都花在搭建架構和編寫規範等文件上,以往都是我分析需求、建好資料庫表結構、定好開發流程,再把任務分配下去,現在只能把大部分新需求直接交給專案的小夥子來處理。

前兩天有個需求是對使用者播放視訊的行為進行資料收集,我直接把需求丟給小夥子讓他全權把控,脫離了我的約束,他也玩的不亦樂乎,三下五除二地就把功能給實現了;提交程式碼上來後,我瞟了一眼表結構,其中儲存播放行為的記錄的表名叫做“video_play_log”,當時我心裡就咯噔了一下:這名字起的有點侷限性啊,但由於時間緊迫,我也沒過多的糾結。

後來過了一週,PM跑過來跟我說:“運營反映上次做的使用者播放視訊的行為資料收集對運營很有幫助,他們希望對音訊也做同樣的功能”,我心裡想:小夥子這下好了吧,一模一樣的需求,你是把音訊資料放到video_play_log裡還是給播放音訊的記錄建一個新表“audio_play_log”呢?

事實上,這樣的現象在開發中屢見不鮮:

  • 有人為了實現一個百葉窗效果,把jQuery1.1到2.0版本的庫全引進來,完全不在意頁面的效能。
  • 有人為了查到一個數據,把資料庫的表關聯加子查詢再加關聯再用行內函數處理,完全不在意SQL的效能。
  • 有人為了達到需求裡的流程,程式碼裡的if else巢狀十幾層,完全不顧程式碼惡俗的要命。

....

當上級需要做什麼事情時,就按部就班的做事情,幹著體力能及的活,拿著適可而止的工資,也不做過多思考,需求寫完交差,按時上班、準點下班、對程式碼不做抽象,也不想解耦,更不會從可擴充套件性方面思考功能的實現(當然,有些人可能不具備這種大局思維的思考能力,勿怪~)。在領導看來,不差也沒有很好;在同事看來,不菜也不是大牛,在自己看來,剛好無慾無求。

誠然,對自己的程式碼沒有太多思考和追求的程式設計師,這類人可以稱之為碼農了吧,當然也沒有說碼農就是不好,沒追求就是不好,每個人對自己人生的定義不一樣,追求也不一樣,當你的理想就是要做這樣的一個碼農時,嗯,這就夠了。

但是當你不停的看到《碼農將被機器人替代》、《老程式設計師應該被僱傭的五大理由!》、《程式自動生成程式碼》...等之類的新聞報道或者文章時,你的內心感到恐慌:你害怕被老闆拋棄,害怕被機器機器替代,害怕你所做的工作在這個世上一文不值時,你就應該思考:

自己應該做一個無慾無求的碼農,還是有思想的程式設計師。

2. 程式設計師的自我修養

“我不是一個死跑龍套的,我是一個演員”

多少人奉周星馳的《喜劇之王》為電影中的經典,可是有多少能像電影中星爺那樣理直氣壯地告訴別人:

”我不是一個寫死程式碼的碼農,我是一名程式設計師“

其實要做到並不難,一個人,無論他的身份是程式設計師,還是掏糞boy,抑或是白衣天使;思考能力,都是人能把任何一份工作做好的必要前提。

一個需求發出,有人拿到了就埋頭苦幹一通,做出來的東西漏洞百出且擴充套件性極差。有的人拿到需求之後花一些時間思考,分析需求、拆分邏輯和功能,對於不合理的設計和產品討論得到確切可行的方案之後,才開工,架構和流程儘可能做到具有彈性和擴充套件性。

一個頁面報錯,有的人忙的滿頭大汗,折騰了一天也沒找到問題。有的人卻思考問題出現的可能性,使用排除法和除錯法,先分析錯誤碼,再定位問題是出現在前端還是介面,定位出來之後,再對邏輯程式碼進行除錯分析,沒多久就把問題找到並且修復了bug。

一份程式碼的編寫,有的人東拼西湊,面向過程式的編碼,最終功能實現了,程式碼冗長易讀性差,自己也沒學到什麼東西。有的人會先思考分析應當如何寫、哪些業務應該分層、哪些邏輯應該怎麼走、哪些程式碼塊應該抽象出來...最終編寫出來的程式碼整潔可讀性強、可維護性高,有些抽離出來的程式碼也可能成為自己的得力工具。

因此,思考能力,是你要想寫好一份程式碼,做一個有修養的程式設計師是一個必備能力,在日常的開發工作中,當拿到一個需求時,我們應該去思考:

  • 架構:如果構建一個有擴充套件性的可維護的工程、包、類。
  • 設計:如何設計程式碼的邏輯,哪裡可以抽象,哪裡可以拆分。
  • 編碼:如何寫符合程式設計規範,做到簡潔、安全、耦合度更低。
  • 優化:從效能更高的角度去思考,而不是僅僅從實現功能的角度思考
  • 除錯:編碼是如何埋點便於問題展示更清楚,問題如何定位、如何除錯,如何修復...

3. 寫一下工作週報吧

這是一個很奇怪的觀點。

其實我們心裡都有數:程式設計師都不喜歡寫週報,覺得那是文縐縐的幾句話一個清單,浪費時間還吃力不一定討好,有些上司不是程式出身的,發給他也不一定看得懂。

在此我修正一下:這裡所說的週報,並不是交給上司那一份,而是交給你自己的那一份。

為什麼是交給自己的一份週報呢?我怎麼沒有交給自己呢?

在此我想你們自己內心回憶一下:上週你做了哪些工作?解決了哪些問題?碰到了哪些坑或技術難點?如何攻克?

可能90%的人都會記得,那麼再上一週呢?上一個月?上一年呢?

相信沒幾個記得吧

你是否曾經因為花了一個通宵攻克下來的功能而興奮自豪的睡不著?

你是否試過一個bug百思不得其解,最終網友幫你解決了,讓你學到一些你沒學過的只是而無比開心?

你是否因為自己造出了一個很實用的輪子而迫不及待得想要分享給他人?

這些你都曾經試過,可是現在還會興奮嗎?不會了

當硝煙盡散,一切歸於平靜之後,有些你曾經很深刻的東西,也會慢慢變得模糊,最終消失。

因此建議你給自己一份工作週報吧,內容不用太多:

  1. 做了哪些工作
  2. 得到哪些成果
  3. 碰到了哪些坑
  4. 學到了哪些知識

你每週收集一份這樣的內容,日記也好、文章也好、哪怕是一個Excel表格,不斷的積累和回顧,會有不一樣的收穫。

4. 不要離公司太近了

由於公司業務的發展導致人員迅速擴張,公司一個由廢棄的舊飛機場改造而成的創業園區租了一個大廠房,打算改造成一個比較藝術氛圍的公司,在裝修時,極具細心的想到了一些員工需要住宿,因為劃了一排房間作為員工宿舍,公司搬進來之後,就有一個名同事入住了這個“新房子”。

我們這些住在外面的同事,嘴上沒說啥,但心裡都想:真幸福,住公司不擁擠地鐵,不用自己出房租,天天都可以睡到8:59起來,多好啊。

一開始他好像也挺享受的,天天睡大覺快到上班時間了悠哉悠哉的起床上班,下班看著我們匆匆忙忙的趕地鐵擠公交...

但三個月後突然有一天快下班時,我看到他在拖著行李往公司外面走,我驚訝的說你是去旅遊嗎?他回答讓我出乎意料:他搬出去住了。

後來有一次我們去打球,打完球一起吃了飯,期間,我問他在公司住的好好的為什麼搬出去跟我們一樣朝九晚六了呢,他說:

第一個月:沒房租沒女朋友,一人吃飽全家不餓,上班寫程式碼,下班在公司看電影玩遊戲,工作和生活,玩的不亦樂乎。

第二個月:遊戲玩膩了電影也看沒了,上班時看著你們匆匆忙忙的來,下班看著你們滿載喜悅的走,走到只剩我一個人在公司時,我開始感到有點孤單,在公司住,餓了就點外賣,困了就回房間躺,我的所有時間,都在公司這幾百平米的空間裡,有人覺得像是世外桃源,我覺得是一個只有我一個煩人的監獄。

第三個月:當專案的工作越來越多的時候,我成了加班的首先考慮物件,每時每刻,我都有可能被工作包圍,上一次資料出問題時,老闆逼著我查資料查到第二天,等我忙完從電腦桌起來時,你們已經提著早餐進入公司。

常常在夜深人靜時,我都在想我這樣有什麼意義:究竟是省了那點房租?還是省了每天上下班的時間?當我把這些關係搞清楚之後,我發現這其實是在浪費時間,浪費自己的生命,我這段時間的工作收穫到的僅僅是那份不需要交房租的薪水,其它的..一無所獲。

後來我決意在外面租了一個小房子,每天都按時起床,去附近的公園跑跑步,然後跟著你們一樣在路邊買了個早餐趕來上班,下班時間,和你們一樣匆匆趕回去,在那個小出租屋裡,我做了很多事情,買了一些技術書籍,我看到了在工作中我沒用到的技術,我的鄰居,是一個愛好打籃球的傢伙,經常我們約一起去打打球,如果沒有什麼事情,我就躺著靜靜思考一些事情,再也不用擔心領導突然跳出來叫我查資料或者改程式碼。這樣的工作和生活方式,讓我能在工作和生活之間維持一個平衡的狀態,我不僅僅靠工作漲經驗,也靠生活不斷的給予我靈感和前進的線路。

聽完這些話,作者心裡有些失落:原來所謂人之常情的現象,並不是我們表面上所認為的那樣發展的。古語云:遠水不解近渴,對於公司來說,當你離公司非常近甚至住在公司,就很可能被領導欽點的“加班之子”,加班的次數越多,生活的節奏越容易被打亂,對於個人來說,住得近,內心感覺加班就成了順理成章的事情。

當你忙到不知道自己在做什麼的時候,或許就應該做出些改變了。

歡迎工作一到八年的Java工程師朋友們加入Java工程師學習交流群:795632998
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!