程序员基本技能及定位

> 程序员该如何定位?看这四大方向- http://mp.weixin.qq.com/s/8jMnBGEoHegQ-rMIj1C2kA
程序员的几种常见定位:
1.解决某类问题的专业人士;2.软件架构与设计;3.技术专家;4.技术传播与布道;
  聚焦到某一个领域的具体问题,那么接下来的一切都顺理成章,你会很容易就能了解到解决这类问题需要什么知识、业务、技术,然后你就可以充满动力地去学习,去准备。
  定位到大型网站的架构与设计。那你就可能去学习Java、http、数据库、分布式、云计算、大数据、Docker等各种技术,以及常见的网站架构(参考李智慧《大型网站技术架构:核心原理与案例分析》),然后到一个正在发展(或者已具规模)的电商类公司去跟着公司一起成长,铸就自己的架构之路。
  成为某一个特定技术领域的专家,建立自己的顶端优势,从而成就自己。
  如何更好地帮助初学者学会一种技术,跨越从不了解到会应用这种技术解决问题的过程。

-- 程序员一定要投资的十件事- http://codebay.cn/post/2084.html?1490750776552

一个好的产品经理懂得怎样宏观把控整个问题,让各个问题有条不紊地分阶段完成。
  能在广泛的科学技术领域出类拔萃;拥有广泛的视野,阅历宽阔、经验老到、言辞犀利,对行业动态了如指掌.
欠缺思考容易导致这样的现象:不会做设计,业务 与技术,不会面向对象设计,缺少抽象和解耦的能力;不能坚持自己的观点;不能细化一个问题解决方案(程序的设计与编码),学习与思考;它要解决什么问题,就是所谓的问题域,是我关心的吗(操作系统底层的实现);和过往解决方案它的优势在哪里,是否显著
  新技术学习的方式呢:寻找切入点(“理论不懂就实践,实践不会就学理论!”);寻找自己的兴趣点(新技术,有意思的事情);善于比较(比较是一种非常容易上手的思考方式);不断获得回馈(demo,理解某一项实现原理,联想到其它类似的实现)

-- 程序员的三观:技术观,产品观,数据观。

  技术能力(Technical capability):技术能力强的人通常都对技术有浓厚兴趣,他们会不断钻研决不放弃,最终会做出可供经验不足的工程师使用、维护和学习的解决方案。
  领导力(Leadership):有领导力的人知道怎样为自己及别人发展并保持一种目的感。他们会指出公司里及自己职业生涯中出现的问题,并且揽到自己身上最终解决掉。
  交际能力(Community/Connectedness):交际能力强的人非常希望自己成为一个大集体中的一员,有非常强的奉献意识,身上有别人(同事、客户等)无法轻易描述的个人魅力,并且存在感非常强,生活充实快乐。

  软件开发是一个跨度很大的技术工作,在语言方面,有C,C++,Java,Ruby等等等等,在环境方面,又分嵌入式,桌面系统,企业级,WEB,基础系统,或是科学研究。但是,不管是什么的情况,总是有一些通用的基本职业技能。

这些最基本的职业技能通常决定了一个程序员的级别,能否用好这些技能,直接关系到了程序员的职业生涯。很多程序新手也是因为缺少、达不到或是不熟悉在这些基本技能,所以,他们需要有老手带,需要努力补齐这些技能。而高级程序员应该非常熟悉这些基本技能,而且有能力胜任并带领其他经验不足的程序员。

下面这些基本职业技术可以用来做为对一个程序员的评估,很明显,下面的这些技能都可以用来做面试。虽然,还有很多非技术的因素,但对于评估一个程序员的技术能力来说,其应该是足够的了。

-- 下面是程序员所应该具备的基本职业技能:

基本技能技能描述
阅读代码这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。
编写程序编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。
软件设计这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。
熟悉软件工程每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段。当然,几乎所有的人都知道这些东西,但并不是每个人都很清楚这些东西。现在很多高级程序员都会混淆“需求规格说明书FS”和“概要设计HLD”。另外,程序员还需要知道一些软件开发的方法论,比如:敏捷开发或瀑布模型。
使用程序库或框架一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,都需要学会做。比如:C++中,需要学会使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用这些东西,可以让你的工作事半功倍。
程序调试程序调试是分析BUG和解决问题最直接的能力。没有人能够保证程序写出来不用调试就可以运行正常,也没有人可以保证程序永远不会出BUG。所以,熟练使用调试器是一个程序员需要具备的基本技能。
使用IDE学会使用IDE工具也会让你的工作事半功倍。比如,VC++,Emacs,Eclipse等等,并要知道这些IDE的长处和短处。
使用版本控制一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利用版本控制工具维护不同版本的软件。这是程序员需要明的的软件配置管理中最重要的一块。
单元测试单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。
重构代码每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》,每个程序员都应该读一下。
自动化编译程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样,整个开发团队可以不停地集成代码,自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。

当然,还有很多的基本技术也是非常重要的,比如,与人的沟通能力,语言的表达能力,写作能力,团队协作能力,适应变化的能力,时间管理能力,多任务处理能力,自我学习能力,故障处理能力,等等,等等,这里只是列举了和技术相关的能力,这些是程序最最最基本的能力,只要是程序员就必需要有的能力。

转载地址:http://coolshell.cn/articles/428.html

