⑴ 什么是典型的软件三层结构软件设计为什么要分层软件分层有什么好处
软件的三层结构一般指的是 MVC
M 是model的简称是指实体层
V是view的简称是指视图层
C是Controller的简称是指控制层
具体可查看网络http://ke..com/link?url=_7Iy6spb037lZr5nJHHv-jGRFhxpmck4PCHz6mrXF_-_6M
MVC的优点
1.低耦合性
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.高重用性和可适用性
随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.较低的生命周期成本
MVC使开发和维护用户接口的技术含量降低。
4.快速的部署
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
5.可维护性
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
6.有利于软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
⑵ 单片机程序里面,经常听说底层,中间层,应用层,什么意思 51单片机也需要这么分层吗
一般当程序比较大、功能比较繁多,需要进行结构化程序设计的时候,才会进行分层。分层的好处是可以将应用与硬件剥离,当硬件发生变更(移植,设计更改)时只需改动底层以及少量中间层;当需求发生变更时只需改动上层以及少量中间层。
底层一般是直接访问硬件的接口,以串口而言如寄存器操作函数;中间层一般是在底层与上层之间进行数据及信息的转换,以串口而言如封包/拆包/消息产生/消息响应;上层一般面向应用,在很少考虑硬件实现的前提下以通用的方式实现所需的功能,以串口而言如printf。
分这么多层是为了不同程度的开发人员可以同期工作的原因。比如说,底层就雇佣一个特别熟悉芯片和硬件的人做,中间层大概要找比较熟悉应用的人来把硬件功能来做扩展,应用层就随便抓一把人来开发了。
这样,多个项目可以公用一个硬件层,有两到三组中间层的支持工程师,然后每个项目各有一组应用工程师就好了。51也可以这样做,这和效率无关,层做得好,执行效率不会影响很大,开发效率提高很多。
单片机的应用:
1,通用专用:
这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
2,线型应用:
这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积。
3,控制型应用:
这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是唯一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
⑶ 什么是模式、框架软件为什么要分层
模式:就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,就是模式。
Alexander有一个经典的定义,每个模式都描述了环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,可以无数次地使用那些已有的解决方案,无需在重复相同的工作。模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。
框架:就是某种应用的半成品,是一组组件,供选用完成的系统。
软件分层的原因是为了实现"高内聚、低耦合"。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。
需要注意的是,人虽然在创造性方面有绝对优势,但是在精确性、持久性、效率、质量上是无法比拟机器的。所以我们希望在软件系统构建过程中,人和机器发挥各自的长处,也就是说,让人来扮演架构师的角色,而让机器来扮演程序施工者的角色。
⑷ 为什么程序员是一个跳槽比较频繁的职业
程序员这个行业存在着这样的现象,有些刚毕业的大学生因为没有见过世面,一不小心被忽悠到那些处在创业阶段的“公司”,拿着实习生的工资干着全办公室的活,而且经常被老板拉过去谈人生理想,刚毕业的程序员都是涉世不深的小男生,那里经得过这些老狐狸的忽悠,一招画饼充饥就在那幻想未来美好生活了,但凡事都得有个度啊,时间久了次数多了,小白也变了,只能跳槽另谋出路。
我觉得跳槽的主要原因有两个,一个是自身原因:因为大多数刚出来实习的程序员大多数对工资方面的要求不是很高,因为他们也知道,自己现在是属于学习阶段,知道自己的价值是多少,所以一般不怎么要求工资,但是一旦工资几个月之后,对整个体系有了较大的了解之后,就要要求有对等的工资,因为在一个技术部里面每个人的工资都是不等的,这样会觉得自己有那价值但是没有那回报,心里也就有些变扭,也就有了跳槽的想法了。还有一个就是当自己有过硬的技术时,一般也会考虑自己出去单干接项目做。
另外一个就是公司体系问题,在国内外包公司之多,所以大多数的程序员也是在外包公司做,而外包公司的规模参差不,大多数也是在剥削压榨程序员,各种坑也是居多,管理层体系混乱,这也是造成程序员跳槽的原因
1.互联网技术风起云涌,变化之快。公司制定的涨薪制度都有着统一的标准,不会因为某个编程语言热门而增大涨薪幅度。但是新进员工的薪资待遇往往是根据市场幅度在变化的。 so,常常听到老员工抱怨,那个新来的谁谁谁,哪哪都不如我,工资却比我高。
2.据不完全统计,互联网行业的创业公司从天使走到D轮概率尚不足2%。大量初创公司的关门倒闭,致使一些程序员“被迫离职”。
3.互联网公司会根据市场的变化做一些战略调整,内部转岗已是家常便饭。比如本人之前所在的项目组,所做的产品是web端的直播平台。后经市场调研,公司打算将重心放到移动端,部分web组的老员工也就转岗到了移动端小组。 我想说的是,如果企业内部的调岗不符合个人的职业规划,那么也是程序员跳槽的一大原因。
不邀自来,本人目前从事嵌入式软件开发,也算是程序员大军中的医院,下面来回答一下这个问题:
按理说,薪水高,工作环境尚可的工作一般都是很稳定才对啊,但是据一份调查发现连Google,Amzon这些大厂的程序员的平均在职周期都只有1~1.5年,可见程序员频繁跳槽不是我国或是某个企业特有的,一线国际名企都如此别说国内小厂了, 那么为什么造成程序员为什么会如此平凡的跳槽,我们来分析一下:
IT产业发展迅猛,市场需求旺盛,程序员有更多选择
虽然我国的计算机行业起步很晚,但这不影响IT产业在我国的迅速发展,发展就需要相关内容的人才,同时我国计算机的培训起步也不是很早,早起的人才主要是理论研究并不都是真正写代码的,供求关系不平衡,导致程序员在就业市场上比较抢手,各行各业一旦某种人才紧缺自然导致有价无市的感觉,所以,各厂想尽办法招聘让程序员,诱惑多了选择自然多了,选择多了跳槽就频繁了,这是见怪不怪。
IT行业存在一种“倒挂”的行业怪象,程序员更愿意跳槽
“ 倒挂 ”是指在某个行业内部,由于行业的特殊性,从业人员的薪酬待遇和业务能力以及技术水平不相关的现象,这种现象尤其在程序员行业存在,一个刚大学毕业的新鸟在待遇薪酬方面可能秒杀一个已经工作四五年的优秀程序员,换谁也受不了,没有工作经验还需要人带的新人工资居然比带他的人高,有些企业宁愿花5000块钱新招一个新人也不愿意多给老程序员多加1k来完成同样的工作,坐等通过技术积累来加码自己的报酬的希望破灭后,那些受到不公正待遇的程序员通过跳槽去涨薪了,在猿圏有句话更能说明这个问题“People who stay in one spot earn less than those who move(经常换工作的人比那些安分守己的人赚的更多)”。
公司没有给程序员提供良好的职业发展规划
虽说职业规划都是自己为自己规划,但是自己的规划能否按计划顺利实施很大程度上取决于公司是否为自己的员工有良好的职业规划,显然,一家没有为程序员薪酬增长和职位升迁做过精细规划的公司,让程序员不在有安全感或是让他们没有期望,换做谁都得跳槽另找下家。
程序员厌倦了代码工厂式的工作,想尝试新鲜的东西
计算机行业是一个日新月异的行业,此外程序员是一类喜欢挑战新技术的特殊人群,很多公司的业务模式单一或是业务稳定了,程序员的工作变成流水线的单调模式,他们早已厌倦了日复一日的代码搬运工的工作,一旦尝试新的技术并且一改往日的单调与无聊,那么它们会在合适的机会换个领域,此外,程序员是青春饭行业,代码工厂式的工作会让他们没有安全感,因为这会让他们失去市场竞争力。
从业人员层次不一,淘汰提高了程序员跳槽的几率
IT的迅猛发展,在巨大市场需求的推动下,编程行业门槛编低,导致从业人员良莠不齐,可能一时的冲动或对自身判断不足而走上程序员之路,很多人发现程序员并不是媒体所报道的光鲜亮丽,工作压力大,无休止的加班都会使一些不适合做程序员的人淘汰出局,这在职场非常常见,尤其是刚毕业的新人,这就外界感觉程序员跳槽更频繁了。
提到跳槽比较频繁的职业,我想除了题目中提到的程序员之外,应该还有餐饮企业的服务员,餐饮企业服务员跳槽基本就是三种情况,一是薪资低,二是工作好找,三是工作时间长。
我们再来看看程序员跳槽,其实也不外乎是这三个原因。
一、薪资低
看了这一条,你可能会说,程序员薪资怎么会低,刚毕业的就能拿到个7、8千块,如果是硕士毕业就拿个1.5万一点儿不奇怪。
这里说的薪资低不是指薪资行情低,而是每个人都觉得自己的薪资低,对于程序员来说薪资水平差异很大,但人们往往并不关注工作本身,或是人的能力而关注的是自己怎么比别人少这么多,但在本公司可能调薪并不是件简单的事,所以只能通过跳槽来实现工资的上涨了。
二、工作好找
程序员现在可以说是一个热门岗位了,从业人员比较多,但是需求量也很大,如果你是个程序员,简历更新之后,估计每天5、6个面试邀约电话都算少的。因为工作好找,所以工资势必也就水涨船高,谁也不怕裸辞,工资要求不高,只涨个20%今天离职,估计3天后就能有新工作。
三、工作时间长
程序员工作时间长是大家有目共睹的,有个说薪资高,工作时间长很正常,但人的欲望总是无止境的,没钱的时候想要钱,有钱的时候想要时间和自由,薪资支撑的满意度最多也就能维持半年,长时间高负荷的工作会让人产生厌倦,这个时候就会觉得自己工资的性价比不好,要么找更高工资的,要么就找没那么累的。
因为现在部分公司涨薪速度比较慢,跟不上市场的价位。
打个比方:
如果你有拼搏精神,愿意在下班后精进技术、学习,
等几个月后技术成熟了再跳槽,可以一下子就翻倍,甚至直达15k。
但是要正确地跳槽:
第一,找一个符合自己期望值的平台,让自己的价值和技术得到最大的发挥。(这里和薪资没有关系,最重要的是适合自己)
第二,不要只为了加薪而跳槽,不断地去一个新地方,自己的职业生涯也在不断地清零,不符合长期的发展。
引起程序员跳槽的原因有很多,但是在所有的岗位中程序员的跳槽频率确实高于其他工作岗位,一般程序员跳槽的原因有这么常见几点:
第一、由于互联网是一个很不错的创业方向,很多人有着不错的创业项目,然后开始组建自己的技术团队,这时候就需要很多的程序员组成产品开发,而由于程序员的工资支出较高,往往在产品还没有进入收益期的时候公司很难支撑下去,或者缺少产品推广资金,这时候程序员就会面临跳槽的可能。
第二、在成熟的互联网企业中,由于项目的开启,而组建新的技术团队,随着产品上线,企业将更多的精力投资在产品的运营上,而对做技术的程序员来说每天的工作都是很清闲,失去了项目研发期的忙碌,让程序员感到无所适从,从而引起跳槽。
第三、就是大家常说的一点,不跳槽怎么加薪。这也是程序员跳槽比较普遍的一个问题了,很多人由于不满现在的薪资待遇,但自己却有了很多的项目经验,所以选择找下家公司,通过以往的项目经验来提现自己的价值,从而达到自己想要的薪水,这也就是程序员找工作的时候,工作年限时间是一个因素,更重要的是一共参与开发了多少项目,并且更具项目的大小代码量是一个较为重要的因素。
第四、就是有些程序员是追随技术的,他们认为在软件开发的外包企业中虽然每天都有繁忙的项目要完成,但是对自己而言却是千篇一律的重复性代码的敲写,甚至是直接使用企业自身比较完善的库或者框架完成程序的开发,觉得对自己的技术提升没有太大的帮助,从而选择跳槽。
第五、接受别人的老项目进行改造,由于原先的程序员并没有留下太多的技术文档进行参考,所以每天都在纠结一句一行的代码,再就是程序开发的很多思维思想并不清晰,这就让程序员很纠结了,所以在与老程序相爱相杀了一两个月后,实在受不了上级的催促以及难以完成代码的整理重构而离职,放弃。
欢迎程序员的你在评论中分享自己的跳槽原因和经历
作为一个在这个行业呆了十几年的老人感觉上程序员这个职业算是跳槽频非常高,据不完全统计程序员流动性不低于百分20,相比别的职业已经算是很高的了,为什么程序员这么容易跳槽,由于程序员这个职业特殊性决定的,是什么推动了程序员这么多跳槽的勇气。
1.就目前中国软件行业的发展,虽然说程序员的数目越来越多,但高手却是急缺,主要还是前期积累不够,再过些年可能会稍微改观些。技术高手的数量在上升但是软件公司的数量以及业务需求的增加更快,所以给人一种很直观的感觉,很多大公司是一直处于缺人状态。
这种状态催生了程序员的跳槽,有更好的待遇,为什么不选择跳槽,这也属于人之常情,有些程序员离职也不是因为呆的多不开心,而是外面的诱惑实在太大,出来混还不是为了多挣点钱,有待遇更好的就走人。
2.程序员这个职业本身来讲属于重度的脑力劳动,说的再夸张点就是吃青春饭,毕竟年龄大了竞争优势在减化这是不争的事实,趁着自己还年轻还能拼的时候,去挣钱多的公司,其实还存在一种大家容易忽略的现象,整天的加班加点很容易造成一种很压抑的心情,换个公司换个环境放松下,可能会人觉得有点矫情,但现实中的确存在很多,或者在薪资相差不大的情况下,换个加班稍微少点的公司,这都是换公司的理由。
3.现在很多招聘网站特别是一些猎头网站滋生了,程序员的不稳定性,把程序员当作商品来运作了,很多猎头只要在网上搜到合适的人,就开始千方百计的运作,真有点经纪人的感觉,这种无形之中增加了程序员的不稳定性,而且也在无形推动了这个行业薪资的上涨,其实很多人值不了那么多钱,但物以稀为贵,现实就是这种状态。
目前市场上讲,程序员的薪资的两极化越来越严重,水平差点的大家都不想要,水平高的大家都跟打了鸡血一样争抢,很多人觉得程序员这个职业已经不行了,主要还是没爬到食物链的顶端,把技术搞得扎扎实实的大把机会等着你。
希望能帮到你。
因为对其他的行业不太了解,所以也没办法对比出来程序员跳槽是不是比较频繁。
我身边的程序员,有在一个单位工作十多年的,有像我一样平均三四年换一家单位的,也有跳槽比较频繁的,平均每年都会换一家单位。
能频繁跳槽,我分析不外乎几点:
岗位多 特别是在北上广深这些IT行业比较发达的城市,程序员真的是不太愁找工作(工作能力不错的前提下),真的可以说,在一家单位做的不爽了,直接在招聘网站上把简历打开(招聘网站上的状态设置成考虑跳槽的状态),就会有不断的有面试电话打进来(当然大多数主动打电话的单位都是外包,哈哈)。
我跳槽的时候,都是主动给心仪的公司投递简历,基本都是可以得到面试机会的,而且通过率也挺高。
大部分IT公司,每年涨薪都不是很多;而跳槽一次的话,至少得涨个30%吧。
我在第一家单位的时候,起薪3K,每年涨500-1000,是不是很可怜。第一次跳槽,工资就从5K涨到了8K。
第二家单位第二年就涨到了12K,但是从此以后,就是每年涨1K的龟速了。第二次跳槽的时候,月薪虽然涨的不是特别多,但是按照年薪计算的话,应该涨了有60%以上了。
当然也有涨薪比较快的单位,我的一个朋友在一个神奇的网站工作,研究生毕业工资一万左右,现在工作有三年了,刚刚涨到了20K。如果你在这种单位,好好珍惜吧。
在外包公司的,想去一个非外包公司,跳槽。
传统行业的,想去互联网公司寻求技术发展的,跳槽。
互联网公司的,想去传统行业养老的,跳槽。
小公司的,想去一个大公司,跳槽。
大公司的,想去初创企业当个技术合伙人,跳槽。
......
欢迎大家在评论中分享自己的跳槽原因和经历,还有说说跳槽涨了多少钱,哈哈。
干得不爽,只好选择辞职。作为一名老程序员,在一家创业公司做了三年多互联网开发,我现在终于解脱了。三年中加了两次薪水。第一次700,第二次770。第二次年头加薪,我要求提高500,老板说董事会规定一次只能加那么多,然后要到6月再满足我。于是到了6月份,我发现并没有提高500,问之,说到7月份加。快到7月份,有一天晚上项目经理要我留下来加班,我饿着肚子一时间也搞不定手上的任务,就擅自回去了。结果,老板知道了就取消加薪计划。5月份以来公司制度越来越严格,首先是安装摄像头全日监控员工行为,其次规定上班时间不准使用手机,除非工作需要;再次,除了查技术资料,浏览各大网页需要申请;制度下来后,公司天天像在牢房里渡过,这样的工作环境,请问大家会喜欢吗,能否继续坚持?我是走了……
为什么程序员是一个跳槽比较频繁的职业?
因为好的程序员确实值钱,连带着不那么好的程序员也相应的值钱了。
其实是现在这个行业导致的,互联网的世界里,就算是一头猪站到了风口上,也能飞的比大师兄还快。
不是你不明白,是我变化快程序员本身是干技术活的,技术迭代比较快,所以一般程序员都有较强的自我学习能力和自我迭代能力,随着时间的延续,本身的能力水平提高了,那么肯定期望与之匹配的待遇,但往往很多公司的迭代速度是很慢的,承担不了程序员这种高薪成长,所以往往满足不了程序员的需求。
那么只能跳槽啦!
老用户与狗不得办理
还有就是,往往软件公司也好,互联网公司也好,很多老板都喜欢招新人给高薪,但是老人年年不涨薪,最后的结果就是老人纷纷离职,这种情况也造成了外界看来程序员频频跳槽的现象,但往往都是情非得已啊。不给涨工资啊。
那么只能跳槽啦!
跳一跳更 健康
老公司的暮气沉沉和新公司的造气蓬勃形成了鲜明的对比,在老公司任劳任怨,每年涨薪不超过10%,但是一跳呢,工资普遍double,这种风气形成并且传播,明眼的程序员肯定待不住了啊。
那么只能跳槽啦!
其实苦的是HR,老板不给力,还让留人,你告我咋留!!!!!
⑸ 为什么有的程序员的代码结构混乱
程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。
或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧代码简直一团糟。
但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难。
为什么你觉得旧代码异常混乱?因为读代码更难。
这大概就是代码Reuse难以实现的原因。 这就是你组里的每个人都喜欢用不同的功能将分割的字符串转换成一个数组。比起猜测旧的功能是怎样实现的,重新写一个自己的功能要简单和有趣多了。
作为这个公理的推论,你可以问问身边的程序员他们正在奋战的代码怎么样?“简直是一塌糊涂!”他们肯定会这样说。“我简直想推倒重来!”
为什么认为代码这么糟糕呢?“额,看看这个功能,竟然有两页长!完全不知道这些东西为什么在这里!完全不知道这些API是干什么的。”他们会这样回答你。
漫画:读别人代码是一种怎样的体验?
曾经,Borland的创始人 Philippe Kahn当初就是向记者们吹嘘:Quattro Pro会比Microsoft Excel要好用得多,因为它是从头开始编写的,全部都是新的源代码!
但是,认为新代码比旧代码好简直就是荒谬。旧代码是已经运行过的,测试过的。无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些bug。这种修复可能是一行代码,也可能是几个字符,无数的时间和精力都花在了这些bug修复上。
当你决定抛弃这些旧代码从零开始的时候,你也丢掉全部前任努力的结果。
新代码一定比旧代买好?NO,重写可能会带来更大的风险。
对技术领导者来说,重写项目的代码也是一个异常艰难的决定。因为从公司层面说,重现代码甚至会威胁产品的市场竞争力。一旦决定重写代码,那么与竞品相比,你可能落后了2~3年——在软件行业,这时间可够长的。
你理想中的新代码会带来产品功能的提升▼
但事实上,即便重写的新代码可以实现旧代码的所有功能和需求,但是为产品带来的市场竞争力只有边际提升。因为重写用的新技术、新语言、新框架并没有给产品带来质的飞跃。
更不用说在重写的漫长过程中可能会遇到一些意外情况,比如:
1、缺钱:资金链的断裂▼
2、缺人:核心程序员离职
最终导致效果不佳:达不到原产品应有的所有功能和需求,白白浪费了时间和金钱,也丢掉了市场竞争力。▼
所以重写代码意味着,你在把自己置身于非常危险的境地,可能几年后你也写不出比以前更好的代码。你只是花了一大笔钱把已经存在的代码又写了一遍。
当你觉得眼前的旧代码很烂时,该怎么办?
你觉得旧代码写的很烂,那又怎样呢?它们已经上线,已经在实际运行中经受住了考验。所以当你发现前任留下的代码乱七八糟的时候,不妨冷静下来,从以下三个方面入手理解代码、改善代码:
1、代码的结构有问题
如果一段网络代码突然弹出了自己的对话框,应该是UI代码需要被处理。这些问题可以被解决掉,你要一次次小心地移动代码,重构,改变接口。还需要一位细心的工程师立马仔细地检查这些改变是否有问题,从而不打扰到其他人。事实上,甚至比较大的结构变化也可以不扔掉代码来完成。
大牛程序员Joel Spolsky回忆说,曾经在某个项目中,他和他的团队花了好几个月重新架构在一点上:把代码动来动去、清理、创建有意义的基类,并创建了模块之间的完美接口。但是他们始终非常小心翼翼,并没有产生新的bug、也没有丢掉任何旧代码。
2、代码的效率不高
曾经,Netscape的渲染代码被传非常缓慢。但事实上,这只会影响该项目的一小部分,这部分是你可以优化甚至重写的。你完全不必重写全部代码。优化速度的1%工作量,会让你获得99%的爆炸性提高。
3、代码写得很丑
有些代码真的写的很丑,比如Joel曾参与一个项目,开始用下划线做开始的成员变量约定,但后来改用更标准的“M_”。所以一半的功能用“_”开始,一半用“M”开始,这看起来真的很丑陋。但这个问题5分钟就能解决,而不用从头开始写全部的代码。
最后,你要记住,从头开始再写一遍并不意味着你会写出比以前更好的代码。因为你没有参与到上一个版本的创建,所以你其实根本就不算有经验。一旦你准备推倒重写,你可能会再犯一遍版本一犯过的错,甚至会产生更多的新问题。
一个总结:
面对糟糕的旧代码,Keep Calm & Carry On !
在大型商业项目中,推倒重来是非常危险的行为。当然,如果你是在做实验,想到新算法可以随时重写。
⑹ 如何辨别一个程序员水平的高低
1.自己介绍项目,看对项目的提炼总结能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技术深度;
3.设计模式提问,看有没有学习方法;
4.语法基础问题,多线,分布,安全等问题,看知识面广度;
5.智力问题,看反应能力,分析问题思路等
上述五步基本可知是否是一个好程序猿
计科专业从事软件开发十几年了,主要在浏览器内核领域研究的比较多,最近在研究服务器后台方向,辨别程序员水平高低主要看做出了什么产品,如同现在的程序员主要是项目经验,简历上写的一堆项目经验都是面试的时候主要提及的问题。经常在面试中会问两个关键点:一个是做过什么项目;一个是在项目组中承担什么职务,毕竟参与过和做的多少程度是不一样的,这些都是可以通过一些具体的细节检测出来,问题越具体越是容易看出水准,具体的东西不是能够编造出来的。
有很多技术公司直接不通过笔试,仅仅通过简单的面试就确定工资水准了,最简单的测试程序员水平的直接用笔试的方式,笔试可以把一些细节量化,尽量的细节化也是能测试出程序员基本功的,但这种基本用来测试初级程序员的,很多高级的程序员看到有笔试直接就抬腿走人了,因为有些程序员在一个方向做的时间太长了,很多基本功都忘得差不多了,所以笔试可能不过关,现实中很多程序员笔试不过关,面试还可以,也一样可以做项目说的就是这类人,起码这算是非常优秀的程序员。
有很多公司采用谷歌的方式,直接采用上机写代码的方式检验程序员水平,这种方式比较直接,但在现实中可能消耗的时间以及面试官的精力,目前只有极少数的公司用这种方式,国外的公司用这种方式比较多,这种看基本功非常有效。通过代码可以看到编码习惯以及算法的设计上,都能直接看的出来。
普通的程序员直接看项目的经验,高级的直接看做过的产品,特别是产品主要设计人员,这就是程序员内心的自豪感,毕竟作为一个程序员起码要有自己设计开发的产品,也算是不白做一个程序员,在程序员的职业经历中如果能经历过一个产品从开始设计的初稿到最后推向市场,如果是完整的经历,将是一种巨大的财富,只要经历过一次都会对产品设计有一个比较层次的认识,这种能力需要靠直接的面试语言表达来展示出来,谈下对产品的认识以及产品稳定性性能等方面的总结,能到这个层面起码是高级软件工程师的级别。
当然有些程序员内在的东西不是靠语言或者写代码看出来的,因为一个优秀的程序员不仅仅是代码能力以及框架能力,还有几个非常重要的能力
程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
希望能够帮到你。
自认为不是一个好的面试官,因为我认为在这么短的时间内,准确地衡量出来程序员水平的高低是有比较大的难度的,并且我有多次看走眼的时候,面试的时候觉得能力还不错,但是入职工作了一段时间之后,编程能力不忍直视。
工作之后接触一段时间,我会从这么几个方面观察他们,以判断技术能力的高低和发展潜力。
能不能出活儿、能不能debug
能不能把开发任务按时按质量地完成,当然是最主要的衡量标准了:
解决问题的方法
在开发过程中,难免会遇到没有见过的问题,有些程序员遇到问题无从下手,而优秀的程序员,自有一套解决问题的方法。
分析问题、流程设计的思路
有人会认为,程序员的主要工作就是敲代码,上班大部分时候都是在敲代码,其实并不是这样:
总结问题和改进问题的能力
好的程序员,相同的问题不会犯第二次,差的程序员,总会在一个问题上栽跟头:
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
不请自来,一介码农路过,留下些看法。
程序员主要是有四种综合能力,也就是debug 能力、 performance分析、 保护性编程和 投入产出比。
仅仅独立完成日后必然成高手?在这里不能说一棒子打死,至少对于很多人来说,能独立完成是没什么问题的,有的是因为对业务熟悉,有的是真的基础扎实。但怎么说呢,程序员和浏览器打交道是最多的,现在这个互联网时代,遇到的大部分问题网络都是可以解决的,也就是普通程序员 + 网络 = 超级程序员。 但很多人也没明白具体的原理,甚至都是这个项目抄抄那个项目抄抄的,久而久之虽然解决了平时的业务,但进步的空间却很少,甚至止步不前,写出来的代码也可能存在很多坑,所以,仅仅能独立完成任务的话,离高手还有比较远的一段距离。
如何辨别高手程序员?也就是结合我们一开始列举的那四个能力进行判断。不同级别的程序员,在那综合能力面前,强弱也是不同的。例如在奔溃的或者其他性能调优问题上,即使是面对大量复杂的代码,在信息不全的时候也会一步步的分析,抽丝剥茧缩小范围,最终定位根本原因
,并且最终给出一个好的方案。
如何成为高手程序员?
当然还有看他摘了帽子是否秃顶这样的笑话,就再不赘述了。
第一阶段(黄金):会用编程语言实现需求,比如现在的业务系统,都会找一些会搬代码的人来拼工作量,也就是能自己独立基于搭好的框架实现crud常规操作。
第二阶段(铂金):除了crud,还会有一些自己踩过坑的经验,知道如何处理一些常见问题,或者可以基于搜索引擎快速解决一些异常情况。
第三阶段(钻石):能解决一些疑难杂症和会通过debug部分源码类库查看到这些疑难杂症是如何引发的,并通过编码解决这些问题,还能进行一些局部的性能优化,类似某个系统接口缓慢可以单独去优化。
第四阶段(星耀):会基于整个系统进行设计和规划,根据业务特性选择合适的框架,从源头控制开发遇到问题的频率,可以自主的搭建框架并完善机制,了解各个组件工作原理。
第五阶段(王者):小说里面总是说练武功的永远比不过创造武功的,同样的道理,用框架的也往往不如写框架的,所以写框架的这类人单独分层。
第六阶段(荣耀):其实这个阶段不应该列入进来,因为这类人往往不编码的,只是给出思想;像Hadoop这种框架就是基于人家发表的一些论文(bigdata)进行编码实现的,这类人注重的是思想和算法,区块链,大数据,云计算等等概念的创造和理论的支撑是这类人提出来的,这些人才是真正影响行业走向的人。
程序员的水平高低,不是靠语言或外在表现就能看出来的,不是看他会多少技术、参加过多少项目、写了多少博客,而是看他在实际业务场景中解决问题的能力,尤其是面对一些特别复杂的问题,或在高强度、高压工作状态下解决问题的能力与态度。
技术可以通过学习掌握,但是解决问题、定位问题的能力却不是一蹴而就。大家可能会说,“解决问题的能力”这个太宽泛了吧,可以更具象化吗,有具体的测量方法吗?简单整理了以下几点供参考。
会写出满足需求的代码,早就不是评判程序员水平的标准了。代码编写既要满足业务需求,同时还要考虑后续的软件维护,说得通俗些,既要自己爽,也要别人爽。一个优秀的程序员,会致力于写出更简单、更效率、可读性强、扩展性强的程序代码。
程序员在日常工作中,需要理解各式各样的业务需求,所以这就需要程序员具备一定的逻辑思维能力。可以说,逻辑思维是程序员的灵魂,因为每一行代码都是程序员逻辑的体现。
项目着急上线,发布时出现问题?
业务高峰时段,系统宕机了?
业务催、运营催、用户催、老板催!
各种形态的bug,各种着急的心情,背后无数支眼睛盯得内心慌慌......
这些都是一位合格程序员所需要面对的日常。不同的程序员,在解决问题的方法、效率、质量等方面,都各有千秋。一个经验丰富的程序员,能够扛住各方压力,在复杂条件下找到核心问题,通过抽丝剥茧的分析来找到产生问题的原因,并快速进行应对处理,事后及时复盘总结,减少同类问题出现的概率。
随之互联网的发展,越来越多的人涌入程序员这个赛道,竞争日益激烈,加之新技术层出不穷,更新迭代快,程序员所使用的语言、框架、模式都会发生天翻地覆的变化。如果不主动学习,你很快就会被落伍淘汰。
这种其实在面试过程中能体现出来,沟通主要是技术沟通,以及和客户之间的沟通,所有技术都不是闭门造车就能搞定的,沟通能让事情推进起来更加顺畅,包括和产品经理之间的流畅的沟通也显得非常重要。程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
线上出bug了,第一时间响应、处理;
团队项目进度紧张、人手紧缺,主动补位;
又或者,在项目推进过程中如果只是关心自己模块内容,对于整个项目置之不理,只守着自己的一亩三分地。
随着时间轴的拉长,你会发现,有此f技术能力不是最好的,甚至不如你的小伙伴,最后做到了技术主管或经理、甚至更高职位,这里面除了技术实力,还有一个叫“责任心”的东西。
结束语
判断一个程序员的水平高低,核心是其解决问题的能力,而解决问题的能力养成,需要扎实的底层基础来支撑,要综合其代码质量、项目经验、框架能力、逻辑思维等等多方面,不能单看某一方面。
而对于1-6岁的程序员来说,想要成为一个高级程序员,变得越来越优秀,唯有持之以恒去学习、积累、实践、修炼。
----end----
一:50岁的时候,头发还是黑色的浓密的。
二:赚到的钱能保证家人快乐的生活。
三:当公司不要你的时候能成功转型。
其他的例如编程经验、写代码厉害啊什么的根本不值一提。
这就是程序员的面试嘛 :-)
(1)是否能熟练使用所用编程语言的主要功能;
(2)是否知道用合适的数据结构解决问题;
(3)是否知道基本的算法,并且用这些算法解决问题;
(4)只看少量代码的话,从变量命名和程序结构一般能够判断是否是新手;
(5)给出具体问题,能够用程序解决,能考虑到所有的边界条件;
(6)考虑程序的可扩展性,可维护性;
再往高一点走,就需要
(7)面对模糊的问题能够分析并且找到细节和具体的需求;
(8)知道利用已有的库,架构和工具等来解决新的问题,而不是什么都自己实现;
(9)能发现并改进已有程序中的瓶颈;
(10)对整个大项目的程序架构有很清晰的了解,知道相互之间的依赖,以及知道为什么采用这样就架构;
(11)给一个大的项目,能够对整个项目的程序架构和组件进行合理的设计,考虑并行性,低延迟,大数据量等各种需求和应对方式。
带领团队已多年,项目数十个,对判别程序员水平的高低,我有自己的看法,欢迎大家一起交流。
1.代码质量。
优质的代码,首先是经得起考验。静态分析工具过一遍,无错误,无警告。当然警告部分需要人工重审,因为静态分析工具不一定完全正确。过了这一关,重要的还须过测试关,少Bug或无Bug的代码,才是好代码。优质的代码带有技术气质和艺术气质。阅读起来,有一种赏心悦目的快感,即工整美观,干净利落,又蕴含着理论常识,运用技巧,精准到位。
2.表达能力。
3.文档能力。
文档形式包括但不限于PPT,文字,图表,音视频。文档内容包括但不限于API说明,工具手册,项目事项,技术论述,陷阱总结,方案展示,指导手册。文档要求必须是满足公司或部门的规范和格式,否则五花八门的,不利于交流和传承。
以上3点,是我量化判断程序员水平的标准,仅供参考。相比水平,其实我更看重程序员的态度,执行力,时间观念,自学力等等,也是很重要的团队作战能力,也可以说是程序员水平的考量吧。
谢谢大家。
⑺ 一个标准的程序员,它的代码应该是怎样分层次的
每个代码的层次都是不一样的,都是非常缜密的,除此之外,不光是要会写代码,还要成为一个好的程序员才是最重要的。
程序员,随着计算机和软件行业的发展,基数越来越大。如何在茫茫的程序员中脱颖而出呢,来看看作为一个好的程序员的标准你都占了几条?
1.经常和其他的人交流
什么时间做什么事情,做事情按照一定步骤来,好的程序员从来不会在时间紧任务多的时候手忙脚乱。
7. 保持谦虚
技术永无止境,技术范围很广,技术水很深。即使在一个领域是专家,到了其他领域还是需要其他人的指点。好的程序员总是把姿态放低,虚心请教。