好的方法包括:
坏方法包括:
作为数据科学家,我的责任是设计和开发一个准确,有用和稳定的信用风险模型。我还需要确保其他数据科学家和业务分析师能够评估我的模型或重复相同的步骤并产生相同或类似的结果。
前段时间重读了《重构:改善代码既有设计》[1],收货颇多。于是,简单写了一篇文章来聊聊我对重构的看法。
作者 | Ravi Shankar Rajan 译者 | 苏本如,责编 | 郭芮 从自己的经历中吸收经验和教训是最有效的学习方式,但是通过借鉴他人的经验而获得知识是一种更快,更聪明的方法,它可以减轻痛苦。毕竟,生命是短暂的,你不可能在一辈子的时间里犯下所有可能的错误。 从事一份软件开发工作是掌握你的技术之旅的开始。和任何领域一样,你会面临各种挑战,你有机会做正确的事,同样你也有可能做完全错误的事。这篇文章记录了迄今为止我在软件开发的职业生涯中所犯的错误,同时也是如何避免这些错误的一本指南。 让自己
从小就对电器元件比较感兴趣吧,经常拿坏的电器里面的芯片拆下来玩,甚至那些没坏的电器,比如我家的电视,也会希望它能坏掉,我好去看看里面是什么样子的,为什么能播放节目……,所以我第一眼看到51单片机的时候,更多的是兴奋。
这些日子里,由于项目的缘故,我又双叕开始学着造轮子了。故事的开始是代码的不规范堆砌,导致软件大楼摇摇欲坠;故事的终点是,重新唤醒程序员对匠艺的追求。而故事的中间部分,则是我们所要关注的内容:代码坏味道(code smell)、包依赖合理性,应对的方案则是代码重构,目标则是 Clean Code,即易于阅读的代码。而它们(代码坏味道、重构方式等)都已经被归纳为模式。
今日洞见 文章作者/配图来自ThoughtWorks:禚娴静。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。 重构经过了十几年的发展和应用,可以说它是极限编程中程序员最爱的实践之一了,纷纷争相在项目里应用。重构工作坊、Codekata重构练习等各种提升能力的
自从2002年大学毕业后一直沉浸于软件开发之路,平时喜欢思考和归纳,时常会产生一点心得和想法,回想起来是一笔宝贵的财富,只可惜陆陆续续遗忘了。今天立此文章,希望从今以后可以记录下,以帮助自己不断地提升,同时也作为一种纪念。
彭鑫,复旦大学计算机科学技术学院副院长、教授、博士生导师。中国计算机学会(CCF)软件工程专委会副主任、CCF YOCSEF 上海2016-2017主席,上海市计算机学会青工委主任《Journal of Software: Evolution and Process》联合主编(Co-Editor)、《软件学报》编委、《Empirical Software Engineering》编委,IEEE软件维护与演化国际会议(ICSME)执委。2016年获得东软-NASAC 青年软件创新奖。主要研究方向包括代码大数据、智能化软件开发、软件维护与演化、移动计算与云计算等。 联系邮件:pengxin@fudan.edu.cn
关于技术债务的讨论时而蔓延时而消退,技术债务仿佛是个筐,什么东西都可以往里装,然而当我们企图倒光筐里东西的时候,却发现每人看到的东西都不一样,甚至有时候都数不清里面都有些什么。 作为一个半吊子全栈工匠,试图从一个老码农的视角审视一下技术债务。
经颅磁刺激 (TMS) 与脑电图 (EEG) 相结合,用于研究皮层反应性和连通性。TMS-EEG 在高时空分辨率方面有广泛应用,但存在挑战和未解决问题。不同的设备、数据收集和分析方法缺乏标准化,影响可重复性和结果比较性。此外,听觉和体感输入对TMS-EEG的影响尚存争议。这篇综述为TMS-EEG研究人员提供指导,涵盖了实验的各个方面,包括记录和分析方法。专家小组讨论了记录程序、伪影校正、分析和经颅诱发电位 (TEPs) 的解释等技术挑战。这项工作提供了广泛的TMS-EEG方法概述,有望促进实验标准化和计算程序的一致性。
Java 近期新闻综述,涉及来自 OpenJDK、JDK 19 的 JEPs、Lilliput 项目的里程碑版本、Spring Framework 5.3.20 和 5.2.22、Open Liberty 22.0.0.5 和 22.0.0.6-beta、Quarkus 2.9.0.Final、Apache Camel Quarkus 2.9.0、WildFly Preview 27 Alpha1、Hibernate Search 6.1.5、JobRunr 5.1.1、Piranha 22.5.0、Failsafe 3.2.4 等的特性,以及 Micronaut 的调查结果和 Devoxx UK 会议。
最近阅读到一篇不错的文章,包括评论部分都有不小的参考价值。于是,将文章翻译出来与大家分享,并针对部分内容添加了个人的一些看法。以下部分为正文:
本周正式回归正常的办公场所,关于远程办公和公司办公我只能说各有各的好坏,说实话我会更偏向在公司办公,后面有机会写篇文章分享下。本周继续专栏学习计划,目前已经进展到专栏的尾声了,正篇内容基本可以在这周可以搞定,这周的主题是运行维护篇,以下内容是我的总结:
对于实现一个软件应用,这不区分应用是大还是小,都有着自己的生命周期,开发者往往会不断的去迭代软件应用
简单来说git就是一个分布式的版本控制软件,直接记录快照,而非差异比较Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息(基于差异的版本控制)。Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流。
对系统架构而言,外部系统依赖往往是系统质量属性的最大风险,对软件自身也是如此。软件依赖有着严重的风险,而这些风险常常会被忽视。我们可能尚未理解有效选择和使用依赖关系的最佳实践,甚至没有理解何时选择依赖关系。本文的目的是提高对风险的认识,并尝试更多的解决方案。
这个对于现在的开发环境太真实了,在一个项目上线后,其实在开发中后期,就已经出现这样的情况
导语 最近看到有同学提问:“代码重构有意义吗?”,“关于代码重构有什么好的方法论吗?”,个人对代码重构非常感兴趣,在13年就开发接触代码重构的概念,学习相关理论方法,一直在坚持实践,现在基本已养成一种习惯了,所以周末系统梳理了重构原理、相关概念和操作技巧,抛砖引玉,跟大家分享交流。 什么是重构? Refactoring是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高其可理解性,降低其修改成本。 为什么重构? 1.改进软件的设计 《重构》里有一段话非常有启发性:“一开始我所做的重构都像这样停
各位程序老司机对重构肯定不会陌生,程序员的工作离不开重构。那么重构是已经“飞入寻常百姓家”的普通技术能力,还是看起来高大上的杀器?
要写出好代码,首先需要提升品位。 很多软件工程师写不好代码,在评审他人的代码时也看不出问题,就是因为缺乏对好代码标准的认识。 现在还有太多的软件工程师认为,代码只要可以正确执行就可以了。这是一种非常低的评价标准,很多重要的方面都被忽视了。 好代码的特性 好代码具有以下特性。 1. 鲁棒(Solid and Robust) 代码不仅要被正确执行,我们还要考虑对各种错误情况的处理,比如各种系统调用和函数调用的异常情况,系统相关组件的异常和错误。 对很多产品级的程序来说,异常和错误处理的逻辑占了很大比例。 2.
创业团队早期注重野蛮生长和快速扩展,随着人员越多,业务越复杂,涉及的技术领域越广,更需要一套完整、清晰、规范的研发协作流程。否则,就会容易陷入团队混乱、流程混乱、项目混乱、系统混乱的窘境。
敏捷不注重正确的文档 敏捷无视流程和规定 敏捷无视公司计划和目的 敏捷不注重法律程序,并且对客户不承担责任。 等等,等等。 这些都是一些企业和人对于敏捷方法最常见的抱怨。然后你会惊讶地发现,关于敏
这些都是一些企业和人对于敏捷方法最常见的抱怨。然后你会惊讶地发现,关于敏捷被抱怨最多的实际上来自于敏捷宣言(Agile Manifesto)和四个价值观点?正是这些价值观导致了大多数人的误解。
我遇到的大多数开发人员都不怎么热衷于测试。有些会去做测试,但大多数都不测试,不愿意测试,或者勉而为之。我喜欢测试,并且比起编写新的代码,愉快地花更多的时间在测试中。我认为,正是因为专注于测试,我才可以花更少的时间来编写新的代码或修复bug,并且非常有成效。
AI 科技评论按:Mekka Okereke 是谷歌的一名工程总监,主要负责 Google Play 在线商店的经营工作。不久前,他在个人推特上分享了关于技术人员应对公司工作考察的建议——从培养一个能够公正评价自己的「盟友」开始。
2021 年 12 月 9 日,该项目被曝存在 严重安全漏洞 ,攻击者只需要向目标机传入一段特殊代码,就能触发漏洞,自由地在远程执行任意代码来控制目标机器!
CrossOver2023版是在Mac上运行Win软件的最简单方法,有了它,你无须 Win许可、重新启动或使用虚拟机即可在mac上使用Win软件。CrossOver23可以轻松地从Dock本地启动Win程序。CrossOver版还集成了macOS 功能,例如跨平台复制和粘贴,以及用于Win应用程序的共享文件系统。简单的使用方式,小白用户也可以自己安装虚拟机,让用户自己在mac电脑上安装Windows系统,增加电脑的使用方式,你可以用它来办公、来玩游戏,使用方式很广泛,需要注意的是,安装多个虚拟系统,需要电脑拥有很高的配置,方可支持运行!
今天开始学习《软件工程》一书,随缘写些笔记摘抄在这里。有些内容我会根据自己的理解进行改写、转述并加入自己的看法
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通 信的架构。REST指的是一组架构约束条件和原则。” 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
来源:http://www.51testing.com 1 前言 思维导图由英国著名的心理学家东尼?博赞(Tony Buzan)创建,其在上世纪八十年代传入中国。思维导图是一种表达发散思维的图
一、 软件开发简介 软件(Software)简单的说就是那些在计算机中能看的着,但摸不着的东西,概念性的说软件也称为“软设备”,广义地说软件是指系统中的程序以及开发、使用程序所需要的所有文档的集合。软件分为系统软件和应用软件。 软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分 。 软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响 二、 软件开发的内容
今日洞见 文章作者、图片来自ThoughtWorks:熊子川。封面图片来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。 大部分项目上,我所承担的角色是帮助客户寻找到产品战略,并着手落地开始项目实施,在这个过程中,我需要强制自己迅速从发散思维中回到收敛
我平常有一个习惯,就是不断看以前写的代码,想着有没有哪些方面可以改进,如果每天能把代码可读性量变 1%,那么日积月累就是质变:前些天我们写过一次对 Makefile 的重构,去掉了一处重复代码的坏味道,没过多久我便又发现了一处重复代码的坏味道,本文就让我们看看如何消灭它!
过程中,我发现一个特别有意思的东西,我重构了很多的 if 语句。从这些 if 语句里,大抵是映射出了业务的变化。于是,我便想写一篇文章来记录一下相关的心得。
我在 1990 年代开始工作于一系列 Web 应用程序,其中第一个在我当时的工作场所内部,它为卫星图像数据的日常处理、存档和分发提供操作员界面;第二个是现在称为社交媒体的应用程序的前身,这也是我第一次使用 Apache 服务器。Apache HTTPD 2.0 的发布使我从服务器使用者变成开发者:部分原因是我需要重新实现一些现有功能,但更令人兴奋的是因为我看到服务器本身成为应用程序的强大平台的巨大潜力。这使我开始研究核心软件,并与 Apache 社区进行互动,同时发布我自己的模块和文档。2003年,我首次在 ApacheCon 做了演讲,之后的某个时间作为提交者首次被邀请进入基金会,并于2005年成为会员。从那时起,我的兴趣不仅包括 Web 服务器和相关项目,还包括 Apache 社区的发展以及其动态。我通过孵化器参与了几个项目的指导。如果你今天要问我最想实现的一个目标,那么它就是一个身份管理框架,它不仅在加密方面很强大,而且对于世界来说足够方便使用,并且可以抵御网络钓鱼等社会工程攻击。同时,它不涉及任何动机不纯的中心化权力机构(如政府)。它会终结身份欺诈和密码管理的噩梦。
自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中,几乎任一软件开发过程都需要在开发阶段的某个时候进行自动化测试,以加速回归测试的工作。自动化测试工具可以帮助测试人员以及整个团队专注于自动化工具无法处理的各自任务,但困难的部分就是选择自动化工具。事实上,测试人员最常见的问题就是,如何选择适宜的自动化测试工具?
过去的 10 年间,软件的架构发生了巨大的变化,从早先流行的单体 MVC 架构,变成现成 5:5 开的分布式 vs 单体。只是呢,有大量的软件开发人员,并没有从单体的思维转成变化。于是,我们在一个个的组织里,见到了一个又一个的 “分布式单体”。 架构治理变得非常迫切。 Why ArchGuard? 作为一个架构师或者是软件开发人员,在架构治理上,我们面对的诸多挑战有: 设计与实现不匹配。设计的软件架构与真正实施后的架构,存在着巨大的差异。而这个差异,往往需要实施一段时间之后才能发现。 代码量巨大,难以识别。
我希望它是一个简单的沟通工具。使用简单的,开发简单的私有的,或可发展成企业级的聊天系统或是组件。但是,越是看起来简单,它的内部就越复杂。这个复杂不是指它的开发难度,而是设计。
有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必须更新或下载这些无用的文件,因此, 我们需要一个方法, 永久的删除这些文件(包括该文件的历史记录).
我们在实际开发中似乎只是为了实现一个需求而去进行开发,忘记了Java本身的优势点,原来的面向对象变成似乎还是面向过程面向数据库进行编程。封装、抽象、继承、多态似乎越来越多的人被忽略,一些设计模式也是生拉硬套,根本发挥不了其真正的优势和效率,代码规范更是少有人遵循,你会发现有的人写的代码杂乱无章。这是我听了王老师的课的一些感悟,自己也记录一下,为了自己复习和让更多的人可以学习到。这篇文章下面的内容都来自极客时间王老师的课程,如有侵权,联系删除!
某次代码重构中,我发现代码的测试覆盖率很高,过程中出了一些错误,重构手法不正确是一个问题。但是在重构的过程中,发现有些测试都是没有意义的,所以我变转向开始研究测试坏味道,顺便在 Coca 中写了个识别代码测试坏味道的工具。
发现坏味道的实践,就是Code Review:对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。团队对 CR本身的理解有差异,有的团队:
大脑在自发言语回忆前的活动为记忆提取的认知过程提供了一个窗口。但是这些记录中包含了与记忆提取无关的神经信号,例如与反应相关的运动活动。本研究中,我们探究了极端记忆要求条件(被试在几秒钟或几天后进行内容回忆)下记忆提取的EEG频谱生物标志物。这种操纵方式有助于分离出与长时记忆提取相关的脑电成分。在回忆提取之前,我们观察到theta (4-8Hz)频段功率增加(+ T),alpha (8-20Hz)频段功率(-A)降低和gamma (40-128Hz)频段功率增加(+ G),这种频谱模式(+ T-A + G)区分了长延迟回忆和立即回忆的情况,我们认为频谱模式(+ T-A +G)可以作为情景记忆提取的生物标志物。
关于代码的管理问题已经讨论多年,随着企业业务的复杂度提高、软件行业技术栈的选择度变宽泛,现代软件的代码仓库也变得越来越庞大和复杂。一个中型项目,将测试代码、核心业务代码、编译构建、部署打包等基础设施的代码全部加起来,几十万行都是家常便饭。并且一个项目往往由多个团队进行协作,如何让多团队在对同一个项目的代码进行协作时不会相互干扰、相互制约,也是每个企业研发团队在实践中不断摸索的难题。 多仓库与单仓库 对于上文所说的一些问题,业界已经归纳了常见的代码仓库存放方式,常见的如单仓库和多仓库。大部分企业会针对不
关于代码的管理问题已经讨论多年,随着企业业务的复杂度提高、软件行业技术栈的选择度变宽泛,现代软件的代码仓库也变得越来越庞大和复杂。一个中型项目,将测试代码、核心业务代码、编译构建、部署打包等基础设施的代码全部加起来,几十万行都是家常便饭。并且一个项目往往由多个团队进行协作,如何让多团队在对同一个项目的代码进行协作时不会相互干扰、相互制约,也是每个企业研发团队在实践中不断摸索的难题。
本章关于开始学习 Git。 我们从介绍有关版本控制工具的一些背景知识开始,然后讲解如何在你的系统运行 Git,最后是关于如何设置 Git 开始你的工作。 通过本章的学习,你应该了解为什么 Git 这么流行,为什么你应该使用 Git 以及你应该如何设置以便使用 Git。
领取专属 10元无门槛券
手把手带您无忧上云