本文首发于我的个人掘金博客,看到很多人都比较喜欢这篇文章,分享给大家。
个人博客主页:https://www.aijavapro.cn
个人掘金主页:juejin.cn/user/2359988032644541/posts
个人的知识星球: 觉醒的新世界程序员
一、背景
之前写了一篇内向性格程序员的文章:
内向性格的开发同学,没有合适的工作方法是不行的 - 掘金
评论还不错,很多人回复了:
内心的我,目前状态就是这样的,学习了
评论区如图:
再一次感受到,在程序员的世界,内向型的程序还是占比非常多的。当时说过软件开发同学的从性格上来说有两类人:外向的、内向的,也就是最近流行的称呼:I人、E人。
是啥意思呢,问了一下ChatGPT。
我问它:请帮忙分析下程序员的I人和E人都是什么意思,有哪些特点和特质
它说:
"程序员的I人和E人"可能是指狄塞特性格类型理论中的两种主要类型:“内向型(Introverted)”和“外向型(Extraverted)”在程序员群体中的表现。下面我们来看看他们的主要特点和特质。
-
内向型的程序员(I):
-
喜好独立工作:他们更愿意独立地去处理问题和任务,享受沉入自己工作的宁静时刻。
-
沉思型决策者:他们在决定如何行动之前可能需要花费比其他人更长的思考时间,这意味着他们通常会进行深度思考以找出问题的最佳解决方案。
-
倾向于书面沟通:他们可能更擅长于书面沟通,比如电子邮件或者聊天工具,而不是面对面的会议或者视频通话。
-
较低的社交需求:他们可能在大量的社交活动中会感到疲倦,并且享受独处的时间。
-
-
外向型的程序员(E):
-
热衷于团队合作:他们喜欢在团队中工作,和其他人一起解决问题,他们通常可以从他人中获取活力。
-
快速决策者:他们往往快速做出决策,更倾向于“行动优先”。
-
倾向于口头沟通:他们可能更擅长于直接、面对面的沟通,善于讨论和合作。
-
较高的社交需求:他们享受与人交往的过程,能从积极的社交互动中获取乐趣和激励。
-
记得,这只是一个大致的分类,人并不完全符合一种类型,大部分人都是在一定的情境下表现出某种特性,而在其他情境下可能表现出另一种特性。实际上,最有效的团队通常会有各种不同的人格类型,这样可以确保有多种视角和思考方式。
在真是的企业工作环境中,两者都有,相互成长和成就,单纯的靠某一类人是无法完成最终目标的。
外向的人在工作中擅长交流,内向的人在工作中善于总结,两种的人都是开发团队需要的。
外向的人在工作中善于活跃团队内的气氛,逐渐走向技术管理路线,带领团队走的更远,控制开发目标与路线;内向的人更擅长观察,容易成为团队的定心骨,逐渐走向技术专家路线,肯研究肯花时间提高自己。
在这个过程中,内向人前期的成长尤为重要,合适的工作方法和习惯也会提高在团队中的地位,而不是单纯的低头干活,本文分享下自己的经验,不一定对希望对大家有参考。
不同的性格的人,具有不同的工作方式和方法,和生活习惯,对于软件开发这个职场环境来说,内向性格不是劣势,很多人外表看着外向,其实潜意识也有很多内向性格的特征。
内向也是人的宝贵的一面,有时也是能力优势的一部分(如善于深度思考等),如果让自己掌握外向同学的行动方式,逐渐的做出改变,会更好。
正如两种颜色的人:
内向性格的颜色给人的视觉感受是:安详、沉稳、冷静、清爽、浪漫、高贵、低调、淡雅。
外向性格的颜色给人的视觉感受是:华丽、兴奋、活泼、热辣、旺盛、大方、通俗、喜庆。
本文算是对之前文章的升级版吧,补充了一些最近的感想和内容。
二、现状
刚毕业不久进入到职场中工作的同学,如果性格是外向的,那么他其实问题并不大,稍微花费一点时间,可以快速调整自己,并被其他人看到自己的工作成果,而内向性格的毕业生,如果在职场中没有主动去做某些工作和承担哪些职责,或对自己目前的工作状况没有及时调整和改变,就会造成成长缓慢,有的人会出现明明自己每天努力学习,却还是工作中那个让同时感觉能力最差的,导致经常没有分配到核心的开发工作,长此以往,消极的各种状态就出现了。
正如之前分享的那样,内向性格的同学在初入职场中经常会出现如下症状:
1、无法参与到同事的日常工作交流中,自己明明想和同事深入交流,做朋友,但是没有契机
2、明知项目组的工作环境和方式存在一些不健康的因素,自己不太愿意去参与或评论
3、对开发整体流程和环节不清楚,及需求的判断有问题,需求频繁改动,代码写了被删除,自己却不敢说,或说了一次被骂以后沉默了
4、项目组缺失技术经理等全流程人员,需求自己理解和功能设计,自己却没有及时吧自己的想法与他人沟通 ,外包团队更明显
5、身边缺乏可以聊天的mentor、同事,自己感觉开发能力无法提升,却一直憋在心里,产生怀疑
6、不知道工作中如何问同事问题,才愿意帮忙解答,持续很长时间未获得同事的信任
7、有时过于逞强,不想让别人觉得自己不行,不会拒绝,实际工作量与评估有差别,导致自己延误工期。
8、针对工作中的需求描述,自己以为很懂,实际做的时候还是有些不太清楚,不太敢问,生怕别人发现自己的短处。
9、身边缺少技术大神,知名程序员等,出现问题时,百度一天都不会,找不到日常解答问题的技术专家和大神。
以至于出现自己越来越忙的情况发生
以上的这些问题,可能不止内向性格的人会有,很多外向的人可能也会有,只是在内向性格的人身上更明显而已,如果内向性格的毕业生,明知道自己有这种情况,却不思考解决办法和改变,长时间后自我开始产生怀疑。 职场中,沟通、反馈、改变是很重要的,但是沟通不一定就是说话,反馈不一定是面对面,而改变是一直要持续去做的。
之前看过一点得到的沟通训练营的视频教程,感觉里面有些技巧是值得大家去学习的,不仅仅是开发类型的同学。
三、经验分享
下面我分享下,我的一些想法,可能不太对,但是希望可以帮助到看到这篇文章,深有同感的你。
问题1:内向性格的毕业生,说的话,或者请求别人的东西,别人听不懂怎么办?
这里先记住一件事情,在职场中,开发者要逐渐学会给不懂技术的人员,讲明白事情,要逐渐学会用生活中的事情去类比。
这个真的很重要,当你给不懂技术人讲的多以后,很多人可能都会来请教你关于某件事的理解,这个通常我们和系统的售前、需求人员、产品人员用的比较多,得学会用生活中的例子或故事去告诉他,XX能做,XX不能做的原因是什么。要坚持去练习。
对于请教一些人技术问题时,不管是同事也好还是网友也好,要明确自己给他的这个消息,别人是否会听懂,马上给出解决办法,还是别人看到这个问题以后,还要和我交流1小时才能知道是啥意思,这个也是很多有经验的人,不愿因帮助低级程序员的原因,这里分享下请教问题的描述模板,实际使用时可以根据模板的内容进行扩展:
我遇到了一个问题或场景:【问题描述】,我想要实现【X功能】,但是出现了【Y现象】,我经过以下尝试:【思路细节】,但是不能解决,报错如下:【报错信息或截图】,或者我使用【关键词】百度,但是找不到答案,请问我该怎么解决或分析。
这个模板的本质如下几个常见思维与方法的体现:
它们是定义和理解问题,以及制定和执行策略的重要工具。具体的含义如下:
-
5W1H:这是用于问题分析和问题解决的一种方法,其名字来源于英文的6个疑问词,它们分别是:Who(谁),What(什么),When(何时),Where(何地),Why(为什么)和 How(如何)。这种方法可以帮助我们全面地理解一个问题或情况,通过回答这些问题来确保项目或任务的所有方面都被考虑到。
-
结构化思维:结构化思维是一种系统化、逻辑化的思考方式。它强调将复杂问题进行分解,然后逐一解决,从而使问题管理及解决更加清晰、简洁。此思维方式可以应用于各行各业,尤其是在面临复杂问题和决策时。
-
SMART 原则:SMART 是一个由字母S、M、A、R、T组成的首字母缩略语,它们分别指代其中的:Specific(具体)、Measurable(可度量)、Achievable(可实现)、Relevant(相关性)以及 Time-bound(有时间限制)。这种原则主要是用来帮助人们设定明确、可实现的目标。只有当一个目标同时满足这些条件时,它才是一个有效的目标。
-
STAR法则:STAR 是Situation(情境)、Task(任务)、Action(行动)和Result(结果)的缩写。这是一种用于描述自己在特定情境下如何处理任务并获得结果的行为描述法则。这种方法常常在面试中使用,用于回答体现能力和经验的行为面试问题。面试者可以用 STAR 法则系统地阐述他们处理任务,并取得成果的全过程,给出一个完整、具体的故事来回答面试官的问题。
请今天牢记这几个,这个在日常工作中的表达和习惯是非常受用的,能让人清晰的感觉得一个讲的清楚有逻辑性。
比如,我们可以通过一个假设的编程项目来具体地理解这几个概念。假设我们有个任务是开发一个新的功能——一个数据库的增删改查接口。
-
5W1H:就像程序员在分析问题时一样,5W1H帮助我们更全面地理解我们需要解决的问题或需要实现的功能。
- Who(谁):这谁在我们的语境里代表的是使用者或者其他开发人员。答案可能是:数据库管理员、其他开发者或者系统。
- What(什么):本项目需要开发一个数据库的增删改查接口。
- When(何时):计划在两周内完成开发任务。
- Where(何地):在我们的开发环境中进行开发和测试。
- Why(为什么):为了使用户或其他系统能有效操作数据库。
- How(如何):通过使用Python语言和SQLAlchemy库来开发。
-
结构化思维:我们设想一个复杂的任务,然后使用结构化思维将其拆解成更小的、更容易管理的部分。比如此项目,首先我们先把它分割成两大部分:数据库的设计和接口的编程。然后再继续分割,设计数据库可以再拆分为字段定义、表之间关系的设定等;接口编程则可以拆分为编写增删改查方法、实现权限控制、实现错误处理等步骤。
-
SMART 原则:我们可以把本项目的目标定义为:两周内,使用Python和SQLAlchemy,在我们的开发环境中,为其他开发者和系统创建一个可以进行增删改查操作的数据库接口,以实现对数据库的有效操作。
-
STAR法则:在日常的开发任务中,也可以使用 STAR 法则来描述自己是如何解决问题的。比如一个可能的场景是:在开发一个新功能(Situation)时,我被指派创建一个新的数据库接口(Task)。我首先分析了任务需求,使用Python和SQLAlchemy来设计和编写代码(Action),最终我在两周内完成了任务,并得到了用户和其他开发者的良好反馈(Result)。
以上的示例展示了如何在实际的编程项目中应用这些理论。可能每个项目的具体应用会有所不同,但是这些理论提供了一个框架帮助我们更有效地定义问题、解决问题和报告结果。
问题2:评估工作计划有时过于逞强,想的不全,不想让别人觉得自己不行,不会拒绝
这个真的想说,工作前期真的别逞强,没做过就是没做过,不行就是不行,别找啥借口,但是别直接和负责人说这个东西我不会(这个是很不好的,不能说不会,这是明显不相干的意思),比较合适的说法是:这个东西或概念我暂时不太清楚,没接触过过,需要一会儿或下来后我需要去研究下,然后咱们在沟通或者确定一下。
而很多内向性格的毕业生,缺少了这种意识,同时安排某项工作任务时,缺少对任务的分解能力和排期能力和工作后排期后的To do List梳理能力,以至于自己5天完成的任务,口头说2天就搞定了。一个程序员如果能对需求进行较为完整的任务拆分,拆分为一个个的具体的待办事项,也是重要的能力,这里分享几个自己总结的日常功能开发时,功能拆分的10个思考方向:
1、为满足UI设计稿中的效果,需要做的功能点与逻辑
2、为满足当前需求文档的功能描述,需要做的功能项/点
3、自己感觉稍微有点耗时的地方,需要做的功能点与逻辑
4、基于现有功能,性能问题方面的考虑,需要做的功能点与逻辑
5、是否有需求文档之外未明显体现的功能点或体验方面需要的:例如定时任务、影响范围、短信提醒
6、技术预研或可行性研究或想针对需求自己想新增某些方面特性的功能点(为了提高UI交互、操作效率、问题查等辅助性功能)
7、一些用户运营角度、监控角度、历史数据版本备份角度、反复操作造成隐藏功能需求
8、从用户角度或测试人员角度,需要做的功能点与逻辑
9、从功能性需求、非功能性等需求分析角度,来梳理待做的功能点与逻辑
10、历史类似功能测试过程中出现的问题,本次想避免的:比如边界、提示语、页面停留时间长、加载中、弹出框的
其实这种,前期mentor该给你做个示范分解的操作,或者自己主动问下,如何分解项目的需求和任务。
而真正开发的时候,每天可能都感觉这里需要加上XXX功能,那里需要加上YYY功能,但是不知道是否需要做,这里我的建议是,把他加入到自己To do List中,然后找个时间和同事去沟通下这个想法,长此以往,同事的心里,你就是一个有想法的人,虽然不善言辞。
主要就是这里,我们要体现自己的一个工作的对待方式,而不是一直被动接受,不拒绝,不反馈。
问题3:明显知道产品经理、项目经理等等人员对需求的认识不足,自己闷着不反馈和说话
职场中沟通是很重要的,沟通越多,实际减少的返工率也会相对较少。
很多时候,任务的返工和需求的变更,有一部分是这个原因的,在经验尚少的情况下,自己未能说出自己对这个需求的认识和怀疑,就去搞了,最后大家都不是特别的好,尤其是在产品需求设计初期,包括需求提出者也是理解不够的,这里可能有很多内容其实是你可以提供的服务,也有一些是产品在犹豫使用哪种方式实现的功能,在与你讨论后,觉得你说的又道理,而决定复用你已经有的系统。
很多出入职场的同学,觉得没成长也有这方面的一点原因,自己开发的功能,缺少自己设计思想和认知的影子,如果能在当前系统中体现出了自己的想法,时间久了多少成就感会有点提升的。
要学会做自己负责的模块/功能的主人,把他们当做自己的孩子一样,主键养成主人翁的意识
问题4:项目组,当前啥都没有,文档、测试,自己也和别人一样不做改变
这个也是目前很多公司的现状,但是不代表别人不干,你就不干,这个时候,谁主动,谁就能表现一把,同时,这也是被动让同事主动问你或咨询你的机会。
比如没有协同的东西,那你能不能自己先装个Confluence Wiki或飞书云文档工具,自己先用起来,然后某个时机在同事眼前展示下,自己基于这个软件形成的技术思考、技术经验、技术记录等等等。
比如没有自动发布或代码质量的东西,那你能不能自己先搞个jenkins、sonarqube、checkstyle、findbug,让自己每次写完的代码,自己先搞下,然后某个时机告诉同事这个东西必须这么写怎怎么样。
是不是有人又说了,工作没时间搞这些东西,你是不是又在扯皮呢,我只能说起码比你空闲时间自己偷偷学习公司短期内用不上的技术或长时间用不上的东西好吧,至少我能非常快速的获得1个同事的信任、2个同事的信任,从而获得团队的信任与核心工作的委派。
大部分人的想用的技术都是和公司的技术栈不搭边的,至少先把脚下的路走出来。
四、总结
最近几年,大多数人都生活在【卷】字的世界,每天都在想着高大尚的技术点和八股文,业务的理解程度、创新程度某些同学在持续的下降,没有明确的需求文档,就不会干活。
可能会导致短期工作没干好,还说没成长,以至于某些情况下还被认为是工作和团队中那个能力最差的,即使做了很多的努力。我想说的是,某段时间点或时期内,至少要把当前工作做好在谈论吧,这个在一些内向性格的人身上会表现的明显一些。
IT行业,很多优秀的人也是内向性格的,掌握了合适方法,会让他们成为内向性格顶端的那批优秀的人群。
说道性格吧,即使是内向型的,可能针对十二星座还是衍生出不同的人生和结果,每个星座的也是有区别的。而在这里面最突出的我觉得是天蝎座的人群。
身为天蝎座的我,经常会想到那些和我一个星座的大佬们:
搜狐创始人张朝阳、腾讯创始人马化腾、百度创始人李彦宏、雅虎创始人杨致远、微软创始人比尔.盖茨、联想集团CEO杨元庆、推特CEO杰克.多尔西、新浪董事长曹国伟。
他们的成长也一直在激励着我。
最后,对于程序员在日常工作中,一定需要采取主动去找到需要的资源和解决方案。以下AI人工智能大模型告诉我的一些可能的步骤,可以作为参考:
-
向你的经理或负责人进行沟通:首先,不管你是内向还是外向,沟通始终是解决问题的第一步。告诉他们你当前的困境,询问他们是否有对应的资源可以提供,或者是否有人可以向你解释项目的情况以及你的责任。如果你觉得直接面对面交流有挑战,你可以选择写邮件的方式来表达你的问题和需求。
-
设定一个计划:使用你所了解到的5W1H和SMART原则来制定一个计划。例如,你可以首先确定(WHAT)你需要熟悉的技术栈,接下来找出(WHO)可以提供帮助的人,设定一个(WHEN)时间期限以完成技术栈的学习,确定(WHERE)你将在哪里学习和实践(例如在线教程、书籍等),然后解释(WHY)这对你的工作是必要的,最后确定(HOW)你打算完成(例如每天花费一定的时间用于学习)。
-
提问:如果你有团队成员,不妨打破困扰你的内向性格,主动和他们交流。询问他们过去的工作或者与项目有关的事情。同样,如果O2O的沟通让你觉得难以应对,可以尝试通过在线工具(如Slack,微信等)进行交流。
-
自我学习:在没有正式指导的情况下,你可能需要依靠自我学习来熟悉新的技术或工具。利用网上的教程、书籍、博客文章等资源。
-
参与社区:参与你所需要熟悉的技术的相关社区。这些社区中通常有丰富的资源和经验可以参考。通过查阅论坛或者提问,你可能在那里找到你需要的帮助。这几年私域流量比较火,对于程序员比较好的一个私域流量就是知识星球,很多互联网公司的技术大拿都开通了自己的知识星球作为日常的福利,所以可以加入一些不错的技术知识星球,亲密的与技术大佬们接触。
请记住,面对困难和挑战是任何职业生涯中常有的事情,你并不是唯一遇到困难的人。你的主动性和解决问题的能力是非常宝贵的,即使你是内向的人,你也可以通过你自己的方式解决问题和挑战。
这些经验对正在阅读文章的你有用吗,欢迎一起交流,让我们一起交流您遇到的问题。
也可以加入个人目前免费的知识星球【觉醒的新世界程序员】
以下往日文章沉淀分享,感兴趣的可以阅读哦:
Java系统开发必备的解耦知识:Spring Event事件机制解耦业务场景
2023年了,这么强Nacos源码你竟然没学过,赶紧来成长
开源贡献好处多多!我又给微服务注册中心Nacos提交了一次代码
迈向及格线的开发必备的JMeter性能测试总结1:基础概念与环境搭建
优雅的用工厂+策略+模板+建造者模式+开闭原则来生成网站的Sitemap地图
如果这篇文章说道你心里了,可以点赞、分享、评论、收藏、转发哦。
如果你喜欢我的这篇文章,想和我一起交流,可以加入我的知识请求哦:觉醒的新世界程序员