高级程序员和普通程序员有哪些区别?

论坛 期权论坛 study     
匿名的用户   2019-6-10 01:18   7061   5
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
热心的回应  16级独孤 | 2019-6-10 01:18:03 发帖IP地址来自
先不说高级。
就只说初级程序员经常容易犯的错误,把这些错误改正了,你离中级就不远了。


初级程序员经常犯的错误集锦


1 命名不规范
2 日志不规范
3 拒绝写接口和假数据
4 不写单元测试
5 盲目集成
6  逻辑不清
7  不做方案
8 不关注性能
9  害怕重构
10 做出来就好,不考虑优雅的方案
11 不考虑未来需求的变化
12 遇到问题的时候不会试错
13 不会写伪代码
14 不做数据量的预估
15 提交代码不规范
16 不喜欢打Tag
17 不遵守发布流程
18 不知道Bug修复的优先级
19 总喜欢手动修改线上代码
20  不做数据备份
21 不做自测
22 不尽力模仿真实数据,测试数据很随意
23 不抽取公共代码
24 不认真听需求讲解
25 不看验收标准
26 不主动推进项目进度
27 遇到难题不主动反馈






一 命名不规范
   命名很随意,当时写代码特别High,什么奇奇怪怪的命名都有的:xiaonaigou,xxxx,j1,jl,llst.
   完全意识不到全名规范的价值和意义。


二 日志不规范
    日志?那是什么鬼东西,能吃么?
    曾经有一个从文思海辉出来的小伙伴,三年后端工程师经验,出了问题不知道怎么解决。
    只好重启。


     找我来协助,问他,怎么错了?
    不知道。
   日志呢?
    没有。
   晕,那怎么解决问题,神仙也搞不定啊。


   后来才知道,他们解决问题都是本地改代码然后直接部署,重新访问看错误消失没,没有消失就继续在本地改源码。


三 拒绝写接口和假数据
   一个菜鸡不可怕,可怕的是菜鸡遇到菜鸡。曾经有一个项目中的两个菜鸡,一个前端一个后端,他们很欢快的调接口,根本不写文档 ,两个人效率特别高。
    直到有一天,发现项目可能做不完了,需要另外两个前端菜鸡协助一下。
    新来的两个菜鸡要获取后端的数据,不知道接口的Url地址,不知道Get还是Post,不知道发送的参数和返回值。就这样写!
    我压根没想到可以这么写代码,两个菜鸡很开心!拍手称快:通了,通了,通了!
    我说你们通什么呢?他们说接口终于通了!原来他们两个参考之间的页面,硬生生的一次一次不停的尝试,就这样把接口猜出来了!
    这就是编程的乐趣吗?


     还有不写假数据。曾经有一个马姓小哥,对赵姓小哥信誓旦旦的说:3天,给我3天时间 ,我把真数据给你。
   于是赵姓小哥信以为真。就这样,3天又3天,3天又3天,3天又3天,3天又3天,3天又3天。
   整整一个半月,赵姓小哥都没有拿到全部的数据!


四  不写单元测试
    确切来说,是不按TDD的方式开发。在现在IDE这么强大的情况下,先写单元测试的习惯,不仅仅是代码的严谨性,也是效率的代名词啊。
    可是很多菜鸡理解不了单元测试的价值,没关系,等到代码重构,需求变更的时候,就哭都哭不出来了!
    好的单元测试,你的逻辑必然会清楚。
五  先集成,再测试,再放弃。


       很多时候,菜鸡在引入第三方的库,框架,接口或者是服务的时候,最喜欢的事情就是直接和自己原有的代码集成在一起。


   结果 是什么呢?突然间不能用了,跑不起来了,不知道问题出在哪了,根本分不清倒底是第三方的问题还是自己的问题。


   好的方法是什么?先跑通官方提供的Demo,再想办法一点一点加上自己的业务。


