程序员能力

关于开源的7大理念

那年仲夏 提交于 2019-12-25 19:51:59
软件正在慢条斯理地吞噬世界,开源正在慢条斯理地吞噬软件业。 软件正在吞噬世界?是的,对于购物、吃饭、健身、交停车费都需要使用软件的年代,对于平均每人每天都要花费5到6个小时使用手机软件的年代,有什么理由不相信软件正在吞噬整个世界呢。 开源正在吞噬软件业?是的,因为在软件越来越富裕的年代(也即软件不再稀缺),不开源的软件,最终是没法和开源软件竞争的。举个简单例子,如果有人要在很多个文件加密软件中选择一个使用,在功能和价格都差不多的情况下,选择开源的还是闭源的?当然要选择开源的,因为谁知道闭源的软件中,会不会有后门? 前言 开源的成功程度,或者说开源的***程度,从中国银行业的广泛采用就可以看出来,银行作为一个在IT方面相当谨慎和保守的行业,在2012年(一个大约的年限)之前对开源基本上不屑一顾,使用的基本上全是商业软件(这里是指专有软件),他们认为商业软件更专业、质量更高、更可信赖、更有保障,他们中不少人视开源软件为异类,对其功能、性能、安全性表示担忧,最重要的是,他们担心开源软件出问题后找不到“原厂”解决问题和“承担责任”。 然而就在2012年以后,银行业逐渐增加了开源的使用比例,这里面有很多原因,最重要的一个原因是,在Linux面世20年后,很多开源软件已经成为比商业软件更好的存在,以至于咨询商、集成商、开发商们在为银行提供解决方案时,所拿出的最佳方案已经是基于开源的方案,银行

优秀架构师是怎么炼成的?

試著忘記壹切 提交于 2019-12-25 02:28:19
我们来讲一个故事,一位旅行者路过一个烈日下的工地,所有人都在那儿汗流浃背地搬砖。 旅行者问第一个人在干什么,那人头也没抬地回答:“我在搬砖。” 旅行者问第二个人在干什么,这个匆匆抬起头认真地说:“我在砌墙。” 旅行者问第三个人在干什么的时候,那个人脸上充满了光彩,很自信地说:“我在盖圣玛利亚大教堂。”这个故事是不是像极了我们从事软件开发工作的不同阶段的不同状态。每当听到从程序员到架构师的书或者文章时,我们总是充满好奇,想从其中获取一些观点亦或是技能点,接下来我们就详细讲讲一下,如何从程序员走向架构师。 首先我们定一个基准点:架构师只是功底深厚的程序员,千万不要成为不会写代码的架构师。 架构师应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。可以这样说,一个架构师工作的好坏决定了整个开发项目的成败。 开篇的基准点:架构师只是功底深厚的程序员; 程序员从初级、中级、高级再到架构师,是一个不断经验积累的过程,但是在这过程中我们常常很迷茫,不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于代码世界的浩大的分工体系中,无法看清从业务到系统架构的价值链条,无法清楚定位自己在分工体系的位置,处理不好自身与技术、业务的关系所致。所以在程序员生涯中除了技术实力以外,其它软实力也不容忽视。如:主动学习、积累经验

一名好程序员到底需要什么样的标准?

