软件开发

造轮子,为什么鄙视造轮子,我赞成造轮子!

流过昼夜 提交于 2019-12-07 18:37:17
软件开发行业里有一个名词叫“造轮子 ”,似乎造轮子已经成为一种贬义词。每当有人提及“你这是在造轮子!”或者会说“你这是在山赛xxxxx”。被说的一方总会感觉到一丝凉意,甚至会有一种不被尊重的感觉。当我第一次听到有人跟我说“你这是在造轮子!”时,我变得异常敏感,即使是现在我也会感觉到一些不适。 在开源世界里这种情况似乎已经是家常便饭了,无时无刻都会有人再说“你这是在造轮子!”。 作为开发者无论从事的是低级的Ctrl+C,Ctrl+V 还是已经小有所成。都应该时刻谨记你的成果或许会在未来的某一天被人称之为“轮子”。当你的作品有幸被称之为“巨大的轮子”的时候,也要记得这只是通向成功道路上的坎坷的一部分。 什么是轮子? 关于造轮子我们大家心中都有一个比较统一的标准,那就是重复制造那些已经存在了的(软件、功能、类库、框架)的行为。一旦你的(目标、功能)和某个产品或者项目一致,并且当你开始实现它们时,其实你就是在制造轮子。 这里先提及一个概念就是“模仿”, “模仿”从出生到死亡我们一生都在做的事情。“造轮子”、“山赛”等其本质就是在模仿。 微软在模仿、Google在模仿、三星 在模仿 、苹果也模仿。雷达、红外、人造卫星、人造心脏等等技术都是模仿的成果。 我们说的轮子其实也是一种模仿,之所以被称之轮子主要还是评价人 主观判断。因为这个世界上重复的事情太多了。 谁在鄙视制造轮子?

通过 DevOps 整合开发和应用安全管道

﹥>﹥吖頭↗ 提交于 2019-12-06 22:13:12
【编者按】作者 Aaron Volkmann 是 CERT Division 高级研究员,通过提出了一种集成安全系统到 CI/CD 的方法,让机构保持快速部署到生产环境能力的同时,也大幅度降低安全隐患,本文系 OneAPM 工程师整理。 DevOps 理念规定软件开发和运维团队之间需要加强沟通和协作,从而在软件开发和交付过程中实现更好的结果。而在这之后,信息安全团队同样应该集成到 DevOps 实践团队中。虽然在持续集成(CI)和持续交付(CD)过程中还未实现完整的自动化软件安全评估,本文主要介绍应如何将 DevOps 理念应用于安全评估,并集成 CI / CD。 及时和可持续 在一个新的软件项目的开发阶段,信息安全团队应该衡量新软件的安全风险,并在整个开发过程中进行安全评估。为确保快速开发和新功能部署,企业必须确保安全评估的频率,既要保证安全风险最小化,同时也要考虑安全团队有限资源的可持续性。 众所周知,自动化是 DevOps 的主要理念之一,但很多在指定应用上进行软件安全性评估的任务仍然是手动执行。出于这个原因,适当的应用安全性评估仍然是持续集成/持续交付开发管道界外。如果一个企业正在进行持续交付,那怎样才能保证部署到生产环境的软件没有安全风险? 虽然,程序中某些代码的变动,如程序接口(API)终端或更改验证,在迁移到生产之前,需要对此类变动进行手动安全评估

社交系统ThinkSNS可以运营什么?可以应用于什么场景?

