当前位置: 首页 > 科技观察

如何提高自己的能力?给年轻程序员的几点建议

时间:2023-03-14 19:13:36 科技观察

一转眼已经工作8年了。前两天,公司一位刚入职场的同事找我提点建议和经验。我觉得这个话题很有价值。在此我根据个人的想法和经历写下这篇文章,希望能给年轻的开发者一些启发。我曾在4家公司工作过,NVIDIA、Google、Slide和Glow。其中两家是知名大公司。Slide我是在D轮之后加入的,当时大约有150人。Glow从它诞生的第一天,一直到现在。个人工作也包括从开发人员、技术主管、工程经理到CTO。这些经历让我对程序员的个人发展之路有了更全面的认识。如果你问一个年轻的前端开发者,未来3年你如何提升自己的能力?他可能会说“我现在对web前端比较熟悉,但是我想更多地了解AngularJS,我也想看看React,现在发展很快,然后我会花时间学习iOS和Android开发。”看起来不错,但缺乏系统的目标。或者说,他制定了要学什么,却没有仔细思考为什么要学。在技??术领域,有太多东西很快就会过时。如何利用有限的时间,让自己的长远利益最大化?在这里,我可以提供一些建议来构建您的工具箱。工欲善其事,必先利其器。每个开发人员都应该拥有一把瑞士军刀。这些工具可以为您节省宝贵的时间,并帮助您在漫长的职业生涯中更好地组织您的个人知识库。举两个例子:一个高效的开发环境,一个信息收集器和一个记事本。高效的开发环境可以从编辑器开始。有IDE与文本编辑器、Vim与Emacs以及Sublime与Atom。如何选择?在做出选择之前,我们首先要考虑我们的目标。我们希望这是一项长期投资。这个编辑器可以长期使用。在此过程中,不断打磨,使之完全符合自己的习惯,最大限度地提高编辑效率。如果程序员是骑士,那么编辑就是他手中的剑。虽然我是Vim的重度用户,但感觉当年选择Vim的时候并没有考虑到。如果让我重新选择,我的第一选择是Emacs,第二选择是Atom。Emacs已经存在30年了,社区依然活跃,其扩展性在编辑器中是无与伦比的。Emacs的脚本语言elisp也是lisp的一种方言。我认为学习lisp可以提高程序员对编程核心思想的理解。另一个加分点是,Emacs由于其高门槛和lisp特性吸引了大批优质程序员。它的社区可谓是藏龙卧虎,诞生了Org-mode这样的神级插件。对比Vim,Vim的精髓在于Modeediting,这一点值得学习,可以大大提高文本编辑的效率。但是当你熟悉了这个概念之后,我觉得你可以换用其他的编辑器,因为Vim的架构和Vimscript限制了它的可扩展性。Emacs通过Evil插件完全支持Mode编辑,其他主流编辑器也有类似的插件,所以一旦掌握了这个概念,在其他编辑器中也能发挥作用。可能有人会说,没有哪个Vim模拟器可以实现Vim100%的功能,但重点不在于是否移植了某个命令,而是模式编辑思想的精髓能否移植,我认为答案是肯定的。纵观AtomvsSublime,Atom的扩展性非常好,其大部分核心功能也以插件的形式实现,这一点与Emacs类似。而它的开源特性让我相信它比Sublime更具有持久的生命力。关于IDE,我的观点是不排斥IDE,但每个IDE都是针对特定任务或编程语言的。作为一个有抱负的程序员,你可以使用IDE,但你仍然需要精通强大的通用编辑器。与编辑器类似,高效的开发环境还包括Shell、Launcher、窗口管理器、文档阅读器等。其中一些只需要少量的时间来配置,而且他们的投资回报率非常高。前者用于收集他人产生的信息,后者用于收集自己产生的信息。前者的一个简单例子是浏览器的书签。您需要能够随时存档一组有用的信息,并在将来的某个时间点快速找到它。后者最直观的例子就是MacOS或iOS自带的笔记本。在这里的目的是随时随地记录自己的想法。本质上,你需要有一套对你的知识管理(Knowledgemanagement)有用的工具,也可以说是你的知识和想法的外在备份。我个人是一边用印象笔记一边收集资料,一边做笔记。如果你有一个好的流程,你也可以使用两个工具来做好这两件事。但我建议你花足够的时间思考如何组织你的个人知识库。以上只是两个典型的例子。你需要做的是发现你长期想做的任务(往往不随技术而改变,不随公司而改变),并将完成这些任务所需的工具调整到最佳状态。再举个例子,我关注身边程序员使用的键盘。只有少数程序员会购买高端的静电电容键盘,比如HHKB。在我看来,这显然是一项非常值得的投资。程序员在工作中大部分时间都需要和键盘打交道。舒适的打字体验是非常有利可图的,更不用说这种高质量的键盘了。非常耐用。#p#开阔眼界,构建技术体系首先,你要给自己定一个目标,就像一个公司定下自己的Vision一样。目标应该足够大,以便您可以看到更多的风景。目标应该定在解决什么样的问题上,而不是要精通什么样的技术,技术是手段,不是目的。例如,“我想成为iOS开发高手”的目标远不如“我想成为前端应用开发专家”有意义。如果前者学习深入,你可能会钻研iOS框架中的各种技巧和窍门,而后者,你会开始关注视觉和交互设计,研究平台间的差异和共同趋势。显然,后者更有利于你的个人发展。然而,即使有了明确的目标,在信息过载的今天,选择哪种技术、如何学习仍然是难题。一个普遍的观点是,你应该学习最新的技术,因为旧的技术已经过时了,而反对的观点是,新技术不成熟。我个人的观点是,刚进入一个领域,选择主流的技术框架;当你有了一些经验之后,在选择一项技术的时候就应该多关注它背后的推动者。我相信优秀的人和团队总能创造出优秀的产品。无论是商业公司还是开源社区。不要太在意新技术和旧技术,因为它可能很快就会成为历史。你真正想学习的是技术背后的思想。很多语言和开源项目都会写他们的Codingphilosophy,很有意思,你可以从他们的源代码中验证这些编程理念。以Python为例。如果你执行importthis,你会看到它的理念。另一个例子是Python中著名的开源库Celery。它的文档中有一个特殊的部分描述了它的编程哲学。与技术本身相比,它们对您的影响将更为深远。这是我给初学者的一条建议。同样,我强烈推荐阅读一些优秀的开源库或语言的源代码。比如Python的大部分标准库都是用Python实现的,可读性非常好。如果学习一门技术只停留在使用层面,你还没有完全吸收它的精髓,学习的好处也会随着技术的过时而消失。我的另一个学习原则是,在选择学习一门新技术时,最大化它与你现有知识库的差异。读起来可能很费口舌。例如,如果你知道Django,那么接下来你应该学习RubyonRails还是NodeJS?根据这个原则,你应该学习NodeJS,因为它的异步IO模型在概念上不同于Django的同步模型。另一方面,RoR与Django有更多相似之处。但是更好的选择不是去学习另外一个Web框架,而是去学习ZeroMQ或者Redis,这两个对于Web开发也很有帮助,这样才能发挥最大的差异。从构建程序员技术概念的角度,我建议每个程序至少要懂Lisp或一门函数式编程语言,无论你在可预见的未来是否会用到它,它们都会让你从不同的角度看待编程.最后,我建议每个程序员都应该运营一个属于自己的产品,可以是APP,也可以是网站,也可以是开源软件。除非你是创业公司的早期员工,否则你可能没有机会把你学到的所有技术或概念都付诸实践。有很多人想成为全栈工程师。最快的捷径是构建自己的产品。任何设计师都会制作自己的作品集,但大多数程序员不会。在评价一个程序员的Coding能力的时候,我会看他的Github上有没有优秀的项目。不幸的是,国内大部分程序员的Github是空的,或者只有一些很简单的程序。我建议大家在Github上好好管理自己的项目,这样不仅可以提高自己的知名度,对以后的求职也有很大的帮助。当你抱怨求职面试,被问到各种无厘头的编程问题时,你有没有想过,面试官也很无奈,因为他没有其他办法知道你的Coding能力有多好。如果每个程序员都有自己的工作,我想程序员的面试会容易很多。重视沟通能力的培养当被问到“你学到的JuniorDeveloper和SeniorDeveloper最大的区别是什么”时,我最自然的反应就是沟通和文档。沟通包括程序员团队内部的沟通,与其他团队的沟通,与Manager的沟通等等。我觉得我没有能力很笼统的解释这些问题,但是我可以给一个建议,那就是学会先跟你的Manager沟通,剩下的交给他教你。许多公司会在经理和团队成员之间建立1:1的关系。一个高效的1:1应该在大部分时间由团队成员主导。这需要你在1:1之前花足够的时间思考要问的问题,最好提前1天发给Manager,让他有机会思考答案。很多人不太注意这个,或者问的是非常具体的问题,而不是一些开放式的问题,所以很难向你的经理学习。如果你懂得如何利用1:1的时间,它很容易成为工作中单位时间ROI最高的活动。建立你的网络每个人都明白网络的重要性,但真正做到这一点并不容易。参加一些线下会议或活动可能是最直接的拓展人脉的方式之一。不幸的是,大多数人似乎只是去参加技术讲座然后就回家了。当然,这也与很多活动的时间安排有关。讲座时间太满,茶歇时间短,有时客人迟到或没有把握好时间,干脆取消茶歇。其实认识一两个志同道合的人,远比听技术讲座有价值。下次再去参加这种会议,不妨给自己定个目标,比如至少加两个同行的微信。将来可能需要更多时间来维护您的网络。下班后或周末,找你的朋友喝咖啡!另外,我觉得每个人都需要一个职业导师。他可以是你的第一份工作导师或经理,或者你认识的其他前辈。你需要保持一种非常长期的关系,不局限于一家公司,最好贯穿你的整个职业生涯。遇到疑惑,可以向他请教。我认为这将是您最宝贵的人脉财富。#p#寻找施展才华的平台最后也是最重要的一步,就是找到适合自己的公司。作为求职者,可以从三个方面来评价一个公司:公司的发展前景(大公司,看你所在部门的发展前景)你将加入的团队,薪资福利,所以在面试一个公司的时候,你要明白,面试是双向的,公司在面试你的同时,你也在面试公司。面试前要做好对公司的功课,准备一些质量问题,比如指出产品存在的问题,询问开发过程或者如何做绩效评估等。那个时候你也可以看看你的面试官是否合格。每次选择公司,都应该考虑以上三个方面,只是在职业生涯的不同阶段,侧重点不同。比如刚刚工作的时候,加入一个优秀的团队是最重要的。他们可以教你很多东西,提高你的能力。工作5年后,你需要一个施展才华、体现个人价值的平台,对公司发展前景的重视程度正在迅速提升。当你有了一些成绩,证明了自己的价值后,你就会逐渐进入收获期,你就有资格向公司要价了。另一方面,团队的实力对公司的前景也有很大的影响。对于一个刚毕业步入职场的学生来说,一个近年来被问过无数次的问题,“我的第一份工作是创业公司还是大公司?”我的回答依然是“加入一个优秀的团队才是最重要的”。important”。在一些知名的大公司,团队的素质是有一定保证的,但是创业公司就不是这样了,团队的素质参差不齐,所以前面说了,你需要跟团队面谈,自己判断。不过,除了团队因素,我想提一下毕业生去创业公司的几个好处。首先,刚毕业那段时间,经济压力小,又是自由和承受风险的时期,而且这段时间往往不长,所以要把握好这个创业的黄金时间。升初级岗位,某种程度上是学校学习的延续,规范化、组织化,但缺乏独立性和创新性,这是中国大部分学生所缺乏的。这种能力在创业公司可以很快得到锻炼,但是在大公司你可能要等你直到你晋升到中层职位,你才有这个机会。个人观点,仅供参考。总结我觉得进入职场的前3年对以后的发展尤为重要。希望这篇文章能对年轻的程序员有所帮助。欢迎评论!