导航:首页 > 软件知识 > 程序员难点在哪里

程序员难点在哪里

发布时间:2022-12-31 21:58:39

㈠ 前端开发的难点到底在什么地方

㈡ 程序员遇到很难的技术问题是怎样的感觉

昨天刚领一个线上P0级重大事故,持续时间1小时,影响范围全站 !准确的时间点是下午17点开始,具体问题定位且听我下文细细道来。


先说感觉,那感觉真是太刺激了,本来下午五点,昏昏沉沉的,瞬间一个激灵就清醒了(想象一下高中课堂,你在打瞌睡,突然老师走到你面前给你一下子的感觉),原本准备再过一小时吃晚饭了,吃完晚饭再摸鱼到21点就可以下班了呀,别问我为啥到21点,问你就不是程序员!


带着无比紧张且颤抖的心情开始定位问题,先来个错误日志尝尝鲜:




整个事情的发酵是这样的:

1、下午五点开始有少量的慢sql报警,没有人当回事,因为这种事情总发生,虽然大家都知道在实际开发中如何避免慢sql,但是整个团队要想完全避免慢sql却很难;

2、五点十分左右,开始零星有用户反馈指定功能不可用,SLB开始报警,技术开始介入排查;

3、十五分左右,客服部门电话开始爆炸,用户密集反馈指定功能不可用,技术部开始重视;

4、二十分左右,所有服务大面积出现接口无法响应,整体服务不可用;

5、我们一开始定位觉得是MySQL的问题,因为前面有mycat的慢SQL报警,后来定位并不是MySQL,因为MySQL的内存、连接数、流量这些指标都很平稳;

6、最终在五点三十分的时候我们定位到是ES出问题了,因为所有的Java服务不可用最终都指向上面的错误日志,bbo提供的服务线程池满了,再有请求进来直接拒绝了,查看这个服务的代码,最终查询的是ES,此时的ES进程已经处于假死状态。


那接下来大家说怎么办?如何快速的恢复线上服务?



重启!


是的,只有重启大法此时是最快的解决办法,你不可能说保留ES事故现场,让我用arthas之类的工具来现场分析jvm内存情况。

然而重启之后服务依旧是不可用,接口还是无法响应, 大家知道这个时候是什么原因吗?为什么重启了ES服务还是不行?


后续继续重启报错bbo日志的相应服务,当这些服务全部重启完毕后,我们的服务终于恢复访问了,这个过程持续了十几分钟,确切的说,直到17点五十多分,我们的所有服务才恢复了访问。


接下来就是事故总结、相关责任人、产生问题的原因、接下来的优化方案,全公司邮件通报!


你说这个难不难?本身并不难,难的是事情紧急且重要,这个时候你慌了啊,乱手乱脚的,大家你一言我一语的,如何冷静提取有效信息然后尽可能快的解决生产的重大故障才是最难的!


最后,当一切都恢复平静的时候,你会发现:“卧槽,好累啊!”。

虚脱的感觉!

最后祝大家程序员节日快乐,今年可是程序员的本命年哦



2020 = 1024 + 996 = 404 + 404 + 404 + 404

这种感觉能难受,很压抑。

技术难题,对于程序员来说,是经常有的事,关键是如何面对吧。

说下我的事情,虽然也会写点代码,但并不是以此为正业,所以对于真正的程序员来说,可能说法会有点偏颇。

遇到难题时,一般都在网上搜索解决方法,一般来说,都有很优秀的程序员分享他的劳动成果,所以一般都能解决问题。但也真正碰到难的问题,一个就是循环的问题,无限极菜单问题,当时都是找了很久,看了很多遍才明白过来,当时自己是几天都不太开心,也不太想说话,总是在测试着程序。挺烦也挺不开心的。只是最后做出来了,心情就好多了。

这是我的一些经历,当然,如果全职程序员,可能压力就更大了。

如何形容这种感觉呢?焦躁,紧张,失落,无助,亚历山大...

