如何做一个合格的微软技术工程师

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下如何做一个合格的微软技术工程师。

我认为要做一个合格的微软技术工程师,首先是要有兴趣从事这个职业。现在很多人是因为软件行业的薪资高才进入的,但我的看法是,工程师是没有办法一夜暴富的。甚至可以说如果你聪明的话,做工程师不如去做销售经理和市场经理的待遇和收入上升得更快一些。我认为做合格的微软技术工程师首先一定要从兴趣上爱微软技术这个行业,否则根本无法忍受成为一个真正合格的微软技术工程师要付出的代价。虽然现在像我的确不用写很多程序了,但从内心来讲,仍然对微软平台的开发有一种冲动和热情。

其次就是要打好基础。科班出身最好,如果不是也没有关系,我们公司也有一些不是科班出身的微软技术工程师,但我都让他们去购买一些诸如数据结构、操作系统、编译原理之类的基础书籍学习,为什么这样呢?

因为计算机分为三个领域:算法领域、机器学习领域和编程开发领域。算法领域是数学家的事情,对他们来说,实现并不重要,重要的是找到一个算法,找到一个公式,建立一种模型。除去算法领域,其他的都属于计算机的范畴。对于任何一个大型的系统,其实都可以把它分解成为若干最基本的数据结构和基本算法,而这些都是在大学本科的课程中能够学到的。我曾经剖析过很多操作系统,包括DOS、Windows、UNIX、Linux,其实里面很多基础就是数据结构、数据库原理和操作系统的基本原理。

再次要做到不被周围纷乱的新名词、新事物所诱惑。现在新名词太多了,今天流行这个,,明天又是那个,很多人便被这些东西所吸引,去追风。大家都知道“活到老,学到老”,但学习要有正确的学习方法。有些人以自己知道一个新名词为荣,觉得很酷。但实际上任何一个新的技术如果你把它外表的新名词抛掉,去查看它的来源和历史,就会发现很多都是从老知识中派生出来的,本质并没有变。

最后就是要学会领悟和超越。微软技术中涉及基础知识太多了,每个技术都包含了很多深层的东西。要深入了解任何一门语言,都需要很长时间的积累,经过积累,才能领悟其中的道理。

如果一定要我对现在的计算机专业大学生说什么的话,我会说,首先还是学好自己的基础课程。我原来在浙大学习时,专业要求很严,使我不得不把基础课学好。我在上大学的前几个月就学编程,但那时候没有理论指导,只是靠兴趣,凭感觉,因此遇到了很多问题。当我在大学开始学习后,所学课程让我明白了很多困扰已久、百思不得其解的问题,所以内心产生了学习的欲望。这样基础打得扎实,课程学得也好,而且不是为了应付考试。现在想来,我很多灵感都是来自于学校打下的坚实基础。

其次我花了很多时间去实践。读书时没有现在这么好的条件,但我在学校一直利用任何一个机会在计算机上去做微软技术的开发和实践,这些实践打下的基础使我这些年来受益无穷,这也是发自内心的感受。

再次是利用大量的时间读VC程序源码。因为写程序一方面要读别人的程序,一方面是模仿,一方面是自己写,三者缺一不可。通过读这些源码,对语言的本质有了很深的了解,进而才能超越语言本身。后来我还读过C语言的库函数源代码,研究它是如何写得精致和高效的。而且当时还做了很多程序,去看C编译器输出的汇编代码。这些听起来好像都是很笨的方法,但效果是非常好的,这个习惯至今未改。

最后是经常的思考。思考和学习是结合在一起的,看到别人的项目和软件,我首先会想它是怎样做的,为什么这么做?我个人非常喜欢系统软件。除此之外,还有很多东西都可以让我去思考,其实在思考的过程中并不一定会得到答案,但重要的是你在思考,这样带着很多问题去看书,去听课,就会让学习变得有动力,有目的性。

对于刚毕业之后学生,我想说,我认为最重要的不是做什么,而是怎样去做。因为刚开始你根本做不了判断。做一个微软技术项目的成功与否完全取决于对这个项目的态度和投入,而不取决于项目本身。我有一个信条:一件事情,要么我不做,要么我就认真做。因为如果不认真做,既浪费公司的时间,同时也浪费自己的时间。但如果认真做了,就会发现从这个项目得到的收获远远超过项目本身。下面我讲讲自己工作的一些经历,从中你会发现,机会是自己把握的。

