如果软件开发自学步骤一些网路知识

目前为止在安卓方面的已经工作叻三年左右的时间了从一个只会写BUG的菜鸟,到现在慢慢发展成了一名程序员其实说实在的,我学的也一塌糊涂当然在学习过程也积累了一些知识,对于以前没接触过Android的朋友或者刚入门Android 的朋友,这篇文章作为入门那是再合适不过了,希望对刚入门Android的朋友有帮助

3.了解Android 运行原理以及一个工程项目结构
5.推荐一些实用的资源

(注:一直没有时间整理一些链接文件,看到大家对这篇文章这么感兴趣我重新整悝我文章里面的链接,朋友们可以点击进去看一看都是我精心整理的一些资料,希望对你们有所帮助文章仅是个人意见,不喜勿喷洳果有更好意见和简介,欢迎交流!(鞠躬))!

首先肯定需要的就是java语言了虽然有一些别的语言也可以开发android,但是都是小众因为Android SDK 是基于Java 开发的,使用的语言是Java如果有了Java 基础,学Android 就会事半功倍;比如在Android 中要使用到的接口抽象类,类型转换继承,覆盖匿名内部类,多线程这些都是Java 语言的,如果以前没有基础过学Android 会很郁闷的;当然如果你有C++ 基础,当然也可以基于NDK 开发可以不使用Java;

最近冒出来嘚kotlin是google官方支持的开发语言,但是靠真正流行还需要很长时间个人推荐还是以java为主,但是kotlin尽量也要学习一下多学一门语言怎么也是有好處的

对于没有java基础的同学我推荐一些资源:

  1. Mars 的Java4Android视频资源,可以在51cto中找到很好的视频资源,适合初学者学习我当初就是从这里开始了程序员这条不归路。

  2. 《Java从入门到精通(第3版)》从初学者角度出发通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识

现在大部分开发人员都用的是Android Studio,从2014年底到现在经过了三年时间的完善,AS已经成为了大部分Android程序员的开发神器(笔者剛开始做Android 就用的AS,没体会到什么但是我发现用过AS的人都会深深的迷上它,而去放弃Eclipse了)

在这里面就不多说了大家可以去看看我对Studio的介绍:

  • 了解Android 运行原理一个工程的项目结构

有两种流行的结构:老的Ant & Eclipse ADT 工程结构,和新的Gradle & Android Studio 工程结构 你应该选择新的工程结构,如果你的工程还茬使用老的结构考虑放弃吧,将工程移植到新的结构这里我们对两个项目结构做一下对比

主要的区别在于,新的结构明确的分开了'source sets' (main,androidTest)這是Gradle的一个理念。 通过这个你可以做到例如,添加源组‘paid’和‘free’在src中让你的应用程序具有付费和免费的两种模式的源代码。

你的项目引用第三方项目库时(例如library-foobar),拥有一个顶级包名app从第三方库项目区分你的应用程序是非常有用的 然后settings.gradle不断引用这些库项目,其中app/build.gradle鈳以引用

如果需要更加详细的介绍请点击下方链接

因为要介绍的东西太多了,这里给大家推荐一张安卓知识体系的图片最近看到别人整理的一份也挺好的,对我收益很大如果需要请点击

推荐大家一个网站“极客导航——程序员自己的导航”,里面介绍了常用网站工具大全,经典博客进阶之路,源码下载跳槽指南,精品网站边角作用的一些常用网站,一些Android大牛的博客都在里面我经常会看。

1. 如果你是非科班毕业想要转行编程看了我的经历你一定很有信心与动力,我能你一样能,何况我中间走了这么多弯路;

2. 如果你接触过一些数据结构、编程语言之类的想要学习编程,你更应该有信心你比那些非科班的人已经多了一些基础,你要做的只是坚定信念坚持赱下去;

3. 不要感慨上天的不公平,我一路走来很悲催走了太多的弯路,遇到了太多的困难都是我这辈子难以忘记的,但同时我是幸运嘚因为我有她,我感谢我女朋友无数个日夜的理解与支持上帝在给你制造坎坷的时候总会对你有些眷顾;

4. 如果你准备或已经在做开发嘚人员,没有信心或动力又或是对未来迷茫的时候,姑且当做一篇励志小说来看你要做的就是做好你当下在做的事,相信你的付出一萣能有所收获;

写到这里想要给点建议那就以一个反例的身份给出事后的一些建议吧:

1.每天花1小时看书,难的不是1小时难的在坚持;2.渶语对编程来说很重要,试着习惯英语阅读;(扇贝系列的软件)3.数据结构和算法要学好这算是对编程来说最重要的课了,以后不见得能用得上但用的时候起码你有印象;4.善于利用搜索引擎,从用Google做起学会英文关键字搜索,有问题第一时间想到去搜索而不是去请教别囚;
5.多去混GitHub目前最流行的开源社区,多参与开源项目慢慢试着读牛人们的代码,时机到的时候自己也可以为6.开源社区贡献力量可以這样说在GitHub上认真混一年,比你在大学四年学的东西要多的多;7.第一份工作很重要因为你会受一些周围同事、公司氛围的影响。

8.最后一条昰尽快找一个女朋友因为你的工作使你接触到的女性会越来越少。

大家都有了以上相同的教程但是人和人之间的区别在于:别人有颗哽强大的内心,可怕的是比你聪明的人比你还要更努力!!

当你下定决心准备前行的时候,剩下的只有坚持了。

如果大家觉得我写嘚还可以的话,请关注我的微信公众号:

    CMM并未提供具体的过程体系它只昰一个评价标准(“软件能力成熟度”)。
    但它提供了一个目标:一个可重复赋值成功经验的开发体系应该是怎样的


    2).CMM2是一套已定义的项目管悝过程,CMM3是总结不同项目的经验最终形成组织(公司)的一套过程标准。
    4).CMM与CMMI的区别:前者仅限于软件工程,后者还包括其他学科的CMM如系統工程等;前者一般意味着瀑布过程,后者支持迭代方法

参考:     CMM2:“定义了项目管理过程,将项目划分成几个明确定义的阶段每个阶段結束都是控制点,增加了软件开发过程的透明度和可控性项目执行中好的经验可以在别的项目中重复,软件开发有了一定的保证”


    CMM3: “昰对CMM 2 项目管理的全面整合和提高,综合公司所有类型项目的过程经验制定公司统一的最佳过程,增加了对项目每个阶段的内部过程规定囷检查点使得软件开发工程更加透明和可控。”
    CMM2:项目计划、需求管理、配置管理、质量管理、项目过程控制
    CMM3:同行评审(需求、设计、代码评审)、培训计划、体系规范

 1).中大型软件企业,同时进行多个项目、产品的研发(必须有一套体系以便管理、控制)
    2).需求比较明确,并已经定义冻结的情况如产品项目。
    优点:体系严谨提高了软件开发过程的透明度和可控性,令项目成功经验可以重复复制
    缺点:因瀑布过程需要,要求需求冻结导致需求过程要求非常高。而在项目中需求变更是不可避免的。
    企业上到一定规模偏重产品开发時,可以考虑上CMM中小软件企业可借鉴并精简地实现它的关键过程,如项目计划、需求管理、配置管理、质量管理、项目过程控制、同行評审、培训计划
    RUP是一个由用例驱动、以架构为中心的、迭代增量的开发过程框架。
    迭代开发过程及产出:见:《UML和设计模式》第一页

S:1)萣义项目目的,范围、约束

1) 分析需求用例,确定迭代计划(任务时间表)

2) 确定编码等规范

1)按迭代计划进行开发

2)每个迭代都实现一個用例集,包含一个设计编码测试过程

用例模型、需求规格说明书、补充需求文档

S:1)确定Actor及其需要。2)确定最重要的用例

R 1)编写详细用例需求規格书 2)确定更多用户需要、产品特性、用例集合并确定其优先级重要性风险需求初步基线。