再多词可能都描述不清楚。本人在工作中经常遇到难题,有些问题一两个月都搞不定。遇到这种问题,估计只有下面这张图的表情能描述此时此刻的心态了。

程序员遇到的难题其实分为两种,一种是没有办法定位清除的问题,另外一种是定位清除了,但是没办法,或者很难解决的问题。

难定位的问题

所谓难定位的问题,其实就是你根本不知道这个问题是什么。比如系统突然挂掉了,你从现有的信息根本不能确定问题在哪。这个时候你剩下的可能只有满脑子的问号了。


如果系统只挂了一次,后面不再出问题,那就很难找出问题的根源了。不过这样也有好处,那就是问题的影响的程度相对较轻,毕竟不容易出现。所以在软件开发中通常不是什么问题都解决的,因为不是所有问题都能搞清楚是什么问题,谈何解决呢!

难解决的问题

难解决的问题是问题搞清楚了,但是基于现有架构很难,或者没法搞定。遇到这种情况,通常先是很高兴,兴奋,然后就只剩下无奈了。

当然,从技术层面来说并不是完全解决不掉。只是如果要解决需要涉及架构调整或者其它方面的改动,修改调整的内容太多。这种情况下就要考虑利弊得失了。


如果改动太大,可能会引入很多新的问题,可能得不偿失。因此,遇到此类问题可能会采取一些规避方案。

当然,在开发和运营当中遇到各种问题是很正常的,关键是遇到不同的问题采用不同的策略。首先保证的是业务的正常运行,然后是考虑是否需要彻底解决。这样慢慢调整,心理压力会小一些。

作为一个工作多年的老码农,在工作也遇到过一些艰难的技术问题,就以切身体会谈谈对这个问题的看法。

首先需要明确一下,问题是否困难除了取决于问题本身之外,还在于解决问题的人的水平,也许对你很难的问题,在别人看来不过是小菜一碟。明白了这一点,那么这些技术问题也就成了考察程序员水平的试金石,有些人可能会因此气馁,甚至放弃;而有些人则通过解决问题学到了很多新的技术,也让自己进一步成长。

记得多年前看工作中要用到一款开源库,那时候刚学完C++不久,自以为对面向对象了解甚深,然而学习这个库时却是一头雾水,最后在经过泡论坛,然后又认真的学习了面向对象设计模式,后来不但能使用那个库,更重要的是对面向对象编程有了更深的认识!

后来还有很多类似的事情,刚开始时感觉无比困难,但是通过自己的努力,或求助他人、或查阅资料,当最终问题解决时,你会发现自己又牛逼了一些,然后再遇到一些新的问题,如此循环……

其实编程也是一个学习的过程,就如同爬山一样,每一阶段都会有一些山头,只有当你爬上山头才能欣赏美丽的风景,但是当你爬上一座山头的时候,就会发现更高山峰!只有当你爬上最高峰,才能“一览众山小”,可是到那时,你可能会向往地球之外的天地!

很难解决一般就是遇到某些瓶颈了,不同瓶颈的感觉是不一样的,但无非可以归结为下面几类。

成本原因
不让马儿吃草,还想让马跑。这个是有些不太理解互联网的一些领导的错误观念,他们会给你安排一个老旧台式机,想要让你承载几万、几十万并发的秒杀系统,你当然很难解决。
外界的评论可能是,“这帮程序员是吃干饭的么?这系统也太垃圾了!”
老板的评论是,“我这台式机也不少钱呢。”
程序员的评论是,“这抠门老板不会是个傻子吧。哎,再优化优化吧。”

当然,有些情况也是能够理解的,公司明白需要更好的设备,但是由于成本控制,不得不在某些方面节省。但换句话说,设备成本是占不了一个大头的,可能有其他方面的成本更加需要收紧。

如果是因为成本原因,我们的心情可能是无奈,又有些不能施展拳脚的束缚感。


