转载自知识星球:大飞码字的朋友们^_^
匿名用户 提问:大飞哥,我是刚工作的,请问在工作时,是向前辈问清楚怎么做,然后去做好点还是别人给你说要实现什么自己去专研好点啊?别人给我说怎么做,我再去做感觉很快,比如说要去什么地方改,应该怎么改之类的,而自己看有时候能做,有时候看半天都没思路,还有就是写代码时,老是担心写出来不严谨,所以每次都喜欢问,这个喜欢问是不是不太好,有时候别人说了,两下就弄好了,有时候感觉就不会去看整个业务流程了,但是自己一个人看又半天摸不到门路,还怕走偏了,所以老是爱问,求大佬解惑呀,刚工作几个月的小白😄 2019-11-12
我觉得你的关注点不对,不应该经常纠结该问不该问的问题,你的关注点应该是放在:我需要如何才能让自己成长的更快!
学习,完成工作,让自己成长,这个才是你的主线任务,其它的事情,都是服务你的主线的。
比如你带着一个目标: 我要半年内搞定目前接手的系统,要做到能接住百分之八十的需求!
有了上面这样的目标,你做事情就有了一个准线。
你一定会自己先通过文档和代码去了解系统,即便第一次了解的并不透彻,你也不会觉得沮丧,因为你会感知到成长。
实在搞不懂了,当然要问,但如何问,问什么样的问题,是没有统一答案的。
问太简单的问题,别人会觉得你这么简单都问,能力有问题;一直不问,又会影响到工作。
但如果你带着学习的心态去对待这件事情,这个问题就可以自然的被解决掉。
如果你一开始就做了了解,并且是尽力做了了解,你提出来的问题,一定是有深度,有难度的。被提问的人,也会觉得这个新人还不错,提的问题都很有料。
至于你说的代码和业务流程,这些都已经在你先前的学习中就接触过,后面做起来也会相对顺手很多。
这里的关键就是,你需要走在别人的预期前面!
比如你的领导或者你的导师,对你的期待是希望你在半年内对系统掌握到百分之六十的程度,但如果你掌握到了百分之八十,你就是超预期了,你也自然会获得高的评价。
其实当你纠结是不是问别人更快,纠结会不会走偏的时候,你就已经走偏了,说明你本身不太愿意沉下心来深入这个系统,带着这种心态,怎么做都不会好的,在根本的底层逻辑上就错了。
所以,试试转换你的思路,按我给予的建议试行一段时间,当然最关键的是你的心态要转变过来。
你要明白,工作是公司的,但能力的成长是你自己的,你要为自己的成长负责!
当你带着这种心态工作的时候,你的体验就完全不一样了。
匿名用户 提问:大飞哥,对于职业规划,想请教一下,我是做Android开发的,做了三年Android,两年Java后台,转后台是因为想拓展知识面,后来领导觉得我学习能力强,给我安排的工作都是新的领域,期间做过微信小程序,Windows客户端,现在Android很少写了,不过我还是在学习Android相关的。最近公司想做游戏化,就让我去研究unity,研究unity一个月了,觉得不是很理想,压力有点大,请大飞哥或者大家给个建议。 你方向换得太频繁了,不利于技术沉淀,最后技术深度下不去,会影响长远的发展。 2020-01-22
我是建议你能够定下一个方向来,好好干个四五年,至上在一个方向上达到一定的深度,之后再做横向扩展。
对于技术,我一直提倡,先专后泛,深度的积累比广度要难很多,在前期积累深度,后期发展广度,会更好。
所以建议你根据自身的兴趣和实际情况,在已经接触的方向上,深钻一段时间。当你的技术深度积累起来后,你的职业机会自然会多起来,也利于延长你的技术生涯。
林中水滴 提问:大飞哥,我现在是项目负责,同时还要做其他项目工作,不能全投入时间去做开发,也不能全然去管理,我的理解是上司希望我不仅仅关注于技术开发本身,希望我具有解决问题的综合能力(行业理解、沟通协调),我是想在行业里面多积累经验,但这种情况,总感觉两方面都不平衡,有种抓不住重点的感觉,希望大飞哥给点建议。 2020-01-20
不知道你对目前的工作感觉如何? 是否能够接受?
你本身是女生,我觉得目前的这种安排,对你挺好的。
我们这边也有些女程序员,不过一直做技术的不多,很多都是中途转了产品,运营,项目管理,QA 等岗位。
具体的原因可能是多方面的,比如精力,家庭,身体等。
而女生在沟通协调上确实会比男生更有优势,所以在有一定的技术经验后,转到一些非技术岗位或者技术要求比较低的岗位,其实蛮好的。
就你目前的情况来说,我觉得你可以稍微调整下你的中心,从原来只专于技术,调整到注重全局发展上:技术,业务,行业理解,项目管控,人员管控,沟通协调等。
不是说把技术全丢了,但要求可以适当放低些,投入的时间和精力也可以方少些,把多出来的,投入到其它方面。
其实做项目管理,技术管理,或其它类似的工作,日常所处理的事情确实会比较杂,当然,也会比较全面。这个跟专心做技术是不一样的,但全面,也是一种竞争力。
只要你本身不排斥,不讨厌这类工作,就可以继续做下去。
如果觉得乱,可以自己做些规划,做好自己的时间管理,另外,你也可以开始重新做你的职业规划,除了技术,把项目管理,人员管理,行业理解等都纳入你的职业发展规划里面,这样,你就不会感觉没有重点了。
杰克 提问:大飞哥您好,我是一名应届毕业生,现在在准备找实习工作,但在这期间也遇到些麻烦,第一个麻烦就是研发岗位对我们这些刚踏出校门的应届生太不友好,特别是我们这些非985.211名校毕业的普通本科生来说,没有经验想找一个合适的岗位太难了(嵌入式开发岗位);第二个问题就是我感觉自己不像搞技术那块料的人,想找非技术岗位,如实施岗,但是又怕发现前景不如开发好(比如薪资、还有跳槽的机遇,毕竟有技术的话不怕被淘汰),可能这就是典型的吃着锅里看着碗里吧,所以在此想麻烦大飞哥给点参考意见! 我分三部分来说吧。 2020-11-01
第一个是关于技术岗位和非技术岗位选择的问题。
你目前的第一个困惑,是技术岗位和非技术岗位选择的问题。在遇到这种纠结的时候,我的第一选择是优选考虑技术岗位。
技术是很细致的,需要投入很多的时间和精力去学习,刚毕业,年轻的时候,学习技术,从事技术方向的工作,相对年纪大的时候,会容易的多。
相对而言,一些非技术岗位,比如实施,项目管理,产品,运营等。这些岗位需要更好的软能力,而对于刚踏入职场的人来说,这方面是弱势的。
在我实际的接触里面,有不少人,前几年做技术,后面发现自己对其它方向更加感兴趣,转换了方向。比如从技术转到产品,从技术转到项目管理,从技术转到实施等。都比较容易,而且几乎都能顺利转过去。
但反过来,从实施转到技术,从项目管理转到技术却很难。
我接触过一些实际的例子。有位同学是做了几年的实施,觉得前景不好,就想转回技术。技术底子不好,自学学不下去,于是去报培训班,但他已经接近30岁了,就算顺利从培训班出来,又要跟刚毕业的同学竞争,这种处境实在是艰难。
所以,我的建议是,在工作的初期,如果犹豫技术岗和非技术岗,尽量先选择技术岗。因为从技术岗转到其它岗位相对容易,但反过来,就有很大的难度。这么选择,对后续的职业发展,更加有利。
第二个问题,是你说的对应届生不友好的问题。
我觉得这种认识是不正确的。没有不友好的问题。
大部分的公司,除了一些很不正规的初创企业,在招聘上,对毕业生和社招都是区别对待的,对于两者的招聘要求是不同的。也就是说,在实际面试的时候,毕业生是跟毕业生比较;社招是跟社招比较。
所以你的问题,不是所谓的对应届生不友好,而是你在你的竞争圈子里面不占优势的地位。
你需要改这种的思维方式,不要把自己遇到的问题,陷入的困境,都归因到外部,而应该多想想是不是自己在大学的时候没有努力学习,没有提早做规划,落到了如今的处境。
我觉得一个人最终发展的好与不好,跟自己的思维方式,跟自己的认知是有很大的关系的。
不改变这种思维方式,会影响到你最终的发展。
第三个问题,具体到找工作的问题。
嵌入式这块,我理解,需要对底层操作系统,比如 linux 内核, 一些嵌入式操作系统有了解,当然有实际经验是最好的。
但你现在时间不太多了,短期内,也难以补上来。比较好的办法,就只有边学习,边继续死磕投简历找工作了。
会比较艰难,但确实没有一招制胜的解决办法,如果有,对于大学期间就好好努力,做了很多项目的同学,也是一种不公平,不是?
我刚毕业的时候,有一个同学也是类似的情况,当时我们在深圳,我们是死党,他跟我一起合租。
那时候,我已经入职腾讯了,但他一直没有找到工作,那段时间,他特别焦虑,我一有空也一起帮他找公司,投简历,陪他一起面试过很多公司。
记得最后,他好像投了一百多份简历,才最终找到了工作。
所以,我觉得你不放弃的话,总是可以找到的。
最后,祝你早日找到合适的工作!
有同学在后台问到业务和代码质量平衡的问题。我简单说说这块。
业务和代码质量的平衡,我觉得是跟业务强相关的,所以每类业务,每个团队的情况可能都不同。我这里只说说我们这边的情况,也欢迎其他同学补充自己所在团队的情况。
我们这边,从整体上看,是对业务进行了等级划分,分成三类:
-
新业务
-
稳定业务
-
核心业务
对于新业务,需要的是迭代速度,需要快速验证产品方向,所以对代码的质量要求比较低。底线是能够正常运行。
对于客户端来说,你的代码出问题,不要影响到整体就行;对于后台来说,因为都是微服务,偶尔的 core 或内存泄漏,都可以容忍,用运维脚本拉起来就是。
新业务这部分的开发工作,也更多由新人来承担。一个是没有历史的业务负担,新人更容易上手;二是代码质量,服务质量要求比较低,不会给新人造成太大的压力。
像前段时间发布的朋友圈动态,近段时间发布的好物圈都可以算是新业务。
一般,一个新业务上线后,如果业务数据比较好,功能受到用户的喜欢,都会再快速迭代一段时间。一段时间后,业务需求,用户量等各方面都趋于稳定了,就进入到了稳定业务的行列。当然,也有很多新业务最后是直接死了,那部分代码就没怎么维护了。
新业务成长为稳定业务后,大部分情况下,会进行一轮较大规模的重构。因为前期迭代的速度很快,无论是代码设计还是架构设计,都会存在不少的问题,这个重构就是为了解决掉前期遗留下的技术债。有时候,重构还不止一次。
稳定业务的需求变化相对新业务少了,迭代节奏也会慢下来,开发的周期可以更长,所以质量要求也会相对高了。像现在的看一看,可以算是稳定,但还不是核心的业务。
稳定业务继续往前发展,最后有可能会成为核心业务。
核心业务的需求变化极少,这类业务的体量通常已经很大了,对代码质量的要求会高很多。
代码提交前,要做交叉review , 跑单元测试用例,代码的权限控制也很严格,只有特定的人可以修改。
像消息和朋友圈就是最核心的业务了。在消息系统的内部,代码还有进一步的划分。保证消息去重和时序性的代码是最核心的,新消息样式的代码,质量要求又相对低很多。
以上就是我们这边大概的情况。这种划分挺利于团队人员的分工合作,我觉得互联网产品的系统,都可以采用这套机制。
前几天看到一个博文,里面说到了技术知识掌握的三个层次。我觉得划分的挺好,而且跟我自身的理解也很一致,所以就想按着这个划分,来写写自己的一些理解了。
- 第一层次 what
what --- what is it ?
这是最基础的层次,如果这个层次都达不到,那做技术工作几乎是无法胜任的。
顾名思义,在这个层次,你需要了解一个具体的技术是什么。
对于语言来说,是一个语言的基础语法。比如赋值语句,循环语句,变量的定义,类的定义,相较其它语言的一些独特性等。
对于基础知识来说,比如操作系统里面,线程,进程的概念,锁的概念;比如数据库里面,数据库表的定义,视图的定义,主键索引,辅助索引等。
对于一个框架来说,比如框架由哪些部分组成,能够提供哪些功能,有哪些API,有哪些类。一些常用的API或类适用于什么场景,需要怎么样的配置和传入怎样的参数等。简单来说,就是要会使用这个框架。
当然,一个框架有很多功能,不一定要全部掌握,但基础的,常用的,还是要会的。语言也是一样,对于很生僻,几乎不怎么用的,没掌握问题也不大,但基础的,常用的,就一定要掌握了。
以上都是特定领域技术知识的一些基础概念,掌握这些是达到第一层次的要求。
按照这个标准来说,大部分的程序员,都还处在第一层次,还在第一层次挣扎。
达到这个层次,做一个一般的程序员应该是没大问题的了,去面试,去到一般的公司,问题也不大。
很多同学在工作一段时间后,达到了这个层次天花板,然后就觉得自己没有提升了,也不知道怎么提升。这个时候,你需要做的不是转换方向或者寻求其他,而是应该开始考虑进阶第二层次了。
- 第二层次 how
how it works !
顾名思义,它是怎么工作的。
比如 Java ,你写完一段Java 代码后,编译器会解析你的代码,将其转换成为字节码,然后虚拟机会装载字节码,并开始执行起来。
这里,你需要知道虚拟机是怎么运作的,怎么装载字节码,怎么分配内存,怎么回收内存等。
再比如 C/C++ , 你需要了解变量的内存是怎么分配的,内存是怎么布局的,指针在语言的实现层面是怎么一回事。
对于操作系统,数据库就更重要了。
在第一层次,你知晓了线程,进程的概念,也会用程序去fork 线程和进程。在第二层次,你需要知道线程,进程在操作系统里面是怎么一回事,是怎么工作的,用操作系统提供的观察工具来观察会有怎样一种表现,比如进程的调度,锁的竞争,CPU的消耗,等等。
第二层次是一个很宽泛的层次,细致来看,可以再分解出很多子层次。
比如,对于一门语言,框架,底层系统的运行机制的了解,细分下来,可以细分出很多不同的小层次。有人可能只是从原理上了解;有人可以深入到源代码的层级;有人除了源代码还可以根据运行表现推导出具体的实现。
我觉得能够从第一层次进阶到第二层次,一个人的技术生涯就可以被极大地延长,比如说,技术可以做到 40岁甚至 50岁。
所以在第一层次的同学,一定要想办法进阶到第二层次。
第三层次 Why
Why --- Why is it like that 。
如果能到这个层次,我觉得对特定技术知识的掌握是到了一个很高的层次了。
举了个例子,语言的设计。一开始的时候有C语言,后面为什么发明了C++,有了C++之后,为啥有要来一个 Java ? 这是个可以深入思考的问题。
C++ 设计者甚至专门写了一本书来阐述背后设计的思考 :《C++语言的设计和演化》。 如果你能看懂并理解里面的内容,估计对程序设计语言的理解会深入很多。
对于操作系统,数据库,也是一样的道理。 你会去思考,为啥需要引入进程,引入线程的概念,他们是为了解决什么问题,如果不这么设计,会有更好的设计方法吗?
对于语言的各种框架,也可以进行这种思考,甚至可以拿同个领域不同的框架来进行对比分析。
当你可以站在设计者的层面去看待一个语言,一个框架,底层系统的时候,你的理解绝对是要超越很多人的,而且对这部分知识的掌握也要超过很多人。
最后
以上就是我理解的技术知识掌握的三个层次。这个划分不是什么官方标准,而是我个人经验的一个总结。这个划分,我觉得还是比较符合实际情况的,对于一些同学应该会有实际参考的意义,至少可以对比下自己对知识掌握的一个程度,也可以知道后面要往什么层次去进阶。
本聪在搬砖 提问:大飞好,刚过去的这一年互联网企业常爆出大规模裁员,不仅仅是头部大公司,小公司更是在死撑。资本很少流入互联网了,这两年都没有独角兽产生,国家政策倾向实业,高兴技术这些,貌似互联网寒冬来袭了。您怎么看2020的行业趋势,目前在娱乐社交直播游戏行业做客户端开发,想听听您有什么好的职业建议或意见。谢谢 产生这种情况,有一部分是整体经济的原因,有一部分是因为很多公司原来的扩张速度过快,现在只是慢慢恢复了正常而已。 2020-01-11
你可以理解为,以前的互联网,整体热钱涌入很多,有不少有问题的公司,因为资本追逐,把真正的问题掩盖了,现在只是恢复倒正常的样子。泡沫变小了,反而能让行业健康发展。
现在有自有现金流业务,主营业务健康的公司,其实都发展的不错。你看头条,拼多多,B站,美团,这些这一两年火起来的公司,他们都有稳定的现金流业务,他们不但很少裁员,有的还在不断扩张。
你说国家政策倾向实业,我觉得不太准确,应该是高端的实业,比如说高端制造业,类似机器人制造这类,而不再是劳动密集型的制造业。
高新技术,依然是未来发展的重点,科学技术的是第一生产力,我觉得是不会落伍的。
就互联网行业来说,会从高速发展的增量时代,进入精耕细作的存量时代。
增量时代比拼的是跑马圈地的速度,存量时代,比拼的是服务的质量和生产的效率。
我觉得未来,整体程序员的需求有可能会慢慢减少,从原来的人海战术慢慢转变到精兵战术。
高级程序员会越来越吃香,高端程序员的年龄问题,也会慢慢得到缓解。
后面35岁,40岁,45岁,甚至更高龄的程序员会越来越多,当然,这些程序员的技术能力和经验积累,要跟年龄相匹配。
所以,往技术方向的高级阶段发展,总是不会错的。