所以转变思路,花几天的时间思考,而不是开始任何运行,直到我对“问题是什么”的假设非常有信心为止。) 要想更多地思考,坚持做更详细的工作日志是非常重要的一环。...我初始的项目计划中主要阶段的时间表基本如下: ? 这是每个阶段实际花费的时间 不是写代码花费了很长时间,而是调试代码。实际上,在一个所谓的简单环境上运行起来花费了4倍最初预想的实现时间。...对于每次运行,使用的代码、用来运行代码的命令、命令行任意输出以及任何输出的数据都会自动保存,并且通过一个网页接口建立索引。 ? 如图为FloydHub的网页接口。...上面:历史运行的索引,和单次运行的概观。下面:每次运行所使用的代码和运行输出的任意数据都被自动存档。 第二点的重要程度我难以言表。...这个最大的弊端是如果你关闭了浏览器窗口,你的代码不会保持运行,而且还有在托管该笔记本的容器重置之前能够运行时间的限制。所以这一点不适宜长期运行,但对运行在GPU上快速原型是有帮助的。)
Jupyter Notebook包含一写特殊的命令,我们称之为魔术命令。 正如它的名字,魔术命令是一个特殊的命令。魔术命令通过将%符号与要运行的命令一起使用来工作。...使用%timeit 魔术命令,我们知道每个执行时间的执行时间只会偏差341ns左右。 当您想要确定代码执行和循环过程的稳定性时,这个命令非常有用。...%history or %hist 当你花了很多时间做分析后,你想知道你做过什么以及你目前的状况,或者有时候你不得不在单元格之间来回跳转以运行函数时,你会不会经常忘记历史的操作?...在这种情况下,我们可以使用%history 魔术命令查看您的活动日志,并跟踪您已经做了什么。 尝试在jupiter notebook单元格中运行%history,看看输出是什么。 ?...让我们尝试阅读我们之前的Python文件。 ? 一个新的弹出窗口将显示Python文件中的所有代码。 当您希望在jupiter Notebook中使用许多生产和开发代码时,这个神奇的命令非常有用。
当我们自己写代码的时候,都知道这一行行的代码是什么意思,如何工作,如何实现业务需求的,当然,这些仅仅是「当我们自己在写」的时候。...是否会花几个小时解释一些显而易见的事情,或者纠正其他人由于他们不理解明显「如此明显」的代码而犯的错误? 任何人都不喜欢希望这种情况发生,但谁也无法避免确实会发生。...最好在写代码之前统一制定相应的用词规范。 善用IDE 大多数开发人员使用自动完成的IDE工具,因此将根据其名称选择变量或方法。 大多数程序员而不是为编译器编写代码。...想象一下,在和不熟悉您的代码功能的人的会议中谈论代码中的业务实现的时候,当说出要引用该变量时,说SchoolUserBirthday要比SUB更容易理解。...在给不同类中的方法指定的名称中也要保持一致,如果命名一个电子邮件的类为email,则不要使用mail、eMail、electronicMail来命名其他类的对象、方法和属性。
最坏的情况是我根本你不知道我在做错的东西。一旦我意识到我在做错事,我就开始避免这些失误。至少,我现在写的代码比以前写的要好多了。 现在你们也可以避免这些错误。首先要知道你现在在做的是错误的。...如果你仍然犯这些错误,可能你的程序依然正常运行,能够完成需要的任务,但是它会变得易出bug,充满低效率的代码,难于维护。并且,当你很长时间后再来看它的代码的时候,你会发现代码很难理解。...整段的拷贝代码并且就这么使用它而不去烦恼于理解每一行代码是很诱人的。 有时候你拷贝的代码可能太大了以至于没有时间去完全理解它。如果你拷贝任何代码都像这样,就会有让你的程序变得脆弱易出bug等风险。...但是真正的问题通常是出现在程序出现几百个警告,或者程序不能正常工作时。 很难确定到底是什么原因造成了那个错误,你必须花更很多的时间来分析每一个警告来找出造成问题发生的根本原因。...这就是为什么我们的写的代码能正常的工作,但是却不是在所有情况下都能工作。 如果你在工作的时候把它忽略掉,你会在后面花更多的时间。 了解上面这些错误能有助于你避免它们。
,所以我在工作中没有任何问题。 但当我在家里想做一个业余爱好项目时,为了不让工作与私人事务混在一起,我试图将它们严格分开,我宁愿选择我家那台性能较弱的笔记本电脑。...问题在于,仅仅在使用 IntelliJ 编写代码和运行测试一个小时左右之后,这台笔记本电脑就变得非常烫手了。风扇的噪音越来越大,最后实在让人讨厌了。...这还不算,当你几乎无法使用任何 IDE 功能的情况下对内容进行“索引”时,这个过程要花上整整一分钟,甚至更长的时间……而且那是在花费了相当长的时间之后,仅仅扫描要索引的东西!...当我试图改变代码格式,并被迫下载 Eclipse 来改变它的默认规则时,我才痛苦地意识到这一点(它会强制删除换行符,让行填满所配置的整个最大宽度,把代码弄得一团糟——我真想知道,谁他妈会认为这是一个好的默认做法...这些因素加在一起,让我几乎不可能继续在我的小笔记本电脑上使用 IntelliJ,或者至少让我感到真的很不舒服。 最后的感想 很长一段时间以来,我一直想写一篇关于这个问题的文章。
您在上面看到的代码是我在查看MATLAB源代码和时钟外观的屏幕截图时编写的未经润色、未经精炼的第一个版本的代码。 从开始到结束大约花了五分钟。再花十分钟我就能跟我母亲将其解释清楚。...还有许多其他 Mathematica 的优点使实现和使用时钟成为一种乐趣。立即评估时钟代码会在代码下方的输出单元中提供运行时钟。当您编写代码时,即时反馈可以提供巨大的帮助。...并且 Mathematica 尽量不浪费您的 CPU 资源,即使您可能有数百个动态对象,例如笔记本中的时钟。 当我将时钟滚动到屏幕外时,Mathematica 会注意到并且不会花任何时间更新它。...当我将时钟滚动回屏幕上时(在 Mathematica 中,请注意,不是上面的短 Flash),它会以正确的时间继续运行,看起来一直在运行。...令人惊讶的是,如果我关闭笔记本并将其发送到上海,当笔记本在上海打开时,时钟仍在运行并显示正确的时间。
重构(动词): 使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 在过去的几十年时间里,重构这个词似乎被用来代指任何形式的代码清理,但上面的定义所指的是一种特定的清理代码的方式。...帮助理解的重构:使代码更易懂 我需要先理解代码在做什么,然后才能着手修改。这段代码可能是我写的,也可能是别人写的。一旦我需要思考“这段代码到底在做什么”,我就会自问:能不能重构这段代码,令其一目了然?...不过即便如此,稍微花一点工夫做一点儿清理,通常都是值得的。正如野营者的老话所说:至少要让营地比你到达时更干净。如果每次经过这段代码时都把它变好一点点,积少成多,垃圾总会被处理干净。...如果团队过去忽视了重构,那么常常会需要专门花一些时间来优化代码库,以便更容易添加新功能。在重构上花一个星期的时间,会在未来几个月里发挥价值。...在我看来,保持代码清晰才是最关键的:如果「单一出口」能使这个函数更清楚易读,那么就使用单一出口;否则就不必这么做。
然后,当我看到 Ian Miell 为演示文稿制作的图表(他是 Container Solutions 的合伙人)时,我立刻意识到它将成为一个很好的设备,可以用来记录一些历史。...这些指令被发送到大型机进行处理,结果以打印输出的形式返回。不用说,很少有孩子能运行任何东西。而且计算机仍然不受欢迎。...我记得与我的团队讨论从 SVN 转移到 Git。Git 并不是一个简单的销售对象,因为它有添加、提交和推送代码这三个基本步骤,而之前的源代码控制系统只有两个步骤。...我在不考虑这些术语的情况下使用过此处提到的大多数工具。当然,这是一段曲折的旅程,因为我们花更多时间研究如何尽可能少地处理更改结果。 这里的历史也与协作的价值以及对真实来源的持续搜索有关。...然而,在未来一段时间内,开发人员仍会说出“但在我的机器上可以工作”这句话。
大家好,我是一航! 前端时间,写了一篇关于个人写技术文的一个本地环境:《Typora + PicGo + 两个免费图床,轻松输出技术文...》...;其中就提到的最重要的工具之一就是:Typora; 而我也是这款软件的铁杆儿粉丝,平时所有的文章输出全是依赖这个工具;干净的界面,简洁的Markdown语法,码起字来心情都不一样,就在今天白天的时候还在给朋友推荐这个工具...,哪怕是这会儿码字,依然使用的是他; 可就在刚刚,朋友告诉我,开始收费了,WTF?...之前一直都是beta版本,现在终于出正式版了 至于价格嘛!还有点点小贵......一款好的工具,一旦开始免费到收费,总会受到很多人的吐槽;关注的我朋友大多数都是写代码的同行,从技术角度去做好一款产品,确实非常的不容易,我们需要理解作者,只有得到好的正反馈,才能激励他将产品做的更好。
我曾经花两天的时间来调试一个使用了这个循环的复杂程序,并且几年以来,当我需要完成类似的任务时,我会很小心地复制这段代码。虽然这段代码能够解决我所遇到的问题,但我却并没有真正地理解它。...当我为本科生讲授Quicksort算法时,许多学生即使在费了很大的努力之后,还是无法理解其中的证明过程,这令我非常沮丧。...通过十三行的代码和一些实验可以反应出许多问题。这里,我们引用作家Blaise Pascal和T. S. Eliot的话,“如果我有更多的时间,那么我给你写的信就会更短。”...当我为给出这些没有被实现过的程序感到不安时,Alan Perlis的话安慰了我,他说“软件是不是不像任何一个事物,它就是意味着被抛弃:软件的所有意义就是把它看作为一个肥皂泡?”...* 如果我有更多的时间,那么我给你写的信就会越短(Pascal) * 发明家的矛盾:计划越宏大,成功的可能性就越大。
写干净代码的好处 先来了解编写干净代码的一些好处。其中一个主要好处是,干净的代码可以减少花在阅读上的时间和理解代码的时间。凌乱的代码会减慢任何开发人员的速度,使开发者的工作变得更加困难。...1.更容易开始和继续一个项目 先用一个简单的例子来说明这个问题。假设在很长一段时间后我们回到了之前的一个项目,也许在这段时间是一位客户联系我们去做了另一项工作。...因此,现在必须花更多的时间在项目上,因为我们需要理解之前编写的代码。这本来是可以避免的,如果从一开始就编写干净的代码,然而现在必须为此付出代价。...的确,编写和保持干净的代码并不意味着应该忽略任何改进它的机会,我认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。...5.保持代码风格一致性 当我们有自己喜欢的特定编码方式或风格时,就会在任何地方一直使用它。
,右键也可以直接导出到Excel 这种让你少写几行代码的快捷操作,在代码开发阶段还是比较舒服的,毕竟有时候一些简单的操作需要写很长的代码。...2自动补全 这也是得益于 IDE 的一个非常好的功能,当我们敲代码时可以智能的进行自动提示,这样代码写起来就很舒服了,至少对于我来说,平时一半的代码都是 IDE 写的 3快速搜索 如果你使用过 Alfred...另外一个让我觉得不够完美的地方,就是所有之前的主题样式,都不够美观,老粉丝知道我是颜值党,之前写 Pandas学习网页颜色、位置等参数都一点点调了很久才满意。...如果 IDE 黑 notebook 白,缺少一种「科技感」,但如果全黑色配色,代码框、输入区域、输出区域就会有一种叠加在一起的感觉。...另外,由于功能复杂,真正能用于写代码的区域很小(虽然可以折叠),如果你是笔记本电脑,那么可能一个页面只能容纳下2-3个单元格,用起来比较鸡肋 这也是我之前不使用 Pycharm 写 notebook
当我碰到这种代码评审请求时,我首先做的是要求提交者按功能模块将其拆分成多个小的请求。我只会对 issues(任务管理系统)中的第一个功能需求评审,然后将其转回提交者。...代码写的很烂 缺乏经验的开发人员写不出漂亮的代码,他们写出的代码会很混乱,而且分布在代码库的各个部分。 当你尝试阅读这类代码时,会感觉自己身处一座迷宫之中。...虽然他们的态度和出发点是好的,但对整个团队造成的后果是灾难性的,浪费了很多的时间,导致团队得日夜赶工。 你能做什么? 专注完成小的任务。...缺乏经验的开发人员不接受任何建设性的建议,甚至代码评审中的评论,他都会认为是对他个人的一种攻击。 很多年前,我有一个同事给我写了很长的一封邮件,教我如何来评审代码,他对我给他代码的评论感到愤怒。...他抱着做一天和尚撞一天钟的态度工作,却感慨没有遇到赏识自己的伯乐。 你能做什么? 对每个反馈保持积极的态度。对于每个反馈,你可以选择是接受还是拒绝,但拒绝之前要保持心平气和的态度。 从错误中学习。
有的团队结构,最初可能并不要求写代码。因为实体模型、白板设计等等,这些成本都比一下子删改上千行代码的成本要低。 3.首先搞定端至端 当我们在解决问题和完成功能时,很容易深入到细节问题的研究。...其实不仅如此,自动化最大的优点是让你的思想策马奔腾无所阻碍,朝着完成目标的方向奋勇前行。 举个例子,假设我需要经常运行一个相当复杂SQL查询,而过程真心很长,每次又都要重新输入一遍。...但是当我们致力于设计新代码时,抽象概念却又成为了干扰因素,即便这些抽象再 怎么显而易见、易于设计。我的做法是,不要立刻思考各种抽象概念,先简单机械地复制一些代码作为原型。...此外,我的习惯是每隔一小时左右做几个俯卧撑,拉伸肌肉,保持活力。 因为久坐我以前经常肩膀疼背疼,但是自从立式桌的出现,这些都成为了历史。...10.给第二天做个计划 要么是下班回家之前,要么是晚上睡觉前,我都会在笔记本中为第二天列个待办事项列表。
这就是相关的流程,所以这部分的前两个练习(练习 13 和 14)将由我完成,现场制作,所有的缺陷都是我做的,所有的代码都是我写的。...通过这些练习,我希望你遵循一种具体的方式来研究它们,以便你可以从记忆中实现它们。当我学习音乐,和尝试画出我看到的东西时,我使用这个相同的流程。...当我被卡住或者我用完时间的时候,我站起来,把我的小画板带入花的房子,并将其与我看到的比较。然后我会记录我的错误。一只花瓣太长吗?花盆的角度错了吗?土壤太暗了吗?我记下笔记,弄清楚我错了什么。...花费 15 分钟的时间来学习算法房间中的信息,记下笔记,绘制更多的图表,可视化数据的流动方式,并且做任何其他可以想到的事情来学习。...将所有信息留在算法房间,走进笔记本电脑的房间,坐下来尝试从记忆中实现它们。在检查你的作品之前,不要花费超过 45 分钟。 带着你的笔记本电脑进入算法房间,并记录你的错误。
1.更容易开始和继续一个项目 先用一个简单的例子来说明这个问题。假设在很长一段时间后我们回到了之前的一个项目,也许在这段时间是一位客户联系我们去做了另一项工作。...因此,现在必须花更多的时间在项目上,因为我们需要理解之前编写的代码。这本来是可以避免的,如果从一开始就编写干净的代码,然而现在必须为此付出代价。...所以,决定雇佣另一个开发人员的目的,是来加速我们的工作,而不是减慢速度,也不是花费更多的时间来帮助她学会使用代码。 当我们努力写出干净的代码时,其他人就会向我们学习,也就更容易跟着写出干净的代码。...的确,编写和保持干净的代码并不意味着应该忽略任何改进它的机会,我认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。...5.保持代码风格一致性 当我们有自己喜欢的特定编码方式或风格时,就会在任何地方一直使用它。
这一目标意味着可以把经典线程做的所有事情,轻松的转换为虚拟线程的处理方式来完成。这里涵盖了几个关键点。 虚拟线程可以运行任何Java代码或任何本机代码。 你不需要学习任何新概念。...如果虚拟线程正在同步块内执行某些代码,则它无法与其平台线程分离。 因此,在运行此同步代码块期间,它会阻塞平台线程。如果这个时间很短,那也没关系。无需恐慌,也无需采取任何措施来防止这种情况发生。...您可能认为没有任何性能提升,只是产生了开销。那么到底是怎么回事呢?关于虚拟线程还有更多内容。下面一起来看看这段代码是如何运行的。 这段代码中,使用了流模式创建 10 个虚拟的、未启动的线程。...那么让我运行这段代码,可以看到如下结果: 对于 5 个虚拟线程,它使用 3 个平台线程并花费 2 毫秒。 让我使用 10 个虚拟线程并再次运行代码。...对于 10 个线程,它仍然使用 3 个平台线程并花费了 4 毫秒。 让我使用 100 个虚拟线程并再次运行代码。 现在它使用 7 个平台线程。 让我们看看 1,000 个虚拟线程会发生什么。
当我碰到这种代码评审请求时,我首先做的是要求提交者按功能模块将其拆分成多个小的请求。我只会对 issues(任务管理系统)中的第一个功能需求评审,然后将其转回提交者。...一个好的做法是:每个工作日都进行代码提交。 不要提交没有编译或者会导致构建失败的代码。 代码写的很烂 缺乏经验的开发人员写不出漂亮的代码,他们写出的代码会很混乱,而且分布在代码库的各个部分。...当你尝试阅读这类代码时,会感觉自己身处一座迷宫之中。你会逐渐忘记自己是从什么地方开始的,要寻找什么以及这段代码完成了什么功能。 有经验的开发人员知道代码如何设计。...缺乏经验的开发人员不接受任何建设性的建议,甚至代码评审中的评论,他都会认为是对他个人的一种攻击。 很多年前,我有一个同事给我写了很长的一封邮件,教我如何来评审代码,他对我给他代码的评论感到愤怒。...我之前还有个团队成员,上班时间炒股。因为他需要不时地关注股票的 K 线走势,造成个人的产出质量不高。其他同事对他很有意见,因为他们需要花费更多的时间去赶工期。
领取专属 10元无门槛券
手把手带您无忧上云