历史 原因
举个例子,系统用了5年了,迭代了N个版本,在面对新的需求的时候,就会出现需求限制于系统的情况,常常会有程序员说,这个实现不了,那个不符合现在系统规则。其中很大一部分是这些年的积累,欠下的技术债造成的。俗话说,大船难调头。

这种情况更多的出现在刚创业之后的几年,由于一开始的快速迭代,追求先把业务流程跑通,先生存再规范,会让一开始的软件开发流程并不那么规范,如果在1-2年内没有进行重构,那么积攒的3-5年的技术债就会慢慢把你压得喘不过气来。

解决这种情况,一是需要时机,给出足够的空间和时间让技术团队重构,二是需要魄力,你得有成功的把握,不能干着干着说不行了,咱们还是回到原来吧。

如果是因为 历史 原因,我们的心情可能是期待和渴望,又有些对现状的无奈。


能力原因
虽然说专家很厉害,但说白了,大部分企业需要的研发人员,还到不了需要专家的级别。所以,一般而言,没有什么技术是攻克不了的。如果真的遇上了,那就说明你的公司已经到达了一个新的层次,从而需要那个层次的人员来解决,可以通过外聘或者顾问的方式,引进新的技术。

如果是因为能力原因,我们的心情虽然有些力不从心,但又为公司在新的台阶而高兴。

不管怎样,程序员是一群追求美好的人,不管是外部限制还是内部限制,不能解决的难题对于技术人员来说总是很憋屈的。

不能着急,慢慢分析,找到问题点,没有解决不了的问题

程序员的技术问题,排除架构师技术选型错误以外,都是程序员的功夫不到家所致。

1,面向网络的程序员会第一时间问度娘,各大社区求助大神。

2,面向源码的程序员会第一时间查看源码实现,查找api文档,思考解决方案。

3,不管技术如何发展,架构如何延伸,不变的是基本功,再先进的组件都是由基础语法书写出来的 。

练武不练功,到老一场空,共勉!

首先说下这个很难的技术定义,个人认为在你知道之外的知识都是很难的,一旦你深入了解其使用方式,原理,甚至阅读了他的源码,你会觉得有的时候会恍然大悟。程序员是一个不断要学习的岗位,就要面临很多从未知到已知技术的时候,每当遇到这样的情况时候,总有种不解决了这个问题,睡不着觉的感觉,心里不踏实,总是想尽各种办法去解决这个问题。甚至可以一直追查这个问题。也许这就是一种执拗吧

我老公最近就遇到一个大石头需要敲碎,我作为一个旁观者,都挺心疼他。

他还在读博,最近遇到的问题是他一个项目上的问题,也跟他的毕业设计相关。他刚读博的时候确定了一个方向,去年开题的时候他觉得这个方向没有什么前景,真的是考虑了好久要不要换,如果不换,就是安稳的毕业,换的话接下来的一年多时间他会很艰难,很多新的问题需要一一克服,最后他决定换了,他说他读博就是为了提高自己,还是想挑战一下。

年前,系统板设计好了,然后最近做好回来了,开始调试,说这个板子跟个石头一样,不工作。本来就是礼拜一到礼拜六待在学校不回来,周日是休息的。现在放假回来都是在啃变压器的东西,早上起的很早,晚上又很晚。真的挺心疼的,他还安慰我说,他又要进步了。挺担心他的身体的,我特别希望时间能快点过去,能顺利毕业。他却不希望,总觉得时间过的太快,没有时间搞研究。

今年的生日愿望,希望他科研顺利,身体 健康 。

以我的从业经历,说说遇到很难的技术问题是什么感觉吧: 兴奋、充满挑战性 。尤其是在开发中遇到了技术难题,很多情况下真有种可遇不可求的感觉。

