180 likes | 198 Views
How to be a good engineer ?. Phantom Weng, Openfind RD VP. Engineering. Programmers No engineering, just do it Engineers Balance between ideal world and real world Solving problems with disciplined and systematic approaches Scientists/Researchers Looking for a perfect model. 工業標準.
E N D
How to be a good engineer ? Phantom Weng, Openfind RD VP
Engineering • Programmers • No engineering, just do it • Engineers • Balance between ideal world and real world • Solving problems with disciplined and systematic approaches • Scientists/Researchers • Looking for a perfect model
工業標準 main() { char s[10]; strcpy(s,”abc”); addExt(s); printf(“%s”,s); } void addExt(char *s) { strcat(s,”.dat”); }
工業標準 #define SUCCESS 0 #define ERR_PARAM -1 main() { int ret = 0; char s[10]; strcpy(s,”abc”); ret = addExt(s,10); if (ret != SUCCESS) // Error Handling else printf(“%s”,s”); } int addExt(char *s) { if (s == NULL) return ERR_PARAM; strcat(s,”.dat”); return SUCCESS; }
工業標準 #define SUCCESS 0 #define ERR_PARAM -1 #define ERR_BUF_SIZE -2 main() { int ret = 0; char s[10]; strcpy(s,”abc”); ret = addExt(s,10); if (ret != SUCCESS) // Error Handling else printf(“%s”,s”); } int addExt(char *s,int nLen) { if (s == NULL) return ERR_PARAM; if (strlen(s)+strlen(“.dat”) >= nLen) return ERR_BUF_SIZE; strcat(s,”.dat”); return SUCCESS; }
工業標準 #define SUCCESS 0 #define ERR_PARAM -1 #define ERR_BUF_SIZE -2 #define LEN 10 #define EXT “.dat” main() { int ret = 0; char s[LEN]; strcpy(s,”abc”); ret = addExt(s,LEN); if (ret != SUCCESS) // Error Handling else printf(“%s”,s”); } int addExt(char *s,int nLen) { if (s == NULL) return ERR_PARAM; if (strlen(s)+strlen(EXT) >= nLen) return ERR_BUF_SIZE; strcat(s,EXT); return SUCCESS; }
工業標準 #define SUCCESS 0 #define ERR_PARAM -1 #define ERR_BUF_SIZE -2 #define LEN 10 #define EXT “.dat” main() { int ret = 0; char s[LEN]; strncpy(s,”abc”,LEN); s[LEN-1] = ‘\0’; ret = addExt(s,LEN); if (ret != SUCCESS) // Error Handling else printf(“%s”,s”); } int addExt(char *s,int nLen) { if (s == NULL) return ERR_PARAM; if (strlen(s)+strlen(EXT) >= nLen) return ERR_BUF_SIZE; strncat(s,EXT,nLen-strlen(s)-1); s[nLen-1] = ‘\0’; return SUCCESS; }
工業標準 #define SUCCESS 0 #define ERR_BASE 0 #define ERR_PARAM ERR_BASE - 1 #define ERR_BUF_SIZE ERR_BASE - 2 #define LEN 10 #define EXT “.dat”
Learn from our or other’s prior failures. • Why projects fail? • Poor scheduling • Poor planning • Poor management • Bad organization structure • Uncontrolled requirements • Unmanaged changes • Are these reasons technical?
Planning a software project • Everyone knows we need to have a plan, but why we don’t have it • Release pressure and tight schedule • We only have time to testing and coding, anything else is unnecessary and can be skipped • But, actually, having a sound plan is the only way to meet the aggressive schedule.
Duties for an Engineer • Feasibility study • Technical design with alternatives • Schedule estimation and meet it • Robustness and quality • Your work can be reproduced • Your work can be maintained
Bad Schedule Estimation • 過分樂觀 • 義和團式的估計方式 • 沒考慮到 integration effort • 沒考慮到 testing and debugging effort • Perfect Man-month partition
Time Communication Effort Work load Human resource The Man-Month
Time requirementsSuggested by Fred P. Brooks, Jr. • Planning • Coding • Component test and early system test • System test with all component in hand 1/3 1/6 1/4 1/4
How to estimate schedule • Do not optimism. Always keep buffer. • More details you consider in the design stage, more accuracy about your estimated schedule. • Break large module into small modules. • Do not forget the effort of integration. • Use intermediate milestone to control. • Learn from mistakes.
Design • Review by others • Must have alternatives • Design more • Well-document • Invite related people to join design • Start thinking about integration at this stage • Control bugs • UI samples
5 4 3 1 2 溝通方式 • 主動溝通是每個人的責任 • 無法溝通的時候不是放著不管,而是 escalate • 最後總會有人做決定。做決定的人負責任。 • 決定一但完成,所有人不管原來同不同意,必須共同遵守並確實執行。
Thank You 機會永遠屬於主動的人