论一位程序员从初级到高级再到高管晋升过程中的代码演进之路,其中,有你的影子吗?
一位 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