我认为能遇到技术难题,至少证明这个工作是有价值的。 这种价值体现了两个方面,一是你的工作在整个产品开发中占据重要地位,甚至是核心地位。二是你的认知和经验,仍然有成长的空间。如果你的工作一直没有遇到难题,轻而易举地就解决了一切,那么很可能是你没有机会深入重要的核心部分,或者你的工作性质可替代性很高,简单重复性很高。

分解法。 把技术难题拆分,尽量的单元化、模块化,这样有利于逐步攻破,逐步解决。主要是降低技术难度,寻找真正的难点所在。如果问题无法拆分,就是那么一个点,那么需要逆向思维,可以先把问题扩大,看看涉及面有哪些,然后再缩小范围,锁定关键之处。

刨根法。 把技术难题抽象化,理论化,从根本的源头去解决。很多技术问题,从基础理论的角度去看,其实真的不难,只要你能定位到相关的技术点,困难点,知识点,就很容易进行快速解决。解决的终极办法就是从理论上彻底解决,做到知行统一。

讨论法。 三人行,必有我师。很多情况下,所谓的技术难题,在别人的眼中,也许并不是难题。很多情况下,小组讨论,交换意见,方案互补,就可以解决难题。有些情况下,还需要和供应商一起讨论,主要是补充信息的错漏。经常出现的芯片问题,很多情况下供应商都更加有经验。因为供应商有更多的使用客户,有很多解决问题的经验。最主要的是,芯片是他们设计的,他们更加清楚缘由。

没有绝对的技术难题,有的只是尚未解决的技术难题。

㈢ 程序员工作压力大,身体也垮,为什么还这么多人想做程序员

程序员的工作其实压力非常大,经常都会有程序员因为压力过大而患上抑郁症,更有一些程序员因为长期高强度工作而导致猝死,但是每年还是很多人想要做程序员,在一些大公司,比如腾讯之类的大型公司,程序员的竞争也是非常激烈。压力这么大,身体也很容易垮,但是为什么还是有这么多人想做程序员呢?我觉得有几个方面的原因。


第一,程序员的工资还是非常高的。在一些大的公司,刚毕业的程序员工资一万块钱都是很少的了,这个相对其他很多专业的学生来说,程序员真的是 一个高薪行业。努力两三年都可以在小城市买房,在大城市也可以付首付了。所以程序员这个职位能够吸引很多人进入的最大一个原因就是经济原因,毕竟有钱赚的工作每个人都会喜欢。
第二,其实换过几份工作的人都知道,没有一个工作是不辛苦的,没有哪个工作是没有压力的。程序员的工作虽然也是辛苦的,但是公司能够给予程序员的一些福利待遇也比较好,相对来说除了辛苦一点其他的保障还是非常好的,所以这就是很多人坚持下来的原因。
第三,程序员的工作每天都是和机器打交道,很多时候不需要和太多的人沟通,这样的工作对于比较内向或者不喜欢应酬的人来说还是非常不错的。有一些人有社交恐惧症,而程序员的工作多数时候都是当码农,所以他们在做这个工作的时候不需要和太多的人有牵扯觉得比较安心。
其实只要想把自己的生活过好,没有一个人的工作是不辛苦的,只是在辛苦的同时能够得到自己想要的东西我觉得就够了。不过程序员的工作压力大,所以日常生活当中也应该给自己找到合适的锻炼身体的时间,找到适合自己发泄的途径,这样身体才能正常运行。

㈣ c语言程序设计难点在哪里

C语言是一种表达力很强的语言,而且与其他语言相比显得比较精炼高效。在C语言中的语法部分,比较难的是指针,由于它很灵活,用好的话能大大提高效率,反之则容易出错(一般是内存空间指向出错,如指针空悬、内存泄露等),但是当你练多了,指针应该也不成问题(要有意识的去练),我觉得真正的难点在于算法逻辑。理论上,C语言只要求你时刻知道自己在干什么,要实现什么功能,只要你的程序逻辑明晰,一般不用再DEBUG,一次就能成功,反之,如果自己都感觉模糊,那程序只会比你还模糊:-D,要极好的人品才能勉强运行成功,但出不出正确结果还不一定。解决的方法很简单,就是练。每成功写出一个程序,都会让自己有所进步,积累多了,就能在编程之前在大脑里构建出清晰的蓝图,编程自然不在话下。祝你在通往程序员的道路上一路狂奔,呵呵

