本次座谈会于上周六开始,由于网络原因,很多国内的小伙伴们没有能够连进去,挺遗憾的。所以我整理了本次座谈会的部分内容,希望能对大家有所帮助。
主持人:大家好我们来自开源社群,今天举行在线it社区的活动,本次活动为主旨为分享与交流。今日进行的主题为《IT从业的迷思与破解之道》。我们邀请请到公众号的博主艾心,艾心担任过新创独角兽公司的项目经理与同时也是资深开发者,请他与我们一同分享这个主题,在这短短一小时内,我们将从It从业人员的心态中一一去剖析,希望带给大家一点思维上的开启与交流。不知道你有没有这样的一些场景,每当往往在加班改程序时,心中往往会想难道这就是人生吗?相信艾心应该也是经历了996了好多个日子, 爱心总结了3大力 洞察,学习,团队,来给大家一些概念上的提升,有些虽是老掉牙却也历久不衰概念。在it人工智能的时代,拖拉的式的介面,拉拉购物车,就可以快速上架商品,五分钟你就可以无代码完成一个小电商店,网红店,这样程序员难道不害怕吗?最近一波一波缩编人员的浪潮下,我想很多程序员都发现就业上有困扰,在大厂的引入的ai智能的前提下,不管在内容选择上还是offer,多少被人工智能影响,我们初中级的it从业人员该如何面对呢。
艾心:大家好,我是艾心,来自上海。经历了多年的行业大发展,当前的经济环境处于深刻变革之中,许多行业处于收缩状态。很多人可能会感觉,工作不那么好找了,薪资提升越来越慢了,是否意味着IT行业也逐渐进入到夕阳产业之中。我的想法是不会,IT行业在未来可预见的时间里都是热门行业,只不过岗位性质可能会发生较大变化。如IT基础设施领域将逐渐掌握在少数大厂手中,大厂本身也会针对自身特点以及对行业的理解提出自己的解决方案,这点在云服务领域尤其突出。有了一定工作经验的人会发现,入职最大的困难在于快速理解公司业务,那些技术类的东西完全可以凭借自己的经验独自去掌握。考虑到企业的最终目的是盈利,那么大趋势就是不断提升企业效率,基础设施类的服务可以通过购买来获取,使得企业内部聚焦于自身业务相关的事务之中。那么这是否意味着,我们的技术含量会下降,也不会,因为我们手中的业务也是非常复杂的部分,所以后来才会有了DDD、TDD以及微服务等软件设计与开发理念,来帮助我们提升软件开发效率。
主持人:AI所有的需求都是来自于人的需求需求在it在,AI自动代码几乎不可能完成,人的思想在程序发展上才是关键点,未来IT仍会在AI浪潮下仍会蓬勃发展,但这边总有一些杞人忧天的案例。
艾心:AI是当前IT行业里比较热的方向,AI涉及到多个领域,当前我们所进入的领域尚不深入,但与我们的生活息息相关,以至于越来越多的人为AI扇风鼓劲,冷静后我们会发现这一切并不像宣传的那样。通过AI创造出的产品终究还是需要软件工程师的介入,不管AI如何智能,终究是人创造出来的,没有人参与并约束的AI将会是个危险品,所以不用担心AI是否取代软件工程师,相反会需要大量的软件工程师,我们需要密切关注,积极调整自身以适应这个趋势。
主持人:就因为剧烈的变化,您可能会提出一些疑虑,那我该如何做好面对,在职场上该如何做好职务规划呢,我想这确实是一个很广的议题,不但牵涉到自我价值观,自我实现的层面,也包含周边资源,包含软硬实力还有那一些幸运的成分。
主持人:会多种语言JAVA /C# /JS /PYTHON /C++但都没用到太深,半桶水的感觉不踏实,怎解?而我已年过35,这样的案例请艾心跟我们分享一下怎么面对。
艾心:有时候,就我自身而言,我也会有焦虑,我会担心五年十年后,自身的生产力会下降,会逐渐被后来的人赶超,相信有我这种焦虑的人会有很多。一位社区朋友曾在自己的文章《让人迷茫的三十岁,从专业技能、行业知识和软实力的人才三角谈起》提到掌握一门核心语言非常重要,在语言之外的其他专业技能,诸如设计模式和设计原则、对于算法等的理解程度,都是开发者非常重要的能力。
我对这句话很赞同,语言发展到现在,出现过很多的框架,但是不变的是,那些最基础的部分,算法、数据类型、设计模式、设计原则等等,有了这些基础技能,才能更好的讨论职业规划和应对焦虑。
职业规划这个话题比较广,万变不离其宗的就是自身能力的提高,包括硬实力、软实力以及机遇等等。首先我们要对自己做的事情充满信心、充满热情,不管你使用什么样的语言,C#、JAVA、GO、Python等等,可以选择其中一门语言,并将其作为自己的核心语言,由于语言的共通性,可以很快地举一反三学习其他语言。
或者我们可以换种形象的说法,我们的Title应该是软件工程师,而不是.NET/JAVA软件工程师。
其次懂得观察变化并及时跟进,每一个新的变化总会带来新的需求。大龄程序员确实存在着尴尬的境地,和处于巅峰时期的自己相比,项目开发的速度可能并没有那么快,但是大龄程序员最大的优势在于对业务的理解能力、对技术的平衡选择性以及对项目的合理安排,不过大龄程序员必须要保持学习。随着工作资历的增长,程序员也要适时变化,从更高维度丰富自己。
主持人:是的,所有的学习都是渐进式的,学习都是一些苦差事容易遗忘,但是计算机的不会,它的原理,算法的构成都是前人的结晶。掌握大方向,掌握先有的业务一点点深入,遇到问题知其然更知所以然,这边累积程序员解决问题的能力一定是不二法门。it的类型是错综複杂的,网络,计算机原理,应用软件,逆向工程,这些领域都需要经年累月才能有一些成果。我们不能停止我们的业务,除非你转行了,在自己的项目裡,了解业务流向,能够自行画出流程图,能够说出业务,另外对学习框架源码原理的探索才能帮助你走的远。这些都要自我提高学习力,怎麽提高?动力从哪来?更怎麽定位自己,艾心你如何看待学习力这一块呢?
艾心:工作了很多年,我依然会十分重视基础,同时还会继续买书、读书,我不认为学到了一定程度的人可以避开书籍。推荐大家多阅读一些经典图书,经典之所以成为经典,就是因为这些图书里总结很多前人的经验,使得我们可以站在巨人的肩旁上。最近我正在阅读《代码大全》、《重构》、《代码整洁之道》,在这里也推荐给大家阅读。
学习要有专注性,掌握自己的核心语言,并可以通过举一反三的方式学习其他语言,不要随意变换自己的职业方向,因为这也是自己学习的方向。
可以多阅读一些框架源码,学习其中的设计思路,设计原则以及编码风格。
另外,我们可以加入到社区中,可以收获一大波志同道合的技术伙伴,同时关注工作中、社区中的问题,解决这些问题可以帮助我们完善自己的知识网络,填补自己的知识空白。从我的个人经验来看,带着问题去学习是最快最有效的学习方式。学而不思则罔,我们还需要养成时常总结的习惯。
最后,学习是一个持续的过程,也是一个不断完善,不断更新自己知识的过程,当一切做到极致的时候,你就是行业专家。
这里引用乔布斯的名言:Stay Hungry,Stay Foolish。
同时IT的行业的热门程度,使得很多人非科班出身的人,都想尝试一下。
小白,那么该如何自学编程呢,首先要有一个学习目标,是想要了解还是想要将其作为自身的职业发展,如果想要了解的话,那就不需要太深入,可以写写循环语句、写写运算符相关的代码,就差不多了,推荐学学JavaScript,只需要有一个浏览器,然后点击F12即可调出控制台去运行代码了。
当把编程作为自身的职业时,需要学习的东西就很多了,建议先学一下计算机导论,然后再开始学习一门语言。语言的选择,不需要看哪门语言最热,就学习哪门语言,而是你要做什么。你要做前端,免不了要学习JavaScript、HTML、CSS等等,后期还可以学习前端框架,如AngularJS、VueJS等等。如果要做后端,可以学学C#、JAVA、GO等等。学习第一步是,你需要了解语言的特性,可以看看视频,网上有很多,然后再去尝试在IDE上编写代码。
总之,自学一门编程语言要多动手、多思考,还要有足够的耐心和毅力。最后,祝你好运。
主持人:所以良好的自學,半路出家也是能達到高水平,業界很多黑客,頂尖程序員也都是透過自學來完成一個優秀項目到開發。接觸的語言對多了框架多了,都會發現基技術的每一次release都是為了解決先前的問題,如何找到適合自己的技術呢?首先要定位自己的角色,角色不同工具,想法,領域就不同,我們可以從選擇領域跟類比技術來找出適合自己研讀以及拿手方向。
主持人:我们从四个方向来看接触一门领域时我们要知道并了解是什麽,而如何学习,可以从丰富的文档来著手,为何使用,为何产生这样的技术?是要解决什麽问题哦?能解决业务的需求吗?还有如何应用?应用这一块需要经验,这需要不断尝试,许多业界最佳实践,都是这样而来。接着我们来谈谈团队,当项目降临的时候该如何操作,艾心带多许多项目,交给艾心来分享。
艾心:IT项目更多的是团队化合作项目,想要全流程贯通还是非常困难的,尤其是在项目赶进度的时候,所以每人负责其中一部分就成了主流的工作模式,这也意味着我们需要更好的与团队成员进行协调沟通。
团队协作需要我们遵守共同的规范,共同的愿景,彼此信任,并能做到友好沟通以及倾听大家的意见。由于项目中每个人对业务的理解程度并不一致,在开发过程中的思维碰撞也会相应增多,这更需要TL去发现并解决这些碰撞点,以使项目可以沿着正确的方向推进。TL还需要在分工明确的情况下,灵活处理项目推进过程中的新问题,不可过于依赖分工。
主持人:那么好的team leader该如何来带领项目呢?相信PM都会说可以用敏捷啊。但是你知道大部分的敏捷都是假议题,是不正确的吗?我们跳开敏捷的思维从基础面出发。我们应该从项目的基本面、项目目标、工具、内容、任务来看。刚刚艾心提到专案的目标是非常重要的,成员才能往一致性的道路前进。还有良好的项目管理工具列出代办事项、处理专案内容、收敛用户的需求,别让天马行空的需求让成员叫苦他诶连天,同时倾听成员的意见不管在实务技术面还是在理想层面,最后如果是做为成员,要回报pm负责任务的进度与状态,让pm能跟着项目进度调整任务优先级,达成彼此协作的目标,在团队上还有一些重要的信息,象是代码审查,开发习惯等。
艾心:好的项目除了要有好的团队协作外,从个人角度来说,还需要有良好的开发习惯,不过这个话题很难在短时间说得很清楚,在这里像大家推荐一下《代码整洁之道》,这本书向我们传达了一种理念:代码质量与其整洁度成正比,干净的代码,既在质量上可靠,也为后期维护、升级奠定了良好基础。
从我的经验来看,编写好的代码,还需要有好的设计思路,糟糕的设计会让逻辑变得复杂,代码量变得庞大而且稳定性欠佳。那么怎么样才算好的设计呢,那就是越简单越好,越是简单的代码,其表达能力就越强、职责越是明确,这也会形成模块化聚集,也就是很多人喜欢说的高内聚、低耦合,其实好的编程习惯会自然而然的达到这种层次,也很容易查看到其中隐藏的缺陷。
同时,我们还需要设计良好的命名规则,好的命名可以在一定程度上承担注释功能。但是我们依然需要有注释,为的是我们可以快速回溯以及方便团其他队成员更快的入手项目。我们的注释应该是简洁明了的,但是不需要花费太多时间把注释写的面面俱到。
最后,我们还需要对我们的代码进行良好的排版,比如合理利用换行、空格、Tab等,这些需要大家在实践中不断总结。
源代码管理的必要性是无可置疑的,它可以帮助我们记录和跟踪项目中各文件内容的修改变化、当前修改的影响范围以及提升团队协作能力等等,都可以通过版本管理工具来实现,常用的版本管理工具有GIT、SVN。
很多时候,我们需要对代码进行严格的审查,这里我们需要树立一个理念,就是代码审查并意味着能力弱,相反是个人以及团队快速成长的需要。通过代码审查可以降低被忽视的错误所带来的风险,毕竟再好的开发人员也难免会马失前蹄。
同时,代码审查还可以提升代码质量,因为集思广益后的思路,总是会带来很多的惊喜,比如大幅度降低代码复杂度。
代码审查还可以做到互相学习的作用,互相提高。
到此我们对三大力进行了概括性的通盘解说,提出了一些观点与资源含有一些你可能听过或没听过的名词术语,运用您所获得的三大力,开启你的在it路上的新道路。时间也差不多,我们想给大家分享的到此结束,但it是无止境的路,我们也会在公众号上回答您的问题,只要您愿意与我们互动,我们是社群爱好者,不是盈利企业,希望对社区贡献出一点与大家一同进步。谢谢各位今日的参与,我们下次再会了。公众号回复:座谈会资料,获取相关连接