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

一、选用技术的原则

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

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

偶写过的第一个实用程序是把一个法律光盘导入到数据库中,光盘源文件格式需要分析。数据大概几万条。一种方法是写程序直接导入,另一种方法是写一个界面,手工导入。偶选择的是后者。程序界面如下:有一个文本框,有一个大按钮,按钮有一本书那么大,这样设计的原则是让闭着眼睛就能够点中。让一个会灌水的哥们,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)远程调用

当前1/2页 12下一页阅读全文

(0)

相关推荐

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

    一.选用技术的原则 比较规范的软件开发过程要到有限的几个公司才能学到.偶现在所采用的方法都是圡方法,主程序员,测试驱动,文档和代码写在一起,原型.但基本上坚持几个原则: 在工作上以实用为主导,哪个实用学哪个,要以最小的努力获取最大的成效. 偶写过的第一个实用程序是把一个法律光盘导入到数据库中,光盘源文件格式需要分析.数据大概几万条.一种方法是写程序直接导入,另一种方法是写一个界面,手工导入.偶选择的是后者.程序界面如下:有一个文本框,有一个大按钮,按钮有一本书那么大,这样设计的原则是让闭着眼睛就

  • 谈谈新手如何学习PHP网络编程第1/2页

    文章开头就列举了那么多联系方式,难免会让大家感觉有点AD的意味,但是不容质疑的是,默默的确有那么丁点的表现欲^_^,虽然有时候过于细致会被人说婆妈,但是幸好这种细致对于编程来说,还是蛮有益的! 从默默自己向别人问怎么学PHP开始,到后来不少人又来问默默怎么学PHP,不管默默是新手,还是老鸟,似乎总是感觉摸不出一条清晰的脉络来,不过,默默既然学会了PHP,那么我走的这条路或多或少的有一定借鉴性. PHP的背景恐怕就不用默默赘言了,我相信大家选择一种语言,并不是看它的背景和悠久历史,更重要的是看它的

  • 中英文对照Stargate中的科学与技术

    Stargate 作为一部延续了十年的硬科幻,不仅继承了其前辈的"科学"体系,又有自己的创新和挖掘,其中涉及到的科学与技术涵盖空间技术.物理学.能源与动力科学.生命科学.计算机科学.哲学与社会科学等诸多领域,不仅满足了观众对新技术的猎奇,也在一定程度上透射出人类文明的发展方向,而这正是科幻的本质所在.本文作者作为SG系列的忠实fans,保持了平均每集5+遍的观看记录,在这里希望能够整理一下Stargate中出现的科学与技术, 并与传统科幻的体系和现实中的原型做比较,希望能够让更多的人了

  • 暴力破解FTP服务器技术探讨与防范措施分享

    大家通常会认为暴力破解攻击只是针对某一种FTP服务器发起的攻击,能具有代表性吗? 随着Internet的发展出现了由于大量傻瓜化黑客工具,任何一种黑客攻击手段的门槛都降低了很多,但是暴力破解法的工具制作都已经非常容易,大家通常会认为暴力破解攻击只是针对某一种FTP服务器发起的攻击,能具有代表性吗?可以拓展到其他的网络?或服务器上吗?答案当然是肯定的.暴力破解这种软件,使用起来没有什么技术含量原理就是一个接一个的试,直到试验出正确的密码,也就是破解成功了.不过这种破解方式成功几率不高,耗费时间多,

  • ASP缓存技术详解

    一.何谓ASP缓存/为什么要缓存 当你的web站点采用asp技术建立的初期,可能感觉到的是 asp动态网页技术带来的便利性,以及随意修改性.自如的http控制.但是,随着访问量的增加,你一定会发现自己的站点访问速度越来越慢,IIS重新启动得越来越频繁.接下来,你一定想优化asp,诸如更换性能更优异的数据库.建立索引.编写存储过程等等.这些措施有些不需要增加成本压力,有些则成本压力很大(譬如丛access到SQL),而且效果还不一定. 面对web访问压力,我认为最经济的办法是利用缓存优化技术来实现

  • 深入解析php模板技术原理【一】

    1.模板的由来 在没有模板技术之前,使用PHP开发程序,通常都是php代码和html混编在一起.比如说新闻列表,很可能就是一个newslist.php页面,结构如下: <?  //从数据库中读取出要显示的新闻记录  ?>  <html>  <head>--..  </head>  <body>  <?   While ($news = mysql_fetch_array($result)) {  ?>  <!--输出新闻标题  

  • 程序人生:做技术,切忌沉湎于技术

    [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些.那么,就需要慎重安排自己的轨迹.从哪个行业入手, 逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题.频繁地动荡不是上策,最后你对 哪个行业都没有摸透,永远是新手! [2]可以做技术,切不可沉湎于技术.千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上

  • Tab页界面,用jQuery及Ajax技术实现

    到了B/S开发时代,网页前端布局也把Tab页的布局形式吸收了过来.特别是和Ajax技术结合起来,可以更充分发挥Tab页的良好表现力和数据缓存的优势,是一种良好的网页布局形式. 网上的Tab页代码很多,实现也大同小异 ,但代码都显得凌乱,若要真的用的话,必须费劲的吃透它,才能进行二次定制开发,为我所用.实际上实现这个Tab页界面非常简单,仅仅是通过Ajax技术偷偷的获取信息,然后在一块区域轮流显示而已(通过显示和隐藏层,或复用一个层,轮流向里边填充Html数据). 自己的开发的代码自己最清楚,用起

  • 自动交换光网络分级路由技术的研究

    摘 要:路由技术是自动交换光网络(ASON)的核心技术之一.文章在分析ASON的层网络结构.路由结构以及路由功能部件相互作用的基础上,重点讨论了ASON的分级路由技术,包括分级路由的网络结构及其详细的操作步骤. 关键词:自动交换光网络:层网络:子网划分:分级路由:路由域 自动交换光网络(ASON)是下一代网络(NGN)的核心传送技术.该技术在传统的光网络(如SDH.DWDM.OTN等)的基础上,通过引入控制平面使其具有智能的功能,即光传送网能够根据用户的呼叫请求,在控制平面的路由与信令机制的引

  • 技术入股创业一年,家庭收入变成负5万

    一.技术入股的创业一年,家庭收入变成负5万 先说明,本人做技术出身,在外企的核心部门工作几年,总之一句话,技术通过朋友啊同事合作,基本上可以搞定.去年3月份跟一个人合作,对方投资100w,注册了个股份公司,本人占5%的股份,我个人没有实际出资,当时协商项目成功 后,吧股份转到我名下,去年5月份签订了我跟对方个人签订了一份协议,协议内容"某某无偿转让5%的股份给某某作为技术入股",并且刚刚开始我工资从6000开始(低工资,本人上班时工资1.5w),然后开始做项目,公司招聘了2个应届毕业生

随机推荐