A. 《神秘的程序員們》漫畫30:為什麼程序員應該養只貓
簡單說貓愛衛生3個月洗次澡即可,並且不太會像其它寵物,如狗一樣到處搞破壞,像現在上班族工作都特別忙又經常坐電腦旁邊,回家又是一個人偶爾無聊的時候想找點東西玩,貓就是個不錯的選擇,並像程序員之類的更是經常一人。
神秘的程序員們像貓一樣活動!幾乎長期呆工作室。擁有同理心,才能實現更好的團隊合作。
神秘的程序員們擁有像素眼,重視外觀和易用性,思維比較感性;重視功能的實現和性能的提升,思維比較理性。對齊、字體排印、配色和裝飾元素,提高產品觀感的設計心理,和朝夕相處的設計師獲得同理心。
神秘的程序員們與貓有一定共性,比如生物學的日出而作日落而息。
B. 程序員接私活完整攻略
接私活 對程序員這個圈子來說是一個既公開又隱私的話題,不說全部,應該大多數程序員都有過想要接私活的想法,當然,也有部分得道成仙的不主張接私活。但是很少有人在公開場合討論私活的問題,似乎都在避嫌。就跟有人下班後跑滴滴一樣,程序員私有時間接點活掙點錢不也很正常么,不過不要在上班時間就行,就跟你上班期間出去跑滴滴一樣。
當你竭盡全力想要去接私活的時候一定做過這樣的事,網路搜索「程序員如何接私活」或者「程序員到哪接外包」之類的問題,那麼相信你也一定看到過讓你不要接私活的帖子,觀點大概就是:
把有限的時間花在提升自己的能力上,技術深度,技術廣度,或者多閱讀書籍,豐富自己,這樣有可能比做外包收益大。
這里就不跟大家討論該不該接的問題了,很明顯,我接了。首先跟大家分享幾個項目案例。
案例1
大概是13年14年左右的樣子,談到一個項目,做一個APP連接甩脂機,通過藍牙模塊傳輸數據,便於手機上觀察,大概這樣。依稀記得跟甲方項目經理溝通需求時,他拿了一個 Android 2.x 系統的手機給我演示了QQ的一些功能,我一本正經的跟他說,「你放心,這個肯定做不了」,他當時就懵了...因為我並不想兼容2.x版本的系統。後來進入簽合同階段,這家公司不大,事兒倒是不少,又是身份證復印件,又是按指紋。這個項目是我外包生涯中的一次滑鐵盧,為什麼呢,因為我竟然同意了不用付定金,等項目開發中期再支付第一筆費用。帶著一個他們提供的藍牙硬體模塊,回去了。後端開始編寫API,Android iOS 開始研究藍牙數據傳輸,噼里啪啦直接把項目做完了。測試包發過去了,結果大家能想到,不給錢!
我至今都記得這家公司的名字,不知道倒閉了沒有,我們整個團隊一分錢沒得到,項目以失敗告終。
案例2
一個汽車後市場項目。當時市場上有一款APP,養車點點,後來已經改名,叫典典養車,我們當時要做的就是抄襲它,功能類似,整個項目差不多十幾萬。甲方是做汽車零配件的,在上海有很多家店,每次交流的地址在一家咖啡館。兩個多月後,項目上線,經營一段時間後,甲方意欲挖我們過去,畢竟項目是我們做的,他想把原班人馬招過去,婉拒。
案例3
一個海外社交項目。這個項目比較小,只做 Android 一個端,原因是甲方招聘的 Android 人員離職了,時間緊急,就讓我接了。比較順利,對方提供視覺稿、API,我開發 Android 即可,項目也沒啥難度,我閑著無聊,特地給他們做了一些交互動畫,甲方驗收的時候非常高興,直言比他們自己員工做得都好。
還有很多其它項目就不一一介紹了,小到做一個控制項,幾百塊,千把塊,大到幾十萬的項目,從整理需求到設計到開發。當然,也不是什麼項目都接,舉個例子,以APP為例,在甲方提供API和視覺稿的前提下,一個端低於2萬的項目從來不接。
做私活掙錢嗎?不掙錢是腦子進水了嗎。尤其對於剛入場的選手,外包收入可以說抵你一年的工資都可以。不僅掙錢,還特別積累經驗,外包項目五花八門,搞地圖的,搞語音的,搞視頻的,搞藍牙的,能幫助初級選手快速成長。
做私活累嗎?相當累。白天黑夜,從無周末。項目一旦接下來,從此進入心事重重的生活,不到最後交付那一刻,不會停緩。周末是最佳的工作時間,平時下班晚的話還做不了,所以幾乎沒有休息時間。
重點來了,到哪裡接呢?
初級選手自己亂七八糟找項目,高級選手項目找上門。做私活一定要找到最佳狀態,不然就是受罪。什麼是最佳狀態,就是當項目找上門時, 想做就做,不想做又想賺就轉。 那麼到底有哪些方法可以接到私活呢?不管黑貓白貓,抓到老鼠就是好貓,有哪些方法我一一說來。
方法1
各個眾包平台。這是入門級的手段,也是最容易做的方法。有哪些眾包平台就不用我一一細說了吧,豬八戒,威客網,CSDN 也有外包頻道,一些技術論壇,海外的 Freelance 網站等等,每個都注冊一遍,前期比較麻煩,各種資料需要填寫,團隊介紹,歷史案例。注冊之後理論上就可以投標項目了,不過如果需要認證的話,還需要繼續花錢,很多項目只有花錢之後才有機會投標,這個就自己評估吧,我沒花錢。通常沒啥好項目,錢哪有那麼容易賺,都是些邊邊角角稀奇古怪的項目。當然,即便是被別人挑剩下來的項目,也不排除有好項目,你要一一去溝通才知道。
方法2
主動聯系各個外包公司,成為他們的備選開發人員。外包公司接單子的手段肯定比我們個人高明多了,他們就靠這個吃飯的,當他們出現人員緊缺、項目過剩、員工離職等情況時,不排除他們會考慮找臨時替補人員,甚至把項目整包轉出去。如果你身邊有朋友開外包公司的,那很好,先天優勢,長期互助。但是大部分人也許並沒有這樣的資源,那麼這就是個體力活了,在方法1的基礎上,部分平台會留下甲方的聯系方式,比如豬八戒,你直接搜索軟體外包服務商,他們的介紹頁面上通常會有他們的手機號碼和郵箱等信息,或者當你點擊「在線咨詢」「與我聯系」等類似按鈕的時候,他們的自動回復也會出現一些QQ號、手機號、郵箱等聯系信息。
這邊我只是以其中一個平台為例,只要你用心,各個平台你都能扒到一些有用的信息。拿到這些信息之後你就可以把你編輯好的話術發給他們,也可以直接加他們微信,通常手機號碼就是微信,不要慫,直接跟他們聯系,打電話、發郵件、發QQ,發微信,把你想要做外包的意圖告訴他們即可,然後就靜靜的躺在他們的朋友圈裡,或者被遺忘,一兩個月問一次好打個招呼,不要太頻繁,這也算是人際關系的維護,看你本領了,多認識點人沒壞處,剩下的就是平淡的等待了,如果他們會聯系你的話。
方法3
跟身邊的開發人員灰度交流。你沒有項目,不代表別人都沒有,如果別人願意帶著你的話,這也算是一個渠道。什麼是灰度交流,就是半含蓄狀態,文章開始我說了,程序員接私活是一個既公開又隱私的話題,不過這個度大家自己把握好,搞不好丟飯碗,把握不好的還是放棄這個方法吧。
方法4
人脈資源。除了從網路上接項目,或者吃外包公司的殘羹冷炙,還有另外一個類別的項目,那就是創業者。在這個互聯網、移動互聯網、物聯網盛行的時代,創業者也是一波接著一波,雖然熱度有高有低,但是從不缺。組建一個公司,組建一個技術團隊需要一筆不菲的費用,尤其軟體開發人員的工資,將成為一個創業公司的沉重負擔。種子投資,或者天使輪投資能有多少,對大多數創業項目來說,幾十萬,一百萬,兩百萬,或者五百萬,基本頂天了,這些錢能維持一個團隊多久,何況還有很多創業者並沒有拿到融資,他們等著先開發一個上線項目,再拿項目去找投資。如果你能接到這樣的項目,那也是很爽的,不過通常這類項目靠熟人介紹,但是你千萬要注意,一定要營造良好的口碑。有條件的話,也可以做套名片,幾十塊錢,夠發好久的。
做私活沒有穩定的渠道,你可能一直找不到項目,也可能一年一個項目,重點是心態,不然你將陷入困擾的情緒當中。有更好,沒有拉倒,找到最舒服的狀態。
當項目來臨時,該如何報價?
價值都是相對的,一定要有自己的心理預期,有些人覺得五千很值,有些人覺得一萬很值。不要飢不擇食,不管多廉價都接;也不要人心不足,吃著碗里看著鍋里,或者覬覦別人的高價。跟對方交談時,一定要快速判斷彼此是否是目標客戶,不要啰嗦太多,你的心理預期是幾萬,對方的心理預算是幾千,這樣的項目還談個啥,務必在最短的時間內確定大家是否可以繼續談下去,否則浪費不必要的時間。如果大家心理預期差不多,對方不是那種想三千塊錢做個淘寶的,則繼續往下進行。有的甲方要求不多,很爽快,這樣最好,有的甲方需要出報價單,那麼就詳細溝通需求,整理報價,整理報價是一個費時的過程,不要嫌麻煩,我們不是服務商,我們是搶食的個體,一定要不怕付出,哪怕一無所獲。
甲方有可能只是來詢價,也可能等你出完報價單再回去比價,還是那句話,不要怕吃虧。如果甲方是個體的話,通常很好弄,但是甲方是商家的話就麻煩一點,一定要問清楚是否要開票,開票是要稅的,不過羊毛出在羊身上,告訴他我們的報價是不含稅的,如果要開票的話要加上稅錢,20萬的話,差不多幾千塊錢,看對方要求開什麼類型的票。開票的話可以自己去稅務局開,不過我沒去過,如果自己認識幾個開公司的朋友的話那是最好,讓他們幫忙開張票,把稅錢貼給他們。
如果你覺的開票你對來說很難實施的話,那麼有三個方案,一是放棄,這樣的單子直接不要接了,繼續尋找下一個單子;二是先接下來再轉包,轉給其它的外包公司做,不過你要估摸好有公司接,有朋友做外包公司那是最好的,相互幫忙,但是這種方案並不推薦,原因是不好把控項目進度和質量,還擔風險;三是把項目介紹給認識的公司去談,談好了你拿提成,這樣你既不擔風險,還賺點快錢。
付款方式該如何確定呢?
切記,必須付定金,越多越好。通常我的付款方式是442,即預付40%的定金,項目提測再付40%,項目上線付清餘款20%,這套方式針對個人比較好用,針對公司不好用,公司通常會留一筆費用在上線後一個月兩個月三個月再付清,所以付款方式可以改成5311,即預付50%的定金,提測30%,上線10%,上線運營一個月後10%,堅持一個原則,前期付的錢越多越好。
接下來就是簽合同了
一般只有個人才可能不要求簽合同,大多數情況還是要簽合同的。合同盡量你來擬定,不會寫的話上網抄,一定要保護好自己的權益,重點是防止被對方坑。比如在合同中一定要寫好適配哪些系統哪些瀏覽器,基於哪個版本開發等等,做得到的就寫,做不到的別亂寫,合同這東西,在心情好的時候怎麼寫都無所謂,心情不好的時候大家只能拿合同說話,你可別賠個十萬二十萬的,嚇死你。
整個接私活的過程差不多就是這樣了,最後,我再強調幾點 注意事項 :
end
C. 如何提升程序員的代碼編寫能力
一、先列三個常見的開發場景:
1、拿到一個模塊詳細設計文檔,大部分程序員的通常做法就是開始搭建界面代碼,然後從第一個按鈕點擊事件或頁面Load事件開始寫第一行業務代碼。寫的差不多了,就運行一下,發現哪裡不是自己想的那樣,就改改,直到改到是自己預想的那樣。
2、做完了一個功能模塊或幾塊相關聯的功能模塊,輸入111asd,發現新建正常、保存正常,就提交給測試人員。測試員用測試用數據、測試場景用例來測試,發現有問題,就登記bug。對於嚴重的影響下一步測試的BUG,測試員就用內部IM通知這個開發人員。對於不影響繼續往下測試的BUG,測試員就登記下來,等程序員有空時處理。
3、程序員一般工作不希望大家打擾,所以開發起來就是開發。等手頭開發告一段落,就看看BUG庫。發現有與自己有關的BUG,就從第一個BUG開始看起。就開始通過IM和測試員掰扯起來(這不是個BUG啊、業務邏輯不是你想的那樣啊、我這里不能重現啊、你給的信息描述不清晰啊),於是IM幾來幾往,甚至跑過去當面交流一番,甚至會拉扯上產品經理一起討論,更甚者需要項目經理或產品經理發起一個會議來集體討論一下
這是不是很熟悉呢?這就是大部分程序員開發的三個步驟:寫代碼、自測、修復BUG。
二、說好的代碼設計、代碼測試呢?
代碼設計?那不是都有開發平台么,已經固化了啊。那不是維護舊功能做完善修改呢么,又不是寫新代碼,只能在現有代碼基礎上修改啊,你又不能大幅重構。
代碼測試?你丫需求討論期、產品設計期、設計評審期那麼長,都把研發項目時間佔光了,就留下2個星期讓我們寫代碼,我們哪裡有時間搞那麼深的測試。還想讓我們搞結對編程?還想讓我們搞測試驅動開發?
而且你看測試,什麼功能測試、集成測試、性能測試、安全測試、安裝部署測試、升級測試、遷移測試、UAT測試,一大堆測試,測試也需要很多時間。
一個項目,需求討論、產品范圍規劃與評審、產品設計與設計評審佔了一個半月,開發+自測就一個月,測試佔了一個半月,這就4個月了啊。
三、為啥程序員寫代碼總是寫寫測測?
剛才大家也都看到了,大部分程序員都是從界面代碼開始寫起,而且寫一寫,就運行一下看看。為什麼會是這種開發方式?
那是因為大部分程序員缺乏在腦子中的整體建模能力。只能做出來一點,真實的感覺一下,然後再往下。
有些是產品經理的上游就有問題,沒給出業務流程圖(因為產品經理也沒做過業務),也沒畫清楚產品功能操作流程圖。
為啥沒給出業務流程圖?因為產品經理不熟悉業務,另外,產品經理也沒有流程建模能力啊。為啥沒畫清楚產品功能操作流程圖啊?因為不會清晰表達流程啊。
很多產品經理、程序員,都缺乏分類、分層、相關、先後能力,更別說總結、洞察能力。
這是基本訓練,是一個做事頭腦清醒的人必備的技能,這不是一個程序員或產品經理或測試員的特定技能要求。
我經常看書就梳理書的脈絡,每看一本就寫一篇總結。我過去閑扯淡還梳理過水滸傳、紅樓夢的人物關系圖呢,其實就在事事上訓練自己的關聯性、層次性、洞察性。
我經常面試一個人時,我會問這樣的問題:「你把我剛才說的話復述一遍,另外你再回答一下我為什麼會這樣?」,其實,我就在看一個人的細心記憶、完整梳理、重現能力,我也在看一個人的梳理、總結、洞察能力。
我個人寫代碼就喜歡先理解業務流,然後理解數據表關系,然後理解產品功能操作流,大致對功能為何這樣設計、功能這樣操作會取什麼表、插入或更新哪些表,哪些表的狀態欄位是關鍵。
然後我寫代碼的時候,就根據我所理解的業務流、功能操作流、數據輸入輸出流,定義函數,定義函數的輸入與輸出。
然後,我會給函數的輸入值,賦上一些固定值,跑下來看看能否跑通這幾個關聯函數,看看還需要怎樣的新增函數,或者看看函數的輸入輸出參數是否滿足跑通。
剩下的事,就是我填肉寫詳細邏輯代碼了。
當然,大部分人沒我這樣的邏輯建模能力。怎麼閱讀理解也想像不出來,也沒法定義函數。畢竟有邏輯建模能力的程序員都很少,100個人里有10個,已經是求爺爺告奶奶好幸運了。
那怎麼辦呢?
我建議是分離分工配合,這就是現實中沒辦法的辦法。讓有邏輯建模能力的人來設計函數框架、來設計工具來設計代碼模板,然後讓沒有邏輯建模能力的人來填肉寫詳細邏輯代碼。
我們可以先從最緊要的模塊開始這么做。不緊要的模塊,還讓它放任自流,讓熟練手程序員繼續塗抹。
我曾經還讓有頭腦的程序員做榜樣,給大家分享他是怎麼規劃函數的,怎麼做維護性代碼的代碼結構改善的。但是發現效果並不佳,其他人並沒有因此能做代碼設計。可能邏輯建模能力是個人的基本素質,是從小到大訓練成型的,不是你一個大學已經幾年的人能夠短時間內可以訓練的。
所以啊,還是讓能走的人先走,讓從最緊要的模塊開始這么做。
不必擔心這樣做後,因為過去一件事被分工(一個做代碼框架一個填肉)成兩個人做了會降低工作效率。我們很多的工作效率低就是因為半瓶子醋搞出來的,來回反復修改。
真是應了劉德華在電影里說的那句話:說你又不聽,聽又聽不懂,聽懂了又不做,做又做不好,做不好還不服氣。
四、為什麼大部分程序員不做代碼測試或白盒測試或單元測試呢?
還是因為沒有代碼設計。因為沒有函數啊。所以,一個按鈕功能有多復雜,代碼就有多長。我見過2000行的函數,我也見過1000多行的存儲過程和視圖SQL。怎麼做白盒測試啊,這些代碼都粘在一起呢,要測,就得從頭到尾都得測。
所以啊,先學會設計函數,先寫好函數,這就求爺爺告奶奶了。很多開發了5年的熟練手程序員,可能都未必會寫函數。
函數的輸入輸出值就很有講究。很多人都寫死了,隨著版本迭代,發現過去定義的函數參數不夠用了,於是就新增了一個參數。然後,相關性異常就爆發了,其他關聯的地方忘改了,到底哪些有關聯,怎麼查啊,本系統沒有,沒准其他系統就調用你了,你根本不知道哪個神經人曾經COPY過你的代碼修吧修吧就改成了他的功能呢,而且裡面的很多代碼他看不懂也不敢刪,只要他實現的功能正常了他也不管了。於是,你改了你這個函數,他的系統就莫名出錯了。
所以,我一般會定義幾個對象來做參數。另外,我也很注重函數的日誌、函數的異常保護、異常拋出、異常返回。另外,我也很注重參數輸入值的合法性校驗。
所以啊,應該開發Leader們先制定函數編寫規范最佳實踐,輸入輸出參數怎麼定義比較好,函數的返回值如何定義比較好,函數的日誌記錄應該怎麼寫比較好,函數的異常保護、異常拋出、異常返回如何寫比較好。先教會一般程序員,先從會寫函數開始啊。
當然,你光有一份規范,程序員們還是不理解、不實際應用啊。所以,還得Leader們做好典型的代碼模板,裡面是符合函數規范的代碼框架,只有這樣,一般程序員們才會照貓畫虎適應了函數設計的編程習慣。
所以啊,我專門重新定義了leader的明確職責,其中第一個重要職責就是:負責工具/框架/模板/規范的制定,並且負責推廣且普及應用落地。
你不明確定義Leader的這個重要職責,你不對這個職責做明確的KPI考核,誰尿你啊。你以為好的工具/框架/模板/規范是靠人們的熱情、自發產生的么?我們還沒有那麼自覺高尚啊。
五、為什麼大部分程序員不寫注釋啊?
我經常說一句話,千萬別多寫注釋。為啥?
因為我們經常遇到的問題不是沒有注釋,而是更糟的是,注釋和事實代碼邏輯是不相符的。這就出現常見問題了:殘存下來的設計文檔是一個邏輯、注釋是一個邏輯說明、真實代碼邏輯又是一個,鍾表多了,你也不知道正確時間了。
所以啊,產品文檔、注釋、真實代碼,三者總是很難一致同步。我為了幾百人研發團隊能做到這個同步花了大量心血和辦法,但我最終也沒解決了這個問題,還把Leader們、總監們、我都搞的精疲力盡。
索性回歸到一切一切的本源,代碼,就是程序員的唯一產出,是最有效的產出。那麼,讓代碼寫的不用注釋也能看懂,咱得奔著這個目的走啊。
為啥看不懂,不就是義大利面條式代碼么,又長又互相交雜。
OK,我就規定了,每個函數不能超過50行。用這一個簡單規定和靜態代碼檢查插件,來逼迫大家嘗試著寫函數。有的函數屬於流程函數,是串起其他函數的,有的函數就是詳細實現函數,實現一個且唯一一個明確作用的。
有了流程函數和功能函數,而且每個函數不超過50行,這就比過去容易看懂了。
六、為什麼大部分程序員不抽象公共函數啊?
我經常說一句話:千萬別抽象公共函數啊。為啥?
因為大部分程序員缺乏抽象洞察能力。特別是有些積極熱情有餘、愛學習愛看書、半瓶子醋晃悠的二桿子,看了幾本UML、重構、設計模式、整潔代碼之道,就躍躍欲試了,還真敢給你抽象公共函數了。
一開始,他覺得80%相似,20%不相似,於是在公共函數裡面簡單寫幾個if..else做個區隔就可以。沒想到,越隨著版本迭代,這些功能漸漸越變越不一樣了,但是這個代碼已經幾經人手了,而且這是一個公共函數,誰也不知道牽扯多少,所以誰也不敢大改,發現問題了就加一個if..else判斷。
沒想到啊沒想到,這個本來當初公共的函數,現在變成了系統最大的毒瘤,最復雜的地方,誰也不敢動,除非實在萬不得已,手起刀落。
所以,我平時告誡程序員,純技術的、純通用的,你們可以嘗試搞搞抽象公共函數,對於業務的,你們還是簡單粗暴的根據Leader們做的代碼模板代碼框架,乖乖的復制、修改、填肉吧。
你們啊,先從做模板做代碼片段開始吧,咱們放到咱們內部代碼片段開源庫里,看誰的代碼片段被別人復制的多,說明你的代碼抽象設計能力越好了。那時候,我就大膽放心讓你撒丫子跑了。在沒有學會跑之前,給老子乖乖的復制、修改、填肉吧。
D. 程序員如何在網上掙錢
可以賣技能呀
一、賣技能網站
自由人(http://www.freemancn.com/),設計,攝影,文案,插畫,程序,策劃,配音,
斗米兼職(http://www.doumi.com)
兼職貓(https://www.jianmao.com/)
兼職吧(http://www.jian8.com/)
58同城兼職(http://xa.58.com/jian.shtml)
豬八戒(http://www.zbj.com),軟體開發,Logo設計,翻譯,取名,硬體設計,UI設計
威客中國(http://www.vikecn.com/,
時間財富 http://www.680.com/),
任務中國(http://www.taskcn.com/)
一品威客(http://www.epwk.com/)
freelancer(https://www.freelancer.cn)
口袋兼職(https://www.kdjz.com/)
手工活之家(http://www.yn288.com/)
中國賞金寫手網(http://www.3jxs.com/)
寫作類:
創世中文網(http://chuangshi.qq.com/)
起點(http://www.qidian.com/)
雲起書院(http://yunqi.qq.com/)
晉江文學城(http://www.jjwxc.net/)
紅袖添香(https://www.hongxiu.com/)
17k(http://www.17k.com/)
縱橫中文網(http://www.zongheng.com/)
簡書(http://www.jianshu.com/)
豆瓣(https://www.douban.com/)
二、接項目
開發類兼職網站匯總
程序員客棧(https://www.proginn.com/),
軟體開發 雲沃客(https://www.clouderwork.com/),
解放號(http://www.jfh.com/),
軟體開發 碼市(https://mart.coding.net/),
開源中國眾包(https://zb.oschina.net/)
碼客幫(https://www.make8.com/)
測試類: https://www.mtestin.com/http://www.alltesting.cn