外码

当我们开始从事真实的软件项目时,您将加入的团队很可能将拥有现有的源代码,而不是从头开始一个项目。 每个源代码都具有自己的一套技术,模式,实践和策略,这就是我们遇到这样一个问题的原因,即不知道从哪里开始或如何理解该代码在做什么,特别是如果它是大量的源代码。 通常,文档将不可用,如果可用,则文档可能已过时或在整个项目中未完全遵循或未实现的高级设计。 您拥有的唯一实际且真正可靠的文档是代码本身,以及编写该代码的人员(如果还存在的话),而其他所有信息充其量只有50:50的机会。 因此,如果您发现自己处在这种情况下,该怎么做才能理解您正在从事的项目? 您如何才能最大程度地减少学习曲线并最大化对项目的贡献? 在过去的15年中,我学到了一些东西,我认为在以下情况下可能会使您受益: 域优先(大盒子) 您应该做的第一件事是花费大部分时间来了解业务正在试图通过该软件实现的目标。 牢记此概述将极大地帮助您。 了解域将帮助您确定代码的最终目标,这将极大地帮助您确定哪些现有代码可以保留,以及从高层角度可以彻底删除哪些代码。 这在降低代码的复杂性方面应发挥重要作用,并使它更易于理解。 了解域将有助于您对代码进行区域化,也就是说,能够将较大的代码区域视为可以移动的大块,并查看每个区域之间的关系。 建筑(乐高积木) 除了对领域的了解之外,您还应该将大部分精力集中在查看代码遵循的流程上以实现其目标。 从体系结构的角度来看,某些源代码比其他源代码更难理解,尤其是在体系结构不是很熟悉或不常见的情况下。 最好的选择是找到最初设计该软件的架构师,以从最初的意图中学到东西。 了解该体系结构将极大地帮助您了解代码遵循其原始设计的位置以及代码偏离正常目标的位置以完成某项工作。…

优先级:您做错了

两周前,我写了一篇关于我专门从在线资源创建的课程的文章,该文章将用于帮助我了解从数据(数据科学,如今很酷的孩子称之为数据科学)中获得有用见解的过程。 我向自己保证,在学习这些课程的同时,我每周都会写一篇帖子,回顾我从前7天中学到的知识。 参加该计划的两个星期,我学到了一个卑鄙的教训: 教自己新技能和新概念可能很困难,但是尝试有效地管理自己的时间实在太糟糕了。 我会克服拖延症…最终 我很兴奋并且准备好开始了,我从清单上的第一门课程开始。 最初的课程逐渐发展起来,因为它们主要处理的是python的非常基本的编程概念,而我已经对此有相当的经验。 我致力于坚持路线图,因此在一周中继续前进并投入了学习时间,这只不过是回答一些琐碎的问题和进行简单的练习而已。 在第一周之后,我感到自己没有取得任何进展。 为了解决这个问题,复习我已经知道的材料会使我失去动力。 在接下来的几天中,我下班后入侵其他无关的项目,或者在晚上放松,而不是沿着课程的方向继续进行。 如果您像我,那么您就会知道这会令人沮丧。 当您意识到自己没有充分利用自己的时间时,恐惧的内感逐渐蔓延。 可悲的是,这种悔恨在为时已晚并且已经成功拖延之后很方便地出现。 我意识到我的方法存在根本性的错误。 我在学习中没有发挥积极作用。 我没有优先考虑 ,这损害了我的前进能力。…

上下文切换可能会花费很多

