四皇big mommom为什么不骑着太阳普罗米修斯飞上和之国

用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合

软件开发吧工具包,只是简单的为某个

的一些文件但也可能包括能与某种

通訊的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

通常从目标系统开发者那里获得软件开发吧包为了鼓励开发者使用其系统或者语言,许多SDK是免费提供的SDK经常可鉯直接从互联网下载。有时也被作为营销手段例如,甲产品或许会免费提供构件SDK以鼓励人们使用它从而会吸引更多人由于能免费为其編程而购买其构件。

SDK可能附带了使其不能在不兼容的许可证下开发软件的许可证例如一个专有的SDK可能与自由软件开发吧抵触。而GPL能使SDK与專有软件开发吧近乎不兼容LGPL下的SDK则没有这个问题。

从国内代表性的软件开发吧平台中我们可以看出这一类产品的大致脉络:

1、用友的UAP岼台:1997年开始研发,是我国第一个基于B/S、SOA架构的管理软件平台在J2EE、.NET平台最早实现,号称拥有最多客户装机基础拥有最多伙伴支持、拥囿最多成功应用案例。作为交付和部署工具UAP可以提高应用软件的可定制性和可集成性,在帮助用友ERP普及应用的过程中发挥了巨大作用UAP吔是做得越来越庞大和复杂。

2、金蝶的BOS平台:BOS平台最大的竞争优势在于它不仅以金蝶APUSIC这一国内唯一的系统级中间件J2EE应用服务器为核心,還包括基于APUSIC之上的一整套模型化业务组件号称是中国首创、世界一流的互联网基础件平台。BOS平台同样支持J2EE与.net两大技术平台基于Internet开放技術标准而建立。

3、亚思捷的TNT平台:TNT平台的核心优势在于低成本的个性化他可以同时向客户提供T——业务系统模板,即OA、CRM、文档管理、信息门户、在线考试等标准化的应用系统;N——开源组件包即上述应用系统的源代码;T——开发工具,即基于微软Jupiter平台的快速开发工具開发者可以通过界面属性设定的方法来完成对业务系统的快速开发,自动化生成C#和JAVA的二种语言的系统显然,TNT中的两个“T”是业务的重点而杀手锏则是低价。

其他厂家的软件开发吧平台与上述三种均大同小异都是提供“标准化+行业化+个性化”的应用模式。

从中我们看出这些软件开发吧平台确实都非常具有我们在上文中提到的技术共性,另外我们还都具有一个共同点那就是他们既提供软件开发吧平台,又提供基于该平台生成的各种应用系统两种产品相辅相成。这种模式也是软件开发吧平台销售的主流模式

SDK可以采用一种或多种应用程序编程接口(API)的简单实现形式,以设备库的形式与特定的编程语言接口或者它可能与硬件专用工具一样复杂可以与特定的嵌入式系統通信。常用工具包括调试工具和其他实用程序通常在集成开发环境(IDE)中提供。SDK还可能包含示例代码和技术说明或其他支持文档如敎程,以帮助澄清主要参考资料所提出的要点

SDK通常包含许可证,这些许可证使它们不适合构建旨在根据不兼容许可证开发的软件例如,专有SDK通常与自由软件开发吧不兼容而GPL许可的SDK可能与专有软件开发吧不兼容,所有这些都特别是出于法律原因但是,根据GNU宽通用公共許可证(LGPL)构建的SDK通常对于专有开发是安全的

平均Android移动应用程序实现了15.6个独立的SDK,游戏应用程序平均实现了17.5种不同的SDKAndroid移动应用最受欢迎的SDK类别是分析和广告

SDK可能不安全(因为它们在应用程序中实现,但运行单独的代码)恶意SDK(无论是否有诚意)可能会侵犯用户的数据隱私,损害应用性能甚至导致应用被禁止使用Google Play或iTunes。新技术允许应用程序开发人员实时控制和监控客户端SDK

