关于思考:反思软件开发生存策略

本文要谈的不是软件产品的生存策略,而是作为软件开发人员在团队中的生存问题——按理来说,这也像前两篇所讲的一样属于「人为因素」问题。 团队类型无论是不是与互联网相干,在一家靠提供软件及服务吃饭的公司里,只有具备肯定规模了,就会分化出业务型团队和撑持型团队—— 分工细化的前提是流程环节比较复杂,并且因操作规范化水平不够或其余什么起因导致不能自动化,无奈用机器取代人工,因此要拆分出子环节并找到对应的人去解决。 欧雷《反思软件开发:软件生产》 业务型团队专一于「开源」,即「创收」,给公司的产品添砖加瓦以带来更多支出或流量;撑持型团队负责「节流」,也就是「提效」,让业务型团队的事件可能更快、更好、更有品质地落地。 工作价值当被问起「你某段时间做了什么有价值的事件」时,会如何作答? 置信有很多人会「自信满满」地说本人为业务带来了多少支出和流量;也有不少人「满心冲动」地列举本人为让业务更好落地做了多少奉献。 正当你在向他人对本人做的一些自认为很有价值的事件大谈特谈时,对方问了一句:「你做这些的价值是什么?」你听了之后的第一感触很可能是不爽,并且纳闷:「这么有价值的事件都没看进去哪里有价值?」 问的人不肯定是歹意,有可能是你的表述没让他 get 到你所认为的价值点,也有可能是他尽管 get 到了你所认为的价值点但他认为没价值。 前者是表达力和理解力的问题,这个别不是大问题,换个形式论述;而后者则是价值观问题,这会影响站队,也就是与另外一个人或群体的匹配度、融合度。 从下面的团队类型划分看,直觉上会认为做的事件只有合乎团队的职责定位,可能让团队变得更好,就是有价值的。从「团队」这个整体来看兴许是这样,但深刻到团队外部去看呢? 「有无价值」是「评估」,「评估」受「人的意志」影响,只有被「人的意志」影响就是「主观」的,无论这个「人的意志」是一两个人的还是很多集体的。 所以,集体或团队做的事件是否有价值,最终还是靠直系下级的价值观去定性——做的事件的成果是空谷传声还是须要质变到量变,直系下级自己和其余共事或被撑持的团队认不认可。 如果做的事件在比拟长的工夫后才体现出(微小的)威力,那时你可能曾经因为当初直系下级认定你做的事没价值而被裁了或本人走了。 生存窘境上文中的内容看起来可能感觉「很失常啊」、「这都没什么」,那上面开始说一些我感觉会让人丧气的事实。 总看我文章和理解我的人都晓得,我的从业经验是既在业务型团队干过也在撑持型团队待过,不论是在哪种类型的团队中,都积极主动地做了很多基建方面的工作。 并且我也治理过小小团队,能够用不同的视角去尽可能全方位地论述—— 业务型前端职业倒退与成长的问题围绕着每个人,对于研发人员来说,对于在业务型团队中的前端工程师来说尤甚。 在业务型团队中,前端工程师的主要职责就是实现产品需要,保障产品质量和上线工夫。想封装 UI 组件库、脚手架、开发框架?不是有现成的开源我的项目和撑持型团队的我的项目吗?有反复造轮子的必要?需要做完了吗?能让团队赚钱吗? 在业务型团队中,业务跟前端有什么关系吗?前端只是施行环节之一,前端工程师仅仅是个搬砖的,根本只能在施行的可行性、合理性上插插嘴,想砍需要或左右产品倒退方向?呵呵呵…… 业务型团队的前端工程师,把代码写得没什么 bug 是「应该的」,这是「本职工作」。如果 bug 多,不仅会被单干的人投诉,还会被他们和下级认为能力不行。 想做些基建工作去提高效率和缩小品质问题?能够啊,但不能影响失常需要的开发。并且,做那些货色只能算是你的集体晋升,因为没让团队赚更多钱啊,不算你「不务正业」就不错了,顶多在考评时认为你还算有上进心吧! 这样看来,业务型团队中前端工程师的天花板切实是太低了,很容易就会遇到倒退瓶颈。 就算能够给团队中的所有我的项目代码做重构,等全副重构之后呢?做的这些重构会让你的下级和其余共事褒扬你,赞叹你,更看重你,进步你的重要位置,让考评后果有利于升职加薪吗?若是不能,这是不是在自嗨,自我打动? 如果还留在这样的体系中,摆在面前的根本就三条路:转到撑持型团队;做前端负责人;转做产品方向。 撑持型前端「撑持型团队」听起来有些高大上,给人以技术屌炸天的样子,使业务型团队的人心驰神往——在技术上相对来说是有些优越性,毕竟靠提供技术性服务吃饭,但也没那么夸大。 在这里,「撑持型团队」是指那些提供通用开发工具等的公共技术部门,或提供像低代码平台、数据智能服务等门槛较高且相干资源集中的中台部门。 进入撑持型团队之后,心想终于能够不必思考那变幻莫测的业务而分心做本人喜爱的技术相干的事件了! 真的是这样吗?真的是这样吗??真的是这样吗??? 且不说前端工程师在有的撑持型团队中的处境理论跟在业务型团队一样,想想撑持型团队的业务方是谁?是业务型团队! 如果做的技术工作不能满足或者满足不好业务型团队的需要,那么做的这些工作的价值和意义在哪里?在与业务型团队对接过程中呈现问题,或者对接后他们业务上呈现问题,没准还会被投诉。 所以,纵然不在业务型团队,也会受到变幻莫测的业务的影响,即便会绝对小些。 就算相较于业务型团队可能将更多的心理放在技术上,天花板更高一点,瓶颈也会晚一点遇到,但又能做啥呢? 工具库?UI 组件库?脚手架?开发框架?跨端计划?配置平台?监控平台?低代码平台?还有呢? 这些货色,第一次做会感觉很陈腐很有播种,但上进的你如果在业务型团队中时就做过一遍了,或者换到了另外一家公司的撑持型团队做同类事件时,就很可能会发现没什么陈腐玩意,思路和做法都差不太多。 那么,对于你来说,再做这些事件还有价值吗?有什么价值? 当依照团队负责人的布局、批示循序渐进地做那些货色时,你就像在业务型团队中一样仅仅是个搬砖的,没任何亮点,依然是可替代性很强的螺丝钉,没什么区别。 对于研发人员来说,对于在撑持型团队中的前端工程师来说,与在业务型团队中最大的不同就是本人的间接业务是技术,比在业务型团队中更懂本人的业务,更有可能去左右倒退方向。 要想左右方向,体现本人的价值,就得弄清楚团队的价值是什么,开掘问题的根本原因,提出更好的、能解决真正问题的思路和可行计划,去压服团队的负责人和其他人以及业务方。 撑持型团队的职责是大家所津津有味的「提效」,也是大多数软件工程师的「本能」。 然而,兴许很多人没想到的是,引以为豪的「提效」在某些情景下却成了剥夺别人饭碗的「屠刀」,本人变成了「鹰犬」。更为滑稽的是,本人可能就是被剥夺饭碗的那些人中的一个,变相「他杀」了…… 这背地的逻辑是——「提效」进步了产能,如果组织整体营收没有相应的增长,即那些业务型团队不够给力,就会劳动力过剩,进而加大组织经营老本;为了生存,组织会想方法缩小开销,从而通过各种模式增员。 前端负责人有的人会天真地认为做了前端负责人就能够居安思危了……我不否定会存在这种状况,但更可能的是—— 不仅持续做着一线开发工作,即履行好一般业务型团队中前端工程师的职责,还要做团队治理、项目管理相干工作。 本人部门里的事件还好说,当遇到跨部门合作时,责任划分和资源协调会相当麻烦。 因为组织架构调整和人员变动造成的踢皮球景象时有发生,想找到集体征询问题得兜兜转转绕上一大圈儿,很多工夫过来了才可能问到,当然也有得不到答案的可能。 本人或上司遇到对方不配合时,得本人跟对方 leader 或找本人下级跟对方 leader 的下级去沟通。这类事件就算是同部门也会遇到。 作为业务型团队的前端负责人,依照人们的惯性思维,得要比其余的前端工程师更懂业务吧?但问题是,怎么去懂业务? 要真的懂业务,首先得对那个畛域感兴趣吧?不感兴趣的话如何做到真的懂业务?不喜爱数学的人把数学考高分让我膜拜下? 那些说本人懂业务的人真的懂业务吗???能发现以后产品架构和商业模式中存在的问题并提出改良计划吗??? 作为业务型团队的前端负责人,依照人们的惯性思维,得要比其余的前端工程师更懂治理吧?但问题是,如何做好治理? 「治理」是什么?是挥动着手里的势力大刀逼迫就范?还是用各种技巧、伎俩画个大饼引诱并套路他们? 抱有这类想法甚至如此口头的人不懂「治理」,更别说懂兽性了。真正的「治理」是发明难受的环境,去激发别人工作的主动性,成就他们本人进而成就团队—— 最现实的治理,应该可能激发出上级的激情,唤起风雨同舟的使命感、成就感,让他们感觉工作不只是维持生存、生存的伎俩,同时也是自我实现的形式,最终达到自驱动、自组织、自治理的成果;最现实的组织状态,是基于独特愿景的去中心化或弱中心化组织。 ...

September 22, 2023 · 1 min · jiezi

关于思考:前端开发脚手架的必要性

站在前端研发角度,剖析研发前端脚手架的必要性 开发脚手架的外围指标是:晋升前端研发效力如何晋升前端效力 脚手架外围价值在整个研发过程中自动化:我的项目反复代码构建/git操作/公布上线操作标准化: 我的项目创立/git flow/公布流程/回滚流程数据化:研发过程系统化、数据化、使得研发过程可量化 开发脚手架和自动化构架工具区别 如果自动化架构工具能实现我的项目的大包上线,是否还须要开发前端脚手架?是否存在反复?jenkins、tranvis等自动化构建工具曾经比拟成熟了,为什么还须要自研脚手架?不满足咱们全副需要,对于jenkins、travis这些自动化构建工具,通常都是设置在git hooks中进行主动触发;而后再服务端执行,仅仅只能笼罩云构建内端的操作,无奈笼罩研发人员本地的性能。 没方法实现:创立我的项目自动化、本地git操作自动化定制过程复简单,须要本人去开发插件,应用的是JAVA语言。jenkins 比拟善于在服务端做一些拓展性的操作;前端在构建,装置依赖和上传资源就能够实现

June 29, 2022 · 1 min · jiezi

关于思考:印刷工程序员与模型

印刷工100美元上的这个老头叫富兰克林,是科学家和《独立宣言》的起草人,大家都晓得了,不过他本人写的墓志铭可能没那么闻名: The Body of B. Franklin, Printer, Like the Cover of an old Book, Its Contents torn out, And stript of its Lettering & Gilding, Lies here, Food for Worms. But the Work shall not be lost: For it will, as he believ'd, appear once more, In a new and more perfect Edition, Corrected and Improvied By the Author. 印刷从业者本杰明•富兰克的身材,像一本新书的皮子,内容曾经撕去,书面的印字和烫金也剥落了,长眠此地,作蛆虫的食物。然而作品自身决不致泯灭,因为他坚信它将从新出版,通过作者加以校对和润饰,成为一种襄新的更漂亮的版本。 他给本人的身份是印刷从业者,这并不是虚心。在过后,印刷业的位置并不低,能够类比于当初的软件行业。 直到信息反动之前,都须要靠纸来记录、传递信息。印刷可能极大的降低成本,提高效率,所以有人说1439年古腾堡改良了印刷机,间接影响了文艺复兴、新教改革和启蒙时代。 印刷工人必须要识字,能力进行校对、排字等操作,在识字率不高的年代,是比拟高的门槛要求。而且因为接触到的书籍、报纸很多,能够获取到的信息是比普通人多的,因而待遇和倒退机会都还不错。 因为教育的遍及,识字率越来越高,起初的印刷工人曾经变得和普通工人没什么区别了,然而确实能够把这个工作和程序员作一个类比。 程序员 上图是程序员们的代码如何将桌面的货色集成到电脑里,而咱们更切身的感触,则是手机里的软件如何让生存更加不便和高效,从2000年到当初,不算太长的二十年里,计算机曾经无处不在,前十年是PC的遍及,后十年是智能手机的遍及。兴许能够这样说,这个世界曾经离不开程序员了——更精确的说,是离不开程序员们写的代码。 举一个例子——最近十年有哪些隐没了或正在隐没的职业?——在作图软件呈现之前,设计图是由绘图员来画的 二十年前,一栋一般的居民楼,可能须要一个团队十几个人描大半个月能力画出残缺的套图。而且画错的话,用刀片刮掉从新画,不容许有丝毫的谬误,须要短缺的急躁和仔细。 当初,一个对施工图纯熟的绘图员,用CAD一个下午就能够把过后整栋楼的立体图画进去了,相比过后,也更加的精准,便捷。 ...

May 7, 2022 · 1 min · jiezi

关于思考:提升技术思考力专注于组织中的有效性

引言:对技术开发同学来说,咱们常常会面对一些在组织中典型的成长性问题,例如:技术思考力是什么?技术达到肯定段位,下阶段的成长是什么?如何防止内卷?在组织中如何晋升本身影响力?解决这些成长性问题,最重要的是扭转本人的思维模式,将专一于效率的模式,切换到专一于有效性的模式中来。 工业时代效率后行 工业社会,无论是操作机器的工人,或是火线战斗的士兵,只须要关注效率,就能对优劣做出评估:每小时生产 100 个规范螺钉的工人就比每小时生产 50 个规范螺钉的工人杰出;可能第一工夫落实首长命令的士兵,就比拖沓的士兵更加优良;在工业时代,优劣判断的规范,更关注的是把事件做对,而不是做对的事件。 信息时代的有效性 在信息时代,常识工作者不再依赖于肌肉或者灵便的双手,他们须要更多的应用本人的智慧,这时,评估规范产生了变动:一天写 500 行代码的工程师不肯定比一天 200 行代码的工程师程度高。真正评估优劣,此时考查的不是效率,而是工作的有效性,只有这些智慧真正的为组织产生了价值和奉献,才有意义。如果一个常识密集型的我的项目,在开始设计之初就是谬误的,那么就算把他的技术架构设计的趋近完满,也没有任何的意义。在信息时代,优劣判断的规范,更关注的是做对的事件,而不再是把事件做对,因为只有做对的事件,能力使工作无效。 人们会偏向于做本人善于且容易的事件,比如说他人通知咱们怎么做的事件,这个时候很容易掉入效率陷阱,而疏忽思考事件自身是否是无效的。再做事件的时候,无妨问本人两个问题,这件事是否带来的新的机会,是否解决了老的问题,因为机会的开发,问题的隐没是有效性掂量的外围指标。 有效性应该如何掂量有效性不能用数量来掂量,也不能用投入的老本来掂量,有效性的掂量最终要靠后果掂量。这些后果应该是发明的间接价值、开拓性的翻新、或者前沿的技术储备、外围问题的解决。OKR 和 KPI 应该是对外围奉献后果的承诺,也就是对有效性的承诺。 独立个体的有效性组织以外的常识工作者,或者称之为独立个体,根本不会存在有效性的问题。举例来说:对一个个体医生来说,病人求诊便将所有问题都带了进来,医生只须要解决这个病人的病痛,过程中其医学知识便能无效施展;对一个自在工作的程序员,实现需要按时的交付,便是其专业知识有效性的完满证实。 在组织中的有效性与独立个体相同,组织内的个体在有效性的问题上则面对自我不可控的多重事实因素: 个体的大量工夫属于他人,也可能面对大量紧急事项的解决,容易短少工夫进行前瞻性思考。有效性的掂量取决于组织的判断,只有组织意识、利用到你的奉献时,能力体现价值。在组织内,容易关注外部的信息,而疏忽内部的倒退,做出局限性判断。举例来说,在一个医院组织中的专家医生,大量的工夫要和护士、院长、药品机构对接,本人可用的工夫被大量压缩,同时,对一个组织来说,真正关注的医生奉献可能是专家医生造就了多少新医生,而非医治了多少患者。既要解决新人造就,又要解决组织外部的沟通,专家医生很可能又会疏忽内部医学技术的倒退,逐渐丢失本人的专家劣势。 因为这些起因,在一个组织中施展本人的有效性,对集体提出了更大的挑战,这和组织没有关系,只有是在组织中,有效性的挑战就始终存在。在这些艰难背地,组织其实也给其中的个体带来了更大的机会,组织可能使集体才能有机会增值。在独立个体重,有效性无奈被复制,而在组织中,一件被证实无效的事件能够被推广复用,实现有效性的叠加。所以在组织中,可能证实有效性是件艰难的事件,但无效的事件,肯定不会被湮没。 如何晋升自我的有效性从多角度对待问题 形容这件事件有多艰难。产生这件事件有多艰难。实现这件事件有多艰难。证实事件正确有多艰难。了解本人的行为实质 了解并承受本人的行为,但要意识到这是本人潜意识、以及情绪的天然反馈。训练使用本人大脑的逻辑区。正当调配工夫,记录、治理、安顿工夫: 建设正当的制度,节约沟通老本。对基本不用做,做了也是浪费时间,无助于后果的事件,敢于回绝。能由他人代为参加,且不影响成果的流动或会议,敢于放权。做好预判,少走弯路,把重心放到重要而不紧急的事上。正当的排兵布阵,升高不必要的治理老本。后果导向,器重和外界的分割以及对外界的奉献: 明确指标,将本人的工作与久远的指标相结合。关注本人的能做的事件,而非组织能给本人带来什么。致力理解业务和用户的痛点。建设好与共事合作方的人际关系,在沟通中寻求启发。造就技术视线,尝试从更高的角度,从组织内外的维度定义现有的问题。长于利用本人和别人的短处: 关注他人的短处,而非短处,寻求单干,借力解决问题。器重绩效考核,后果跟进,KPI,OKR 的制订要具体可掂量。把控招聘品质,让新鲜血液始终能给团队带来新的时机。关注 TL 的短处,寻找无效的沟通交流形式。给本人制订高指标,他人不让我干个别是惰性和不足勇气的借口。本人的工作能力和习惯本人最分明,做本人善于的事件并寻求单干。长于利用管理手段,通过组织会议或者建设机制,推动后果产出。将精力集中放在多数重要的事件上: 预留大块工夫给重要的事件,重要的事件放在后面做,一次只做好一件事。把他人设定的重要性当作制约因素,而不是决定因素。器重机会,有勇气做本人认为优先的事件,而不是对他人优先的事件,敢于做工夫和工作的主宰。不将精力投入到不产生价值的事件,投入到发明将来的新机会上。致力做出高质量决策: 谋求无效,不是谋求效率,不能以执行命令为满足。常识工作者必须能对有效性做出决策,并承当起做出奉献的职责。决策是从见解开始的,见解是尚待认证的假如,要做决策,先要有本人的见解,再听他人的见解,从见解中,寻求事实,在事实中做出决策。遇到问题,假设问题是一个外表设想,不满足于外表,深钻根本性的问题,器重战略性问题,适当鄙视“解决问题”。钻研正确的决策是什么,而不是钻研被人承受的决策是什么,口头或者不口头,都要坚持到底,不能大功告成。决策要有多种事后设置的评估规范,最终应用最正当的规范进行反馈掂量,器重执行过程的反馈,印证正确和有效性。有效性是一种自我训练有效性不是一门课程,而是一种自我训练。在自我训练中,始终专一于价值和奉献的发明,个体能力为组织的发明更广大的倒退,而组织的倒退,最终也会发明更大的平台给无效的人发明更多的机会。 回到引言的几个问题中来:技术思考力是什么?技术达到肯定段位,下阶段的成长是什么?如何防止内卷?在组织中如何晋升本身影响力?我感觉,晋升评判现阶段有效性的能力,可能就是这些问题的对立答案。 作者:ES2049 / Dell文章可随便转载,但请保留此原文链接。十分欢送有激情的你退出 ES2049 Studio,简历请发送至 caijun.hcj@alibaba-inc.com

