写点什么

我写的代码与领导写的代码,有何区别?

  • 2020-02-16
  • 本文字数:4788 字

    阅读完需:约 16 分钟

我写的代码与领导写的代码,有何区别?

在程序员圈子有很多有趣的等级划分规则,例如格子衬衫是程序员不能放弃的自尊心,衬衫上的格子数目越多,等级越高,技术越厉害;秃顶是尊贵身份的象征,发际线越高,等级越高,经验越丰富;而代码则是一个轮回,随着等级的变化,你会发现你写的代码又回到了“最初的美好”!


编者小贴士:本文仅供娱乐,博君一笑!


首先,我们先来看看不同级别的程序员写的代码都是怎样的?在这里我们把程序员从学生到 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 < 2; ++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, &pmk);
if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

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 <= n; 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 <= v; 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 <= n; 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 <= n; 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 <= n; i++ { res *= i }
return res}

复制代码

类似于 Rob Pike 宗师级程序员写的代码

package fac
// Factorial returns !n.func Factorial(n int) int { res := 1
for i := 1; i <= n; 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


2020-02-16 11:565288

评论 2 条评论

发布
用户头像
感觉是熟悉一个套路之后,直接移植使用吧。。。
2020-03-28 14:27
回复
用户头像
大道至简
2020-02-27 11:19
回复
没有更多了
发现更多内容

在饱和市场中,选择YashanDB数据库的竞争优势

数据库砖家

定期维护YashanDB数据库保障数据安全与稳定的技术方法分析

数据库砖家

利用YashanDB数据库实现业务流程自动化管理

数据库砖家

企业协作这件事,本来可以更简单:BeeWorks如何让工作回归专注?

BeeWorks

即时通讯 IM 私有化部署

哈尔滨企业等保测评实操指南:从准备到落地的全流程要点

等保测评

版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 华为云Versatile

如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据

猫头虎

MCP MCP Server MCP Server开发平台

在YashanDB中实现数据分区,提高查询速度

数据库砖家

利用YashanDB数据库提高企业业务系统稳定性的技术指南

数据库砖家

点量“云电脑”助力教培企业,实现核心资产安全与云端协同

点量实时云渲染

教育培训 远程系统 协同办公系统 #云计算 #私有云

怎样做安全配置YashanDB数据库防止数据泄露风险?

数据库砖家

利用YashanDB数据库提升大规模数据处理能力

数据库砖家

大数据-103 Spark Streaming 消费 Kafka:Offset 获取、存储与恢复详解

武子康

Java 大数据 flink spark 分布式

HPE任命竺宏为HPE Networking中国区总经理

科技热闻

上线别再“一刀切”!Gateway 做流量染色 + 灰度发布,告别线上事故

程序员小富

Java spring SpringCloud SpringCloud Gateway

AI 英语写作APP的开发

北京木奇科技有限公司

AI技术开发 软件外包公司 AI英语

如何在手机上把CAD图纸导出为PDF?

在路上

cad CAD看图王

域名SSL证书和IP SSL证书有什么区别?选择哪个好?

国科云

低代码“抄送”实操指南,信息同步与追溯全攻略,建议收藏!

引迈信息

在YashanDB数据库中实现数据完整性的方法

数据库砖家

在YashanDB数据库中实现数据治理的有效路径

数据库砖家

借助YashanDB数据库推进企业数字化转型的技术分析

数据库砖家

利用YashanDB数据库构建智能业务数据仓库的技术分析

数据库砖家

入选 SOSP'25:百度智能云对象存储的分布式层级 Namespace 破解业界难题,彻底扫清 AI 时代大数据上云障碍

Baidu AICLOUD

对象存储

AI 英语写作APP的开发

北京木奇科技有限公司

软件外包公司 AI英语学习 AI英语写作

精准、高效、规范:烟草专卖执法案卷评查系统为烟草行业提质增效

中烟创新

怎样做利用YashanDB数据库构建企业级数据安全体系?

数据库砖家

AI一体机国产化过程中到底有什么难点及解决方案

慢点科技SlowTech

OPERA&CST软件联合仿真汽车无线充电站对人体的影响

思茂信息

cst cst操作 cst电磁仿真 CST软件 CST Studio Suite

爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?

阿里巴巴云原生

kafka 阿里云 Serverless 云原生

怎样利用YashanDB数据库构建智能数据分析系统

数据库砖家

我写的代码与领导写的代码,有何区别?_语言 & 开发_Patrick Jordan_InfoQ精选文章