六  理不清楚逻辑,边做边猜
  前端在这里的问题特别多,做支付,不清楚支付的流程,分不清楚定义,总以为前端就是接口处理好数据展示好拉倒。
   很多菜鸡都会有这种习惯,这样不好,先把逻辑处理好,弄清楚流程,再去动手才好。


============我是睡了一觉没睡醒的分割线======
七  不做方案
      不做方案代表什么含义呢?就是完全凭直觉行走啊。
      跟闭上眼逛窑子一样。


      写代码的好习惯应该是先在脑袋里把所有的需求细节过一遍,实现细节拿出来。
      上个月就有一个张姓小菜鸡,做一个匿名评论的功能。
      基本上没有什么经验,脑子也不好使,给出的方式是什么你们猜得到么?
      用户刷新一次就往用户表里插入一条数据,密码默认昵称随机。


     不多说了都是泪,我见过太多让人目瞪狗呆的方案了,看着满屏的代码,你怎么帮他调错调优,最好的方式就是全部重写。
      做方案的好处太多了。


8 不关注性能
    不关注性能也是新人很容易犯的错。什么是性能呢。对后端来说就是TPS和响应时间,对前端来说就是响应时间。
    很多新人程序员的习惯就是把东西做出来,然后再优化。
    最后就是东西做出来了,优化留给别人了。


   对性能的关注也是晋升中级程序员最关键的技能点。在写代码的时候,有经验的工程师已经知道了这个方法这个函数这个功能点的性能怎么样,瓶颈在哪里。


9 害怕重构
    “程序员最大的勇气就是看自己三个月之前写的代码。”
      其实重构并不应该是在几个月之后重构,最好的方式是实时重构。写一天代码,70%的时间都放到重构上都不过份。
     而新人呢,磕磕跘跘的完成一个功能,就跟多米诺骨牌做成的大黄蜂一样,你敢动一下他的代码试试?他会跟你拼命。
   你让他自己动一行代码试试?


     不重构在某种程度上也意味着你的代码实现无法重塑。
10 做出来就好,不考虑优雅的方案
     有个词叫做最佳实践,其实编码规范和最佳实践,是编程功底的重要体现。
     优雅方案可以认为是最佳实践的升级版,它和上面说到的不断的重构是相辅相成的。


     不好的方案是什么呢?硬编码居多,没有可扩展性,用很丑陋的方式完成了功能。
     上次他们去做了一个关于试听课的方案,一个人能试听多少节课,正常的逻辑应该是在用户的表里加一个字段来表示。
    需求是写着邀请几个人,可以试听多少节课,所以他们判断试听多少节课就直接在通过邀请人的表里查询去做。


    完全没考虑到以后如果我变换了试听课的判断条件怎么办?
   实际上这是应该拆解成两部分,一个是试听课的产生条件,这是一个独立的模块,加一个是试听课的确认。
  像这种例子太多了,也和不做方案,不考虑扩展性有关系。就是接下来要说的。




11 不考虑未来需求的变化
   工程师的水准,其实可以分成以下几个阶段(马丹我找不到之前在哪个答案里写过了):
    面向功能编程
    面向性能编程
    面向未来编程


    工程师拿到需求的第一件事,应该聚集在以下几个问题:
   第一 哪些需求是我之前完成过的
   第二 哪些需求是有可能变化的
   第三 有几种方案,分别支持什么样的需求变化


    但是差一点的程序员就考虑不到那么远,一个是对业务不熟悉,判断不出来哪些需求可能会产生变化,一个是对可选的方案掌握的不多,根本就没有什么可选的余地,还有就是没有这种思维习惯,分不清楚哪些是现在要完成的,哪些是未来可能会支持或者是变动的。