China☆狼群 提交于 2019-12-24 21:34:20
无数的人问过类似的问题:怎么样才能做一个好的程序员?在回答这个问题之前,首先得明白什么是好的程序员,这样才有方向和目标,可是这事情太主观,可能各人的标准干差万别。不谈那些传奇性的独自一人做出伟大事情的特例,也不谈什么上天入地,上帝大牛的诡论,以下是我比较认可的,在通常的项目开发中,一个好程序员的标准。 在项目开发中,一个程序员的能力等于其解决问题的能力。假如想有个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的规模和难度来衡量。因为难度上不好那么筒单的划分,并且在一般的项目开发中 (非研究性项目),任务的难度主要来自于任务的规模带来的复杂度,这里把任务从规模上大致的划分为1个函数=>1个 类=>1个功能=>1个模块=>1个项目。更细致的划分时,函数、类、功能、模块、项目本身也有简单和规模大小之分。 在此之前,对项目的生产力为负,即为他布置任务、沟通和为他修补bug的时间其实要多于自己直接完成该功能的时间。也就是说,项目中存在这个水平的程序员纯粹是为了培养人才。能较好完成一个完整模块的程序员算是较好的程序员, 也是一般项目中的主要幵发者;能完成整个项目的裎序员才能算是好的裎序员,在多人项目中可做主程。 什么决定了一个裎序员解决问题的能力呢?我认为有如下几个因素: 在同等水平的裎序员之间,一个对某领域问题有所了解,一个对该领域完全不了解

一名好程序员到底需要什么样的标准?

穿精又带淫゛_ 提交于 2019-12-24 20:35:29
无数的人问过类似的问题:怎么样才能做一个好的程序员?在回答这个问题之前,首先得明白什么是好的程序员,这样才有方向和目标,可是这事情太主观,可能各人的标准干差万别。不谈那些传奇性的独自一人做出伟大事情的特例,也不谈什么上天入地,上帝大牛的诡论,以下是我比较认可的,在通常的项目开发中,一个好程序员的标准。 在项目开发中,一个程序员的能力等于其解决问题的能力。假如想有个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的规模和难度来衡量。因为难度上不好那么筒单的划分,并且在一般的项目开发中 (非研究性项目),任务的难度主要来自于任务的规模带来的复杂度,这里把任务从规模上大致的划分为1个函数=>1个 类=>1个功能=>1个模块=>1个项目。更细致的划分时,函数、类、功能、模块、项目本身也有简单和规模大小之分。 在此之前,对项目的生产力为负,即为他布置任务、沟通和为他修补bug的时间其实要多于自己直接完成该功能的时间。也就是说,项目中存在这个水平的程序员纯粹是为了培养人才。能较好完成一个完整模块的程序员算是较好的程序员, 也是一般项目中的主要幵发者;能完成整个项目的裎序员才能算是好的裎序员,在多人项目中可做主程。 什么决定了一个裎序员解决问题的能力呢?我认为有如下几个因素: 在同等水平的裎序员之间,一个对某领域问题有所了解,一个对该领域完全不了解

让程序员跳槽的非钱原因

隐身守侯 提交于 2019-12-23 22:36:03
  程序员工作仅仅是为了钱吗? NO!工作的一个很重要的目的是获取薪水,获取更多的薪水。但,这仅仅是一方面,很多时候,决定你是否愿意在一家公司持续工作下去的原因和钱无关。   马云说员工离职的原因林林总总,但基本上可以归结为两点:钱,没给到位;心,受委屈了。这些归根结底就一条:干得不爽。这篇文章咱就来看看程序员会因为哪些不爽而跳槽——与钱无关的那些哦。    2B 领导   为什么把“2B 领导”放在第一位?   因为相当一部分人离职,是因为他们觉得领导很傻B、不专业、不称职、不配领导自己,在这样的 2B 领导治下,干活让人绝望。   2B 领导通常不把程序员当回事儿,认为程序员就像机器,只要按吩咐干活儿就行。他们通常不尊重程序员和程序员的劳动。比如他们可能会说这些让人难堪、窝火、愤怒的话,丝毫不考虑程序员的面子。   “又请假?活干完了吗?”   “我觉得这个需求简单得很,一天搞定。”   “干不完就加班,通宵也得搞定,明天一定要上线!”   “干活不动脑子啊!”   “这肯定是你改出来的 Bug!”   “活都没干完,还一下班就走,一点儿责任心都没!”   “你昨天怎么没来加班啊!”   “咋这么不让人放心呢,这么简单的事儿都搞不定!”   “没见过你这么笨的家伙!”   有的领导喜欢给程序员扣屎盆子。   比如网站新版上线后,购物车功能不正常,要添加的商品超过 4 个就崩溃

