心渐渐失空

导航

6年工作的感觉

打开新世界的大门:

在上大二时接触了编程。读完了900多页的《C++ prime》,当时心里想着编程语言真是灵活又强大,什么都可以做。计算机就像一张白纸。我可以使用C++在上面乱涂乱画。顺序、判断、循环 三个逻辑能描述任何世界上的逻辑。学完C++语法之后感觉自己拥有了一切,可以用程序表达任何大脑中的东西并运行起来,它不像数学,只能停留在脑子里和草稿纸上,而是能写好规则、函数,然后自动完成任务。但是实际上我还是什么也不会写,只会写一些书上的demo代码,完全不知道电脑游戏和软件是如何实现的。

软件的复用和规范:

大学期间也学了html和css来写前端页面,前端开发让我感觉都是在扣浏览器界面的边边角角,逻辑性不像C++那样,更多的是画图和点击触发的事件。也学了MFC和QT,它们和前端很像,都是添加按键,然后实现按键触发的业务逻辑。虽然没有C++语法有趣,但是这些东西能让我自己做出一些小demo,给老师写一个动态规划题目的计算程序,给同学写一个自动切换电脑壁纸的小组件,拿给同学和老师使用的时候不是一个黑窗口,而是有一个他们能用的界面。这让我意识到 这类工具我不需要了解他们具体怎么画出界面的,只要我会用就能实现出一些功能。慢慢了解了软件复用的重要性。原来编程不是随心所欲,而是要封装模块、复用别人的模块,是要制定和遵循一定的标准的。于是我读了unix系统编程和网络编程的两本上千页的著作。理解了操作系统的接口和大致内部原理。学习如何遵循和使用操作系统的强大接口。

高级逻辑的应用:

终于到了大三,需要为自己增加一些实际工作的实战经验了。连续的面试和被拒,当时认为是自己技术太菜,但现在回想,其实企业招人主要看中的是能不能加快项目进度,看中的是匹配度。被拒不是我一个人的原因。直到收到了第一个实习6k工资一个月的offer,做了2个月的网站后台开发,也学会了python,在工作期间一直在学习和使用python爬虫、matlab画图、编写数据分析工具和简单的推荐算法。让我感到我彻底脱离了计算机底层,完全是在研究一些算法和逻辑相关的东西。偶尔借用一些框架和库来实现或验证自己的算法。这和上学学的不一样,不用自己写前端,也不用关心底层的计算机接口。只需要学习一些流行且好用的爬虫框架、分词库、画图工具....怎么使用,然后使用他们来实现自己的猜想,一遍一遍的尝试直到猜想被验证,然后上线。让我感受到了算法的美妙和重要性,原来除了编程语言,算法也如此美妙,他是一些实用的方法,被前人总结归纳起来,写在书上,我只需要学习体会并灵活应用。于是回到学校我便开始读算法导论,由于大四找工作,该书只读了1/3,学习了前面的基础算法和数据结构,高级算法部分一直没读。

开发能力的提升:

大四课少,请了假去实习一整年。由于不太适应python推荐系统的开发,因为它和计算机底层没太多联系,我总感觉我计算机基础知识还没学明白不应该去做高层的算法和应用。于是没回实习的公司,而是踏踏实实的重新找了一个做C++系统编程的工作。实习期间,我虽然对C++基础语法了如指掌,但是实际上我能干的活很少。主要问题是没有中大型系统的开发经验,写小工具我熟,但是一个系统的代码量多了,就会出现一些问题,1是不自洽,功能复杂了就不知道怎么组织代码,代码写多了就会这里写的代码和那里写的代码结合工作的时候有冲突,不知道怎么改;2是不理解,原有系统就已经上万行代码,去阅读和理解它们对于实习期间的我来说可能都要一年的时间;这些情况一直困扰着我,让我没法写太多代码,只能写一个一个的小工具或者小模块。直到我学明白了面向对象设计模式和代码整洁、代码工程和重构等书籍,上学的时候一直看,却看不明白。工作了再看发现真的是太实用了。看完之后,每次有新功能时,我都能先设计一下,设计完成后编码就很快,代码量上万也能搞得定。唯独是团队协作起来比较慢。后面又看了一些devops的书籍,了解了微服务和快速迭代的思想。配合容器编排,能够降低团队协作成本。但没有实践的机会,因为我在做的还是系统编程,和微服务关系也不大,更用不到容器编排。