12 遇到问题的时候不会试错
    这也是新手常见的问题。很多时候新人会遇到问题,解决不了,去找一个有经验的工程师,这个有经验的工程师呢,大概也未曾遇到这种情况,但是他解决问题的思路清楚啊。
      一会儿试试这个,一会儿删删那段代码,很快就跑通了。


    解决问题是一个很见功底的技术点,而且是有很多方法论的,之前总结过一些,简单列举过来:
   1.寻找正确的代码
   2.理清楚正确的执行顺序
   3.重现错误
   4.最小化错误产生的场景
   5.修改代码到一个已知的错误类型


   等等等。
   解决问题就是一个分析推理的过程,而在这里呢,背后的功底就是你知道很多哪些是肯定不会错的小公理,然后再挨个去定位可能产生错误的环节,分解流程是最基础的工作。
13 不会写伪代码


   伪代码是什么呢?就是自然语言啊。其实编程只有三种逻辑控制块,顺序,循环,判断。
   所以你只要用自然语言来描述出来,先做什么,再做什么,什么时候循环,什么时候判断,
  代码写出来的问题就不大。
    这是一个先写伪代码再写细节的过程。你不要上来就开始平铺写代码(我之前讲过优雅代码之道,有兴趣的可以加群听一下,重点讲了怎么写出来优雅代码)。
   平铺代码是最菜的方式,好的代码是有结构的,有不同的抽像层级。


    第一步,干嘛。
    第二步,干嘛。
    第三步,干嘛。


    先把这个列清楚,这是伪代码的第一级。
    然后变成注释,这是第二级。
    删掉注释变成函数名,这是第三级。




   所以说,好的程序员写代码是不需要注释的,不是说让你把注释删掉,而是让你完成这三步升华的过程。
   写的好的代码,命名规范,你看到的真的是一首诗, 是一种编程语言,是在用语言来描述一件功能的完成,这种编程艺术的工业感很爽快,你看那些不爽的代码,简直了。。


14 不做数据量的预估
     后端工程师在前期经常会忽视数据量的大小,没有影成一个好的习惯。
     写代码只注重功能,没有一个关于数据量的概念。
    这个地方其实还和性能是一致的,在性能上,前后端并没有太大的差别。


   推荐的做法是,程序员要对数据很敏感,后端要知道每一个表的规模可能会有多大,当前的系统能支持的数据库表的大小是多大,而前后端都需要知道每一个操作,都分成了哪几个步骤,每一个步骤花费的时间是多少,大概占用的内存是什么样的。


   做到这一点其实并不难,难的是养成这种习惯,初级工程师眼里看的是功能和代码,中级工程师眼里看到的是数据和时间。




[h1]  更新于20180801-1621,下次继续,好饿。[/h1]

15 提交代码不规范
16 不喜欢打Tag
17 不遵守发布流程
18 不知道Bug修复的优先级
19 总喜欢手动修改线上代码
20 不做数据备份
21 不做自测
22 不尽力模仿真实数据,测试数据很随意
23 不抽取公共代码
24 不认真听需求讲解
25 不看验收标准
26 不主动推进项目进度
27 遇到难题不主动反馈



==========这是现在的===========


好了。休息一下。眼睛疼。改天继续。








========这是上次的=======
不说了不说了~~


  今天是被气晕了。




……我是睡了一觉开心分界线……


也许你们也会喜欢看这个
如何推翻JAVA的统治地位?



今天有时间我会继续写~
果然还是吐槽容易产干货啊
3#
热心的回应  16级独孤 | 2019-6-10 01:18:04 发帖IP地址来自