August 6, 2021 · 1 min · jiezi

关于思考:杂感二

我平时次要逛的社区也就是知乎、豆瓣、掘金。这下面看到货色杂七杂八的货色,这周倒是看到了不少触动我的货色,这里把本人感觉乏味的货色和思考写下来。前面如果有第三期的话,会思考将这个系列做成一个系列,每周除了发本人的学习之外,再发一点本人的感悟。情绪化这个是在逛豆瓣的一个叫亲密关系修复互助会看到的一个词,原贴的题目是求助,对男朋友Emo频率很高,怎么办? 帖子的原文有这样一句话:我是很容易很容易多想的那种,常常深夜就会Emo,而后就和好敌人发一堆一堆,倾诉之类的。上面解释了emo的意思: 底下的评论有个很让我印象粗浅的评论: 这个"会影响 没有人违心始终当垃圾桶"的评论有点触动我,我感觉我本人也多多少少有点情绪化吧,快乐的时候,我感觉我是世界的太阳,丧气的时候,感觉本人是世界上最没用的人。 因为我有的时候也容易想太多, 尤其是在繁忙一天的时候,精力被耗费一空的时候,我更容易情绪化一些,这里的情绪也是消极的、悲伤的,好像有什么货色淤积心里一样,须要疏导进来。 我通常会跟敌人打打电话,讲下最近的不如意之处,但想来也有一点把敌人当垃圾桶的感觉.不过我情绪化次数不多,我敌人也到没有太在意, 近期我也无意识的在反思本人的情绪化, 每次问题不是很大,但有的时候就会导致我的情绪奔涌上来,就感到有些急不可耐,事实上过后触动我情绪的也不是什么小事,只是对于陷入到情绪的我来说,这是一个小事,心里莫名的着急。 然而都是第二天一觉想来,情绪就退去了。 所以这段时间我就在寻求排解之法,目前说来让我感觉比拟有用的办法就是转移注意力,这周几我倒是忘了,我遗记过后引起我情绪化的是哪件事件了,我记得我过后就全神贯注的去看一本书了,而后看了大略一两个小时左右,从书外面进去的时候,感觉就好多了。 这让我想到已经身材受伤的时候,过后感觉有点小疼,如果没看伤口或者伤口比拟荫蔽、或者得空去看伤口都时候,那个伤口引起的疼痛倒是不重。疼痛的加深往往在我将注 意力挪动到了那个伤口上的时候,好像之前没感触到苦楚在这一瞬间奔涌而来.我在想是否情绪化是心理受伤的苦楚呢,如果身材的伤口是以疼痛的模式告知大脑,那么情绪化就是奔涌上来的情绪是否是心理不小心受伤 之后给咱们的反馈呢。 心理受伤给咱们的反馈,这是一部分,另一部分起因我想应该是本人跟本人过不去吧,不违心放过本人,一次又一次的审判本人,一次又一次给本人定罪,一次比一次定的罪大,不肯原谅本人, 不停的把事件朝坏的方向想,一次都比一次想的坏, 一次又一次的对本人心里的那个小孩说: "你真的是个废物,不会有人喜爱你的,如果你是他人,你会喜爱你本人吗?会有人喜爱一个废物吗?" "你真的是一个废物,啥也不会,真是一点用都没有" "再也没有机会了,废物,怎么搞出了这么愚昧的操作" "这么好的机会都错失了" 你坚韧不拔的置信这些断言,把本人当做审判官,感觉本人对本人的裁决公正正当,置信不可能有第二种可能性,曾经没有了别的路,摆在本人背后的只有一条本人预设的死路?这像是本人造了把利刃,而后本人对准了本人的要害,你本人当然分明你本人的要害在哪里,你毫不留手,一直的给本人的心理制作创痕,沉浸于此的你兴许并没有意识到本人是在心里自残。这样怎么能不抑郁呢?不沉迷在负面情绪外面,情绪怎么会不奔涌而出呢。你都给本人下了一个审判书,谁能援救你呢? 沉迷在负面情绪的人很像是溺水,我想起我小的时候一个前辈已经跟我讲过的救溺水小孩的经验,他说那个小孩挣扎的太厉害差点他也在栽在那条河里,他说有人去救溺水的人的时候,溺水的人最好不要动,动作越大,越有可能把施救者也带进去。所以一个溺水的人如何配合施救者能力更好的获救,答:先放弃本人,进行挣扎。越是挣扎的厉害,施救者就越发的用不上力量,只好先把你打晕能力施救。这是救生员要学的第一课。 所以沉迷在负面情绪的人应该将审判的势力从本人的受伤移交进来,不交出去,你就还是不肯放过本人,你就没方法取得援救。把审判权交出去,就是不再为本人的人生断言,不再给本人下判决书,交出那把挫伤本人的利刃,也就是把下面的裁决变成问句: "你真的是废物吗?" "再也没有机会了吗?" "真的没有机会了吗?" 句号变为问号,心念运行间,负面情绪构建的囚牢就有了第一道光。那下面的问题谁能答复呢? 没有人,没有人能答复这些问题,没有人可能全知全能,掐指一算,就能晓得前后过来五百年。所以咱们须要明确咱们是没有资格审判本人的,咱们须要抵赖本人的见识残缺不全,认知无限,判断有误,也就是抵赖本人不能审判本人,不能预知今天。这叫以毒攻毒,越是在情绪的低谷,人们就越偏向于审判本人,在这个时候就要有一种爱谁谁的觉醒,我又不是老天爷,凭什么说这就是世界末日。学会跟本人和解,本人并非全知全能,将审判权和掌控权交给入地,本人该做什么做什么。天塌下来了有高个子顶着,怕什么。 但情绪化是一个负面性的词汇吗? 也不齐全是,很多艺术家、文学家依附大量的情绪和感觉进行创作,少数科学家会被称之为小孩子脾气。情绪化也能带来益处,比方对世界有独特而强烈的感知,在情绪的过程中,体验到了他人没有体验的货色,并且把情绪化用于了发明,所以情绪化并非是洪水猛兽,咱们能够试着将情绪化这一部分加以利用,让情绪来丰盛你的生命,而不是带来阻碍。某种程序上,情绪治理能力齐全是人适应外界环境的后果,是人一次次人与世界,与其他人互动而无意识的调整本人的行为以获得更无效的适应能力的成绩。所以你总是情绪化,背地反映进去的问题可能是你的人格还不够成熟,心里年龄很小,还是用一种孩子气的反馈来面对世界。 对于普通人来说,要晋升治理负面情绪的能力,一个罕用好用的技巧就是增强本人对情绪的发觉意识和能力,能够在日常生活中通过记笔记的形式对本人的情绪进行发觉、命名,当情绪来长期,本人经验了什么,做出了什么行为,为什么会做出这些行为,这是一个什么样的情绪,过后本人的感触是什么,当初理智状态下再回顾那个情绪,我可能会怎么做,之后再遇到相似状况时,应该怎么做等等之类的进行记录,反思和总结。记录越具体越好,这样保持一段时间,你的情绪发觉能力、辨认能力以及应答能力都会有大幅度的进步。也能够察看他人对他人进行记录,尤其是他人的应答形式,汲取那些不好的,戒备那些好的,一段时间下来,会播种很多。 已经引以为豪的编程其实是一种工具,是一种悲痛吗?这个问题来自于知乎: 上面的是让我感觉比拟有意思的答复: 这个答复让我有感同身受的感觉,我也已经崇拜过Linus,某某编程大佬.也已经在QQ等微信技术群里探讨过一些技术问题,也被一些人气到中午睡不着,睡觉的时候还在想,本人为什么要为一个不相干的 人发脾气,何况对方态度还那么不敌对,我也常常对本人讲:你根本无法压服一个成年人。兴许是当初是刚出校园不久,对编程还是无比的酷爱,我当初也很酷爱.然而有的时候总是在放心,本人会不会35岁被干掉。 上面这个答复也让我很心动: 我父亲是一个电工,小的时候家里电器坏了,他都是本人修的,有的时候让我在旁边打着灯,这让我有种我也行的感觉。我记得有一次家里的灯泡坏了,我想起了屡次看我爸修电器的教训,感觉这个小菜一碟,那个时候家里刚好没小孩儿在家,我是没断电操作的,而后折腾了一会儿,我忽然不想弄了,就跑出去玩了。当初想想那个时候,还好没有持续折腾,持续折腾上来的,我有可能活不到明天。我那个时候还是比拟崇拜我爸爸,感觉他有超能力一样,什么都能搞好。我上大学的时候也有想法考个电工证的想法,起初想起家里那厚厚的电工书(比这个感觉还要厚一点),就有点望而生畏了,想想我爸当年还是挺致力的,看了那么多书,考了个电工证。 下面答复令我比拟心动的一点就是:"起初有了孩子,老婆嫌空调夜里温控不好,孩子容易受凉。我用Arduino连个温度传感器和红外发射器,本人写温控逻辑,为自家空调定制,热了调低,冷了调高,还思考到体感温度随工夫的变动,调优到完满符合 "。 其实我也感觉我当初住房子的空调温控不好,上半夜感觉还适合的温度,下半夜就感觉有点凉,我的想法就是让空调依据环境温度来调控,这也是我打算钻研的事件,无论如许小众,我想,我就能够做进去,这大略就是工程师的超能力吧。 写在最初情绪化一节次要看的是知乎用户nell nell在为什么人们违心沉迷在负面情绪中?的答复和daphe在如何克服过于情绪化的性情?的答复有感而发,糅合了两个答主的答复,也加了点本人的感悟。

