全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2020-03-04_「转」我写的代码与领导写的代码,有何区别?

您的位置:首页 >> 新闻 >> 行业资讯

我写的代码与领导写的代码,有何区别? 作者 | Patrick Jordan、SuperPaintman 策划 | 田晓旭 在程序员圈子有很多有趣的等级划分规则,例如格子衬衫是程序员不能放弃的自尊心,衬衫上的格子数目越多,等级越高,技术越厉害;秃顶是尊贵身份的象征,发际线越高,等级越高,经验越丰富;而代码则是一个轮回,随着等级的变化,你会发现你写的代码又回到了“最初的美好”!(编者小贴士:本文仅供娱乐,博君一笑) 首先,我们先来看看不同级别的程序员写的代码都是怎样的?在这里我们把程序员从学生到 CEO 共分成了 14 个等级,快来看看,你和你领导写的代码,差在哪里? 初高中同学写的代码 10 PRINT "HELLO WORLD" 20 END 大学一年级同学写的代码 program Hello(input, output) begin writeln('Hello World') end. 大学四年级同学写的代码 (defun hello (print (cons 'Hello (list 'World)))) 初入职场菜鸟程序员写的代码 #include stdio.h void main(void) { char *message[] = {"Hello ", "World"}; int i; for(i = 0; i ++i) printf("%s", message[i]); printf("\n"); } 工作多年的资深程序员写的代码 #include iostream.h #include string.h class string { private: int size; char *ptr; string() : size(0), ptr(new char[1]) { ptr[0] = 0; } string(const string &s) : size(s.size) { ptr = new char[size + 1]; strcpy(ptr, s.ptr); } ~string() { delete [] ptr; } friend ostream &operator (ostream &, const string string &operator=(const char *); }; ostream &operator(ostream &stream, const string &s) { return(stream s.ptr); } string &string::operator=(const char *chrs) { if (this != &chrs) { delete [] ptr; size = strlen(chrs); ptr = new char[size + 1]; strcpy(ptr, chrs); } return(*this); } int main() { string str; str = "Hello World"; cout str endl; return(0); } 骨灰级程序员写的代码 [ uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820) ] library LHello { // bring in the master library importlib("actimp.tlb"); importlib("actexp.tlb"); // bring in my interfaces #include "pshlo.idl" [ uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820) ] cotype THello { interface IHello; interface IPersistFile; }; }; [ exe, uuid(2573F890-CFEE-101A-9A9F-00AA00342820) ] module CHelloLib { // some code related header files importheader(windows.h importheader(ole2.h importheader(except.hxx 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-00AA00342820), 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 int cObjRef; }; #include windows.h #include ole2.h #include stdio.h #include stdlib.h #include "thlo.h" #include "pshlo.h" #include "shlo.hxx" #include "mycls.hxx" int CHello::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) { // when the object count goes to zero, stop the server cObjRef--; if( cObjRef == 0 ) PulseEvent(hEvent); return; } #include windows.h #include ole2.h #include "pshlo.h" #include "shlo.hxx" #include "mycls.hxx" HANDLE hEvent; int _cdecl main( int argc, 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); // wait on an event to stop WaitForSingleObject(hEvent, INFINITE); // revoke and release 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 windows.h #include ole2.h #include stdlib.h #include string.h #include stdio.h #include "pshlo.h" #include "shlo.hxx" #include "clsid.h" int _cdecl main( int argc, 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 print string 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, if(SUCCEEDED(hRslt)) hRslt = BindMoniker(pmk, 0, IID_IHello, (void **) if(SUCCEEDED(hRslt)) { // print a 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 stdio.h #define S "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." 新任的初级经理写的代码 10 PRINT "HELLO WORLD" 20 END 中级经理写的代码 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 by this afternoon. 公司 CEO 写的代码 % letter letter: Command not found. % mail To: ^X ^F ^C % help mail help: Command not found. % damn! !: Event unrecognized % logout 看完不同级别程序员的代码之后,你是不是也有所触动呢?上面的例子可能有点宽泛,接下来我们就集中在 Go 语言,看看不同级别的程序员都是怎么样写代码的? 初级 Go 语言程序员写的代码 package fac func Factorial(n int) int { res := 1 for i := 1; i i++ { res *= i } return res } 功能性 Go 语言程序员写的代码 package fac func Factorial(n int) int { if n == 0 { return 1 } else { return Factorial(n - 1) * n } } 通用 Go 语言程序员写的代码 package fac func Factorial(n interface{}) interface{} { v, valid := n.(int) if !valid { return 0 } res := 1 for i := 1; i i++ { res *= i } return res } 多线程优化的 Go 语言程序员写的代码 package fac import "sync" func Factorial(n int) int { var ( left, right = 1, 1 wg sync.WaitGroup ) wg.Add(2) pivot := n / 2 go func() { for i := 1; i pivot; i++ { left *= i } wg.Done() }() go func() { for i := pivot; i i++ { right *= i } wg.Done() }() wg.Wait() return left * right } 利用 Go 设计模式的程序员写的代码 package fac func Factorial(n int) -chan int { ch := make(chan int) go func() { prev := 1 for i := 1; i i++ { v := prev * i ch - v prev = v } close(ch) }() return ch } 利用成熟的 Go 解决方案写的代码 package fac /** * @see https://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. * * @param n the n. */ func NewFactorial(n int) *FactorialImpl { return &FactorialImpl{ n: n, } } /** * Gets the n to use in factorial function. * * @return int. */ func (this *FactorialImpl) GetN() int { return this.n } /** * Sets the n to use in factorial function. * * @param n the n. * @return void. */ func (this *FactorialImpl) SetN(n int) { this.n = n } /** * Returns factorial of the n. * * @todo remove "if" statement. Maybe we should use a factory or somthing? * * @return int. */ func (this *FactorialImpl) CalculateFactorial() int { if this.n == 0 { return 1 } n := this.n this.n = this.n - 1 return this.CalculateFactorial() * n } 高级 Go 语言程序员写的代码 package fac // Factorial returns !n. func Factorial(n int) int { res := 1 for i := 1; i i++ { res *= i } return res } 类似于 Rob Pike 宗师级程序员写的代码 package fac // Factorial returns !n. func Factorial(n int) int { res := 1 for i := 1; i i++ { res *= i } return res } 参考链接: https://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html https://github.com/SuperPaintman/the-evolution-of-a-go-programmer#the-evolution-of-a-go-programmer 你也「在看」吗??? 阅读原文

上一篇:2019-11-06_爱上Python的五个理由 下一篇:2022-05-01_涉嫌非法汇款,小米遭印度政府扣押7.25亿美元;联想高管2021年降薪约70%;北京健康宝遭受境外网络攻击 | AI 一周资讯

TAG标签:

15
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价