谈谈技术原则,技术学习方法个人总结第1/2页

所属分类: 实用技巧 / 应用技巧 阅读数: 1378
收藏 0 赞 0 分享
一、选用技术的原则

比较规范的软件开发过程要到有限的几个公司才能学到。偶现在所采用的方法都是圡方法,主程序员,测试驱动,文档和代码写在一起,原型。但基本上坚持几个原则:

在工作上以实用为主导,哪个实用学哪个,要以最小的努力获取最大的成效。

偶写过的第一个实用程序是把一个法律光盘导入到数据库中,光盘源文件格式需要分析。数据大概几万条。一种方法是写程序直接导入,另一种方法是写一个界面,手工导入。偶选择的是后者。程序界面如下:有一个文本框,有一个大按钮,按钮有一本书那么大,这样设计的原则是让闭着眼睛就能够点中。让一个会灌水的哥们,ctrl + c, ctrl + v,不停的灌。文本贴过去,自动解析,放入数据库。左手alt + tab ctrl + c/v, 右手点鼠标,这样有节奏的运动。很快,几个小时就把数据弄完了。最初设计的一个文本框,一个按钮,很pp,但是老点不中。随即偶才把那个按钮做成老大的,就这一个改变,生产力提高了1倍以上。

工作,就要坚持这样的原则。要能够分辨出价值,找能够提高价值的去做。即使这样违背一般规律,违背技术教条。

学习上以简单,核心的东东为主。可学可不学的不要学。复杂的东西除非你想要成为这方面的专家,就不要学。偶还是举自己的一个例子,前一阵做GIS有需求,具体实现偶负责。预算很少。偶就定了开源GIS软件这条路,本来想用C#的,但没有好用的开源GIS软件,偶决定用java写。偶手下还没会java的。偶选择了一个开源lib,让一个哥们运行一个Demo,然后让他从那个Demo的main函数画函数调用图一直画到数据库调用。偶呢,跑去看GIS规范,然后他的图,结合偶的规范知识,很快就知道这个软件中间分了多少层,每个层每个接口是干什么用的,怎么调用。这个软件的优点缺点。然后体系结构,设计就出来了,然后2个java程序员,很快就做出来了。

二、技术学习的技巧

借着上面例子说说学习软件的技巧

要学一个东西,要学习该东西的两类知识:结构和细节。

结构性的东东非常重要.学习结构,就可以开始干事了,学习细节,能够把这件事情干好。结构不清楚,细节再好都不算了解。结构很简单,就是纵,横两条线。纵的来说,就是一个程序的执行,你得知道哪一步在做什么。以ASP.Net来说,就是从收到Request到返回一个页面,中间的调用过程,这是主线,再进一步,程序的加载->接收Request(->缓存,Session机制)->返回一个Page,这个过程清楚,Asp.Net也就差不多了。纵向一般是通过接口调用的,看源代码很快就可以搞定。

横向就是看看重要的接口,重要的抽象类有哪些实现,知道哪个实现用于什么地方,有什么优缺点。那么就算在结构上学好了。剩下的就是细节问题了。细节问题熟练自然很好,不熟练google都能google到,只是要花很多时间。这样学习我觉得是最有效的学习,不必去跟踪技术前沿,当一个技术在你眼前你很快就可以看出它的骨架,优点缺点,性能,至少能估计到大致的范围。这样慢慢培养对一个技术的悟性,做到举重若轻,知道什么地方可能有陷阱,什么地方可能有创新。把握住重点和脉络。

细节上就是不断实践,不断重构。一个有用的软件,不断提出更高的要求,不断重构,用不了几遍,几种重要的设计模式就了熟于心了。单为学习模式而去学习模式是不可取的。每个模式都针对一定的问题。深入理解这些问题才是学习的关键!技术是多种多样的,是变化非常快的,但是技术所要解决的问题却并不多。

从架构级别来说,所面临的问题主要有:(1)解决复杂性--如何把复杂变得简单?这里的观点就是封装,OO是一种封装,还有别的封装方式。《重构》书中讲了很关键的一点,就是要使你的类名,方法名能清晰表明它的身份和功能。(2)解决程序演化与扩展的问题--组合优先继承,怎么暴露API,怎么写文档,总之,让程序演化与扩展越简单越好;(3)性能问题--80/20原则,性能测试怎么测试,怎么评估,不同使用场景中的性能,缓存机制;(4)功能问题--主要功能总得实现吧,这个和业务有关;(5)易用性;(6)纵向扩展,横向扩展,并发......(7)自己开发还是采用第三方插件还是外包以及选择问题。

