问问葱里的程序员们,写多少行代码才算是高手?
本人最近在进行一些算法模型的开发,但是遇到一些工程化的工作问题需要去解决,实在是头痛。
由于本人不是科班程序员出身,对一些技术栈确实第一次接触,比如FASTAPI,K8s, docker etc., 有点艰难。
虽然也对后端开发有一些兴趣,但是比较犹豫在这一条道上花费精力和时间。
想要问下在这方面,达到多少行代码经验,才算够用了呢。
纯技术讨论,感兴趣的葱油来聊聊。
由于本人不是科班程序员出身,对一些技术栈确实第一次接触,比如FASTAPI,K8s, docker etc., 有点艰难。
虽然也对后端开发有一些兴趣,但是比较犹豫在这一条道上花费精力和时间。
想要问下在这方面,达到多少行代码经验,才算够用了呢。
纯技术讨论,感兴趣的葱油来聊聊。
代码行数没有任何意义。楼上还有一个什么国家二级的,简直搞笑。你怎么不说信息学竞赛。
楼主你要明白,没什么编程高手这么一说,因为编程能做的事情太多了。就好像你说的后端开发,本身就是一个非常专门的领域,如果你写后端代码的目的是就业,那一个人写一辈子代码,也不会有large scale的经验。同样,你有BAT支持千万并发的经验,在一个startup里也是屠龙之技,人家要你三个月出个POC,你花了两个月给人写架构,不是说有万能高手的。
而且代码行数也没有任何意义,同样以后端为例子,一大堆代码都是chatgpt都能根据数据库schema生成的,这种代码不能说质量不高,但重复性高的话,上千行代码两个小时连单元测试都写好了。这能根个人水平有关系?
编程要看实战环境。我举两个例子。第一,你给自己写代码,不找工作。这样,你写代码的意义就是满足自己的要求,比如办个反共论坛,从开源代码开始,加自己的功能,比如品葱投票帖之类。如果你的论坛发展很好,你会学到各种scale方面的东西,如果很多人攻击,你会学到安全方面的东西,如果你给你用的开源项目提交PR,你会学到开源协作方面的东西。然而,假设你的论坛注册人数几百,跟你的个人blog没啥区别,那你一直写代码加功能,也只是闭门造车,很可能代码质量非常垃圾,最后自己也看不下去了直接放弃项目。你写了十个项目,总用户一千,活跃用户就你一个,开源PR为零,那你写了一百个新功能五万行代码,对你来说提升价值也不大。
再举个例子,你写代码是合同工,别人让干嘛就干嘛,卖点是便宜,一百人民币一小时。让你做的都是两三个月的小项目,你写了十年,什么语言,框架热门就用什么,结果可能是自己融会贯通,也可能是变成代码胶水工。连何为高手都说不好,又何谈代码行数?
以上两个场景都不是常见场景。常见场景是找工作。根据你的技术水平,你的时间能否换成每小时三四百人民币起薪的钱(睡前),是一般人衡量水平的能力,因为毕竟创业成功率低,freelancer合同不是长久之计。那么我们怎么衡量编程水平?无非是项目经验,因为一般来说,以前没做过什么不代表不能做什么,但以前做过什么一般能说明可以做什么。主要包括:
项目数量
项目人数
项目内容
你的day to day work
如果你的沟通能力不是很差,基本上面试中都会被摸的八九不离十。不是说你本人是java的发明人之一,你就能胜任所有编程工作了,还是要看岗位协调性。
楼主你要明白,没什么编程高手这么一说,因为编程能做的事情太多了。就好像你说的后端开发,本身就是一个非常专门的领域,如果你写后端代码的目的是就业,那一个人写一辈子代码,也不会有large scale的经验。同样,你有BAT支持千万并发的经验,在一个startup里也是屠龙之技,人家要你三个月出个POC,你花了两个月给人写架构,不是说有万能高手的。
而且代码行数也没有任何意义,同样以后端为例子,一大堆代码都是chatgpt都能根据数据库schema生成的,这种代码不能说质量不高,但重复性高的话,上千行代码两个小时连单元测试都写好了。这能根个人水平有关系?
编程要看实战环境。我举两个例子。第一,你给自己写代码,不找工作。这样,你写代码的意义就是满足自己的要求,比如办个反共论坛,从开源代码开始,加自己的功能,比如品葱投票帖之类。如果你的论坛发展很好,你会学到各种scale方面的东西,如果很多人攻击,你会学到安全方面的东西,如果你给你用的开源项目提交PR,你会学到开源协作方面的东西。然而,假设你的论坛注册人数几百,跟你的个人blog没啥区别,那你一直写代码加功能,也只是闭门造车,很可能代码质量非常垃圾,最后自己也看不下去了直接放弃项目。你写了十个项目,总用户一千,活跃用户就你一个,开源PR为零,那你写了一百个新功能五万行代码,对你来说提升价值也不大。
再举个例子,你写代码是合同工,别人让干嘛就干嘛,卖点是便宜,一百人民币一小时。让你做的都是两三个月的小项目,你写了十年,什么语言,框架热门就用什么,结果可能是自己融会贯通,也可能是变成代码胶水工。连何为高手都说不好,又何谈代码行数?
以上两个场景都不是常见场景。常见场景是找工作。根据你的技术水平,你的时间能否换成每小时三四百人民币起薪的钱(睡前),是一般人衡量水平的能力,因为毕竟创业成功率低,freelancer合同不是长久之计。那么我们怎么衡量编程水平?无非是项目经验,因为一般来说,以前没做过什么不代表不能做什么,但以前做过什么一般能说明可以做什么。主要包括:
项目数量
项目人数
项目内容
你的day to day work
如果你的沟通能力不是很差,基本上面试中都会被摸的八九不离十。不是说你本人是java的发明人之一,你就能胜任所有编程工作了,还是要看岗位协调性。
楼主问的问题是有实际意义的,不懂的不要瞎几把回答误人子弟。代码行数不是一个精确的指标,但确实是一个有意义的指标。
我自己从事编程十几年,游戏应用都做过,也教过学生,从个人经历回答一下这个问题。以下仅涉及C/C++,不讨论其他语言。
3000~5000行代码,相当于基础语法过了一遍,写了几个俄罗斯方块,可以考国家二级
2~3万行代码,足够掌握基础算法和API编程了,补一补网络原理和数据库之类的辅助知识,可以大学毕业实习找工作
5万行左右代码,相当于持续工作几年,工作中需要用到的基本都接触过了。如果拿个什么比赛的名次,可以有机会进BAT当炮灰。
10万+代码,那么一定是自己专研某个领域或者独立开发某个项目到达一定程度,在这个领域有一定的自信的人物了。我实习的时候看过一本书,说某个日本企业委托美国人做游戏机。里面偶然提到能研发芯片的美国工程师最低必须是博士生,博士生的门槛是写过10万行代码。
linux 2.x内核,kernel目录下7万行代码,driver目录下占了几百万行代码,一个职业程序员如果在特定领域能攒下十万行代码,是有本事的。
我自己从事编程十几年,游戏应用都做过,也教过学生,从个人经历回答一下这个问题。以下仅涉及C/C++,不讨论其他语言。
3000~5000行代码,相当于基础语法过了一遍,写了几个俄罗斯方块,可以考国家二级
2~3万行代码,足够掌握基础算法和API编程了,补一补网络原理和数据库之类的辅助知识,可以大学毕业实习找工作
5万行左右代码,相当于持续工作几年,工作中需要用到的基本都接触过了。如果拿个什么比赛的名次,可以有机会进BAT当炮灰。
10万+代码,那么一定是自己专研某个领域或者独立开发某个项目到达一定程度,在这个领域有一定的自信的人物了。我实习的时候看过一本书,说某个日本企业委托美国人做游戏机。里面偶然提到能研发芯片的美国工程师最低必须是博士生,博士生的门槛是写过10万行代码。
linux 2.x内核,kernel目录下7万行代码,driver目录下占了几百万行代码,一个职业程序员如果在特定领域能攒下十万行代码,是有本事的。
我现在提交的很多PR净行数都是负的(底下小朋友堆的屎山不及时清理就清不掉了)。
真正可以称为算法的东西用编程语言几行就描述出来了。好的程序员一般是思考的时间多,可能需要查很多资料和已有的实现,然后用最少的功夫(包括代码量和时间)把自己的想法实现。
差的或者懒的程序员一般是把已有的代码复制一遍,把几个地方改一改就交差了。纯粹算代码量,感觉这些人还写得多,但是因为是复制粘贴来的,可维护性等都很差,优化什么更无从谈起。
所以楼主以代码量来衡量自己的水平,无疑是连门路都没找对。
真正可以称为算法的东西用编程语言几行就描述出来了。好的程序员一般是思考的时间多,可能需要查很多资料和已有的实现,然后用最少的功夫(包括代码量和时间)把自己的想法实现。
差的或者懒的程序员一般是把已有的代码复制一遍,把几个地方改一改就交差了。纯粹算代码量,感觉这些人还写得多,但是因为是复制粘贴来的,可维护性等都很差,优化什么更无从谈起。
所以楼主以代码量来衡量自己的水平,无疑是连门路都没找对。
高手与否怎么可能能用行数来衡量
论算法能力的话,跟你写出的运行复杂度是有关的.
不过这方面差不多就行了,除非你对这方面是真感兴趣
论合作,你写的代码他人要能看懂,良好的注释行为,单文件行数需要进行限制
论个人,如果不是支那公司那种赶猪上线项目.多思考能不能重构这些代码,有没有更好的实现方式?
失败了也不要紧,大不了还原再来.在失败的过程中你就会发现你对这门语言的不足,从而提升自己的水平
论算法能力的话,跟你写出的运行复杂度是有关的.
不过这方面差不多就行了,除非你对这方面是真感兴趣
论合作,你写的代码他人要能看懂,良好的注释行为,单文件行数需要进行限制
论个人,如果不是支那公司那种赶猪上线项目.多思考能不能重构这些代码,有没有更好的实现方式?
失败了也不要紧,大不了还原再来.在失败的过程中你就会发现你对这门语言的不足,从而提升自己的水平
我觉得写到不用看文档不用上网查询就能实现一个简单的算法或者功能逻辑就说得过去了,要写多少行能达到这个水平因语言和个人学习能力而异。再往上就是对软件和系统架构的熟悉和掌握,跟写过多少行就没啥关系了。
你抄寫幾萬遍print hello world也是幾萬行代碼,有進步嗎?
放棄做題家思維吧,重點是要懂
比方說什麼算法效率高,為什麼這裡要用算法a而不是算法b
或者這個package的原理是什麼,package a和package b看上去功能差不多有什麼實際不同嗎
再進階的,不同語言有什麼不同,為什麼看似都能解決問題但這裡你要用這種語言
放棄做題家思維吧,重點是要懂
比方說什麼算法效率高,為什麼這裡要用算法a而不是算法b
或者這個package的原理是什麼,package a和package b看上去功能差不多有什麼實際不同嗎
再進階的,不同語言有什麼不同,為什麼看似都能解決問題但這裡你要用這種語言
比行数比语言,感觉没有太大意义,主要是看你要解决什么问题,解决问题用什么方式,
比如说functional programming,
https://typelevel.org/
这一支技术栈要解决的问题,别的语言也许也可以解决,但是他们有他们特别的长处,最近因为license变化的akka/pekko,主要也是解决问题网络后端的approach比较特别,有一类特别适合他们这种解决方式的问题,
总的来说,特别是学习了functional program之后,看待问题的方式会有不同,解决问题的方式也会不同,
行数和用什么语言,自己得心应手的语言,都可以,
比如说functional programming,
https://typelevel.org/
这一支技术栈要解决的问题,别的语言也许也可以解决,但是他们有他们特别的长处,最近因为license变化的akka/pekko,主要也是解决问题网络后端的approach比较特别,有一类特别适合他们这种解决方式的问题,
总的来说,特别是学习了functional program之后,看待问题的方式会有不同,解决问题的方式也会不同,
行数和用什么语言,自己得心应手的语言,都可以,
代码行数是一个很粗糙的指标,通常不是衡量人水平的主要指标。一个好的程序员,最主要的能力在于,写出”可维护性“好,”可扩展性“强的代码。而这些代码意味着代码质量”高“,可维护性好意味着代码的可读性好,结构合理,清晰,容易理解,注释恰到好处,代码格式好看,让人读起来不头疼不头大。代码行数不能说明太大问题,因为垃圾代码的行数越多,越是一种”灾难“。
蛋用没有, 你找下一份工作人家还是看你刷题和吹nb的能力
普通写crud之类的东西,通常5万到10万可以达到mid-senior及以上。
但是更进一步当技术专家的话,行数意义不大,要的是知道怎么写出好代码。
技术大牛不是你能写出多么复杂的东西,而是能写出极其简洁易懂的有效代码。每一个func和内容都言之有物,定义得恰到好处,内容逻辑别人一看就懂,并且绝不会出现几百行一个func的东西。
这个不是写多少行能练出来的,更需要学习其它大牛的代码进行模仿。有的人可以写得简洁,但是调用极其复杂,很绕。有的人写得逻辑很直接,但是都放到一个文件里,func极其长,难以维护和阅读。
不过绝大多数程序员到了一定程度,都不想继续练技术了。更多人转管理,专注以系统设计
但是更进一步当技术专家的话,行数意义不大,要的是知道怎么写出好代码。
技术大牛不是你能写出多么复杂的东西,而是能写出极其简洁易懂的有效代码。每一个func和内容都言之有物,定义得恰到好处,内容逻辑别人一看就懂,并且绝不会出现几百行一个func的东西。
这个不是写多少行能练出来的,更需要学习其它大牛的代码进行模仿。有的人可以写得简洁,但是调用极其复杂,很绕。有的人写得逻辑很直接,但是都放到一个文件里,func极其长,难以维护和阅读。
不过绝大多数程序员到了一定程度,都不想继续练技术了。更多人转管理,专注以系统设计
和行数有关系,但不多(不要杠,入门的时候可能有点用,但也只是从新手变成熟手而已)
最重要的是你的理解和知识有没有随着代码的行数增加而提高
在印度外包公司每天写一样的垃圾代码,就算累积到几十万行那也只是个高级流水线工人而已
最重要的是你的理解和知识有没有随着代码的行数增加而提高
在印度外包公司每天写一样的垃圾代码,就算累积到几十万行那也只是个高级流水线工人而已
等你做了个几个不同类型的大项目后,就会感觉自己实力稳固了很多了。而不是以行数来算的。要做综合的项目,涉及到很多方面的那种
如果连编程都要当成做题的话,那我劝你别欺负电脑了
高手不需要写代码,高手只要知道如何去做,有人会帮你实现的
高手不是看写了多少行代码,而是算法水平,计算机基础知识,项目架构和编写能力综合评判的,顶尖高手看的就不是这些了,而是看能不能有前瞻性的眼光给industry做出多少impact