顾名思义编码农民,特别是在当今工业化的快速发展,越来越多的依赖计算机应用在各行各业,紧随其后的是社会需要很多的基础编码的农民工,他们有聪明的大脑,对于编程,设计,开发,和熟练的技术,但随着雇主的追求更好的利润,他们的生活时间很紧,加班很正常,所以相应的建设农民工相比,他们的地位与农民工远远优于相比,人类已经开始逐渐从手工转向抽象劳动,但高劳动强度和劳动在某些情况下,他们投资的回报是成比例的,业内人士用来关注程序设计工作被称为代码农民。
但随着时代的变迁,互联网公司里许多最英俊的IT工程师都在自嘲。他们更多的是为IT精英们提供高学历、高收入,很多人在企业中担任高级建筑师和高级工程师,因为他们热爱自己的编程并坚持编写代码的习惯,所以被称为“代码”。此外,大型互联网公司的总部位于城市边缘的开发区,如北京上地、深圳科技园等,所以它是“农业”的自我贬抑。
农民在另一方面,它的“代码”是一种高ShuaiFu自嘲,例如,北京上地附近的房地产销售和客户经常开玩笑地说:农民炸这里的建筑比在城里的码是昂贵的,和代码农民邻居最舒适,代码农民质量最高,等等。比尔?盖茨(Bill Gates)和马克?扎克伯格都是富人和富有的代表。
⑵ java程序员怎么成为大牛,有哪些可以深耕的领域
1、成为大牛,基础要很扎实很扎实。不能小看基础,很多流行的框架什么的,其实都是从基础起来的,你理解了基础,很多东西都可以理解的。
2、多读源代码,官方的。有问题,直接找官方,最快最佳最直接。
3、有一定的条理,做事情,就是要有条理性,会分解,把复杂的问题简单化。简单化,就是0和1一样的简单的那种。
可以深耕的领域,其实,这个看你目前所在的行业,做自己熟悉的最好,java目前比较适合的是后台、金融、互联网方面。
⑶ IT大牛是怎样炼成的
对于软件开发人员来说,无论男生女生,通常,他们职业发展有几个选择:专注于技术,成为技术专家;转型到技术型销售、技术支持等;所以要想走得远一点,必须有一项本领是过人的。
随着技术成长,从技术性管理到高级管理。这是大家都看得清楚的方向,也都在向这些方向的金字塔尖努力。
程序员要根据本身的基本素质、技术能力选择开发层次,由低到高,逐步发展。 也是一名程序员本身具备相应素质的循序渐进的发展轨迹,包括很强的技术背景和综合管理才能等素养,这也就是所谓‘两条腿走路’的职业规划发展路线。”
所以无论哪个行业都是需要不断的学习
希望可以帮到您,谢谢!
⑷ 网站程序员的程序员成长之路大概分几个阶段 和未来的发展
信息技术的更新速度是惊人的,程序员的职业生涯则是一个要求不断学习的过程,如何才能成为一名合格的程序员,一名合格的程序员需要掌握哪些技能呢?为此天天招生网采访到几位孳生的程序工作人员,就如何做好一名成功的程序员谈出了自己的经验。
熟练掌握开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C和JAVA是重点推荐的开发工具,C/C以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVA One很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
对操作系统有一定的了解
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
懂得网络协议TCP/IP
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
明白DCOM/CORBA/XML/WEB Services存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
不要将软件工程与CMM分开
现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
拥有强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
如果您正为如何成为一名合格的程序员而发愁的话,希望以上文字能为您排除一些顾虑和问题。如果您想获得更多有关程序员的信息,那么请随时关注天天招生网,我们将在最短的时间内提供最
真实,最准确的相关信息。
⑸ 初级程序员怎么逆成大牛
1首先是定位,知道自己所处的阶段,自己的长处和短处,其次是设定目标,看看差距多远
2其次,看看其中的差距如何通过努力获得
其中可以多看看大牛们分享的成功经验,他们的学习方法,思维方式,处理问题的出发点等
做程序员有点和其他岗位区别很大的就是,你要有独立思考的能力,不能总是controlC control V,要有自己的想法。
3坚持多学习最新和最前沿的知识,对待现有的工作要有专研的精神。
4、现有的工作除了从程序员的角度出发,也可以跳出程序从产品的角度出发思考问题,对于自己的程序的逻辑更有帮助。这样也可以避免操作中出现bug的概率。
总之,做任何事情都不是一蹴而就,一定要即努力又要有办法。
希望能帮助到你
⑹ 技术大牛是如何炼成的
如果回答对楼主有帮助,给个采纳好不,谢谢啦
破仑说:不想当将军的士兵,不是好士兵。无论你在做开发、测试、运维,你都是一个技术人员,而我相信,每个技术人员的心中,都有一个成为技术大牛的目标,这个目标鞭策着每一位有梦想的人,去努力和改进自己。 梦想总是在现实面前有过一度的彷徨,因为你会发现,真正的工作和心中的理想状态天壤之别,不是一码事。当你面对的是,天天加班写业务代码,每天都有执行不完的测试,扛机器接网线敲shell命令,你也许会怀疑,这是我想要的人生吗?接下来,就让我们带着疑惑,去寻找答案!三大误区误区一:拜团队技术大牛为师,给你开小灶首先,不可否认,大牛的确有能力将你锻炼培养成另一位大牛,但是,无论是单独给你开小灶,还是培训整个团队,时间成本消耗过大,因此,一般没有大牛愿意这样做。其次,很多人都认为不懂就问是个好习惯,但是你忽略了很多问题大牛是不屑回答的,比如像“jvm的-Xmn参数如何配置”这种上网能找到答案的问题,只会浪费他人以及自己的时间。最后,大牛是个极具小众的群体,因此,直接请教和辅导的机会非常少,即使有幸参加过几次真正大牛的培训,也不太可能让你嫣然一变,成为技术大牛的。总而言之一句话,以自己为主,系统且有针对性的进行学习;然后再以请教学习为辅提升自己。误区二:不断重复,停滞不前首先,要认清一个事实,写不好业务代码和只把业务代码写好的程序员,在技术大牛的世界里,没有什么本质的不同。如果光是沉浸在一个基础技术里积累学习,那么毫无疑问,这是你的惯性和惰性在束缚着你前进,打破它,不断向更大的挑战迈进,最终成为他人眼中的大牛。误区三:大环境的不公与碎片化时间首先,大多数人都在抱怨中国的环境对于自己可能性的扼杀,并认为很多本来能成为大牛的人才被现实埋没,不可否认,这个理由具有一定的客观性,因为环境的确可以改变一类人的发展和命运。但是,如果我们转过身来自问,是否自己真的已经倾尽全力?我相信,总是存在一些人,借着社会不公的理由,给予自己偷懒的借口;毕竟,大牛还是会有的,万一就是你呢?其次,如果你抱怨现如今社会的碎片化时间,不能有整段时间提供自己深入学习,那么,是否先改变自己的一个观念,那就是碎片化时间也可以深入学习。而未来,利用碎片化时间学习将可能成为一种趋势。正确的做法1、尽量多的尝试当你每次都做得更多,随着时间的发展,将会是这样,产品讨论需求找你、测试有问题也找你、老大对外支撑也找你,于是,你就成了这个系统的“专家”了。要想有机会,那就得与众不同,努力做到更多。怎么做得更多呢?可以从以下几个方面着手:1)熟悉不止你负责的更多业务,熟悉不止你写的更多代码。好处:需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速地判断问题可能的原因并进行排查处理方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案2)熟悉端到端比如说你负责web后台开发,但实际上用户发起一个http请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx等),服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的,但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术水平。3)自学一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少,但我们要明白“唯一不变的只有变化”,框架有 可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人。以java为例,大部分业务代码就是if-else加个数据库操作,但我们完全可以自己学些更多java的知识,例如垃圾回收,调优,网络编程等,这些可能暂时没用,但真要用的时候,不是google一下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。2、尽量做到更好世界上没有完美的东西,你负责的系统和业务,总有不合理和可以改进的地方,识别这些“不合理”和“可改进”的地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,机会,就是自己去争取和把握。例如:重复代码太多,是否可以引入设计模式?系统性能一般,可否进行优化?目前是单机,如果做成双机是否更好?版本开发质量不高,是否引入高效的单元测试和集成测试方案?目前的系统太庞大,是否可以通过重构和解耦改为3个系统?阿里中间件有一些系统感觉我们也可以用,是否可以引入 ?3、尽量动手实践光看不用效果差例如:学习了jvm的垃圾回收,但是线上比较少出现FGC导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些jvm的知识和技能呢?Netty我也看了,也了解了Reactor的原理,但是我不可能参与Netty开发,怎么去让自己真正掌握Reactor异步模式呢?看了《高性能MySQL》,但是线上的数据库都是DBA管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?框架封装了DAL层,数据库的访问我们都不需要操心,我们怎么去了解分库分表实现?怎么办?1)系统化的学习这个是第一阶段,看书、google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如JVM原理、Java 编程、网络编程,HTTP协议等等,这些基础技术不能只通过google或者博客学习,一般做法是先完整地看完一本书,有了全面的了解,然后再通过google、视频、博客去有针对性地查找一些有疑问的地方,或者一些技巧。2)自己动手丰衣足食这个步骤就是解答上文提到的疑惑,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:Jvm垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种jvm启动参数,再运行的过程中使用jstack、jstat等命令查看jvm的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行。Reactor原理:自己真正去尝试写一个Reactor模式的Demo,不要以为这个很难,最简单的Reactor模式代码量(包括注释)不超过200行(可以参考Doug Lee的PPT)。自己写完后,再去看看netty怎么做,一对比理解就更加深刻了。MySQL:既然有线上的配置可以参考,那可以直接让DBA将线上配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建一个MySQL环境,用线上的配置启动;要知道很多同学用了很多年MySQL,但是连个简单的MySQL环境都搭不起来。框架封装了DAL层:可以自己用JDBC尝试去写一个分库分表的简单实现,然后与框架的实现进行对比,看看差异在哪里。用浏览器的工具查看HTTP缓存实现,看看不同种类的网站,不同类型的资源,具体是如何控制缓存的;也可以自己用python写一个简单的HTTP服务器,模拟返回各种HTTP Headers来观察浏览器的反应。3)交流分享,发现自己的不足之处。与人交流分享,既需要我们将一个知识点进行系统化的梳理,并且考虑各种细节,这会促使我们进一步思考和学习。同时,听的人可以有不同的理解,或者有新的补充,这就令知识技能体系变得更加完善。后记无论结果怎样,当我们谈论过程的艰难与乐趣之时,是否可以不去计较自己是否付出太多?因为一个真正热爱技术的人,只会勇往直前,不忘初衷,坚持到底!
⑺ 如何成为一个杰出的程序员或软件工程师
信息技术的发展时间虽然不长,但其爆炸式的发展速度使信息技术迅速覆盖社会和人类生活的各个角落。程序员们是这场信息化浪潮的见证者之一,更是其中的主要参与者,这是时代赋予每个程序员的机会和责任。信息技术的更新速度是惊人的,程序员的职业生涯则是一个要求不断学习的过程,永远不能固步自封。本人在工作期间曾看见过很多程序员只要有闲暇时间就浏览一些没有太大作用的网页,在网上聊天,打游戏,浪费了大量的时间,十分不可取。而另外一种情况是,IT技术的日新月异使很多程序员眼花缭乱,什么都想学,却又不知从何学起,今天看看这个,明天学学那个,贪多不熟。虽然IT技术发展迅速,但很多技术都是有规律可循,一些基本的概念、原理和方法还很通用,可以举一反三。本人根据自己的体会和经验,向那些刚刚踏入IT行业的新程序员们或正在迷茫的程序员们推荐程序员必须掌握的七种武器,有了这七种武器,虽不敢说笑傲江湖,但将自己立于不败之地还是可以的。第一种武器:开发工具至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是我重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而本人对SUN公司的“网络即计算机”的概念相当欣赏,并相信JAVA即其相关的技术集JAVA One会成为未来的主流开发工具之一。其次,如果能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C++ Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。第二种武器:数据库为什么数据库是如此重要?很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。第三种武器:操作系统当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。第四种武器:网络协议TCP/IP在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。第五种武器:DCOM/CORBA/XML/WEB Services随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间件平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。第六种武器:软件工程与CMM现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
⑻ 天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码
一个产品业务的开发过程中必然存在很多需要解决的问题,比如 崩溃,死锁,性能低下,延迟高,服务器不稳定,数据丢失,某些功能不知道怎么实现。
产品业务如果要成功,这些问题必须要解决,至少解决其中绝大部分。
谁解决这些问题谁就是大牛,你想去写业务逻辑公司也舍不得。
遇到这种问题直接退缩或者推给别人,就写一辈子业务逻辑吧。
问题就是机会,你主动去解决问题,你没搞定别人也没搞定啊,万一搞定了就是你牛逼,多划算的买卖啊。
以我多年解决问题的经验来看,其实大多问题并不难,只需要认真去google下跟踪调试进源代码深处就能解决,这种问题其实就是谁敢上谁就行。很多人不去解决,就是因为懒和怂。问题解决多了,就会越来越有感觉,别人也就更倾向把疑难杂症交给你。所以一个组里只有一两个人能成长起来,因为只要有一个人成长了其它人就失去了机会,并不是这一两个人比其他人优秀很多,只是他们是第一个敢于主动迎难而上的人。
要不怎么说,性格决定命运呢。
⑼ 史上最牛的程序员到底有多牛
听说的~~
很久以前,那还是我用win98的时候有次我系统崩溃了,因为我是电脑白吃,我朋友给我介绍了一个高手来帮我修电脑。
他看了一下电脑,问我有没有98的盘,我说没有。
他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。
他把电话线空着的一头接在电脑的一个插孔内,然后进入了dos,然后就开始在电话上不停的按着键,他按键的速度非常快,但是只按0,1两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键,我渐渐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。
醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在98里面调试,过了一会儿,他说,你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98系统,我后来问我朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯....
⑽ 一个程序员所要经历的步骤
程序员应具备的12种能力
毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基础。写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考。我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去。如果真的不喜欢这个职业,也该尊重这个职业,尊重自己,赶紧改行。
1. 编程语言能力
不用多说,作为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸淫。
2.编码能力
我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的。就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,心想做完这个项目,就拍拍屁股走人了,缺少最基本的职责素养。我经常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你自己的孩子,你能不仔细呵护吗?你是称职的父母吗?这是我编写的一个Java编码规范,供大家参考,这里可以下载http://gurudk.javaeye.com/blog/111734
另外一个就是注释,要注意不是为了注释而注释。对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。
思维的条理性,写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。安安静静把实现过程想清楚,在脑子里先实现一遍。再去敲代码,水到渠成。
3.面向对象思维能力
如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对继承,多态,重载的理解。对面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该掌握常用的设计模式,比如工厂模式,策略模式,观察者模式,模板方法模式,命令模式等等。我面试过很多程序员,没有一个能说得上几句的。
4.利用工具能力
工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。
另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。
经常上互联网,看到好多好的资料想保存下来,作为日后查看之用.一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了得乐书签(del.icio.us)的firefox插件,非常方便,现在成为了我必备的一个工具。
还有一个最重要的工具就是搜索引擎了,我装了google forfirefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用,外事用google。很多技术资料都是英文的,用google搜索效率高一些。搜索引擎用好了,就等于打开了一扇通向知识宝库的门,使用搜索引擎,关键字选择很重要。
经常去浏览大牛的blog,逐个网站访问很麻烦,去看了又可能没有更新,可以借助于RSS订阅工具,我是用iGoogle桌面工具,每天早上花半个小时扫一下,大牛的最新文章尽收眼底了。
5. 英语能力
新的技术资料都是英文的,英语国家的IT技术走在我们前面至少10年(这是我自己估计的数字,可能正在缩小)。就连印度,一个连基础设施建设都不太完善的国家,因为其英语基础较好,其在软件外包领域的发展也非常迅猛,远远超过了我们。学英语,首先是有信心,其次就是花时间。多阅读英文资料,使用金山词霸,google的firefox插件等工具配合,贵在坚持。
6.学习能力
在IT也混饭吃不容易,整个环境进化的太快,你不学习,就等于落后了。学习要有针对性,别今天学ruby,明天学python,后天php的。首先要认清自己的目标,自己短期目标是什么,1年后,3年后,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。
要想系统的学习一门技术或工具,看书是最好的方法。看完后,然后上网找相关资料,进行深入学习。学习要抓紧一切可以利用的时间,比如电脑启动要花1分多钟,旁边放一本书,可以看上几页了。公交车上,地铁上也可以看。
当然,不能只学习技术,要经常联系自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。
我学一样东西,总是先上网了解有没有相关书籍,如果想学,就买一本或者去图书馆找相关的书来读。我买的书,家里快放不下了(到目前位置,我买了1万多块的书)。我多半是把目录看完,了解这本书讲解的主要内容,然后需要的时候,我就可以立即补充它进入到我的知识结构。每个人可能都有自己的学习方法,意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。
7.创造能力
普遍认为,东方人模仿能力很强,但创造能力差。我见过很多这样的程序员,经常说,“这个只能这么解决了,我想不出有什么别的方法。”可能他根本都没想过别的方法,或者懒得去想。对任何一个问题,找出两种以上的解决办法都是非常容易的,简单的google一下,可能就是数十种。悲哀的是,有些程序员经常止步于自己构建的狭小领地之内。对待客户也是这种态度,不是积极的帮助客户解决问题,而是推脱这只是唯一解决方案。
打破这一思维定势的首先的一个办法就是在面临一个问题时,首先想到的是“没有不可能”,或是“一切皆有可能”,前面那个是阿迪的广告语,后面是李宁的。只有这样去想,才能寻找解决问题的别的出路,即使最后我们试了很多种办法,还是只有着一种解决方案,但我们在这种寻找解决方案的过程中,常常会产生很多好的想法,这样才会使我们真正深刻思考一个问题。建议大家看一看《水平思考》这本书,他提供了一些进行创造性思考的方法和工具。
但我认为,坚持认为存在另一种解决方案的信念是第一位的,方法和工具都是其次。
8.文档能力
也许有人会质疑,程序员跟写文档有什么关系。大家开源软件也用过不少,看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他么的tutorial,他们的getstarted,他们的reference文档写的多么的易懂。其实写代码也相当于写文档,只不过用的是编程语言。同样,写文档,用自然语言,也相当于写程序,简单明了,清晰易懂,这样的“程序”谁看谁舒服。同样,对于想进阶到设计师或者需求分析员角色的程序员,文档能力更是非常重要。
word是一个最实用的工具,很多程序员,多级编号都不会用,索引目录也不知道如何生成,更别灵活应用样式了。很多排版都是所谓的dirty work。垃圾样式一大堆。其实,静下心来,稍微学习一下,就能写出一篇格式漂亮的文档。
9.抽象能力
抽象能力是认识事物从现象到本质的能力。如果你只是停留在“见山是山,见水是水”的层次,客户说什么,你就做什么,设计怎么做,你就怎么实现,从来不过问为什么,也不去想他是满足了用户哪些方面的需求呢。这样可能只解决了表面的问题,可能会引起返工。认识到本质,才能让你的程序具备更大的灵活性和可扩展性。在做企业应用软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。
10.代码评审能力
代码评审和单元测试是保证代码质量的两种常用手段之一。代码评审能力,说明了你的审美标准,知道什么是好的,什么是不好的,什么是优雅的代码,什么是糟糕的代码,你才能让自己做的更好。
11.单元测试能力
没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试驱动开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。
12.DRY
DRY是一种原则,就是Don't RepeatYourself.出自《程序员修炼之道-从小工到专家》。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。
还有一个就是我们经常在不同的地方切换IP,如果每次手工做,也非常浪费时间,写一个bat命令可以解决,找一个小工具也可以解决。
编码时,对代码的复用也是在重复你自己,虽然拷贝过程很爽,但是维护一致性就要付出巨大的工作量,特别是将来维护的人不是你的时候,使用代码生成工具可以解决这个问题。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。