一 : 迅雷首席工程师:程序员成长之道
声明:本文来自BLUES公众号(微信号:BLUEMIDOU),授权CSDN转载,如需转载请联系作者。
责编:陈秋歌,关注微信开发等领域,寻求报道或者投稿请发邮件至chenqg#csdn.net。
欢迎加入“CSDN微信开发”群,与作者及更多专家、技术同行进行热点、难点技术交流。请加群主微信「Rachel_qg」,申请入群,务必注明「姓名+公司+职位」。
迅雷公司有过三位首席工程师,本文邀请了其中两位,刘智聪、敬宓,聊聊程序员的职场发展之路,为保持技术大牛的风格,以下文字源于两位首席工程师的原创。
刘智聪,原迅雷首席工程师
1984年出生,从小自学编程,毕业于南昌大学化学系,加入迅雷后设计开发了多款迅雷核心产品,是多个领域的技术专家,也是BOLT界面引擎的发明人。现为巴克云创始人、小应用云架构师。
1. 自己作为技术路线的应聘者,在校招时候,是如何选择第一份工作的?考虑过什么因素?最后为何选了第一家公司?
刘智聪:我化学系毕业,大四一直在实验室待到了快毕业,所以并没有时间参加传统的校招。
第一份工作是和朋友一起来的深圳,在科技园凭缘分找到~
2. 目前工作几年?做过几个项目?在技术方面,有怎样的成长?
刘智聪:工作11年,做的项目非常多了,比较成功的是迅雷的一系列产品。 技术方面主要还是完成实现了不少自己的想法,到过一些无人区吧。
3. 让你获得进步和成长的方法,有哪些?
刘智聪:首先是正确的学习方法,我们这行算是一个终身学习,终身成长的行业,好的学习方法能让学习更有效率。
大的流程就是: 问题发现->提炼总结->在知识树上找位置->补充基础知识->自己尝试解决问题->研究行业已有解决方案。
这比简单的 “问题发现->研究行业已有解决方案” 的路子要学习效果更好。
4. 在作为程序员工作的第一年,遇到过的最大问题是什么?如何解决的?
刘智聪:如果从2005年开始算,我那时候都写了10年程序了,最大的困难应该是自己的能力无法匹配自己的野心吧:)
5. 对今年的技术背景的毕业生,有什么校招的建议?例如笔试、面试的方法,注意什么?
刘智聪:我从2008年开始做校招,在这个问题上还是比较有发言权的,主要说说技术岗吧。
首先是简历,一定要简洁(最好压缩到一页),然后突出亮点。什么是亮点呢?名校/GPA特别优秀/实际的项目经验/高水平竞赛获奖/学界认可的研究成果(Paper)一些和技术不太相关的经历和获奖就不用往简历上写了,尤其不要写精通Office,Photoshop之类……技术能力测试的时候起决定性因素的是CS专业的基本功(数据结构,操作系统,网络,组成原理),当然有一些当下流行技术的项目经验也是加分的。
面试的时候我喜欢对解决问题的能力进行测试,希望看到你在一个非常难的问题面前的思考过程,比如对问题进行分析,拆分,总结问题,思考思路,在确定思路前提出验证方法这样。
面试的时候不要一直沉默,即使思考不完整也可以和面试官沟通交流,沟通能力也是面试时的重点。
面试的时候的另一个关键点是“志”。立志要早,这样在工作中面对选择的时候,才能做出有连贯性的选择,不过遗憾的是在学生时代就能想清楚自己志向的同学太少了。
面试的时候注意真诚,不必刻意迎合面试官和目标公司(因为面试官都是人精,大部分时候都是能看出来的)
6. 对程序员工作的前三年?有什么建议?
刘智聪:把工作中用到的技术的基础知识学扎实。基本功扎实才能让你飞的更高。
工作中要勇于承担责任,主动要求承担困难的工作,多和buddy沟通,工程上的很多问题有人指导解决起来非常快。但一定要注意事后的复盘和总结。
工作前几年最重要的就是个人的成长,这是拉开差距并能在未来抓住机会的关键阶段。所以选择工作的唯一标准就是“能得到什么成长”,而不是待遇,公司福利之类的细节,当然公司有一个好的,愿意带你的老师是非常关键的资源,要好好抓住。
敬宓,迅雷首席工程师
迅雷星域CDN项目的创始人。
1. 自己作为技术路线的应聘者,在校招时候,是如何选择第一份工作的?考虑过什么因素?最后为何选了第一家公司?
敬宓:校招时选择工作的原因比较简单,主要还是兴趣驱动,尽量选择自己未曾深入研究学习的方向进一步学习。
由于我一贯是兴趣驱动,所以我的选择方法和大部分应届同学不太一样:我是从小学3年级左右开始做简单机械、无线电设计相关的学习,小学毕业后开始自学编程,考虑到电子和机械是小时候未能深入的方向,大学特意选择了机械电子。从入学第二周开始到大四毕业,基本没有假期地参与各种项目,到大四时断断续续积累了近10年的编码经验,对单纯软件开发、网站开发、安全、游戏开发、硬件开发都有一定的涉猎,所以选择公司时放弃了这些方向和公司,主要考虑后台和系统开发方向的工作,面试了百度和当时还属于雅虎全球的雅虎中国。
面试这两家公司主要考虑了他们的技术属性,当时百度是国内少有的技术驱动的公司,而雅虎在当时更是全球最大的 FreeBSD (我最热爱的系统)的维护、贡献者和使用者。另一个原因是因为此前已经干小作坊式的开发很多年了,所以希望毕业后进入更大的平台开阔视野,为以后的创业做准备。最后选择了百度。
2. 目前工作几年?做过几个项目?在技术方面,有怎样的成长?
敬宓:目前工作9+年,编码经历20+年,经历过的项目比较多,如果从规模、耗时、人力上有个范围设定会比较好统计。从项目类型上,经历过 Windows 客户端开发、网站前后台开发、系统运维、游戏、安全、操作系统、搜索引擎、自然语言处理、分布式存储和数据库、P2P、CDN 网络加速、模式识别、数据分析和挖掘这些方面的技术项目,这也基本反应了在技术方面的成长。
3. 让你获得进步和成长的方法,有哪些?
敬宓:获得进步和成长的方法主要依靠向开发论坛、社区的大牛请教学习方向,然后研究相关规范和标准,最后是不断实践。
这里要特别说一下方向的重要性:这些年面试了数百位候选人,很多人具有不错的开发能力,他们可以使出巧妙地招式,但是由于各种原因,他们对基础和细节的重视不够或者急于求成等原因,导致在实际的开发中总是或多或少遇到各种无法解释的现象,比如写 C/C++ 的工程师,很少有对 C 和 C++ 区分对待的能力,对他们各自的标准规范更是不了解,最后的表现就是代码出现各种诡异的问题。
工作第一年在百度修复了一个全公司几乎所有项目都使用的 hash 函数的序列点问题,那可能是百度诞生时就有的代码,但这个 bug 却存在了很多年。类似的问题还有很多,知乎上有个讨论最难调试的 bug 的讨论,其实很多都是由于对基础环境、条件的不了解,错误的做出了假设导致,如果完全熟悉整个体系的每一个环节,就会大大减少诡异 bug 的存在。
4. 在作为程序员工作的第一年,遇到过的最大问题是什么?如何解决的?
敬宓:作为程序员在第一年主要遇到的问题有两个:对项目难度和工作量预估不足,以及对工作计划做的不够好,这两个问题都直接导致了后来项目的大幅延期。当时因为项目需要,带一个小团队从头开始计划写一套分布式的数据存储和统计系统,结果延期了2、3个月也没有完成。最后根据需求重新设计了系统,同时申请了更多资源大幅扩展了团队规模解决。此后有幸和一个国外团队创业,学习和实践了项目管理的一些方法和技巧,更清楚的认识到之前在这些方面的不足。
5. 对今年的技术背景的毕业生,有什么校招的建议?例如笔试、面试的方法,注意什么?
敬宓:校招主要是重视基础。
6. 对程序员工作的前三年?有什么建议?
敬宓:建议是:尽可能的拓展自己的视野,对所有技术心怀学习的热情和好奇心:不能因为是写代码的,就忽略对硬件的学习;不能因为是写前端的,就减少对算法的了解;不能因为是写 C/C++ 的,就鄙视写 PHP 的;不能因为是做数据、算法研究的,就放弃对工程技术的专研。
想与刘智聪在线交流吗?1月18日晚8点,他将在CSDN学院进行有关“小程序后台开发的那些事”主题的公开课分享,带你了解小程序后台开发关键技术点,并通过真实案例,教大家掌握小程序开发中的关键环节。
大家也可以扫描以下二维码,报名参加本次分享活动。
二 : 一个PHP程序员的站长之路
2009年五一长假时从同学那里知道了网赚,当时心里就有了想法,然后从网上找了些如何通过网站赚钱的文章,上边写的基本都能赚点小钱,同时还了解了些SEO的知识,感觉心里有底了,就开始了:一个PHP程序员的站长之路。
首先是页面,我从网上找了个模板,让公司的美工帮着改了一下,中午一起到外边改善了改善,当然是我做东,因为自己还是观望态度,想边做边积累经验,所以网站设计的比较简单,其次就是空间跟域名,找空间时发现国内Win的空间漫山遍野,而Linux的就比较少,后来还是找到一个速度不错的,CN域名从万网买的,后来才知道代理的反而便宜,不知这帮家伙怎么搞的。
七月初网站正式上线,心想:来吧,互联网!心里盘算着,再怎么着,一年下来域名跟空间的费用应该没问题吧。结果一周后各大搜索引擎均没收录,心里就开始着急了,从网上找了许多方法,逐个尝试后,没想到时三天后尽然收录了,心里别提多美了,虽然只收个首页,虽然只有Google收录了,但是也算个开始啊,呵呵,看看收录时间,三天前?回想当时自己还没上手段啊,晕。
对于引擎提供的广告,网上说:Google都开始赚钱了Baidu还没收录,于是直奔Google,审请提交几天后收到回信,拒绝!理由是内容不丰富,并且域名必须半年以上。啊?没听说域名还有限制这一说,看来我能做的只有丰富内容了,再到网上一看,基本都是众口一词:经常更新,原创最好。 我那有时间经常去更新,还要原创。不知怎么闯进一个CMS论坛,铺天盖地都在说采集,采集是干什么吃的?这么多人关注?从前似乎听说过。一番详查之后,真是不看不知道,一看吓三跳。噢——,心中顿生歹念....
几天后我去看Google的统计图,因为以前不知道,所以没看过,今天一看,尽然有人访问!而且每天都有,人数虽然不多,但是有一个就算一个啊,不禁止心中思索这是那位恩公,小站如此势单力薄却不弃眷顾,不行我要看看是那儿的人,打开查询网站,不对!这IP怎么如此熟悉,可能看官已经顿悟,不错正是自己的IP!我说怎么每天都来呢,如此看来是无人问津之地啊!
之后网站做过一次比较大的改版,Google停滞两周多才恢复收录。现在Baidu收录三个页面,Google收录三页,msn收录一个页面。IP访问量:少的时候是0,因为我忘记访问了,多的时候就是1,2,3,最多一次达到11,此记录至今未能打破。哎,苍天大地,那位天使大姐来帮帮俺啊!小站的地址没脸贴出来,等有了访问量后,我再写一篇来公布,希望大家到时能捧场。
三 : Google作弊程序(php+mysql,全站生成html)
1.注意更新缓存(在后台)四 : 七年阿里老人谈新人程序员的成长
先做事再做人
新同学常有这些困惑,到底是做技术还是做业务?是每天加班加点写代码还是空点时间来看书学习?是先追求广度还是先钻研一门技术?是两耳不闻窗外事一心埋头做事还是和同事打成一片参加各种活动?这些问题也曾困扰着我。
我觉得新人到一个团队最关键的是在前3年建立个人品牌,为什么?当别人对你完全不了解,你做的第一件事非常重要。你给别人留下的印象会蔓延到整个公 司,所以第一件事一定要做好。怎么才叫做好?在职场中,并不需要时刻比拼智商,大部分情下,做事认真一点、考虑更深入一点、积极主动一点,已经好于70% 的同学了,这样的同学我们都称之为“靠谱”。
获得了合作伙伴包括主管的认可,自然获得的机会就会更多,做的事也会更复杂,合作伙伴也会越来越强,这样就会形成正循环,成长就会比较快。所以前3 年需要通过做事形成自己的影响力,积累人脉,锻炼自己的对未知事物的判断能力,因为随着你做的事情越来越多,专业知识能覆盖的范围会越来越小,遇到越来越 多自己不懂的领域。你不可能掌握所有知识,因此培养判断力非常重要。包括对事物未知发展方向的判断、事情产生价值的判断,以及对人的判断等。
所谓后3年做人,是更多发挥出人的价值,不仅仅把事做好就行,包括在合适的时间做合适的事。在公司里做先烈的情况有很多,找到多个团队的共同价值点 把事情一起做好,其实这个最难,因为越有价值的事情,涉及到的利益方也会越多,平衡好各方的诉求是事情成败的关键。事情做好后还要有人帮你宣传等,这当中 可能会涉及人的性格、交际能力、向上管理等综合能力。
善于发现兴奋点
刚入职时,一般所做事情的难度都不大,这时很容易形成落差,阿里目前招的都尖子生,但有时候到岗位才发现每天做的都是琐事,因而感到失望。如果长期 不调整好心态,很难发挥出工作激情,人也慢慢平庸下去。当初我和大部分同学一样,也是从最基本的日常工作开始做起,在做这些事时,我对自己的要求是,代码 层面不出Bug,注释写清楚,按时发布,这些都是最基本的要求。我还会利用业余时间做好几件事。
发现工作中可以提升效率的地方,可以把琐事的事情工具化,记得当时在做一个搜索需求时,发现传给搜索的参数非常多,而且每次拼URL异常麻烦。因 为工具是给运营同学用,所以便做了一个页面,把参数做成表单,运营同学只要在对应的字段(含义有说明)表单中填入值,就可以自动生成最终URL,提升了他 们生成URL的效率,也肯定受到了运营同学的好评。
除了发现工作中可以提升的效率外,还可以积累人品,比如我们曾经有个小图书馆,借书信息需要一位同学人肉记录,于是我做了个图书管理系统给那个同学用,收获了友谊。
除了在主动和积累人品外,最重要的还是要积累技能,我曾把在公司用到的中间件都深入学习一遍,并且写成学习文档,和其他同学写那种简单的使用心得型文档不同,我写的学习文档都是分析设计原理,为什么这么设计,用到了哪些设计模式, 关键的技术点等。那些工作几年,对中间件熟悉的同学也会有兴趣来看。但公司的同事毕竟有限,写作文章也会花费不少精力,所以我要寻找新的动力继续写下去。 当时我从写公司独有的框架转到写公司内外通用的技术框架,如Spring、iBATIS、Tomcat等JVM技术。并且找机会投到杂志和网站上,一方面 有经济回报,另外更重要的是能收到反馈信息。
善于从工作中找到源动力非常重要,做一件事情从不同角度发现其中的价值可以始终保持做事的激情,如果事情做好,可以得到感谢、称赞和认可,获得更多知识。找到正向的反馈,附带获得知识和影响力,然后促使自己持续把事情做好。
写文章和总结有多种好处:
可以系统地沉淀和总结自己的学到的知识,只有经历这样的过程,知识才记得牢。
可以增加影响力,因为分享给别人带来价值,才有人关注你。
给做事增加动力,尤其是那些琐碎的事。如果把琐碎的事情都连接起来,说不定也能收效显著。
与人协作
在与人协作上,这几年我的感触也很深,从最初的想一个人完成所有事,到现在尽量让别人完成所有事,这种转变真是很特别。公司中的大部分事都是团队协 作,以公司中常用的项目运作模式为例,一般会有一个项目经理(PM)、一个或者多个架构师,若干个不同功能的开发,其他就是不同的岗位分工,如PD、 UED、测试、PE等。PM和架构师两个角色刚好给两个同质的团队利益分配提供了很好的选择,PM一般会拿到业务结果,而架构师能体现这个项目中的技术成 果,典型的场景是一个很好的技术通过PM来落地而达到双赢。与人协助上有几个阶段需要经历。
图1 影响力金字塔
别人的想法当成自己的想法,帮别人实现。很简单,初期与人合作,要把别人的事当作自己的事,并且想方设法实现好,该做螺丝钉的时候也要做好。
自己的想法自己实现。新人常害怕把自己的想法说出来,被别人抢去实现了的担心。回想起来我也担心过,实际在工作中的确有些同学善于盗取别人的想 法,尤其再抢着给老板汇报就更讨厌了。但现在想想这种担心并没有必要,因为更重要的不是想法而是实践。对新同学来说,多想少说多实践才是王道,千万不要少 想多说少实践。如果你有好的想法不妨说出来,并且实现demo证明可行,如果证明靠谱也不用纠结最终名义上的结果是不是你能获得,就像我前面所说的,先做 好事,不用急着去争名,这个时候正是积累以后的福报。
自己的想法由一帮人实现。这个阶段最重要的就是平衡利益,合理的让每个项目成员都能获得最大利益是项目成功的关键,不仅是参与项目的成员还包括成 员的老板,仅仅把事情做好只是第一步,项目要发挥出最大价值,还要有老板们帮你宣传,才能有更多落地场景,最终的成功需要天时地利人和。
自己的想法,让别人说出来,并且实现。你的想法变成了别人的想法,并且最后实现了出来,如果到了这个阶段,那么你肯定已经是一个有影响力的人了。 新人无疑最忌讳这个情况,但如过前面几个阶段都做得很好,遇到这种情况也会很淡定,因为这时你应该是一个Leader了,而Leader要做的正是这个。
与人协作时,我觉得《Choice》课程中介绍的影响力金字塔非常有参考价值,把最大时间花在对合作伙伴能够产生影响的人,建立良好关系最有成效。 大家可能会说,不就是那群天天在公司不干事只会拉关系的人吗?其实建立关系只是一个手段,建议关系能产生什么的结果才是最终的目的,影响力是最有效的协 作。
老板希望你做的
亲身带领团队后,我也算打入了组织内部。总体还是健康的组织。判断一个组织有没有生命力,就看这个组织的Leader是不是最能干的人,而且组织要有能够保证最能干的人能成为Leader的机制。
当然我主要想讲的不是如何给老板拍马屁,如何和老板套近乎,而是介绍主管最希望的做事方式:
第一步要和主管取得相互信任,注意我说的是相互信任,这个最重要。你信任主管无非因为你内心对主管服气,或是知道他是真心愿意培养自己。主管信任你主要是交给你的事情能够漂亮的完成,认为你死心塌地的跟着他。很多管理事故无非是这种相互信任没有建立导致的。
积极主动给老板带来一些惊喜,是你获得更多机会的助燃剂,老板一般喜欢两种人,一种是听话的人,兢兢业业的完成交给的任务;第二种是总有新想法并且爱折腾的人,有想法还不够,最好是有结果。很显然第二种人更容易获得提拨。
适当给老板找些麻烦也有好处,这里所谓的找麻烦有两重含义:
一是,要有自己独立的主见,即当发现明显有问题时还听之任之,只会让老板觉得你没有主见。积极表达自己的观点。当然,这要基于大家都是正直的人,如果你的老板小肚鸡肠,那还是好自为之吧。
二是,尽量不要让老板的认知范围完全覆盖你的认知。如图2所示,如果这样,你在老板眼里就是个透明人,因为你的所有思考和行动都在他的可预知范围内。所以 在工作场景中用到的知识深度、广度或者其他技能上你要有所长。比如技能上你擅长前端,或者线上运维非常好,又或者思考问题非常全面,再或者逻辑推导能力很 好,图2是一种比较理想的状态。
图2 你与主管的知识维度
“当然有种情况也要避免,就是当你掌握的知识如果大于你的老板的话,你可能会觉得老板不如你,但是千万不要忘了,他的推理范围可能还是远远覆盖你,也就是对事情的判断能力,所以也不要过于自大。”
有句话说“跟对好老板是你一生的福气”,的确如此。以我的观察,好老板就是那种情商很高但是内心真正简单透明的人,职场权术有很多,但仅仅靠权术不可能真正获得长久的成功。
最后想说的话
不管你是刚走出校园,还是大咖加入新的环境,前期精力都应该放到具体的小事上。先以事服人,再以德服人。
五 : 非常简单PHP缩略图生成程序源代码
一个非常简单的PHP生成缩略图的代码程序,参数及代码都算得上精简,有兴趣的朋友可以试下它的功能,有不太完善的地方还请指正。
<? $FILENAME="image_name"; // 生成图片的宽度 $RESIZEWIDTH=400; // 生成图片的高度 $RESIZEHEIGHT=400; function ResizeImage($im,$maxwidth,$maxheight,$name){ $width = imagesx($im); $height = imagesy($im); if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){ if($maxwidth && $width > $maxwidth){ $widthratio = $maxwidth/$width; $RESIZEWIDTH=true; } if($maxheight && $height > $maxheight){ $heightratio = $maxheight/$height; $RESIZEHEIGHT=true; } if($RESIZEWIDTH && $RESIZEHEIGHT){ if($widthratio < $heightratio){ $ratio = $widthratio; }else{ $ratio = $heightratio; } }elseif($RESIZEWIDTH){ $ratio = $widthratio; }elseif($RESIZEHEIGHT){ $ratio = $heightratio; } $newwidth = $width * $ratio; $newheight = $height * $ratio; if(function_exists("imagecopyresampled")){ $newim = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); }else{ $newim = imagecreate($newwidth, $newheight); imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); } ImageJpeg ($newim,$name . ".jpg"); ImageDestroy ($newim); }else{ ImageJpeg ($im,$name . ".jpg"); } } if($_FILES['image']['size']){ if($_FILES['image']['type'] == "image/pjpeg"){ $im = imagecreatefromjpeg($_FILES['image']['tmp_name']); }elseif($_FILES['image']['type'] == "image/x-png"){ $im = imagecreatefrompng($_FILES['image']['tmp_name']); }elseif($_FILES['image']['type'] == "image/gif"){ $im = imagecreatefromgif($_FILES['image']['tmp_name']); } if($im){ if(file_exists("$FILENAME.jpg")){ unlink("$FILENAME.jpg"); } ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$FILENAME); www~phperz~com ImageDestroy ($im); } } ?> <img src="<? echo($FILENAME.".jpg?reload=".rand(0,999999)); ?>"><br><br> <form enctype="multipart/form-data" method="post"> <br> <input type="file" name="image" size="50" value="浏览"><p> <input type="submit" value="上传图片"> </form> </body> </html> |
61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1