大型系统的构建:

直到工作4年后,换了一家做互联网金融的公司,原本想着业务好就过去了,入职工作了之后才发现,虽然都是编程,但也是跨行业了。新工作用的全是微服务思想,服务有脚手架创建,协议用pb定义,数据库也是组长就定的差不多了,作为开发者,我只需要编写这个pb定义好了的接口,而这个接口的实现,99%都是做参数校验,做各种安全校验,然后就是调用其他服务的接口,或者访问mysql。实现完了之后有自动发布平台,进行灰度发布。我这个开发者在里面充当的角色,就像是一个刷墙匠,房子由设计师设计好了,建筑师建筑完成,最后只需要给我一桶油漆,告诉我那面墙要刷成这个颜色。我甚至都不知道这房子为什么这么设计,用来做什么的,为什么要刷这个颜色。大型系统的构建,已经在我的上上级就构建完了。他们规范了这个系统的编码框架,设计了接口和数据结构以及发布平台,而我只需要增删改查和互相调用转发请求就行。这索然无味的互联网金融工作显然不是我期望的,我学习的大部分知识在工作中是施展不开的。它的工作体验甚至比互联网业务更糟糕,因为它是金融业务,所以写的90%的代码和工作时间都是在判断和校验参数是否正常!!!然而我也体会了互联网生产力之道,把所有工序都工业化,程序员只需要填补系统中每个接口的编码空缺。最重要的是,这些脚手架、协议生成代码、DB、缓存中间件、消息中间件、代码管理、工程管理、快速迭代和发布等等,都有开源的项目,搭建后便能使用。只需要体验一下互联网公司的这些基础设施,你就会知道一个互联网业务需要哪些基础设施,来构建一个大型系统。在大模型崛起的时代,也许未来大型系统中这些需要底层程序员来填补的编码空缺,也不再需要程序员了。

大数据时代:

2016年读完C++语法书之后,我就认为我拥有了编码这个世界的能力。然而过去的近10年职业生涯中,我一次一次认识到在这个编码的世界里,我需要遵循各种现有的标准,从硬件厂商提供的驱动,到操作系统提供的系统调用,再到库、框架和中间件提供的标准和接口,从学习小demo,到学习已有的算法和数据结构,学习设计模式和代码规范,学习微服务和devops。每一次学习,都让我认识到这个编码的世界并不是自由的,自由就会踩坑,就会变慢,而前人留下的框框条条就是为了让我不再需要解决他们遇到过的问题。从23年开始,大家看到了LLM大模型的威力。只要增加深度神经网络模型的参数容量,并把全世界的数据和代码整理好喂给它进行训练。它就能发挥出意想不到的能力。至此,编码的世界也许会从此关闭。未来的新人不再需要看上千页的C++ prime,也不需要学习各种编程世界中的规范和工具。他们只需要用自然语言向神经网络模型描述想法、问题,寻求答案,再一步步提示它调整错误。就能完成以往程序员用c/c++等编程语言完成的工作。在计算机中重新构建新的世界。正如尤瓦尔·赫拉利在《未来简史》一书中谈及的,不会很久,也许就20-30年的时间,数据将管理这个世界。大部分工作不再需要大量人力时间,人类的时间和劳力可以使用智能所代替。未来人类正真要做的,是保留自己的意识和创造力,学习哲学和历史,思考人类社会的未来发展方向。

综合能力素养:

初学编程的这8年里,从刚开始的认为拥有了创造一切的工具,慢慢发现前人修好的路,最后发现用路来自动修路。才发现没有人能拥有一切。每个人做的,都是解决当下遇到的问题,走出自己的一条路,而做好自己的事情,需要的不是编程语言,也不是高深复杂的算法,而是自己的综合能力,能把事情做成,就好。需要什么,就用什么。

posted on 2023-12-08 12:04  心渐渐失空  阅读(6)  评论(0编辑  收藏  举报