• 我的技术历程(下)


    招聘后端(Java、Php)前端、数据库等各类人才(开发经理、架构师、开发、DBA)

     

    (四)大学的时候

    接上文。在大学的时候有各种各样的社团,出于对做网站的喜欢,当时加入了一个网络社团,想学学做网站的东西,当时对社团里面会动态语言做asp网站的人钦佩的不得了,于是回家买了一本asp的书:

    A191

    我真正的启蒙书,当时我室友也是会一点html和静态网站的,他看了我学asp就说你不要尝试了,这个很难学的学不会的。后来我还是没有放弃,坚持照着书上的例子做,大概几个月的时间我发现居然会用asp做一些小系统了,由于和网络学会一个学长关系比较好,于是他拉我和其他几个学长一起“创业”接一些外包的小网站来做,当时我们这个小团体有美工而我就是程序员,用asp或php技术来做一些网站,比如什么旅游网站啊,什么小的购物网站。后来我自己也做了一个自己的个人网站,叫《随缘居》域名也是suiyuanju.com,现在早就不在了,然后写了一个系列文章叫《十天学会asp》。我觉得自己学习asp的经历是比较痛苦的(没有人教),后来学会了之后发现asp其实也就是几天就可以学会的东西,特别最开始的开发环境搭建自己摸索比较痛苦。虽然现在回头看来比较小儿科,但是这个系列文章当时好像在网络上火了一把,有人说好,也有人骂,说是如果所有人都像你这么搞的话其它程序员都要失业了,当然也有人说浮躁,怎么只说怎么做不说原理,说实话在这个时候原理我自己都不清楚。后来我又写了什么《十天学会php》《十天学会asp.net》(http://blog.csdn.net/byebye8742)(后来发现有网友把我的文章打包成了电子书,表示感谢)的文章,现在看看是肤浅的一塌糊涂,当时我觉得这些都差不多,无非就是几大重要对象,知道怎么访问数据库,知道怎么从表单获取值,知道怎么把内容输出到页面就掌握了动态网站的开发,没有任何oo概念的。

    2003-2004年的时候sql注入好像比较火,当时在自己的网站写了这么多文章也发布了一个论坛(开源的随缘论坛)程序,后来自己的论坛被别人sql注入了,那哥们说就你这个技术还开源论坛。后来我研究了一下sql注入,发现我的论坛程序在get的地方考虑到了类型转换,但是post的地方忽略了,我意识到一个很大的系统只有有一个地方有注入漏洞,整个系统都可以攻破(如果一个数据源的话)。回去之后我和寝室的某geek讨论了一下sql注入,没想到几天后这哥们居然告诉我我们大学的某个系统居然有sql注入,再经过几天的研究后我发现,除了这个系统,甚至还有教务处等系统等也有注入,犯的错误和我一样,post的地方可以注入,特别是那种次要模块的post地方(比如新闻模块的搜索),导致整个数据库都暴露了出来,通过工具可以轻易了解整个表结构以及输出整个表的数据,甚至可以下载到表。经过研究之后,学校的大部分系统都可以顺利注入,得到需要的数据,当然还好当时没有用这些数据去做一些错事,也没有去改数据(要改分数甚至都很容易),否则可能就被开除了。被发现之后将功补过,帮学校做一些系统(比如学校的官网),在快毕业的时候代表大学参加了上海市第一届大学生网站设计大赛。3个小时的时间按照给出的命题做一个网站,去了之后才知道自己太诚实了,别人都是带u盘进去直接整合论坛新闻系统的,3个小时做出来的网站有论坛有新闻有聊天室?我和我那geek哥们做出来的网站只有一个新闻系统,在答辩的时候明显处于弱势。还好这个比赛评分有公开投票和评委投票两个部分,于是我就想了要么sql注入再来一次?公开投票是一个ip只能投一次的,我发现组委会的这个php系统也是有注入口的,于是通过注入上传了一个木马,可以改服务器上的任意文件,自己做了一个php上去刷票,刷票后我们的作品当然排名第一,没过几天发现另外一个学校的作品居然遥遥领先了!后来到后台一看原来那学校也注入了,我们两个“黑客”在后台碰面了,最后的结果就是组委会发现网站被黑取消了网络投票的程序。。。我们通过评委投票只拿到了第三的名次,不过奖品还算不错,一台联想P4的电脑。

    在学校的后两年读书倒不多,外面做了不少网站,赚了一点学费,黑了学校不少系统,最后也拿了一个小奖。

    (五)第一个阶段

    虽然之前有这些经历,毕业后找工作要想找到大公司的工作也不是特别容易,别人重记住,而我这些都是应用层的小打小闹。第一家公司用的是asp.net的技术,特别感谢师傅领进门,让我接触到了很多架构上的东西,刚毕业的时候总是学习最快的时候,那个时候开始喜欢上csdn论坛(http://www.cnblogs.com/lovecherry/gallery/21836.html),想的是如果自己能在csdn做一个版主是多么有面子的事情啊。第一年的时候虽然自己知道的也不是很多,在csdn努力回答问题,慢慢从三角(裤衩?)混到了星星(猩猩),通过csdn回答问题自己学习了很多,提高了很多,工作第二年的时候也就是2006的时候尝试申请微软MVP居然成功了,成为了一名ASP.NET的MVP,说来也惭愧现在看起来那个时候的技术还很差呢。在csdn混了一段时间之后有了4星,也申请成了asp.net区的版主(当时csdn叫lovecherry)。当时在csdn记得有几个像神一样的人物,一个是思归,一个是孟子e章,那些高手抢分都特别厉害,基本一个回答一个准,当时也就以他们为目标。在csdn一段时间之后,发现csdn的问题偏向于入门,于是去的时间慢慢变少了,在博客园注册了lovecherry的帐号,http://www.cnblogs.com/lovecherry ,一开始大概写的文章都比较实用吧,看的人挺多的,所以觉得分享是一件快乐的事情,可以和大家一起讨论,也可以帮助大家,慢慢喜欢上了写博客。总之,不管是泡论坛还是写博客,在解决了别人的问题别人表示感谢之后会觉得很满足,这也是一个非常巨大的动力。我技术发展的第一个阶段就是靠csdn以及写一些博客开始的,一开始论坛上可能20%的问题是自己可以解决的,后来发现80%的问题自己都可以解决或能找到解决方法之后,感到自己对搜索引擎使用的能力有了巨大的提高,写博客可以提升自己的基础,因为自己不掌握90%以上是很难写出博客的。通过csdn我获得了微软MVP,让我对社区贡献有了更大的责任感。

    image

    (六)第二个阶段

    到了第二家公司的时候,由于是MVP的关系吧,出版社联系到我想让我写一本有关ASP.NET入门方面的书籍,在经过了一些思想斗争和策划之后决定花半年时间来写,于是后来就写了这么一本《ASP.NET第一步》。由于是兼职写的,所以感觉写书的时候太累了,那半年基本除了上班都在写书。而且写书要求自己懂100%,那是比博客更高的要求,而且要有连续性条理性,还不能出现重大的错误。可以说写书是对自己技术的第二个阶段的重大提高。在这里想说两点,一当时为什么想写一本书是因为觉得自己的自学比较苦,技术上有很多东西是一点就透的东西,我希望让更多人通过我的书可以快步入门,很多东西自己琢磨可能需要几个月,但是如果看一本思路清晰的书有人手把手的话话可能只需要几周就可以入门,第二,由于时间关心和精力关系当然也由于水平的关系这本书并不是很满意的,写好之后编辑也说错别字实在是太多,有很多地方还虎头蛇尾,这里要和读者说对不起了。在此时此刻现在看来,当时写的书还是比较肤浅的,可惜现在没时间了,否则真的想再写一本书,我觉得现在可以分享的东西比几年前多的多。在写书之后,还和出版社合作参与过几本书的翻译工作,如果说写书是练技术的话,翻译书练的就是英语的阅读能力,我记得在刚翻译第一本书的时候是需要查字典的,一页纸的翻译大概在2-3小时左右,也就每走一步都很困难。到了第一本书翻译完成之后发现自己的翻译速度提高了好几倍,而且不用查字典了,当然后来再翻译了几本书之后计算机英语书籍的阅读速度就和中文的阅读速度差不多了,对英语资料的阅读从反感到了喜欢。国内中文的资料往往会慢国外英文的资料1-2年,这是因为书籍的翻译和发行需要这么一个过程,而且国内社区对技术的讨论没有老外这么多,所以我个人是很喜欢用英语关键字来搜索相关资料,也喜欢看英语的一些文档博客和书籍,我会推荐同事安装英语操作系统和各种框架,因为这样在遇到问题的时候系统给出英语的提示我们才可以直接搜到国外的资料,否则有的时候甚至需要把中文的异常信息再翻译成英语去搜索。在这个阶段的时候感觉自己的技术怎么说呢,在.NET这个领域基本可以解决大部分问题,但是设计上有欠缺,在一开始几年比较难理解oo的一些东西,从.NET社区来看也不像JAVA这块这么“先进”,有一点井底之蛙的感觉。在学习了设计模式之后,可以发现自己一下子可以理解抽象层和实现层这种继承实现的设计上分层的意义了,思想可以从纯过程化到使用OO语言到真正采用OO开发的转变了,有很多同事一直在说可以看懂OO的代码,但是很难自己写出这样的代码,我觉得这必定是需要一个过程的,通过设计模式的学习和阅读别人写的代码可以加速这个过程,但肯定需要一个过程。只有在重构中抽象,通过无数代码的改良过程才能体会出其意义。

    (七)第三个阶段

    在第三家公司的时候,我还是专注于.NET,但是这个时候开始看许多设计方面的书籍,也对各种经典设计模式比较熟悉,在OO上进行一定的实践。同时还在继续翻译一些书籍,对微软技术进行进一步拓展,紧跟.NET的新技术。并且,开始去了解和实践一些IOC、AOP、ORM,以及继续自己多年在SOA方面的实践。当然,在这家公司虽然在技术的广度上没有发展,但是另一个好处就是英语得到了进一步的提高,如果说以前是解决了只是阅读这一关的话,在一个纯英语环境下工作可以解决写和听说的关,英语的学习对于外国人来说从简单到难个人认为是读写听说,最难的也是实践最少的就是说。碰巧的是工作中合作的产品经理是老外,所以听说上有点长进,至少英语敢说,不怕丢脸就成功了一半了。

    (八)第四个阶段

    在第四家公司接触到了.NET之外的世界,觉得自己从井底爬了上来,没想到开源的世界有这么多东西,以前真是井底之蛙了,也注册了一个新的帐号就是现在这个 http://www.cnblogs.com/lovecindywang。在接触了.NET之后,又接触了Java、Linux、Python、Ruby,然后又接触到了比较火热的移动开发iOS和Android。发现很多东西其实是非常相通的,比如如果说ASP.NET MVC很熟的话再去接触Zend、Struts2、Rails没有任何难度,ObjectiveC中也有C#类似接口、委托、查询表达式等等一些概念。。。我觉得人其实是有一个舒适区的,比如一直在.NET这块就是一个舒适区,如果可以突破就会发现其实其他东西学习起来没什么困难的,因为技术上是触类旁通的,特别是理解了一些诸如编译、内存、虚拟机、线程等基础的东西之后,这些东西到哪个语言都是差不多的,唯一要学习的只是每一个语言语法层次的东西和API层次的东西。因为,我现在在学习一门新语言的时候,往往只会先花1-2天时间看语言特性,然后花1-2天的时间过一遍API,然后就是重点要看语言背后VM或说平台层次之类的东西,因为这才是这个技术最重要的部分,比如对于web语言来说,其内存模型,线程模型以及编译方式就很重要,这些基本的东西不理解很难把握住语言。在这个阶段的时候由于从一个框架的使用者到了一个框架的设计者和开发者,阅读了很多开源的代码,也会考虑参与一些开源的东西,此事我发现,如果说写博客是和国内开发人员一起讨论技术的话,参与开源项目那么就和国际接轨了,因为全世界的人都可以看到你的代码,当然要参与开源项目英语也是一个必要的铺垫。

    总结一下吧,我是通过下面的方法提高自己的技术的,在社区回答技术问题、在博客发表技术文章、写书翻译书、阅读开源代码参与开源项目,我一直觉得分享是一种很好的提高技术的机会。不要怕分享出去了别人会抢你的技术,永远不会,这个世界上山外有山,高人多的是,你分享出去的东西可以让人受益,同样也会有很多高人来给你的东西提意见,绝对不会因为分享自己丢了什么,往往是通过分享可以学到更多的东西。另外,从我的经历来看突破自己舒适区是一个很重要的事情,我以前面试过不少人工作了几年连最基本的一些原理都不知道,他们知道怎么基于别人搭好的SSH架构来做东西,但是甚至不明白什么是IOC以及IOC对于解耦上的意义。遇到过很多人总是抱怨工作环境学不到东西,我觉得是这样的,学东西要靠自己,工作环境只能说是有一个加成,比如说是有一个更好的平台来学习,而不能期望别人来教你什么。有的时候是先有鸡还是先有蛋的问题,自己的水平还不够好,往往就进不了大公司,自己水平够好了进了大公司往往公司又不能让自己学到什么,其实想想也对,别人给你工资是要你创造价值的而不是说要来教你什么,所以在一个环境学东西是靠自己的。

    最近两天在家整理了一下书橱,发现有很多书找不到了,也发现居然有一些书买重了(书重了,说明其确实是一本好书,在自己不同的阶段都会意识到需要再读,其中重复很多本的是自己翻译的,出版社送的样书,一般来说园子里的朋友写的书我都会买来看一下,一个是支持第二是知道书不会太差)。

    DSCN0024

    第一层都是一些.NET书,.NET的书买的真不少啊,第二层左边是其他的一些.NET书,中间是数据库相关的书,右边是C/C++相关书。

    DSCN0028

    第三层是基础类的、设计类的以及重构和方法学类的书籍,第四层是Java、Linux等开源技术的书籍,第五层左边是管理类的书籍,中间是前端开发的一些书籍,右边是移动开发的书籍。

    随着自己对技术的理解很多书从看不懂到了看得懂,也越来越发现基础的重要。对模式、重构需要有时间的积累,对任何一门语言来说先学好其特性再学其运行时的一些东西很重要,不能说会了ifelse和while就认为是会了一门语言。而且年纪大了之后,发现技术其实是成功的其中一个因素,也不是百分之一百重要的,正因为如此对待技术没有什么可以张扬的,人会越来越低调。我一直认为,我比你多懂一点只是自己多走了几步,没有什么可以炫耀的,不管到哪里教别人分享都是一件很快乐的事情,山外有山低调总是没错的。而且,对技术的心态也从玩技术到了用技术,技术要能用好才能发挥其价值,如果一味使用高端的不成熟的技术,虽然说很先进但是很可能造成项目的失败,把最合适的技术用在最合适的地方才是成功。

    此文送给我之前的同事,希望你们各自在自己的岗位上做出好成绩,和公司共同成长,也送给我自己,希望我之后的发展可以顺利。

    欢迎大家阅读我的极客时间专栏《Java业务开发常见错误100例》【全面避坑+最佳实践=健壮代码】
  • 相关阅读:
    (转)浮点数的存储方式
    (转)静态变量和全局变量的区别
    (转)RTMP协议从入门到放弃
    python: format
    Tornado web.authenticated 用户认证浅析
    Python时间,日期,时间戳之间转换
    Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed
    Python图像处理库:Pillow 初级教程
    Python练习册--PIL处理图片之加水印
    python中string模块各属性以及函数的用法
  • 原文地址:https://www.cnblogs.com/lovecindywang/p/2735704.html
Copyright © 2020-2023  润新知