July 31, 2021 · 1 min · jiezi

关于思考:为什么有的人可以通过独立思考改变命运但多数人却不行

01 你晓得,人与人之间,最大的差距是什么吗? 你可能想到支出、位置、经验、思维或是影响力等等。 但如果只用一个概念来囊括,那只有“确定性-不确定性”的差异。 比方有钱的人能够对明年欧洲旅行打算非常确定,而支出不稳固的人可能连下个月的出租房都无奈确定。 一个业余的健身教练十分确定一个动作是否对你某个肌肉是否无效,而你之前做这个动作时却不敢确定。 一个丰盛教训的老猎人能够对这条路是否会遇到危险非常确定,而一个年老猎人却不敢作出判断。 又或者一个高度自律的人,看待一顿火锅引诱的自控力比拟确定;而一个刚开始筹备减肥的人,很难对他的自控力有十足把握。 总之,更厉害的人,其实就是比普通人在某个畛域更确定很多。 而咱们的毕生,自身也是一个一直谋求“把不确定性变成确定”的过程。比方具体读北大还是清华?女朋友是美的那个还是无能的那个?具体找一份什么样的工作?孩子是女儿还是男孩等等。。。人生充斥了各种问题期待咱们解锁。 但为什么,那些更厉害的人,总比咱们更早更多地确定问题呢? 02 答案很简略,在“不确定”转化成“确定”的那一瞬间,决定因素就起源你那个与生俱来的天才-思考(thinking)。 但少数人却不太热衷应用这个天才。罗素曾说,少数人宁愿死都不违心思考。 咱们身边总有些人,能够称作“头脑空空者”(Mr.Eraser),你能够了解他们很多思维感觉被橡皮擦擦掉了,他们不习惯思考当下,也更少去思考将来。 比方大家都相熟的阿甘,他说生存就像巧克力,永远不晓得下一颗是什么滋味,只顾埋头向前跑就行。 但我认为,这却是一种聪慧的生存形式,他们始终遵循着老本最优准则,生存始终都是绝对确定的。 因为人生的将来反正是不确定的,所以他们把当初的日子过好就行,他们是“当初确定-未来不确定”。 然而身边有越来越多人,终日想法泛滥,但大多时候只是提一些口号。他们永远只有三分钟激情,我身边有许多常常跳槽的人,或者一直更换兴趣爱好又常常放弃的人,都是这样的人。 他们习惯把原有确定的生存搞得一团糟,能够称作“沉默寡言者”(Mr.talker)。 这样的人,是最不靠谱的人,比方鲁迅笔下的阿Q,搞不定所有事,还给本人找许多理由。他们是“当初不确定-未来不确定”。 正是因为生存中有大量Mr.talker存在,咱们才对思考(thinking)这件事产生误解,总是感觉有太多想法的人不靠谱。 思考必定是有用的,但须要把问题想透了才有用。社会上少之又少的一部分人才能做到这一点,“独立思考者”(Shaper)。 美国文化专门把这种人叫Shaper,大略是指一种有远大目标,同时也有清晰可执行打算,每天也如修行者个别继续激情去做的人。 比方乔布斯就是一名Shaper,他能够先构想一个平凡的产品,而后一步一步做进去。硅谷钢铁侠埃隆·马斯克也是一名教科书式的Shaper。 当然生存中也有多数人也是Shaper,比方有的人旅行世界,他们十分确定本人的人生须要什么; 或者有的人在本人岗位上脚踏实地,一直摸索工作自身,比方寿司之神,终成一代匠人。 03 如何成为“独立思考者” 隔着屏幕我都晓得,你必定想当一名Shaper,因为他们看上去十分酷。 但实际上,每一个人都会有“头脑空空”,“沉默寡言”和”独立思考“的时候,只是咱们“独立思考”的练习还不够多,不敢对本人的人生重大事件应用这个技能而已。 对于独立思考的练习,其实也没有设想中那么难。许多反而是一些很简略的技巧,只是少数人疏忽了而已。 这篇文章次要说三个方面,我把它形象化为“逃离原始部落”,假如你误入一个原始部落,你该如何逃离,从而建设真正的独立思维呢? 1、“峡谷上的木桥”,假如原始人部落的惟一进口是大峡谷上的一座木桥,而你必须做的,就是找到木桥并跑过来。这是第一步,找到“枢纽节点”。 2、“逃生地图”,通过木桥跨过峡谷后,对面是一片丛林,这时候逃生地图就是要害。这是第二步,成为“事实主义者”。 3、“湍急的河流”,丛林中有一条湍急的河流,顺着河流飘下你能力彻底逃脱。在河流中,静止轨迹都是绝对的,这是第三步,你须要找到“参考坐标”。 04“峡谷上的木桥”-找到枢纽节点** 如果原始部落对外惟一的进口是峡谷上的一座木桥,毫无疑问,你必须通过那里,能力彻底逃出去。 实在社会也同样如此,通常状况下,你和家人、同学、共事随机组成了绝对关闭的社交圈。 如图,大部分普通人在微小的社会网络里被称为“随机节点”,他们的生存干燥反复,相互之间也没有太多有建设性的信息。 而一个个社交圈之间,起链接角色的称之为“枢纽节点”,就像峡谷上木桥的作用是一样。“枢纽节点”往往是社交达人,或把握了许多资源的一些组织或平台。比方淘宝是全中国百货与消费者之间的“枢纽节点”,而一个茶馆老板可能是整个街区的“枢纽节点”。他们往往把握的信息,超过整个区域的80%以上。 如果你在某方面想有所扭转,那第一步就须要找到这个“枢纽节点”。 比方找工作这件事,少数人都是间接做个简历就去面试。 而寰球最顶级的HR会这样倡议:对简历的筹备工夫不要超过10%,而剩下的90%,应该一直去和对你面试无利的人脉进行接触。 有个美国刚毕业的女生,从小性情比拟外向。毕业后去了一个日本的海岛上过了一年与世隔绝的生存,但起初她感觉这种生存过腻了,又回到美国找工作。 但因为性情比拟关闭,很长时间内没有找到工作,她显得十分丧气。 最近她看到一条NIKE的招聘信息,她的弟弟倡议在校友网上问问状况。 后果她收到十几条信息,包含其中让她应聘胜利的外围信息——一个NIKE高管(已经的学长)让她肯定要遵循NIKE共性文化(展示日本海岛生存经验)。 兴许你认为,这不是在讲“独立思维”吗?怎么变成了搞关系了,但这就是“独立思维”的最实在法令,大量信息才是决定你思维的根底。而这个世界往往最无效和最实在的信息,都在“枢纽节点”那里。 再说明确点,比方你想守业开一家餐馆,难道首先不是要找你开餐馆的敌人么?而他能够帮你提供装修倡议,各种食材供货商、广告商、线上平台的资源等等。他可能提供的,肯定比你本人瞎琢磨有用很多。 05 “逃生地图”-成为事实主义者 在丛林的生存法令是,所有以事实为主。 如果你在城市街区问路,很多人给你指方向,都是说“你应该向左或向右多少多少”,这更多是站在他们本人的立场,如果路况简单,你没走几步就晕了。 而在丛林却是,“你应该向正东方向走150米,而后向西北方向25°走200米”。 以事实为主,这是最简略的人类认知法令,但咱们却很难做好。 斯多葛派哲学曾把人类心智模式的成长,分为三个阶段: 1、二元论(Dualism),这种人的状态保持非黑即白的准则,“要么你是坏蛋,否则就是好人。” 2、相对主义(Relativism),可能看到事物的两面,能够做到容纳和了解。 3、事实主义(Realism),对任何事件的意识,都是一直凑近假相的过程。 ...

August 5, 2020 · 1 min · jiezi

Design-Review-架构规范

