㈠ 为什么国内程序员都很少进行代码重构
说到代码的重构对于国外的程序员提到的比较多,特别是大型的开源工程,基本上一个模块或者函数的实现会反复的修改,一个文件能被修改成千上万次,曾经订阅了linux内核组的邮件,每天的收到的修改文件成千上万,有时候一个文件都能被修改上百次,对于文件修改最疯狂的是google的chrome源码,重构的次数,让你觉得每天都在重写但是功能上感觉越来越流畅。为什么我们周围的程序员绝大部分时间做的不是这样的事情。
为啥从直觉上觉得老外的写的代买质量比我们的要高,我们国内的程序员绝大部分的时间是在赶进度,准确的来讲忙着增加功能和修改bug,其实也从侧面反映出为什么国内出不了android以及Linux等影响深远的 科技 创新,从全球开源代码的占比就可以看出,差距还是很巨大的。
为什么觉得老外写的代码比我们的强?
1.国内软件发展主要阶段还在解决有没有,还远谈不上强大
中国的软件经过近几十年长足的发展,已经取得了巨大的成就,特别在互联网行业已经有几个巨头跻身世界前列了,最近炒的很热的脸书的用户数据泄密事件,作为当事人扎克伯格,也在论述中提到中国有几个很厉害的互联网公司,这说明中国在互联网领域还是取得了相当大的成就,但是在一些核心的领域,或者门槛很高的领域差别还是非常巨大。
任何事情在发展的初级阶段首要考虑的是不是有没有,所以如同创业初期的公司会选择短时间内搞出来个产品,哪怕是不成熟的产品,然后快速的投入市场,根据市场用户的反应同步追踪问题,等到产品差不多稳定,并且产品在市场上有了一席之地之后,后续的事情就要考虑优化功能,对里面的代码或者产品的性能进行全方面的提升,目前国内大部分的互联网一般比较年轻,还在解决有没有的问题,相信随着时间的推移以及国内软件的发展,也会有大量的高质量的开源框架代码出来,但这一切都需要很长的时间。
所以国内的程序员大部分时间都是在赶进度和根据需求完成功能代码。
2.软件产业的底子还很薄弱, 历史 积淀还不够
举个很典型的例子,现在很多国内的程序员到了30多岁就开始考虑后续的转型了,因为后面的轻轻人会带来很大的冲击,所以大部分的30多岁的程序员都在考虑自己后路,都要考虑转型的问题。老的有经验的程序员反而转型去做管理或者合伙创业了,哪有几个还在安心搞技术,年龄大了还在搞技术的还被人鄙视,觉得自己没有出息。
但是在国外写代码是一种很常见的职业,和别的工种没有多大的差异,40,50岁了写代码也是比比皆是,做软件是一种技术工种,经验的占比是很高的,所以老程序员写出来的代码更加有深度,稳定性更高,一切的根源还是产业的发展不够成熟,需要时间和 历史 的积淀,从这方面讲国内的软件整体产业还是比较薄弱,从业人员的整体素质和工作氛围还有待慢慢的成熟,周围都是有经验的程序员在带领着如何去重构代码,如何提升代码的质量,而国内大部分的程序要还是被产品经理鞭策着增加需求和修改代码。
3.公司的文化差异
目前很多的中国技术公司更多的追求的是短期利益的最大化,在基础软件的投入远远不够,毕竟基础的投入很难短期见成效,在一个具体的场景,有一个产品主体的功能已经实现了,也能在用户那边投入使用了,一般的公司很难拿出时间来,让你做代码的重构,毕竟这种事情很难直接产生经济效益。这与公司本身的文化差异有很大的关系,重视的技术或者懂得技术的公司对于这方面相对比较重视,反之就差很多。
小时候课本上就说着我们落后100年,所以高楼大厦不是一天建成的,所以在追赶的道路很漫长,所以承认存在差距,然后努力加倍的去追赶。
Time is money. 以目前国内互联网的情况,需求应接不暇,程序员基本上都是被需求与业务赶着走,时间非常紧张,在这种情况下,程序员很多时候唯一的选择就是赶紧实现需求的功能。所以,一个项目下来,代码基本上都变得非常非常的“垃圾”。
也有很多程序员想过在项目结尾的时候进行代码的重构,基本上每个程序员也都知道重构代码的好处,但是并不代表着真正能做起来。还是那个原因,国内互联网的速度太快,需求应接不暇,做为程序员,基本上没有时间来做这件事情。
而另外一个原因是跟团队负责人有关。若团队负责人能够意识到重构的好处,那么他可以为此单独划分一段开发时间出来,让大家分别负责一个模块进行重构,这都是可以安排做起来的。这也需要团队负责人如何在需求人员的需求与代码质量的进度上做一个平衡,进行统筹安排。
最后我想说一个可能很少意识到的原因,那就是人员流动问题。国内互联网目前人员流动非常的大,尤其是北上深这样的互联网发达的城市,基本上是平均两年就会走一大波人,在这样的情况下,也会考验从业人员的职业道德,即我到底要把代码写的多好,要把代码的可维护性做到多好,其实这都是从业人员自身需要考验的问题,因为完成一个功能很容易,但是要考虑的全面就是另外一回事了。而人员流动带来的另一个问题就是有一些代码是很难看懂的,即有些代码在人员离开后成为了“ 历史 ”,无人敢动。这也会阻碍着软件的重构工作的进行。
从我所讲的这几种情况来看,重构其实是大家都能知道的好处,但是真正实施起来却又有现实的约束,需要负责人来做这样的统筹安排与推动。
成本太大
大多数软件产品的开发都是经过了很多开发人员的付出,如果进行代码重构需要了解产品、了解框架、了解代码逻辑,这个过程会花费大量的时间和人力成本,对于企业来说,效益是第一位的,与其花费精力进行效益不大的产品重构,不如去承接更多的项目来的实在。
领导决策
由于大部分企业的老板都是非技术人员出身,他们更关注效益和客户,为了符合企业的发展,在进行产品开发时会更多的采用新技术来吸引客户,花费精力重构代码不如开发一套新产品或者开发更酷炫的效果更具有实在意义。
代码规范不足
由于国内互联网较之国外起步较晚,很多企业发展时间较短,加之人员流动比较大等多方面的因素,很难形成标准、严谨、行之有效的代码规范,所以很多技术人员在开发时都是根据个人风格习惯在开发,等其他人接手代码时,缺少相关标准和文档,很难理解代码逻辑,花时间去了解代码、重构代码不如直接推翻重做来的方便。
客户定制化需求
部分企业创业初期对企业信息化是不够重视的,只有企业发展到一定程度才会考虑信息化建设,而由于业务的限制,大多数标准化的互联网产品都很难满足企业的实际需求,需要进行大量定制化的开发,对于互联网企业来说,即使产品开发足够完善,在实际项目中也需要进行扩展,倒不如直接在项目中进行调整。
程序员的发展限定
在国内很少有终身的程序员,大部分都会逐渐转向销售、售前、项目经理、产品经理等岗位,而这些岗位则需要了解业务、了解客户,对技术的需求反而不会太高,所以与其花时间去专研技术不如将更多的精力用在业务和项目层面。
代码能够重构对底层框架要求深度掌握、且代码框架本身要足够灵活,而国内绝大部分技术人员都是停留在对框架的使用层面、少数可以完善、结合使用,极个别的在做同语言山寨或者换一种语言重写,能够对产品体系进行把握、与时俱进扩展实在是凤毛麟角。随着国家的经济提升、IT行业逐渐成熟,在我国这么多IT公司基数下,即便是凤毛麟角的概率,重视基础框架、积累萃取、不断迭代完善的一些技术公司也会慢慢崭露头角、涌现出来的。
【国内程序员很少进行代码重构】,这个现象虽然没有什么调查统计,不过我写了十多年代码,也发现身边的程序员大多数是这样的,【宁可写新的代码,也不愿意重构老代码】。下面我也谈谈自己的看法:
系统没有问题,就是最大的功劳
我见过的大部分的传统行业的软件公司或IT部门是这样的(互联网公司不太了解),“只要系统稳定,那么就是最大的功劳”,而保持系统稳定最好的方法是什么? 就是尽可能的不要动系统!
可能很多人不能理解,但很多公司确实是这样,甚至公司对项目的考核标准中,项目有什么突破的权重很低,是否有生产事故的权重很高。所以很多“机智”的项目组成员,千方百计的不接需求,或者把需求推给别的项目组。在这种单位里面,别说重构了,新代码都写的不多。
测试覆盖度太低,重构代码没办法保证质量
代码重构,很重要的一个问题:“重构后的代码谁来保证?如果影响到原有的功能怎么办?”
这时候很有效的一个方法,是使用各种自动化的测试来保证重构代码的质量。
但是,大部分公司,不管是单元测试还是其他的自动化测试,都是不健全的,甚至是没有的。所以只要不是被逼不得已,程序员宁可重新写一个方法,也不愿意重构之前的代码。
其他
进行代码重构不是一件容易的事情,务必需要对需求熟悉;对代码 历史 变更熟悉;对代码框架,模块熟悉;对产品更新迭代做好风险把控,时间成本把控……
进行代码重构需要能力非常高,责任心非常强的人进行,甚至需要一个优秀的团队完成。
为什么要代码重构?理由一大堆,我认为主要有两条,一是原代码已不适合扩展新需求,二是原代码已拥肿不堪,乱七八糟。
为什么很少重构?除了上述分析外,还有其他因素,如人员流动快,原团队原作者早已不知何去何从了。又如需求和业务繁多,完成工作开发都累得半死不活,日理万机似的,哪有时间和心情重构?
谢谢大家。
1.国内程序员技术能力不足以进行代码重构
大量的软件从业人员连编程规范都不熟悉,怎么可能做代码重构?更多的人只会写写hello world,只会拷贝粘贴小段代码,连if else这种语句都写不清楚甚至漏掉逻辑,连面向对象的编程思想都没有,谈何重构?
2.国内程序员的沟通能力说服能力一般。
进行软件重构,必须说服经理,让经理相信重构会带来软件质量的提高和故障率的逐步降低,这样经理才会安排人力进行重构。
3.国内软件开发更注重bug的及时解决
国内软件开发大量的人力被分配到解决短期的某个bug,没人抽时间思考如何长久的彻底的解决软件缺陷,其实解决bug不重要,找到软件的缺陷或者性能低下的地方才重要,这些才是重构的点。国内加班加点疲于奔命式的开发,没人考虑bug率是否长期内能够收敛,总是先解决眼前的问题再说,处于一个永远解决bug的死循环里。
这种工作模式是愚蠢的,不是smart的。
软件开发,一定要动脑子,不要蛮干,这不是耕地,力气大就耕的多。
重构代码的目的说白了,就是让软件开发人员更自由。
谢谢楼主的问题,这是一个我特别想回答的问题?
为什么?因为,第一,我是一个对代码有洁癖的人,受不了一坨,一坨那样的代码。第二,我是一个践行Clean Code 的人,给大家我主要负责的一个项目的一组数据(java),总代码量20万行,UT coverage(单元测试代码覆盖率)82%,代码重复率0.5%,代码规则(sonar)违反(Code issue)0,甚至连最低的违反都没有。
也正是因为我的项目在实践Clean Code上的数据,我经常去给不同的团队做分享,也对团队对这个重构不太上心有一些理解。
大致以下几个原因。
第一,也是最多的,交付压力,大部分人都会抱怨,你看我们有这么多新功能,还有那么多bug,根本忙不过来,哪有时间重构?
第二,重构意识不足,老板,管理人员总是希望这个我们要有,那个我们也要实现?为什么?因为别人有,别人有我们没有可能会造成用户流逝。即使有一些有见识的程序员和老板反应这个重构问题,但是重构从来不是高优先级的。毕竟,现在的软件的生命周期可能很短。
第三,人员流动性大,这个是我听过最奇葩的一个理由,我问一个来听培训的哥们,说你代码写成这样,以后怎么维护?这个哥们说,我也知道难维护,但我明年就跳槽了。
第四,设计上就不需要重构,曾经给一个保险公司做分享,我本人也是做金融相关产品后台的,我就问你们这样写代码,可能三四年以后就非常难维护了,还是要尽快重构。他们的回答是,我们不重构,我们只重写。什么意思那?就是一个系统,三四年以后在写一遍。
第五,程序员本身的问题,可能第一写单元测试,修改命名,修改代码结构,是一件很没有成就感的事情,也是一个没有多少附加值的事情。毕竟现在你去找工作,这个代码质量方面的问题会问得很少。
第六,我见过的我不能反驳的一个回答,我的英文太差,不能很好的命名,而我也不想学英文。
第七,反正我已经实现了功能。
最后,用一句话来提醒程序员们,重构是多么重要。
出来混迟早要还的,挖了坑迟早要填的。
在国内,【重构】这件事是程序员最喜欢做的事,而不是公司喜欢做的事。
但程序员喜欢并不能影响公司的决策,所以,国内的现象就是软件系统很少有重构。
其根本的原因在于,国内的公司所推出的系统大多没有重构的价值。
1、国内的互联网公司存在这样一种快节奏,那就是发现一个有价值的创意,就马上进入开发,开发完成立即上线,并立马推广使用。这是一种快速试错的模式,一旦发现系统在 社会 中没有引起反响,那就马上把系统再下线。这种情况下的系统哪来的重构价值呢?
2、即使一个系统上线成功了,也积累了大量的用户,貌似为了系统的稳定性和性能,可以有重构的机会。但事实上不是,国内公司仍旧不会选择重构,因为重构带不来新的价值。所以,公司多数都会在系统上添加新的功能来吸引新的客户,而不会考虑重构现有系统。
总得来说,引起重构的原因在于能够有持续的价值。没有价值的事,企业当然不会做,仅是程序员的一厢情愿而已。
你只是见到了你所在的公司现象,不代表所有,也不能代表大部分的。
代码重构还是存在的现象
代码设计烂,经常出问题、扩展麻烦、维护心累、数据混乱、结果不清醒、模块划分混乱
就可能要考虑到重构了
呵呵,
老大说:
你赶紧去修复一下这个bug,
还有几个功能没有实现,加班搞一下,
pm 说:
这个功能改一下,
还有这个,界面重新调整一下,
这个业务流,现在不一样了,
客户需求需要多几个功能,
老板说:
这东西下周能出来吗?
㈡ 如何成为一个程序老手,新手必知的40个小技巧
老鸟和新手的一个很大区别来自于debug的能力。其中最主要又可以从两方面看出来:
从高层往底层找错。
科学方法。
0.重构是程序员的主力技能。
工作日志能提升脑容量。
先用profiler调查,才有脸谈优化。
注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。
普通程序员+google=超级程序员。
单元测试总是合算的。
不要先写框架再写实现。最好反过来,从原型中提炼框架。
代码结构清晰,其它问题都不算事儿。
好的项目作风硬派,一键测试,一键发布,一键部署; 烂的项目生性猥琐,口口相传,不立文字,神神秘秘。
编码不要畏惧变化,要拥抱变化。
常充电。程序员只有一种死法:土死的。
编程之事,隔离是方向,起名是关键,测试是主角,调试是补充,版本控制是后悔药。
一行代码一个兵。形成建制才能有战斗力。单位规模不宜过大,千人班,万人排易成万人坑。
重构/优化/修复Bug,同时只能作一件。
简单模块注意封装,复杂模块注意分层。
人脑性能有限,整洁胜于杂乱。读不懂的代码,尝试整理下格式; 不好用的接口,尝试重新封装下。
迭代速度决定工作强度。想多快好省,就从简化开发流程,加快迭代速度开始。
忘掉优化写代码。过早优化等同恶意破坏;忘掉代码作优化。优化要基于性能测试,而不是纠结于字里行间。
最好的工具是纸笔;其次好的是markdown。
leader问任务时间,若答不上来,可能是任务拆分还不够细。
宁可多算一周,不可少估一天。过于“乐观”容易让boss受惊吓。
最有用的语言是English。其次的可能是Python。
百闻不如一见。画出结果,一目了然。调试耗时将大大缩短。
资源、代码应一道受版本管理。资源匹配错误远比代码匹配错误更难排查。
不要基于想象开发, 要基于原型开发。原型的价值是快速验证想法,帮大家节省时间。
序列化首选明文文本 。诸如二进制、混淆、加密、压缩等等有需要时再加。
编译器永远比你懂微观优化。只能向它不擅长的方向努力。
不要定过大、过远、过细的计划。即使定了也没有用。
至少半数时间将花在集成上。时间,时间,时间总是不够。
与主流意见/方法/风格/习惯相悖时,先检讨自己最可靠。
出现bug主动查,不管是不是你的。这能让你业务能力猛涨、个人形象飙升; 如果你的bug被别人揪出来.....呵呵,那你会很被动~≧﹏≦
不知怎么选技术书时就挑薄的。起码不会太贵,且你能看完。
git是最棒的。简单,可靠,免费。
仅对“可预测的非理性”抛断言。
Log要写时间与分类。并且要能重定向输出。
注释是稍差的文档。更好的是清晰的命名。让代码讲自己的故事。
造轮子是很好的锻炼方法。前提是你见过别的轮子。
code review最好以小组/结对的形式。对业务有一定了解,建议会更有价值(但不绝对)。而且不会成为负担。管理员个人review则很容易成team的瓶颈。
提问前先做调研。问不到点上既被鄙视,又浪费自己的时间。
永远别小看程序媛(╯3╰)!
㈢ 程序员的软技能书籍有哪些值得推荐
1. 《深入理解计算机系统》:(美)布赖恩特 (Bryant,R.E.) 等着。 以程序员的角度和全局的视角来审视计算机系统,涵盖从数据表示到程序运行、系统交互的各个方面,非常值得深读!
2. 《Writing solid code》: (美) Steve Maguire 着。 想写出 bug-free 程序的上佳读物之一。相应读物的还有《高质量程序设计艺术》(code quality: from a open source perspective) , 《代码整洁之道》(Writing clean code),《编写可读代码的艺术》(The Art of Readable Code)
3. 《Thinking in Java》:(美)Bruce Eckel 着。 Java 语言编程的推荐教材。 《Effective Java》(Joshua Bloch着) 作为进阶书籍。
4. 《设计模式——可复用面向对象软件的基础》:(美)“四人帮”着。 设计模式的必读书籍(亦可用于参考)。
5. 《实现模式》: Kent Beck 着。 非常有益的面向对象编程经验谈。
6. 《重构: 改善既有代码的设计》: Martin Fowler 着。 作为面向对象编程的收藏书籍,随时可参阅。
7. 《Test Driven Development: By Example》: Kent Beck 着。 测试驱动开发的优秀入门书籍
8. 《MYSQL必知必会》: (英)Ben Forta 着。 人民邮电出版社。薄薄的一百页左右, 快速上手和使用 mysql 数据库。
9. 《正则表达式必知必会》: (英)Ben Forta 着, 杨涛 / 王建桥 / 杨晓 译。人民邮电出版社。 薄薄的一百页左右, 清晰的阐述, 适合正则表达式的快速了解和上手。
10. 《Java TCP/IP socket 编程》: (美)Kenneth L.Calvert, M.J. Donaboo着, 周恒民译。 非常好的 Java tcp/ip socket 入门读物, 详细地讲解了相关的知识点,有相应的实例为佐, 并且对底层、性能等方面也作了一定的阐述。
11. 《Ubuntu Linux 指南:基础篇》: Mark G.Sobell 着。 学习和使用 Linux 系统的优秀入门读物, 建议未接触过 Linux 系统的童鞋从 Ubuntu 起步。
12. 《Perl 语言入门》(第五版) : Randal L.schwartz 等着, 盛春等译。 Perl 入门的推荐教程。通俗易懂、详尽得当。
以上,祝你学习愉快!
㈣ 程序员应该读什么书
《软件故事》([美] 史蒂夫·洛尔)电子书网盘下载免费在线阅读
资源链接:
链接:https://pan..com/s/13OInH9h3qa6ZZhcbo-GoZg
书名:软件故事
作者:[美] 史蒂夫·洛尔
译者:张沛玄
豆瓣评分:7.2
出版社:人民邮电出版社
出版年份:2014-7
页数:259
内容简介:
“本书语言流畅细腻,读起来如沐春风。它犹如一部波澜壮阔的计算机史诗,讲述了软件革命的恢弘历史,以及中流砥柱们的光辉事迹。故事并不是断断续续的,因为作者采用了微型传记的形式……他把历史写成了优美的散文,生动迷人又严谨有度。”
——David Gelernter,《纽约时报》
“这是一本给人启迪的着作,完美地展现了想象力的巨大力量。如果你想象得到,并把它编成代码,那么一定能够改变世界!”
——Boston Sunday Globe
“本书把难懂的技术概念讲解得通俗易懂。对于那些对计算机内在结构好奇的人,这是一本能让其豁然开朗的好书。计算机科学界的前辈John McCarthy曾向作者抱怨过新闻记者的无知,本书就是作者对此作出的回应……与计算机行业相关的所有新闻记者都应该读一读这本书。”
——《纽约时报书评》
“这不是一本通常意义上的书,而是一部史诗。它讲述的不是技术,而是那些设计编程语言和计算机软件的名人的故事……本书内容清晰易懂,简明扼要。软件工程让程序员不需要材料和工具也能有所创造,他们为此兴奋不已。他们能够凭空创造新的事物,唯一的限制就是自己的想象力。”
——《国际先驱论坛报》
“如果本书作者是一名程序员,那么他写的代码一定清晰有序,不需要复杂的结构或者奇怪的快捷方式就能跳转到正确的子程序上;他的写作风格也是如此。本书化繁为简,让读者与数学专家、桥牌高手、象棋大师、特立独行的科学家、批判传统观念的人,以及掀起软件革命的程序员们进行了一次愉悦的会面。”
——《新闻周刊》
“本书展现了技术缔造者们面对的挑战,是本旷世杰作。”
——《自然》周刊
聆听软件行业发展的精彩故事
领悟软件巨擘的深邃思想
放飞想象力,通过编码改变世界
Steve Lohr(作者)《纽约时报》高级作家和技术通讯记者,U .S. v. Microsoft一书合着者,现居住于纽约。
张沛玄(译者)1992年毕业于北京理工大学飞行器工程系固体火箭发动机专业,获得工学学士学位。2001年重回母校管理与经济学院就读,2004年毕业并获工商管理硕士学位。早年他曾从事软件开发,担任IT公司高级管理工作多年。
作者简介:
Steve Lohr,《纽约时报》高级作家和技术通讯记者,U .S. v. Microsoft一书合着者,现居住于纽约。
㈤ 初级程序员该如何逆袭
初级程序员该如何逆袭
如何在工作中成长
其实你想问的是这些出去程序员并不可怕
只要你有一颗上进的心
去问多去学去接触
慢慢的就会发现一大牛越来越近
不要害怕去接触一些新的东西
慢慢地去适应它
在工作中积累
在工作中学习
不懂的就去问那些大牛
慢慢的你也会成为他们中的一份子
㈥ 怎么成为一名程序员,要从哪里开始学起,先学什么在学什么
答:
首先你要清楚程序员也分很多种,从语言分,有C,C++,C#,JAVA,Delphi等等,你要考虑好弄自己向哪部分发展。
一般如果没什么理解可以从C语言学起,因为C语言比较贴切于机器语言,大学里面一般也都是先学C的,学好了C语言,可以触类旁通,更容易学其他的语言。
2.Java据说是现在最热门的(所有程序员都觉得自己用的那个语言最牛逼),IOS或者android学了可以做手机软件哦,Delphi和C#是用控件拖出自己想要的结果,然后在后台写代码的,不过有人说Delphi相对落伍了,但好些大公司还是在用Delphi来搭框架的。
3.选定好语言后,如果觉得自己理解能力动手能力超强的话,自己买本入门的书,或者网上看些教学视频,边看边实践。不过这个对于初学者来说真的挺难的,因为第一次的话,可能连环境都搭不好,用来编程的软件对初学者来说还是蛮麻烦的一种软件,不是这个不行,就是那个设置错了,或者连一些基础的窗口啊工程啊项目啊的概念都没有,网络起来又要答案一个一个看,浪费时间。而且还要自己搭数据库啊什么的,真的很难。有老师教的时候,还能挂科一大片的。不过入门了,之后就简单了,自己随便找本书,学学代码用法啊,照着打就可以了。
拓展资料:
程序员(英文Programmer)是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、中级程序员、高级程序员(现为软件设计师)、系统分析员,系统架构师,测试工程师六大类。
岗位职责:
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。
7、负责相关技术文档的拟订。
8、负责对业务领域内的技术发展动态进行分析研究。
网络词条 程序员
㈦ 程序员需要具备的基本技能,你都知道吗
下面是程序员所应该具备的基本职业技能:
基本技能 技能描述
阅读代码 这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。
编写程序 编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。
软件设计 这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。
熟悉软件工程 每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析 设计,编码测试,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等等。
重构代码 每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》 每个程序员都应该读一下
自动化编译 程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样整个开发团队可以不停地集成代码 自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。
当然,还有很多的基本技术也是非常重要的,比如,与人的沟通能力,语言的表达能力,写作能力,团队协作能力,适应变化的能力,时间管理能力,多任务处理能力,自我学习能力,故障处理能力,等等,等等,这里只是列举了和技术相关的能力,这些是程序最最最基本的能力,只要是程序员就必需要有的能力。
㈧ 程序员,如何少走弯路,成为一名技术专家或者架构师
#1 专业技能
@首先当然基础知识要扎实,一些经典的专业书籍一定要看。比如,设计模式,算法,数据结构,所在领域的编程语言的专业书籍等.关于不同的能力阶段,需要读取什么类型的书籍,请参考ThoughtWorks(中国)程序员读书雷达,每年都有更新。
@作为架构师,review别人的代码并给出合理的建议是基本功,比如变量或者方法命名的规则;所以代码大全,重构,改善既有代码的设计,Clean code 等等肯定需要看。
@ 对于某一个技术领域或者业务领域,一定要有一门技术是精通的,因为这样你才能体会到以后遇到自己不懂的技术的时候,如何能够快速成为这一方面的行家。
@ 平常有时间一定要多多进行代码的训练,也就是Martin Flower常说的Kata练习,这个比喻来自于跆拳道,跆拳道选手一般每天都会找一些基本的招式,进行反复的练习,从而训练肌肉的条件发射,那么对于我们程序员来说,一定也要进行持续的编程训练,比如上面提到的那位同事,给的建议是,虽然把大部分时间花在了沟通和协调上面,没有机会写代码,但是自己一定要利用业余时间,自己找一些例子来联系,比如,参与开源项目,或者到网上去搜索一些大师的经典Kata联系的例子;或者看工作里面是否有一些小工具,是否能够提升自己的沟通效率,当然已经天天写代码的童鞋们除外。请参考我转发的另外一篇文章和另外一篇介绍能在线练习Kata code的文章.
@ 最好能够在精通一门语言的基础之上,学习其他的语言,从而站在一个更高的角度,对于程序语言有一个更高层次的抽象认识,比如,学了Java之后,可以学学Ruby,Groovy,C#等等,其实语言之间都是相互借鉴的,比如Lamba表达式,连java也慢慢的向函数式编程方向靠拢。
@ 如果有时间,一定要自己维护一个博客,既然选择了架构师,就决定了自己以后不仅仅是一个技术专家,同时也要成为一个布道师,为企业组织或者社会上的其他IT同行们贡献自己的一些微薄之力。
@ 多参加一些社会上举办的软件专业会议或者活动,了解当前比较流行的技术和框架。
@ 这条不提倡,我以前有一个同事,几乎每年都要更新简历1~2次,目的不是真正的换工作,而是通过面试得到当前市场上大部分公司正在使用什么技术和框架。对于这条,请慎用!!!!
@如果有结对编程的机会一定要好好珍惜,特别是和高手大拿一起结对的时候。
@如果大家上面都已经做的非常的好了,这个时候可以看看架构设计方面的书籍,比如企业应用架构模式,架构之美等等。
@ 去51Job上搜索架构师这个职位标签,看看不同行业的企业对于架构师的技术要求和标准,然后结合自己当前所处的行业和你自己的技术特点,比如擅长前段或者后端,有选择性的学习一些自己感兴趣的技术或者方法。
@ 关于常用的网站,没有定论,笔者主要是根据搜索的结果去发现适合自己的网站,所以需要读者掌握一定的搜索的技巧,笔者一般喜欢用英文搜索,这样的话资料比较全也比较新;如果下载电子书的话或者查看博客的话 一般会首选CSDN;如果是解决工作中的问题的话,在StackOverFlow上面被解答的概率是最大的,此外平常自己也需要去积累一些自己感兴趣的技术的人气比较旺的网站列表,比如一般和Window相关的就是MSDN;如果对Java入门比较感兴趣,可以看看这个网站。对于一些开源的框架,一般都会有想对应的社区,google一搜索,很快就能找到。另外一个德国人写的博客的非常的精致,如果对Eclipse插件开发特别感兴趣的朋友们可以去参考它。
@大家如果时间和精炼允许,最好能在Github开源和分享自己平常写的代码。这样一方面可以熟悉git用法,另外一方面也可以把自己平常练手的代码免费保存,何乐而不为呢?
@如果大家平常遇到什么问题,可以到StackOverFlow上面去寻找答案;当然,如果你能自己注册一个StackOverFlow账号那是最好不过的,这样不但可以提问,还可以帮助别人,同时上面还有很多工作签证的工作机会。
#2 软技能(现代社会,一个合格科学家不仅仅是某一个行业的技术专家同时也是一名专业的社会活动家)
@遇到问题,一定要多想,遇到一个问题,如果解决了,就要反思为什么能够解决,如果以后遇到类似的问题,
如何更快速的解决。
@英语的重要性,不言而喻,因为现在很多新技术的框架的中文文档非常的少,即使翻译成中文,也是二手的了(国内自己的开发的一些开源框架除外)
@ 有时间的话,看一些沟通方面的书籍,如果有参与沟通的机会的时候,一定要想如何把沟通做的更好更舒畅。
@ 如果有机会的话,可以参加PMP的考试,关于如何备考PMP,请大家参阅另外一篇文章:如何备考PMP,但是如果不想参加的话,也没有关系,至少要涉猎到项目管理方面的书籍,否则以后如果成为架构师之后,客户或者管理者给你说一些项目管理上一些专业术语时,到时候就会一头雾水。
@架构师其实从某种意义上就是一种角色,而不是一种职位。一定要时时刻刻保持空杯心态。
@一定要有一颗保持饥渴学习和耐得住寂寞的赤子之心。
@当前的技术节凑是非常快的,特别是结婚以后又有小孩了。一定要好好的利用自己碎片时间,对于一些技术,当时读不懂不要紧,但是一定要记住和了解其关键词,这个主要是为了拓宽自己的视野。比如,当前你想自己开发一个系统,结果已经有一个开源框架实现了,而且还很稳定,这个时候,自己就没有必要重复发明轮子了。
@与不同的技术、编程语言、设计模式和结构等(甚至是它并没有在日常中给予你直接的帮助)打交道。你永远都不知道这些知识是否会在未来派上用场,但是对你绝对是有益无害。
@在工作中,能够帮助到别人解决技术难题,一定要尽量全力以赴,因为这不但可以赢得同事的好感和口碑,同时也能增长你解决问题的经验和提高你的技术思维能力
@ 一定要掌控好自己的时间,对工作没有帮助的会议,能不参加尽量不要参加,当然,企业安全,公司规章制度如果是强制性的,该参加还得参加,但是如果没有工作效率和扯皮的会议,尽量避免参加。
@程序员要耐得住寂寞,要在自己的领域深挖,不能看啥火,就学啥,一定要有自己的想法和判定,如果决定不了,可以向资深的同事或者朋友沟通。
@尽量参与到项目中的编码,因为架构师不能与项目脱离。
@ 如果有机会可以锻炼一下自己在大众环境下的演讲和PTT的能力。
@有机会多做知识分享,因为你一旦分享了知识,你就会对这门技术有深刻的印象,同时也能树立在同事中的良好的技术形象,从而赢得更多的专家影响力而不是职位影响力。
上面只是我当前能想到的,知易行难,知道了上面的一些经验,并不代表年轻程序员们就能马上成功,毕竟这需要一个凤凰涅槃和实践的过程,但是肯定能帮助有志于于此的年轻程序员们少走一些弯路,限于笔者水平,如有总结不恰当或者不到位的地方,还望批评指正。
㈨ 做一个程序员需要达到什么样的水平
辨别一个程序员的水平唯一的办法就是看 产出质量。
算法和数据结构都是锦上添花,并非是雪中送炭。而一个程序员的水准大致上是可以通过之前的代码质量估算出来的。【如果你可以获得此程序员的真实编写的代码,比如原创的Github】。
举个栗子:下面是我最近在单位一个同事写的代码,Java语言
private boolean checkProportions(String str, Integer grades) {
String proportion = str;
for (int i = 1; i < grades; i++) {
String st = proportion.substring(proportion.lastIndexOf(",") + 1);
if (st.equals(""))
return false;
proportion = proportion.substring(0, proportion.lastIndexOf(","));
}
if (proportion.equals(""))
return false;
str = str.replace(".", "");
str = str.replace(",", "");
for (int i = str.length(); --i >= 0; ) {
int chr = str.charAt(i);
if (chr < 48 || chr > 57)
return false;
}
return true;
}
大致上的功能就是将 1,2,6.2,4,1 的字符串判断每一 ‘,’内是数字,而且长度符合规定
这样的代码看上第一眼就觉得非常的丑陋。所以在我的要求之下,进行了一次重构。
private static boolean checkProportions(String str, int grades) {
String[] proportions = str.split(",");
if (proportions.length != grades) {
return false;
}
for (String s : proportions) {
if (!NumberUtils.isNumber(s)) {
return false;
}
}
return true;
}
这里看上去差不多就Ok。这样的代码其实也并没有用到什么数据结构和算法,就是很简单的字符串处理。
实际情况:在我们写的绝大多数的代码里面,大部分属于业务逻辑,极少部分的代码需要使用到算法和数据结构,在这样的情况下,我们能使用的到的技能最为关键的是让代码如何更加合理。而让代码更加优秀的方式是通过千锤百炼的重构,而重构是极大的考验一个程序员耐心和能力的东西。
质量的范围广泛,我从下面几个小方面聊聊。
出货能力:如果一个程序,算法再精妙,不能出货都是扯淡,我看过某某大神,算法溜得很,但是一个人完全做不到按照工程需要把事情给做完。
优化能力:并没有一个程序是一步到位的,一个工程的交出去可运行了,那才是第一步,很多时候随着业务的增大,对性能的要求越来越高,有一定对于代码优化的能力也是比较重要的。
调错能力:项目越大,遇见的Bug也就是越离奇,这个时候需要强大的Debug能力,找出那个最为关键的错误点,甚至于追溯底层框架的源码。
技术掌控:你项目能用Spring,Hibernate等等框架,但是有没有想过,这些技术你真的可以掌控么,如果有一天你的框架版本需要升级,真的做得到么?甚至于从Hibernate转为MyBatis。
算法和数据结构是影响到一些核心区的问题,但是其他的一些技能,比如面向对象的架构设计,代码的低耦合,那都是对整个项目有着直观改善的技能。并非是贬低算法,而在实际工作中,有太多比算法更重要的问题了。