程序员

优秀的程序员,应选择明智但并不聪明的代码方式

南笙酒味 提交于 2020-01-15 04:43:39
作为一名拥有15年开发经验的工程师,最早让我开始“懂事儿”的,是简洁明了的一句话: 出色的代码,是表达能力更强的(expressive),而不是令人印象深刻的(impressive)。 我记得当时自己对此感到很疑惑,表达能力更强的和令人印象深刻的,他们在本质上有什么区别呢? 实际上,表达能力更强意味着清晰、明确、具体。因此,一段表达能力较好的代码需要能解决一个特定的问题。在为了写这样一段代码所付出的时间与努力的背后,是非常清晰、明确、具体的目标,而这段代码也必须能够真正地实现这个目标。 而令人印象深刻的,则表示要在写代码的过程中留下明显的个人标志或印记。一段自身结构复杂,夹杂着多种深奥算法的代码,也许可以为你吸引来他人的关注、赞叹与掌声,在充分满足你的虚荣心的同时,也有可能转化为那个在未来接替你继续维护代码的工程师的满腔怒火。如果他正好是一个脾气暴躁且知道你住在什么地方的人,那么接下来会发生的事情恐怕就不会那么让你感到高兴了。 这就是程序员应该选择明智而不是聪明的原因。一个精明的开发工程师需要具备那种能够预见自己的哪些行为在什么情况下会带来什么后果的能力,并能对「自己写的是什么样的代码」、「自己为什么要这么写」,以及「这些代码在未来可能会有怎样的演变」这三个问题有着清楚的认知。简单来说,精明的工程师不会去做“亡羊补牢”式地救火开发工作,他们在写代码时坚信应当一劳永逸地解决问题。 而

【干货】程序员常访问的国外技术交流网站汇总

ε祈祈猫儿з 提交于 2020-01-15 03:53:39
摘要:技术人员经常会在各种技术交流社区游逛,大家互相学习、交流、分享、帮助。互联网拉近了地球人的距离,让全世界的技术人员可以聚集在一起分享交流。当然因为多方面原因,通常最新最权威的技术知识传到国内存在一定“时差”。本文将给大家分享技术人员经常访问的国外技术交流社区网站。 搞技术的,如果想更高提升自身技能水平,英语这关是逃不了的。 ——某位不愿透露姓名的四级loser 技术人员经常会在各种技术交流社区游逛,大家互相学习、交流、分享、帮助。互联网拉近了地球人的距离,让全世界的技术人员可以聚集在一起分享交流。当然因为多方面原因,通常最新最权威的技术知识传到国内存在一定“时差”。本文将给大家分享技术人员经常访问的国外技术交流社区网站。 1.stackoverflow https://stackoverflow.com/ 众所周知,stackoverflow可以说是全球最为活跃的程序员技术问答交流社区。 2.Google+ https://plus.google.com/ Google+是Google公司推出的社交网站,虽不是专为编程技术人员打造,但在这里你可以搜索并加入到很多技术社群,结交群内好友。 3.DZone https://dzone.com/ DZone.com是世界上最大的在线社区之一,全世界的开发技术人员通过共享知识来了解最新的技术趋势,了解新技术,方法和最佳实践。 4

程序员和产品经理值得收藏的业务学习工具网站

耗尽温柔 提交于 2020-01-14 08:47:29
声明: 以下网站都是我用来看一些业务讲解的,纯属提供参考。 当然这些网站的业务知识,肯定穿插着他们的产品,不过核心内容都是通的,只是大家的表现形式不同,简单来说就是 范围层相同,表现层求异。 1. 起微学院 支持搜索 ,建议搜索时,用 “业务名” +空格 +“什么” 的形式 2.泛微 它里面有个观点文章,里面有些OA知识的普及。还有个管理智库。这里可能知识点少,不过可以了解OA相关的功能模块。 支持搜索 3.泛普软件 这个网站就是 项目管理 相关的软件,里面有 功能模块部分 4.用友知识库 用友作为ERP老厂商,有自己的ERP贴吧,但是里面有些都是问答帖,没有知识介绍帖。不过ERP相关业务知识,还是可以去看些ERP相关的书籍。 支持搜索 5.Udesk 国内对标Zendesk的一家客服系统,当然还有其他的客服系统,可自行百度。 支持搜索 6.GrowingIO 做数据分析的一家公司,除了数据分析的知识点,还有些产品业务思路,给我的第一感觉就是,用数据说明问题(可能这公司就为了解决部分产品的使用问题吧) 如果让你注册才能看视频,打开浏览器控制台,然后拿video的地址 7.语雀 阿里的在线知识库一类的,可以在【发现】里 进行搜索 2.业务图偷师 1.人人都是产品经理 首选地,很多业务脑图、流程图在此都能找到。 2.Proccess On 偶然间发现process on的模板商城

高效程序员的七个习惯