Design Review 是 TTM 过程中至关重要的一环,优秀的 Design review 不但能让技术方案的考虑更加周全,更多意义是避免潜在的线上 Bug 以及不必要的反复。 下面是我经常思考的一些问题,虽然不是每个项目都会涉及到这些点,而且也不应该被这些问题所局限,但作为一个参考,依然希望能给团队提供一个好的思考框架。 可用性外部依赖有哪些?如果这些外部依赖崩溃了我们有什么处理措施?我们 SLA 是什么?主要是指可用性目标几个 9? 50/90/99 分位数的响应时间是多少?QPS 是多少?我们的超时、重试、过载保护、服务降级机制是什么?如何避免雪崩我们的调用方有哪些?分别有什么服务配额?是否需要对关键的服务调用方单独部署?运维我们都有配置了哪些监控?如果出现问题,我们需要查看哪些信息?这些信息是否都有记录?报警的处理流程是什么?系统上线流程和步骤是什么,出了问题后是否可以回滚,以及怎么回滚?安全XSS,CSRF,SQL 注入这些是否需要处理?3 防怎么搞:防抓,防 DDOS,防恶意访问是否有请安全团队 review是否有风控的需求?信息存储时是否设计到密码、信用卡、身份证等敏感信息,这些信息是怎么存储和访问的?扩展性分层,分模块怎么拆分比较合理?拆分出来的模块可以搞成服务单独部署吗?应用层可以水平扩展吗?有用 session 吗?可以去掉 session 吗?如果系统的负载提升到以前的 3 到 10 倍,当前系统是否依然可用存储层面如果需要扩展存储怎么做?系统中有哪些上下依赖的节点 / 系统 / 服务?这些依赖是否会导致无法并行开发?能否去掉这些依赖?是否有数据访问 API? 数据 API 的设计对性能的考虑是什么?数据 API 对异常数据 (超大数据集、空数据集、错误数据、schema 异常...) 的处理是什么?存储数据计划怎么存储?会有可能的性能瓶颈吗?需要考虑一些缓存方案吗?有什么复杂 SQL 可能会导致慢查询吗?数据库的操作什么地方用了事务?什么情况会导致锁竞争?我们的锁策略是什么?一致性和可用性如何平衡?未来如果分库分表会有什么影响?缓存失效会有什么影响?缓存大量失效会有什么影响?冷启动有问题吗?有热点数据吗?多个缓存节点需要权衡可用性和一致性吗?存储时,是否需要分库,分表,选择的理由是什么?技术选型开发语言是什么,框架是什么为什么用他们?缓存用什么(tair/medis/redis/memached),web server 用什么?(nginx+php fpm/ apach php 扩展/jetty/tomcat/jboss),消息队列用什么 (rebbitmq/beanstalk/kafka/mafka/metaq/notify)?为什么用它们?DB 是否可以用、以及用哪种 no sql (hbase/tair/mangodb/redis) 来优化?业界或者其他团队是否有处理过类似问题?他们是怎么处理的?是否可以 copy 或者借鉴?服务调用和服务治理请求同步处理还是异步队列处理比较好?服务接口的 URI 设计合理吗?可以向下兼容吗?服务间的调用协议是什么(dubbo/hsf/thrift) ?有公司标准的调用协议可以用吗(hession/protobuffer)?客户端和服务端的调用协议是什么(http/ws/私有)?有公司标准的调用协议可以用吗?有什么服务治理相关的要考虑的吗?能否接入 SLA 服务治理?业务监控正常的业务逻辑外,可能会有哪些奇葩或者恶意的操作?我们应该怎么处理?除了系统上的监控外,需要什么业务维度的监控吗?log 是怎么记的?如果要 debug 能有什么开关迅速打开吗?log 怎么 rotate?log 会影响性能吗?复用项目中有用什么新技术吗?为什么要用新技术?未来其他人接手容易吗?项目中有什么复杂计算的地方吗?这些计算可以用什么算法优化吗?这个项目可以抽象出来什么可以复用的东西吗?项目中的什么可以不用自己做,调用现成服务吗?测试新的系统设计是否容易独立测试兼容性新的系统是否和已有系统冲突,怎么融进去

June 24, 2019 · 1 min · jiezi

面试的一些思考

写在前面在一个小时内对一个人做出 yes or no 的判断,是一件复杂的工程 —— 信息的输入、消化、整合、再输出都要在面对面的形态下,实时密集的进行;同时,信息的不对称也增加了我们的沟通成本,不时伴随着困惑与纠结。技术面试确实容易在很多方面出现问题,本文基于自己在面试经验所成,不妨一看。 一些容易被忽视的原则首先,面试是一个双向选择的过程。从面试角度来讲,考察候选人的时候看的是这个人,而反过来候选人看面试官看到的是一个公司的形象代表,所以作为面试官,主要目标应该有两个:一是尽可能深入地了解候选人,二是需要向候选人展示我司形象。(面试官行为规范) 其次,切忌和候选人比拼知识技能。一方面知识技能和每个人的经历关系很大,我们很难找到完全匹配当前工作的候选人,考察注重的应该是候选人的学习能力,另外一方面展示面试官的自身技能并非面试的目的。 最后,我们要找的是合作者、未来的同事。一方面在面试过程中,候选人陷入困局的时候不妨点拨他一下,想想自己团队如果有个同学搞不定问题时你会怎么做?另外一方面在最终决定要不要通过时如果犹豫不决,一定需要问自己一个问题,那就是如果这个人成为你的同事,你是不是很愿意和他在一个团队并肩作战? 面试前的准备以及开场首先,面试前最好能够阅读一下候选人的简历,了解一些基本信息,发现一些有待澄清的疑问点,以及可能的兴趣点。 其次,面试开场白主要是让候选人进入面试的状态,所以简单寒暄几句就好,不建议让他完整地介绍人生旅程,或者重复简历上已有的内容,否则就是在浪费时间。 最后,面试的同时可以及时的备注面试者的回答信息,方便后续面试官的信息同步和决策判断。(面试官评价模版) 工程的面试问题一、询问过去工作中碰到过的一个项目或者解决过的问题尽可能按照 STAR (Situation, Task, Action, Result) 的技巧来组织对话,了解问题背后的信息,候选人本人的贡献,以及反映出来的能力。 通常来说这个问题我习惯放在最前面,因为对于这类问题候选人比较熟悉,回答的时候不会过于紧张。另外可以通过这个问题引出后续的一些具体的技术问题。 这个问题可以有很多变形,比如你做过的失败的项目是什么,最成功的项目,最难的项目,印象深刻的项目等等,提问的时候要考虑候选人对于回答的内容记忆是否是比较清楚的,这样有助于挖出很多细节的信息。 对于候选人的回答,需要判断其语言的信息量,如果形容词比较多,比如做得很好,客户反应不错之类的回答,应该要求其给出明确的描述,到底好在什么地方,有没有明确的内容和数据,而不是含糊的形容一下。通常如果一个工程师在得到明确提示的情况下还是不能切换陈述事实的方式,那么我基本上可以认为这个人对于平常的工作是缺乏理性思考的。 二、根据简历 / 背景询问关于某个具体的知识点的细节算法编程题算法或者代码编程题阶段,要注意候选人的思考过程,可以让他自己说说自己解题的思路,计算的复杂度,潜在的问题和局限性,以及解决的方案等等。(Coding 标准) 设计问题比如设计一个开放平台系统,一个在线购物网站等等。可以要求画出模块图,给出关键的 API 的定义或者类和类之间的关系。 注意这类问题需要提前准备,注意不要选择脑筋急转弯的问题,而应该是大家能理解的实际可能碰到的问题,另外就是不要一上来把问题全部解释清楚,因为你需要看看候选人能否主动来了解产品需求(产品往往不会把所有需求说清楚)。另外一个需要注意的是这类问题可以很容易改变或者新增需求,所以可以考察候选人的方案如何适应变化的需求。 发散的面试问题关于 * 你怎么看这一类问题一般是没有明确的答案的,主要考察候选人是否有自己的理解,比如可以问候选人对于一些常见的编程和软件工程理念的看法,DDD、OOP、SOA、设计模式、微服务等等,来看看候选人平常对于这些问题是否有思考和总结,也可以是对于最近的一些技术热点的关注,等等。 不要期望这类问题的回答是不是和自己的观点一致,如果不一致的时候也不要想着和候选人争论,而是应该引导候选人完成地表述自己的逻辑,了解其观点背后的内容,考察候选人对于概念的理解和实践的程度,看看候选人是否有比较严密的能够自圆其说的逻辑。 你的朋友或者同事是怎么评价你的注意这个问题其实是候选人自己理解到的外在对他的评价,但是还是能获得很有意思的信息,注意有时候需要深挖。深挖的时候要让候选人描述一个能符合其观点的事实,这样才能正确评估候选人实际的状态。 这个问题可以考察候选人是不是一个自省的人,能否认识到自己的长处和短处。 最近在看什么书我比较喜欢提的一个问题,看起来简单,但是能够观察候选人的学习方式和行为习惯,除了让候选人报出书名,一定需要让他讲讲这本书里面让他印象深刻的章节,以及他从中学到了什么? 工作之余做什么事情提出这个问题是观察候选人是不是真的对技术有兴趣和热情,一个工程师的业余生活也很有可能和技术有很大的关系,比如看些开源的软件、写些日常的博客等等。 应该避免的状态候选人反复在同一个问题上纠缠太久如果候选人思维陷入某个问题无法自拔,而面试官无法从沟通中获取有效信息,因为总的面试时间是有限的,所以有时候需要礼貌地打断候选人,比如说” 好的,我已经知道了,……“转移话题。 一上来就问非常困难的问题很多候选人在碰到非常困难的问题又长时间不能解决的时候会非常紧张,影响后续发挥,既然我的目的是为了寻找平常工作中的合作伙伴,通常来说没有必要把候选人弄得特别紧张。 提前太早结束即使开始几个问题候选人回答不是特别顺利,最好也能从不同的侧面考察候选人,因为可能候选人还存在其他比较优秀的方面,而且从礼貌的角度来说我也尽量尊重候选人。 陷入争执这一点一定要避免,一旦出现争执,后面的面试基本上就很难继续了,即使勉强继续下去,也无法真实地考察候选人。在可能争执的点上先放下,不要试图说服候选人,转移到其他问题上。 其他的面试技巧如何识别技术人才在我的普遍印象中,好的技术人才往往在面试开始的时候不会非常热情,但是当聊到某个具体问题的时候,可能会突然涛涛不绝地谈论从上到下的细节,同时又能在适当的时候收回来,不至于让人觉得非常不适。优秀的人往往能够从原理到实现都理解得非常透彻,既能回答具体的细节问题,又能提出自己的观点和思考总结,并且对于新的问题能够迅速给出自己的比较靠谱的思考和解释。 面试中的沟通技巧需要注意的是,在面试的过程中不仅仅要考察问题的回答,同时也要注意很多沟通技巧,比如观察对方是不是能够准确地理解问题,面对问题陈述有没有做适当的复述,有没有在没有问清楚需求的情况下就开始自顾自解答了。 候选人在回答的时候,如果偏题太远,需要通过适当的方式中断候选人的陈述。如果候选人陷入问题出不来的时候,需要给予适当的提示帮助他解答出问题以便顺利结束面试(不等于要最后放他通过)。

June 24, 2019 · 1 min · jiezi

领域驱动设计-DDD-的思考

