信息技术的更新速度是惊人的,程序员的职业生涯则是一个要求不断学习的过程,永远不能固步自封。本人在工作期间曾看见过很多程序员只要有闲暇时间就浏览一些没有太大作用的网页,在网上聊天,打游戏,浪费了大量的时间,十分不可取。而另外一种情况是,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
现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
第七种武器:强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在
在腾讯将近20年的发展史上,有过几次决定命运的重大产品创新,如QQ秀、QQ空间及微信,这几次转折点的决策皆不是来自高层调研的结果,而是出自中基层的自主突破,这得益于马化腾一直推崇的内部赛马机制。
2002年8月上线的QQ新版本呈现给用户一项全新的功能——QQ群,它为QQ用户中拥有共性的小群体建立了一个即时通信的平台。
这项功能的开发,是腾讯在即时通信领域的一个突破性创造。它彻底改变了网民维系关系链和在线互动交流的方式,标志着社交网络概念在中国出现,比Facebook足足早了18个月。
群聊功能让QQ用户的活跃度得到惊人的提高,但是,随之而来的问题是:如何让这个日渐成型的虚拟社区具有人格化的特征,更进一步,如何创造它的盈利模式。
此时,市场部新入职的产品经理——许良,正在研究韩国一个名叫sayclub.com的社区网站。该网站开发的“阿凡达”功能,可让用户根据自己的喜好更换造型,购买道具,很受年轻人欢迎。一年之内,付费用户从6万人增长到150万人,平均每位用户购买道具的月均支出接近人民币5元。
许良经过深入调研,识别出了市场的机遇与挑战,以及相较于竞争对手腾讯的优劣势:
许良得出的结论是:对“阿凡达”这个市场而言,腾讯比任何其他公司都具有先天优势!腾讯可以利用“阿凡达”技术和“阿凡达”形象系统将整个腾讯社区重新整合,最终使腾讯社区变为一个大规模的模拟现实的在线社区或虚拟游戏平台。
虽然许良来自市场部,上新产品是研发部的职权,但是听完他逻辑缜密的项目建议书,管理层一致同意项目启动,任命许良担任“阿凡达”项目组负责人,并抽调3名程序员和1名美工给他。
QQ秀大获成功,上线半年,就有500万人购买了这项服务,平均花费为5元左右。它让一个网民在虚拟世界里重建了一个虚拟的自己和表达情感的方式。
而项目之所以能快速通过并顺利实施,离不开腾讯内部与工程师文化相交融的产品经理制,它突破了传统意义上的部门边界。QQ秀的成功也奠定了赛马制的基础,此后,“ 谁提出,谁执行 ”“ 一旦做大,独立成军 ”成为腾讯内部不成文的规定。
华为的掌门人任正非在他的《管理的灰度》一书中提出这样一种理论:
一个企业的清晰方向,是在混沌中产生的,是从灰度中脱颖而出的,方向是随时间与空间而变的,它常常有会变得不清晰。
他认为,“清晰的方向来自灰度。一个领导人重要的素质是方向、节奏。他的水平就是合适的灰度,坚定不移的正确方向来自灰度、妥协与宽容”。
马化腾素来敬重这位同城的前辈,对任正非的灰度理论也深表认同,并在此基础上,结合互联网公司的特征,从7个角度给出了他的诠释,它们分别是:
- 需求度
- 速度
- 灵活度
- 冗余度
- 开放协作度
- 进化度
- 创新度
很多企业听到“冗余”这个词都觉得反感,首先想到的应对策略就是“精简部门”“裁员”“压缩成本”等等。这是传统制造型企业的思维逻辑,但对于互联网企业而言,创新是其生命力,而要鼓励创新,就要容忍失败,允许适度浪费,鼓励内部竞争,不断试错。
说到这里,又要拿微信举例。
当年,在腾讯内部有几个团队同时在研发基于手机的通信软件,每个团队的设计理念和实现方式都不一样,最后是QQ邮箱系统的张小龙团队开发出的微信最受用户的青睐。由此,微信团队得以不断壮大,现在已成为一个独立的事业部,而同期的其他团队则拆散重构,被吸收进新的团队,开发新的产品。
这就是互联网企业内部的生存法则,组织和人员始终处于一种动态的平衡。或许在外人看来,这种内部竞争是一种资源的浪费,但在决策者眼中,这种内部试错是激发成功者灵感的源泉,不创造各种可能性就难以获得现实性。抓住机遇比花费资源更重要,这就是“ 内部赛马机制 ”带来的面对竞争时该如何取舍的智慧。
一种机制没有绝对的好与不好之分,需要根据身处的行业以及特定的发展阶段来选择适合自己的。腾讯的成功或许不可复制,但是每一项决策背后的思考过程却值得借鉴。以下这段话出自柳传志,作为本篇的收尾,
一名合格的程序员需要掌握哪些技能呢?\x0d\x0a\x0d\x0a熟练掌握开发工具\x0d\x0a\x0d\x0a做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVA One很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。\x0d\x0a\x0d\x0a熟知数据库\x0d\x0a\x0d\x0a为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库 *** 作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。\x0d\x0a\x0d\x0a对 *** 作系统有一定的了解\x0d\x0a\x0d\x0a当前主流的 *** 作系统是Windows,Linux/Unix,熟练地使用这些 *** 作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解 *** 作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的 *** 作系统,是一个很好的学习平台,Linux几乎具备了所有现代 *** 作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对 *** 作系统有一定的了解后,你会发现自己上了一个新的台阶。\x0d\x0a\x0d\x0a懂得网络协议TCP/IP\x0d\x0a\x0d\x0a在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。\x0d\x0a\x0d\x0a明白DCOM/CORBA/XML/WEB Services存在的意义\x0d\x0a\x0d\x0a随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。\x0d\x0a\x0d\x0a不要将软件工程与CMM分开\x0d\x0a\x0d\x0a现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。\x0d\x0a\x0d\x0a拥有强烈的好奇心\x0d\x0a\x0d\x0a什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)