解决问题的能力 > 10倍程序员

守給你的承諾、 提交于 2019-12-20 10:41:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> > 这里是Z哥的个人公众号 > > 每周五11:45 按时送达 > > 当然了,也会时不时加个餐~ > > 我的第「120」篇原创敬上 大家好,我是Z哥。 今天我们聊的话题对大多数人来说应该都算是一个“痛点”,就是怎么提高自己解决问题的能力。 我们的工作中,每天会遇到大大小小的很多问题。其中有些是之前从未遇到过的问题,这对很多人来说就会很棘手,不知道该怎么解决,可能吭呲吭呲折腾好几天都不一定能搞定。 但是身边往往也一定会存在这么一小部分人,好像无论什么问题,到他们那就能够顺利地解决。 难道他们真的只是“看得多,懂得更多”而已吗? 我根据我身边所接触的人群来看,还真不是。 根本原因我认为是他们有自己的一套成体系的思考策略。表现出来的“懂得更多”而是基于这些策略经过时间的打磨后产生的结果,而不是原因。 之前看过一个淘宝技术团队里的故事。 当时某个小组遇到一个问题,组内的几位成员搞了好几天没搞定。没办法,不得不跨部门去请教多隆大神,多隆5分钟后回复了一个解决方案,他们试了下果真把问题解决了。 所以你看, 解决问题的能力高低可以差距那么大,远远超过所谓的10倍程序员的概念 。而这其中能不能掌握正确的思路至关重要,但是我们很多人往往是“脚踩西瓜皮”,滑到哪算哪。 很多人平时遇到问题,最习以为常的就是四连招,「打开百度

和小鲜肉相比,老程序员该由哪些优势?

百般思念 提交于 2019-12-17 12:32:48
人总会变老,可以想象,哪怕是今天刚出大学的95后程序员,虽然时间的推移,可能头发会慢慢少,也可能眼镜的度数会慢慢变大,更可能颜值慢慢变低(说得好听点就是颜值会转化成技术和经验),也会渐渐被压力磨平棱角。 这个是没办法的,长江后浪xxx,后浪xx沙滩上。哪怕我们再不乐意,再隐瞒年龄,再装嫩,也没法改变自然规律。与其感怀,还不如赶紧给自己多充点电。 本文有两个主题, 1 和初级程序员相比,大龄IT从业者(包括高级开发,架构等职位)该具备哪些方面的技能。 2 在真的变老前,该如何装备自己。 1 多积累真正值钱的技能 哪些技能值钱?能被别人在短时间内学会技能不值钱(但一定要学,这是基础 )。举些不大值钱的技能例子。 1 概念性的知识,比如大数据和人工智能等方面概念性的知识点。 2 比如Java语法,数据库里的SQL语句,或者其它语法使用类别的技能。 一些得靠一定动手实践经验积累下的经验比较值钱。 1 比如SQL大数据调优,JVM虚拟机调优。 2 架构师级别的高并发网站应用的搭建。 这话说得非常轻巧,做起来说难不难,说容易不容易。 如果我每天都在学习,哪怕用最笨的办法学习,在短时间(比如1个月)内总能找到好的学习进阶的途径,但如果成天混,那只能呵呵了。年轻时尚能呵呵,真的老时,只能为一条著名的古诗增加有力的论据了。 其实大龄程序员的竞争优势不是在于多会几门开发语言,多背出一些API的用法

如何成为强大的程序员?