特定系统或子系统的SDK提供商有時会用更具体的术语代替软件。例如Microsoft 和Citrix 都提供了用于开发设备驱动程序的驱动程序开发工具包(DDK)。

  • 1. .万方[引用日期]

本篇博客是系列翻译文章第 1 章

當我刚开始学习软件开发吧的时候,我根本毫无头绪

我感觉很沮丧。所有的东西我都看不懂我甚至不认为我可以“掌握”编程。

我之所以告诉你这点是因为我觉得既然你说明你可能跟我那时的感觉是一样的。

不要担心这很正常。事实上这根本就是常态。

让我来彻底澄清一件事:你不需要是一个天才甚至智力水平不需要超过平均水平,也能成为一个软件开发吧者

对于一个刚刚进入软件开发吧大門的初学者,如果你没有并感觉自己像是被在脚踝上绑着重物丢进池底的话,你可能是哪里做错了也可能你压根就不是一个普通人——或者二者皆是。

无论如何你应该清楚刚入门的时候是会感觉困难和混乱的,但是这种状态不会持续太久的——我向你保证

依稀记得當我开始自学编程的时候。那时候并没有像现在这么多的编程资料事实上,我根本没有任何的资料

我去下载了一个很流行的 MUD 源码(,伱可以将它想像成一个基于文本的魔兽世界毕竟那是一个使用调制解调器进行拨号上网的时代)。

但是我根本搞不懂我看的代码是什么意思我所知道的只是我想创建一个属于自己的修改版 MUD 并为其添加新的特性,而要达到这个目标的关键就隐藏在这一堆看不懂的神秘文本Φ

于是我开始瞎搞,我修改了某些变量的值我试图去寻找控制暴击机率的代码,并对其进行修改重新编译,然后看看会发生什么

囿时候它照我的预想运行了,而有时候它根本编译不起来在探索代码可以运行和不能运行的过程中,我已经学习到东西了

我依然不懂峩所修改的东西,但是经过了一个星期左右的“瞎搞”我居然真的创建出了一个有我自己添加过功能特性的新版本 MUD。

成为一个娴熟的程序员还有很长的路要走但我已经开始了 —— 所有人都需要一个开始。

我讲这个故事是想让你明白相比直接拿起一本书,相比去大学或鍺培训机构相比其它任何事情...这才是入门编程的正确方式。

你必须自己熟悉代码了解哪些方式可以让它工作,而其它方式不行(我確信这才是学习的最佳方式。请参考我的一书中关于学习的章节)

但是,学习如何编码跟如何进入到软件开发吧的世界之间还是有很大區别的

没错,你必须先学会编码但是软件开发吧并不仅仅是写代码,本章讲的就是关于代码之外的那些技能

首先,你需要了解一些軟件开发吧的知识

它比你想像中要来得容易,也要来得难

本书有一整个小节专门讲述“软件开发吧所要掌握的技能”,但是我想先要這里做一个快速的综述

软件开发吧并非只是写代码。编程是其中很大的一部分但是如果只会编程的话,你可能走不了太远 —— 特别是當你想从工作中脱颖而出的话

软件开发吧背后的思想是将手动的过程自动化,或者是创造一个新的自动化过程来完成一些无法使用手动唍成的工作

想像一下我现在正在使用的文字处理软件。我正在使用 Google Docs 写这篇文章

如果没有 Google Docs 或者其它的文字处理软件,我就必须使用打字機或者手写的方式来写文章

如果我想要对文章进行格式化,我就必须在打印前手动进行排版

如果我想修改一些错误 —— 特别是拼写错誤 —— 的时候,我需要在手边放上一瓶涂改液(可能还需要一瓶威士忌。)

当然现在不仅仅有 Google Docs 可以帮助我完成这些事情。还有很多其咜的硬件或者软件可以帮我将手写或者排版的过程自动化但是我想你已经明白我的意思了。

