学习方法一:实践,应用,坚持。
【swoole-韩天峰】
我最开始工作也是在2家小公司,后来加入腾讯阿里,主要原因还是我坚持学习基础知识,从而得到了这个机会。有几个方面的基础知识,我建议每一位PHP程序员都应该好好学习一下。我推荐几本书给大家,包括深入理解计算机系统、现代操作系统、C程序设计语言、C语言数据结构和算法、Unix环境高级编程、TCP/IP网络通信详解。另外我建议大家学习一下面向对象方面知识,PHP这方面的书不太多,建议看Java面向对象编程、Java编程思想、J2EE这些书。PHP语言基础方面,建议认真地把PHP5权威编程这本书好好读完。另外不光要读,还要照着书中的讲解动手去编程实践。
【多隆-蔡景现】
我坐火车经常一坐就是七个小时,真的感觉太长了。一到上班的时候,早上9点过来,一直到晚上6点,我都不知道时间怎么一下子就过去了。因为你有事做,不会觉得很辛苦。所以说真的需要热爱这份工作,要不然你会觉得怎么老是加班。
在我看来的话,没有所谓的大神、大牛,真的都是从做项目开始。我刚开始的时候其实什么都不懂的,比如2000年进阿里的时候,我连JAVA都不懂。当你在工作中遇到问题了,就去找资料,然后去把它弄懂、弄会。只要肯花时间和力气,那你自然而然就会了。
发现问题,解决问题,不要绕开问题的本身。工程师对于代码,一定要“精益求精”,不论是性能,还是简洁优雅,都要认真打磨自己的作品。
【雪候鸟,鸟哥,惠新宸 @Laruence】
你是如何成为 PHP 开发组核心成员的?
我其实一直都在研究 PHP 的源代码,所以也提交了不少 Bug 和 Fix,比如我记得有一天中午,Rasmus(PHP 之父)在 IRC 上说发现一个 Bug,我差不多 5 分钟后就给出了 Fix。
等慢慢的和一些人熟悉,得到了大家的信任以后,我就发起申请,之后就获得了 PHP 核心代码的提交权限,参与到 PHP 的直接开发和 Bug 修复中,成为了开发组的一员。
至于说核心么,那是慢慢积累来的,其实也是一个互信的过程。如果你的工作大家认可,那么就会尊重你的意见。我慢慢地和 Dmitry Stogov 变的熟了起来,得到了 Zend 核心部分的提交权限,提交了很多核心 Bug 的修复和新特性,再后来成为了 Zend 外聘顾问,慢慢成为了 Core Developer。
问:一名合格的 PHP 工程师的知识结构是怎样的?
我记得以前有一句话说:“ PHP 工程师都是万金油”,其实这句话不仅仅对 PHP 工程师适用,应该对所有的工程师都适用。
知识结构要很广。Web 开发涉及的技术点是比较多的,HTML、CSS、JS、SQL 这些以外,还要懂得一些 Nginx、Linux、Mysql 的配置、维护、排错常用的办法,这些都应该懂一些。
问:除了技术能力之外,你在面试的时候还会注重什么?
我会特别注意思维清晰、沟通、谈吐。其实说穿了就是未来一起共事的话,会不会有障碍,以及成长潜力是否大。
【洪剑峰】
待过大公司、创过业、混过外企、写代码、做架构、带团队……洪剑峰的经历相当丰富。
要时刻注视远方,走正确的路。我一直相信努力不如选择重要,选择一个适合的方向,你就会事半功倍。应该把更多的精力放在判断方向、选择道路上,而不仅仅是闷头苦干。
对我来说,我宁愿作为团队的Leader,站在前面,找到正确的方向,告诉大家怎么做,这对团队的益处远远好过我自己去做一些具体的事情。
我每年大概会看20多本书,技术相关的大概一半,基本都是英文的,另一半主要是历史类、社科、经济、管理之类的,对提高架构思维很有帮助。除了陪家人,我基本都待在公司,其余时间就是阅读和写代码。
【李智慧】
我在做CTO之前,在离开Intel前的最后三个月大概写了一万行代码。但是做CTO之后没有为公司写过一行代码,我会review代码,review架构设计,但是我不会写代码,我觉得每个人都应该也有责任把自己的工作做好,CTO的工作职责不是写代码,CTO写代码是一种越俎代庖。
学习知识技能首先需要时间,工程师应该用工作时间的20%去学习,如果工作时间抽不出空学习,可以用加班时间学习,如果加班时间也被安排满满的,至少能忙完这一阵(自己熟悉了情况后)可以有机会安排时间学习。如果这种机会和希望都没有的,如果你对自己负责的话,我建议你还是辞职吧。
【贺利坚】
学习编程最好的方法就是实践。通过实践,享受程序运行正确带来的快乐,树立信心;通过实践,享受在错误中不断成长的快乐,训练出敏锐的感觉和与bug作斗争的耐心;通过实践,看书中可以不断找到“哦,原来是这样”的感悟,书本中的知识也能够鲜活起来。
【陆其明】
陆其明,北京爱奇艺科技有限公司PPS上海公司研发总监。
有人曾经问我,“你这样把技术都说白了,不怕别人超过你吗?”我说,“我不怕,因为我也一直在进步!”况且,我相信,特定的技术都是有保鲜期的,唯有分享才能发挥它的最大价值。我只后悔自己当年分享得还不够,有一些代码至今还沉睡在我的硬盘里,而它们现在已经几乎没有任何价值了。
思维方式首先要改变。做技术只要顾着自己就行了,而做管理的时候,要把关注点从自己身上转移到团队,要保证整个团队的可持续性高产出,“大家好才是真的好”。
要站高了看问题,多从公司利益、业务需求、用户体验等角度去思考问题,这对习惯于讲逻辑、细节导向的技术人员来说是很难做到的。
技术人员一般不善与人沟通。但既然做起了管理,这方面必须加强,既要做足内部的沟通协调,又要担当团队的保护者和代言人。
所谓激励,就是要充分调动团队的工作积极性。一说到激励,可能大家的直接反应就是钱。其实,金钱并不是最好的激励方式。各人有各人的情况,每个人在不同的阶段也有不同的需求,因此激励的方式也应该是多样化的,比如一句鼓励或感谢的话、请他吃顿饭、培训机会、晋升机会等等,当然加薪、奖金、股票、期权有时也是不可缺少的。最关键的是,要将个人的发展与公司的发展紧密地联系到一起。对于管理者来说,尽量做到公平也是至关重要的!
我们在心里要明白:写代码不是目的,发布产品也不是目的,我们的终极目标是解决用户的问题。
【任玉刚】
在Android开发的学习过程中,我主要通过如下几种方式来学习:
在公司进行产品开发;
阅读Android源码和Android官方文档;
写技术博客对知识进行总结和分享;
关注Github中优秀的开源项目并提交自己的项目;
在公司内部做技术分享;
阅读相关技术书籍;
业余时间持续学习。
【邓凡平】
我个人感觉在工作中很少能学到系统性知识,所以在此也鼓励读者一定要抽出整段时间来学习系统性知识。一个基本原则是:由点及面,努力构造完整的知识结构。
不要沉迷于技术本身和工具,要时常思考自己要做什么,做哪些东西更有价值。软件领域可学的东西太多了,但是切记要结合需求选择最合适的内容。这年头我们不缺乏做事的勇气和努力奋斗的精神,缺的是知道自己要做什么的思考以及抵御外界诱惑的定力。
求知欲是人的本能,很高兴自己一直保持了这种本能。另外,做好时间管理、明确自己的目标也非常重要。对于一些初学者我有一些以及和我一样仍在努力的人,有几点建议:
在工作初期,先求广度,再求深度;只有见识面广,才有可能融会贯通;要努力接触新事物;Be Active。
工作三年后,要选择适合自己的。这个时候,知道自己要做什么,比知道怎么做更重要。
要有团队精神。覆巢之下无完卵。团队不好,个人也不会好到哪里去。大家要齐心协力把事情做好,不要过多考虑个人得失。
要有定力和钻研精神。在知识学习上,高投入才可能有好产出。
注意身体健康。活得越久,才能学得更多嘛。这是硬件,没有它,任何软件都跑不动。身体健康与否作为一个人最重要的风险因素,相信软件工程师们一定会重视并加强控制的。
【左程云,华中科技大学本科(计算机科学与技术)、芝加哥大学硕士(计算机科学)。IBM软件工程师,百度工程师,GrowingIO工程师、刷题5年的算法热爱者。】
一般来讲,工资高的公司在面试时算法和数据结构题目的比重较大,工资一般的公司比重较小。当然同样公司的不同岗位,要求也会不同,但总体趋势就是 国内好公司爱考算法和数据结构 。这是目前国内互联网公司的情况。国外的互联网公司几乎只考算法和数据结构,早个8年前就是这样了,一直如此。我相信国内会逐渐变得像国外一样,并不是崇洋媚外,而是算法和数据结构题目真的能考出东西。
因为本科和硕士阶段都是计算机专业,所以走上编程之路的过程是非常自然的,但我真正享受编程的过程是在开始做算法和数据结构的题目之后,牛人们写出来的东西怎么就是比我快呢?所以开始研究起来,并越来越痴迷。程序=算法+数据结构,所以不存在结合的问题。常用的语言是Java。