title: "致工作室的一份信"
date: 2016-03-27 23:21:35
categories: 闲情杂记
tags:[闲情杂记]
外加最近换了工作去了一间外包公司,接触了点的东西,感觉跟现在的工作室很想,心里很有感触,趁热打铁写下来。
工作室相当于一间小型的外包公司
为什么说现在的工作室相当于外包公司呢?了解了现在所处的公司的现状,感觉就是很像。怎么像呢?
领导人(ceo
)为技术出生(老甘博客)。技术出生的人一般都有什么特质呢?
个人认为,对于一个款产品的敏感度不够。往往不会因为一款产品,去拿风投。更多追求在于用技术来解决问题。出于这种思想,创业的选择更多的为一间外包公司。
回头看我们的工作室,你发现由于历史的原因,传承下来,血液里的领导人一般都是技术不错的负责人。
那么最多也是负责人像而已,怎么是一间外包公司呢?
因为每当老师的项目一来,或许外面的人慕名而来请求合作的时候,我们就充当了一会外包公司,帮他们完成需求搞项目。简单的项目可以很快的赚点小钱,困难的话进行衡量后,看是否自己能够接受挑战,解决一些技术上的难题,对自己以后也是很有好处的。
最后一点,虽然现处的是一间外包公司,除了帮别人搞外包意外,还是有自己的产品的。领导人倡导的路线是从外包公司为突破口,慢慢积累后进行转型。(这里引用他的博客所见)
像腾讯,像网易,他们早期都是帮中国电信做一些小的项目去维持,积累下来,包括UC浏览器,也是帮电信做项目而逐渐转型的。技术创业之技术外包,让技术卖出价值
而工作室呢?也帮别人搞项目,也有自己的产品(走进韶院)。
个人觉得走这样的一条创业之路,像他说的那样比较靠谱,资金流丰富,能够自己养活自己。可以给兄弟们足够多的、短期的工资和奖金。
如果工作室处于这种状态,那我们需要注意什么呢?
- 打造属于自己的类库,减少重复的工作。做多了项目的人会发现,核心是不变的,变得更多的是界面部分,那为什么不进行封装,供大家一起使用呢?以后做其他项目就可以直接引用,而不必要进行粘贴,复制。
这里我会牵一个头结合最近当新人中使用公司的类库进行打造一个,欢迎大家加入。
继续说说类库这些事?
其实:我这里的类库并不是简简单单的几个工具类,或者一两个酷炫的自定义view这么简单的。这里的类库相当于自己搭建了属于自己的开发框架。怎么使用缓存(内存,磁盘),网络框架(原生,还是为
retrofit
封装多一层?)。这时你将成为一名设计架构者,只要架构好了,以后别人用你的开发框架去完成对应的事情,想想都兴奋。
开发框架需要设计什么呢?(结合最近所了解的)
网络层:你是使用原生的
httpUrlConnection
,还是现今比较流行的Retrofit
呢?
虽然提供了网络对应的处理类,但你要做的是对其封装多一层。如:设置对应的http头,timeout设置等,而不是直接使用act
类中直接调用,等。缓存层:内存缓存还是磁盘缓存(还需要设置缓存时间).
对缓存,多看一些开源项目的源码,看明白了,也就要回事,万变不离其宗。对于内存缓存
就像我们公司的,就是使用ConcurrentHashMap
来设置对应的键值对来缓存。而对于磁盘缓存
我们使用的是文件file
的形式,但这里需要使用到锁的知识,因为多线程操作的时候,需要对读写进行控制,公司使用的是:可重入锁ReentrantLock进行控制。线程处理:这个也很必要,基于android的处理机制,耗时的操作都不可以放在UI线程做。
那么我们就需要频繁的使用线程。
学过java都知道,对线程的创建是很耗费资源的,那么我们是否可以对线程进行回收重新利用呢?
当然也是可以:使用线程池。
或许,你会说我使用Handler
来处理的。
其实它的内部也是一个常驻线程,不断地向
messageQueue
进行读取,并执行对应的操作,而这个messageQueue
相当于一个请求队列。最简单的是否可以将Handler
添加一个static
,而不是在每个需要用到的地方进行new
一个出来。
这里扯到了请求队列,你是否考虑到一种情况:
多个页面进行网络的请求,如果不维护一个网络的请求队列的时候,多个请求在多个线程中执行而到了
cpu
执行结果是来不及处理完,而你却关闭页面或者跳转另一个界面,放弃了原先的请求。如果没有考虑到这种情况,没有及时进行放弃网络请求的处理,不单单耗费了资源,还有可能导致了异常。
- 其他:如一些基类,工具类,通用的适配器等。
你可以看到,这些底层的实现,全是使用java
(map集合,锁等),其实也就是这样,并没有你想象中这么复杂。关键是在于能否活学活用。
一旦搭建好框架,接下来怎么做。
- 对于老成员:
事物不断的更新,时代在变,人也在变。总有一种感觉,看回自己之前写的代码真是惨不忍睹。
所以,对于老成员需要做的事情就是重构。对于重构这件事,并不是重构一次就好了,而是不断的进行迭代,从1.0,2.0...不断的改变,不断的更新代码库,使用最新的网络方案?图片缓存方案等。
就比如:当初
ImageLoader
火遍了天下,每个都使用ImageLoader
进行加载图片,而今天却别fresco
代替,如果不跟上技术更新,难免会被抛弃。我们需要时刻保持灵敏的嗅觉。
另一种情况:鱼和熊掌不可得兼,对于多种图片缓存策略的选择:imageloader
,glide
,fresco
等,它们在针对不同的情况下,有不同的优点,而你是否对这几种缓存方案进行兼容,是否使用工厂模式进行封装来应对不同的需求?
- 对于新成员(这是进入工作室后就必须做的)
最近我也是新人。做的工作就是熟悉最新现有的开发框架,并进行重构他们的1.0
版本的甘豆影评。这个应用比较简单:就是一个电影列表页,点击进去为对应的详情,可以查看评论,图片的剧照,可进行分享,第三方登录等。1.0会使用比较老的listview
,现在要使用recyclerview
等。需要做的是:使用现有的开发框架(2.0
)去重构这个app。有问题的话,就及时提出。通过这个项目进行上手,熟悉开发框架,为以后其他项目的开发做准备。
结合工作室的情况,对于刚进入工作室的成员,可能他们在第三轮的时候使用的实现方法参差不齐,而进来后就必须进行规范,所以个人建议就是使用工作室的类库,去重构他们的项目,来达到目的。
这样做有什么好处呢?
- 可以很好的对接项目。
对于新的小项目(老师的项目),在老成员的眼里,或许就是该几个界面的事,没有什么技术含量,但是却免不了所耗费的时间。个人觉得不如将这些时间放在重构或者提升自己的能力上。
我们需要将这些事交给新成员去做。在眼中认为简单的事情,在新人的眼里或许就是挑战,用心去做,让自己更加熟练,是一种提高。并且还可以得到相应的报酬。(回想当年,第一次拿到资金上的报酬,还是很让人兴奋的。)
- 学习的重心进行转移
从一个使用者转化成一个设计者。就如上面所说的,把重点放在重构开发框架和提升自己的能力上。
不要小看这个开发框架,他需要很多的基础知识:锁,同步问题,网络问题,并发问题等。而这些相关的知识,上课也有讲:计算机网络,操作系统,设计模式等。通过复习这些知识,再到运用。这对于以后校招也是一大的准备工作。总之,就是有利而无害。
这里举个例子:
在使用缓存的时候,如内存缓存,是需要考虑使用
LRU/LFU
算法呢?如果不考虑算法,那么只会将使用的内存越来越多,显然不可这么做。
最后题外话
- 注重对新人的培养。选了方向,老成员为他知名明确的进阶方向。如:Android学习路线指南
这里再次建议大家去看官方文档,不要跟我说英文不好,都是借口。觉得这种技术文档,词汇量虽然会不常见,但来来去去就这么几个,耐心看,总是能看明白的。再不行,去看别人的译文吧
- 多看书。之前比较目光短浅,认为网上的资源这么多,博客,官方文档等等这么多,为什么还要花钱买书看。
自从花钱看了《APP研发录》后,深有体会到看书是缩短你去百度,谷歌的时间。看书或许不能说带你走捷径,但是可以带你少走弯路。相对于博客,很多的博客对于某个知识,他会以自身的学识为出发点,只针对自己不懂的做为总结和记录,(对于我而言就是这样),对于这种情况,可以说是被过滤过的知识了,有人看的明白,有人看很久才明白,还有人看不明白。而书的话,都是通过作者的精心编制的,不断的修改,做到详细到位,目的就是让所有人都明白。所以,建议大家多看看书吧。
最近一些工具的使用推荐
- postman
使用这个以后,以后对于网络请求,只需要在这里实验成功后,再到代码上集成即可。
- 马克鳗
设计图(按
xhpdi
图片)出来后,把对应颜色,控件的距离交个程序员去做,自己去测量,减轻设计者的负担,让更多的时间花费在设计和交互,考虑需求上等。
- 一个支持
ps
到处为对应android/iOS
图片格式规格的插件。Cutterman:免费的切图插件
这个也是减轻设计者的负担,这些工作都交给程序员做。也就一个插件,点击几下的事情。
最后说一句,看了不做然并卵。
以上仅仅代表我的个人观点,吸收好的,摒弃不好的。想一起打造这个开发框架,请跟我联系,到时组个群。