今天請了假去外包客戶那邊測試寫好的程式, 徒弟也有去, 做完已經晚上八點半了
走的時候, 徒弟說: 作外包確實有成就感. 跟其他IT比起來會有優越感(應該是指薪水的增加)
我回他: 是阿, 因為不是死薪水, 你做多少就是你的, 你這樣要破百萬很容易(這是用他的年薪來推算, 他近80萬一年)
----------------------------------------------------------------
我一開始接案的時候, 因為不確定自己有沒有能力如期完成, 是比較保守的接案, 我會挑簡單的, 數量也不敢多要
此次一次挑了11支, 而且有兩支算很難的, 我想之後我會盡量挑難的做
這是因為做簡單的, 純粹就是賺錢, 成就感不如做難的, 而且難的時數高, 門檻高(有能力接的也少, 也算幫自己創造藍海)
而且也是藉由作難的, 在專業的領域更有成長的空間, 對我實質上的接案能力也才會更提升
想像一下, 一年假設接五個案子, 五年就見過25個客戶的新ERP專案的規劃(還會涉及系統整合的部分, 比如這個案子)
而有些公司通常都會把其特殊Know how放在核心客製程式內完成, 所謂核心, 通常也不簡單寫,
我等於可以在五年掌握25家公司的ERP核心, 對見識鐵定是有所增加
----------------------------------------------------------------
接案這近一年來, 由於實際的寫程式歷練, 和以前在這個領域的經驗, 我有了一些寫程式的心得
寫程式像寫文章
大部分人寫程式就是打開電腦直接用程式編輯器開始寫程式, 我因為外包時間主要是晚上和假日, 偶爾才會用白天上班時間寫
我有發現白天寫程式的效率會比晚上好, 主要的原因是白天的思路比較清楚, 有些很複雜的邏輯, 不太適合晚上寫
長久下來, 我發現可以把白天和晚上的事情分開, 白天比較不好意思寫外包, 因此有時候我會把外包比較困難的思路和架構
用草稿紙先寫好程式的草稿(比較簡化, 但主要是把邏輯理順). 到晚上把草稿紙帶回家, 直接在電腦前把草稿的概念用程式寫出來
比直接用電腦寫程式效果好多了. 其實這個方式你看很多國外程式開發團隊, 在開發系統前都會先用白報紙或是黑板, 把思維用像心智圖
的方式寫下來, 藉由這樣的方式, 就比較容易釐清絲路, 而非邊寫邊理
有人會問, 那寫文章好的寫程式會好嗎? 我覺得至少在程式架構的規畫面不會差, 但實際每個程式碼邏輯的產生, 還是跟天分有點關係
據說寫程式的邏輯思維跟抽象和三度空間思維有點像, 但又不像高等數學那麼抽象, 有一定邏輯能力再加上好的寫作技巧, 理論上應該寫程式能力不會太差
寫程式像蓋房子
寫程式架構很重要, 因為往往客戶經常會加需求或改變需求, 當你架構規劃的不錯, 後續的維護也比較容易
所以我寫程式, 特別是對複雜的程式, 我通常是把大架構, 畫面先拉好--- >架構就像蓋房子的鋼筋水泥
再把程式流程依功能分成很多段落, 但每個段落的細節內容, 我不會都先寫完, 而是先定義好容易理解段落名稱--- >段落就像每個房間的格局
如果是很複雜的程式, 你從開始到結束可能要花一個月以上, 先把架構完成就很重要, 因為一開始架構沒有先完成
有可能寫到後面才發現架構有問題, 你要大改架構, 此時就累了
等架構/段落名稱都好了, 再開始慢慢撰寫每個段落內的細部程式碼--- >細部程式碼就像你對每個房間的裝潢, 這鐵定是最後才做的
就像建商讓客戶去看一個房子, 一定是先讓客戶看空房, 只要架構好, 後面細部裝潢反而不是最關鍵的
要把複雜的內容簡化
我們一般看程式碼, 超過一頁的程式行, 就很吃力, 所以對於那種數千行的程式碼, 一定要將其模組化
簡單說就是分成很多段落, 每個段落點進去才是更細部的程式碼, 這有點像你看一本書, 一定先看題綱
如果提綱寫得好, 是有助於你快速瞭解這本書的內容, 如果是一本完全沒有提綱的書, 那讀者就累了
得整本書看完才有能力理解書在講啥
程式的模組化(分段)就跟書的題綱一樣, 好的分段有助於其他人快速了解你的程式
這會影響到這個程式未來的維護性, 一個維護性不好的程式, 對接手的IT一定是一份苦差事
搞不好你自己三個月後再看, 也忘了差不多了
寫程式像填空遊戲
如果我們寫程式是先完成架構和段落, 比如一支程式畫面拉好後, 把邏輯分成20個段落, 這個一開始就定義好
這樣之後你自己進來改程式, 就會變得簡單很多, 你可以設定目標, 今天解決三個段落的程式碼, 明天解決另外五個段落的程式碼
這樣子你不容易迷失在一堆程式碼內, 而且會很有成就感, 因為你將一個比較困難的長期目標, 分成很多個可以執行的小段落完成
你所要做的就是每天把這些空白的段落填上程式碼, 是不是很像填空遊戲呢?
同時已經分隔好的房間(段落), 能讓你在填空某個房間的時候, 不太需要去考慮其他房間的裝潢, 這樣能讓思路不會亂掉
白天做一些比較零碎的外包工作
這也是一種分工的概念, 由於我有個本薪工作, 不太好意思白天堂而皇之的寫外包, 但同時做正職和外包也是一種挑戰
所以我目前白天對外包的作法, 主要是1.寫寫草稿(這有助於我晚上快速的建立架構), 2.針對外包技術難題, 我則會在白天有空時
隨意地找找各類技術文章, 這樣晚上回去可以在寫程式時參考(因晚上在找心態上會比較累) 3.白天會抽空回覆外包一些信, 難的晚上做
如果不是很難, 盡量在白天八小時內回覆, 一方面也是給外包客戶即時回應的好印象
----------------------------------------------------------------
我的很多寫程式思路, 不是來自於寫程式, 而是過去幾年吸收一些其他領域的知識後, 自然轉化成寫程式的風格
因人世間很多道理是相通的, 我想我的徒弟, 在寫程式的時候, 絕對不會像我想的那麼多
這是由於思維格局差異造成, 所以目前都是我丟一些觀念, 他在後面跟隨的模式
但要他自己像我一樣主動學習這些思維模式, 並且內化, 受限於每個人的喜好和思維方式, 應該不是那麼容易