夙愿已清 提交于 2019-12-17 01:28:27
Aaron Stannard是新创公司MarkedUp的CEO,他最近花费大量时间雇佣、评估很多不同的 程序员 ,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大的程序员。 Aaron提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来说,入门门槛非常高。因此,尽管他们非常仔细地雇佣新人,但还是很难找到足够天才的程序员。于是,他总结出十种阻碍程序员职业生涯发展的行为,并据此来帮助想要提升自身的平凡的程序员们。 1. 太害怕学不会新的工具、语言和框架 一般的程序员会墨守他们最喜欢的工具,而不希望学习新的,因为他们认为,离开了那些语言和工具,多年的经验就会付诸东流。而强大的程序员会拥抱那些挑战和机会,积极地学习新的工作方式。 2. 直到特性“完成”的时候才会提交。(但永远都不会完成!) 他在MarkedUp公司中把这种行为叫做“囤积提交(commit hoarding)”。有些程序员没有足够的信心来承受团队中其他成员的批评和审查,因此会把自己的工作藏起来,直到“完成”状态才提交。 这种开发者会损害团队中其他人员的生产力,因为团队看不到他每天的成果,而且他也不会在正常开发的过程中寻求帮助,这样就会造成很多“最后一分钟”的缺陷,从而让交付延迟。而强大的程序员会知道

新程序员的七宗罪

旧巷老猫 提交于 2019-12-12 23:31:44
前言: 当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 每一次过渡到一个新的职业都需要学习曲线;在完全适应新的工作环境之前,我们都必须经历这个过程。具有较强的适应能力和对变化的灵活性的人可能会发现它是平稳和简单的;其他的人可能需要更多的时间和精力。无论你处于学术或是工程,但毫无疑问,向数据科学的职业过渡将是一个挑战,在某种程度上,是一个充满持续学习的漫长旅程。然而,迈出第一步是最重要的一步,也是最困难的一步。基于我在数据科学领域的短暂职业生涯,我总结出了新程序员的7个“主要错误”:我从错误和失败中学到的经验教训,使我希望这些东西能被别人提前思考进去;这些课程帮助我成长,帮助我在实现目标的道路上更进一步。希望你觉得有用… 1. 没有一个初步的战略 大多数没有计算机科学或数据分析背景的工程师想要在数据科学中开始一个新的职业生涯,他们没有一个明确的战略,没有成为数据科学家、分析师或工程师的明确步骤。他们试图尽可能快地用信息填满自己的脑袋

程序员的出路——十年磨一剑

…衆ロ難τιáo~ 提交于 2019-12-10 15:30:14
就现在经济大环境而言,很不乐观,程序员的日子也很不好过,无论是还在找工作的、还是已经入职多年、哪怕做到技术经理的,压力都异常巨大,似乎处处充满危机。我们不禁会问:程序员的出路在哪里?但是,仔细分析一下,出路还是有的,甚至解决温饱、过上有房有车没贷款的生活也是很可能的。首先,在如今这个浮躁的社会,大多数人的心态也是浮躁的,只要你能潜下心来,深入研究某个技术,有了一技之长,温饱问题肯定就可以先解决了。 程序员的出路之一:一技之长 新技术层出不穷,而内核的精髓的东西却变化不大,就像.NET,从VS2003到VS2012,已经有10个年头,VS的版本不断更新,而.NET内核的最新版本也才4.0,所以,作为程序员,我们要多掌握内核的东西,精髓的东西。 我们的学习积累毛病在于:贪多、贪全、而不够深入。对于很多技术,我们都很有兴趣,对于刚兴起的技术,也紧紧跟随。但是,几乎都是蜻蜓点水、一知半解。回头想想,我们似乎什么都会一点,什么类型的项目都可以做,B/S的、C/S的、数据库的、分布式的,等等,但是,却不敢说,在某某方面,我的水平已经超越了圈中同类型的80%的人。只是我能做的,大家都会做,而且,我也没有把握比别人做得更好。 必须要让自己有价值,而自己的价值在于不可替代性或是难以替代性。如果,随便找个程序员就能把你replace掉,你的价值就很低廉了。如果在你负责的某个方面,只有20%的人超越你