快速上手软件项目经验分享

做了程序猿快10年,特别是应用方面,做过的项目也不少上几十个了。用过开发语言也不少,从以前流行c/c++开发硬件,asp开发管理系统到现流行在java开发Android,php开发服务器,还是一些Python,javascript,VB,C#等等。其实开发语言有他们相同之处和不同之处。不过现在不是讨论各种的语言优缺点,而是在这10年里面总结了一些快速上手软件项目一些经验,对一些新手在刚进职场特别有用。

近几年经常听到人家说中国社会是个浮躁的社会,我觉得不是近几年,中国一直都是这样,也是中国国情造成的吧。技术版权的保护不够,特别是以前,谁的做的软件在市场反应好,就有一大堆公司去抄。特别指出的有家叫”T”的公司,抄的特别厉害,最近好了点懂的收购。除非你做一些无法抄袭的东西,别人无法超越,不过这种可能性几乎为0,换句话说技术来致富的可能性几乎为0。说这些不是批判社会,是为了程序猿更好在这种环境更好的生存,顺便说明一些在这种情况下,软件现实情况。至于软件情况是百分之九十以上的项目是没有业务流程图和设计文档,更不用说程序流程图。程序多半是1个人负责,程序注释又少或没有。如果这个人或团队离开公司,基本接手的人都很苦B。而且公司一般是业务为主,业务个性一般浮躁,整天会催技术,技术把持不住的话,会用一些极端的方法去解决bug。对于新手来说,进入公司不可能给你从0-1开发项目的,而是给个项目给你跟进,修改bug,增加小需求等等。在业务的催促的情况下,就需要快速了解项目或快速修改bug增加小需求,增加新手的程序猿生存几率

下面是这么多年总结的几种方法:

1.   可视化查找法

可视化指能看到能摸到的东西,如Android,IOS手机,平板,电视都有自己屏幕,之前做打卡机采集器有数码管液晶屏,遥控器有按钮等等,更不说后台管理系统,网站,服务器的可视化,说明比较热门的软件有可视化部分。人对可视化部分特别敏感,所以接受和学习能力特别强。

这边以Android app项目做个例子:

正常来说肯定是入口Activity onCreate出发,Java面向对象,写的程序可读性比较高,上手会快一些,但是每个人写法不一样而且现在很多做c转去做java,就会把程序写的很蛋疼。而且一般项目至少有10几个activity,再衍生10几个view或其他逻辑,整个项目就比较大,从入口开始看起就时间会很长,而且项目一般常用的就几个activity,这个从可视化入手来了解整个项目是最好的。

如我自己开源的项目(http://git.oschina.net/newpoyang/D2Player)中:


有5个activity,字面上看BaseActivity类库,然后从AndroidManifest.xml中查到入口OpeningAnimationActivity,基本上可以排除,可能就2分钟的事情,打开程序后会停在点播界面


现在你有2种方式去找到这个界面用到activity

(1)从图片着手:你会猜测影片图片是可变得,应该很难找到对应view,其他都地方UI都好像是文字加图片,就右上角是比较特别,然后查找res文件里面,会找到几个名字很像ic_action_search_xxx,


然后用eclispe查找ic_action_search查到下面


在另一个叫selector_action_search资源的文件里,在以selector_action_search查找到布局文件navigation_bar_dz_demand


再查,最终查到在VodMainActivity,然后再去看点击方法等其他可视化操作的代码迅速了解项目

 

(2)从文字着手:界面中你会看到“电影”,“热门”,“15个结果”这3个文字UI,点击“电影”,“热门”会弹出子菜单,也许这些可变化,然而“15个结果中“的“个结果”,应该是固定的,尝试去查找这几个字,在String文件找到


再以results去查找

再查,最终查到在VodMainActivity和原来是引用result_default,然后再去看点击方法等其他可视化操作的代码迅速了解项目


 

1.  函数(方法)体忽略法

有些新手喜欢把整个项目的每个函数(方法)都看明白,这样是来不及。所以我们需要忽略函数(方法)的里面代码,根据函数(方法)名字,上下文,遇到真的不懂再进去查看,也许看几行和根据上下文,你也许明白它的意思,然后回到上级调用方法,这样效率会很高。

以VodMainActivity.java举个例子:

OnCreate下

(1)方法initializeHander()字面上理解是初始化handler,初始化的时候暂时没有用到,要找到sendmessage等方法才会调用,暂时跳过

 

(2)方法initializeView()字面上理解初始化View,比较明白,但是进去看一下

createIndexTypeListViewDialog(context);
mViewMyProgressBar =(ViewMyProgressBar) findViewById(R.id.progressBar);

是UI的初始化,暂时跳过,当了解UI的时候才去查看

 

(3)方法initializeComponent(),字面上理解是初始化组件,字面上不是很明白,是需要进去看一下

TAG =getClassName();
     
//网络判断
if(!NetworkUtils.isNetworkConnected(context)&&
            !NetworkUtils.isWifiConnected(context)&&
            !NetworkUtils.is2G3GMobile(context)&&
            !NetworkUtils.is4GMobile(context)) {       
<span style="white-space:pre">	</span>adviseConnectDialog(this,R.string.alert_title_wifi,R.string.alert_message_wifi);
<span style="white-space:pre">	</span>returnfalse;
}
     
//获取屏幕尺寸
DisplayMetricsoutMetrics = new DisplayMetrics();
this.getWindow().getWindowManager().getDefaultDisplay() .getMetrics(outMetrics);
screenWidth =outMetrics.widthPixels;
screenHeight =outMetrics.heightPixels;


是网络判断和获取屏幕尺寸,从而理解initializeComponent()是就做这2个操作,至于网络判断和获取屏幕尺寸是怎么弄,以后再看重新回到onCreate。

 

(4)gotoInitialData(),字面理解初始化数据,需要进去看

mUIHandler.sendEmptyMessageDelayed(MSG_GOT_DIVICE_GO_AND_INITIALIZW_DATA,500);

调用了handler,现在才去看initializeHander()即可,最后不断忽略,结合上下看,项目应该的主线程应该很快就看懂

 

总结一下:其实这2种方法只是入门的一些小技巧,其实勤动手,多打log,看文档才是做程序的重要前提。还是该文章只是想分享一下自己经验,没有其他用意,如果有问题可以直接联系我


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值