作为程序员能力提升总结什么才算是真正的编程能力

成为优秀程序员的八大招!
本文将讲述8种方式帮助你如何从一名普通的程序员进阶成为一名伟大的程序员,让我们就从此时此刻开始提高自己的开发技能吧。是时候开始认真考虑一下如何升级你的开发技术了。让我们来认真地学习一下吧。给自己设定一个提高开发技术的目标很容易,但是“想成为一名伟大的程序员”却不是一个容易实现的目标。首先,说“我想变得更好”,是建立在你认识到“更好”的样子基础之上。另外,有太多的人追求进步而不知道如何去实现。因此,让我分享八个可实际操作的指导方针,你可以把它们作为提高编程技能的流程图。这些智慧都是伴随着计算机35年的发展沉淀下来的。1.时刻提醒自己:学习学习某件事的第一步是承认你不知道。这听起来很正常,但经验丰富的程序员还记得要真正让自己承认这一点需要花多长时间。很多计算机科学专业的学生毕业的时候,都有一种很傲慢的态度,就是“我知道最好的”,但其实这只是一种虚张声势,他们不知道从哪里来的自信,就好像他们什么都知道,并且需要向每一位新同事强烈的证明这一点。换句话说:你所谓的“我知道我在做什么!”这种态度会妨碍你学习新的东西。2.不要试图证明自己是正确的要想成为优秀的人,你必须学会吃一堑长一智。但是千万小心,经验也可能教会我们重复一些不良行为,甚至也教会我们养成一些不好的习惯。我们都遇到过有8年经验的程序员。对于他们来说,同样的经历,重复了8次。为了避免这种综合症,看看你做的每一种事情,然后问自己:“我怎样才能让它变得更好?”新手(以及很多经验丰富的开发人员)会看着他们自己写的代码,欣赏它的奇妙。他们编写测试来证明他们写的代码是可以运行的,而不是试图让它运行失败。真正优秀的程序员会积极地寻找他们的错误在哪里,因为他们知道最终用户会发现这些遗漏的bug。3.“代码可以运行了”这个目标不是终点,而是起点是的,你的第一步总是想写出质量很高的代码,而且代码上面都写满了注释。但是一般的程序员在这一点上就退出,然后继续下一件事。但是一旦“完成”就停止了这种思想就像是拍一张快照,然后期待它是一件艺术品一样。伟大的程序员都知道第一次迭代只是一次迭代。它运行起来了,恭喜你!但你的工作还有很多。现在,使它变的更好。其实这个过程就是在定义“更好”的含义。让它变得更快能有什么价值吗?可重用更高有什么好处吗?更可靠吗?答案随着每个应用程序的不同而不同,但是过程都是一样的。4.写三次代码好的程序员目标是写出可以运行的软件就可以了。伟大的程序员写出来的软件目标是运行得非常好。通过一次编写这种情况几乎不可能发生。最好的软件通常被写三次:首先,编写软件以向你自己(或客户)证明解决方案是可行的。其他人可能没有意识到这只是一个概念验证,但你确实这么做了。第二次可以让它正常地运行。第三次你能够让它平稳的运行。当你看到最优秀的开发人员的工作时,这种级别的工作可能并不明显。他们所做的一切看起来都很出色,但你没有看到的是,即使是开发界的大腕儿,也可能在向其他人展示他们的软件之前就已经抛弃了第一个和第二个版本。抛弃之前的代码并开始编写另一个版本是一种强大的方式,可以将“更好地”融入到您的个人工作流程中。如果没有其他情况,通过“写三次代码”可以告诉你解决问题的方法有多少种。而且它可以防止你陷入停滞不前的状态。5.阅读大量的代码你可能希望我能够引导这个建议,实际上,这也是提高编程技能的最常见和最有价值的建议。阅读他人代码的原因也很重要,只是不是很明显而已。当阅读其他人的代码时,你会看到其他人是如何解决编程问题的。但不要把它当成是文学作品,而是把它当成一种教训和一种挑战。想要变得更好,问问自己:那块代码我该怎么写呢?既然你已经看到了别人的解决方案,那你会有什么思路呢?我学到了什么?我如何将这种技术应用到我过去编写的代码中?(“我从来没有想过可以使用递归下降处理那块的逻辑”)。我如何改进这段代码?如果这是一个开源项目,你对自己的解决方案更有信心,那就去做吧!以作者的风格编写代码。练习这个可以帮助你进入作者的思维,这可以提高你的同情心。不要只是漫不经心地思考这些步骤。写下你自己的答案,无论是在个人日志、博客、审查代码的过程中,还是与其他开发人员交流的论坛中。就像向朋友解释问题可以帮助你解决问题一样,记录和分享你的分析可以帮助你理解为什么你会以一种特定的方式对别人的代码做出反应。这是我之前提到的自省的一部分,帮助你冷静地判断你自己的优点和缺点。警告:在不需要成为一名优秀程序员的情况下,很容易阅读大量的代码,就像一个想要成为作家的人可以在不提高自己散文的情况下阅读伟大的文学作品一样。很多开发人员都在寻找开源或其他软件来“找到答案”,而且很可能是复制和粘贴代码来解决类似的问题。这样做实际上会让你成为一个更糟糕的程序员,因为你盲目地接受别人的智慧而不去审视它。(另外,它可能比夏季野餐还要麻烦,但因为你没有花时间去理解它,你永远不会意识到你就像是大自然的搬运工一样,只是在做体力劳动。)6.不要把编写代码仅仅看作是任务从事个人编程项目有很多优势。首先,它为你提供了一种学习工具以及学习技术的方法,而这些工具和技术在你当前的工作中是用不到的,但是这将使你在下一份工作中更有市场。无论你是为开源项目做贡献,还是为当地社区组织做公益工作,你都能获得技术技能和自信。(此外,你的个人项目向潜在雇主证明,你是一个从不停止学习的人。)编写代码的另一个好处是它强迫你自己去解决问题。你不能把这些难啃的问题留给别人,所以它会让你过早地寻求帮助。专业提示:不要只选择那些你永远不会失败的个人项目。你需要失败!但是你可能不想在工作中失败,或者给你限定期限时你也不想失败。7.尽一切可能做到与其他开发人员面对面的工作倾听别人的意见是很有帮助的。这可能意味着结对编程,或者参加黑客马拉松,或者加入一个编程用户组(比如Vermont Coders Connection)。当你为一个开源项目做贡献时,要关注一下你从用户和其他开发者得到的反馈意见。你在他们的批评中看到了什么共同点?这样做你可能会很幸运地认识了一位可以完全信任的导师,无路是编码技术还是职业决策,你都可以完全信任他。所以不要浪费这些机会。8.你是在学习技术,而不是在学如何使用工具编程语言、工具和方法这些都只是一时的。这就是为什么需要你在这么多的语言和框架中尽可能多的获得经验。重点关注编程基础,因为基础永远不会改变;更关注体系结构而不是如何编程。如果你觉得做某件事只有一种正确的方式,那可能是时候进行现实核查了。条条框框的限制会妨碍你学习新事物的能力,也会使你很难适应变化。我可以继续前进,但自我提升的关键原则是知道何时停止。对于,如何进阶成为优秀的程序员,大家还有什么想说的,可以在评论区发表哦~
没有更多推荐了,什么才算是真正的编程能力?来自:知乎链接:https://www.zhihu.com/question//answer/50423****38问题:什么才算是真正的编程能力?还在读书,也在实验室帮忙做了些东西,自己也搭过几个网站在周围人看来似乎好像我很厉害,做了那么多东西,但是我发现这些东西虽然是我做的,但是实际上我手把手自己写的代码却并没有多少,很多都是用开源的东西,我写的代码无非是把别人的东西整合下,类似于胶水一样的工作我之前所认为的编程是全手动一行一行敲代码,但是现在我发现哪怕是工程上也有很多人是复制黏贴来解决问题的,并且提倡不要重复造轮子但是靠谷歌和复制别人的轮子,虽然我做出了很多东西,可是我并不觉得自己能力上有提升,倒是利用搜索引擎的能力的确提升了不少而学校里另外一波搞ACM的人,他们每天刷题练算法,或许倒是的确提升了点编程能力,但是对工程几乎一窍不通所以我现在就很困惑,所谓的编程能力到底是什么,我该如何提升自己的编程能力?回答者:刘贺非常好的一个问题这可能是我在知乎见到过的问编程有关的问题中问得最好的一个了我非常喜欢这个问题计算机科学有两类根本问题一类是理论:算法,数据结构,复杂度,机器学**,模式识别,等等等一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合搞ACM的人,只练第一类像你这样的更偏向于第二类其实挺难得的,但很可惜的是第二类能力没有简单高效的测量考察方法,不像算法和数据结构有ACM竞赛,所以很多系统的苗子都因为缺少激励和正确引导慢慢就消隐了所以比尔盖茨才会说,看到现在学编程的人经常都把编程看作解各种脑筋急转弯的问题,他觉得很遗憾做系统,确实不提倡重复发明轮子但注意,是不提倡重复发明,不是不提倡重新制造恰恰相反的,我以为,系统的编程能力正体现在重新制造的能力能把已有的部件接起来,这很好但当你恰好缺一种关键的胶水的时候,你能写出来吗?当一个已有的部件不完全符合你的需求的时候,你能改进它吗?如果你用的部件中有bug,你能把它修好吗?在网上繁多的类似功能的部件中,谁好谁坏?为什么?差别本质吗?一个开源代码库,你能把它从一个语言翻译到另一个语言吗?从一个平台移植到另一个平台吗?能准确估计自己翻译和移植的过程需要多少时间吗?能准确估计翻译和移植之后性能是会有提升还是会有所下降吗?系统编程能力体现在把已有的代码拿来并变成更好的代码,体现在把没用的代码拿来并变成有用的代码,体现在把一个做好的轮子拿来能画出来轮子的设计蓝图,并用道理解释出设计蓝图中哪些地方是关键的,哪些地方是次要的,哪些地方是不容触碰的,哪些地方是还可以改进的如果你一点不懂理论,还是应该学点的对于系统性能的设计上,算法和数据结构就像在自己手头的钱一样,它们不是万能的,但不懂是万万不行的怎么提高系统编程能力呢?土办法:多造轮子就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触所以,自己多写点东西吧写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么?更聪明一点的办法:多拆轮子多研究别人的代码是怎么写的然而这个实践起来经常很难原因:大部分工业上用的轮子可能设计上的思想和技术是好的,都设计和制造过程都很烂,里面乱成一团,让人乍一看毫无头绪,导致其对新手来说非常难拆这种状况其实非常糟糕所以,此办法一般只对比较简单的轮子好使,对于复杂的轮子,请量力而行轮子不好拆,其实是一个非常严重的问题重复发明轮子固然是时间的浪费,但当轮子复杂而又不好拆的时候,尤其是原来造轮子的人已经不在场的时候,重新发明和建造轮子往往会成为无奈之下最好的选择这是为什么工业界在明知道重复发明/制造轮子非常不好的情况下还在不断重复发明/制造轮子的根本原因程序本质是逻辑演绎的形式化表达,记载的是人类对这个世界的数字化理解不能拆的轮子就像那一篇篇丢了曲谱的宋词一样,能读,却不能唱鄙人不才,正在自己研究怎么设计建造一种既好用又好拆的轮子您没那么幸运,恐怕是等不到鄙人的技术做出来并发扬光大了在那之前,多造轮子,多拆好拆的小轮子,应该是提高编程能力最好的办法了以上嗯(文章属个人观点,与本人工作雇主无关)回答者:mu peng,less is more懂得取舍在有限的时间内,几乎没有系统可以做到完美要快,要安全,高并发,易扩展,效率高,容易读,高内聚,低耦合...大到一个网站,小到几个class,工程师都要清楚,要取什么,舍什么,这并不是那么容易的事我们都有自己的性格,有的求新,有的求稳,有的求快,但具体到一个项目时,知道如何取舍对这个项目最好,很重要学校里的作业,没人在意你是不是写在一个大的main()里面,能跑就行但做项目的时候,太多的东西要考虑,有时候,宁可简单易读,也不用快那么一点点;有时候,要做太多看不到的工作,却丝毫马虎不得;有时候,写了不如不写,留白也是一个学问曾经接手个项目,里面几乎所有的class,每个都有interface,各种继承,各种实现,理由是灵活性高,易扩展真的易扩展吗?我不知道没多久,客户的需求就改了,各种拎不清的继承实现都化为乌有,一大半要重写问题在哪里?不是编程不好,而是取舍的不好在那个阶段,为30%的需求,花200%的努力,追求设计的滴水不漏,却舍弃快速实现,取得反馈的时机,这就是失误需求总会变,客户看到越早,修改越早,影响越小很聪明的人,也可能做出很难用的系统,不一定是编程不好,可能是不愿,或不屑于取舍不同的阶段,不同的项目,要取舍的东西也不同编程只是手段,目的是解决问题,能力高不高,要看问题解决的好不好不在于使用了什么高端算法,或是复杂的框架懂得如何取舍并不容易,需要对问题的深刻理解,对技术的胸有成竹,和身后无数个踩过的坑但重要的是有取舍的意识,主动思考取舍什么,这样学的才会快回答者:李遥,A Programmer既然说的是编程能力,那首先就先把学术相关的能力排除才能说的清楚接下来是我对编程的定义:所谓编程,就是预先设计好方案来指挥行为可预测的系统来自动(与临时手动相对)达到的想要的结果从广义上说,企业家对一个公司的运作方式进行设计,然后这个公司自动运行产生利润也是一种编程那么编程能力体现在两点1.对可预测系统的理解:理解越深,预测能力越强,自己的智慧才越好发挥这就是为什么学**软件编程最快的方式之一是造轮子2.如何把自己的目标转化成指挥方案,这其实就是做应用题的能力,我们从小学就在练**这个能力现实世界的应用题可不会告诉你用什么知识点去建模,也不会透露全部必要条件,因此增强这个能力需要深刻理解现实世界的运作方式在软件行业,这被称作理解垂直行业的业务逻辑顺带说一下,所谓Hacking,其实就是在深刻理解一个系统的基础上,用最小的代价改变这个系统来达到自己的目的Hacking之所以看起来出人意料,就是因为理解越深刻,需要的做的改动越少如果理解不深刻,那就要从头造一个系统了,那就不聪明了回答者:丁盛豪,网络媒体HeckPsi.com创始人谢 @花满楼 邀请对于编程能力这个问题其实我也想过很久,这个东西确实非常难界定单纯靠算法水平编程速度工程经验都很难说是编程能力虽然这个东西的影响因素非常庞大,但从我日常的工作来看,其实我觉得衡量编程水平最靠谱的方法是观察这个程序员 Debug 的能力程序从本质上来说就是 输入 -& 处理 -& 输出 的过程,而中间的处理就像是一个巨大的黑盒子而这个黑盒子的本身就是程序,在大多数情况下你并不能看到这个黑盒子的全貌从常识上写一个不存在 bug 的程序是一件 几乎 不可能完成的任务即使是敲个最简单的 Hello World 程序,你也很难保证编译器不给你抽几下风尤其是当这个程序变得非常庞大时,写程序这件事的本身就是 盲人摸象 的过程程序员必须要有相当好的 全局观 ,才能保证自己的程序良好运行而不出问题,并能在出了问题之后能够做出迅速的定位和修复所以观察一个程序员能否 迅速Debug 的过程就是一个很好的判断依据我举个例子来说,我几周前给手机刷了机,第二天早上准备去晨跑,发现手机 GPS 不工作于是我立刻分析了出现问题可能的地方:GPS 模块硬件 -& GPS 驱动 -& 系统配置 -& GPS 权限 -& 软件兼容性由于想起刚刷了机,基本可以排除硬件问题而软件之前同样在其它 Android 5.1 机器上跑过,同时跑了下 Google Maps 也不能定位,排除兼容性问题原生系统的权限系统非常简单,基本排除是权限出问题的可能是第三方 ROM 的驱动有问题或者配置文件观察到 A-GPS 基站辅助定位也不工作,基本排除 GPS 驱动问题确认是配置文件有问题,检查 /etc/gps.conf 竟是空文件于是就在手机上用文本编辑器顺手码了一段配置,重启后问题修复这就是一次非常流畅准确的对一个未知的 Bug 定位和修复的过程由于 Bug 的未知性,可以很好避免一些你在判断时可能遇到的 作弊 情况,我们知道现在很多人为了面试无所不用其极就算是以前非常经典的面试问题,现在也很不靠谱现在你问 如何理解面向对象编程? 和你对答如流的人可能并不真正理解 OOP,不过背的很熟而已以前觉得算法是个很好验证水平的切入点,自从 LeetCode 背题流的出现,这招现在也不怎么靠谱而 Debug 是个无法 提前准备的东西,所以对于编程能力的校验通常很准确而且,Debug 的过程中会接触到自己很多不熟悉的知识由于编程本身就是一个 Engineering,正常的过程就是在 码字 -& 出问题 -& 学** -& 修改 的过程中循环如果你对算法不熟悉,那么遇到程序性能问题的时候你硬着头皮也要用学**算法知识来解决掉所以这是一项非常综合的能力,是程序员 知识智力经验 的综合体现至于如何提升编程能力?多写多错多学没有捷径,捷径只不过是作弊作弊能帮你找到工作,但并不能真正解决问题回答者:陈浩骏,call me Reid / 会写Java的猴子MIT算法导论第一堂课:每天都编程 x年后一定会变成专家 (忘了x多少 不是重点轮子多造多模仿 能力自然提升什么发展都是从量到质的 要相信现在我也是搞系统编程 除了看source code和造轮也是可以有空刷刷acm的而且只有帮助没有坏处喔系统编程一旦考虑到效能问题 离不开经典的一些算法的&显然大部分的我们都不会成为高手如温赵轮但是成为编程好手 进个好公司 钱多赚些 生活舒服些 应该是普遍程序员的共同目标不要想太多 拼命code就是了共勉如此回答者:vczh,专业造轮子&https://github.com/vczh-libraries都不知道宣传不要重复造轮子的人是怀着什么险恶的用心,原话明明是不要重新发明轮子这是什么意思呢?就是说你要多看论文多看书,少抄代码回答者:达达,服务端程序员程序员就是把人类的需求语言翻译成计算机语言的人,所以可以通用译事三难:信达雅回答者:Kim Leo其实,搭网站,写MIS/CMS/ERP这些,就算是一行行的写代码,结果也只能是你的领域知识不断提升,对于编程能力的提升没有多少的就像是你根本无法解释在你写的系统中哪个地方应用了动态规划一样所以相对来说你所需要的是一些计算机科学内的领域知识还有,假如你写了代码要给别人看和给其他程序员用,应该就开始慢慢考虑接口和设计了或者你需要的是一本分析模式?回答者:JX Consp看看别人的轮子的形貌(主要是接口,其次是效率)之后自己造一个轮子其实 STL 源码剖析 和 modern c++ design 不错,唯一问题是选择了 c++ 做教学语言有兴趣可以学点认知和设计来了解好的接口长得是怎样的回答者:海涛,软件开发需要低成本快速响应第1层:能做成东西(能运行)第2层:做的东西能长时间或高负荷地运行第3层:做的东西能长时间在高负荷下运行第4层:能预先知道什么才是客户/行业需要的功能,并以最符合的代价(金钱硬件期限人力)实现回答者:DreamPiggy多看书多思考改别人代码学别人的架构做自己的软件写自己的架构或许如此循环就入坑了吧程序员e家programmer_clubs程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考感悟以及启迪!长按二维码识别关注该作者最新发布网友推荐的文章最新发布的文章15618 条评论分享收藏感谢收起赞同 182 条评论分享收藏感谢收起沈阳海潮科技说你的编程能力很强?先做了这5个问题再说!
很多刚入门或者初学编程的童鞋,在掌握一些技术之后,就会觉得自己已经了解了精髓,可以去改变世界了,于是在求职工作中都会表现的很骄傲。但实际上真的是自己想的那么厉害么?本文总结检测程序员水平的5大问题,水平如何,一试便知。
每次我发布软件工程师的岗位工作要求,各种求职申请就会纷至沓来,接踵而至。但每每让我困惑的是,似乎总有那么几位应聘者完全不明白所谓“编程”的意思。
当然,他们另有想法。
而我认为,如果你应聘的是“Web前端开发”岗位,那么你只懂jQuery也可以胜任,那么,“软件工程师”是不是就意味着会HTML、Java和CSS这些必备技能就行了呢?
我觉得那些聊起XML、JSON、XSLT、SOAP、HTTP、REST、SSL和200多个首字母缩写词来头头是道,但却不会区分整型和浮点型数据类型的家伙很有意思。呵呵
你真的会写代码吗?
对于应聘程序员的求职人员,我,作为用人单位,首先希望的是你会写代码。我指的是真正的代码:我给你一个问题,你使用任何你觉得舒适的编程语言给出它的解决方案。
你真的能做到这一点吗?
策略:如果你不能在半小时以内解决以下5个问题,那么你首先要做的是重新审视自己。
的确,或许你各方面的工作都干的不错,但是我依然觉得你现在还不配“软件工程师(或程序员,计算机科学专家,甚至是“开发人员”)”这个头衔。不要自欺欺人,先花点时间来调整你的重点吧。
使用for循环、while循环和递归写出3个函数来计算给定数列的总和。
编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。
编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。
编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
沈阳海潮科技
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点}

我要回帖

更多关于 程序员逻辑能力测试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信