我是一个对前沿科技非常感兴趣的人。根据“技术采用生命周期”,我应该算是“早期使用者”。
(👆这张图有一个错误:“早期采用者”和“早期大众”之间应该隔着一个“认知鸿沟”,如第一张图所示。这张图画错了。)
从2022年11月下旬的ChatGPT 3.5发布到现在,我应该是见证了AI在短短不到4年的时间里一步一步发展到现在的样子的。因为我是计算机科学专业的,所以似乎这一切都变成了理所当然。从我在校期间的AI难堪大用,到现在刚毕业就碰上AI正逐步接手软件工程的大势所趋,在绝望之余也同时发现了一个问题——网上那些搞科普的、分享AI编程技巧的自媒体,他们写的文章都是脱离实际的。这其中甚至不乏那些互联网大厂的技术团队,也包括本社区(TRAE官方社区)的某些个人开发者。
虽然我在今年6月才即将脱离应届生身份、加入正式的程序员岗位也才一个月,但是因为接触到了实际的生产项目,故而在这短短的一个月里也积攒了一些宝贵的经验和技巧。如果我脱离了生产项目的实际,没有做到实事求是,我是断不可能积攒这些经验技巧的。只能说,人的意识在实践(劳动)中产生,《实践论》说的是真理。我一直在呼吁大家,技术人员更要学习政治理论,政治理论不是因为你学的是理工科,就可以凭空在脑子里面冒出来的。政治理论是地基,技术是建立在政治理论之上的建筑。没有政治理论,技术再强也是虚无。
首先,马克思主义者认为人类的生产活动是最基本的实践活动,是决定其他一切活动的东西。人的认识,主要地依赖于物质的生产活动,逐渐地了解自然的现象、自然的性质、自然的规律性、人和自然的关系;而且经过生产活动,也在各种不同程度上逐渐地认识了人和人的一定的相互关系。一切这些知识,离开生产活动是不能得到的。在没有阶级的社会中,每个人以社会一员的资格,同其他社会成员协力,结成一定的生产关系,从事生产活动,以解决人类物质生活问题。在各种阶级的社会中,各阶级的社会成员,则又以各种不同的方式,结成一定的生产关系,从事生产活动,以解决人类物质生活问题。这是人的认识发展的基本来源。
人的社会实践,不限于生产活动一种形式,还有多种其他的形式,阶级斗争,政治生活,科学和艺术的活动,总之社会实际生活的一切领域都是社会的人所参加的。因此,人的认识,在物质生活以外,还从政治生活文化生活中(与物质生活密切联系),在各种不同程度上,知道人和人的各种关系。其中,尤以各种形式的阶级斗争,给予人的认识发展以深刻的影响。在阶级社会中,每一个人都在一定的阶级地位中生活,各种思想无不打上阶级的烙印。
马克思主义者认为人类社会的生产活动,是一步又一步地由低级向高级发展,因此,人们的认识,不论对于自然界方面,对于社会方面,也都是一步又一步地由低级向高级发展,即由浅入深,由片面到更多的方面。在很长的历史时期内,大家对于社会的历史只能限于片面的了解,这一方面是由于剥削阶级的偏见经常歪曲社会的历史,另方面,则由于生产规模的狭小,限制了人们的眼界。人们能够对于社会历史的发展作全面的历史的了解,把对于社会的认识变成了科学,这只是到了伴随巨大生产力——大工业而出现近代无产阶级的时候,这就是马克思主义的科学。
马克思主义者认为,只有人们的社会实践,才是人们对于外界认识的真理性的标准。实际的情形是这样的,只有在社会实践过程中(物质生产过程中,阶级斗争过程中,科学实验过程中),人们达到了思想中所预想的结果时,人们的认识才被证实了。人们要想得到工作的胜利即得到预想的结果,一定要使自己的思想合于客观外界的规律性,如果不合,就会在实践中失败。人们经过失败之后,也就从失败取得教训,改正自己的思想使之适合于外界的规律性,人们就能变失败为胜利,所谓“失败者成功之母”,“吃一堑长一智”,就是这个道理。辩证唯物论的认识论把实践提到第一的地位,认为人的认识一点也不能离开实践,排斥一切否认实践重要性、使认识离开实践的错误理论。列宁这样说过:“实践高于(理论的)认识,因为它不但有普遍性的品格,而且还有直接现实性的品格。”马克思主义的哲学辩证唯物论有两个最显著的特点:一个是它的阶级性,公然申明辩证唯物论是为无产阶级服务的;再一个是它的实践性,强调理论对于实践的依赖关系,理论的基础是实践,又转过来为实践服务。判定认识或理论之是否真理,不是依主观上觉得如何而定,而是依客观上社会实践的结果如何而定。真理的标准只能是社会的实践。实践的观点是辩证唯物论的认识论之第一的和基本的观点。
我曾经看过一篇阿里云的技术团队写的一篇介绍Harness工程(约束工程)的文章,里面对于如何落实harness、harness项目的文档目录长什么样子等等讲得头头是道,可是我第二天上班一试才发现,这文章里面讲的东西华而不实,根本没法落实到实际的一个项目当中去。因此,我决定结合我们集团的实际项目,写两篇文章来分享我这一个月的经验和技巧。第一篇也就是本篇,《在AI时代,如何从0接手一个项目?》。第二篇则发生在第一篇之后,叫《在生产环境中和AI协作编程》。
对于自闭症谱系障碍、ADHD、抑郁症、焦虑症患者,文章最后同样也有应对方法。
为什么是从0“接手”一个项目,而不是从0“开发”一个项目?
AI推广普及之后,我们在网上见过最多的有关于AI编程的内容无非就两种,一种是“非专业背景如何氛围编程一个新项目”,另一种就是“我/别人氛围编程的项目产生了什么效果”。但其实还有第三种——锐评前两种。(不得不感叹一下互联网生态的多样性)总结一下第三种的话术,大概有以下几种:
- 某些只有前端页面的网页根本不配称之为“项目”;
- 就算你做出了完整的项目,你没办法盈利,你的商业模式不完整,甚至于没有。所以你的项目只能算个玩具。
- AI的上限取决于人的上限,AI只是抬高了下限,所以“文科生”做出来的东西只能符合第一条,因为现在的AI还没办法解决软件工程层面的问题,而项目的复杂度上来了,免不了要牵扯到软件工程,可是“文科生”又不会软件工程,因为“隔行如隔山”。
但其实在我看来,这种说法只说对了一半。因为他们漏了另一种情况——接手一个项目。
在实际的求职环境中,企业招程序员,很少是因为企业想从头开发一个系统,最普遍的情况往往都是“我们已经有了一个系统,我们招人是为了维护这个系统的”;而如果是给客户做软件开发解决方案的公司,那么这个理由也会变成“我们招人是因为人手不够,想提升开发效率的”。这种情况在招聘软件上有一个专门的二级或三级岗位选项,叫“运维开发工程师”。听名字你是不是以为是机房运维那种的?其实它就是程序员的其中一种,我也被这个名字骗过。运维开发,才是最普遍的岗位需求。我只见过一个想从头开发一个系统的公司,那家公司是我们大连本地的一家教辅材料出版社,因为最近两年AI编程出圈爆火,所以他们也想探索一下AI编程,让AI使用python语言开发一个教辅材料的电子版学习资料。由于这家公司没有IT行业的基因,外加他们对AI的态度是“谨慎探索”,所以他们想招一个会python的、来了就能干活的、同时稍微会使用AI的程序员。这家出版社离我家还挺近,走路10分钟就到了,但因为我不会python,也成了一件挺遗憾的事。
从后疫情时代开始,经济连年下滑。再加上AI爆火给了企业降本增效的借口,未来开发新项目的需求会越来越少,维护现有项目的需求会越来越多。
假如你不会编程,也不懂软件工程,该怎么接手一个项目?
我记得在学计算机网络的时候,老师在介绍计算机网络的时候讲了一句话:
服务器里的虚拟世界是现实世界的延申,现实世界是虚拟世界的基础。
不知为何,这句话我一直记到了现在。后来我读到了一篇介绍AI做企业编程的文章,作者同样说了一句话:
在用AI协作编程之前,一定要梳理公司的业务。如果不梳理公司的业