1. 程序员跳槽应该注意什么
程序员跳槽的注意事项有哪些呢?下面我为大家整理了程序员跳槽的注意事项,供大家参考!
一、技术要有深度,更要有广度
一味的钻研某一项技术,乃至达到顶峰,这是很OK的。但是,科学的发展也是极快的。 所以,在研究深度的同时,不要忘记关注当下流行的技术。 拿游戏开发来说, 许多招UNITY3D引擎程序员的公司,是不会为一个多年经验的传统引擎开发者开出大价钱的。 特别是一些新团队,或者团队LEADER本身没有这个意识。 当然,也有识货的公司。
二、跳得多涨得快,不跳不涨
很多人觉得,现在的程序员很浮燥,干不了多久就要跳了。 但是,有没有想过,这是什么导致的。 你一年不涨工资,两年不涨工资,那别人发现,自己的工资与业界水平相距太远,不得不跳。 或许你说,那至少要要多呆些日子,多积累经验再跳吧。 我们来看看第二条潜规则。
三、你在上一家公司的工资,直接影响了你在下一家的工资
每个人都是有底线的,这个底线,是一个相对值。 因此,业界通常喜欢在你上一家的工资的基础上,最多上浮30%。 也就是说,你干上十年,运气如果真的好,说不定到下一家的工资,可以翻翻。 这一条,和第一条是相辅相成的。
四、不要对分红期望过大,工资一定要要到位
项目成功,是靠大家的努力才能换来的。 但,项目的失败,或许是由于个别人的人脉太差,或者管理水平太次。
五、年轻的你,很难成为高管
或许你技术一流,或许你智商很高。 但是,你的确没有成为管理者的资本,人脉,经验,阅历,你是比不上那些‘前辈’的。 因此,多忍忍吧
六、内推比盲目投简历有效
很多人喜欢在网上投简历,而实际上。各大QQ群里的招聘信息,更佳有效果。一般都是HR或者猎头在发。有的直接是老板。
七、不要因为笔试面试失误就否定自己
笔试面试通常喜欢考算法,数据结构,或者一些特定的知识。 如果你很厉害,完全搞定这些了,说明你真的很不错。但如果不巧遇上了一些自己不会的,或者因为工作一直没有和这个沾边而忽略了的。不要为此为感到烦恼,如果你觉得有必要补充这方面的知识,那接下来可以抽空补上。但是,不要因为这过,而放弃自己的'先前的工资期望。是个人都能明白,即使有些东西你不会,在项目开发过程中,也会自然会的。人的本事不是与生具来的,不是你掌握得多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握。
八、前期靠技术,后期靠情商、人脉
年轻的时候,你可以用你的精力去拼博,可以努力学习。但随着年龄的增加,你的精力会不及当年,同时也要面对家庭。因此,在发展技术的同时,也不要忘了结交各种小伙伴,大伙伴…………
PS:以上事项,排名不分先后。每一条,都实用
但是,技术是根本,是你作为一个程序员,能够在这个行业混下去的最佳筹码。如果你还有精力撸,那希望你不要放弃对技术的追求……。
其他注意事项
1、确实是跳得多涨得快,不跳不涨
但你不能让HR发现你跳的多。
2、你在上一家公司的工资,直接影响了你在下一家的工资
确实很多HR以这个做依据去砍价,不过可以报高上家公司的待遇,不过也别乱用,现在很多公司入职要开上家公司收入证明的。
3、不要对分红期望过大,工资一定要要到位
除非是非常正规的大公司,不然想都别想,我有家公司给我说年底奖金2月工资,结果半个月工资。
4、技术要有深度,更要有广度
拿高工资没有技术做底子是不行的
5、内推比盲目投简历有效
内推的话至少不会因为一些其他因素给过滤掉,对方相对来说也相信内推的人。
6、不要因为笔试面试失误就否定自己
基本上好的工作都是面谈环节搞定的,笔试人家基本不看的。
2. 程序员现状,看看来自二三线城市程序员的真实感受
2022年3月,乌鲁木齐市,95年26岁Java后端程序员。
我先后在乌鲁木齐市两家互联网公司工作过,通过自己努力的思考,总结出了一些对程序员现状的看法,供大家分享和参考。以下内容全部属实。
很多人会觉得程序员是高薪行业,并且有人会说朝九晚五双休,工作清闲还有业余时间去做其他事情。
我来揭晓真实答案。真实答案和上述情况基本完全相反。
真实情况我的城市,程序员的薪资算不上高薪行业,不是行业平均薪资不高,而是这里很多中小企业都会考虑降低用工成本,在招聘的时候用各种方式打压你的薪资。
这种方式尤其对新入行的程序员特别奏效。因为企业打压你工资的方式有很多种,而新入行的程序员根本就没有与企业谈判的资本。或许你入行时技术功底扎实,开发水平相对较高,又或者你学历很好,综合能力很强。但是企业依旧会以你没有工作经验,以及试用期,或者说培养你都需要付出成本,找人带你教你等等一系列举措,让你哑口无言只好接受企业的用工要求。没有能跟企业谈薪资的能力。企业最后会以一个较低的薪资利用你为企业创造更大的价值。
而处于新手阶段和试用期的你,想要获得企业的青睐获得转正的机会,会更好的去工作提升以及转正。这样你会在试用期努力工作,为企业创造效益。这个时候大多数程序员都会想,薪资低一些活多一些累一些也无所谓,因为这时候在锻炼提高自己的工作能力,对自己其实也有很大好处。企业也同样利用员工这个心里,不停的激励你去工作。而企业只是付出了很小的成本,利用新人的你去做了很多又苦又累的活,而你还不自知。这样企业很开心啊,而你除了努力付出工作和锻炼,钱却没有收获进口袋里。
你以为你能力锻炼了就会对应的拿到较高的薪水的时候。但是你别忘了,小企业把程序员当码农并且降低用工成本的核心思想并不会因为你的技术提升而发生改变。
企业依旧会以招最少的人用最低的成本让员工干最多的活去运行,并且项目大人员少,这样上线前一个就有理由让你加班,并且告知你是不可避免,去要求你加班工作。我自己的真实经历是连续加班一个月,并且在每天正常下班之后还需要额外加班5-6个小时,工作日连续五天加班后,周末再额外加班一天的强度去工作。基本就是一天工作14个小时一周工作6天,这么个强度。而且企业并不会在乎你是不很累,加班不会付加班费,而是以加班可以调休的方式安慰你。然而你想想这种小公司,并且开发人员企业不配备很多的情况下,怎么会让你调休。调休是需要上级领导项目负责人到经理,一系列人的签字的。可想而知,调休说是有,基本想想就可以,不会让你想休就休的,哪怕加班很累,第二天还是要上班。因为你不干就没人干,但是公司项目需要上线。而且你的工作每天都有人监工,你就负责干活就好,让你做什么就做什么。这样你还会觉得程序员薪资很高吗?
现在企业都知道招年轻人,刚入行的新人最好。因为他们没有太多经验,好对付,便宜而且干活又卖力。哪怕有几个不上进的水平差一点的,也会有人监督你把每天的任务完成。怎么说企业都不亏,所以企业能用新人和年轻人为何还会选择你要求薪水高的人呢。你以为你技术上去了,可以跟企业要高薪的时候(其实也不高,就月薪过万而已),以你的技术可以拿到月薪过万的时候。企业依旧可以通过各种方式降低用工成本,或者压根就不录用你。比如试用期只给你80%薪水,哪怕企业知道你经验很丰富,也利用试用期少给钱让你多干活快速熟悉并进入开发。会以工作年限限制你的薪水,你说你水平高怎么证明,其实就是企业不愿意承认和付出更高的成本而已。哪怕你技术很牛学历很好,一样会面对这样的问题。等真到一定的工作年限的时候,你会发现头发和精力和兴趣都会少很多。你再去跟企业谈薪,你还会发现企业还有方式降低用工成本。你有家庭吗,你能加班吗,对你提更高的技术要求等等。虽然总的来说薪资会有一定上升,你想要拿到一个满意的薪资很难,因为你满意企业就会不满意,企业不会为了照顾你,而降低自己的企业的效益。
这就是现在绝大多数程序员现状。付出很多,承受很大的压力,赚取来一点辛苦钱。而且现在程序员绝大多数都会有35岁危机。这行业想要做好是有一定门槛的,还要有抗压能力和很强的学习能力,理解业务的能力。现在你还觉得程序员这份工作好干吗,高薪吗?那些年薪几十万的都是一线大厂的少数人。中国绝大多数行情,程序员就是底层的码农而已。付出这么多,收入稍微比普通职业高了那么一点而已。一样会面对买房买车的压力。谁也没比谁好多少。没有太多业余时间发展爱好,接触更多事物,压力大。绝大多数时间在跟计算机打交道。每天面对电脑的时间很久,一坐就是一天。
我这两天也是刚离职,因为企业不招人进来,就五六个人干一个项目,还加班。当你去面试的时候一大堆企业要招你,但是能给你满意薪水的企业的数量直接就大打折扣了。
当然企业不给你满意的薪水,也不代表你不好,这只是畸形商业模式下的企业招人的方式而已。你要相信自己其实比很多人要优秀。
否则企业会让你怀疑人生的。在一个没有装修过的小房间当码农的感觉亲自体会一下就明白了。就像不被企业在乎的流水线工人埋头苦干。
遇到这种情况程序员们一定要坚持自己薪资的底线,不要让企业或者根本不懂技术的hr 轻易的压低你的薪资。而你却选择默默接受。虽然我们是打工人,但是面对这样的企业也要坚持自己的原则,去进行双向的选择。并且为自己以后的发展做好规划。
希望程序员们都能找到一家满意的公司,去发展。人生只有一次,不只是工作,一定要按自己喜欢的方式去活。
这就是来自二三线程序员的真实现状。你们怎么看呢?欢迎在评论区留下你的看法。
3. 程序员该有哪些职业道德
to accept responsibility in making decisions consistent with the safety, health, and welfare of the public, and to disclose promptly factors that might endanger the public or the environment;决策时要维护公众的安全、健康、福利,并及时披露任何危及公众的因素。
to avoid real or perceived conflicts of interest whenever possible, and to disclose them to affected parties when they do exist;尽量回避存在或可预见的利益冲突,如有冲突存在应及时向波及对象披露。
to be honest and realistic in stating claims or estimates based on available data; 对现有的数据的声明或估计应诚实、客观
to reject bribery in all its forms; 拒绝任何形式的贿赂
to improve the understanding of technology; its appropriate application, and potential consequences; 增进个人对技术及其应用和潜在后果的理解
to maintain and improve our technical competence and to undertake technological tasks for others only if qualified by training or experience, or after full disclosure of pertinent limitations; 保持并提高自身技术实力,在确保能力和经验胜任、并充分披露有关局限的情况下,方可接受他人的技术性委托
to seek, accept, and offer honest criticism of technical work, to acknowledge and correct errors, and to credit properly the contributions of others; 对技术成果,寻求、接受和提供诚恳的批评,承认和纠正错误,和恰当地承认他人的贡献
to treat fairly all persons and to not engage in acts of discrimination based on race, religion, gender, disability, age, national origin, sexual orientation, gender identity, or gender expression;公平对待所有人,不做出任何有关种族、地域、性别、残障、年龄、国籍、性取向、性别认知、性别表现的歧视行为。
to avoid injuring others, their property, reputation, or employment by false or malicious action; 避免因错误或恶意的行为损害他人人身、财产、名誉、或工作。
to assist colleagues and co-workers in their professional development and to support them in following this code of ethics.帮助同事的职业发展,并支持他们遵守职业行为准则。
4. 为什么说千万不要和程序员谈恋爱呢
和程序员谈恋爱会非常的累,在这场感情里付出的时间和精力也很多。但换回来的永远都不是幸福的生活,完全是一种冷冰冰的状态。
一、以工作为主
程序员的职责就是以工作为主,对于自己的恋爱总是顺其自然发展。因为程序员不懂得情趣,在他们的生活里工作往往大于一切,甚至在自己工作的时候绝对不允许别人打扰自己。
和程序员谈恋爱除非是一个坚强的人,这样才能接受程序员的爱情,也会让两个人的爱情顺其自然发展。如果没有这样的本事要远离程序员,远离这样的爱情。
5. 作为一名程序员,你真的理解需求吗
作为一个程序员,最重要的职责就是: 按时保质保量地完成需求开发。
像开发新业务这样的复杂需求, PM (Proct Manager,产品经理) 一般会写出详细的 PRD (Proct Requirement Document,产品需求文档) ,甚至可能会制作高保真原型。
而像调换两个按钮顺序这样的简单需求,PM有可能只会口头通知一下,最多在JIRA之类的项目管理平台上创建一条只有标题的ISSUE。
如果是有和用户交互的需求,负责设计的部门或人员一般会提供设计图。专业一点的话还会帮你把图都裁好,并准备不同屏幕分辨率下使用的多个尺寸版本。
当然,如果你在一个刚刚成立的创业公司,很有可能是创始人在白板前(或者是饭桌上)讲了半个小时,然后就问你:“需要多长时间把它做出来?”
不管提出需求的是PM还是创始人,他们的脑海中一定为这个需求设想好了一个自洽的逻辑和形态。PRD也好,口头宣讲也罢,都是在描述这个逻辑和形态。他们提出需求,就是希望程序员能够最大程度地还原他们的设想。
说起来简单,做起来难。 我们可以通过一个小实验来揭示这一点。
首先,你需要找一张长方形的纸。如果你在办公室,那就找一张A4纸;如果你在家,那就找一张纸巾。然后按照下面的步骤进行操作:
你的作品是什么样子?中间开洞了吗?边上呢?角上呢?如果再做一次,你能完成同样的作品吗?
你可以拿着同样的纸去找你的家人、同事或朋友,请他们来完成同样的操作。在你不施加影响的前提下,他们完成的作品极有可能和你截然不同。
为什么会这样呢?
如果你仔细观察他们操作的过程,就会发现:
由于每次对折都会可能产生两种不同结果,在撕第一个角时纸的朝向有四种可能性,旋转180度时有两种可能。所以仅仅两个撕角的位置,就至少有 2 x 2 x 4 x 2 = 32 种不同的可能性。
就这样,我们还没有考虑撕角的大小、角度的区别,还有极少数人是会沿对角线对折的……
上面撕纸的需求,其实是我自己拿了张纸随意摆弄,然后记录下来的操作流程。我照着这个流程,可以十分轻松地做出完全相同的作品。但是如果让别人来做,结果就完全不一样。其原因就是,我在完成作品的过程中,不光是按照流程进行操作,还隐含了自己的一些小习惯,却并没有把这些细节记录下来。
如果把所有细节都完整地记录下来的话,需求应该是这样的:
同样,PM在写PRD时,很有可能会漏掉一些自己认为应该是“常识”,无需再进一步说明的内容。比如“把一张纸对折”,我们很容易想当然地认为,应该是沿着长边对折,但事实上并非所有人都是这么理解“对折”的。
由于每个人的成长经历不同,其认知结构之间必然存在差异,因此对同一概念未必持有相同的理解。 你所认为的“常识”,我可能并不知道,或者拥有和你截然不同的理解。所以程序员在看PRD时,一定要把自己对需求的理解复述出来,跟PM确定是不是这么回事。否则就容易出现开发中、提测甚至上线后发现逻辑性错误,需要紧急修复甚至返工的情况。
此外, 很多问题在设想阶段是发现不了的,只有到了具体实施时才会暴露出来。 PRD不可能真正做到完备,也不能保证没有错误和遗漏。比如一个表单需求,很可能在做的过程中发现某个非法数据case是PRD里没考虑到的,这时的用户交互怎么做?文案怎么定?这都要和PM沟通来解决,而不能自己拍脑门决定。
PRD只是需求的一个快照性描述文档,并不是需求本身。 程序员应该对需求负责,而不是对文档负责。 只有和PM保持沟通,不断地细化需求,才能让需求真正落地。当发现PRD里有不合理或者有疑问的地方时,一定要提出来让PM进行解释。千万别视若无睹,甚至干脆将错就错,等着看PM笑话。
如果我们拿到了一份图文并茂、十分详尽的PRD,是不是应该马上照着文档开工呢?那可不一定。
一位优秀的程序员,应该在开工之前把下面这些问题想清楚:
程序员有责任对需求方案进行review,并协助PM改进设计。 要知道,PM一般不会从技术角度对需求进行考虑,所以往往提出的并非最优方案。有时只要做一点点调整,技术实现的难度就会大大降低,却不影响目标的达成效果。
比如某个业务需要用到日期选择器组件,PM为此专门设计了一个,而你知道系统中某个功能页面里有现成可用的同类组件。这时就应该和PM沟通是否可以直接复用,或者在原有组件的基础上进行功能扩展。这样既节省了开发资源,又保持了用户体验的一致。
程序员要对整个产品的可用性负责,全面评估需求可能导致的不良影响,谨慎对待有破坏性的需求。 PM由于不了解系统的底层实现和实际数据的组织方式,所以很可能无法全面地评估需求的影响面。如果程序员忽视在这方面的思考,只是机械地按部就班地执行方案,就很可能导致严重的线上事故。
比如要对某数据进行批量修改,在做的过程中时发现该数据有多个业务正在使用。这时就应该必须停下来和PM沟通,因为PM可能只了解自己负责的那一块业务,不知道修改可能会对其他业务产生影响。此类需求要和相关各方沟通协商,确认修改没有不良影响后才能继续。
程序员要有魄力去拒绝那些明显不靠谱的需求。 有的时候,PM提出需求的动机不是为用户创造更多的价值或提升用户体验,而是为了冲绩效完成自己的KPI。为此拆东墙补西墙,从兄弟业务手里抢流量入口;甚至杀鸡取卵,以严重破坏用户体验的方式拉量。遇到这种事,程序员一定要坚持自己的原则,守住自己的底线。
6. c#程序员都有什么最低要求
1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
3:规范化,标准化的代码编写习惯
作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。
4:需求理解能力
程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
5:复用性,模块化思维能力
经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。
6:测试习惯
作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。
7:学习和总结的能力
程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。
善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。
善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。
具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。
那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了应该具备上述全部素质之外,还需要具备以下素质:
第一,需求分析能力
对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?
一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失去这些准则。
程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安装使用的简捷性。
第二,项目设计方法和流程处理能力
程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。
一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立数据词典;他需要加工逻辑流图以形成整体的系统处理流程。一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把握。
第三,复用设计和模块化分解能力
这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?
作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的一个佐证。
将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。
第四,整体项目评估能力
作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累那种产品化研发的经验,这也是没有办法的事情。
第五,团队组织管理能力
完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因为这里面设计了一些技术性的指标和因素。
首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。
其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥组队的效率。
一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容易被忽视的。
综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习惯,不改变这些,我们的合格的项目设计者还是非常欠缺。
另外,为防止有无聊的人和我较真,补充一点,本文针对目标是作商业化的软件项目和工程,那些科研机构的编程高手,比如算法高手,比如图象处理高手,他们的工作是研究课题而非直接完成商业软件(当然最终间接成为商业产品,比如微软研究院在作的研究课题),因此他们强调的素质可能是另外的东西,这些人(专家),并不能说是程序员,不能用程序员的标准去衡量。
最后补充一点东西,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为例,(不过笔者喜欢快速原型法)。
第一个步骤是市场调研,技术和市场要结合才能体现最大价值。
第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手册。用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。用户操作手册是指明了操作流程的说明书。请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。
需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或公司市场部门)能够有真正的沟通和了解。
第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于新领域,技术主管人员一上来无法给出明确的详细设计说明书,但是并不是说详细设计说明书不重要,事实上快速原型法在完成原型代码后,根据评测结果和经验教训的总结,还要重新进行详细设计的步骤。
第四个步骤是详细设计,这是考验技术专家设计思维的重要关卡,详细设计说明书应当把具体的模块以最‘干净’的方式(黑箱结构)提供给编码者,使得系统整体模块化达到最大;一份好的详细设计说明书,可以使编码的复杂性减低到最低,实际上,严格的讲详细设计说明书应当把每个函数的每个参数的定义都精精细细的提供出来,从需求分析到概要设计到完成详细设计说明书,一个软件项目就应当说完成了一半了。换言之,一个大型软件系统在完成了一半的时候,其实还没有开始一行代码工作。那些把作软件的程序员简单理解为写代码的,就从根子上犯了错误了。
第五个步骤是编码,在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!
第六个步骤是测试
测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。
总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会又不可预料的问题存在。
完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,知道这个软件被彻底淘汰为止。
写这些步骤算不上卖弄什么,因为实话讲我手边是一本《软件工程》,在大学里这是计算机专业的必修课程,但是我知道很多程序员似乎从来都只是热衷于什么《30天精通VC》之类的,他们有些和我一样游击队出身,没有正规学过这个专业,还有一些则早就在混够学分后就把这些真正有用的东西还给了老师。
网上现在也很浮躁,一些coding fans乱嚷嚷,混淆视听,实际上真正的技术专家很少在网上乱发帖子的,如笔者这样不知天高地厚的,其实实在是算不上什么高手,只不过看不惯这种对技术,对程序员的误解和胡说,只好挺身而出,做拨乱反正之言,也希望那些还沉迷于一些错误人士的coding fans们能认真想想,走到正途上,毕竟那些聪明的头脑还远远没有发挥应有的价值。
7. 如何确定自己是否适合做程序员
你老婆对你说:“老公,晚上回来买一个西瓜,如果看到西红柿,就买两个。”
如果你晚上买了一个西瓜和两个西红柿回来的话,说明你不适合当程序员。
如果你晚上只买了两个西瓜回来的话,说明你适合当程序员,但是
。。。
。。。
。。。
。。。
。。。
。。。
。。。
你应该不会有老婆。
=========华丽丽的分割线===========
你们这群程序员也是够了,一直在吵应该买几个西瓜,你们这么吊你们老婆知道吗?还有很多有经验的程序猿说应该反复确认用户需求的,你们确定你们都能找的到老婆?
我听到需求时心里运行的代码如下:
int 到底买点啥 ( ) {
// 所有把大括号放到这一行的人都去屎!
int 西瓜的数量 = 1;
if (看到了西红柿) {
// 注意大括号的位置
西瓜的数量 = 2;
}
return 西瓜的数量;
}
// 尼玛,为什么没有缩进!!!!
那么什么时候该买三个西瓜呢?我们重现一下场景:
你老婆对你说:“傻X,晚上回来买一个西瓜,如果看到西红柿,就再买两个。这次你要是还买两个西瓜回来,我就一辈子都不理你了!”
你仔细揣测了一下她的需求,发现了这个关键的“再”字!哈哈哈,这种战斗力只有5的渣题怎能难倒我这种top coder!你晚上开开心心地买了三个西瓜回来,跪碎了新买的HHKB pro,老婆还是摔门而去,拦都拦不住!
这次你运行的代码如下:
int 到底买点啥 ( ) {
// 所有把大括号放到这一行的人都去屎!
int 西瓜的数量 = 1;
if (看到了西红柿) {
// 注意大括号的位置
西瓜的数量 += 2;
}
return 西瓜的数量;
}
就让这三个西瓜陪你过下半辈子吧!!!!
8. 求坚守底线的事例,急急急
司马光在《交趾献奇兽赋》中有言“正心以为本,修身以为基,”可见自古以来,修炼正直的高尚的品格就被视为安身立命的基石。周恩来同志,一生严于自律,为世人所景仰,这是他平生注重道德修养的结果。他年轻时代,贴手书警句于大立镜旁,言“面必净,发必理,衣必整,纽必结;头容正,肩容平,胸容宽,背容直,气旬勿傲勿怠,颜色宜和宜静宜庄。”纵观周恩来一生,不论局势如何动荡、严峻,他都照镜自勉、坚守高尚的品格,赢得了中国人民乃至世界人民的尊敬。周总理的事迹,为我们树立了坚守高尚品格的榜样。
尊严是上帝赋予每个人的最崇高的信物,也是一个国家得以高昂头颅,不被侮辱的脊梁。天津有两个计算机系的高材生,刚毕业就被日本某软件开发公司邀为程序员,开发一个以日本二战为题材的大型游戏,公司答应给予他们丰富报酬。但在得知此游戏的宗旨含有美化侵略的成份,他们毅然辞职。公司加酬谢,他们严辞拒绝:“我们是程序员,但首先是中国人!”就这样,他们以自己的行动坚守住了自己的尊严和中华民族的尊严,不论多么优厚的物质回报,都无法腐蚀他们自己坚守的那一方心灵的净土。
正义是道德的核心,是一切社会准则的灵魂。作为真正的人,在面对强暴、威逼、利诱之时,必须毫不动摇地为正义而战!南宋末年,宋都临安被元军攻破,文天祥面对元军高官厚禄的诱惑,毫不动心。元军没办法,只得把他囚禁起来,折磨他,但为了民族大义,他始终没有屈服,反而写下了令人感佩的《正气歌》,最后英勇就义。文天祥以自己的生命为代价,捍卫民族大义。
9. 程序员该有哪些职业道德
只有一个道德问题,诚实和其他技术和贸易问题。
离职的时候,我没有带走一行代码,我觉得这就是职业道德。
目前在国内IT行业,我觉得最可怕的不是问题,但当它人才流失技术(如源代码、文档等)也跟着一起,它是可用的,一些大公司,比如一些外国公司所做的相对较好,电脑上的所有外部设备接口已经被封锁,不得INETERNET,即将离任的电子邮件或被监控,但不用说,这种管理方式,通常国内中小企业很难做到这一点,所以基本上依靠员工的意识和个性,就像心理医生必须为病人保守秘密,作为程序员或者人才,当你从事产品的研发和接手一个项目,你必须与该产品或项目如源代码、文档、数据保密,这些东西是公司的商业秘密。
10. 我35岁了,还能做程序员吗
首先,程序员这个行业和年龄没有很大的关系,前段时间还有新闻报道一位80岁左右的老奶奶自己学编程做出了游戏呢,你还在担忧什么呢?如果你不清楚自己是否适合做程序员,看看这几点你达标了吗?
1、逻辑思维能力(或推衍能力)
这个是做程序员的底线。比如不能写的代码出个Exception就抓瞎不知道哪里出了问题,而是有能力从Exception顺藤摸瓜反推出哪里出了问题。Code即逻辑,Code有问题即逻辑有问题。没有逻辑的人是无法找到逻辑漏洞的,也写不出条理清晰的代码。
2、抽象思维力
这个能力大体可以决定一个程序员的上限。没有这个能力是做不出一切皆文件这种抽象的,可以试试学习函数式编程,如果无法理解并使用高阶函数,你不适合做程序员。再来几个更初级的例子:如果你学写代码的过程中,理解指针的指针的指针这个东西的时间超过了一天,那你不适合当程序员。
3、专注力
我理解的专注力只是兴趣的衍生品,你打Dota,打CS打几个小时能越打越有兴趣,为什么?因为你觉得有趣。如果也觉得写代码有意思,那专注自然不是个事。
4、想象力与记忆力
这个不是说过目不忘的那种,只是说你大概记得有什么类,都有什么函数,每个函数里的大体过程是什么样的。然后走路、坐地铁的时候就可以用想象力在脑子里做代码的重构啦,找Bug啦什么的,然后回到电脑前就噼里啪啦敲代码。我听说有人在梦里也能写代码,我还没有锻炼出这个技能。当然,这些能力不是必须的,你随身带个笔记本也行,就是效率低些,影响职业成长的上限。
5. 英语
很遗憾地,目前多数有价值的东西都是英文的。所以无障碍阅读Stackoverflow的回答是起码的。