写在前面打开 DDD 相关的书籍,你会被一系列生硬、高深的概念充斥,拜读完毕,满头雾水。这不是你的问题,而是 DDD 本身的问题,表现形式太概念化。学习它的内核,就不要被它给出的概念所迷惑,而要去思索这些概念背后所蕴含的设计原则,多问一些为什么,本质无外乎是 SOLID。最重要的,要学会运用设计原则去解决问题,而非所谓的 “设计规范”。 本文将会以系列解答的方式展开,由浅入深,篇幅不长,无妨一看。 啥是 DDD?本质上是一种方法论,提供了一套系统开发的设计方法。面对需要解决的问题,从复杂的现实中抽象出业务模型的思维方式与实践技巧。初衷是清晰设计思路,规范设计过程。 啥是驱动?DDD 强调是说得先把 “领域” 中涉及到的数据、流程、规则等都弄明白了,然后以面向对象的观点为其建立一个模型(即领域模型),而这个模型,决定了你将用什么技术、什么架构、什么平台来实现这个系统。所以技术在这个过程中是 “被动的”,是被 “选来” 实现 “领域模型” 的。对于项目的成败,技术不是决定性因素,领域模型是否符合事物的本质才是关键。 可以看出,领域驱动设计的出发点是业务导向,技术服务于业务。 我有误解?学习 DDD 有一些常见的误区。第一个要避免的就是,你必须要清楚,DDD 对于工程领域没有提出多么创新的技法,它更多是把前人在生产系统中用惯的技法归纳,总结,包装了一下。 我们来看一下 DDD 的初衷 —— DDD 抛开它晦涩的表达和术语,内核无外乎是 SOLID。书中的技法不是作者的发明创造或独门秘籍,而是当时业已存在并已在使用的做法,只不过没有被系统地加以记录 —— 换而言之,只要遵循 SOLID 的原则,这些所谓的概念技法完全可能在无意识的状态下自发出现在生产代码中。这些技法在各种大型系统被多次使用。换而言之,只要你接触足够多的代码、足够多的项目,必然会接触到这些 DDD 的实际应用。只不过在看过 DDD 一书之前,你可能意识不到这是一个成体系的设计手段。—— 如果你无法理解这样一个设计理论,看实际生产代码的应用场景是唯一真正有效的方法,毕竟设计理论本身就是从具体代码中总结出来的。即使你觉得自己懂了,抽象思维和开发经验也可能还未达到正确使用它的水平。它最大的价值在于对设计手段进行了有效的整理,形成了一个完整的系统设计规范,但过于晦涩和概念化的表述,也几乎消解了它对业界的贡献。啥时候用?你可能认为设计模式是一把 “瑞士军刀”,能够解决所有的设计问题,而实际上 “DDD 只是一把锤子”,有个谚语叫做 “如果你手里有一把锤子,那么所有的问题都变成了钉子”,如果你拿着 DDD 这把锤子到处去敲,要么东西被敲坏,要么就不起作用。 为什么说设计模式只是一把锤子呢?作者明确指出,DDD 只适合业务复杂度很大的场景,不适用于技术复杂性很大但业务领域复杂性很低的场景。可以看出,DDD 只专注一个领域,高复杂业务 —— 通过它可以为你的系统建立一个核心、稳定的领域模型,灵活、可扩展的架构。 DDD 是拥抱复杂的,拥抱变化的,但本身也是有成本有前提的;简单系统,没必要搞这么复杂,强上 DDD 就是一种反模式了。所以,当你遇到一个问题就想到 DDD 的时候,一定要注意 “DDD 只是一把锤子”,不要拿着这把锤子到处去敲! 啥是复杂?如何判断业务是否复杂,判断依据不胜繁数。在我看来,没那么复杂,就两个: 宽度:链路广度大,关注多个纬度的消息来源,覆盖了较多的业务场景深度:链路深度深,关注对象整个的生命周期,从数据创建、到变更、再到后期运维,流程运转长只要满足其中一个,我认为就是复杂的。 具体解决啥?领域驱动设计并非 “银弹”,自然也不是解决所有疑难杂症的 “灵丹妙药”。在我看来,它只解决一个问题:过度耦合。 为啥会耦合?业务初期,系统功能大都非常简单,CRUD 就能满足,此时的系统是清晰的。随着业务的不断演化,系统的频繁迭代,代码逻辑变得越来越复杂,系统也越来越冗余。模块彼此关联,谁都很难说清模块的具体功能意图是啥;修改一个功能,往往光回溯该功能需要的修改点就需要很长时间,更别提修改带来的不可预知的影响面。 ...

May 21, 2019 · 2 min · jiezi

程序人生:心中的那朵花

本博客 猫叔的博客,转载请申明出处前言3月到的时候,我的脑子中都是各种杂七杂八的预想,关于工作、生活、情感、现实等等,甚至都没来的及准备一下,2019年就已经过了2个月了,越是步入社会越是觉得时间的珍惜。有时候,想点事情,一个下午就没了,更何况现在能给我这样想事情的时间也就只有周末且除去其他生活杂事。2019年过的有些乱,因为还没找到主心骨,自媒体这块倒是让我比较省心,毕竟每月固定10篇左右的更新量,说到主心骨,主要还是涉及工作与生活上的,情感这块已经有一个让我十分头大的小机灵鬼了(明喻我家吴小姐),预计今年可能会涉及教育与(广告爆款)电商行业,所以最近都在做一些效率极低的工作。先不闲聊,今天说说19年刚刚读完的第二本书,其实还不算书吧,应该是绘本,几米绘本其中的一个小作品:《我的心中每天开出一朵花》。这只是一本30分钟就可以看完的小绘本,主要都是插画与鸡汤文段,其实挺好看的,文段与插图是有关联的,起码我读完的时候心情平复许多,没有那么浮躁了。这里可能要介绍一下:几米由于书中章节多达126个,我在一一看完后,二次复选了其中的几个,作为我感触较深的点,来和大家分享一下,希望能让大家在3月可以调整好心态,继续奋斗或者不再迷茫。“未必”首章其实就已经激发了我读下去的欲望,恰如文中说到的:“一个人是无法抵挡所有事情的,有时候一朵云的阴影,也会令人窒息。你能做到的,我未必能做到”。这其实是一句很普通的话,但是其实很多人在人生阅历中都会经历这样一个阶段,什么事都自己扛着,什么话都不说出来,自己一个人悲愤的看着整个世界,想要去做所有的事情,将自己孤立。其实我经常会处于这样的阶段,我是一个自我主义极强的人,就如我在GitHub上的昵称一样(甚至是用了几年的微信ID):MySelf。我经常容易在接触到一件新的事情的时候,把全部事情都自己一个人处理,但其实这是一个缺点,学会了解自己优缺点并分担给身边的人,其实是最高效的,甚至他们会给你一些非常棒的建议。虽然80%的情况下,吴小姐都是现实主义的打击我……“希望井”这是我最想对刚学编程的小白或者刚入职场的同行说的话,“掉落深井,我大声呼喊,等待救援…….天黑了,黯然低头,才发现水面满是闪烁的星光”。无论什么时候,都请你一定要坚持下去,对于最伟大的成功,它的前一秒甚至更久一定是无数的错误与失败。BUG在所难免,但是单元测试一定会成功,细心观察,反复推敲,我想你也是一个极富创造力的程序员。“我总在最深的绝望里,遇见最美丽的惊喜”“两难”这个点其实一开始是没打算写的,不过后来想了想,我也曾面临这样的情况,可我更希望在你面临进退两难的时候,不要将选择权交给天地,什么听天由命。请你不要等待,不要侥幸,请考虑清楚,并选择你的决定,无论结果如何,你将的人生将有更多的时间去面对下一个选择,而不用在这一个上耗费过多的时间。“梦想·现实·遥望”这是两个章节的内容,不过我觉得合在一起也无妨。很多人都有梦想,我想你一定有过许多个梦想,但是有时候在梦想里待久了,也会怀念一下学校门口的小吃、猫咪的酣睡……“我进入梦想,怀念现实,真好。”最近吴小姐经常说要去旅游的话,直到我看到这段话后,我突然觉得成年人的生活应该更加多姿多彩,所以今天又陪她出去逛街,吃吃吃。“旅行的欲望,又蠢蠢欲动。我安慰自己,那只不过像是一只被线绑住的小鸟。短暂高飞,胡冲乱撞,精疲力竭后又无奈地回到牢笼的荒唐过程。”但是我们应该热爱生活,如果完全在牢笼里面束缚着,那这样的人生不都是一个风景吗?我暗自许诺以后每年都尽量带吴小姐出去逛逛。“我望着遥远天空。苦笑。叹息。”“究竟”这是也是一个值得深思的问题,我大学学习机械专业,逃课自学IT,从C#到Java,大四开学立马出去找实习,不断学习,搭建自己的网站,做项目,向公司厉害的大牛学习,一个人住自己做吃的,和公司高层跳槽创业,继续自学,买过线上课程,考过国考计算机,创业失败,入职国企,期间面试两次阿里,还在学习,做自媒体,写文章,GitHub做开源项目……很多人说我年轻有为,学习能力强,可是现在的我已经忘记了,我当初究竟为什么要自学IT,我为什么要选择Java,我刚开始自学一年的那些日子,究竟是什么原因让我走下去的?“我忽然忘记,这么做我究竟是为了什么?”“命运”这一段我不深入讲,感觉还没有那个资格。我只是摘抄下来。“饱满华美的气球,可能有三种不同的命运:”“一、飘到天空,最后不知去向。”“二、突然爆破,无可挽回。”“三、安静地存在,然后慢慢慢慢慢慢地萎缩。”“饱满华美的人生,同样也是如此。”“有效期限”“一艘小纸船,悠悠飘过来,吸饱水分,渐渐沉没。”“世界所有的美好,都有有效期限。”希望你在你的程序人生中,能将一个美好的有效期限增大,这取决于你对他的期望值,还有就是去发现属于你的美好。结语3月的鸡汤,你喝下去了吗?还请细细品味!要多读书,这是我步入社会后最紧急的任务,也是我经常向吴小姐重复的,虽然她今天依旧满不在意的打开了她的腾讯欢乐麻将,且还真的胡了几把~公众号:Java猫说现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。