强颜欢笑 提交于 2020-01-14 06:35:10
软件工程师花费大量时间通过练习leet code问题和完善简历来获得更好的面试通过可能。一旦他们最终被谷歌、亚马逊或其他公司录用,他们可能会发现:过去用来得到这份工作的技能与他们日常工作中需要的技能并不匹配。 我们的团队受到 TechLead 创建的高效程序员七项技能的启发。我们想提供我们自己对这个话题的看法。以下是我们总结的高效程序员的七项技能。 学习如何阅读别人的代码 除了你,每个人写的代码都是垃圾?实际上,能够在别人的代码之上继续工作是一项有多重好处的伟大技能。 不管以前工程师的代码是多么混乱或者考虑不周,您仍然需要能够扩展它。毕竟,这是你的工作。同时,这个“以前的工程师”也可能是一年前的你。 这项技能在两个方面对你有益。第一,能够阅读他人的代码是一个了解什么是糟糕设计的好机会。当你浏览别人的代码时,你会知道什么是有效的,什么是无效的。更重要的是,您可以了解什么类型的代码对于其他工程师来说是容易扩展的,以及什么类型的代码难以扩展。 你需要确保在阅读他人代码时尽可能多地找出问题所在。这样,其他的工程师就会知道你是一个多么优秀的工程师。确保您提出了关于可维护代码和良好注释的重要性观点。这进一步显示了你在编程领域的优势。 您的代码应该设计得非常好,不需要任何文档。事实上,如果你是一个好的程序员,你不需要任何文档来说明你的任何代码。这只是浪费时间,更需要你花时间的是编码和开会。

成为伟大程序员的 10 个要点

拥有回忆 提交于 2020-01-14 06:15:59
更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 最近我在接受采访时被问到我关于成为一名伟大 程序员 的见解。这是一个有趣的问题,我认为我们都可以是伟大的程序员,无论我们的天赋如何,如果我们遵循一些规则的话——我相信——这应该是常识。实际上,这些规则并不只适用于编程领域,也适合任何专业。 当然,这10个要点中的所有内容并不都是完全正儿八经的,有些事情只是我的看法,你的情况可能会有所不同,所以如果出现矛盾的话,不要耿耿于怀。 这些要点是: 1.学习如何提问 提问题的程序员基本上有这些类型: 完美主义者:特别是在询问关于某些开源工具的问题时,他们可能已经通过代码进行了调试,发现了问题的真正原因。但是即使没有发现真正原因,完美主义者也会讲明白这个问题,重现步骤,建议可能行得通的解决方法,或者甚至是,建议可能行得通的修复途径。事实上,完美主义者没有问题。只有答案。 话匣子:这个人实际上没有问问题。他们表明他们的想法,有时会到处放置浮夸的问号。对于问题,他们给出的是他们的思路流程,如果你揣着答案等的话,他们要么自己找到了答案,要么在多封电子邮件之后才问出真正的问题。“哦,对了,我发现这个需求是完全错误的,我用一些其他的技术解决了这个问题。实际上,我完全改变了库。”呵呵。只希望他们别再问问题了。 笨蛋:代码在这。我不知道哪里出错了?请帮帮我。

02程序员修炼之道

僤鯓⒐⒋嵵緔 提交于 2020-01-14 06:03:03
曳光弹和原型在互联网行业应用最为广泛,并正在迅速向整个软件行业扩展。但对于原型和曳光弹的含义经常容易搞混。这里就简单介绍一下。简单一句话:原型是用过即扔的代码,曳光弹则是提供完整的体系,并在这个基础上继续发展并最终得到产品的方法。 用类似曳光弹的方法能更快捷的令你正中目标,一个注重实效的程序员往往更加喜欢使用曳光弹。曳光开发和永不会结束的理念是一样的:总有改动需要完成,总有功能需要增加,这是一个动态的,渐进的过程,而另一种传统的做法是确定项目的需求,划分模块,完成子配件,最后完成配件的安装测试,将成品交予客户,这种方式繁重而复杂,如果需求改动则可能改到天翻地覆。   曳光开发的许多优点:   1、使用户能够及早的看到实际产品,客户会即使告诉你现在的工作距离他们的预期有多远。   2、开发者构建了一个他们能在其中工作的结构。   3、有了可用于演示的东西,而且更能感受到工作的进度情况。 来源: https://www.cnblogs.com/sonofdemon/p/11071620.html

C/C++程序内存的分配

梦想的初衷 提交于 2020-01-13 23:15:52
转自: https://blog.csdn.net/cherrydreamsover/article/details/81627855 转载出处: 学习笔记 一、一个C/C++编译的程序占用内存分为以下几个部分: 栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。 堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。 全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。 常量区(文字常量区):存放常量字符串,程序结束后有系统释放。 代码区:存放函数体(类成员函数和全局区)的二进制代码。 二、三种内存分配方式 从静态存储区分配 内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 在栈上创建 在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会自动被释放。 栈内存分配运算内置于处理器的指令集,效率高,但是分配的内存容量有限。 从堆上分配 亦称为动态内存分配。 程序在运行的时候使用malloc或者new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。

优秀的程序员,应选择明智但并不聪明的代码方式