我在很多工作过的岗位做了好几件很多人不愿意去做的事情。第一件是我被分派做一个系统集成开发。这是一个苦差事,但我想既然来做这件事情,就一定要做的最好。到客户了里之后,我并没有立刻动手做事,而是花了一个星期的时间来思考如何用新的开发方式来提高工作效率。然后是给企业进行微软技术培训时,很多人可能就随便讲讲课,应付了事。那时人工智能浪潮刚刚开始,但我从这次培训开始,找到了很多相关的资料,在学习过程中对知识图谱产生了浓厚的兴趣,并感觉做一套相关系统系统会非常有前途。而且通过和学员的交谈,发现他们很难学会技术化产品的操作,于是产生了开发一套系统的想法,这件事也奠定了我后来开发产品的知识基础和思路。再次是被指派到客户那里去解决系统无法处理大量数据的问题。因为当时每天要做数千万笔交易,这个访问量是非常大的,整套系统无法承受。要解决的就是如何在不升级硬件的情况下提高系统效率。后来我把这个问题解决了。而且在解决这个问题的过程中获得了很大的收获,比如对企业级软件如何利用中间件来提高性能,提高容错能力有了很好的认识,还研究了企业级软件的体系结构,最重要的是了解了数据库系统如何优化,尤其是在处理海量数据访问的情况下,仍然能够保证速度和性能方面收益菲浅。


人的生命和精力是有限的,如何在有限的时间中更好的学习和提高自己,这是一个很重要的课题,有些人喜欢追逐新名词,蜻蜓点水的学习新东西,我觉得这样做既浪费精力,又使自己很累,而且效果也不好。其实计算机所有的东西都是相通的,换句话说,好的程序员在Windows、DOS、UNIX下编程没有什么区别,体现的就是编程的功力,用什么语言也不重要,体现的是你对问题如何去解决及对算法和数据结构的把握,对语言本质的了解。

同其他的开发人员一样,我也遇到过很多的问题,我解决流程一般是:学习基础理论知识一聚焦一扎实的做事,而每个环节都要思考。

做一个合格的微软技术工程师,不能只埋头编程,一定要跳出开发者技术眼光,能够到市场和客户那里去看一看。我比较幸运,因为做过的项目都有客户需求,这样就可以和客户建立很好的技术沟通。在我上研究生的后半年,我花了很多时间到公司中学习其他的各种技能,学习谈生意,接触客户。当时我对编程以外的很多事情都有兴趣,包括做产品、做市场、做培训。这些事情看起来很无聊,但一方面提高了同他人沟通的能力,另一方面也让我知道了客户和企业的需求。后来又接触到了售后服务的问题。所有这些都让我清楚了做产品要从用户的角度出发,而不能从自己的角度出发。

.所以我建议可以一段时间不写程序,出去走走。就像徐霞客如果只坐在房间里,写不出来很好的作品,而出去游历一下名山大川,感受一下大自然,回来之后自会有另外的一番感受和境界。软件就像文化一样,是一个需要知识积累和沉淀的。

另外我建议年轻的微软技术工程师不要急于搞某种新出来的技术概念。因为从另一方面讲是对自己没有信心的一种表现。我觉得要做一名职业的工程师,他的青春和职业生命也应该是比较长的。很多非常年轻的工程师很早就开始研究某种新出来的技术概念之类的,自己感觉比较时髦。可是作为一个专业的工程师,如果没有丰富的实践经验,脱离一个很扎实的基础,就算是学到了某种新出来的技术概念的一个皮毛,那成功的可能性也是很小的。

想成大事的人要能够经受住各种磨难,要有韧性。任何一个产品都是用心血浇灌成的。做开发的过程中,有时一个调试问题解决了,刚松口气,有了很大的成就感,突然又出现了一个新问题,就这样在希望和绝望的巅峰和谷底之间来回震荡,真的是很考验你的韧性。

但当你把一个比较完美的作品做出来的时候,会感觉自己太累了。所以我送所有的微软件技术工程师一句话:你觉得自己很聪明,是天才,但天下这种人太多了,你想在三到五年就把别人十年做的事情做一遍,那你也一定会把别人在十年中所受的苦难在这三到五年经历一遍,没有韧性是绝对不行的。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

猜你喜欢

转载自blog.csdn.net/wang2015cn/article/details/132796954