> 40条真言,希望对进阶中的程序朋友有所帮助。
1、重构是程序员的主力技能。
2、工作日志能提升脑容量。
3、先用profiler调查,才有脸谈优化。
4、注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。
5、普通程序员+google=超级程序员。
6、单元测试总是合算的。
7、不要先写框架再写实现。最好反过来,从原型中提炼框架。
8、代码结构清晰,其它问题都不算事儿。
9、好的项目作风硬派,一键测试,一键发布,一键部署;烂的项目生性猥琐,口口相传,不立文字,神神秘秘。
10、编码不要畏惧变化,要拥抱变化。
11、常充电。程序员只有一种死法:土死的。
12、编程之事,隔离是方向,起名是关键,测试是主角,调试是补充,版本控制是后悔药。
13、一行代码一个兵。形成建制才能有战斗力。单位规模不宜过大,千人班,万人排易成万人坑。
14、重构/优化/修复Bug,同时只能做一件。
15、简单模块注意封装,复杂模块注意分层。
16、人脑性能有限,整洁胜于杂乱。读不懂的代码,尝试整理下格式;不好用的接口,尝试重新封装下。
17、迭代速度决定工作强度。想多快好省,就从简化开发流程,加快迭代速度开始。
18、忘掉优化写代码。过早优化等同恶意破坏;忘掉代码做优化。优化要基于性能测试,而不是纠结于字里行间。
19、最好的工具是纸笔;其次好的是markdown。
20、Leader问任务时间,若答不上来,可能是任务拆分还不够细。
21、宁可多算一周,不可少估一天。过于“乐观”容易让boss受惊吓。
22、最有用的语言是English。其次的可能是Python。
23、百闻不如一见。画出结果,一目了然。调试耗时将大大缩短。
24、资源、代码应一道受版本管理。资源匹配错误远比代码匹配错误更难排查。
25、不要基于想象开发, 要基于原型开发。原型的价值是快速验证想法,帮大家节省时间。
26、序列化首选明文文本 。诸如二进制、混淆、加密、压缩等等有需要时再加。
27、编译器永远比你懂微观优化。只能向它不擅长的方向努力。
28、不要定过大、过远、过细的计划。即使定了也没有用。
29、至少半数时间将花在集成上。时间,时间,时间总是不够。
30、与主流意见/方法/风格/习惯相悖时,先检讨自己最可靠。
31、出现bug主动查,不管是不是你的。这能让你业务能力猛涨、个人形象飙升;如果你的bug被别人揪出来.....呵呵,那你会很被动~≧﹏≦
32、不知怎么选技术书时就挑薄的。起码不会太贵,且你能看完。
33、git是最棒的。简单,可靠,免费。
34、仅对“可预测的非理性”抛断言。
35、Log要写时间与分类。并且要能重定向输出。
36、注释是稍差的文档。更好的是清晰的命名。让代码讲自己的故事。
37、造轮子是很好的锻炼方法。前提是你见过别的轮子。
38、code review最好以小组/结对的形式。对业务有一定了解,建议会更有价值(但不绝对)。而且不会成为负担。管理员个人review则很容易成team的瓶颈。
39、提问前先做调研。问不到点上既被鄙视,又浪费自己的时间。
40、永远别小看程序媛(╯3╰)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。   作一个真正合格的程序员,应该具有的素质。   1:团队精神和协作能力   团队精神和协作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。   2:文档习惯   文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。   3:规范化的代码编写习惯   知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。 一些所谓的高手甚至叫嚣高手写的代码一般人看不懂,我只能说他不是一名合格的程序员。   4:需求理解能力   程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。   5:模块化思维能力   作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。   6:测试习惯   测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。   7:学习和总结的能力   程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,我们只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。   作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:   1、 需求分析能力   2、 整体框架能力   3、 流程处理能力   4、 模块分解能力   5、 整体项目评估能力   6、 团队组织管理能力   1,激情   我曾经遇到许多“职业程序员”,他们从事IT是因为觉得这是一种职业,他们只在工作时间编程,除非送去培训否则他们不会学习新东西,这不是好的程序员。我认为一个好的程序员总是对编程充满激情,而且好的开发者会做一些编程工作即使这没有报酬。激情是一个优秀程序员的重要指标。   2,自学好学   编程领域始终发展变化着,不出一年有些新技术就变成了老技术,这并不是说好的程序员要对所有新技术跟进,但有些却对学习任何新技术都没有兴趣。他们通常在学校学习了编程,然后工作后单位安排学什么就学什么。如果在招聘中你听到“让我培训一个星期我就会胜任这个工作”那不要雇佣他。实际上,真正优秀的程序员始终谈论着你所不知道的新技术,向人们解释为什么你必须用这个技术,哪怕没有听众听得明白,哪怕他自己也不明白。   3,聪明   聪明包括很多因素,情绪和社会交际只是其中之一。好的程序员绝不木讷,他们是最聪明的人,他们中的许多善于交际,健谈、兴趣广泛。   4,隐性的经验   —好的程序员通常有自己的私人的一些研究、爱好、项目,而这些是他们不写在简历上 (通常觉得不值得写),但表现出来却可能恰恰是他的潜能、深度和后劲所在。   5,技术多样性   由于好的程序员喜欢学习和涉猎新技术,所以一般来说超过22岁的都熟知很多新技术,而且对多种技术的长短有 “强烈”的个人意见/见解,喜好尝试新鲜技术。   6,资格证书   资格证书并不是识别真正程序员的方法,MCSE、SCJP说明不了什么,它们只是让别人认识和获取的,顶多代表这个人在某个技术有一定的知识。   原文作者在文末写道:以上所说的标准并不是绝对的,因为有些优秀的程序员确实不符合上述,而有些bad程序员却符合了。但相信这些对大多数真正的程序员都适用。   总结而言,优秀的程序员通常有一下特点:   对技术充满激情   将编程作为一种爱好   如果你允许会滔滔不绝地跟你谈论技术   有过个人的开发经历(与4意思相同)   坚持认为某种技术最好   如果让他用他认为不好的技术他会非常别扭   聪明、健谈、兴趣广泛   在大学和工作前就开始接触程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值