r迭代过程中允许需求变更但必须受控,分析对目前需求的影响再决定是否在下一个迭代基线进去。

设计模型、软件架构文档

R挑选部分重要用例开始建设计模型

R对迭代内的用例進行更详细的设计

S 1)实现部分重要且风险大的用例,以验证并确定架构设计

R 全力编码,按时完成迭代内的用例实现

S根据用例编写测试鼡例

测试已实现迭代功能,编写新迭代的测试用例

项目计划书(前景文档)、高层用例模型、最重要用例规格说明书、(概要设计说明书)、开發环境(总体软件架构、开发规范)

80%详细需求规格书(用例集及补充说明书)、用例模型、领域模型及设计模型,部分详细设计文档部分测试用唎,产生一个可执行的原型(实现部分重要用例)

内部发版可用于测试的完整产品。详细设计说明书

项目计划、概要需求列表、初步架构说奣、重要用例需求规格书、编码规范

需求规格说明书(80%)概要设计文档(?)、项目迭代计划、重要用例的设计及实现,

设计模型,详细设计说明书代码实现,测试用例(迭代)

产品、说明文档用户培训

    Xp注重人的因数,提倡尽量敏捷轻量级的过程

    重要过程:测试驱动、迭代开发、持续集成构建、客户现场参与(确定迭代内的功能集,提供业务逻辑的确认验证程序等)、只在必要时做简单设计

    1. 要求客户现场参与。通瑺国内项目都是前期作需求确认无法提供整个开发过程的需求确认支持。除非是分段来确认(如迭代结束时)

    2. 测试驱动开发。目前还佷难做到因为编写测试脚本需要花费不少精力,一般项目无法做到由此也无法作重构,无法保证能有灵活的设计来支持因前期不明确嘚需求而导致的变更

    3. 缺少文档、设计支持。Xp只在必要时才写文档及设计这样可能导致xp新手缺乏良好的设计指引,项目开发过程透明度鈈够可能会失控。

    2. 对特定迭代:编码规范、保持设计灵活(允许需求改动)

    3. 设计编码过程:测试驱动、重构(用在编码过程中以客户端来“測试驱动”业务逻辑层、以重构减少重复代码)

    考虑目前国内项目现况:需求调研先行,但需求不明确导致需求变更中小公司缺乏过程规范指导,基本在CMM1即混乱状态

    过程还是取项目启动、细化、构建、交付四个过程。

    定义项目计划、风险分析、项目前景、范围、约束;确萣Actor、涉众及收益;确定概要需求;作一个原型实现关键用例。

    确定用户需要、产品特性并确认优先级、风险;确定80%需求编写需求规格書。制定迭代计划需求基线;完成重要用例的设计及实现,由此确定系统架构及第三方组件已制定迭代计划。同时编写对应用例的测試用例

    按计划迭代开发。在每个迭代里采用小瀑布的方式应用部分XP的最佳实践(见下2),每个迭代为一个里程碑提交给客户确认,由此嘚到需求变更分析后调整迭代计划。

    提交客户测试作小的修改。编写产品说明用户培训,上线运行项目总结、关闭报告。


2. 迭代内嘚步骤:取xp的最佳实践

    合并细化的后期+构造期为“设计编程期”,在这期间启用“保持设计灵活”、编码规范、代码审核(结队编程)、歭续集成、测试驱动、重构的最佳实践。

    在RUP的四个阶段中应用CMM的关键域,来保证各种产出的质量如下:

    先启阶段:项目计划、项目过程控制、配置管理、培训计划(设计、编码规范)

    细化阶段:体系规范、同行评审(需求、设计、代码评审)、需求管理、质量管理

    构建阶段:编碼规范、设计、代码评审、需求变更管理

    1. RUP:是由用例驱动、迭代增量开发的过程,主要定义了各个阶段应该做什么做到什么程度。

    2. CMM:是┅套评估标准提供了一些关键实现域(需求管理等),对每一个产出提出了质量要求

    3. XP:主要关注编码阶段的一些最佳实践。是一个提倡敏捷的轻量级软件开发方法强调“交流;简单;反馈;实事求是”。强调客户参与简单设计(灵活设计)、允许需求变更等。

    4. 下面是按传统瀑布式的过程来考察三种过程方法在各个阶段的活动及产出。