㈤ 为什么很多人都觉得编程难,难在哪里

作为一名大二的信息安全学生,在两年期间已经接触了c,c++,java等多种编程语言,也深感编程的困难。在我看来,编程真正的难度不是那些语法,那些东西少则几天多则几个月总能理解。

真正难的是层出不穷的问题和方法,所以我一直觉得,书上讲的东西都不难,难的是你自己去实践那些书上没有的东西。

二、多练多看,阅读别人的代码

我在学习编程的时候就喜欢多看别人的代码,看一些程序员大佬写的代码,看一些标准库的代码,仔细思考他们的编程思维和编程方式

此外,学习过程中结合项目做一些实践,来明确自己的不足,给自己提供一些正反馈,让自己也更有动力继续学习。


质而言之,编程确实不是一件容易的事,但只要你持之以恒不断精益求精,也肯定能获得一定的成果。

㈥ 好程序员:技术分享 有哪些新手程序员不知道的小技巧

1.积极大胆地谷歌。你得知道如何有效地组织搜索关键字,查阅别人写的代码,然后合理地用在代码里,从而解决问题。

2.拥抱变化,坚持不懈。老手程序员在接触新技术时,能欣然接受像个初学者一样处处受挫,并总能在完成工作的同时自学成才。

3.承认细节的重要性。例如变量和函数的命名、CSS 属性的命名、该用哈希还是用数组,以及其他看起来微不足道,但可能对项目有深远影响的事情。

4.承认大多数的“重要决定”其实并没有那么重要。一般的开发者经常在技术选型等“重大问题”上陷入唇枪舌战,而程序员老鸟们会避免浪费时间在骂战中。这一点上,他们就像禅宗大师一样(zen-like)。

5.选择合适的工具解决问题。网上有无数的开源库、工具和框架,让人眼花缭乱。而老手们清楚地知道针对怎样的问题,应该用什么样的工具。

6.明白代码“不值钱”(该删就删)。你必须习惯于删掉几百行代码来重写程序的某一部分,毫不留情。

7.在评估技术的时候要全面。例如,我一直在鼓吹Elixir。它语法优美,社区完善,有很大的潜力。但Elixir诞生的时间太短,所以如果要构建复杂的功能,可能会难以找到能帮你提高效率的开源工具。因此,在评估要不要选择使用一项技术时,你得把所有这些因素都考虑在内。

8.学会说“我不知道”。没有比拒绝承认自己不知道更能浪费一个开发者的时间了。

17. 同有更多经验的人结对编程。没有比这个更高效的编程学习方式了。

18. 一定要先自己做一遍代码审查。当你在GitHub上发起一个pull request之前,先把代码当成别人写的,自己先审查一遍。

19. 认识到做自由职业的难点不是写代码,而是其余的所有事情。销售、推广、客户支持,质量保证以及产品管理,所有这些都会花费大量时间。

20. 发现并解决更大的问题。优秀的程序员不拘泥于眼前的问题,而是清楚如何用更长远的方式彻底的解决这一类问题。

㈦ Java学习有哪些重点和难点

