程序猿

言程序

魯蛇的人生


吳欣展

pcbill

https://www.facebook.com/pcbill

學歷


重考大學

暨大資工系

台大資訊網路與多媒體研究所

學歷重要嗎?



只是職涯入門票


黃敬群 (Jserv)

唐鳳 (Audrey)

王景弘 (Tonyq)

課程



作業 = 修練

程序猿的養成靠修羅般的試煉

實作  實作 再實作

論文




利用無線射頻辨識技術輔助之物品位置追蹤系統
http://mll.csie.ntu.edu.tw/papers/thesis_shinjan_2006.pdf


困難




程序猿養成




Learning Curve 




Snippet

Program

Software

System


演進


低階

高階

結構化

物件導向

函數式(Functional)

種類




編譯式


直譯式

投資選擇



函式庫


社群


語法

基本邏輯流程控制


Branch

if
switch


Loop

while
if

橫向理解程式之美


for loop



String[] collection = new String[]{ "v1", "v2" };

for (int i = 0; i < collection.length; i++) {
    System.out.println(collection[i]);
}


JAVA 1.5

// List<String> collection = new ArrayList<>();
List<String> collection = Arrays.asList( "v1", "v2" );


for (String element: collection) {
    System.out.println(element);
}


for (Iterator<String> i = collection.iterator(); i.hasNext();) {
    String item = i.next();
    // do something ....
}


Python
for num in range(x):
    print num

for char in string:
    print char
for element in collection: print element


JAVA 8

List<String> collection = Arrays.asList("v1", "v2");

collection.forEach(System.out::println);

Collection Stream


JAVASCRIPT

var collection = ["v1", "v2"];

collection.forEach(new function(element) {
console.log(element); });

數列相加

for solution

Functional Way
    sum[] = 0
    sum(x:xs) = x + sum xs


sum[1, 2, 3]
= 1 + sum[2, 3]
= 1 + (2 + sum[3])
= 1 + (2 + (3 + sum[]))
= 1 + (2 + (3 + 0))
= 6
遞迴 / stack

業界經驗


中研院(準公務機關)

力可科技(小資本遊戲小公司)

摩鉅科技(大資本遊戲中公司)

台灣大哥大(非資訊典型大公司)

緯創資通(大公司)

中研院



中央研究院國家基因型鑑定中心生物資訊軟體工程師

第一份

準公務機關

生物資訊 / web application 工具
Totibase 
http://totibase.ngc.sinica.edu.tw/totibase/index.html

開發模式



Pair Programming

TDD

工具


Eclipse IDE

Unit Testing

CI Server

Jira

Subversion

流程


研究人員訪談確認需求

pair 開發

文件/程式版控

CI automation

釋出/部署

力可科技



小資本遊戲小公司

朋友公司 - 社群認識

相處融洽

嘎姆擂台/cubie
http://tw.gamelet.com/games.do
http://cubie.com/

開發模式




Ticket Assignment

Pair programming

工具


Eclipse IDE

Flash platform

CI Server
Hudson / Jenkins

Trac

Subversion

流程


同事成員開會需求發想

pair 開發

文件/程式版控

釋出/部署

摩鉅科技



大資本遊戲中公司

需要三方專長高度合作

專案為主體

Junkfoodian
http://www.gamebase.com.tw/forum/608/topic/91062707/

開發模式



即時


計畫趕不上變化, 變化趕不上長官一句話


雲端

工具



Eclipse IDE

Linux Command

Subversion

流程


老闆指定

開發

文件/程式版控

釋出/部署

台灣大哥大



大公司人員眾多

跨部門合作

小組主體

myVideo / myBook
http://www.myvideo.net.tw
http://mybook.taiwanmobile.com

開發模式



不停開會

需求-確認

重維運

看重程序

工具



Eclipse IDE

Linux Command

email

Subversion

流程


加值同仁需求

PM 確認需求

開發

文件/程式版控

編譯釋出

維運同仁部署

緯創資通



大公司高雄分部

專案為主體

自有軟體開發流程

MDM、台北酷課雲

開發模式



遵循開發流程

積極引用軟體開發工具

Ticket Assignment

重視專案開發計畫

工具


Intellij / Eclipse

Java platform

CI Server
Jenkins / Sonarqube

Gitlab issue system

Git

Gradle / Maven

流程


PM 確認需求

RD 開發

文件/程式版控

編譯釋出 / 發布

維運同仁部署

比較



開發工具

專案管理

資源管理

開發工具


Eclipse IDE
coding/debug/deployment

Intellij 

Vim

專案管理


需求確定 / 時程規劃

Email

issue/ticket system
Trac, Gitlab issue, Jira, Redmine

資源管理


源碼 / 文件

Subversion

Git

Gradle / Maven repository

Code Review



Code Review 指引 - OpenFoundry
http://www.openfoundry.org/tw/tech-column/9225-code-review-

Bug 越晚修復,成本會越高



種類



會議
投影/公開解說


工具
  1. issue/ticket system
  2. diff
  3. 靜態分析 - findbug
  4. 撰寫測試程式

軟體開發修煉建議




團隊

個人

團隊




就業

人與人

建議



使用源碼版控

運用 issue/ticket 系統

Cl

Gradle / Manven repository

引進測試流程

個人




求學階段

解題

資訊社群

建議1/2


加強英文


Vim


Script
bash / python / perl 


建議2/2


Coding Style
增進閱讀性, 降低維護成本


參與社群/年會
COSCUP/ OSDC/ MOPCOM / KALUG / TOSUG / g0v


組隊競賽
Hackthon

深入測試



單元測試


TDD / BDD

重構



不新增功能


馬上實行單元測試

業界軟體開發模式

By pcbill

業界軟體開發模式

  • 1,090