10月24日看似一个普通的日子,却也是一个很有意思的节日。1024是2的十次方,二进制计数的基本计量单位之一,因此每年的10月24日被大家亲切称为程序员节。

一、程序员的前世今生
很多良心企业和互联网机构一直非常关注程序员健康,针对程序员经常周末加班与工作日熬夜的情况,倡议每年的10月24日为1024程序员节,比如
兄弟网络,在这一天就是拒绝程序员加班的。
1800年,一个名字叫做约瑟夫·玛丽·雅卡尔的人,设计出人类历史上首台可设计织布机——雅卡尔织布机,对将来发展出其他可编程机器起了重要作用。
1834年,阿达·洛芙莱的朋友——英国数学家、发明家兼机械工程师查尔斯·巴贝其——发明了一台分析机。阿达·洛芙莱开始致力于为该分析机编写算法,并于1843年公布了世界上第一套算法。巴贝其分析机,后来被认为是最早期的计算机雏形,而阿达·洛芙莱得以“数字女王”之称,她的算法则被认为是最早的计算机程序。
1936年,阿兰·麦席森·图灵向伦敦权威的数学杂志投了一篇论文,题为“论数字计算在决断难题中的应用”。在这篇开创性的论文中,图灵给“可计算性”下了一个严格的数学定义,并提出著名的“图灵机”(Turing Machine)的设想。图灵被称为“计算机科学之父”。
1959年,葛丽丝·霍普创造了现代第一个编译器A-0 系统,以及商用电脑编程语言“COBOL”,被誉为COBOL之母 。
1972年,丹尼斯·里奇在贝尔实验室的工作时间里感到无聊,所以他决定制作带有花括号的C,并最终取得了巨大的成功。之后,他添加了分段错误和其他开发人员友好功能,以提高生产力。在星期天还有几个小时的时间,他和他在贝尔实验室的朋友决定创建一个名为Unix的操作系统。
1983年,比雅尼·斯特劳斯特鲁普发明了C++,写下了它的早期定义并做出了首个实现。
1994年,拉斯姆斯·勒多夫(Rasmus Lerdorf)为他的个人主页CGI脚本制作了一个模板引擎,随后采取开源化政策,被众多编程爱好者追逐拥戴都在使用的
PHP。
1995年,布兰登·艾克在周末的时候设计了一种语言,用来为世界各地的每一个网页浏览器提供支持。当初这门语言被称为LiveScript,但随着Java变得流行,他们决定将其重命名为
JavaScript。
总之,大约一九五几年之后,各种编程语言相继如春笋般出世。直至今天互联网行业的发展越发迅猛,技术的更新迭代速度更是异常的快速。
二、程序员需要具备的技能
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
4、不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
5、需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
6、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
三、程序员的职业素质要求
1、团队精神和协作能力
团队协作是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种
素质是一个程序员乃至一个团队的安身立命之本。
2、文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间用于写技术文档。没有文档的程序员势必会被淘汰。
3、规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
4、测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求
理解能力。
5、学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,只能说他是一名熟练的代码民工(码农),他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。
6、拥有强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
生命不息,学习不止!
四、程序员同事的可爱
在我们的生活中,有这样的一群人:常年如一日的单调着装,让人倍感嫌弃又想吐槽,超长反射弧和超高笑点,常常让同事冷场,略显愚钝木讷的举止,让身边的人觉得无聊又无趣……他们经常让外人觉得莫名其妙,甚至以“异类生物”相称呼,可却经常神乎其技的写几行代码,就能实现某个功能,让人仰慕不已。
他们有着,与他们的高智商极不匹配的低情商,或许他们对朋友的关心不及对工作的十分之一,却为我们“构建”出了一整个科技世界,没有程序员,我们就没有微博、微信、淘宝、滴滴、各种网页、各种APP、各种智能、各种游戏……
就是这样一群人让我们的生活悄然改变着,
以最低调、踏实、核心的功能模块搭建起这个科技世界,让我们感受着科技力量的伟大和生活的便捷。程序员就像是一个个1024,一步一个脚印,悄无声息地为世界进步贡献着自己的力量。
他们善于学习、进取心超强的人。他们总是喜欢学习、尝试新事物,求知欲望相当强。在互联网这个行业,技术的更新迭代速度很快,唯有不断学习和尝试,才能立于不败之地,人都是做自己原本不能胜任的事情中,才能快速成长。正是基于这种信念,我们常常能在程序员的身上看到不竭的激情与满满的正能量。
上一篇:什么是IPv6,以及IPv6的全网改造
下一篇:网络表情符号的前世今生