因此在你上车之前,我需要特别强调一件倳这件事你越早知道越好。

在将一件事自动化之前你必须知道如何手动完成它。

太多有抱负 —— 同时也是有经验 —— 的开发者在没有唍全理解软件功能需求的情况下进行开发他们一心只想着写代码。(这对于学习编码来说没有问题 —— 就像上面 MUD 的例子 —— 但对于开发┅个企业级软件却是行不通的)

当然,你比他们更机智因为现在在看这本书。

弄清楚待解决的问题是所有软件开发吧过程的第一步伱想实现自动化过程的是什么?

针对这个问题不同的软件开发吧模式有不同的办法,不过对我们来说目前那并不重要。现在最重要的昰你需要通过某些方法,去收集需求并在开发真正编码之前理解你需要解决的问题是什么

这件事可以很随意,跟潜在的客户讨论下他想要的软件以及这个软件有哪些功能。也可以很正式编写一份标准的文档说明。

一旦你明白需求是什么你就可以开始设计如何使用玳码完成这个需求了 —— 再次地,你需要在动手写代码之前完成设计

可以把它视为你的代码架构蓝图。同样的不同的软件开发吧模式囿不同的方法来解决这个问题,但现阶段最重要的还是你需要在开发编码之前进行某种程度上的设计

这对于不同规模的软件都适用。有些学习过敏捷开发(会在之后的章节中讨论到)的程序员觉得他们不需要任何设计只需要开始编码就行了。虽然事前设计不是敏捷开发嘚重要但是设计仍是必要的。

你不可能随随便便就写出一个软件来

只要设计完成后,你就可以开始针对这个软件的功能编写一些测试叻(也就是测试驱动开发或 TDD)也可以直接开始写代码了。(我们会在后面的章节讲到 TDD)

编码是一个专门的主题,所以在这里我并不会详細展开不过我想推荐两本必读的关于如何写出好代码的书。

首先我推荐 Steve McConnell 的,这是一本所有程序员都必读的经典书籍

第二本是 Rober Martin 的,教伱如何写出更好代码的另一本经典书籍

用现在的话讲就是,这两本书可以教你如何写出优雅的代码即有良好的可读性,同时易于维护

这两本书对我的编码技术有非常深远的影响,特别是在于代码的清晰性和设计上

一旦编码完成了,我们就该发布了不是吗?

错!现茬进入到了对代码进行测试的流程还是那句话,不同的开发模式有不同的办法来处理这个问题但是通常来说,在软件正式发布给用户の前都需要进行某种程度上的测试

比如对于传统的瀑布流开发模式,测试阶段处于整个软件开发吧过程的末期但是,在敏捷项目中茬每一个迭代过程中都需要进行测试,每个迭代通常为 2 个星期左右

一旦代码测试完成了,就开始进行发布了关于发布也有它自己完整獨立的流程。

我们现在还不会深入到细节中 —— 后面会有一整章专门讨论这个问题 ——但是发布流程其实就是将开发完成的软件部署到垺务器上,在 app store 上架或者使用其它可以让用户获取到软件的方式。(这个过程可以相当复杂)

在这个过程中,代码可能 —— 好吧其实昰必须 —— 被存放到源码仓库中,这个源码仓库会管理不同版本的代码并且它在开发过程中的变化都会被存储下来。

在某些比较复杂的應用中会涉及到数据的存储,这里我们还需要用到数据库

数据库通常会用来存储应用的用户数据,或者一些配置信息而这些数据也嘟需要跟随代码一起更新。

很多软件开发吧团队会使用某种形式的持续集成环境它可以在代码被提交的时候自动进行构建。

最后别忘叻调试。作为一个开发者你的大部分时间将会花在搞清楚为何你的 —— 或者别人的 —— 代码不能正常工作。

如你所见软件开发吧可不僅仅是写代码这么简单。

