写点什么

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

  • 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:565156

评论 2 条评论

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

全球首创!网易伏羲提出135种人脸表情划分标准,荣登IEEE官网

网易伏羲

人工智能 IEEE 网易伏羲

【Django | 安全防护】防止XSS跨站脚本攻击

计算机魔术师

8月月更

软件测试 | 测试开发 | 专项测试技术初识Hook

测吧(北京)科技有限公司

软件测试 hook

万节点规模云服务的 SRE 能力建设

阿里巴巴云原生

阿里云 云原生 SRE 可观测

企业钱包数字资产管理工具API开放对接技术

薇電13242772558

数字资产

软件测试 | 测试开发 | APK 逆向工程 - 解析 apk 基本信息和方法调用图

测吧(北京)科技有限公司

软件测试 测试 APK

软件测试 | 测试开发 | RPC接口测试技术-Tcp 协议的接口测试

测吧(北京)科技有限公司

TCP/IP

阿里P8大牛手写《亿级流量并发手册》GitHub下载榜飙升至第一

退休的汤姆

Java 程序员 面试 社招 秋招

华为云咨询携手商业伙伴探索咨询业态升级

宇宙之一粟

数字化转型 8月月更

MASA Stack 第四期社区例会

MASA技术团队

.net 云原生 dapr blazor MASA

阿里P8架构师汇总了史上101个最牛逼的Java技术点

钟奕礼

Java 编程 程序员 架构 java面试

软件测试 | 测试开发 | MockServer 服务框架设计

测吧(北京)科技有限公司

软件测试

书单来了 | 京东 8.31 图书品类日,这些经典书 & 新书不容错过!

图灵教育

程序员 计算机 图书节

Java:将Excel转换为XPS

Geek_249eec

Java Excel XPS

软件测试 | 测试开发 | 文未有福利 | 接口自动化你不懂?听HttpRunner的作者怎么说

测吧(北京)科技有限公司

HttpRunner

单测增量代码覆盖率统计方案

转转技术团队

测试 测试覆盖率统计工具

书单来了 | 京东 8.31 图书品类日,这些经典书 & 新书不容错过!

图灵社区

程序员 计算机 图书节

为什么很多企业一边大规模裁员,又一边招聘?

C++后台开发

后台开发 裁员 音视频开发 互联网大厂 C++开发

华为初面+综合面试(Java技术面)附上面试题

钟奕礼

Java 编程 程序员 java面试 后端架构

Spring源码分析(六)FactoryBean 接口解析

石臻臻的杂货铺

spring 源码 8月月更

APP上架因收集个人信息问题被拒绝该怎么解决?

YonBuilder低代码开发平台

程序员 技术 App 信息安全

MobTech 短信验证Android端 API

MobTech袤博科技

android

【Django | 开发】中间件配置(记录响应耗时日志)

计算机魔术师

8月月更

MobTech 短信验证iOS端SDK API

MobTech袤博科技

ios sdk

Spring源码解析(五)Spring 加载bean 依赖注入

石臻臻的杂货铺

spring 源码 8月月更

开源一夏 |为什么BigDecimal比较大小一定要用compareTo

六月的雨在InfoQ

开源 equals BigDecimal 8月月更 compareTo

微服务日志监控的挑战及应对方案

穿过生命散发芬芳

日志监控 8月月更

送你个低代码福利,错过要再等一年

华为云开发者联盟

云计算 福利 低代码 华为云

面试 | 百度测试开发岗位面试题目回顾

测吧(北京)科技有限公司

面试‘

表弟面试阿里又挂了,我强烈推荐程序员必备阿里面试的300+面试题(含答案解析)给他后,苦肝两月,成功上岸蚂蚁金服

钟奕礼

Java 编程 程序员 java面试 技术宅

如何让你的代码更优雅?

六月的雨在InfoQ

性能 代码优化 优雅 日常开发 8月月更

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