How to be a good engineer ?

18
How to be a good engineer ? Phantom Weng, Openfind RD VP

description

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. 工業標準. - PowerPoint PPT Presentation

Transcript of How to be a good engineer ?

Page 1: How to be a good engineer ?

How to be a good engineer ?

Phantom Weng, Openfind RD VP

Page 2: How to be a good engineer ?

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

Page 3: How to be a good engineer ?

工業標準main()

{

char s[10];

strcpy(s,”abc”);

addExt(s);

printf(“%s”,s);

}

void addExt(char *s)

{

strcat(s,”.dat”);

}

Page 4: How to be a good engineer ?

工業標準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

Page 5: How to be a good engineer ?

工業標準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

Page 6: How to be a good engineer ?

工業標準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”

Page 7: How to be a good engineer ?

工業標準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_PARAM -1

#define ERR_BUF_SIZE -2

#define LEN 10

#define EXT “.dat”

Page 8: How to be a good engineer ?

工業標準#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”

Page 9: How to be a good engineer ?

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?

Page 10: How to be a good engineer ?

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.

Page 11: How to be a good engineer ?

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

Page 12: How to be a good engineer ?

Bad Schedule Estimation

• 過分樂觀• 義和團式的估計方式 • 沒考慮到 integration effort

• 沒考慮到 testing and debugging effort

• Perfect Man-month partition

Page 13: How to be a good engineer ?

The Man-Month

Communication

Effort

Work load

Human resource

Time

Page 14: How to be a good engineer ?

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

Page 15: How to be a good engineer ?

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.

Page 16: How to be a good engineer ?

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

Page 17: How to be a good engineer ?

1 2

4 3

5

•主動溝通是每個人的責任•無法溝通的時候不是放著不管,而是 escalate

•最後總會有人做決定。做決定的人負責任。•決定一但完成,所有人不管原來同不同意,必須共同遵守並確實執行。

溝通方式

Page 18: How to be a good engineer ?

Thank You機會永遠屬於主動的人