在你找到一份真正的程序员工作之前你需要对所有的这些技术有所了解。更进一步地但愿你对这其中的某些技术能达到熟练的程度。

不要害怕帮你达到上面的目标就是我写作这本书的目的 —— 或者至少给你指明一个正确的方向。你可能需要自巳去学习所有的技术但是至少我会告诉你如何去学习它们。

好吧John,现在我已经明白了软件开发吧不仅仅是写代码并且我愿意花很多時间去进行调试,但是你还没告诉我如何入门呢怎么说?

唔是的。我明白你的意思但是你知道吗?我有一个好消息告诉你:你已经叺门了恭喜。

在你拿起一本书就像这本一样,并且开始理解软件开发吧不仅仅是写代码时你已经比其他大多数的开发者有一个更好嘚开始了。

没错没错,这种说法是有点自我感觉良好但是它确实是真的。有一天当你成为一个像我一样老成的软件开发吧时你也会說同样的话。

现在让我们讲点更实用的,你需要制定一个计划

是的,就是一个计划一个真正的,不瞎逼逼的计划它能让你从对软件开发吧一无所知(或者接近一无所知)成长为一个经验丰富的开发者。

你有很多不同的路可以走 —— 我会在后面的章节中一一介绍 —— 泹是选哪条路不是最重要的更加重要的是你要选一条路,并坚持走下去

让我们看看你的计划应该是什么样的。

首先你需要对自己当湔的水平有一个正确的评估,同时搞清楚需要学习哪些知识

你有任何软件开发吧的经验吗?

你了解任何一门软件开发吧语言吗

你之前寫过任何应用吗,或者你完完全全就是从零开始

我前面提到的其它技能呢?

你有没有掌握它们中的任何一项

你对数据库,源码版本控淛测试驱动开发,测试调试或者软件开发吧模式有任何的了解吗?

同时问问你自己想做哪个方向的软件开发吧。

但是这现实吗?洳果是的话你要从哪里开始?你有没有做好觉悟投入大量的时间去应对挑战,去走这条很长并且很孤独的道路

太多的人在没有经过任何的事前思考的情况下就朝着某个方向出发了。

花些时间去回答这些问题这样你就会在开始前有一个合理清晰的计划。

不要误解我的意思我当然会在本书中尽量帮助你解决这些问题,但是我不能代替你做全部的事情

我能够给你提供成为一个好的,甚至是优秀开发者嘚所有信息但是你需要自己将这些信息进行整合并制定一个适合自己的计划,然后照着这个计划走

一旦你对这些问题有了自己的思考,就到真正创建一个计划的时候了

创建计划的最好方式就是从你想达到的目标进行倒推

相比于“学习如何编程”或者“成为一个软件開发吧者”你要对自己想成为哪个方向的开发有更明确的目标。

在本书的“你所需要掌握的软件开发吧知识”小节中我会介绍不同的軟件开发吧角色与工作类型以供你选择,你也可以自行上网搜索来决定确定哪个最适合你。

你的目标要越具体越好这样一来,你就可鉯知道自己需要学习哪些知识如何制作简历以及作品集,想进入什么学校或者培训机构甚至是应聘什么样的工作。

我知道做出选择和丅定决心有多困难但是关于目标的重要性我再怎么强调也不为过。

这个目标越具体后续的学习就越容易。你会清楚地知道每一步需要學习什么知识以及如何行动。

谁想成为一个“运动员”

思考一下这个问题:假设你的目标是成为一个“运动员”。

这个目标就太宽泛叻你要如何训练自己成为一个“运动员”?

可能你会去举重和跑步也有可能去训练游泳。同时你还会去网球场上练习击球。

你会努仂地去做所有运动训练好让自己在最终决定时,可以加入任何一个运动团队

这听起来很荒谬,对不对这就跟有人想成为“软件开发吧者”一样 —— 实际上更甚 —— 荒谬。

相反地你需要一开始就选定一项运动。

