有朋友看了我的技术经历,对庞杂的技术感觉到很困惑,在此谈一下对技术的看法
有些朋友看到我这篇文章感到很困惑,怎么要学这么多东西? 原文:http://www.cnblogs.com/koolbing/p/3346158.html
以免对于工作经验不多的朋友造成不好的影响,我在此聊一下自己几点感悟
我之所以会有这样的经历,想来有几点原因
一,兴趣。
我在大学里是一个学习非常用功的人,同时对本专业有强烈的兴趣,在大学里c/c++基础十分好,这对以后的工作打下了坚实的基础,由于这种兴趣,为了弄明白很多技术上的问题,我曾在大学期间连续两年寒暑假没有回家,在大学一年级就加入了学校的软件园,并进行过为期二年的不间断php开发,因校园网是php做的。
因此,我对技术保持着持续的兴趣,并对开源软件有所了解。
二,工作需要
有些是工作需要,公司有时临时外接了一些项目,用到一些别的技术,有时候公司会给你时间去适应新技术的应用于,所以就只得干,尤其是工作早期。另外,在工作早期,经历过一些小公司,什么东西都需要你会,还有如果带领团队进行开发,就得懂一些项目管理,及架构方面的知识。比如有些老板买了erp软件是java开发,oa是php的,都有源码的,他想在上面加些东西,你给他这样的小公司解释技术问题是行不通的,还是那句话除非你不想干了。我想现在的公司应该比前10年的,前5年的要好一些吧,起码有些公司知道一些技术,是你干不了的。
三,生活需要
有很多项目是因为私活的原因,有些不错的朋友,觉得你是搞技术的,就给介绍了一些项目,结果有些项目人家已经存在了,比如我所接触的一些小的电子商务商城,有java开发的,有php开发的,有.net开发的,而你又想赚这个钱,所以就不得不去了解这些知识,你的朋友也不懂技术,什么php的,所以这也是一方面原因。也比如有人找到你,想开发一个Android手机应用,并且价格有诱惑力,你干不干?还有类似的,天猫商家接口之类的私活,想赚那点钱,人总不能被尿憋死吧,以我的经验,不要被技术吓倒,真正去了解的时候,并没有想象中的那样难,原理都那样。
四,关于技术
技术其实都是相通的,比如我学习c/c++网络编程,进行基于tcp的socket编程,以及web编程,其原理都是一样的,无非是socket是点对点(端口对端口),web其实也是点对点的,只是浏览器是一个点,服务器是一个点,无非是你把请求(依据一定的数据格式,我们请求报文)发给他,他得到你的请求,解析一下,通过程序或web服务器(apache,tomcat,iis或自定义的)封装一下,处理一下, 他把响应特定的格式数据或html形成响应报文,这样点对点就通讯了。这样一理解,什么asp,php,jsp,asp.net的原理都一样,只是他们在封装请求,服务器处理方面有所不同,这样你只需要学习一个html技术,前端就搞定了,因为html不管什么技术都一样w3c标准。
再比如,关于mvc不同的平台有不同的实现,模式都是一样的。struts2中的标签式导航语言,php中的smarty及YII phpmvc, asp.net mvc3.0中的razor,其实原理都是一样的,因为前二项技术我早接触过,所以看到asp.net mvc的出现简直是理所当然,甚至很多语法都和struts2一致,比如关于model的获取,struts2放到valueStack, asp.net mvc放到viewBag中,同样的把整个页面当中的表单值映射成一个model,从而以对象形式封装在服务器端处理,几乎一模一样。
再到java mvc中的spring,hibernate 到.net的Nspring, Ninject, Moq,EF,Linq(不要以为linq是.net独有的技术,这个思想早在java中实现了,微软只是整合了更多功能),像类似.net lamda式的链式编程,早在jquery, struts2中的标签语言出现过,只是.net又牛逼了一把,把它整合到基础语法里面去了,这些技术一路看来,其技术路径几乎雷同,都是通过配置,依赖注入,ORM映射,对象查询,只是在不同平台的不同实现罢了。在平台上并没有高下之分,特别是.net在前人的基础上,做了很多简化与优化,使用起来更方便,如果你使用过java的话,j2ee大量的包,.net框架也基本上与其保持一致,尤其C#语法与java语法相似度达90%,尤其是基本类型,集合类型,泛型基本上一致,难怪曾经的sun公司要和微软打官司。其实你只要学习一下,接触到另一个简单了解一下异同,就可以上手了,当然要深入学习,一门技术没有五年时间,是不能称为精通的。
再如,如果你搞过linux,其无非是通过命令行来操作指令,和windows上图形操作一样,当然你也可以通过windows上的powershell,vbscript脚本来编写命令行,如果你深入学习过操作系统,其实本质上不会有什么高下之分,他们都有核心态,用户态的概念,在技术上,看来并没有什么高下之分。如果你愿意,你可以你在电脑上装个虚拟机,弄个什么centos,练习一下。多玩玩,习惯了就好了。
五,关于我文章中所提到的技术的层次
对于我经历中涉及到的技术,就我掌握的程度,我分为精通,熟练,了解 已经在原文中加以说明
本人并没有炫耀技术的意思,反而有些得不偿失之意,因为我曾经在学习这条路上时间消耗的太多了。之所以有这样的经历,这样说吧,和兴趣,工作,生活压力及钱有关。如果你身在专业的大公司,能保证其万年不倒,那只学习一种专业的技术,把它整成技术专家也行,只不过不是每个人都有那个机会。
其实顺其自然就好。没必要强求自己,有机会就上,有些技术没有想象的那么难,话说回来这里有一个时间成本的概念,看你的所得值不值你去付出,这是因人而不同的。
其实技术只是你生活的一部分,不是你生活的全部。