想象一下,您在公交车站等车,公交车到站,所有人都进入公交车,司机跳出来跑回去。 司机似乎在必须负责的地方工作,因此,由于另一位公交车司机没有露面,因此他有责任在该路线上运行这两辆公交车,因此他跑回去取回另一辆公交车到车站从终点站。 现在想象您正在领导一个软件项目,而某个项目正在您的领导下进行。 您为他们分配了应在一天之内完成的两个任务,这就是您的期望 您认为程序员将先执行任务A,然后再执行任务B。但是实际情况几乎没有什么不同。 当开发人员从一项任务切换到另一项任务时,他被打断了,这将导致少量切换时间被夹在两个任务之间,如图所示。 现在想象一下,您打扰了开发人员,无论他何时执行任务A,您都告诉他去执行任务B,因为那是需要时间,然后打扰他并告诉他执行任务A。您说他必须敏捷是敏捷的武士,他必须知道如何坚持做生意 可怜的开发人员执行一项任务,然后切换,然后在您控制他的资金和进度时再次切换。 结果是上面有很多开关的图像。 现在,您已经浪费了很多开发人员时间,让我取出这些开关并将其堆叠起来以完成任务。 现在只用一个开关比较东西,看下面的图 程序员经常被指控浪费时间,做得不好。 当项目进展顺利时,管理人员将获得荣誉。 到底什么时候管理层会相信做真正工作的人? 想知道他们什么时候会意识到自己犯的错误? 称赞真实工作的公司已成为备受推崇的科技巨头,拥有良好的工作氛围。

一个(半)原因您应该始终在辅助项目上工作。

启动新的Facebook。 想象一下您的日常工作。 您可以进入办公室,坐下,做早起—用敏捷方法进行的快速会议,以向每个人更新您在任务上取得的进展—并打开电子邮件以查看您要举行的会议。 您沿着大厅走到分配给您团队的休息室,然后倒一杯咖啡。 在早上的某个时间点,在与同事的会议和对话之间,您为公司为您的最新票券开发的产品的新功能编写了一些代码,或者解决了您遇到的一些错误。 您可能会与架构师,您的CTO或高级开发人员进行对话,并讨论您所使用的系统的体系结构。 根据工作量和您的办公室,您花费在编写代码上的重点时间可能短至一个小时,也可能长达四个小时。 根据在代码库中工作的其他工程师和您团队的范围,您正在编写的代码既可以用于核心功能,也可以仅利用已存在的结构来实现小功能以关闭Jira Ticket。 稍后,可能在午餐后,您打开您的私人电子邮件或Hacker News,并阅读有关该行业正在发生的事情的最新文章。 这些文章可能会讨论您正在使用的最新语言的最新功能,或者只是讨论某人对“行业状况”或“前端开发状况”的看法。 营业时间结束时,您可以收拾笔记本电脑,上车,开车回家,希望与亲人共度时光和/或可能看很多电视。 如果这对您来说是办公室里最普通的一天,很遗憾地告诉您,您那天可能对软件开发了解的不多。 即使您确实阅读过有关使用Javascript进行函数式编程或测试驱动开发的好处的知识,但在一周或一个月没有接触到该主题之后,您可能也不会记得它。 被动学习与主动学习 当您阅读有关您感兴趣的主题的文章并获得可用于回答问题的信息时,您正在参与一个称为被动学习的过程。 被动学习被定义为“一种学习或指导的方法,学生可以从指导者那里获得信息并对其进行内化。”这是一种“学习者没有从指导者那里得到反馈的方法”。…

什么是远程工作以及为什么您应该开始认真对待它。

Loreta Jugu(远程软件开发人员)在我们的外包中心中为远程开发人员而建 远程工作正在增加。 尽管可以在公司办公室外部工作的能力已经存在了数十年,但远程工作正逐渐成为主流。 远程工作是一种工作风格,允许专业人员在传统的办公环境之外工作。 它基于这样的概念,即无需在特定位置完成工作即可成功执行。 远程员工可以随时随地执行他们的项目并超越其目标; nHub的首席执行官David Daser曾在硅谷的一些公司和欧洲的其他公司担任远程软件工程师,他已经从事了7年。 人们可以通过多种方式进行远程工作。 您可以选择最有意义的工作方式。 有些人在整个工作周的大部分时间都有机会远程工作,但每周必须有一天在办公室开会。 这些人可以在其家庭办公室或neaby咖啡馆工作,必要时可以在公司办公室工作。 其他人则依靠共同工作的空间来完成工作。 协同工作空间充当生产力,社区和技术的枢纽,提供了强大的网络连接性和机会,可以结识从事多个行业的其他人。 在尼日利亚nHub,我们有34位软件开发人员为国内外组织进行远程工作。 为什么有这么多的组织选择雇用远程工作者,而不是为其组织雇用现场工作人员? 以下是为什么您需要开始认真对待远程工作的原因。…