首先,你能想到平时找项目来进行练手,说明你是一个在技术上面是一个非常上进的同学。想要找到项目进行练手,第一个想到的地方应该是Github。Github上拥有全球最多的开源项目,你可以从其中找到自己感兴趣的开源项目,然后参与到开源项目的开发中去。能够参与开源社区,这也是很多互联网公司非常看重的一点。
其次现在也有很多举办计算机类比赛的平台,比如阿里云的天池大数据、Kaggle、Datacasle等。你如果有时间,可以参与上面举办的比赛,进行项目练手。
想要在Github上面找到自己想要参与的开源软件,首先你要确定好自己对什么技术方向感兴趣。比如对于我来说,我对实时计算非常感兴趣,所以我找了很多开源的实时计算引擎,最后选择了Flink开源项目,现在也在努力的参与到Flink的开发中去。想要使用开源项目来进行练手,你一定要确定好自己的技术方向,找到感兴趣的开源项目,接着就是尝试参与到其中。
确定好自己感兴趣的开源项目后,第一步就是去订阅官方社区的邮件组,在社区的邮件组里面,你可以看到很多同学对于开源项目的问题以及解答,你未来有任何问题时,也可以在开源项目邮件组中进行提问。其次,你可以去开源项目的官方网站,将里面的官方文档阅读和理解一遍,这对于你未来API的使用和概念的理解,会有很大的帮助。
最后,你可以去开源项目的JIRA(问题主页),查看自己能解决哪些JIRA,随着你解决的问题越来越多,我相信你的能力也会提升的越来越快。
其他方面,你也可以去阿里云的天池大数据等平台上面查找自己想要参与的比赛,上面的比赛主要以算法类比赛为主,但也有性能优化相关,编程类的比赛项目。我以前在上面参加过阿里中间件的比赛,但是还是和同学一起来进行参加,一路跟着做下来,自己的能力也提升了很多,而且在校招的时候,面试官也问了很多这方面的问题。如果你能够跟着比赛做下来,我相信你肯定能够得到一定的收获。
01 GitHub
国外的网站,各种知名的公司以及开源框架源码,可以直接把框架源码clone到本地,也可以大胆把你所想写出来,pull上去成为贡献者,向国内外各种大佬学习他们的优秀编程思想和架构技术,也是一个体现程序员级别的地方。
02 csdn
专业IT技术社区:号称国内的github,为1亿技术人员提供一个优秀的学习和交流的平台,以技术博客论坛为主,无数的星级大牛博主,有些更是出书的大牛,每天都在上面分享一些自己的点点滴滴。坚持写作,从点滴做起。
03 知乎
本是一个分享各种人生杂谈,和一些鲜为人知以及各种大牛的免费和付费的知识型网站。由于流量逐步扩大,吸引了大批优秀的程序员在上面分享自己的技术创作,也是一个程序员常去的网站之一,不仅仅是为了学习技术。
04 OSChina(开源中国)
开源中国,上面有非常非常多的各种开源软件和插件。没准你公司用的哪个网站或app就是从上面copy下来的,有免费的有收费的,各种各样琳琅满目。算是一个比较古老的大而全的技术论坛和博客社区了,值得收藏。
05 StackOverFlow
这是一个由外国人创办的专为程序员提供的国际性问题解答交流社区,正如网站签名:Stack Overflow - Where Developers Learn, Share, & Build Careers。这个网站非常的纯粹,一般人还真不太习惯用这个,没有一手好英语还看不太懂全英文的技术交流与问答。
06 简书
简书是一个不仅仅为程序员提供的创作分享社区,上面充满了各种各样精彩的博文,不难看出这个网站的创始人的初衷是做全品类的创作社区,野心还是蛮大的哟。不过要做大而全就很难做到专业了,相比较与csdn个人认为在技术创作方面就略低一筹了。
07 牛客网
偶然发现上面的东西真的很有价值,这个网站不像csdn和OSChina以技术博客论坛为主了。但是在你需要的时候,却是相当有价值,里面有面试技巧、各种知名的不知名的互联网公司的对应往年校招社招面试题库,刷到你手软。
08 cnBlogs(博客园)
也是国内早起一批专为程序员们提供的一个免费技术论坛博客,上面有各种各样你想要寻找的解决方案,以及各种各样你见到的没见到的疑难杂症,值得拥有。
09 LeetCode
几乎每个算法大牛都知道的神奇网站,这个网站上面有:算法、数据库、Shell、多线程等多种类型供你学习。多数人在上面练习编程算法,尤其是给想进入一线互联网公司的技术人员,提供了一个免费又方便的题库。面试前都会在上面进行长期和充分的刷题,是你的不二选择。
从事软件开发多年,在编程行业真正的架构师比例少的可怜,就目前国内软件开发环境而言,真正意义的架构师还不是很多,因为大部分的代码框架几乎从开源代码社区里面拿出来,然后定制成自己公司产品需要的,其中研究框架的时间比较长的,并且能够深度定制的程序员就算是高手了,因为很多开源的代码更新速度非常快速,能跟上开源社区的代码更新速度的企业已经是实力非常强的公司了,国内企业现在真正意义上的从头开始设计一个框架然后推向市场相对比较少。
经过十几年的发展,国内编程人才的平均水平已经上来了,虽然在顶级程序员由于在编程底蕴以及生态系统这块有差距,但基层的程序员水平已经上来了,国内很多互联网公司做的产品有些已经不弱于欧美等企业,这些都是国内程序员水平提升的结果,而且现在由于培训行业在国内普及,入门级别的程序员在国内数量巨大,所以很多人喊着国内程序员行业已经饱和了,已经不适合再去从事程序员的工作了。
事实上国内软件行业内需依然足够多,特别是现在的三四线城市都陆续出现了软件公司,而且规模和数量都在提升,国内企业对中高级程序员的需求量还是非常巨大,五六年大小公司对于这类的人才招聘一直没有停止过,而且薪资水平还维持在非常高的水准,了解这个行业现状对于规划自己的职业生涯还是有着非常大的好处。
架构师这种职位可遇不可求,基本上国内架构师都是自己本公司内的优秀的软件工程师,成为了优秀的程序员并且在公司内部深得公司的信任愿意给这种突破的机会,抓住了后边的就会给与架构师的待遇,不是每个程序员天生就是做架构师的料,关键还在于平时的积累,有了机会抓住了,要成为架构师先要自己成为一个优秀的程序员,优秀的程序员需要具备什么样子的因素,现在就根据自己技术生涯的一些经历分享给大家。
基本功扎实。 很多程序员在入门之前由于在学校里面比较重视基础,还能看看基础,在成为了程序员之后就开始放松了对这方面的要求,所以导致很多程序员见到有笔试的公司,直接就选择了放弃走人,不能讲这类的程序员水平不行,但起码不是优秀程序员的范畴, 优秀的程序员是经得住基本功考验的,是不怕这些所谓的笔试题目的。
算法扎实。 很多程序员做了很长时间还不觉得算法挺重要,算法贯穿整个技术生涯,如果没有意识到这点说明意识层面还没理解到,证明需要弥补的东西还是非常多,有些程序员可能是学习了一门编程语言就匆匆去找工作了,运气还不错还找到工作了,没有很好的规划技术生涯路线,一个标准的程序员需要的一门基础的编程语言,熟悉数据结构,并且穿插着学习算法,这三样也是优秀程序员的标配,学习技术不是由着自己性子去做事,需要有规划,这其中不能少了算法的因子。
锤炼编程思想。 很多程序员觉得能够写代码,时间长了经验到位了慢慢就能熬成资深技术专家了,程序员不是靠着熬日子过的,需要不断的提炼编程思想,举个简单的例子,做网络编程如果懂得了一门编程语言的编程经验,相信切换到别的语言只需要很短时间内就能搞定,而且积累总结类似的场景以后遇到这种场景都能灵活应对,还能同步迁移到类似的场景,不能只是为了做而作,仅仅就是为了完成任务,那么提升的空间有限,不能因为工作承担的东西就这么点,而不去补充其余的东西,善于总结也是优秀程序员需要具备的一种意识。
成为架构师没有所谓的模板,而且有些人一辈子也没有这种机会,但想要达到这种境界就需要先让自己成为一个优秀的程序员,这样子遇到有理想的企业抓住机会就上去了,一旦进入这个级别后面的编程生涯就会有根本的变化了,关键在于平时一点一滴的积累,让自己长期处于一种高效的学习状态,有太多的程序员经历了几年的适应期就提前让自己进入了舒适期,结果随着年龄的增长技能没有相应的跟上导致年龄大了竞争力下降,出现了老了被企业淘汰的悲剧,什么样子的态度决定什么样子的人生,也就决定了什么样子的结局,希望能帮到你。
作为一名IT行业的从业者,同时也是一名计算机专业的研究生导师,我来回答一下这个问题。
首先,目前IT行业内大量的程序员确实无法成长为架构师,主要原因集中在三点,其一是自身的知识结构不足以支撑向架构师方向发展;其二是岗位工作任务受限;其三是行业迭代速度太快,学习压力较大。
早期的架构师主要集中在后端领域,针对于不同的开发领域,对于架构师的要求也不尽相同。总的来说,架构师的任务主要集中在三个方面,其一是整体技术框架设计;其二是技术选型;其三是解决难点问题。所以对于程序员来说,如果想成长为架构师,需要做好以下几个方面的知识储备:
第一:丰富的开发经验。 开发经验通常是软件架构师的基本要求,通常软件架构师都是从初级程序员、主力程序员、研发级程序员等岗位一步一步成长起来的,每一个阶段都会积累一定的开发经验,这些经验对于架构师的方案设计会起到重要的作用。对于大量的程序员来说,从主力程序员向研发级程序员发展会存在较大的困难,主要原因就是基础知识结构的问题,不少程序员通过读研的方式完成这一步升级。
第二:丰富的知识结构。 架构师的知识结构不仅仅局限在技术层面,还需要掌握大量的行业知识,不同行业领域往往有不同的特点,要能够根据这些特点来完成具体的方案设计。
第三:紧跟技术发展趋势。 架构师一定要紧跟技术发展趋势,同时能够对于未来的发展方向有较强的认知能力,这对于架构师的方案设计会起到重要的作用。对于技术趋势的认知能力,是判断一名架构师能力的重要因素。
架构师并不是一个很好玩的升级路线。
相对于架构师的开发工作。研发工作更有趣,更容易得到 社会 的承认,不论是图形学,还是人工智能,区块链,甚至黑客(网络安全),凭借你的智慧和努力,可以在短时间内取得成就,并达到一个很漂亮的高度。研发方面是拼年轻,智商和体力的工作,有众多的天才少年取得漂亮的成果,每年有大量新的技术突破和文献等着大家研究。你做的每一件事情,都能表现出漂亮的成果,全局光照,计算机视觉。或者很容易赚到很多的钱,自动驾驶或者区块链ico,就算做 游戏 外挂,其收入也大得超乎你的想象。
而架构师不是,架构师拼的只有经验,正确的方法和项目数量。《C++程序设计新思维》里面有一句话:“只有天才的程序员没有天才的构架师。” 在构架师的世界里不存在天才,只存在重构。一定要有正确的方法(敏捷开发),然后就是无数个项目和时间的铺垫。然而对一个架构师应该明确,我们的职责是内部质量而不是外部质量,我们要把软件做的强壮且易易扩展。但你会发现,对于外行麻瓜来说,这根本不吸引人,麻瓜老板经常说一句话:你功能做不出来我们公司就破产了,别他妈的再花时间重构了。
至于为什么架构师很少
内部原因是: 架构师太无趣了,相对于图形学光照算法,你却强调测试驱动重构持续集成。研发工程师会得到大量的外部激励,所有人都去赞扬他们的成果。而构架师需要从自身产生激励的能量,比如对代码的洁癖,重构在不改变功能的情况下不断优化代码质量,一个分层,一个正确的依赖关系,甚至一个精简美丽的命名,都需要由衷地感到兴奋和刺激。否则很难熬下来。
外部原因是: 浮躁的 社会 容不下一个架构师成长的时间和空间。一个框架师需要大量的项目经验,超级长的编码时间。坚持正确的方法和一个融洽配合的团队。国外的架构师都是大胡子,而国内程序员到30岁,老婆就催着要去做管理岗位了。和研发工作拼智商不同,架构师就拼的是经验,没大胡子没五六十岁很难成为xx之父这个级别。
行业原因是: 架构师容不下架构师。架构是艺术不是科学,没有一个统一的标准,每个成型的架构师心里都有一套属于自己的程序结构和原则,你可以看到十个图形学程序员基于一个算法合作,但你很难看到两个架构师做一个项目不打架的。架构师需要有自己的团队来验证自己的观点和共同进步,但就如同食肉动物永远是食草动物的十分之一,行业也没那么多团队给架构师来糟蹋。
经历过很多项目洗礼,并有自己的想法和能力的架构师,必然是稀有动物。
但看起来无聊的架构师有什么用呢?
他是辅助英雄,给整个团队加各种属性光环:降低代码中的混乱(熵),让团队中初级的程序员做出高级的代码,提高单位时间效率避免加班,让团队更容易进入未知领域,大幅度降低企业成本。
我现在做的混合现实领域,这是一个新的领域,有一个优秀的架构师可以在没有前人经验的情况下开疆辟土,并且可以带起来整个团队的开发质量,降低成本给客户更多的获利空间。
这个问题不知道提出来的缘由是啥,其实问题不是很合适,不过还是一分为二的来回答一下,如下:
架构师不是谁都能做到的,我想说如下几点:首先,应具备的素质应该是快速的学习能力,需要从平常的任何工作活动中,快速学习,包括从自己的本质工作完成,以及与他人的交流中,而后者又尤其重要,从别人那儿学来,而快速形成自己的理解并超越对方,而这,从自然规律角度上来讲,这只有少数人能做到;
其次,需要具有全局的视野,能平衡整系统各子系统之间的解耦与耦合,这个需要积累,需要在各子系统内有实际项目的、比较成功的设计编码的问题处理能力,而尤其是问题处理能力又尤为重要,这也不是段时间能达到。
第三,在这个行当内,能静下心来踏踏实实,保持饥渴的学习,保持积极正向的心态,不断的越挫越勇,始终往设计架构方面努力,在当下整个行业浮躁的环境下,很对都想通过不断的跳槽来达到涨薪的目的,这又会淘汰一大部分人。
最后,即便具备了素质,你能否当上架构师,取决于客观因素了。因为一个架构师,决定了他所在领域的发展规划,以及当前的问题现状的改进,这个位置至关重要,不是那个人,上一层组织关系是不会让你做这个位置的,上层组织还会考察你除了技术能力以外的,诸如与人沟通,管理你的上下级,包括你的上级的上一级到连三级的关系,关系到你的直接老板的,这些其实就很难说了。
呵呵,当然了,还有其他很多了,靠这个问题是说不清道不全的。
真正的软件架构师对各方面的职业素养都要求比较高。架构师的工作,不是平时工作的简单堆叠,除了专业技能要过硬外,还要思维活,想东西细致全面,需要自己去主动去接纳工作以外的大量知识。此外,在性格方面也有一定要求,一个软件架构师往往还需要具备善于沟通的品质。
总而言之就是要技术好、思维活、会交际。大多数程序员做不到架构师的位置主要是因为自身能力达不到,其次是一个公司里面架构师占比本来就想小。
一般程序员在公司负责的工作主要是维护日常的需求,在原有的架构上进行修改,所以很少会接触到架构层面的东西。长期缺少接触相关的知识及业务的机会,久而久之离架构师的标准也会越来越远。
年轻的程序员在知识储备上无法达到成为架构师的标准。
现代的高可用架构一般为:RDS、Cache、MQ、后端服务、监控服务。而随便拿其中一个点,都有着非常多的技术点知识点需要掌握。
比如在多系统交互中,如何保证MQ中的消息能被对方系统消费,如何设计高可用的服务负载均衡,这些都是需要很多经验才可以解决,但是一般的程序员又不容易接触到架构设计。
而年纪大点的程序员要么是后期缺少折腾的的动力,要么在职业发展途径走到不同的分岔路口,最终走上架构师这个树枝上的寥寥无几。
小富即安的心理。很多程序员满足于现状,缺少坚持不断学习不断提高的动力,每个月拿着万把块钱的工资,心安理得,懒得去折腾。
一个公司架构师在广大码农里面占比还不到10%,能成为架构师的一般都在公司里担任研发和管理的角色,想象一下公司团队的人员金字塔你就知道竞争力有多大了。
平常,开发的团队一般都是10多人组成。几个团队间一般会存在一个技术面最广、技术经验较充足的人,叫做架构师或者说是TL。而架构师的存在,一般在众多的码农中占的比例少之又少,可能连码农总人数的10% 都达不到。软件架构师也存在初中高级。
码农都会写代码,对计算机编程语言都有自身的理解。但是很多时候,程序员或者说是码农只是机械的完成自身的编码工作。为了完成任务,成长有限。
看到这里,很多人都会说:编码时间长了,经验积累的足够,自身也就逐渐成为了资深技术专家。想法其实不能说是不正确,在一个人见多识广后,自然自身的内涵也就足够的丰富。从码农的角度出发。除了架构师,很少有35岁以上的人士会在互联网做程序开发。而一个人想要通过机械性质的编码积累经验。需要多少年成长才能见多识广呢?是否会有码农坚持到那一时刻呢?一个值得商榷的问题
码农是一份年轻人为主的职业。平均从业者的年龄都是20多岁。慢慢熬、慢慢积累在码农中也不能说错。但是很多人在软件开发领域积累一定的经验后就会转型不做开发。
所以说,长久时间的码农很少。而在短暂的码农开发软件的工作中,脱颖而出,成长起来的人更少。
些许拙见,供您参考。
从事互联网开发多年,欢迎大家骚扰
小团队一般 10 人左右,其中常常是技术最牛的人做架构师(或TL)。所以,架构师在广大码农中的占比大概平均不到 10%。而架构师也可以分为初级、中级、高级三档,江湖上真正高水平的软件架构师就更少了。
所以,大部分(超过九成的)码农干上许多年,还是做不了架构师,这是什么原因造成的呢?
1:码农分为真的能写代码的,以及自认为能写代码的。
2:真的能写代码的码农又分为自认为写的不错的,以及真的还不错的。
3:真的能写不错代码的码农又分为会钻研会不断优化的,以及安于现状的。
4:会钻研的码农又分为喜欢广度了解新技术蜻蜓点水的,以及深入钻研用到知识的。
了解广度的码农又有少部分愿意深入某些技术,喜欢深入研究的又往往缺乏广度知识。
6:为业务而技术的深度广度都了解的码农,又需要有良好的沟通能力。
7:而沟通好的,又有一部分当PM去了。
8:然后剩下的,又有一部分慢慢脱离实际开发(不再做任何实现)或者开始依靠拿各种中间件搭积木来作为“架构”手段。
9:除去这些,剩下对业务有一定了解,对技术广度上有多种涉猎,深度上对部分技术研究彻底,还有很重要的一点,考虑问题足够细致全面。
10:细致全面善于沟通,技术上深度广度都没问题, 又喜欢这个工作,还会不时做底层实现,从业务和开发两个角度出发,搭出“架构”来是为了开发效率,为了运行效率,为了开发质量,为了业务灵活和运行稳定,为了维护方便等等这样的人,个人认为可以称为“架构师”。
而真能满足这种需求的,别说题主的10%的比例,1%能不能达到我也持怀疑态度。其实现在的“架构师”大多数都停留在8这个层次,甚至很多在5这个层次就当上title上的架构师了。
总之,成为架构师,不仅仅是工作上的简单积累,更需要主动接纳工作外的大量知识,同时,对性格上对于非技术能力上也有一定的要求,不仅如此连思维方式都很重要,外加职业发展中又有很多岔路,最后走到架构师这根树枝上的就寥寥可数了。
如果你想要往架构师的方向发展的话,那或许你可以看一下我分享给你的这份进阶路线图,主要针对2到5年及以上工作经验的Java开发人员,里面的技术包涵了Java高并发、分布式、微服务、源码分析、高性能等技术,这些也是目前互联网企业比较常用的技术,那么来详细看看。(可以保存)
一:常见模式与工具
学习Java技术体系,设计模式,流行的框架与组件
常见的设计模式,编码必备
Spring5,做应用必不可少的最新框架
MyBatis,玩数据库必不可少的组件
二:工程化与工具
工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的:
Maven,项目管理
Jenkins,持续集成
Sonar,代码质量管理
Git,版本管理
三:分布式架构
高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的:
分布式架构原理
分布式架构策略
分布式中间件
分布式架构实战
四:微服务架构
业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪些呢?
微服务框架
Spring Cloud
Docker与虚拟化
微服务架构
五:性能优化
任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题,Java技术体系,需要了解:
性能指标体系
JVM调优
Web调优
DB调优
如何一起学习,有没有免费资料? 有需要的滴滴滴哦
软件架构师?似乎是个明确的职位或者岗位了。然而,他在软件产品开发过程中,充当什么角色?起什么作用?确众说纷纭,缺乏共识。成为一名架构师,码农根本没有明确的努力目标。这是问题的关键,架构师,是上级领导、老板对某些软件开发人员的“认同”,是某种管理理念的体现,不是软件产品生产活动中某个具体的岗位、角色。
码农和程序员的区别:技能广度不同、技能深度、系统设计不同、团队合作要求不同、工资待遇不同。
1、技能广度不同:码农通常只会掌握一种编程语言,并且只会使用特定的开发工具。而程序员则会掌握多种编程语言和开发工具,并且能够根据实际情况选择最适合的工具和语言。
2、技能深度:码农通常只会掌握一些基本的编程技能,比如变量、循环、条件语句等等。而程序员则会更深入地了解编程语言和软件开发的各个方面,包括算法、数据结构、设计模式等等。
3、系统设计不同:码农通常只能根据需求编写代码,而程序员则能够理解业务需求并根据需求设计软件系统。他们能够将业务需求转化为软件设计,并且能够考虑系统的可扩展性、可维护性和安全性。
4、团队合作要求不同:码农通常只是按照需求完成任务,而程序员则能够与其他团队成员合作,包括产品经理、测试人员、运维人员等等。他们能够理解其他人的需求,并且能够协调不同团队成员之间的工作。
5、工资待遇不同:相对于码农而言,程序员通常能够获得更高的薪资待遇。这是因为程序员需要具备更高级的技能和经验以及承担更加复杂的工作任务,他们掌握多种编程语言和开发工具并能够运用这些知识来解决复杂的编程问题。
昨天刚领一个线上P0级重大事故,持续时间1小时,影响范围全站 !准确的时间点是下午17点开始,具体问题定位且听我下文细细道来。
先说感觉,那感觉真是太刺激了,本来下午五点,昏昏沉沉的,瞬间一个激灵就清醒了(想象一下高中课堂,你在打瞌睡,突然老师走到你面前给你一下子的感觉),原本准备再过一小时吃晚饭了,吃完晚饭再摸鱼到21点就可以下班了呀,别问我为啥到21点,问你就不是程序员!
带着无比紧张且颤抖的心情开始定位问题,先来个错误日志尝尝鲜:
整个事情的发酵是这样的:
1、下午五点开始有少量的慢sql报警,没有人当回事,因为这种事情总发生,虽然大家都知道在实际开发中如何避免慢sql,但是整个团队要想完全避免慢sql却很难;
2、五点十分左右,开始零星有用户反馈指定功能不可用,SLB开始报警,技术开始介入排查;
3、十五分左右,客服部门电话开始爆炸,用户密集反馈指定功能不可用,技术部开始重视;
4、二十分左右,所有服务大面积出现接口无法响应,整体服务不可用;
5、我们一开始定位觉得是MySQL的问题,因为前面有mycat的慢SQL报警,后来定位并不是MySQL,因为MySQL的内存、连接数、流量这些指标都很平稳;
6、最终在五点三十分的时候我们定位到是ES出问题了,因为所有的Java服务不可用最终都指向上面的错误日志,dubbo提供的服务线程池满了,再有请求进来直接拒绝了,查看这个服务的代码,最终查询的是ES,此时的ES进程已经处于假死状态。
那接下来大家说怎么办?如何快速的恢复线上服务?
重启!
是的,只有重启大法此时是最快的解决办法,你不可能说保留ES事故现场,让我用arthas之类的工具来现场分析jvm内存情况。
然而重启之后服务依旧是不可用,接口还是无法响应, 大家知道这个时候是什么原因吗?为什么重启了ES服务还是不行?
后续继续重启报错dubbo日志的相应服务,当这些服务全部重启完毕后,我们的服务终于恢复访问了,这个过程持续了十几分钟,确切的说,直到17点五十多分,我们的所有服务才恢复了访问。
接下来就是事故总结、相关责任人、产生问题的原因、接下来的优化方案,全公司邮件通报!
你说这个难不难?本身并不难,难的是事情紧急且重要,这个时候你慌了啊,乱手乱脚的,大家你一言我一语的,如何冷静提取有效信息然后尽可能快的解决生产的重大故障才是最难的!
最后,当一切都恢复平静的时候,你会发现:“卧槽,好累啊!”。
虚脱的感觉!
最后祝大家程序员节日快乐,今年可是程序员的本命年哦
2020 = 1024 + 996 = 404 + 404 + 404 + 404
这种感觉能难受,很压抑。
技术难题,对于程序员来说,是经常有的事,关键是如何面对吧。
说下我的事情,虽然也会写点代码,但并不是以此为正业,所以对于真正的程序员来说,可能说法会有点偏颇。
遇到难题时,一般都在网上搜索解决方法,一般来说,都有很优秀的程序员分享他的劳动成果,所以一般都能解决问题。但也真正碰到难的问题,一个就是循环的问题,无限极菜单问题,当时都是找了很久,看了很多遍才明白过来,当时自己是几天都不太开心,也不太想说话,总是在测试着程序。挺烦也挺不开心的。只是最后做出来了,心情就好多了。
这是我的一些经历,当然,如果全职程序员,可能压力就更大了。
如何形容这种感觉呢?焦躁,紧张,失落,无助,亚历山大
再多词可能都描述不清楚。本人在工作中经常遇到难题,有些问题一两个月都搞不定。遇到这种问题,估计只有下面这张图的表情能描述此时此刻的心态了。
程序员遇到的难题其实分为两种,一种是没有办法定位清除的问题,另外一种是定位清除了,但是没办法,或者很难解决的问题。
难定位的问题所谓难定位的问题,其实就是你根本不知道这个问题是什么。比如系统突然挂掉了,你从现有的信息根本不能确定问题在哪。这个时候你剩下的可能只有满脑子的问号了。
如果系统只挂了一次,后面不再出问题,那就很难找出问题的根源了。不过这样也有好处,那就是问题的影响的程度相对较轻,毕竟不容易出现。所以在软件开发中通常不是什么问题都解决的,因为不是所有问题都能搞清楚是什么问题,谈何解决呢!
难解决的问题难解决的问题是问题搞清楚了,但是基于现有架构很难,或者没法搞定。遇到这种情况,通常先是很高兴,兴奋,然后就只剩下无奈了。
当然,从技术层面来说并不是完全解决不掉。只是如果要解决需要涉及架构调整或者其它方面的改动,修改调整的内容太多。这种情况下就要考虑利弊得失了。
如果改动太大,可能会引入很多新的问题,可能得不偿失。因此,遇到此类问题可能会采取一些规避方案。
当然,在开发和运营当中遇到各种问题是很正常的,关键是遇到不同的问题采用不同的策略。首先保证的是业务的正常运行,然后是考虑是否需要彻底解决。这样慢慢调整,心理压力会小一些。
作为一个工作多年的老码农,在工作也遇到过一些艰难的技术问题,就以切身体会谈谈对这个问题的看法。
首先需要明确一下,问题是否困难除了取决于问题本身之外,还在于解决问题的人的水平,也许对你很难的问题,在别人看来不过是小菜一碟。明白了这一点,那么这些技术问题也就成了考察程序员水平的试金石,有些人可能会因此气馁,甚至放弃;而有些人则通过解决问题学到了很多新的技术,也让自己进一步成长。
记得多年前看工作中要用到一款开源库,那时候刚学完C++不久,自以为对面向对象了解甚深,然而学习这个库时却是一头雾水,最后在经过泡论坛,然后又认真的学习了面向对象设计模式,后来不但能使用那个库,更重要的是对面向对象编程有了更深的认识!
后来还有很多类似的事情,刚开始时感觉无比困难,但是通过自己的努力,或求助他人、或查阅资料,当最终问题解决时,你会发现自己又牛逼了一些,然后再遇到一些新的问题,如此循环……
其实编程也是一个学习的过程,就如同爬山一样,每一阶段都会有一些山头,只有当你爬上山头才能欣赏美丽的风景,但是当你爬上一座山头的时候,就会发现更高山峰!只有当你爬上最高峰,才能“一览众山小”,可是到那时,你可能会向往地球之外的天地!
很难解决一般就是遇到某些瓶颈了,不同瓶颈的感觉是不一样的,但无非可以归结为下面几类。
成本原因
不让马儿吃草,还想让马跑。这个是有些不太理解互联网的一些领导的错误观念,他们会给你安排一个老旧台式机,想要让你承载几万、几十万并发的秒杀系统,你当然很难解决。
外界的评论可能是,“这帮程序员是吃干饭的么?这系统也太垃圾了!”
老板的评论是,“我这台式机也不少钱呢。”
程序员的评论是,“这抠门老板不会是个傻子吧。哎,再优化优化吧。”
当然,有些情况也是能够理解的,公司明白需要更好的设备,但是由于成本控制,不得不在某些方面节省。但换句话说,设备成本是占不了一个大头的,可能有其他方面的成本更加需要收紧。
如果是因为成本原因,我们的心情可能是无奈,又有些不能施展拳脚的束缚感。
历史 原因
举个例子,系统用了5年了,迭代了N个版本,在面对新的需求的时候,就会出现需求限制于系统的情况,常常会有程序员说,这个实现不了,那个不符合现在系统规则。其中很大一部分是这些年的积累,欠下的技术债造成的。俗话说,大船难调头。
这种情况更多的出现在刚创业之后的几年,由于一开始的快速迭代,追求先把业务流程跑通,先生存再规范,会让一开始的软件开发流程并不那么规范,如果在1-2年内没有进行重构,那么积攒的3-5年的技术债就会慢慢把你压得喘不过气来。
解决这种情况,一是需要时机,给出足够的空间和时间让技术团队重构,二是需要魄力,你得有成功的把握,不能干着干着说不行了,咱们还是回到原来吧。
如果是因为 历史 原因,我们的心情可能是期待和渴望,又有些对现状的无奈。
能力原因
虽然说专家很厉害,但说白了,大部分企业需要的研发人员,还到不了需要专家的级别。所以,一般而言,没有什么技术是攻克不了的。如果真的遇上了,那就说明你的公司已经到达了一个新的层次,从而需要那个层次的人员来解决,可以通过外聘或者顾问的方式,引进新的技术。
如果是因为能力原因,我们的心情虽然有些力不从心,但又为公司在新的台阶而高兴。
不管怎样,程序员是一群追求美好的人,不管是外部限制还是内部限制,不能解决的难题对于技术人员来说总是很憋屈的。
不能着急,慢慢分析,找到问题点,没有解决不了的问题
程序员的技术问题,排除架构师技术选型错误以外,都是程序员的功夫不到家所致。
1,面向百度的程序员会第一时间问度娘,各大社区求助大神。
2,面向源码的程序员会第一时间查看源码实现,查找api文档,思考解决方案。
3,不管技术如何发展,架构如何延伸,不变的是基本功,再先进的组件都是由基础语法书写出来的 。
练武不练功,到老一场空,共勉!
首先说下这个很难的技术定义,个人认为在你知道之外的知识都是很难的,一旦你深入了解其使用方式,原理,甚至阅读了他的源码,你会觉得有的时候会恍然大悟。程序员是一个不断要学习的岗位,就要面临很多从未知到已知技术的时候,每当遇到这样的情况时候,总有种不解决了这个问题,睡不着觉的感觉,心里不踏实,总是想尽各种办法去解决这个问题。甚至可以一直追查这个问题。也许这就是一种执拗吧
我老公最近就遇到一个大石头需要敲碎,我作为一个旁观者,都挺心疼他。
他还在读博,最近遇到的问题是他一个项目上的问题,也跟他的毕业设计相关。他刚读博的时候确定了一个方向,去年开题的时候他觉得这个方向没有什么前景,真的是考虑了好久要不要换,如果不换,就是安稳的毕业,换的话接下来的一年多时间他会很艰难,很多新的问题需要一一克服,最后他决定换了,他说他读博就是为了提高自己,还是想挑战一下。
年前,系统板设计好了,然后最近做好回来了,开始调试,说这个板子跟个石头一样,不工作。本来就是礼拜一到礼拜六待在学校不回来,周日是休息的。现在放假回来都是在啃变压器的东西,早上起的很早,晚上又很晚。真的挺心疼的,他还安慰我说,他又要进步了。挺担心他的身体的,我特别希望时间能快点过去,能顺利毕业。他却不希望,总觉得时间过的太快,没有时间搞研究。
今年的生日愿望,希望他科研顺利,身体 健康 。
以我的从业经历,说说遇到很难的技术问题是什么感觉吧: 兴奋、充满挑战性 。尤其是在开发中遇到了技术难题,很多情况下真有种可遇不可求的感觉。
我认为能遇到技术难题,至少证明这个工作是有价值的。 这种价值体现了两个方面,一是你的工作在整个产品开发中占据重要地位,甚至是核心地位。二是你的认知和经验,仍然有成长的空间。如果你的工作一直没有遇到难题,轻而易举地就解决了一切,那么很可能是你没有机会深入重要的核心部分,或者你的工作性质可替代性很高,简单重复性很高。
分解法。 把技术难题拆分,尽量的单元化、模块化,这样有利于逐步攻破,逐步解决。主要是降低技术难度,寻找真正的难点所在。如果问题无法拆分,就是那么一个点,那么需要逆向思维,可以先把问题扩大,看看涉及面有哪些,然后再缩小范围,锁定关键之处。
刨根法。 把技术难题抽象化,理论化,从根本的源头去解决。很多技术问题,从基础理论的角度去看,其实真的不难,只要你能定位到相关的技术点,困难点,知识点,就很容易进行快速解决。解决的终极办法就是从理论上彻底解决,做到知行统一。
讨论法。 三人行,必有我师。很多情况下,所谓的技术难题,在别人的眼中,也许并不是难题。很多情况下,小组讨论,交换意见,方案互补,就可以解决难题。有些情况下,还需要和供应商一起讨论,主要是补充信息的错漏。经常出现的芯片问题,很多情况下供应商都更加有经验。因为供应商有更多的使用客户,有很多解决问题的经验。最主要的是,芯片是他们设计的,他们更加清楚缘由。
没有绝对的技术难题,有的只是尚未解决的技术难题。
以上就是关于程序员是如何找项目练手的_新手程序员如何找工作全部的内容,包括:程序员是如何找项目练手的_新手程序员如何找工作、程序员学习一般去哪些网站、为什么有人说大部分码农做不了软件架构师等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)