非著名程序员
❶ 顶级的程序员是怎么样的
所谓的高手在人间,低调才是真正的高调,顶级的一般都是默默无闻的。
公司有个技术总监,每次跟他聊天总是觉得我错过了他这样的方式,人们都很亲切,总是说“我要学”,但可怕的是无论他跟他说什么“哦,这我知道,我们可以交换一个共同的学习”。不管什么。
他很会照顾我,由于我不是科班出身的,他和我交流尽量不用术语,比如依赖倒置,他和我讲的时候告诉我原理以及如何实现,并不会特意提这个名词。
之后我再看他们写的代码,无论什么情况都能扛得住,并能给出正确的错误处理。而我的代码,简短,有力,漂亮,满是奇技淫巧,然而就是不耐操。
我的经历所认识到的优秀程序员就是这样:博学,谦虚,积极向上,良师益友,还有代码十分健壮。
❷ 顶级的程序员是怎么样的
1. 勇于去研究你不懂的代码
一般人都不愿意去研究自己不曾接触过的代码,很多人都没有尝试就放弃了。如果你经常去研究你没有接触过的代码,你就会越来越熟悉不同的代码结构和设计模式。现在人们很容易就接触到优秀的开源代码资源,你可以很方便的就下载下来做一些改动或者调试,去研究为什么代码可以这么写。
除了代码之外,很多人对于陌生的工作内容也会感到恐惧。每次换工作的时候,你可能都会遇到新公司的工作内容和以前工作的内容不一样的情况,以至于刚开始的时候工作效率没有以前那么高。很多人甚至觉得,他们是不是骗了面试官。
其实,大家都是在学习的过程中。在一个陌生的领域,没有人从一开始就是大神。如果你想变得越来越好,无论是写代码,与人沟通或者其它的技能,都是需要投入时间去学习的。
2. 精通代码调试(debug)
很多人在写代码的过程中,经常会有的一个问题就是:为什么我写出来的代码不能运行?为什么运行的结果不是我想要的?
几乎所有的程序员写代码都不是一遍就能写好的。但是顶尖的程序员非常快的就明白自己代码的问题可能是什么。这是一个很重要的能力,但是偏偏学校里不教,面试的时候考官也不经常提及。
那么怎么去调试代码呢?其实核心就是以下几个方法:
不妨先猜测一下到底发生了什么。
假设你的猜测是对的,想想你的猜测会导致程序有什么结果。
试着观察这些结果有没有异常的地方。
如果你没有发现异样,那么说明你的猜测就是对的。
如果你发现了异样,那么说明你的猜测是错的,接下来换一个猜测试试。
对于顶尖程序员来说,这个过程在脑海中就是电光火石的一瞬间。只要你解决的问题足够多,你做出来的猜测就会越准确。
至于如何发现异样?你就需要有一套自己的工具或者方法论了。最简单的就是在代码里输出日志来判断。但是这是比较笨的办法,你需要去接触一些高级的工具或者直接带有Debug功能的编辑器。
3. 重视能够节约时间的工具
最近打败人类的AlphaGo每天可以进行上百万局的下棋训练,我们人类一万个小时的训练却需要10年之久。也就是说,电脑运行几分钟,可能就等于人类工作好几年。
曾经在Facebook担任技术总监的Bobby Johnson描述过,高效率的程序员都把时间花在制作工具上。
很多人也认为工具是很重要的,但是他们并没有花时间去制作、整合自己的工具。但是,Jonson团队最出色的员工耗费了他们1/3的时间在工具制作上,这些工具可以用来发布代码,监控系统,以及能让他们花更少的时间去做更多事情。
总之,不要花时间去做机器可以代替你去做的事情。
4. 优化你的迭代速度
假设你要花12秒钟去搜索某个函数是在哪里定义的。再假设你每天做这个动作60次,那么你每天就要花12分钟去搜索函数定义。
如果你用一个好一点的编辑器,每次找到函数定义只要2秒钟,那么你每天就会节约10分钟。每年你就可以节约40个小时。
如果你能找到3个这样的场景去优化一下,那么你每年可以节约一个月的时间。想想这一个月你可以做多少有意义的事情。
再假如你在调试一个App的bug的时候,改完一次代码都需要重启一下App,然后点击4、5次才能看到bug有没有改好。那么你是不是可以先花几分钟设置以下,让App一启动就转到显示Bug的页面呢?
千万不要小看这些琐碎的细节,改善它们的回报是巨大。
5. 系统性的思考方式
当你在写代码的时候,你很容易就认为只要你按照需求实现了指定的功能,你的代码就写完了。但是这其实只是冰山一角。任何没有发布到生产环境的代码都不会产生任何价值。
如果想写出真正有影响力的代码,你需要从整个系统去理解你的工作:
你的代码和其他人写的代码在功能上是什么关系?
你有没有好好测试你的代码?或者其他人是否很容易测试你的代码?
为了部署你的代码,线上生产环境的代码是不是需要改动?
新的代码会不会影响到已经运行的代码?
在新的功能下,你的目标用户的行为是不是你期望的?
你的代码有没有产生商业上的影响?
❸ 低级程序员和高级程序员的区别
低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样,
低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西,
你都可以大胆的忽略.
所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug 是不可避免的,
有千万种理由可以导致 bug, 但他们可以在设计和逻辑上保证(追求)滴水不漏, 并用逻辑的百分之百准确性还减少代码 bug. 没错,
严谨的逻辑能力是高级程序员区别于低级程序员的最主要原因.
可以举一个简单常见例子: 网络购票终端的开发. 当然, 比低级程序员还低级的程序员做不出来. 我们先看看低级程序员是怎么做:
order = Db::new_order();
ret = Network::place_order(order);
if(ret == TRUE){
order.finish();
}else{
order.cancel();
}
你看到的没错, 这段代码逻辑清晰, 一般 90% 的情况都能正常工作, 有的甚至能达到 99%, 在某些特定的时间段, 这样的系统 100% 能正常工作(几乎是完美的系统).
你可能发现了问题: 网络是不可靠的, 网络请求可能发出去了, 也可能没发出去; 对方可能收到了, 也可能没收到; 响应可能由对方发出去了, 也可能没发出去; 你可能收到了响应, 也可能没收到.
但是, 低级的程序员会这样解释: 我用的是 TCP 协议, "TCP 是一种可靠的传输协议", 哈! 可笑的照本宣科. 这种低级程序员,
不仅在于他们写出了逻辑上不完备的系统, 而且还恶劣地引经据典来做错误的辩护. 但他们引用的经典是不合时宜的(不能支撑他们的结论).
正确的做法应该是假设上面的每一行代码都可能中断执行, 然后进行相应的对策. 正如狭义上的网络协议其实是广义上的交互协议, 我们可能把 TCP/IP 协议上的许多思想和机制应用到系统间的交互上来.
简单来讲, 可以加上就是重试(超时重传)和对账(请求确认). 所以, 逻辑上更准确的代码应该是这样:
Process_0{
order = Db::new_order();
}
Process_1{
order = Db::find_new_order();
ret = Network::query_order_result(order);
if(ret == NOT_FOUND){
ret = Network::place_order(order);
if(ret == TRUE){
order.finish();
}else{
order.cancel();
}
}
}
Process_0 和 Process_1 是相互独立的处理逻辑.
Process_0 即处理用户交互, 接受订单.
Process_1 请求服务提供商进行对账. 进行采购下单(补单), 更新订单状态.
上面的代码逻辑实现了重试(超时重传), 对账(请求确认). 但上面的代码在逻辑上还不是 100% 准确的, 例如, 如果对方系统误报呢? 但其它的异常情况可以根据实际情况来忽略. 如果你发现这段代码还有重要的逻辑上缺陷, 欢迎告诉我.
记住, 低级程序员和高级程序员的区别在于逻辑和抽象.
❹ 西方的程序员眼里,东方的程序员是什么样的
最近,在国外著名的stackexchange网站上出现了一个有趣的问题,有人问:西方的程序员眼里,东方的程序员是什么样的?
他描述道:
世界的东方(印度/中国/菲律宾)是西方(美国/欧洲)的主要软件外包服务提供者。
你是否有过与这种离岸外包团队合作的经历?如果有,感觉如何?
你对这些来自东方的程序员有没有一些总结性的看法和观点(比如:他们是否合作,是否能按时提交代码,写出的程序是否有质量?)。依据是什么?
读者的回复很踊跃,其中一个被顶的最高的回答是关于印度人的,回答中他说一个印度分包商给他们开发了一个组件,他认为这是他接触过的最恐怖的程序,里面最大的一个文件体积超过600KB,大概有3万多行。他向上天乞求希望自己永远不需要去维护这样的代码。这位答复者说他在印度生活了3个月,发现东方人和西方人在文化上的差异很大,印度人很勤奋,但常常却不能把事情做对。印度人里有个根深蒂固的文化,就是从不说no,他说即使你到副食品商店里要求买一条毯子,店主也会说“是,先生,稍等一会”,然后派一个小孩到外面商店把东西买回来。这虽然在生意上是好的做法,但未必适用于做软件开发。
另外一个回复是关于俄国人的,同样,他觉得这些俄国人写的代码顶多当作原型来使用,最终都会被丢掉,不能用。
我找了很久,终于在帖子的最底部发现一个关于中国程序员的回复,不过内容非常的有趣:
到现在,我在中国已经待了2年多一点时间了(我是个加拿大人),跟中国的开发人员一起共事你会感到非常的奇特。我敢说上面这些关于东方的程序员的总结都是正确的,至少对于中国人是这样的。我遇到的/一起共事的大多数开发人员基本属于这种情况:
*缺少上进心和创造性。这里我并不想说他们很差劲或愚蠢。也许更可能是一种文化。在历史上他们就有一种官本位和崇尚权威的传统。于是他们对来自“上面”的糟糕的设计从不提出疑议。同样,他们更多的是关注技术技巧,而忽略业务领域知识。我费力九牛二虎之力教他们模式和各种抽象概念,直到他们能应用这些东西到他们手头的任务中。然而,过不了多久,就像是决堤的洪水,他们竟然肆无忌惮的挑战权威,至少在技术层面上是这样的,我可不想弄得签证被撤销。;-)
*磨擦前面这个问题说过,但我要强调一下。这也许是最重要的一个问题,是产生中国开发人员跟这里的海外同事(这里是加拿大人)共事时产生紧张关系的原因。通常,我在这里共事的西方人会特意的夸大跟东方人共事时东方人的一些不好的方面。我这些加拿大同事对人友好但在代码审查时极其的苛刻。如果发现这些中国程序员一个小失误或没有使用好的编写方法,他们就是发脾气、大呼小叫。但当他们自己被礼貌的要求也按照这种要求完成他们自己的任务时,他们也会发脾气、大呼小叫。
*牺牲中国人并不以介意使用蹩脚的二手器械。我坐坏了三把椅子后才终于要了一把稍微舒服一点的椅子。可是当我坐上这把较好的椅子后,突然感觉不是很好,因为看到这些中国人仍然坐在好像是中世纪那么原始的椅子上。然而,等我访问了这家公司的总部后,我发现这里的程序员的一张桌子就有我们4~6个人的团队的占地面积那么大,更别提他们的椅子了!
在起初,他们编写的程序并不是很好。这当然是文化上产生的裂痕,但这也是开始时糟糕的系统设计产生的很陡的学习曲线造成的。但你们知道吗,两年之后,这个系统中一些最优秀的模块都是出自中国公司。于是这就更加明显的导致了双方程序员的磨擦加剧…
坦白的说,这几年走过来不容易,以个人经验判断事情的趋势,我认为对这个问题的看法是正确的。
做为一个中国人,对于西方人对我们的看法和观点,我觉得不需要去急着找他们的论点漏洞进行反驳。你可感到到他们对东方人的不满是一种普遍弥漫的气氛,俗话说,苍蝇不叮无缝的蛋,我们应该还是先从自身找问题,有则改之,无则加勉。
❺ 国外程序员编程水平真的不如中国程序员吗
世界上任何一个程序员都必须知道黑客等级,黑客等级是世界上权威的编程竞赛组织(或软件工程师编程水平测试平台)。大约三个月前,hacker rank再次组织并发起了一系列的编程竞赛,涉及全球数十万程序员。
此外,中国百昌汇首席技术官朱瑞卿表示:“我个人觉得,仅仅通过黑客排名的数据,就可以看出中国工程师在培训和积累方面已经排在世界第一位,缺乏说服力的有中国背景的工程师比其他国家的工程师强得多。”数学逻辑的。但同时,负面影响是我们在数理逻辑上花太多时间,缺乏探索性技能训练中国工程师更注重单打独斗。一个人或一个小团队可以完成非常困难的任务,并且完成得很好。”
❻ NASA 顶级程序员是如何编程的
你好:美国国家航空航天局(NASA)开发人员的工作是编程界最具挑战性的工作之一。 他们编写代码并开发关键任务应用程序,安全是他们主要关注的重点。
在这种情况下,制定严谨的编码准则并遵循,对于他们来说十分重要。这些规则涵盖了软件开发的各个方面,如应该如何编写软件,应该使用哪些语言特性等等。
尽管很难就一个编码标准达成共识,NASA 的 JPL 首席科学家 Gerard J. Holzmann 还是制定了一套名为“发展安全关键代码的十大规则”的代码准则,由所有工作人员共同遵循。
由于 JPL 的工作内容与 C 语言相关,因此本指南主要关注用 C 编程语言编写的代码。但也可以灵活运用到其他语言上。
NASA 的十大编码准则如下:
1、简化控制流程:使用尽可能精简的控制流程构造编写程序 – 不要使用 setjmp 或 longjmp 构造、goto 语句,以及直接或间接的递归调用。
2、为循环使用固定次数上限:所有的循环必须有一个固定的上限。 必须可以被某个检测工具静态证实,该循环不能达到预置的迭代上限值。如果该上限值不能被静态证实,那么可以认为违背该原则。
3、不要在初始化完成后进行动态内存分配。
4、不使用冗长的函数:如果标准格式为一个语句一行、一个声明一行,那么函数的长度应在一张纸的范围内,即每个函数的代码行不能超过 60。
5、低断言密度:代码中断言的密度平均低至每个函数 2 个断言。断言被用于检测在实际执行中的异常情况。断言必须没有副作用,并应该定义为布尔测试。当一个断言失败时,应该执行一个明确的恢复操作,例如,把错误情况返回给执行该断言失败的函数调用者。对于静态工具来说,任何能被静态工具证实其永远不会失败或永远不能触发的断言违反了该规则(例如,通过增加无用的 assert(true) 语句是不可能满足这个规则的)。
6、以最小范围级别声明数据对象:该原则同时也是数据隐蔽(Data hiding)的基本原则。所有数据对象均必须以尽可能最小的范围级别进行声明。
7、检查参数和返回值:应在每次调用函数后检查非空函数的返回值,并在每个函数内部检查参数的有效性。
8、限制预处理程序的使用:预处理器的使用仅受包含头文件和简单的宏定义的限制。符号拼接、可变参数列表(省略号)和递归宏调用不被允许。所有的宏必须扩展为完整的语法单元。通常不建议使用条件编译指令,但也不总是能够避免每次在代码中这样做的时候必须有基于工具的检查器进行标记,并有充足的理由。
9、限制指针的使用:具体来说,不允许有超过一级的解除指针引用。解除指针引用操作不可隐藏在宏定义或类型声明中。不允许使用函数指针。
10、编译所有代码:从开发工作第一天开始时,在编译器开启最高级别警告选项的条件下对代码进行编译。在此设置之下,代码必须零警告编译通过。代码必须通过源代码静态分析工具,每天检查一次以上,且零警告通过。
请参考!
❼ 你知道世界上有哪些著名的程序员吗
麦咖啡最牛逼
❽ 作为一个java程序员经常上的网站
1、深度开源:一个成立于2005年的开源技术社区,致力于开源项目的推广与开源价值内发掘,java程序员在这里可以分享容开源项目相关资讯、文档、资源,以及任何任何技术编程相关的问题及知识;
CSDN社区
❾ 怎样能成为顶级的程序员
我是程序员。实习过两家公司,说说我的观察。
第一家公司有个技术总监,每次跟他聊天总是只感觉我差一点儿就能超过他的那个样子,人很和蔼,总是会说『我也要学一下』,然而恐怖之处在于无论和他聊什么他都有那种『哦,这个我了解过一些,我们可以交流一下,共同学习』。无论什么。
他很会照顾我,由于我不是科班出身的,他和我交流尽量不用术语,比如依赖倒置,他和我讲的时候告诉我原理以及如何实现,并不会特意提这个名词。
我和他聊过一些东西,从应用层到ASCII码,从前端到GC,无所不知。而且他总是特别谦虚。
最后我走的时候说实话是很不舍得的。他拉着我说了很多,告诉我以后应该怎么做,要多了解整个项目架构,不能只是做自己的工作。要学会帮助其他同事,解决他们的问题。要稳住自己。
我离开之后才发现,那家公司是多么好。
第二家公司是个大公司。
我的lead,七零后。他周末在家还在学习,晚上会补作业到12点。我见过他写lazyload,也见过他给iOS讲性能优化。当然,还有非常高超的领导力。
他们写的代码并没有上面说的特别优雅,我见过的,而且要说代码的好看程度,比我写得规范漂亮的应该也不多。他们有一个共同特点是很繁琐,非常的繁琐。我一度很不喜欢这种代码,觉得很丑,而且很复杂。我问过以后终于发现和他们的差距,那叫做代码的健壮性。
之后我再看他们写的代码,无论什么情况都能扛得住,并能给出正确的错误处理。而我的代码,简短,有力,漂亮,满是奇技淫巧,然而就是不耐操。
我的经历所认识到的优秀程序员就是这样:博学,谦虚,积极向上,良师益友,还有代码十分健壮。
❿ 为什么程序员特别容易出高智商低情商的人以及愤青
注意,此文的背景是西方国家,所提的程序员也是西方国家的人,和中国的程序员无关。 首先纠正一个偏见,就是说纯粹科学家都是书呆子,其实不然,20世纪早期的著名物理学家个个都是高富帅(就是贵族精神,真正的高富帅,不是土豪,土著),例如薛定谔有几个情妇,一点也不见得书呆子,主要是媒体宣传得多霍金,导致普通人都认为物理学家就是那样的。数学家虽然比物理学家们沉默的多,但是也很少做出一些出格的不经思考的问题。至于其他种类的科学家,因为实验设备的限制,不可能完全自己闭门研究,因此必定要和别人交往。而纯粹程序员(特别是学院派的)却有很多低情商(此处指不懂社会)愤青,学院里除了社会科学就是软件工程会出愤青了 但是在同样要求严谨思维的计算机软件行业,却出现了很多高智商低情商的人,他们的编程水平属于世界一流,但是很多行为要么就是反社会,要么就是不经思考。此处的程序员指对软件进行深入研究者,就像纯粹科学家那样,不包括比尔盖茨等成功企业家。很多著名程序员都是黑客出身,专门入侵美国政府网站,成为麻烦份子。更多的学院派程序员是极左的愤青,例如理查德斯托曼(GNU创始人),推行所谓的“自由软件”,实质上是“软件共产主义”,问题是,他自己开源就行,却要讨伐任何不开源的软件,一厢情愿地以为所有人都能够像他那样“为了兴趣”而编程。而且他的很多行为都已经成了行为艺术了,为了彰显他的理念故意做一些愚蠢的行为,例如乔布斯死了他就踩一脚说活该,颇有韦斯特波罗教派的作风,还有卖“龙芯”电脑,说这个电脑连BIOS都是开源的(讽刺的是,做硬件的都知道龙芯的内幕,难道他认为抄袭等于自由?)而且他宣扬的自由软件意识形态,本意是鼓励更多人参与开发软件(或者学习软件源代码,应用到工作中,实质上就是通过这玩意儿赚钱),但是恰好会毁掉软件业,因为软件业的发展事实上都是靠利益推动的。 还有前段时间(大概几个月前,以前的豆瓣账号写过那篇文章的)把MIT弄得天翻地覆的黑客,被抓了就干脆自杀,以及最近的斯诺登,硬要往更不自由的地方逃(他是间谍我无话说。如果不是间谍,那么肯定相信了古巴社会主义那套童话了,不过也有很多愤青被朝鲜、古巴的几栋样板楼房就骗倒了,如果他逃往古巴,那就出不来了,那些死要面子的独裁者肯定不想让幻想破灭的他向全世界宣扬国内的丑闻吧,不要也用不着没收旅游者的手机了) 至于普通程序员(和黑客),更是不懂时事的愤青,轻易被利用,例如匿名者组织,基本上都被恐怖分子利用来进行破坏了,他们宣扬网络自由,总是去攻击民主国家的政府和公司网站,但是却从来不敢动一下中国的大防火墙,或者亚非拉各种独裁国家的网络。还有本来认为可以防止政府操纵经济而创立的比特币,结果成了国际犯罪的绿色通道(交易查不到,而且多一种方法洗钱,找个高智商低情商程序员来接盘比特币,和传销一样,找个傻逼下家接盘)基本上用一句概括就是这些程序员活在自己一厢情愿的童话里,做事不考虑后果。 如果他们仅仅是“相信能够创造更美好的世界”就算了,但是他们很多本质上是自大的(越来越觉得他们心理上还是十四岁),例如ubuntu社区的态度,一点也不ubuntu(自己查ubuntu的本意),倒是充满了美国高中生的“小社团”(clique)特色。