。_饼干妹妹 提交于 2020-01-13 22:10:41
作为一名拥有15年开发经验的工程师,最早让我开始“懂事儿”的,是简洁明了的一句话: 出色的代码,是表达能力更强的(expressive),而不是令人印象深刻的(impressive)。 我记得当时自己对此感到很疑惑,表达能力更强的和令人印象深刻的,他们在本质上有什么区别呢? 实际上,表达能力更强意味着清晰、明确、具体。因此,一段表达能力较好的代码需要能解决一个特定的问题。在为了写这样一段代码所付出的时间与努力的背后,是非常清晰、明确、具体的目标,而这段代码也必须能够真正地实现这个目标。 而令人印象深刻的,则表示要在写代码的过程中留下明显的个人标志或印记。一段自身结构复杂,夹杂着多种深奥算法的代码,也许可以为你吸引来他人的关注、赞叹与掌声,在充分满足你的虚荣心的同时,也有可能转化为那个在未来接替你继续维护代码的工程师的满腔怒火。如果他正好是一个脾气暴躁且知道你住在什么地方的人,那么接下来会发生的事情恐怕就不会那么让你感到高兴了。 这就是程序员应该选择明智而不是聪明的原因。一个精明的开发工程师需要具备那种能够预见自己的哪些行为在什么情况下会带来什么后果的能力,并能对「自己写的是什么样的代码」、「自己为什么要这么写」,以及「这些代码在未来可能会有怎样的演变」这三个问题有着清楚的认知。简单来说,精明的工程师不会去做“亡羊补牢”式地救火开发工作,他们在写代码时坚信应当一劳永逸地解决问题。 而

一个退休程序员让百年数学难题逼近理论极限

我只是一个虾纸丫 提交于 2020-01-13 17:15:38
试想一下,如果你的裤子破了好几个洞,每个洞形状各异,但是宽度都不超过1厘米。 该如何设计一个通用的补丁,能够把所有的洞都补上呢? 一个退休程序员让百年数学难题逼近理论极限 这个问题在数学上叫做:万有覆盖问题(universal covering problem)。 已经让数学家思考了一百年。 乍一听上去,这像是一个很简单的问题。 但是稍微想一想,似乎又不那么简单。 比如一个边长为1的等腰三角形,和一个直径为1 的圆形,两者的直径都为 1。 但是,这个三角形就不能被圆形覆盖。 一个退休程序员让百年数学难题逼近理论极限 而最近,一个退休程序员,用高中方法取得了最新进展。 为什么这么难? 这个难题的的提出者,法国著名数学家:勒贝格(Henri Léon Lebesgue)。 一个退休程序员让百年数学难题逼近理论极限 △Henri Léon Lebesgue 他提出了勒贝格积分,拓宽了积分学的研究范围。 在1914时,他给好朋友Julius Pál(也是数学家)写信时提了一个问题: 在一个平面上,找一个最小区域,让它可以覆盖直径不超过1个单位的面积? 直径不超过1个单位的任意形状,就是一个封闭曲线的边缘上,最远两点的距离不超过1个单位。 这个问题最难的部分是: 无法穷举所有直径为1的形状到底长什么样子。 直径为1的形状千千万,到底用哪种万能补丁才能全部覆盖它们呢?

如何成为一个很厉害的工程师

爷,独闯天下 提交于 2020-01-13 17:04:53
有很多人,包括我也困惑的一个问题,就是如何成为一个很厉害的工程师。类似的问题也有很多,如何成为一个很厉害的运营,如何成为一个很厉害的产品,或者跨行业的,如何成为一个很厉害的医生,如何成为一个很厉害的作家等等。 如何成为一个很厉害的工程师,我想是我的毕生追求,至少目前是。 榜样的力量 一个很好的方式,就是以业界成功或者知名的人来作为目标。从阿里来说,就有很多很厉害的人物,比如多隆,“他从阿里的第一位程序员,做到了阿里的合伙人,是神一样的人物”、“阿里扫地僧”、“一群工程师几天无法排查的问题,多隆一眼定位问题根源”。 比如吴翰清,“轻松瘫痪阿里内网,防御16亿次黑客攻击”、“20 岁入职阿里,马云 500 万聘请的天才少年”。类似这样的阿里人,多如牛毛,以上两个已经在互联网顺手拈来的神话般的人物。从阿里内部看,可能就更多了,无数的P10和P11都有各自的神话故事,也是每个技术人榜样。 不可复制的神话 在学校起,就涌现了很多互联网的天才人物,10岁的黑客,百万年薪的阿里星天才等。让人的感觉,此类人物天赋异禀,是常人无法企及的。比如多隆,一眼能看出的问题,我等屌丝程序员首先,要拿出电脑,打印错误日志上下文,拉上上下游同学,DEBUG一个星期,可能勉强才能定位:这尼玛,原来少传了一个入参。 因此除了望洋兴叹,我不知道自己能做什么。 不可复制的年代机遇 有些神话可能注定是神话,成功的人很多