时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

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

评论 2 条评论

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

与阿里云容器服务 ACK 发行版的深度对话第一弹:如何借助 sealer 实现快速构建 & 部署

阿里巴巴云原生

阿里云 容器 云原生 ACK Distro sealer

架构训练营 第三模块作业-外包学生管理系统详细架构设计文档

Geek_16d2b8

架构训练营5期

Metasploit 如何使用Exploits(漏洞)

喀拉峻

网络安全

外包学生管理系统的架构文档

张逃逃

学生管理系统架构

Geek_f3e842

「架构实战营」

Go 语言快速入门指南:Go 模板介绍

宇宙之一粟

Go 语言 2月月更

IntelliJ IDEA Ultimate 配置 PHP 拦截器

HoneyMoose

如何在Linux解压缩(打开)Gz 文件?

Ethereal

uni-app 模拟机调试环境搭建

编程三昧

uni-app 前端 开发工具 2月月更

APK修改神器:插桩工具 DexInjector

字节跳动终端技术

android 字节跳动 编译 APK 火山引擎MARS

案例实践|Apache Pulsar 在移动云智能运维平台的实践

Apache Pulsar

开源 架构 云原生 Apache Pulsar Pulsar Summit Asia 2021

Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3)

刘悦的技术博客

前端 动画 SVG Python3 svg图

MASA Framework - DDD设计(2)

MASA技术团队

C# .net .net core 框架 Framework

Linux基础操作:如何在 Linux 中复制文件夹?

Ethereal

外包学生管理系统架构设计文档

风中奇缘

架构实战课 「架构实战营」

学生管理系统详细架构设计文档

晨亮

「架构实战营」

无人驾驶全家桶:机场“人货场”的改造之路

脑极体

视频回顾|Pulsar Summit Asia 2021,案例、运维、生态干货不断

Apache Pulsar

开源 云原生 Apache Pulsar 社区 Pulsar Summit Asia 2021

外包学生管理系统架构设计文档

李大虾

#架构实战营 「架构实战营」

安全领域权限模型

alibeer

千万级学生管理系统考试试卷存储方案

唐尤华

架构实战营

docker的DNS配置说明

Geek_f24c45

Docker Kubernetes

Netty入门 -- 什么是Netty?

Bug终结者

Java Netty 网络

剑指Offer——全方位、多角度掌握企业级开发框架J2EE

No Silver Bullet

jdk8 offer 2月月更 J2EE

Apache APISIX 集成 Google Cloud Logging

API7.ai 技术团队

Google 网关 APISIX Google Cloud

Apache APISIX 集成 Kafka 实现高效率实时日志监控

API7.ai 技术团队

kafka 开源 日志 网关 Apache APISIX

Blinn-Phong反射模型

CRMEB

Linux 示例中的 apt 命令大全,建议收藏!

Ethereal

从中心走向边缘——深度解析云原生边缘计算落地痛点

阿里巴巴云原生

阿里云 Kubernetes 云原生 边缘计算

来看看字节跳动内部的数据血缘用例与设计

字节跳动数据平台

大数据 字节跳动 数据血缘

Linux系统数据备份不再头疼,Rdiff-backup来帮忙!

Ethereal

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