李运华,专注于Linux、MySQL、开源技术、系统分析、架构设计,有丰富的需求分析、系统设计、编程的经验,热爱技术但不拘泥于技术。喜欢挑战,从各方面不断提升自己。
CSDN:请和大家介绍下你和目前所从事的工作。
李运华:大家好,我是来自UC的软件工程师,已经在软件领域摸爬滚打10年了,先后经历了电信行业和互联网行业。毕业后首先是去了华为,做核心网的系统开发,做过软件工程师、系统分析师;后来换到现在所在的UC,先后做过技术研究、基础平台开发、社区系统,现在在九游游戏中心担任项目ladr。虽然说是ladr,但其实管理和开发的时间是3/7比例,所以至今其实还是个“码农”。
非常爱好技术,“精通”后端开发技术(C++、Java、Linux、MySQL等),目前正在学习前端,力争成为FSE;虽然很爱好技术,但并不局限于只在技术上提升自己,管理技能、综合技能等都在持续学习和提升。业务时间喜欢看书,经济学、社会学、心理学都有广泛的涉猎。
个人的梦想是能够带领或者加入一个团队,创造一个伟大的产品,大家也可以看到我的个人技能提升基本上都是朝着这个目标的。
CSDN:有着10余年软件行业经验的你,是如何一步步走上这软件开发之路的?
李运华:我来自农村,高三的时候才见过电脑,当时就体验过一两次,我还记得是dos的系统,虽然很难用,但当时就觉得很神奇,加上我高中毕业的时候正好是计算机行业最火的时候,于是就选择了计算机专业。
但是上大学后前三年并没有投入太多时间,基本上是玩(打游戏、踢球)去了,到了大四找工作的时候,也不知道是什么原因,感觉突然觉醒了,觉得自己想做软件开发,于是开始买了一些书看,看了《深入浅出MFC》后觉得很神奇,很有意思,于是后来找工作时就坚定了找软件开发的念头。现在回想起来感觉当时真是一根筋,测试、产品、运维等都不想做,只想做开发,即使面试不过也没有动摇:)
后来机缘巧合进入了华为,从此开始了软件工程师之路,一直到现在,都是从事软件开发相关的工作。
CSDN:你做过软件开发工程师、系统分析师、系统设计师等,能够回顾一下自己的职场晋升之路,有什么心得和体会可分享?
李运华:毕业后加入华为,先是做了大约2年多的软件开发工程师,后来加入系统组做了系统分析师(华为俗称SE,其实就是系统分析和设计),做了大约2年多后离开华为加入UC,一直从事软件开发的工作,先后做过技术研究(MySQL、Mmcachd等)、软件设计和开发,项目ladr工作,一路从高级工程师逐步提升到 工程师,并担任了项目ladr。
回顾我的提升之路,我觉得有几点可以跟大家分享的:
是“兴趣”。这也是我认为最重要的一点,一件事情做10年甚至做一辈子,如果没有兴趣的话,我觉得是很痛苦的。兴趣是本能的驱动力,有了兴趣,遇到问题会一直想着怎样去解决,而不是觉得“很难做”;有了兴趣,碰到一个新的东东会觉得很兴奋,而不会觉得是一种负担;有了兴趣,接触到一个东西后就像更加深入的去了解,而不是用过了就不管了。所以我认为如果想在一个行业(不限于软件行业)长期发展并有所提升的话,一定要问问自己是否有足够的兴趣。
我当时之所以换工作,也是因为我对当时的工作内容不感兴趣,因为我更喜欢亲手做出一个产品,而不是找一群人开会讨论然后写个文档就完事了。
第二是“坚持”。《异类》一书中提到一个小时理论,我觉得非常有道理,意思就是说如果你想成为 人才的话,一定要积累小时以上的训练和经验。特别是在软件开发这个领域,技术又多,技术更新又快,如果没有坚持去积累和提升的话,是很难达到一定高度的。操作系统、数据库、网络、编程语言、设计方法等都要掌握,每个技术点又有很多更细的分类。以编程语言来说,C、C++、Java、PHP、Python等主流的都有10来种,每个语言继续深入的话又有很多内容,例如Java可以列出来的有JVM、IO、NIO、网络编程、反射。。。。。。等等。所以这么多的东东,短时间内快速入门还可以,但如果说21天就精通XXX,那是不可能的,必须经过长时间的积累。其实我现在都不敢说我精通什么,只能说相对周围其他人会精通一些。
第三就是“方法”。掌握正确的方法,能够让我们事半功倍,更快的提升,一些常见的方法我就不啰嗦了,这里特别分享 秘方:
一个秘方是“写博客”,注意这里不是“看博客”,也不是“转载博客”而是“亲自写博客”。哪样东西你觉得你比较懂了,那么你就写成博客。当你真正去写的时候,你会发现,其实还有很多不懂或者不清楚的地方,这样就会促使你又去学习研究;当你的博客发表后,其他人除了能够从你的博客中学到东西外,也能够帮你发现一些问题或者错误,这样你就更进一步的掌握了;
另外一个秘方就是“链式学习”。形象点说,就是你抓住了一个链条的一个链,然后慢慢慢慢把所有的链都拉出来。举一个很简单的例子:socktsvr编程。很多人在编程的时候,都是去搜索引擎搜索一下“socktsrvr样例”,然后对照样例很快就写完功能了。然后呢。。。。。。很多人没有然后了,完成任务就不管了。其实这样做就错过了一次提升自己的好机会。
“链式学习”则不一样,它是这样做的:我通过搜索引擎搜索到样例完成工作后,我会问自己很多问题:样例中的api每个参数都是什么含义,有哪些注意事项,还有其它API么?为了解决这些问题,我就可能去找本书看,某个编程语言的sockt编程;看完以后我知道sockt编程的全貌和一些注意事项,而这些是通过搜索引擎搜索的样例中没有的;知道sockt编程的全貌后,我又会问自己:操作系统是怎么做的呢?那我又会去看《UNIX网络编程》,看完后我就对操作系统层面的又掌握更多了;看完《UNIX网络编程》后,我又知道sockt是和tcp/ip相关的,那我又会去看《TCP/IP协议详解》。。。。。。
这样去做就是一条学习链:socktsrvr编程-sockt编程-UNIX网络编程-TCP/IP协议,后面还可以继续不断拓展下去。如此不断的拓展和深入,一个很小的契机就能初始你学到很多东西,而这些东西在以后的工作中某些时刻就派上用场了。
我之前在华为是在Windosw平台上用MFC开发,后来到了UC转为Linux平台开发,用这种方法,大约用了2年就熟练掌握了Linux平台相关的开发技术,包括Linux、MySQL、C++、Java、PHP等
第三个秘方就是“闭环学习”。“链式学习”适合于一组相关联的知识或者技能的学习,而“闭环学习”更适合业务、相互配合的知识和技能的学习。由于软件开发是需要多个团队分工合作的,所以绝大部分人都只负责整个系统或者全流程中的一环,这样导致很多人以为只需要将自己负责部分精通就可以了。其实这样不利于个人的发展,一个原因是自己负责的一般都比较窄,可学习和提升的空间可能不多,另外一个原因是很难设计整体上 的方案。
而“闭环学习”则不一样,它是这样做的:了解整个功能或者业务的全流程实现,涉及了哪些模块和系统,每个模块和系统主要负责什么功能,涉及到什么技术,性能怎样,有什么注意点。举一个我做个的HTTP的业务样例:从用户点击一个url开始,经过了浏览器-网络-CDN-Nginx-PHP-MySQL-PHP-Nginx-网络-浏览器, 呈现在用户面前。我开发的时候只是用PHP开发,但并不只局限于PHP本身,闭环学习就要求全流程中的每个环节都要去了解和熟悉,这样你就可以学到了“浏览器、Nginx、CDN、MySQL”等很多知识。
有的朋友可能会问:这样做有什么用呢?其实用处非常大,一个是当出现问题的时候,有了闭环学习掌握的知识和技能,你就知道哪些地方可能有问题,应该如何处理;另外一个用处是,当你考虑设计方案的时候,就不局限于PHP本身了,也许某个功能Nginx或者CDN或者前端能做的更好,用PHP实现反而很蹩脚。
CSDN:你对代码有着怎样的情感?对丰富的编程语言是否有什么特别的喜好吗?
李运华:我喜欢写代码,在写代码的过程就是一个创造的过程,我特别享受这种创造的过程,夸张点说:我就是我的软件的造物主,在代码里面我就是“神”,我可以设计我的作品,实现我的作品,改进我的作品。
对于目前丰富的编程语言,我没有什么特别的爱好,对我来说,编程语言就是一个工具,用来实现业务目标或者自己的想法。每种编程语言都有特点和适用场景,哪种语言更适合我的需求我就用哪种,不会执着于用1门语言来包打天下。我先后用过C、C++、Java、PHP、Python、Ruby,现在在学前端编程的JavaScript、Coffscript,也北京白癜风治疗的医院在哪里北京看白癜风好医院