旧街凉风 提交于 2019-12-06 07:36:20
简单点说,TS是一套功能丰富,含PC端、Android APP、iOS APP、H5、微信端全平台的系统,主打社交系统,但是 ThinkSNS 并不仅仅限制于社交;正是因为这套产品功能太齐全、客服端覆盖全面,所以反而很多人不知道能够拿来怎么使用,应该用在什么场景了,很多人的思维都局限在了把这些功能都用起来。 实际上,ThinkSNS系统功能丰富、平台齐全,并不是全部都需要使用起来,应该按营销方针、使用行业、场景、商业方向所需,而选择其中的功能。其中暂时用不上的,或者还没有想好怎么用的,就先隐藏,如果以后商业方向需要,再继续使用。 空说无理,小编在此举几枚案例: 自媒体行业:想做自媒体,那就把资讯放在首页,其他动态(微博)、微吧之类功能,如果你不需要用,就隐藏。 企业内部社交:想做一个公司内部交流系统,使用动态做公司内部社交、用活动做公司活动发布、用资讯发布公司各种动态或者通知、还可以将微吧用起来,当公司的兴趣贴吧,当然,这种的话,适合公司体量较大的。 母婴产品:利用资讯做母婴新闻发布及育儿科普;动态可以供所有父母做交流,如交流育儿经验、晒孩子趣事;贴吧可以做兴趣小组;活动则可以作为官方发布活动,夏令营、比赛等,太多了 这么一看,这个产品就是万能的了不是,所以不要把自己思维局限了,想要看更多案例请到ThinkSNS官网查看,也可以直接联系我们,获取更多案例: 18108035545

开发的本质 从更高点看软件开发的侧重点

若如初见. 提交于 2019-12-06 06:46:50
  在技术外行人看来所有的程序员都是一样写代码的。但是深入之后才知道不同程序员他们具体负责的职责却如此千差万别。写PHP的不一定擅长前端,写iOS的不懂Java,写C++的搞不好Java。   我们先来看看技术语言的演变发展。   总体来说行业内是先有汇编,再有C、C++、Java、PHP这些语言。然后它们不断升级推动软件系统极大丰富。后面有了各种系统产品,浏览器等。拿浏览器举例,围绕这个方向又多了Java、HTML,CSS...各种技术。基于Java 又有了基于Java的各种框架,像jQuery。   表现在用户接触的层面就是日益丰富的各种软件产品。随之而来的是不同技术开发需求旺盛: 网站建设 ,做APP,微信开发。配套的技术岗位也应运而生。就像之前是没有iOS的,苹果推出iPhone然后iOS工程师就遍地开花了。技术岗位有生命周期,冷门的技术也在逐渐淡出人们的视野,现在市场上很少有微软当年热推的.NET了,类似的也有大学教的VB。   总之,大gongsi面临复杂的实践挑战,他们不断创新创造技术、管理手段方式。Facebook最开始用的是PHP,然后研发了HipHop。Facebook、Google在部分实践中使用MySQL来存储数据,同样他们对MySQL也做了很多更新修改,这个可以在Google Code中找到。技术改造主要围绕在可伸缩性和可用性两点,其次是性能和成本

写毕业设计之前的准备工作

早过忘川 提交于 2019-12-02 03:10:48
软件工程   软件工程是一个很复杂的东西,我们需要问题定义,可行性分析,需求分析等等一系列的步骤,但是要说我最不能忍受的,就是word这个东西,我们其实可以换一种东西来做文档,不论是Markdown还是wiki,或者你的能力高了一点点,那么你可以用rst来做。但是在大学,我们写文档必需要用那该死的word,这实在是一种说不出的痛。我认为我们完全可以抛弃word这个东西,使用一些可以加入版本控制的东西来处理我们的文档。   所以,这次我不再使用word来做文档,而是使用gitbook来做我的文档,我认为这个工具要比word好很多,至于好在哪里,我懒得解释。 关于建模   虽然我们学校没教[简单的说过E-R图],但是这是一个很重要的东西,重要到毕业设计答辩的时候有很大一部分都是在看数据库E-R图画的对不对,UML图是否完整,以及一些业务上的流程图。关于技术上的问题反而问得不是很多。这个系列的项目,我会用powerdesigner做各种E-R图与UML图。 关于测试   这个系列的项目,我肯定会做的测试有:spring+junit+dbunit进行service层的测试,对spring mvc controller层的测试,但是对于大批量用户的测试,我还不知道应该怎样测试,就先这样来。以后会尽量做到完整的测试,且开发方式慢慢向测试驱动开发靠拢。 关于技术   我只能说

