时间:2022-08-04 21:40来源:财神爷站
论一位程序员从初级到高级再到高管晋升过程中的代码演进之路,其中,有你的影子吗?
一位?Go?程序员的进化史
初级?Go?程序员
packagefac
funcFactorial(n?int)?int{
res?:=?1
fori?:=?1;?i?<=?n;?i++?{
res?*=?i
}
returnres
}
学会使用函数的?Go?程序员
packagefac
funcFactorial(n?int)?int{
ifn?==?0{
return1
}?else{
returnFactorial(n?-?1)?*?n
}
}
泛型?Go?程序员
packagefac
funcFactorial(n?interface{})?interface{}?{
v,?valid?:=?n.(?int)
if!valid?{
return0
}
res?:=?1
fori?:=?1;?i?<=?v;?i++?{
res?*=?i
}
returnres
}
学会了多线程优化的?Go?程序员
packagefac
import"sync"
funcFactorial(n?int)?int{
var(
left,?right?=?1,?1
wg?sync.WaitGroup
)
wg.Add(?2)
pivot?:=?n?/?2
gofunc{
fori?:=?1;?i?<?pivot;?i++?{
left?*=?i
}
wg.Done
}
gofunc{
fori?:=?pivot;?i?<=?n;?i++?{
right?*=?i
}
wg.Done
}
wg.Wait
returnleft?*?right
}
掌握了?Go?设计模式的程序员
packagefac
funcFactorial(n?int)?<-?chanint{
ch?:=?make(?chanint)
gofunc{
prev?:=?1
fori?:=?1;?i?<=?n;?i++?{
v?:=?prev?*?i
ch?<-?v
prev?=?v
}
close(ch)
}
returnch
}
学会使用成熟的解决方案修复?Go?语言缺点的程序员
packagefac
/**
*?@seehttps://en.wikipedia.org/wiki/Factorial
*/
type?IFactorial?interface{
CalculateFactorial?int
}
//?FactorialImpl?implements?IFactorial.
var_?IFactorial?=?(*FactorialImpl)(nil)
/**
*?Used?to?find?factorial?of?the?n.
*/
type?FactorialImpl?struct?{
/**
*?The?n.
*/
n?int
}
/**
*?Constructor?of?the?FactorialImpl.
*
*?@paramn?the?n.
*/
func?NewFactorial(n?int)?*FactorialImpl?{
return&FactorialImpl{
n:?n,
}
}
/**
*?Gets?the?n?to?use?in?factorial?function.
*
*?@returnint.
*/
func?(?this*FactorialImpl)?GetN?int?{
returnthis.n
}
/**
*?Sets?the?n?to?use?in?factorial?function.
*
*?@paramn?the?n.
*?@returnvoid.
*/
func?(?this*FactorialImpl)?SetN(n?int)?{
this.n?=?n
}
/**
*?Returns?factorial?of?the?n.
*
*?@todoremove?"if"?statement.?Maybe?we?should?use?a?factory?or?somthing?
*
*?@returnint.
*/
func?(?this*FactorialImpl)?CalculateFactorial?int?{
ifthis.n?==?0{
return1
}
n?:=?this.n
this.n?=?this.n?-?1
returnthis.CalculateFactorial?*?n
}
高级?Go?程序员
packagefac
//?Factorial?returns?n!.
funcFactorial(n?int)?int{
res?:=?1
fori?:=?1;?i?<=?n;?i++?{
res?*=?i
}
returnres
}
Go?语言之父?Rob?Pike
packagefac
//?Factorial?returns?n!.
funcFactorial(n?int)?int{
res?:=?1
fori?:=?1;?i?<=?n;?i++?{
res?*=?i
}
returnres
}
一个程序员的进化史
初中/高中时初入门
10PRINT"HELLO?WORLD"
20END
大一
program?Hello(?input,?output)
begin
writeln(?'Hello?World')
end.
大四
(defun?hello
(cons?'Hello?(list?'World))))
初入职场
#?include
voidmain(?void)
{
char*message[]?=?{?"Hello?",?"World"};
inti;
for(i?=?0;?i?<?2;?++i)
printf(?"%s",?message[i]);
printf(?"\n");
}
中级专家
#?include
#?include
classstring
{
private:
intsize;
char*ptr;
string:?size(?0),?ptr(?newchar[?1])?{?ptr[?0]?=?0;?}
string(?conststring&s)?:?size(s.size)
{
ptr?=?newchar[size?+?1];
strcpy(ptr,?s.ptr);
}
~?string
{
delete[]?ptr;
}
friendostream?&?operator<<(ostream?&,?conststring&);
string&?operator=(?constchar*);
};
ostream?&?operator<<(ostream?&stream,?conststring&s)
{
return(stream?<<?s.ptr);
}
string&?string::?operator=(?constchar*chrs)
{
if(?this!=?&chrs)
{
delete[]?ptr;
size?=?strlen(chrs);
ptr?=?newchar[size?+?1];
strcpy(ptr,?chrs);
}
return(*?this);
}
intmain
{
stringstr;
str?=?"Hello?World";
cout<<?str?<<?endl;
return(?0);
}
主程序员
[
uuid(?2573F8F4-CFEE-?101A-?9A9F-?00AA0034282?0)
]
library?LHello
{
//bring?in?the?master?library
importlib(?"actimp.tlb");
importlib(?"actexp.tlb");
//bring?in?myinterfaces
#include?"pshlo.idl"
[
uuid(?2573F8F5-CFEE-?101A-?9A9F-?00AA0034282?0)
]
cotype?THello
{
interface?IHello;
interface?IPersistFile;
};
};
[
exe,
uuid(?2573F89?0-CFEE-?101A-?9A9F-?00AA0034282?0)
]
module?CHelloLib
{
//some?code?related?header?files
importheader( );
importheader(? );
importheader( );
importheader(?"pshlo.h");
importheader(?"shlo.hxx");
importheader(?"mycls.hxx");
//needed?typelibs
importlib(?"actimp.tlb");
importlib(?"actexp.tlb");
importlib(?"thlo.tlb");
[
uuid(?2573F891-CFEE-?101A-?9A9F-?00AA0034282?0),
aggregatable
]
coclass?CHello
{
cotype?THello;
};
};
#include?"ipfix.hxx"
extern?HANDLE?hEvent;
class?CHello?:?public?CHelloBase
{
public:
IPFIX(CLSID_CHello);
CHello(IUnknown?*pUnk);
~CHello;
HRESULT?__stdcall?PrintSz(LPWSTR?pwszString);
private:
static?intcObjRef;
};
#include
#include
#include
#include
#include?"thlo.h"
#include?"pshlo.h"
#include?"shlo.hxx"
#include?"mycls.hxx"
intCHello::cObjRef?=?0;
CHello::CHello(IUnknown?*pUnk)?:?CHelloBase(pUnk)
{
cObjRef++;
return;
}
HRESULT?__stdcall?CHello::PrintSz(LPWSTR?pwszString)
{
printf(?"%ws
"?,?pwszString);
return(ResultFromScode(S_OK));
}
CHello::~CHello(void)
{
//whenthe?object?count?goes?to?zero,?stop?the?server
cObjRef--;
if(?cObjRef?==?0)
PulseEvent(hEvent);
return;
}
#include
#include
#include?"pshlo.h"
#include?"shlo.hxx"
#include?"mycls.hxx"
HANDLE?hEvent;
int_cdecl?main(
intargc,
char?*?argv[]
)?{
ULONG?ulRef;
DWORD?dwRegistration;
CHelloCF?*pCF?=?new?CHelloCF;
hEvent?=?CreateEvent(NULL,?FALSE,?FALSE,?NULL);
//Initialize?the?OLE?libraries
CoInitializeEx(NULL,?COINIT_MULTITHREADED);
CoRegisterClassObject(CLSID_CHello,?pCF,?CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE,?&dwRegistration);
//waiton?an?event?to?stop
WaitForSingleObject(hEvent,?INFINITE);
//revoke?andrelease?the?class?object
CoRevokeClassObject(dwRegistration);
ulRef?=?pCF->Release;
//Tell?OLE?we?are?going?away.
CoUninitialize;
return(?0);?}
extern?CLSID?CLSID_CHello;
extern?UUID?LIBID_CHelloLib;
CLSID?CLSID_CHello?=?{?/*?2573F891-CFEE-101A-9A9F-00AA00342820?*/
0x2573F891,
0xCFEE,
0x101A,
{?0x9A,?0x9F,?0x00,?0xAA,?0x00,?0x34,?0x28,?0x20}
};
UUID?LIBID_CHelloLib?=?{?/*?2573F890-CFEE-101A-9A9F-00AA00342820?*/
0x2573F890,
0xCFEE,
0x101A,
{?0x9A,?0x9F,?0x00,?0xAA,?0x00,?0x34,?0x28,?0x20}
};
#include
#include
#include
#include
#include
#include?"pshlo.h"
#include?"shlo.hxx"
#include?"clsid.h"
int_cdecl?main(
intargc,
char?*?argv[]
)?{
HRESULT?hRslt;
IHello?*pHello;
ULONG?ulCnt;
IMoniker?*?pmk;
WCHAR?wcsT[_MAX_PATH];
WCHAR?wcsPath[?2*?_MAX_PATH];
//get?object?path
wcsPath[?0]?=?'\0';
wcsT[?0]?=?'\0';
if(?argc?>?1)?{
mbstowcs(wcsPath,?argv[?1],?strlen(argv[?1])?+?1);
wcsupr(wcsPath);
}
else{
fprintf(stderr,?"Object?path?must?be?specified\n");
return(?1);
}
//?get?printstring
if(argc?>?2)
mbstowcs(wcsT,?argv[?2],?strlen(argv[?2])?+?1);
else
wcscpy(wcsT,?L?"Hello?World");
printf(?"Linking?to?object?%ws\n",?wcsPath);
printf(?"Text?String?%ws\n",?wcsT);
//Initialize?the?OLE?libraries
hRslt?=?CoInitializeEx(NULL,?COINIT_MULTITHREADED);
if(SUCCEEDED(hRslt))?{
hRslt?=?CreateFileMoniker(wcsPath,?&pmk);
if(SUCCEEDED(hRslt))
hRslt?=?BindMoniker(pmk,?0,?IID_IHello,?(void?**)&pHello);
if(SUCCEEDED(hRslt))?{
//printa?string?out
pHello->PrintSz(wcsT);
Sleep(?2000);
ulCnt?=?pHello->Release;
}
else
printf(?"Failure?to?connect,?status:?%lx",?hRslt);
//Tell?OLE?we?are?going?away.
CoUninitialize;
}
return(?0);
}
初级黑客
#!/usr/local/bin/perl
$msg=?"Hello,?world.\n";
if($#ARGV?>=?0)?{
while(?defined($arg=?shift(@ARGV)))?{
$outfilename?=?$arg;
open(FILE,?">".?$outfilename)?||?die"Can't?write?$arg:?$!\n";
print(FILE?$msg);
close(FILE)?||?die"Can't?close?$arg:?$!\n";
}
}?else{
print($msg);
}
1;
中级黑客
#?include
#?defineS?"Hello,?World\n"
main{?exit(?printf(S)?==?strlen(S)???0:?1);}
资深黑客
%?cc?-o?a.?out~/src/misc/hw/hw.c
%?a.?out
大师级黑客
%echo"Hello,?world."
初级经理
10PRINT"HELLO?WORLD"
20END
中级经理
mail-s?"Hello,?world."bob?@b12
Bob,?could?you?please?write?me?a?program?that?prints?"Hello,?world."?
I?need?it?by?tomorrow.
^D
高级经理
%?zmail?jim
I?need?a?"Hello,?world."program?bythisafternoon.
高管
%letter
letter:?Command?not?found.
To:?^X?^F?^C
%helpmail
help:?Command?not?found.
%damn!
!:?Event?unrecognized
%logout