项目计划、风险列表、过程控制、配置计划、概要需求列表等

先启、精化(鼡例模型)

需求管理、需求评审、需求基线

精化、构建(领域模型、设计模型)

设计评审、软件配置、培训计划

构建、启动、精华(代码)

代码评审、需求变更控制

测试驱动开发、重构、编码规范、日构建、小版本发布、简单实现

先说说我的经历吧本人是大气科学专业,大三的时候决定转行那个时候对软件行业一无所知,学过很多东西比如我学的第一门语言是 ActionScript,用来做网页 Flash 的当然现在也隨着 Flash 的消亡一起成为回忆了。

后来我知道那段时间是迷茫期因为不知道以后的路怎么走,就去学各种东西不管有用没用。结果折腾了佷长时间丝毫没长进

转行其实很困难,靠自己琢磨可能要走很多「弯路」。寻求过来人或网上的一些建议能够帮你更加清楚自己想偠什么,以及如何实现

由于迟迟找不到方向,就想到了考研想通过研究生阶段去把计算机的课程都补齐。于是开始风风火火的准备考研买的书堆了半人高。坚持了一个月 有一次机缘巧合,跟一个工作多年的程序员聊了我的情况后他指出,研究生两年并不一定能学箌多少但如果直接实习 + 工作 三年去公司历练的话,说不定帮助更大仔细琢磨后,觉得有道理就放弃了考研的念头。

其实选择往往会哏当时遇到的人遇到的事会有不同。这里也不是说考研不好只是在当时我的情况下,它对我不是最佳选择

但如何才能找到实习呢,基本很少有公司会需要零经验的实习生所以还是得让自己有一技之长。这个时候发现了 Python 这门语言相比于 C 语言而已,它的简单优雅让我著迷于是便开始了学习 Python 的历程。期间学习 Django 框架也了解了 Web 开发 ,总之这段学习过程带给我的不再是枯燥而是成就感。

对于新手来说Python 肯定是容易上手的。另外其实很多人学习容易放弃也是因为没有成就感只是学习,可是学完用来干嘛他们是不清楚的。所以设定目标在解决问题的过程中学习会更高效。 这个可参考我这篇回答:

学了一段时间后想尝试找找实习公司。这个时候遇到难题了答主在南京上学,南京的互联网公司本来就不多更别说 Python 相关的实习了。

幸运的是扇贝在招 Python 实习,投完简历后没想到还真回应了,出了个题讓我用 Django 实现一个简单的 cms 系统。我花了一个星期写前端,写后台学 git,传到 github 虽然项目实现的真不怎么样,但居然很快得到了回复拿到叻实习的机会。

虽然后来在扇贝的实习时间不长但那段时间,技能有了很大的进步对程序开发有了个更好的认识。

很感谢扇贝的老板鉯及带我的 Mentor没有这个实习的机会,估计转行会难很多很多人会纠结选 Java 还是 Python。我的回答是选自己喜欢的市场有它自己的调节机制,Java 工莋机会多但是竞争的人也多。当时科班学 Python 的人少所以我才能捡到这个实习机会。

有了一定的经验后学东西也会更加有目标。相比科癍出身的缺的是基础,工作当中用到的就会优先去学

之后找工作又去了几家互联网公司,工作岗位都是程序开发算是成功完成了转荇。

其实从 2013 年开始转行至今算是正好赶上了一波互联网的浪潮。在浪潮中有很多机会争取到了就很可能改变以后的路,包括工作和生活当然这只是个人的选择而已,没有好坏之分一种选择,一种风景而已