静态分析安全测试(SAST)优缺点探析

喜夏-厌秋 提交于 2019-12-02 00:28:56
静态分析安全测试(SAST)是指不运行被测程序本身,仅通过分析或者检查源程序的语法、结构、过程、接口等来检查程序的正确性,那么采用静分析安全测试的方法有什么优缺点呢,且让小编给你说道说道。 许多公司都投资于 HP Fortify、IBM AppScan Source、 Checkmarx 或 Coverity 之类的静态分析安全测试(Static Analysis Security Testing,SAST)解决方案。如果使用得当,SAST 解决方案的确能大放异彩:相比于动态分析或运行时测试方案,它们能在开发阶段,而不是开发完成之后,探测出源码中的安全漏洞,从而大大降低修复安全问题的成本。它们还能找到许多动态分析工具通常无法找到的漏洞。而且,得益于其自动化的特性,SAST 工具能在成百上千款应用间实现伸缩,而这是仅靠人为分析方法无法企及的。 在对 SAST 解决方案投资之后,一些公司便放弃了在应用安全领域的进一步投资。这类公司的股东往往认为:静态分析方法覆盖了绝大多数软件安全漏洞,或是诸如 OWASP 前十的重要高风险漏洞,因此已经足够好了。这些公司往往不会在软件开发初期就考虑安全问题,而是止步于在应用部署到生产环境之前,获得一份来自扫描工具的“无瑕疵报告”。其实,这种心态非常危险,因为它无视了 SAST 技术的基本限制。 《用静态分析方法确保编程安全(Secure

你真的需要掌握多种语言吗?

*爱你&永不变心* 提交于 2019-12-01 17:11:09
你需要掌握多种语言吗? 我刚刚断送了我的事业。嗯,别人就是这么对我说的。 我的同事们知道了我要离开公司,大多数对此表示理解。让他们不解的是,我目前就职的公司是一家 Windows 商店,我们用 C#.net 写代码,而我要入职的岗位要求在 Linux 环境下进行开发,以 Java 为主要的编程语言。他们认为编程语言的改变会让我丢失多年的编程语言经验,许多人赞同我同事们的观点。 编程语言 有上百种。有些编程语言十分常见,例如 Java、C#、 PHP、 Ruby、 Python、Javascript 等,而有些编程语言则处于边缘地带或者是新兴的,例如 Awk、Go、Julia、Rust等。面对这么多的选择,你如何知道应该重点关注那种语言呢?因此,我开始思索,你真的需要掌握不止一种编程语言吗? ##九个掌握多种语言的理由 1.对于同一个问题,你可以有多种解决方法。掌握不同的编程语言之后,你会有更多的选择。毕竟如果你只有一把锤子,一切看起来都像是钉子。 2.你具有更多卖点,因此你会有更多的工作机会。有时,学习第二种语言能加倍工作机会的数量。然而,这取决于你所学习的语言种类。无论如何,你将会有更多的合适机会,从而增加求职能力。 3.这表明你具备学习新语言的能力。潜在的雇主知道你并非死板或者惯守成规的人。 4.学习是有趣的。学习新的事物会让你的头脑保持兴奋。这将有助于你在新领域的成长和提高。

敏捷软件开发总结

倾然丶 夕夏残阳落幕 提交于 2019-11-30 06:19:25
背景介绍 我从大学05年开始直到现在就总共干了10年的软件开发,期间参与了各种类型的软件项目开发,包括高校和企业应用软件项目,外企的金融软件项目以及互联网软件项目,也参与过最近流行的移动端互联网项目的开发。分别在外企、创业企业、自己创业和中大型互联网公司工作过,所以实际参与的互联网项目种类繁多,工作过的公司类型也较多,因此对于软件项目开发这件事情有一些自己的思考和实践经验。 从2011年开始接触到敏捷项目管理,期间学习和实践了像Scrum和看板方法等敏捷方法,也进行了包括持续集成、代码评审等多种敏捷工程实践,也使用了谷歌公司发明的OKR工作方法。因此对于敏捷软件开发也有一些总结的经验。 因此本文就是将自己多年的软件开发和敏捷软件开发的多年学习和实践经验进行汇总,形成本文。 软件的价值 提高数据计算和存储效率 首先软件带来的价值就是提高工作效率。互联网盛行之前软件开发行业主要是为企业开发应用软件,它的价值是提升企业员工的工作效率,比如财务软件及各种管理类软件,主要是解决信息存储和检索问题,解决数据计算效率问题。 提高信息传递效率 其次软件及互联网带来的价值是提高信着互联网技术的广泛应用,软件给人们带来的价值是以更低的成本,更高的效率传递来传递信息。 还有其它的一些价值。上述两类价值是软件及互联网带来的核心价值。 那么我们软件开发的目标就是通过一系列的过程和活动让软件的价值得以体现

为什么需要敏捷软件开发

风流意气都作罢 提交于 2019-11-30 06:19:08
当前各大互联网公司都宣传自己是敏捷开发,各种技术论坛上也讨论得非常多得议题也是敏捷,好像公司不敏捷都好不意思跟人打招呼。那么我们到底为什么需要敏捷呢?传统软件开发到底存在什么样的问题呢?作者从自己的视角来给各位分析一下。 软件及互联网的价值 首先我们从软件开发的成果软件的价值说起。软件到底能够为软件的客户及用户带来什么样的价值呢? 提高数据计算和存储效率 软件带来的价值就是提高工作效率。互联网盛行之前软件开发行业主要是为企业开发应用软件,它的价值是提升企业员工的工作效率,比如财务软件及各种管理类软件,主要是解决信息存储和检索问题,以及解决数据计算效率问题。 提高信息传递效率 随着互联网的普及和广泛应用, 软件及互联网带来的价值是以更低的成本,更高的效率传递来传递信息。人们用互联网来查找信息;用互联网来随时随地的沟通;用互联网来连接消费者和零售商,让消费者足不出户实现全球购; 还有其它的一些价值。上述两类价值是软件及互联网带来的核心价值。 那么我们软件开发的目标就是通过一系列的过程和活动让软件的价值得以体现,脱离了实现价值的软件开发就是耍流氓。 另外我要强调的是价值它绝对不能等同于软件功能,开发软件功能只是第一步,只有用户去使用软件解决了问题之后软件的价值才得以实现,软件的总价值等于所有软件用户获得价值总和。 传统软件开发的问题 由于我在不同类型的软件公司工作过

如何与 DevOps 为伍?

旧时模样 提交于 2019-11-28 19:34:03
DevOps 是一个席卷 IT 界的新术语。但它究竟是什么,南非的公司们如何利用它来加快高品质应用程序的开发速度?国外知名博客作者凯西·吉布森找到了一些答案。 其实 DevOps 这个词已经火了一段时间了,我们知道它是很多新时代数字化企业的成功秘诀。但是,在南非公司收获由 DevOps 带来的全部好处之前,重要的是理解它的涵义,以及如何最大限度地利用它的优势。 维基百科对 DevOps 的定义为:「一种强调软件开发人员和其他IT专业人士之间沟通,协作(信息共享和对 Web 服务的使用),集成化,自动化和合作测量的软件开发方法。」「该方法认可软件开发,质量保证(QA)和 IT 运营之间的相互依存关系,旨在帮助企业快速生产软件产品和服务,改善经营业绩。」这听起来很像敏捷之类的现有开发方法,但根本的不同之处在于: DevOps 积极推进一系列流程和方法,致力于开发、质量保证和 IT 运营之间的跨部门沟通与协作。 DevOps 的一个主要目标是快速应用部署,从而缩短产品上市时间,降低新版本的故障率,缩短崩溃事件的修复时间和平均恢复时间。DevOps 的目标是通过自动化方式方法,最大限度地提高运营流程的可预测性,效率,安全性和可维护性。Chef 的 EMEA 副总裁兼首席企业架构师的贾斯汀·阿巴克尔,解释说,DevOps是与业务的整体转型密切相关的。 「通过思考企业运作的方式