具体的学习,偶推荐问题导向,案例为基础的学习,不要拘泥于语言,要学习能学习到的最好的东东。比如,性能的关键在调度,这时候可以看看资源调度模式,hibernate算是把资源调度玩到了极致。基于事件的调度(如.net中的web cache),进程调度,线程调度,工作流,这些都算是行为调度,要是把这些东东融会贯通,掌握每一种实现的优点缺点。那么软件设计中所有和时间、并发、资源相关的东东都不在话下了。行为调度可以看看.net 中的cache实现,找一个工作流软件看看,找找几个线程框架看看,看看几个典型操作系统的进程调度机制。

具体到实现上,所面临的问题无非是:

(1)对象的创建及销毁;(2)对象的封装和继承体系;(3)对象的粒度和语义划分;(4)对象的复用;(5)对象的测试;(6)对象的持久化;(7)具体的API暴露;(8)常用Collections;(9)算法问题;(10)性能问题;(11)回调;(12)消灭语义沟;(13)我想要和你一起变懒......;(14)我能采用哪些API(15)对象的管理;(16)异步调用;(17)远程调用
更多精彩内容其他人还在看

Win XP系统语言栏丢失解决三例

案例一:   问:一台计算机使用Windows XP操作系统,最近任务栏内无法显示语言栏,我通过“区域和语言选项”里的设置找回了语言栏,重新启动计算机后,问题依旧,请问是什么问题造成的?
收藏 0 赞 0 分享

设计软件中的系统字体应用小技巧

大家都知道,在操作系统的安装目录下有字体库,要使用种字体首先需要安装,但是这会造成字体占用系统盘空间过多。设计使用的字体都不少,怎么说也有几个G,很占资源,下面教大家一个稍微节省资源的方法。
收藏 0 赞 0 分享

Access中字段上自动打开的输入法的解决方法

打开Access数据库时,在里面数据表字段输入数值时,总是会跳出输入法来,很是烦人,在网上找了一下,找到了相应的解决办法:
收藏 0 赞 0 分享

“internet explore 无法打开internet站点 已终止操作”的解决方法

在IE下,当页面还没有加载完全时,如果正在执行的JS代码中含有使用了document.createElement的话,很容易引起页面加载失败.导致提示"internet explore 无法打开internet站点 http://www.xxx.com/xxx/xxx.
收藏 0 赞 0 分享

十个习惯让你精通新的开发技术

这篇文章,是从我的《高效开发人员的五个特征》一文中抽出的一个观点。从我自身的事业和习惯中,我考虑了很多方式怎么样才能有效地学习。
收藏 0 赞 0 分享

小谈RADMIN爆破

最近做渗透测试时常碰到RADMIN一类的东西.. 一碰到此类的程序,一般我都会先看下对方把RADMIN的端口配置成什么..以及相应的PASS(加密过的)
收藏 0 赞 0 分享

动易2006序列号破解算法公布

动易2007就快发布了,把2006的算法公开吧,赚点人气,希望动易不要来找我 。
收藏 0 赞 0 分享

联众密码的逆向算法公布

闲来无事,每天上联众,联众的密码经过加密后保存在本地注册表里,看看是怎么加密的。下了个ollydbg,一路跟踪,发现算法极其简单,给出Delphi版本的解密算法(加密部分有兴趣的一起来讨论)。算法比较粗糟,谁帮优化一下:)
收藏 0 赞 0 分享

关于三种主流WEB架构的思考

做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都是相通的。这里说的WEB架构,是指WEB应用开发中每种技术独有的资源组织形式(包括文件,数
收藏 0 赞 0 分享

一篇关于程序员性格的文章第1/3页

软件开发中人们很少注意个人性格问题。自从 1965年Edsger Dijkstra的有里程碑意义的文章“程序开发是一种人类活动”发表以来,程序员性格被认为是合理的和有成效的研究领域,虽然有些题目如“大桥建筑者的心理”和“对律师行为的研究实验”看起来可能是荒唐的,而在计算机领域,“
收藏 0 赞 0 分享
查看更多