❶ 创造力、好奇心和交流技对一个程序员来说有啥用
创造力就是创新吧 当然重要了 不然那创新工场建来干嘛 没有创新 哪来的微博 哪来的facetime。 好奇心就是打破沙锅问到底的态度呗 理解要透彻 这样才能举一反三。 交流不止对程序员来说重要 基本是个人都需要交流 这我就不细说了。
❷ 程序员如何才能有独立开发项目能力
难!我本身是软件工程师,我从业都十多年了,就拿网站来说吧,比如你独立开发一套PHP或者是Java的网站,通常,美工+WEB前端+后端开发+需求分析,设计友伏的能力,相当于,你一个人,顶一个团队的工作量,连项目经理都兼任,维护客户都兼任!因为你得分析需求啊。
如果Java更难了,相当于美工(1人)+WEB前端(1人)+后端开发(3-7个),如果是APP的,还得加安卓+IOS工程师+项目经理。
如果是C++,巨难,虽然我也可以独立开发。问题是,太耗费精力了。特别是嵌入式,其实C语言都有几种,Java也有几种,其他人,半桶水,不专业的。
最终,你要给客户看到的效果!如果你美工 不行,后端不得,只要有一个严重的短板,你就不胜任真实的项目独立开发的能力,自娱自乐可以。
写驱动,谈何容易,全世界好枝携,不超过1000人会写底层的驱动。
第二个,我看到你说,做嵌入式的是学c++还是java ,我java比c++好一些,说明,你基础不行,虽然是科班出生,科班难出人才,除非自学成才的天才例外!如果天才,你这个年纪的,或者大一点的,都能独立开发了。特别是美工,需要天搭凳赋的!编程也是。需要悟性的,才有创造力,如果死读书的书呆子,没什么创造力的。少数例外。
❸ 程序员提升开发技术需要注意哪些
一、不提升非技术技能
我们认为非技术技能是项目成功的主要因素。这些非技术技能也可以称之为“软技能”,总体上来说,它已经被公司证明为能够驾驭企业和客户之间的长期商业关系,因此也能决定公司的成长发展路径。一些关键的软技能指标包括:
a.纪律——这是最重要的特征之一,缺乏纪律,最终会让这个开发团队在开发能力上“缺乏自信”。解决这一问题的矫正方法就是每天制定详细的to-do清单:兑现你的承诺、完成你开始做的事情、避免多重任务,因为这些往往会让你的生活产生混乱。
b.顾客的声音——不把客户置于决策的核心地位只会跟你们业务的原始目的相冲突。如果客户不高兴,即使你拥有世界上一流的专业知识和资源也不会起什么作用。保持符合客户期望的解决方案、及时交付才能体现出项目的真正价值。
c.沟通——尤其是当客户和供应商并不在同一地点的时候,明确而及时的沟通是填补服务空白的极好措施。主要集中在这衡团三个方面你就能克服问题——进行主题讨论、清晰表达、干脆简洁。
d.了解需求——在整个开发生命周期过程中,决定成功和失败的之间的一个至关重要的区别将会给人留下深刻的印象。通过最初的头脑风暴法了解问题状态,以及后续的交货程序,这其中都要和客户完美配合。只有这样,客户才会赞赏你的工作,给你好评。
二、对编码不理智
古人云:善泅者溺,善骑者堕。但估计绝大多数的程序员都认为自己的编程技术绝对的牛。而同样真实的是,每一个代码,让不同的程序员去实现的话都会不可避免地发现它所存在的缺陷。所以说,只有通过在一个项目上的合作,程序员之间必然有的摩擦才能证明谁是最好的。健康的竞争是好事,但它不应该成为一个本来可以成功的项目的负担。
另一个创意阻碍是无法将预定义的模板使用在对你有利的开发项目里。几乎所有的编程语言有一个很好的在线/内置的代码片段存储库,可以咐闭橘修补代码,防止重新编程。然而,如果因为不理解需求或缺乏接触各种可用库/模板的话,这就意味着程序员最终会无意间将一开始就创建的代码付之东流。这不仅增加了开发时间,也提高了总体成本。另外一点就是,发布了的代码已经经过了质量检测,所以只有将它用作模板才能发挥它更大的价值。
三、不一定什么都要被理解
如果你是刚调到这个团队来的编程人员,对于手头的工作并不是很熟悉,那该怎么办?肯定是先看一些前任留下来的工作计划,要是他写的详细倒也没什么,如果写的不详细,估计会让你更加的挠头。
因此,推己及人,在需要交代的工作上,最好是把任务写的尽可能的详细。这么做也是非常现实的原因:能够把编程问题解决掉,最好是保证使用解释性的语言和英语发音来表示变量。一些基本的指针可以让你的程序更容易被理解,包括:
a.把所有参数、引用、方法和变量名称尽可能接近英语表达。保持文件名简短但有助于理解的功能。
b.使用++包装文字是一个好办法,能让代码和注释更加清晰。
c.将编写的程序保持在一个连续的流程上,尤其是在使用OOP基础上的语言:C、C和C++。
d.对于不同的代码块使用不同的描述名称。
四、不使用经过验证的工具和技术
程序员的好坏从他使用的编程工具和调试工具上就能看出。在异常情况的跟踪上,下面就是程序员经常会出现的常见错误。
对一些可能会对其它代码有影响的常见案例进行捕捉,处理这些比较常见的异常情况(而不是特殊的异常)意味着无意中除除掉了会抑制整个程序的残留部分,因此并不会影响他人的代码。
也许程序员可能带有恶意的意图来捕捉所有的异常情况,但即使是捕捉到了也不实施采取措施,这就是常说的“虚假安全阀”,这种异常处理手段是态轿对整个软件的稳定和安全的一种妥协方式。
五、较差的控制版本
在任何涉及多个团队的项目里,当谈到版本控制的时候不去介绍使用最佳实践都是一个十足的罪过。版本控制的目的是确保由一个人执行的编辑或修订不去影响另一个人的工作。
版本控制不仅有助于将由两个或两个以上的程序员的编辑工作合并到一起,还有助于跟踪程序的更改历史。所以说,任何开发团队都应该做一些好的改进措施以确保强大的版本控制,这其中就包括:
为每个解决方案创建一个“逻辑单元”
给解决方案制定描述性的名称
确保你所使用的都是最先进的文件
频繁的向团队分享你所做的各种改变
六、拥有最新信息的个人代表不了团队
一旦有新员工加入,就立刻强制安排他参加专业培训,让他知道他的角色是用来干什么的,尽早产生创造力。例如一个测试人与加入之后,就应该向他介绍编程的理念,之后将培训重点放到测试实践上,而不是继续阐述编程的重要性。
现阶段的技术的进化程度比以往任何时候都要快,,所以要记住,定期培训是必不可少的,这是在给团队创造价值。例如一个Web设计师需要知道响应式设计,提供给设计师大量的用户日常使用的移动设备的不断扩张的样品,希望他们能获得灵感。
七、不恰当的测试
测试作为整个系统开发生命周期(SystemsDevelopmentLifeCycle,简称SDLC)的重要一个要素,通常不需要开发团队给出太惊人的结果。但是如果在测试环节没有付出恰当的、相应的努力的话,这是说不过去的。下面的一些方法或许对你的测试团队有用,至少在你们交付产品的时候能够给用户一个好的交代。
单元测试
实物模型
综合测试
八、注意安全漏洞
有的时候在软件开发过程中,就会遇见如下这样的安全漏洞:
A、不同组件之间意想不到的交互作用:a、输入不正确的验证信息;b、SQL资料隐码攻击;c、跨网站指令码;d、命令植入攻击;e、跨站请求伪造(CSRF);
B、难以实施的资源管理,包括:a、不尊重可用内存缓冲区;b、对外控制;c、使用有潜在危险的功能;
九、和客户交流
最初的合同签订后,开发公司通常会忘记每天与客户进行产品上的信息交互,以至于在交货的时候还需要进行升级。两大关键的交流点可以让你和客户保持更好的、更长的关系:
在客户开问之前,开发方应该和客户进行交流沟通。
和客户保持周期性的交流。
十、避免标准实践面临的迫在眉睫的最后期限
通常情况下项目都会遇到进度延误的现象。然而,这不是说你有理由去偷工减料或者是在开发或测试阶段耍花招,未经测试的模块绝对是一个隐患,会让你的开发团队名誉受损的。一个更好的方法来管理延迟是提前告知客户并且积极执行延迟计划。只要延期的理由是有效的,客户应该会理解,也会给你额外的时间来解决这个问题。
❹ 程序员是如何提高工作效率的
提高工作效率其实是我们大家每一个人都希望的事情,同时呢也是公司上司希望大家可以办到的,专业技能、专业知识、创造力、经验都是程序员该必备的东西。当然,还有工作态度、工作效率和工作质量更尤为重要。那么问题来了,程序员又是如何提到自己的工作效率的呢!
对于程序员来说,他们的工作没有效率,那就意味着他们所投入的时间和精力是没有效果的。
我个人感觉,还有一个很重要的就是大家无论干什么都要学会持之以恒,我感觉只要坚持那么总会有成效的。尤其呢,作为程序员来说,编程是一项磨练程序员韧劲和耐性的工作。所以一切都是贵在坚持的!
❺ 如何成为一名合格的程序员
很多人想要成为程序员,在学习编程的过程中,面对各种bug和源源不断的问题,有时会对自己是否适合编程这一问题产生困扰。
作为一名教授全栈Web开发的教育工作者,我已经带领很多新手成为了程序员。好消息是,我发现没有任何人是不能学习编程的。我把它看作是一种基本的人类技能,就像阅读、写作和算术一样,任何人都可以做到。它是我们人类能力的一部分,只是需要学习。
在过去的几年的教学中,我目睹了不同的学生在学习过程中的斗争,以及在他们的挣扎中出现的一些共同问题。
下面的列表将帮助你了解你是否喜欢编程
1、缺乏好奇心
如果你对计算机是如何工作的缺乏好奇心,那么,作为一个程序员,你将永远不会成功。
学习的一个基本要求是对你所学的东西有积极的兴趣。如果你没有一个对技术好奇的头脑,你就没有精力去坚持学习要成为一个成功的程序员所需要的广博而深入的知识。相比之下,技术的世界就像一个巨大的海洋,里面充满了各种有趣的领域、相互联系的思想和各种可能,它们可以激发人们的想象力。想要潜入这片海洋并发现你所能发现的一切,需要内在的动力。
找到你的好奇心:问问你自己,编程是否真的让你感兴趣?如果没有兴趣,去找你感兴趣的东西,以节省时间和精力。但是如果你的答案是感兴趣,那么就强迫自郑袜己去发现一些你以前没有注意到的新事物,认识到浩瀚的技术海洋,再往下潜一点。
2、缺乏自主性
如果你不培养自己解决问题的能力,你就永远不会成为一个成功的程序员。
毫无疑问,要成为一个成功的开发人员,你必须对自己的学习能力充满信心。这实际上是一项基本的生活技能,如果你年满18岁,没有人有义务教你任何东西。这就是现实。当你想学习技术所需的技能时,首先要学会的是,在谷歌中输入你想要的任何东西并获取你需要的信息。除此之外,所有编程语言都有文档和规范,这些文档和规范对语言的工作方式解释的非常清楚,它们就像字典一样。作为一个程序员,最快速、最可靠的学习方法就是简单地阅读这些文档。
当你有问题的时候,在问别人答案和查阅官方文档之前,强迫自己先搜索一下,节省别人的时间。
3、面对问题缺乏毅力
如果你在遇到问题时轻易放弃,作为一个程序员,你将永远不会成功。
编程的本质是解决问题,这也是计算机产生的全部原因!每当你开始编写一个程序时,你总是会遇到一大堆问题。一旦你解决了一个问题,那么几乎总是有另一个问题在后面等着你。你在进步,但总是会有新的问题要面对。
这堆问题会让人望而生畏,令人感到沮丧。如果你觉得程序应该“能用就好”,那么你就没有精力坚持下去,因为问题还在继续出现,它们会一点一点地击溃你的情绪和决心。从字面上来说,你的工作就是找出程序为什么不能跑起来。
从我在授课上的经验来看,通常每个班都有一两个学生,和其他学生相比,他们似乎更容易遇到更多的问题——通常是非常随机和模糊的问题。我提醒学生,他们面对的问题越多,学习越深入、越彻底的可能性就越大。如果他们能通过这些问题获得深刻的理解,他们会很快发现他们变得更加自信了,因为他们面对和解决的问题比普通学生多。
你需要认识到,问题不仅仅只是问题,它实际上也是挑战。你所面临和克服的每一个挑战都能让你更深入地理解技术,更好地面对新的挑战,并迅速解决旧的挑战。
4、解决问题之后没有成就感
如果你在解决一个问题后没有兴奋感和成就感,作为一个程序员,你将永远不会成功。
与上一个问题相关的是,你成功地解决了一个问题,却缺乏“良好的感觉”。当修复bug和问题变成了一个永远不会结束的事情时,你会失去与克服问题的动力。
当你解决一个问题时,你需要的是多巴胺的释放。这类似于在电子游戏中完成了一个关卡,或者解决了一个像纵横字谜或数独这样的挑战。我们都知道,坚持通过一项挑战,然后最终赢得比赛,一般都会有成就感和兴奋感。但是如果你失去了感受这些快乐的能力,或者从一开始就没有真正有过这些感受,你将无法体验到编程带来的快乐。如果你把编程看作是一种磨砺,你只想尽可能容易地得到结果,那么你永远不会真正成为一个成功的程序员。
无论何时,当你解决了一个一直在努力解决的问题时,无论这个问题多么微小,你总是为你的成就感到骄傲。你需要休息一下,祝贺你自己完成了一项出色的工作,让成功的感觉渗透进你的心里,为你即将面临的下一个问题注入活力。
5、无法独立思考
如果你期望别人为你着想,并且主动看到你自己所在的处境喊纯激的细节,你将永远不会成为一个真正成功的裤脊程序员。
当你在学习新的东西时,很容易感到缺乏知识和经验,并没有自己的观点。主动做事或者说错话似乎是有风险的。对于错误,我们的内心都有一种恐惧感。当对错误的恐惧抑制了你的探索和好奇心时,你会扼杀开发真正知识、从经验中获得的知识和“失败”的能力。当你需要依靠“权威”的观点、一个受欢迎的博客、一个最佳实践或“教科书”的答案时,那么你就没有真正地整合编程的知识。你需要对什么有效,什么无效形成自己的观点。你需要理解为什么你认为你的解决方案有效,以及使用这个方案有什么好处。你需要建立一个微妙的视角,超越那些显而易见的东西。你需要能够“证实”你的立场。
为自己着想。通过你的经验和批判性思维技巧,发展出你自己的思想体系。做出合理的猜测,坚定立场,并愿意随着新信息的出现而改变立场。
6、僵化、狭隘、混乱的思维
如果你的思维僵化,并且难以保持代码的条理化,那么你将永远无法成为一名真正成功的程序员。
我有时在学生中看到两个极端。第一种是僵化和狭隘的思维方式。拥有这种态度的人拒绝帮助,尽管会有反馈,但不会有改变。他们看事情只从一个角度看,别人给的建议被忽略。
我看到的第二个极端是思维混乱。学生们似乎使事情变得更加复杂,他们的代码杂乱无章,难以理解。他们过度思考问题,写100行代码,而其中只有10行是有用的。
当这两种心态结合在一起时,结果就是一种用蛮力的方法去设计程序。我们需要的是回顾解决方案,重新评估它,放弃最初的方法,并重新组织方法。
无法看到其他可能性或无法反思反馈会抑制成长的能力。思维杂乱无章会减慢你的成长速度,阻止你看到那些原本显而易见的模式。你的工作质量也会下降。
自我反省。你需要退后一步,看看你是接触的事物的大局是什么样子的。你要怎样才能做得更好?你能做些什么让你的生活更轻松吗?你需要什么来帮助你?
7、需要“正确”的答案,而不是识别一系列“好”和“坏”的答案的方法
如果你认为编程的最终目标是找到正确的解决方案,而不是一系列解决方案,那么作为一个程序员,你将永远不会真正成功。
当开始学习技能或编程时,学生往往想知道他们所做的是否“正确”,而答案总是“视情况而定”。
计算机科学是一门评估权衡的科学。在不同的环境下,哪条路更好,这完全取决于所处的环境和目标。当你把编程看作是一个有正确答案或错误答案的测试时,你就失去了对全局的认识,放弃了你的创造力。任何答案都可以是“正确的”,前提是你能根据具体情况证明这一点。现实情况是,编程更像是写诗或写短篇小说(如果程序很大,则可能是小说)。在你的代码中可以看到一种美学和美丽,这些东西有时只有你和其他程序员能够识别出来。你决定解决方案的原因,以及你对答案的设想,比“正确的方式”或“错误的方式”更重要。拥有一个艺术家的头脑可以让你编的程序具有选择和可能性,而不是认为只有一种处理方式。这就是编程的美——有很多方法可以解决问题,考虑不同的可能性,然后决定哪种方法最适合当前的情况。
创造性很重要。你要认识到,解决问题的方法有很多种,通过经验和积累,你会对哪些解决方案比其他解决方案感觉更好产生细微的理解。纵观全局,想象不同的可能性,相信你的直觉,你会得到更满意、更好的解决方案
如果你对学习编程感兴趣,我鼓励你开始这段旅程。记住提到的七条,并开始学习、探索在线资源,这些资源可以让你快速学习。你不会后悔的!
合格程序员,对于一种计算机程序设计语言,我们将其分为语法、语义、语用三个层面。仅仅掌握语法是不够的,不算学好。但是很多人,在履历上写自己掌握(甚至精通)了某种语言,其实就是解了语法,会写简单的程序而已。这就是为什么我们行业特别不喜欢“精通”这个词的原因。
现代软件开发,规模都比较大,不是写个HelloWorld那么简单,也不可能每个项目每件事都从头开始造轮子,我们都是站在前辈、同行们的肩膀上工作的。也就是说,语言之外,还有“库”这个东西需要掌握,不然就寸步难行。库有语言级别支持的BuildIn的库,比如JAVA里面的util、concurrent,CPP的IOSTREAM、STL等等;更多的更丰富的还有第三方提供的库,比如JDBC、Servlet、EJB的implementations等等。这些东西掌握了,干活儿才可能得心应手,不然寸步难行。
比Libaray更高层一些的,是Framework。框架的作用在于,将某一方面开发的BestPractices搞到一起,给你提供一个更易用的、不关注底层的脚手架。比如做企业应用的,SpringFramework是标配了;访问数据,Hibernate或者MyBatis也离不开,很少直接用JDBC去干活的了;做WEB的,各种MVCFramework起码得掌握一两个(springmvcorstruts2?);做网络的,Netty,MINA怎么也得掌握一个......总而言之,框架是绕不过去的一个门槛。
然后呢,就是环境、辅助工具。应用服务器,怎么也得会调试配置那么两个吧。TOMCAT是入门标配,JBOSS,WEBLOGIC之类,起码要弄得跑得起来;针对不同应用场景,还要会选择。开发/管理工具,ECLIPSE是标配、GIT和SVN起码要搞熟一款;其它比如单元测试工具、Build工具、测试覆盖率、CodeReview这些插件...也得知道怎么用。
最后,通用的,计算机科学的基础,不说多扎实,至少不能一窍不通。说起来就那几大件,操作系统、数据结构&算法、编译原理、体系结构。要懂一点点,你才知道你编的程序是怎么run起来的,哪儿可能存在效率问题性能瓶颈,除了问题知道怎么debug。如果仅仅把计算机当作一个黑盒子,那也不算学好了。
最最后,还有一样,就是你要训练一下,快速理解领域知识的能力。你参与做一个项目,你懂的只是上面这些专业知识,但并不懂客户的行业知识。如何尽快地理解业务,并用你手头的工具实现业务逻辑,这点对程序员而言是非常重要的,否则你做的东西客户总不满意,GET不到重点,很麻烦。
我觉得这是一个合格的程序员的基本要求。你看,我并没要求你懂需求工程、懂项目管理、懂架构设计、懂很多算法、模式,甚至更深的专业知识。
❻ 一个优秀的程序员需要养成哪些良好的习惯
怎么样才能成为一个优秀的程序员?这是一个颇为奇怪的问题。怎样才是一个优秀的软件开发人员,在今天,你该怎样发展你的职业生涯?以下是DevStore总结的优秀程序员必备十大习惯。按照这些技巧和规则,你可以改善你的现状,由一个普通的程序员,成为一名优秀的程序员。
学会学习
就算是你有了10年以上的程序员经历,你也得要不断地学习,因为你在计算机这个充满一创造力的领域,每天都会有很多很多的新事物出现。你需要跟上时代的步伐。你需要去了解新的程序语言,以及了解正在发展中的程序语言,以及一些编程框架。还需要去阅读一些业内的新闻,并到一些热门的社区去参与在线的讨论,这样你才能明白和了解整个软件开发的趋势。
掌握多种语言
程序语言总是有其最适合的领域。当你面对需要解决的问题时,你需要找到一个最适合的语言来解决这些问题。比如,如果你需要性能,可能C/C++是首选,如果你需要跨平台,可能Java是首选,如果你要写一个Web上的开发程序,那么PHP,ASP,Ajax,JSP可能会是你的选择,如果你要处理一些文本并和别的应用交互,可能Perl, Python会是最好的。所以,花一些时间去探索一下其它你并熟悉的程序语言,能让你的眼界变宽,因为你被武装得更好,你思考问题也就更为全面,这对于自己和项目都会有好的帮助。
理性面对不同的操作系统或技术
程序员们总是有自己心目中无可比拟的技术和操作系统。只有一部分优秀的程序员明白不同操作系统的优势和长处和短处,这样,在系统选型的时候,才能做到真正的客观和公正,而不会让情绪影响到自己。同样,语言也是一样,有太多的程序员总是喜欢纠缠于语言的对比,如:Java和Perl。哪个刚刚出道的程序员没有争论去类似的话题呢?比如VC++和Delphi等等。争论这些东西只能表明自己的肤浅和浮燥。优秀的程序并不会执着于这些,而是能够理性的分析和理心地面对,从而才能客观地做出正确的选择。
别把自己框在单一的开发环境中
再一次,正如上面所述,每个程序员都有自己忠爱的工具和技术,有的喜欢使用像VC++一样的图形界面的调试器,而我更喜欢GDB命令行方面的调式器。等等等等。程序员在使用什么样的工具上的争论还少吗?到处都是啊。使用什么样的工具本来无所谓,只要你能更好更快地达到你的目的。但是有一点是优秀程序员都应该了解的——那就是应该去尝试一下别的工作环境。没有比较,你永远不知道谁好谁不好,你也永远不知道你所不知道的。
使用版本管理工具管理你的代码
千万不要告诉我你不知道源码的版本管理,如果你的团队开发的源代码并没有版本管理系统,那么我要告诉你,你的软件开发还处于石器时代。赶快使用一个版式本管理工具吧。使用什么样的版本管理工具依赖于你的团队的大小和地理分布,你也许正在使用最有效率或最没有效率的工具来管理你的源代码。但一个优秀的程序员总是会使用一款源码版本管理工具来管理自己的代码。
做一个优秀的团队成员
除非你喜欢独奏,除非你是孤胆英雄。但我想告诉你,今天,可能没有一个成熟的软件是你一个人能做的到的,你可能是你团队中最牛的大拿,但这并不意味着你就是好的团队成员。你的能力只有放到一个团队中才能施展开来。你在和你的团队成员交流中有礼貌吗?你是否经常和他们沟通,并且大家都喜欢和你在一起讨论问题?想一想一个足球队吧,你是这个队中好的成员吗?当别人看到你在场上的跑动时,当别人看到你的传球和接球和抢断时,你的团员成员能因为你的动作受到鼓舞吗?
把你的工作变成文档
这一条目当然包括了在代码中写注释,但那还仅仅不够,你还需要做得更多。有良好的注释风格的代码是一个文档的基础,他能够让你和你的团队容易的明白你的意图和想法。写下文档,并不仅仅是怕我们忘了当时的想法,而且还是一种团队的离线交流的方法,更是一种知识传递的方法。记录下你所知道的一切会是一个好的习惯。因为,我相信你不希望别人总是在你最忙的时候来打断你问问题,或是你在休假的时候接到公司的电话来询问你问题。而你自己如果老是守着自己的东西,其结果只可能是让你自己长时间地深陷在这块东西内,而你就更本不可以去做更多的事情。包括向上的晋升。你可能以为“教会徒弟能饿死师父”,但我告诉你,你的保守会让你失去更多更好的东西,请你相信我,我绝不是在这里耸人听闻。
注意备份和安全
可能你觉得这是一个“废话”,你已明白了备份的重要性。但是,我还是要在这里提出,丢失东西是我们人生中的一部份,你总是会丢东西,这点你永远无法避免。比如:你的笔记本电脑被人偷了,你的硬盘损坏了,你的电脑中病毒了,你的系统被人入侵了,甚至整个大楼被烧了,等等,等等。所以,做好备份工作是非常非常重要的事情,硬盘是不可信的,所以定期的刻录光盘或是磁带可能会是一个好的方法,网络也是不可信的,所以小心病毒和黑客,不但使用软件方面的安全策略,你更需要一个健全的管理制度。此外,尽量的让你的数据放在不同的地方,并做好定期(每日,每周,每月)的备份策略。
设计要足够灵活
可能你的需求只会要求你实现一个死的东西,但是,你作为一个优秀的程序,你应该随时在思考这个死的东西是否可以有灵活的一面,比如把一些参数变成可以配置的,把一些公用的东西形成你的函数库以便以后重用,是否提供插件方面的功能?你的模块是否要以像积木一样随意组合?如果要有修改的话,你的设计是否能够马上应付?当然,灵活的设计可能并不是要你去重新发明轮子,你应该尽可能是使用标准化的东西。所谓灵话的设计就是要让让考虑更多需求之外的东西,把需求中这一类的问题都考虑到,而不是只处理需求中所说的那一特定的东西。比如说,需要需要的屏幕分辨率是800×600,那么你的设计能否灵活于其他的分辨率?程序设计总是需要我们去处理不同的环境,以及未来的趋势。我们需要用动态的眼光去思考问题,而不是刻舟求剑。也许有一天,你今天写的程序就要移植到别的环境中去,那个时候你就能真正明白什么是灵活的设计了。
不要搬起石头砸自己的脚
程序员总是有一种不好的习惯,那就是总是想赶快地完成自己手上的工作。但情况却往往事已愿违。越是想做得快,就越是容易出问题,越是想做得快,就越是容易遗漏问题,最终,程序改过来改过去,按下葫芦起了瓢,最后花费的时间和精力反而更多。欲速而不达。优秀程序员的习惯是前面多花一些时间多作一些调查,试验一下不同的解决方案,如果时间允许,一个好的习惯是,每4个小时的编程,需要一个小时的休息,然后又是4个小时的编码。当然,这因人而异,但其目的就是让你时常回头看看,让你想一想这样三个问题:1)是否这么做是对的?2)是否这么做考虑到了所有的情况?3)是否有更好的方法?想好了再说,时常回头看看走过的路,时常总结一下过去事,会对你有很大的帮助。
❼ 为什么中国的程序员总被称为码农求解
而同时如果要真正提高自己的技术和创造力,是需要投入大量的时间和精力的,是需要内心将其当作一种兴趣爱好来钻研的,而不是作为一种谋生的工具;我也只能说在我朝面对这样的事情,很多都是无奈的,但是这篇文章写的确实99%的东西都是非常中肯的, 有时间和精力的码农们还是以谦虚的姿态多多像老外哥学习钻研就对啦,至少是有那么些幸福感咯。=================以下是原文,值得品味================
实际上IT行业在中国并不是特别差的行业,而程序员的工资也并不低,但为什么中国的程序员总被称作码农或者说是苦逼的程序员?中国的程序员生活和欧美的有什么不一样?之前,研发频道曾发过《东方程序员怎么看西方程序员》和《西方同行眼中的东方程序员》这两篇文章。来自世界各地的程序员们各抒己见。或许,从上面两篇文章中也多少能得出“”下面是来自知乎网上各位大牛的看法。让我们来一起看下!一位叫吴涛的程序员的回答:编程活动和机械电子一样可以视为一种工艺(craftsmanship),从事此类工艺活动的人可以叫做工匠或者工程师。经历过工业革命的欧美国 家,有深厚的工程根底,从机械到电子再到软件,都是国家产业的支柱,滋养着社会中坚力量的中产阶级。工程师的社会地位普遍比较高,他们有工艺的传承,有文 化圈,有产业的历史。而国内目前的软件工业和制造业非常相似,以来料加工式的低水平重复劳动为主。就好像农民仰赖着老天提供种子、土壤、阳光和水,中国程序员仰赖着洋人提供设备、技术和理念,从微处理器、操作系统、编程语言、编译器、IDE、编程框架到应用程序,除了做晶圆的沙子是本 地产的,几乎没有什么属于自己,每天的工作内容主要就是把别人已有的东西按照自己的——甚至不是自己的——需求装配一下,没有什么创造性,也很少有业界的 技术积累和传承出现,即便有也流传不开,毕竟程序员文化水平普遍不高——“有知识,没文化”,就是说这样的状况。记得劣质盗版VCD满天飞的时代,有个程 序员做出一款丑陋但是解码容错能力很好的播放器,贴合国情,一炮成名,结果好容易写本书,没有几个句子能写通顺的。这种技术书籍的拙劣状况一直保持到现 在,而且拙劣的方式更加多样化了。没有技术传承,没有文化圈,不乏有人上大学之前对编程一窍不通,学计算机只是因为计算机“热门”而已。如同包办的婚姻, 没有一丝爱情,最后以编程为业,只是因为也不会做别的什么了。另一方面,国内程序员不论薪水如何,的确很苦。许多人长期被迫加班,最后甚至会成为一种自愿的习惯。可生产率和产品质量并未因此而提高,就像千百年 来用惯锄头和镰刀的农夫,很少有人会想要去学习、改进自己使用的工具和习惯,甚至对于新兴的思潮和方法抱有非理性的抵触情绪。生活如此悲惨,却又如此不思 进取,和农民的问题很相似。再加上,就好像城里人眼中的乡下人一样,程序员们木讷、邋遢、缺乏情调、土。可偏偏又自负而且互相看不起。总而言之,在中国做一个程序员,很少有什么事情能让人觉得自己从事的工作很体面。那么,在整个社会以自嘲为风尚、许多行业都喜欢好勇斗狠地自轻自贱 的状况中,使劲贬低自己的职业,自嘲和群吵时,就不会有什么心理包袱。不过,就好像黑人可以自称或者互称“黑鬼”,但是白人如果敢讲立刻会惹祸一样,喜欢 以此自称的程序员并不见得能容忍其他人这样称呼自己。最后,英语有类似的说法,将带有隔断的办公室叫做cube farm,常见于传统的软件公司。以讽刺(但不限于)软件公司日常生活为主题的漫画Dilbert就有不少格子办公室里的场景。不过cube farm说的并不是程序员们像农民,而是说他们像地里的庄稼或者果树,产出成果,等待收割。毕竟,欧美发达国家的农民生活往往比程序员更好。高收入,农机 劳作,大片的私有土地,宁静的田园生活。农民的生活在那里,如果不是令人向往,至少也并无贬义。补充:本版同文所说的code monkey在英语中的语用,与“码农”在中文里的用法并不一样。code monkey是指以计算机程序员或者那些以编码为生的人。这个术语可能包含轻微的贬义,这意味着开发者可能编写代码,但不能执行复杂点的任务,比如:构建软件结构、分析和设计,一般指初级程序员。如果一名code monkey正在努力增加知识和提升职业技能,那么会有另一个等级名词赋予他。其实code monkey这个术语在层次划分上还是有点困难的,因为像那些真正熟练的开发人员或程序员他们仍然在做编码工作。或许像这样划分会好一点:coder:编码员programmer:程序员software engineer:软件工程师software analyst:软件分析师software architect:软件架构师或许还可以在前面加“初级”、“中级”、“高级”这几个前缀。这些都反映了一定的等级、技能水平和薪资。请注意:它只能在小范围确定的某种层次结构,例如在一个公司、甚至一个部门。一个在A公司工作的“程序员”可能比B公司的中级架构师所要求的技能更多。下面是关注前端技术的邓陈华同学的回答:首先, 问题的题目”“是有一定的可辩论性的,因为我所了解的事实是,大多时候是“中国的程序员自称为码农”,很少有不同行的人 称呼程序员为“码农”。当然,可能和我所处环境有关系。认可涛吴所说的“自称码农的程序员并不见得能容忍其他人这样称呼自己”,因为这就像他所举的例子, 黑人允许自称,但不允许白人称呼,同样的词在熟人说来是亲切、是自嘲、甚至可以是自讽,但在外人说来,那不仅是不尊重,还有可能是侮辱。其次,身处互联网行业,程序员工作辛苦,加班再正常不过,项目进度、突发情况、公司文化都可能成为加班的理由,虽然收入不一定差,但够苦逼。另外一 方面, 程序员鱼龙混杂,水平参差不齐,而互联网向来是一个强调能力的开放行业,有多少能力就拿多少工资,这样注定有相当大一部分因为水平不够,导致收入问题成为 “码农”的心病。而“ 工作辛苦”、“收入低”和农民有类似,所以无论自嘲或者是被别人冠以“码农”的称谓,辛苦、收入低这两个标志包含其一的可能性非常大。如果两者兼有,那就是纯种‘码农’一枚,够苦逼。当然,还有第三种情况就是像赵劼姐夫这样,“弹钢琴的码农”,已经做“码农”做到一种境界,并不一定强调其辛苦、更不会收入差,以“码农”调侃的口 吻戏谑人生,这个心态和大家自称屌丝是一样的,更多的自嘲自讽。其实,这样收入高而且相对不这么辛苦的精英“码农”在行业内也不少。下面是在读研究生吴洲提供的,来自图灵中文社区电子杂志《码农》第一期的首卷语:《所谓码农》一文的解释:对于“码农”这个称呼,有些人喜爱有加,有些人不以为然。区别在于对待“农”这个字的感觉。农当然是指农民,这个词寓义很丰富,既可以说它伟大,也 可以说它渺小。说它伟大,是因为我们的生存离不开农民,而且中国一直是个农业为本的国家,曾经说是百分之八十的人是农民,这意味着往前翻?两代,你我众人 皆是农民出身。以此观之,农可谓大哉。说它渺小,则是因为大家的观念里,农民意味着有很多缺点,冠冕堂皇的说法是劣根性,比如目光短浅、思维陈旧、自私小 气等等,总之是为我们受过教育的人群所看不惯的种种毛病——这些毛病虽然我们自己也有,但是我们看不见——于是乎“农民”成为了骂人时常用的字眼。其实,把自己的编程生涯与田间地头的锄禾日当午对应起来,确是有那么些相似之处的。你能想象得到,田间整齐栽种的秧苗,与屏幕上显示的错落有致的代 码行有几分神似。各种庄稼的种植是有讲究的,正如你要注意编程风格。施肥灌溉,犹如你对代码进行的编译链接。除草除虫,自然是在做着debug 。你挑水来我浇园,大概是在小菜园中进行的结对编程。因为靠天吃饭,农民们也要学点云计算,去五道口职业技术学校进修的人也多起来了。收割的季节,活多人 少,也常常是要搞外包的,因为deadline 很重要。不过坦率地说,“码农”这个叫法让人体会更多的是滑稽、搞怪、无厘头。毕竟一个是简单的体力劳动,一个是高智商的脑力劳动,不可同日而语。而程序 员却偏爱这样的时空错乱的感觉,自嘲(我就是个农民!)的同时却又自命不凡(我是码农我怕谁?!),特立独行极了。码农的草帽底下,是一颗充满创造力的自由不羁的头脑。他们遵从最佳实践而痛恨陈规教条,他们欣赏天才而不迷信权威,他们喜欢思考而不轻易苟同。他们 是技术人,却追求人文理想;他们敢于呐喊,说出自己的观点和主张,也更善于脚踏实地,用自己的点滴工作去改变现状。码农们是勤奋的,加班加点的工作是常有 的事情,城市夜间的灯火,有多少是在码农们的办公室和居所点燃?周末四处举办的技术交流和讲座,又活跃着多少码农的身影?线下读书,线上讨论,冥思苦想, 动手实践,新技术驱动着码农们的脚步,码农们在改变着我们的生活。生存离不开农民,生活离不开码农。各位“码农”,你们是如何看待这个称呼的呢?对于上面几位大牛的观点,你们有啥想说的?不妨和我们分享一下吧!