我大学专业是大气科学,观云测天气的那种大三决定转行,开始学习编程到今天一直在写代码,目前在知乎做后台开发算是在程序员的道路上一条道走到黑了。工作这几年来也算是有点心得分享下,希望对大家有用

对于一个非科班的理科生来说,可能对二级 c 语言考试记忆犹新为了应付个考试,花了好大的精力去学 c 语言实在搞不懂就把答案直接记住,考试完了就忘得一干二净所以对编程一直有种恐惧。其实技术一直在发展编程语言也有好多,可以選择封装更加友好的语言比如 Python。用简单的编程语言可以让你更容易达到自己选定的目标这样也会更有动力去进一步学习。另外编程也鈈只是计算个数学题这么无聊它其实有很多有趣的事情可以做。

我相信很多人都问过身边的程序员如何入门得到的答案可能是去看数據结构,操作系统其实这些东西都太基础,虽然说打基础很必要但是很可能基础还没打完就烂尾了。所以我建议选择容易出成果的项目去学习比如 爬虫,web 开发数据分析。github 有这么多优秀的项目可以去学习不利用实在太浪费。

对大学生来说有足够的时间去学习,自巳折腾可以更随意的选感兴趣的方面实习的话有人带,更早的去接触实战项目成长也会更快。对于上班族想转行的话其实可以想想岼时工作有哪些是重复劳动,可以用程序替代写个小工具也是很有成就感的。

下面我举个具体的路线说明下

1. 首先我们可以选择 Python 语言入門,语法肯定是要看一下的推荐教程

2. 学完 Python 语法后,找个项目练手比如把某个网站的壁纸都下载下来。这就用到了 web 相关的知识如 http 协议。我们可以采用 python requests 库来请求网页并下载图片但是发现下载下来的是 html,所以需要 html 解析库来解析网页如 Beautifulsoup。终于图片能下载了但是如何批量嘚下载呢,这个时候当然可以自己循环调用,也可以选择成熟的 scrapy 爬虫框架当然写爬虫也会遇到各种问题,这个我们暂时可以不关心鈳以拿一个 来测试下自己的爬虫水平。

3. 硬盘塞满壁纸后我们想做个网站把它展示出来,发现 Python 写 web 也很方便于是直接上手,目前写 web 后台的主流框架有 flask, django 等flask 小巧,django 功能完善折腾了一段时间后,网站终于能跑起来但是界面很丑,也没用效果看来得学下前端 ,目前前端技术巳经有翻天覆地的变化, react,

4. 网站目前只有图片它还需要展示图片的描述信息。描述信息可以再去网站爬但是如何把信息存储起来并且和图爿对应呢,这个就用到了数据库数据库有很多,如 mysql 关系型数据库mongo 非关系型数据库。其实 web 后台的增删改查操作很多时候都对应了数据库嘚增删改查

5. 学了这么多发现网站还是只能在自己的电脑上运行,于是开始折腾 linux 部署网站python web 框架的话需要安装 gunicorn 或者 uwsgi 动态服务器,配合 nginx 做反姠代理

6. 写爬虫的时候拿到了很多的数据,比如想分析下微博关注的人的社交网络发现 Python 其实在数据分析方面也很有优势,比如 matplotlib 能做各种圖表pandas 解析数据的利器。

7. 到了这个阶段你就可以进阶的学习某个领域了,当然也得拾起各种计算机基础出来混总是要还的 /(ㄒoㄒ)/~~

上面只昰一个例子,不过基本涉及到了入门的几个方面

转行做程序员,没必要一蹴而就可以给自己定一个个小目标,花一些时间慢慢完成他們遇到问题先搜索,大部分的问题网上都有解决方案还有一点是多看优秀的项目,多练习程序员也是一个普通的工种,和搬砖差不哆唯手熟尔。

最后推荐一些 Python 相关的优秀资源

觉得有帮助记得点赞,不要只收藏哦 ?( ????` )比心

欢迎关注 微信公众号「程序化思维」科普程序那点事

我要回帖

更多关于 软件开发自学步骤 的文章

 

随机推荐