March 4, 2019 · 1 min · jiezi

突破自己的技术思维

摘要: 不要沉迷于技术。原文:突破自己的技术思维公众号:歪脖贰点零Fundebug经授权转载,版权归原作者所有。想了很久,迟迟没形成文章,但又总感觉少点什么,经过跟朋友交流、阅读、小范围讨论等等,思路开阔不少,这才把这两年来心得体会写下分享出来。什么是技术思维,我个人的理解是行事大多从技术出发看问题或是仅专注技术提升,忽视其它事物的发展的比较固定的思考问题的方式。举几个最平易近人的例子:在需求评审会上,有多少人在讨论技术实现细节问题?在对外合作交流会上,有多少人在说一些对方听起来比较晦涩的技术名词?有些场景技术实现相当繁琐,ROI不成比例,很多人陷入其中。但可以通过简单的制度约束,达成目标。将所有的精力花在技术语言、框架学习上,以为掌握了这些就可以独步天下,赢得未来,反而跟人打交道上火候不足?可以花很多时间来解决一个难题,但被追求心仪的姑娘拒绝过一次后反而不能越挫越勇?跟自己收入差不多的朋友,已经源源不断的被动收入,自己还在月光?一个很简单的技术,有人能将其应用在生活中获得不错的收益,而放在自己里只能等到合适的项目才能用的上,拿一份工资?……长期受技术思维影响的人在往上走的过程中,很容易碰到天花板,遇到职业发展的瓶颈,只能在技术圈子里打转,跳不出来。技术思维就像往一个瓶子里装水,提升技能只是为了将这个瓶子装的更满,忽略了瓶子外还有更广阔的空间。将一个瓶子丢到湖中,如何才能更快的装满水呢?不是将瓶口朝上,一副死撑到底的样子,而是适当倾斜瓶口,融入到湖水中才能更快的装进去水。湖水就是外面的世界,瓶子就是我们自己,瓶中空间就是自己的容量。手里拿着锤子,看什么都像钉子。就像自己只掌握了Java一种语言,不管做什么产品都只考虑Java,很明显不是明智之举。这是技术语言的局限性,将适合的技术应用到的合适的项目场景中解决具体的问题才能发挥最大的优势,也能降低成本,加快研发速度。技术思维更多的体现在对技术的专注,但对其他的事物缺乏关注。在创业这件事上,不少技术人表现的比较突出,因为创业要求个人方方面面的技能,如营销、招聘、管理、财务、市场、融资等等,虽然合伙人制度可以弥补一部分欠缺,但如果自身能掌握更多的技能,再结合技术,才能发挥更大的作用,不然就会对合伙人形成依赖,缺失自已对事情的预判。不幸的是不少小伙伴醉心于产品研发,一心要提供完美的软件给用户,结果也显而易见:推向市场,却反馈平平(对市场痛点把握不足);在市场反馈不佳时,不能及时调转方向,有时候坚守初心也很危险;等要推向市场时,发现研研发经费耗尽了公司储备,没钱做营销(过分专注技术而忽视产品的推广)。不是人人都可以学Jobs来创造需求。我们也会经常看到懂技术商业思维又比较活跃的朋友,能轻松的将技术变现,姑且不论变现程度有多高。比如做付费社群、软件开源高级服务付费、提供职业规划指导、写专栏、做收费视频课程、带徒弟等等,这已经将技术自身的价值提高了一个台阶,提高了反脆弱性。参考之前的一篇文章《技术人要懂商业》。在工作中技术依附于业务、又反哺于业务来产生价值,同时事物管理又将组织、流程很好的协作起来保证价值的产出。技术在不同的阶段具有的价值也是不一样的,所以就要求我们适当的评判技术价值,跳出技术思维局限,将眼光着眼于整个产品的生命周期中,提高技术外的技能才能将产品做的更好。对于个人,技术迭代无穷尽,在追逐技术升级的道路上肯定是要落伍的,只有一小部分人能潜心修炼成为技术专家,作为大部分人可以将技术作为工具应用到实际的生活场景中,解决身边实际的问题,不能落地,再牛的技术都是空中楼阁。人的成长,无非还是认知、心智的成长,眼界提高了,关注的东西自然会发生变化,正确对待技术,同时扩展技术外的视野,警惕技术陷阱,才能更好的利用技术。我刚上路,转变势在必行。关于FundebugFundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了6亿+错误事件,得到了Google、360、金山软件等众多知名用户的认可。欢迎免费试用!

February 26, 2019 · 1 min · jiezi

未来你是CTO还是架构师?

春节就要到了,每到年末就非常适合总结、反思,思考过去一年的成长(就),过去一年的收获,过去一年的改变,所以接下来两三周的时间,我想给大家分享一些技术以外的思考。这次先跟大家分享关于未来的思考,职业目标和规划决定了你以后的职业高度、职业角色,你本来想成架构师、技术VP、CTO,结果就是没有了结果。后面可能分享理财和读书等方面的思考,因为技术人,首先是一个人,那必然就有生活,生活就需要money,你不理财,最后只能一穷二白,辛辛苦苦一年的劳动,可能所剩无几,甚至负数了,几年后别人过着舒服的生活了,而你还在苦逼的挤公交、地铁。读书是获取知识最廉价的方式,知识改变命运不是闹着玩的,读大学没用这些言论是扯淡的,你看那些CEO、CTO,或者你身边的非常牛的人,哪个不读书?如果你不喜欢读书,大概是心里没有目标,没有找到自己喜欢的书。预告到此打住,如果希望读到理财和读书的文章的话,在春节期间,记得关注文章推送,不妨给一起学Golang加星标。技术人有哪些角色/岗位?技术人常说自己是靠手艺、靠技术吃饭的,最初只是开发/测试/运维工程师,后面一路打怪升级,经历高级、资深工程师到达首席架构师、技术总监、技术VP、CTO,这些顶级的技术角色,哪些才是你的未来?如果你热爱技术,愿意靠技术生活,或者立志使用技术改变世界,你可能就会走到上面列出的技术岗位,你是否想过你的未来在哪?如果你想到了,你是否了解这些不同岗位的区别,以及需要的能力?架构师架构师是一个公司的核心技术人员,是公司技术团队中的技术佼佼者,对架构师主要要求是技术能力。如果你喜欢深入研究技术,架构师就是你很好的目标。首席架构师首席架构师应当是公司技术最牛的人,但同时是公司所有架构师的管理人,需要有一定的人员管理能力,所以首席架构师的主要能力栈是:技术能力人员管理能力如果你深入研究技术,能用技术解决公司遇到的业务难题,还具备一些人员管理能力,不妨在成为架构师后,将目标再提升1个level,成为公司首席架构师。技术总监技术总监这个岗位,一般在大、中公司才有,它是技术和管理能力比较均衡的1个岗位,技术上不如某些架构师、首席架构师,但管理能力要比架构师高,它的主要能力栈和架构师相同:技术能力人员管理能力如果在技术圈摸爬滚打了一段时间,发现自己擅长沟通、上下级管理、员工心理、决策能力强,也许你的目标可以设定为技术经理或技术总监。技术VP技术VP(副总裁)更是公司规模比较大时才有的技术岗位,技术VP是CTO的副手,公司只有1个CTO,但通常有多个技术VP,负责公司不同业务的技术,技术VP管着多个技术总监。技术VP也是技术出身,但比技术总监高一个level,除了技术能力和人员管理能力外,还要求技术VP有很强的体系搭建能力,体系搭建是一个很复杂的能力,总结来讲就是要管事的能力,比如要管理研发质量、进度、节奏、人员等等。技术总监的主要能力栈:技术能力人员管理能力体系搭建能力如果你发现自己技术够牛,也能带人,还能管事,技术VP绝对会是一个非常好的目标,但是你估计头都大了,怎么要管这么多????。CTO只要带O的都很了不起,想想CEO、COO、CFO等等,CTO是一个公司的直接技术负责人,出了问题CEO可是要拿CTO是问的,而不是那群技术VP,CTO要和各种O沟通,要让整个技术团队,用技术把产品做出来,跟上业务的脚步。CTO是个多面手,他的主要能力栈:很强的技术能力,尤其在创业早起,必须撸起袖子带所有人一起干,但是CTO的技术不能是最牛的,公司稳定后,他需要分配更多的精力负责技术团队的各项事务,如果CTO技术是最牛的,他必然是整个技术团队的瓶颈。很强的体系建设能力,虽然hold的事情没有技术VP细,但各种都抓。很强的人员管理能力,然每一个技术人员,尤其是技术管理人员发挥十倍、百倍的能力,建设强大的团队。很强的文化建设能力,公司大了,公司的技术文化,决定了员工在没有管理时的状态,是游手好闲,还是聚焦工作。很强的领导力,易观CTO郭炜给领导力一个通俗易懂的解释,把事办成的能力,就是从0到1的能力,公司需要的是完整可用的产品,最后只做到了0.99都不是完整的产品。如果你立志要成为一个CTO,那你要充分利用时间,跟时间赛跑,不断的学习/迭代各种能力。关于领导力,我根据郭炜的描述,做了一个导图,把一个大的、复杂的能力拆解,感觉目标就清晰了。根据领导力300讲文章《技术领导力就是“成事”的能力》制作也许我上面的文章不一定准确,甚至有些地方不一定对,但这不重要,重要的是你如果还没有职业目标和职业规划,反思一下你是否喜欢技术,是否希望在技术上长期发展?如果答案是肯定的,你应当为自己负责,设定一个目标和一个实现目标的计划。附录如何找到自己的兴趣和能力兴趣、能力和我们的职业目标有什么关系?关系大了去了。你不喜欢coding,就写不出高质量的代码,你不喜欢钻研技术,就成不了架构师,你不喜欢业务,就无法成为技术管理者,你不喜欢“事多”就成不了技术VP、CTO。基于自己的兴趣和能力,设定最适合自己的目标,这样才能让目标实现。But很多人都有一个特(问)点(题),不了解自己。你问他“你喜欢做什么?”,通常哑口无言,啥也说出来。那我教你,如何发现自己的兴趣或者能力。把下面这几个问题问自己,每个思考5分钟,如果第一个没有答案,就看下一个:我擅长做什么?我得到表扬的工作是什么?我最经常做的是什么?在你过去1年的工作中,我做的最好的3件事是什么?如果第4个还没有答案,我建议你给自己一段时间,了解自己,从今天开始写成功日记,每天写一个,记录自己今天做的好的事情,不论工作还是生活。每月回顾过去的成功日记,其中写的最多的就是你的特长,也许你一两个月就发现自己擅长的事情,也许要半年,也许要1年,但终究你能发现自己的能力,那时你会更加自信。文章不精,希望你有所收获。写在最后其实,我对自己的了解还不够深入,这是我必须坦诚的。但我们对自己的了解程度,和对世界的认知,这种“内在”的认知,会通过我们日常的行为映射出来,体现在我们的待人接物,同样也会决定着我们人生的高度、工作的高度。想让自己的思想和视野站上一个更高的高度,我购买了极客时间《技术领导力300讲》这个课程,听、读了很多CEO、CTO等的观点后,想输出下,这篇文章的主要内容是我读郭炜的《你的能力模型决定你的职位》这篇文章“贩卖”出来的,不如原文好,为了避免广告嫌疑,我不在此放分享链接了。真心想读的朋友,可以后台私信,我发给你。极客时间分享的文章最多能被10个人阅读,所以只发给前10个留言的朋友。如果这篇文章对你有帮助,请点个赞/喜欢,感谢。本文作者:大彬如果喜欢本文,随意转载,但请保留此原文链接:http://lessisbetter.site/2019/01/27/choose-your-career/

