[编程开发] 程序员如何能提高自己的编程水平?

[复制链接]
defiler 发表于 2023-10-4 18:58:22|来自:北京 | 显示全部楼层 |阅读模式
程序员如何能提高自己的编程水平?
全部回复5 显示全部楼层
xinlaide 发表于 2023-10-4 18:59:05|来自:北京 | 显示全部楼层
1会抄
2知道该去哪里抄
boat 发表于 2023-10-4 18:59:56|来自:北京 | 显示全部楼层
本人说三点,第一去关注做业务以外的事情,第二去解决实际问题,尤其是值钱技术的问题,第三靠跳槽,找到能提供更值钱技术实践经验的项目。
下文就以Java为例,讲讲如何高效提升编程水平。先讲些看似能行但效果不好的做法。
1 看源码,这方面如果脱离项目开发单看源码,一定是看了就忘记。这里哪怕背熟了写得再精妙的源码,不用的话顶多3个月就忘,所以单看源码一定不行。
2 同理,单看理论方面的资料或看视频,效果也不好,比如去看微服务分布式甚至是云端k8s的资料,只要在当下项目里用不到,那一定会前看后忘。至于去背面试八股文,其实在面试过程中,如果无法证实自己值钱技术的项目实践经验 ,甚至连背八股文的机会都没。
3 过多关注于单机版的技术。这里解释下,Java单机版的技术比如是多线程并发,锁或者是集合底层技术,或者是其它api。和单机版相对的是分布式组件,比如搭建业务集群或组件集群。单机版技术不是不重要,但java要升级到高级开发,一定得掌握和单机版相对的分布式等技术。
4 过度重视业务。重视业务不是不重要,毕竟这关系到开发,但如果只重视业务,看似能在组里甚至是公司里能独当一面,但如果跳槽到话,只知道当前公司的业务不熟悉技术,一定不行。
总之,如果程序员只去看理论或技术,不管这些理论如何值钱,只要没机会在项目里用,或者是无法在面试中有效证明自己相关技术的项目实践经验,这些动作大多是无用功。
然后再说如何高效提升。首先得看项目里开发以外的事情,比如测试,部署以及如何在服务器里监控系统。
1 测试的话包括单元测试和压力测试,这块还包含如何同sonar等代码质量管理工具集成。
2 部署的话一方面包含maven和git以及jenkins等工具的用法,另一方面还包含如何在linux服务器上安装业务系统安装组件的方式。
3 系统上线后,一定会有各种监控工具,比如监控数据库慢查询,监控服务器是否工作正常,监控不正常后还会发邮件通知。
上述测试是程序员做的,部署和监控一般是由运维做,但如果程序员上心的话应该能掌握到位。这些技术一般先从api、部署配置文件和命令看起,然后再逐渐深入看细节。上述点那么是再简单的项目都会有,而上述技能掌握后,程序员就一定不仅仅只会做开发,而且能为后继掌握分布式高并发微服务打下好的基础。
如果可以的话,程序员更应当去多参与项目上线的工作,这过程中包含了大量组件和项目等方面的技能,可以说,很多技能哪怕写代码半年一年都无法掌握,甚至都不知道,但参与一两次发布,第一能知道后面该学哪些,第二甚至能在系统上线过程中直接学会。
为什么要在项目中实践上述技能呢?因为java高级开发或架构,姑且不论架构集群组件方面的技能,至少得走通项目开发测试部署相关流程,并能需要在这些过程中能独当一面。事实上如果程序员不掌握上述技术就去空谈架构,往往会缘木求鱼。
再说通过解决问题来提升。这里的问题包括业务问题和组件方面的问题,其中比较值钱的是组件方面的问题,而排查问题的基本步骤一般是看日志以及通过些命令和工具定位问题。
这里通过看业务问题,一定能进一步熟悉业务,以及做业务的相关组件,比如日志组件或限流组件等,而通过看分布式组件方面的问题,更能为后继面试证明自己的实力准备素材。
这里顺带提一句,如果程序员只关注自己业务的话,如果非自己的问题完全可以不问不理,但这样很容易成为只会增删改查的初级开发。这里推荐的做法是,组内有问题,哪怕不是自己的,尤其是组件方面的问题,一定得问,哪怕是事后复盘也好,一定能提升自己组件部署等方面的经验。
写到这里本人想说的是,提升编程水平的目的是变现,比如通过跳槽找到更好的工作,或者至少是能找个能提供更值钱技术的项目,相对地,如果本身项目包含的技术偏低,其中的程序员由于缺乏值钱技术的实践经验,其实是很难提升的。
具体在java方面,可以说分布式微服务组件是个界限,不少小公司的程序员可能对单机版的开发技术掌握很熟,也很熟悉本项目的业务,但由于缺乏分布式微服务组件的项目实践机会,真可能长时间呆在小公司,最终只成为增删改查程序员。
这块该怎么提升?第一通过面试得到值钱技术的项目实践经验, 第二在项目中真正提升。
操作原则是,先熟悉各组件的api,最好搭建个环境真正调个api试验下,再结合自己的项目找个这个组件的使用场景,三是结合网上文章,当然最好是自己项目里真实情况,准备些解决组件方面问题的说辞,这块最好涉及源码。
这里不少人会认为架构层面的分布式高并发和微服务很泛,不知道如何提升,也不知道面试时该怎么证明能力,其实这些技能,包括其它值钱技术,都可以从API和配置文件方面入手,进一步可以说明怎么搭建环境和如何解决实际问题。
就用比较常见的kafka消息中间件为例,哪怕你项目里技术过于简单,没用过个组件,那么怎么准备?第一就搭建个kafka环境,真实调用下kafka的api。第二在自己的项目里找个必需要用kafka的场景,比如支付通知,这块一定要想好,如果当面试官认为这个场景用不到,效果一定适得其反。第三在面试中,说明这个场景,再说下我kakfa是怎么发消息的,把api说出来,配置方式说出来,这样一定能证明自己在项目里用过kafka。
当然光会api还未必够,这里可以再扩展下,看下linux里搭建kafka组件的方式,或者是配置kafka集群的方式,面试中通过说些细节,比如命令和配置,就能证明自己搭建过环境。
更为重要的是,大家可以事先从网上找大量kakfa相关问题的文章,比如kafka代码没写好会导致OOM,kafka如果接收服务器down了会导致库存消息过多,这些文章里一定会有解决方法,再结合自己的项目场景改编下。比如人家是订单支付场景遇到的kafka问题,你的业务场景是企业信息发送,改下场景说下即可。
但是在面试中应当反过来说,比如在自己企业信息发送场景里,由于参数配置不对,导致了线上OOM问题。自己通过输入一些linux命令看情况,再通过看日志,看到日志里有xx异常,再通过一串定位,阅读了xx源码,定位到问题,然后解决,其中的细节人家的文章里应该能找到,这样哪怕你项目里没用过,面试官一定能相信你这方面的能力。
上文说的是单个组件层面的能力,类似于kakfa组件的redis,dubbo等都可以照此办理,第一结合项目业务说api和配置怎么用,第二说如何搭建环境,第三说如何解决问题,这方面真不难,只是费功夫。不过哪怕是增删改查程序员在面试中,更可以准备再高一级的,即架构或运维方面的技能。
这方面可以从如下哪些点来准备呢?比如项目监控,一般项目上线后会用zabbix或skywalking等组件监控,当项目服务器down了,或者数据库请求过慢会告警,这块虽然是运维的活,但你真可以去看些搭建zabbix的文章,外带看些配置相关文章,再准备个根据监控告警然后看日志然后解决问题的实例,这块不难。
如果你项目里用到过docker或k8s,就去看相关api和配置,这本身就是值钱点,当然如果解决过真实问题那最好。如果项目你没用过此类技术,就去看项目部署相关技能,比如jenkins部署,或者是jenkins整合sonar做质量管理,同样可以通过配置文件+解决过的问题来说。
在架构层面,集群是个很值钱的而且是属于必问的技术点,比如你可以说,你在项目里怎么搭建redis集群,怎么搭建zookeeper+dubbo集群,怎么搭建nacos集群,这块其实就是一些命令+配置,说到这块其实真就可以了。集群还包括业务集群,即几个业务节点用负载均衡组件或云组件串起来,这些步骤也能通过搭建命令+配置文件的方式来说。
当然如果再进一步,可以说下集群层面解决过哪些问题,比如节点失效后收到告警邮件后,你是怎么看日志分析处理的。老规矩,项目里没机会用,就到网上找,再根据你的业务场景改编。
当然如果再扩展一下的话,大家平时可以多收集些问题,这些问题的范围包括,OOM问题,数据库性能问题,redis+分库分表相关的性能问题等。
这方面的操作要点是,只要网上看到有解决线上问题的文章,只要其中包含分析问题解决问题的步骤的,当然最好再包含源码,这块你就根据你的业务改编下,当成你解决过的问题。
最后想说的是,程序员在自我提升过程中,千万别自欺欺人,目标一定要很明确,即尽早拿高薪,尽早进好公司。就以这个目标,大家其实真能排除到很多华而不实的提升方法。
而且越往上的阶段其实越难提升,比如java程序员提升的瓶颈往往是架构师这个级别。而本文给出的方法,不仅涵盖了项目实践层面,而且还涵盖了面试准备层面,一定会对大家有帮助。
如果大家感觉本文有帮助,请多多帮忙点赞,这样的话,本人就会有更多的动力输出程序员如何通过面试谋求高薪的文章。
abc110 发表于 2023-10-4 19:00:26|来自:北京 | 显示全部楼层
找准兴趣点,锚定一个项目,深挖深挖再深挖,思考思考再思考,写代码写代码再写代码,把这个细分方向的项目做精了、写足了,就无敌了。
我一直说爬虫是初学者最好的练手项目,因为它天然地具备成就感积少成多、成就感获得周期短、能够激发兴趣的特征,而且技术难度由浅入深、难度梯次特别合理。按这个套路不断地迭代、循环、做优化,激发自己的兴趣,然后爬虫就稳了。
下面说具体步骤:
1、首先明确一个概念,即理论上爬虫可以爬网上的一切,当然了,涉及安全保密或者敏感的,别碰。有了这个概念,你就可以开始想,自己有什么潜在的兴趣爱好可以用爬虫来辅助了。
2、选择一个你感兴趣的爬虫领域,比如哈,你喜欢看足球,喜欢曼联,那你想不想把网上所有所有的关于曼联的一切的新闻、图片、战绩、所有的队员的八卦、所有队员的老婆的照片,都收集起来?
可能你不想,可能你的爱好是知乎看小姐姐,但是去找帖子好麻烦,那你想不想用爬虫的方式自动化地采集知乎上所有的漂亮小姐姐的照片,根据点赞数、根据评论内容的情感度分析,采集10万张漂亮小姐姐照片,再综合打分排名?
3、以知乎小姐姐项目为例,开始细化自己的需求,从0开始做起
(1)第一步,查一下Python采集一个网页的函数是什么
(2)把采集一个网页完整地打印出来
(3)尝试怎么把这个网页里的所有的照片都识别出来,是按照jpg、png这些格式来识别呢,还是按div的属性等去识别呢
(4)识别到图片之后,怎么去采集、下载这个图片呢,下载了怎么进行存储和分类管理呢
(5)一个网页的照片较多,怎么批量下载呢
(6)以上是固定地下载一个网页,怎么让爬虫自己智能地去寻找网页呢
(7)如何智能地在知乎上搜索“漂亮小姐姐”关键词,再把搜到的网页纳入搜索呢
(8)接7,搜到了知乎,把第一页的网页采集完了,怎么进入下一页继续进行搜索呢
(9)采集下来的照片怎么进行打标签呢,比如长发小姐姐、知性小姐姐等,这些标签怎么存储呢
(10)9中的标签从哪里来呢?是自己做图像识别来获取、还是从和照片一起出现的文章中分词、筛选出来呢
(11)你想不想看广大知乎网友对每个小姐姐的评价呢,要不要计算一下每张照片的情感度(夸的人多、还是贬低的人多),进而做出知乎网友审美画像
(12)你想不想看知乎网友流氓程度排名?根据他们的点赞和评论,给每个人的流氓程度打个分?
(13)几十万张照片采集下来之后,这没法看啊,你试试放到一个文件夹里,可能会很卡,那怎么查看呢,要不要配套做个网站、或者播放器,去播放一下?
(14)播放功能做好了,要不要配个背景音乐功能?
(15)爬虫会不会很卡,要不要计算一下每采集100张照片需要多长时间?怎么才能缩短呢?爬虫的性能需不需要优化一下?
(16)知乎图片不够你用了,你要不要爬一下百度图片?
(17)百度有反爬虫功能,那如何才能破解这个反爬虫功能?
如此等等,学习计算机编程一定要学会挖掘需求,一定要学会坚持。相信我,把我前面罗列的一条龙需求实现了以后,基本上找个大厂、中厂问题不大了。
UPG_DRAGON 发表于 2023-10-4 19:00:34|来自:北京 | 显示全部楼层
技术水平提高最好的途径是做需求,看源码、刷题这些都是都是浮在面上的,真正进入团队天天加班做需求的时候,发现那些所谓的技巧用上的极少。实际开发的时候都是自测没什么问题了,一提测,测试依然可以测出重大bug,这就是做实际项目和自学完全不同的地方,自学只是0到1,实际项目是让你的技术水平从1到100的提升。
比如说现在Java面试很多都会问,哈希map底层什么数据结构,每个key下多少数据的时候是链表,达到多少的时候转成红黑树等等,这些问题你也许是背的也许是真的理解,但是实际写业务逻辑的时候你会想哈希map这些底层逻辑吗,根本不会。
再比如,动不动现在都搞高并发,等你工作才会发现,软件的稳定性才是主要的,很多并发就是加个锁完事儿了,你整的花里胡哨的一大堆,搞了半个月还是不稳定,老板可不会听你解释什么高并发。特别是工业领域,传统做法可能就是以天为单位,用软件能做到几分钟就非常了不起了,还并发个啥。
heronylee 发表于 2023-10-4 19:01:24|来自:北京 | 显示全部楼层
当然是用五颜六色的笔工工整整地手抄代码,然后拍照发某红书啦(狗头

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则