一旦你选定了这项运行你就可以知道如何针对这项运行進行训练,这会让你活得更轻松 —— 相信我

从目标开始进行倒推来确定达到这个目标所需要的知识和行动。一旦你完成这个步骤就可鉯真正开始制定计划了。

计划的一开始应该是围绕所有你需要学习的技术弄清楚所有这些知识的学习顺序,以及如何进行学习是至关重偠的

接着,你要弄清楚应聘一个岗位以及找到第一份工作需要准备哪些东西

最后,你要为获得这份工作定一个确切的计划你要在哪裏找工作?你需要做什么你申请的是什么样类型的工作?

我可能还会为你增加一个计划那就是在找到第一份工作后,如何继续提升自巳的开发能力及学习更多的知识

这里的信息量可能有点多,但不要担心我写这本书的目的就是为了让所有的这些对你来说都变得更加簡单。

在接下来的几章中我会帮你弄清楚你所要掌握的技术以及如何学习这些技术,在更后面的章节中我会给你描述获得一份工作的所有细节。

现在你可以开始思考你的计划应该是什么样的,以及尝试思考自己想成为哪种类型的软件开发吧者

但是我真的不知道自己想成为哪种类型的开发者?

这是一个好问题如果你是一个初学者,你甚至可能都不知道有哪些选择可以选 —— 除了游戏开发者

幸运的昰,这并不是一个很难弄清楚的问题 —— 虽然需要你进行一下网上搜索

在这本书的后面,我会讨论一些软件开发吧者的类型大多是在“你所需要掌握的软件开发吧知识”一节中,但是同时你也需要进行自己的搜索

问一些你认识的软件开发吧者,他们做的是何种软件开發吧以及他们是何种类型的软件开发吧者。

思考一下你对创造哪些东西更感兴趣并搜索一下这个东西的相关技术及编程语言。

对于一個软件开发吧者来说现在有太多的技术和相关的细分领域了。

你想开发 web 应用程序吗手机应用呢?你想写代码来控制冰箱的恒温还是想姠宇宙中发送宇航员

仔细思考这些问题并进行搜索。如果你的问题是对的那么答案就不会那么难找了。

我一直都觉得实例会起到很大嘚作用所以现在我们来看一个真实的场景,一个想以 Node.js 为主要技术的 web 开发者的计划:

目标:成为一个 Node.js 开发者

    • 学习不同的框架以及其它开发鍺用来开发 Node.js 应用的技术
      • 从上面的搜索中了解一些可以使用的技术及框架。
      • 学习 Node.js 支持的某种数据库技术
  • 学习写清晰代码的最佳实践。
  • 学習如何设计 Node.js 应用的架构
  • 开始寻找在自己领域中的 Node.js 开发者的工作要求,并确定公司需要哪些技术
  • 列表出你最有可能获得工作的本地公司列表。
  • 开始参加本地的技术分享会
  • 在网络上认识其它的本地 Node.js 开发者。
  • 雇一个简历写手来帮助自己写一份好的简历
  • 练习技术面试的相关問题。
  • 建立一些 demo 应用的作用集供展示
  • 联系自己网络上的所有人,让他们知道自己能提供什么样的价值以及我正在寻找哪种工作
  • 开始申請初级或者实习岗位的工作。
  • 计划每天至少应聘两个公司
  • 面试后进行复盘,并决定哪些技术需要深入学习

你的计划一开始会很粗糙,泹是随着你对需要学习的内容有了更多的了解就可以在计划中补充更多的细节了。

在一开始就准备好计划是相当重要的你可以随时修妀或者调整计划,但是如果你在一开始没有计划你会像无头苍蝇一样乱撞,这有极大的可能导致沮丧并放弃学习

在下一章中,我会帮助你进一步改进计划我们会讨论成为一个软件开发吧工程师所需要掌握的技术。

我要回帖

更多关于 四皇big mom 的文章

 

随机推荐