如何区分高级程序员和普通程序https://www.zhihu.com/video/1057783927632232448
搬运一个最近很火的视频ε=(ο`*)))




在我看来,能修电脑/修网络/装系统/能装盗版PS  的程序员,就是高高高高级程序员!
4#
热心的回应  16级独孤 | 2019-6-10 01:18:05 发帖IP地址来自
高级程序员:
  • 知识体系完整
  • 有自己的学习方法
  • 形成了自己的心智模型,知识可以迁移,可以高效切入不同的领域(IT范围内)
  • 拥有真正的经验(不仅仅是做过些什么,更有面向未知的解决问题的能力)
  • 有系统性思维。就算没有到架构师的级别,写代码和改Bug,都能从整体上去思考和把握。
普通程序员:
  • 知识体系零散
  • 毫无自己的学习方法
  • 和某种语言绑定比较深,知识无法迁移。换门新语言,或者领域就不知所措
  • 没有经验却以为自己有经验。(比如以为自己有三年、五年、十年经验,只对自己做过的比较顺手,但是碰到未知的问题,就束手无策)
  • 无系统性思维。写代码、改Bug,毫无工程素养,拆了东墙补西墙
5#
热心的回应  16级独孤 | 2019-6-10 01:18:06 发帖IP地址来自
看过这样一个故事:
之前有一个把fortran改写为C的项目,团队十几个人吭哧吭哧干了两周,看着进度不乐观,压力越来越大,开始加班。

而这期间总有一个老头每天来几个小时,坐在电脑面前敲一敲代码,然后下午六点,准时提包走人。而我们还在那里加班,休息之余,也议论过这个老头,据说是一个高人,但是没人看出高在哪里,代码路过的时候瞟了一眼,完全看不懂。

于是接着加班。

结果有一天,本来风雨无阻的老头没再来。当初年少无知的我们私下里嘀咕,不是挂了吧?结果 Leader 果然把我们叫到一起,说要宣布一个重要消息:这个老头写了一个转换器,可以自动把 fortran 的代码给转成 C 了,转换后的代码稍微调整后就可以过编译。
大家全部都转测试吧……
家全部都转测试吧……
全部都转测试吧……
部都转测试吧……
都转测试吧……
转测试吧……
测试吧……
试吧……
吧……
……

所以啊,一般程序员拿到任务时就是想着抓紧敲代码,敲个几千行,哪怕是加班到凌晨,想着自己多努力多敬业,想着赶紧实现功能完成任务。
而高级程序员虽然也是想赶紧完成任务,但他们是想着怎样让自己的代码更加优化,怎样更有效率的完成任务,而不是浪费大把的时间仅仅去敲代码。
还是古话说的好:「磨刀不误砍柴工」


————————
上面引用的是 @李楠 的回答,原文链接:程序员到底有多累、多辛苦? - 李楠的回答 - 社区
谢谢评论区的提醒!


点击以下关键字了解更多相关内容——
自由工作自由工作体验 | 自由工作安排 | 找靠谱程序员 | 编程经验 | 业余赚钱
编程相关代码审查 | 审查必要性 | 开发 APP 要多久 | 奇葩需求 | 无 BUG
程序员神逻辑初高级区别 | 烦什么样的程序员 | 崩溃的事| 形象 | 强迫行为
6#
热心的回应  16级独孤 | 2019-6-10 01:18:07 发帖IP地址来自
我们用新兵老兵来比喻普通程序员和高级程序员吧。
接到作战指令,要攻占一个山头。
新兵一听到指令,立刻向山头前进。
老兵一听到指令,先揣摩一下这个指令的含义,攻占山头的意义,如果不清楚,向指挥官问一问为什么。
新兵遇到敌人,好啊,来当兵就不怕打仗,就是一个字——干!
老兵遇到敌人,先卧倒,观察一下,看看敌人有多少,搞不搞的定。
新兵遇到雷区,怕什么,勇往直前,扫掉所有的地雷。
老兵遇到雷区,咱们绕过去吧。
最后,终于攻占山头了。
如果新兵运气好,这时候还幸存着,但基本上也灰头土脸了,一边擦脸上的血和汗一边,一边喋喋不休,向往着下一次战斗如何逞英雄。
老兵则是点一根烟,回顾一下这次吃了什么亏,记下来,下次不能再犯了。
请自行脑部普通程序员和高级程序员在开发中的表现。

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

本版积分规则

积分:32080
帖子:6440
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP