怎样才能做程序员(怎么样做程序员)
怎么成为一个好程序员?
随着计算机行业的发展,市场上程序员的数量越来越大,很多人开始转行学习软件开发,这就导致程序员开始分为三六九等。怎么才能成为优秀的程序员呢?程序员不仅需要掌握开发技能,职业素养也是非常关键的。那么作为程序员需要具备哪些素质呢?下面小编为大家具体介绍。
一、团队精神和协助能力
协助是一个团队里面不可或缺的精神,这是一种互相信任的无私奉献,在任何团队中,团队里面的队员都是互补的。对于一名优秀的程序员来说,他知道团队的力量是远远超过一个人的力量。在工作中没有个人主义,团队不仅强调个人的工作结果,更重要的是强调团队的整体表现。团队不仅依赖于头脑风暴和决策,还依赖于其成员的贡献。我们都知道一根筷子容易折,一把筷子难折断,这就是团结的力量。
二、求新求精
优秀的程序员善于寻求新的想法,并且能够对新技术充满更多的好奇心。
三、条理清晰
毫无疑问,优秀程序员解决问题的想法特别明确,事情能够有条不紊的进行。对于很多程序员来说,编写代码是一种能够使人非常幸福的过程。
四、书写注释和文档能力
很多人认为编程就是写代码,其实这种想法是非常片面的。软件开发主要是由代码和文档组成的,一名优秀的程序员,不仅需要写好代码,还需要具备很强的注释和文档书写能力。注释和文档是非常重要的环节,如果在写代码的过程中没有进行注释和文档,后期进行代码修改和调整是非常困难的,并且还会出现很多麻烦。程序员不仅需要具备编写代码的能力,在学习中掌握注释和文档也是非常关键的步骤。
如何成为一个程序员?
一个程序员应该具备的基础知识和概念:
1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。
2、机器语言和微指令集的概念。
3、程序的概念。
4、汇编语言是低级语言但不是机器语言。
5、高级语言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语) 6、编译程序和解释程序的概念和其原理。(编译器是高手和专家编写的)
7、HTML、XML等是标识性语言。
8、Prolog是人工智能语言。
9、操作系统OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)
10、Windows编程说白了就是Windows API的调用。(中国的程序员很多只是会编windows程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是编程的工具和环境,不是编程语言。
12、面向结构的设计概念。
13、面向对象的概念。(好好理解,兄弟,这个东西还是很重要的)
14、软件工程的概念和原理。(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)
15、数据库的概念。(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解网络概念。
17、了解多媒体概念。
18、熟悉和掌握数据结构和基本算法。
怎样成为一个好的程序员?
学习能力:互联网是一个日新月异的行业,所以对于码农来说,一定要具备不错的学习能力。学习能力一般会从两个维度来看:学一个新事物的能力,从经验中学习的能力。学习新事物的能力,不同面试官考察会很多。可以从项目中用到哪些新技术,怎么学的;或者让候选人介绍自己学某个东西的过程,从这个过程中考察候选对新事物的接受程度,学习的一些思路。我个人更喜欢考察从经验中学习的能力。比如这个项目,如果现在给你时间和资源,重新开始做,你会有哪些优化的方案?为什么?码农很多的经验都是从实践中来的,那实践之后有没有及时总结思考,是直接决定这个人成长速度的关键。
团队协作:前面说过,我们做的事情不是原子弹实验室,是需要高度团队合作的。那面试中一定绕不过去的就是团队协作能力的考察。比如你有没有自己做过项目负责人?做负责人中都出现哪些问题,怎么协调的?如果你是一个APP开发,那跟后端接口怎么协商,改接口怎么处理,各种校验逻辑放在客户端,还是服务端如何PK?产品改需求,怎么处理?项目中你的方案被别人否了,怎么处理?这些问题都是考察候选人在多人合作中出现问题,能否换位思考,能否有大局思维,以及一些基本化解冲突的经验和技巧。
抗压能力:码农是一个非常烧脑的行业,特别是线上出问题的时候,一定是血压飙升的时候,所以抗压能力也是考察的一个重要维度。抗压其实就看这个人为了一个目标能不能排除万难,坚持下去,在某种程度上你过去的经历可以体现你的抗压能力。比如卫哲老师有一次分享,说问一个小孩,你这辈子最苦的事情是什么?人家说有一次从杭州到上海的高铁,居然没有座位,我整整占了1个多小时……这样的人我肯定不敢要。所以面试中,面试官会经常问你做过一些有困难的事情是什么?或者举例说下自己如何坚持做一件事的。
综合能力包括的面很多,比如我一直觉得优秀的人一个基本素质一定主动性,这是贯穿整个综合面试中最重要的一个素质,可以从项目中看到你是否在积极推进项目进度,可以从你学习经历中看你是否主动思考,可以再抗压考察中看到你能主动排出万难,达到目标。任何一家公司都不希望找一个只是被动等待分配工作,做好分内事情的人,一定希望这个人能有全局思维去推动事,还能不断自我学习和总结。
此外,有的面试官会关注思维能力,比如我曾经校招面试时,就被问到一块蛋糕切成18份,至少需要切几刀?这个是见仁见智的一些考察方面,不做评价。OK,码农除了技术之外的基本能力模型和素质:沟通能力、学习能力、团队协作能力、抗压能力,以及最最重要的主动性。
零基础的人怎么才能成为一名程序员呢?很难吗
如果想通过自学成为一名程序员,通常需要经过三个阶段,分别是基础知识学习阶段、案例学习阶段和实践阶段。
基础知识学习阶段要至少积累三大块知识,其一是编程语言基础,其二是操作系统基础,其三是数据库基础。
在选择编程语言时,尽量选择一门全场景编程语言,比如Java就是不错的选择。
目前Java的开发岗位相对比较多,而且人才需求类型也比较多元化,非计算机课班出身也有机会拿到不错的offer。
在学习编程语言基础的过程中,要同步学习操作系统和数据库知识,一定要在学习理论知识的同时多做实验,通过大量的实验来理解抽象概念。
案例学习阶段是比较重要的阶段,由于当前有很多开源案例可以参考,所以这个阶段的学习难度也有所下降,但是案例的代码剖析依然有较大的难度,对于自学者来说,有时候即使拿到了源代码,往往也会感觉无从下手。
第三个阶段是实践阶段,这个阶段对于自学的同学来说,难度往往是最大的,因为自学通常并没有参加实践的渠道,而对于职场人来说,参加实践的难度就更大了。
考程序员需要什么条件
程序员需要本科以及以上学历,具体招聘条件是:
1、21至28周岁;
2、熟悉数据库,精通SQL和数据结构;
3、具备良好的沟通合作技巧和团队合作能力。
学历太低对于编程影响还是非常巨大,特别是在涉及到一些复杂算法上,如果没有数学基础学起来将会非常大,一个算法就能折腾很长时间。如果英语不行对于读取文档影响也是非常巨大,不能读懂原汁原味的文档也会降低学习的效率。
理论上高中以上学历就能学习编程,但并不意味着学历具备了直接去做编程就是做好的选择,作为一个做了十几年的程序员,现在还怀念着大学时光,因为等工作之后再去弥补知识需要挤时间,而且如果在成家立业之后再去挤时间显得更加费劲,所以如果有深造机会就不要犹豫,直接去选择深造。
编程主要讲究一个编程基础和编程意识的修炼过程,编程基础里面本身就包含着学历方面的因素,但并不是最主要的,基础的磨炼是一个长时间的过程,所以可以用时间来弥补,用刻苦来弥补。
程序员的基本要求是啥?
程序员是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、中级程序员、高级程序员(现为软件设计师)、系统分析员,系统架构师,测试工程师六大类.
岗位职责
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。
7、负责相关技术文档的拟订。
8、负责对业务领域内的技术发展动态进行分析研究。
职业要求
一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的。
大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位。还有很小一部分程序员是自学的,尽管一些专业性的学校或者综合大学可以提供,但是也需要一些别的途径来提供相关的人才。尽管学历是比较重要的,但是公司经常把重点放在应聘者的工作经验上,很多刚从大学毕业的大学生虽然有引人注目的学位证书,但是他们找不到工作是因为他们缺乏经验。一个程序员虽然没有正规的学历,但是如果一个人拥有程序设计的深厚知识背景或者丰富的工作经验的话,那么他的机会要比有学历的应届毕业生大得多。所以要尽量抓住有用的工作和实习机会,这样的话在毕业后你就会发现,多实习让你有更多的经验,在找工作的时候就有更多的机会。
对于职业程序员,另外一个重要的方面就是,程序员需要不断提升自己的业务技术,他的技术必须一直保持在一个较高的水平,并且要不断发展,程序员也要寻找贸易的机会,要参加研讨会,在周刊上发表文章和接受职业教育,这些使程序员在自己的领域中分级或者不断并排前进。
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
模块化思维能力作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。