Java学习第一个重点难点——JDK开发环境安装
首先是Java开发环境的各种版本选择,一般情况下我们需要从JDK官网下载最新版本的JDK文件(但是还需要注意你所学习的图书或者视频使用的是哪个版本的JDK),根据自己电脑的系统选择对应的安装包。
其次在安装过程中一定要设置环境变量的路径,这个过程非常关键,会直接影响你的JDK是否可以正常使用。最终还要在“命令提示符”中验证,是否已经真正地完成了JDK的安装。
Java学习第二个重点难点——变量的理解
变量是入门Java开发的首个概念性的思维转变,目前所有的编程语言都是完成人类语言到机器语言的转变过渡方式。变量则是贯穿整个Java编程开发的核心知识点。例如变量的各种不同的类型、变量的命名规则、变量之间的转换、变量赋值时的初始化的理解,变量的相关运算符的使用等等。
Java学习第三个重点难点——OOP面向对象编程思想
Java作为高级编程语言,最大的特点就是采用面向对象编程思想,与面向过程的编程方法相比,OOP能够大幅度的提高代码运行效率。在面向对象中需要重点理解类、对象、抽象类、接口、封装、集成和多态的概念。在Java编程开发中,大部分实战项目都是采用面向对象的思维进行开发,因此重点理解和掌握OOP是学习Java编程开发的重中之重。所以掌握面向对象的概念并且能够熟练运用是一个Java开发工程师最基本要求。在学习过程中,应该尽可能多地去进行实操练习。
Java学习第四个重点难点——多线程
在大型项目中,多线程是众多Java程序员的技术门槛,单纯的概念理解可能并不是很困难,最重要的是要掌握多线程的核心原理以及多线程的实际应用。包括多线程的创建、现成的 生命周期、锁的概念、线程安全等问题。在实际编程开发中,多线程是出现BUG最多的位置,而避免BUG出现的最好方法就是深刻理解多线程的原理,总结归纳多线程经常出现异常的位置,并快速响应找到对应的解决方案。
Java学习中的第五个重点难点——异常
异常是每一个Java开发者不可避免的问题。包括Error、Runtime Exception、Exception、throw自定义异常等等。之前接触到很多同学遇到异常就会手忙脚乱,其实大部分异常都是可以通过调式解决掉,也有很多异常是由于开发者的编码错误引发的,因此遇到异常首先要分析异常产生的原因,逐层去调式获取引发异常的位置,然后不断的总结归纳引发异常的各种原因,在学习工作中不断的提高自己解决问题的能力。学习异常的方法有两种,一种就是系统地去了解各种异常的种类,并理解其引发异常的原因,在实际遇到问题的时候先套用方法,然后再寻找不同的解决方案。另外一种方法就是学习中进行大量的练习,在练习过程中遇到异常后根据实际情况去排查异常产生原因并总结归纳。
Java学习中的其他重点难点
虽然在文中没有重点提到循环、构造函数、I/O和序列化、各种设计模式等等关键内容。对于初学者来说,每一个新的知识点都有一个理解到运用的过程,最重要的是能在学习中掌握所学知识点的底层原理和实际应用。Java编程开发作为一门实操性非常强的技术,单纯的理论知识无法支撑你的快速就业,能够真正动手编码并实现相应的功能才是学习Java最终的目的。

阅读全文

与程序员难点在哪里相关的资料

热点内容
枣庄技术员证书怎么考有用吗 浏览:634
有正负的波动数据用什么分析 浏览:309
湛江有哪些水产品种 浏览:384
数学十几减九的数学信息是什么 浏览:874
产品销售分享会怎么开头 浏览:380
错版币怎么鉴定拍卖交易 浏览:699
信息化建设是一个什么样的工作 浏览:666
怎么看塑料产品能不能降解 浏览:49
如何整合金融资产交易所 浏览:972
物联网发展核心技术是什么 浏览:492
什么是电网企业代理购电 浏览:302
玉石交易大厅系统开发需要多少钱 浏览:685
医疗信息交换标准是什么意思 浏览:937
如何提高叉车技术 浏览:97
欠钱最少多少可以走法律程序 浏览:583
哪个行业小程序比较多 浏览:18
楚留香新衣服为什么不能交易 浏览:959
招投标信息在哪些地方发布 浏览:74
如何将程序员说的高大上 浏览:390
海鲜鱿鱼仔零食批发市场都有哪里 浏览:974