January 27, 2019 · 1 min · jiezi

chrome弹窗在双屏情况下left居中定位异常分析

背景使用 window.open 进行弹窗显示,实现微信二维码弹窗功能在双屏情况下,chrome浏览器位于副屏弹窗时,会存在弹窗位置异常问题。目前网上相关解析及解决方案几乎没有,故写此文章以作分享。文章重点双屏情况下,chrome浏览器弹窗位置问题多屏幕时,chrome浏览器位于非主屏进行弹窗显示时,设置弹窗的left,top将会异常本文将分析其显示异常的原因,并给出解决方案解决该问题的分析过程这是本文分享的另一个重点除了解决方案,希望能通过本文和大家分享笔者解决该问题时的思路和方法。这些方法可能不是最优的,但希望能给大家带来一点触动或者启示。在解决到其他问题的时候也用得上。window.open的第三个参数及其兼容性介绍window.open方法相信大家都不会陌生,通常用于传递一个地址参数,新建一个浏览器tab页面。但除了第一个地址参数,window.open还另外接收两个参数,分别是「strWindowName(新窗口的名称)」,「strWindowFeatures(新窗口特性)」这强调的是第三个参数,当设置了第三个参数后,新开的弹窗将会在原页面的基础上,已非tab页面的形式进行显示,有以下几个特点在原页面上进行弹窗显示,而不是新起浏览器tab页面进行跳转。其显示方式类似alert弹窗,属于原页面的一个功能模块,而不是跳转至新页面。非tab页面,这意味着它不像其他tab页面那样可以放在浏览器tab栏中,它是折叠不进去了,是以弹窗的形式呈现。第三个参数「strWindowFeatures」可以设置新窗口特性,例如宽度,高度,距顶,距左,是否显示滚动条等等。本文不做详细介绍,参数详情可以参考这篇文章需要注意的是,strWindowFeatures里的特效并不是每个浏览器都支持的,不同于「dom」,这属于「bom(borwser Object Model)」的内容。具体兼容性这里也不讲了,网上也有相关文章chrome的兼容性与坑(重点一)异常的显示即使看完上面的兼容性文章,当你使用chrome浏览器,位于非主屏进行弹窗时,依然会存在位置设置异常的问题。实现居中显示弹窗,一般代码会这样写const windowWidth = window.screen.width // 屏幕宽度const windowHeight = window.screen.height // 屏幕高度const pageWidth = 600 // 弹出窗口的宽度const pageHeight = 550 // 弹出窗口的高度let pageTop = (windowHeight - pageHeight) / 2 // 窗口的垂直位置let pageLeft = (windowWidth - pageWidth) / 2 // 窗口的水平位置;window.open(‘xxx’, ‘xxx’, width=${pageWidth},height=${pageHeight},top=${pageTop},left=${pageLeft}) // 实现居中弹窗这段代码在主屏幕显示没有问题,可以居中显示,但如果将页面移换到副屏幕进行弹窗时。你会发现,无论参数怎么设置,弹窗都会在屏幕最左侧或屏幕最右侧进行显示,并不是水平居中。点击这里查看示例异常的原因及其解决方案原因可能很多同学都难以想到,这是因为弹窗的left和top参数,并不是基于当前页面作为原点进行计算的,而是以主屏幕作为原点进行计算所以进行位置设置时,需要计算其基于主屏幕的偏移值。那怎么知道当前是否处于主屏幕上呢?可以通过window.screen.availLeft参数来解决,该参数返回浏览器可用空间左边距离屏幕(系统桌面)左边界的距离。通过该参数,甚至不需要知道目前处于哪个屏幕上,直接加上该参数即可基于当前屏幕进行定位。修改后的代码如下const { availLeft, // 返回浏览器可用空间左边距离屏幕(系统桌面)左边界的距离。 availHeight, // 浏览器在显示屏上的可用高度,即当前屏幕高度 availWidth, // 浏览器在显示屏上的可用宽度,即当前屏幕宽度} = window.screenconst pageWidth = 600 // 弹出窗口的宽度const pageHeight = 550 // 弹出窗口的高度let pageTop = (availHeight - pageHeight) / 2 // 窗口的垂直位置let pageLeft = (availWidth - pageWidth) / 2 // 窗口的水平位置;left += availLeft // 加上屏幕偏移值window.open(‘xxx’, ‘xxx’, width=${pageWidth},height=${pageHeight},top=${pageTop},left=${pageLeft}) // 实现居中弹窗「top」参数的设置同样存在这个问题如果主屏幕和副屏幕并不是处于相同的高度,「top」值的设置同样会由于距系统主屏幕定位,而发生定位异常的显示。看下面这张图可能更好地理解另外目前笔者发现,这个兼容性问题,仅会在chrome内核的浏览器存在,safari上运行是不存在该问题的。综上所述,得出最终的解决方案为const { availTop, // 返回浏览器可用空间左边距离屏幕(系统桌面)左边界的距离。 availLeft, // 返回浏览器可用空间左边距离屏幕(系统桌面)左边界的距离。 availHeight, // 浏览器在显示屏上的可用高度,即当前屏幕高度 availWidth, // 浏览器在显示屏上的可用宽度,即当前屏幕宽度} = window.screenconst pageWidth = 600 // 弹出窗口的宽度const pageHeight = 550 // 弹出窗口的高度let pageTop = (availHeight - pageHeight) / 2 // 窗口的垂直位置let pageLeft = (availWidth - pageWidth) / 2 // 窗口的水平位置;if (navigator.userAgent.indexOf(‘Chrome’) !== -1) { // 兼容chrome的bug top += availTop // 距顶偏移值 left += availLeft // 距左偏移值}window.open(‘xxx’, ‘xxx’, width=${pageWidth},height=${pageHeight},top=${pageTop},left=${pageLeft}) // 实现居中弹窗问题解决过程(重点二)笔者遇到该问题是通过如下方式一一寻找解决方案百度最基础,成本最低的一步,笔者进行过以下关键字的搜索(这里主要突出关键字提取)window.open 居中显示window.open left chromewindow.open left 异常window.open 定位 异常window.open chrome 兼容性window.open 双屏显示异常搜索结果,找到了相关的问题,但未能找到真正有效的解决方案。问答论坛stackoverflow,国外著名的编程问答网站,纯英文,内容全。segmentfault,国内的stackoverflow,内容也不错。MDN官网维基百科:MDN Web Docs(旧称Mozilla Developer Network、Mozilla Developer Center,简称MDN)是一个汇集众多Mozilla基金会产品和网络技术开发文档的免费网站。一般可以看作前端基础函数的官方说明文档,具有一定的权威性,当然一定程度上会更为难懂其他页面代码分析寻找网上实现了该功能的网站,下载其页面代码进行分析。网上的代码都是加密过的,虽然不直观,但能推测或猜出一些端倪各关键词搜索首先,通过chrome调试工具,找到触发弹窗的按钮ctrl+s,下载整个页面,通过IDE全局搜索整个页面中关于该按钮的信息,如class,id,及其他属性值,能定位到该按钮的属性都全局搜索一遍逐文件查看,有无相关配置window.open 函数名搜索打开弹窗肯定需要通过该语句,全局搜索,如果window没被覆盖的话应该能找到第三个参数搜索根据 strWindowFeatures 可配置项目进行全局搜索,提取其特点,如「scrollbars」,「titlebar」这些变量以及其字符串形式传参的特点,搜索「,left=」「,height=」重置函数终极大招,函数重置,及通过在chrome控制台重置该函数,来观察其传参情况打开chrome控制台,找到Console栏,拷贝如下代码window.open = function () { console.log(arguments)}再此进行登录弹窗操作,触发函数执行笔者是在前三个方法都失败的情况下,通过第四个方法找到的问题所在。发现其left值传参为负数,在自己项目中设置为负数也能实现居中效果从而推测出原因感谢阅读,祝好 ...

January 23, 2019 · 1 min · jiezi