V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeekHub
ybw
V2EX  ›  程序员

对程序员这个工作的感想

  •  
  •   ybw · 187 天前 via Android · 5908 次点击
    这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对于 95 %的程序员岗位,他们整个职业生涯不会有一次和算法、数学打交道的机会,这些基础设施有在相关专业深耕多年的人才建立,一般人不插手也不应该去插手。

    绝大多数程序员真正的要求不是数学和算法,而是细心。

    认真阅读你用到的第三方库的文档和教程,认真理清你接手的项目的架构、繁杂的函数调用关系、对多线程和内存时刻保持警惕等。

    至于设计整体架构什么的,更多的是直觉或经验,而非智商。

    60 条回复    2020-03-21 12:41:25 +08:00
    guyeu
        1
    guyeu   187 天前
    怎么定义`和算法、数学打交道`呢?
    fx
        2
    fx   187 天前   ❤️ 1
    英语
    xabc
        3
    xabc   187 天前   ❤️ 4
    嗯,搞计算机不需要智商
    nianyu
        4
    nianyu   187 天前
    不会有一次有些绝对,绝大部分时间比较贴切
    其他说的都对,很多人有一个错觉就是程序员从事的是一份高智商的行业。小到增删改查到 AI 编译器写底层都不需要啥智商。
    minglanyu
        5
    minglanyu   187 天前
    做自己力所能及的事情。
    kwklover
        6
    kwklover   187 天前 via Android   ❤️ 5
    也要数学的,看写代码的方向了,有些初高中学的就够用而已。
    算法是必须的,不过我觉得大家对算法有误解,以为算法就是排序什么的,其实算法的定义是 解决问题的步骤,只要你为了解决一个问题,写出 1,2,3 这样的步骤,这个就是算法,算法导论里说的只不过是抽象出来的常用算法,不过那些算法大多数不需要会,一般的库都帮你解决了
    sicauxeon
        7
    sicauxeon   187 天前   ❤️ 2
    “整个职业生涯不会有一次和算法、数学打交道的机会”

    作为程序员照理应该去熟悉所使用的技术和框架,特别是当遇到问题和异常时,如果理解不足那问题就会很棘手。同时在解决一个问题或是实现一个功能的时候,有多个路径可以选择,那么这个时候怎么选择也是需要精细化的分析在里面的。那在这个过程中,我理解的熟练掌握经典算法应该是基础中的基础。

    “至于设计整体架构什么的,更多的是直觉或经验,而非智商”

    错把软件架构模式当成了一门手艺。

    “数学和算法”和“细心”,“直觉或经验”和“智商”,这两者所相对照的概念,并不在一个层次上。所以讨论 要 A 而不是 B,或更多的 A,而非 B,并没有太多的意义。
    ybw
        8
    ybw   187 天前 via Android   ❤️ 1
    @sicauxeon 你可以随手举一个例子
    cmdOptionKana
        9
    cmdOptionKana   187 天前   ❤️ 10
    “整个职业生涯不会有一次和算法、数学打交道的机会”

    错,几乎每次面试都需要。
    sudden
        10
    sudden   187 天前
    说白了,绝大多数就是搬砖,而且没有 review,质量要求也不高。
    guolaopi
        11
    guolaopi   187 天前
    @cmdOptionKana
    哈哈哈哈哈哈哈你有毒
    sicauxeon
        12
    sicauxeon   187 天前   ❤️ 2
    本来想举个例子的,但是你说 “95%” 和 “绝大多数” 感觉又无法说明问题。

    就我这边观察到的话,开发们对自己的代码应该有认真的态度和好的品味,当然这也需要一些像 code review 这样的过程建立起来,通过提升代码可测性和增加单测用例来控制千行代码 bug 率。经常线上遇到的问题,光看所用到框架的文档和教程是不够的。真实线上的流量和复杂的服务间依赖关系,排查问题可能要依次去定位到某个实例的锁争用、缓存系统、DB、任务调度等,而这又需要向下展开逐步定位到更细的位置。

    某个服务告警了,排查出是上游服务的抖动带来多个下游服务的告警,继续排查是因为某个实例 CPU 占用率不规则跳动,问题可能需要深入到虚拟机 GC 算法。。。so on and so on
    godgc
        13
    godgc   187 天前
    个人愚见其实每一次“细心”的设计一些代码模式,也可以定义为算法一种。算法无非就是某些方法、思路的排列组合和调优,算法从广义上讲和我们生活也是息息相关。当然你要说深耕某些具体场景下的算法,那确实是应该要由更专业的人才去完成,但是不可否认的是“绝大多数程序员真正的要求不是数学和算法,而是细心”确实没错
    newtype0092
        14
    newtype0092   187 天前   ❤️ 10
    不需要算法?知道为什么有些人包装数据把所有字段都扔进一个字典,甚至会有 a_1,a_2,...,b_1,b_2,...这样的 key 么?因为没有现成库函数不会递归处理多层结构。
    不需要数学?知道为什么有些人写出来的代码 if 套 if,层层叠叠看不清么?因为他们基本的逻辑运算都不过关,不知道怎么合并整理条件。
    不是那种十几页论文总结出来的才叫算法、才叫数学,算法和数学是程序的基础,你写出的每一行代码都是靠这些基础知识支撑的,不然你光照着文档抄就能写出程序了?当初中生抄青年文摘写作文呢么?
    tmado
        15
    tmado   187 天前 via iPhone   ❤️ 4
    有一感想是稍微有点追求的程序员容易过于清高,并不自觉伴有杠精体质
    hmckkk
        16
    hmckkk   187 天前 via Android
    看几个文档调几个 API 就可以开始搬砖了,只能说是国内的搬砖门槛太低了
    q8164305
        17
    q8164305   187 天前 via Android
    程序员说白了就是汽车组装工,跟流水线上的工人其实没什么两样,真正牛逼的是造发动机的那帮人
    wozhizui
        18
    wozhizui   187 天前
    @tmado 这个说的是真的。
    goobai
        19
    goobai   187 天前 via Android   ❤️ 1
    因为很多程序员都是新时代的农民工,有个领头搭好框架,其他人有双手会搜索复制粘贴就行
    murmur
        20
    murmur   187 天前
    主要现在是资源为王,现金为王,网易云的算法好不,没歌有卵用
    areless
        21
    areless   187 天前 via Android
    水管工也不会去生产水管
    loading
        22
    loading   187 天前 via Android
    在我看来,程序员和水泥工没啥区别,很多高薪的是因为 996,大家都是搬砖。
    jinsongzhao
        23
    jinsongzhao   187 天前 via Android
    看法角度不同吧,算法还是有,只是别人都实现了,知道如何调用和找到的成本更效率。就像只要懂公式,不需要求证公式,哪怕研究算法的,也只是搞懂公式,用好公式。要说创造算法,那可能都能拿诺贝尔奖了吧。
    zenithar
        24
    zenithar   187 天前
    技术水平转化成升职加薪的可能性不是绝对的,国内外大厂大部分不也是螺丝钉。
    xsen
        25
    xsen   187 天前
    @newtype0092 你说的这些确实不属于数学或算法层面的。至多只是工程能力
    vwym
        26
    vwym   187 天前
    其实我还是蛮讨厌用一个努力、细心这种宽泛的词汇去描述一个人的,这种词汇基本上没有任何的参考意义。
    “认真阅读你用到的第三方库的文档和教程,认真理清你接手的项目的架构、繁杂的函数调用关系、对多线程和内存时刻保持警惕等。”
    ala2008
        27
    ala2008   187 天前   ❤️ 1
    会有追求优化的程序猿的
    smallyu
        28
    smallyu   187 天前
    劳动密集型产业
    LouisGuo
        29
    LouisGuo   187 天前   ❤️ 1
    普通程序员 模型设计能力 在工作中起的作用更大些
    vwym
        30
    vwym   187 天前
    @vwym 说认真就是没有认识到,2 者在学第三方库前的基本功底了,为什么天天在强调基础,就是因为学习新库的时候能够发散出去找问题找答案了。哪有一句只要认真就完事了。
    本质还是方法论,处理好需要考虑什么问题,这些都是考你的基础,没这个基础你连发散问题都发散出来。你指望一个只学过 http 没了解过网络和 tpc 的人去认真思考个什么,没用的,这就是基础。有了基础才会发散出去。
    huangsw
        31
    huangsw   187 天前
    别让公司领导知道了,否则程序员的工资都会缩水
    cgpiao
        32
    cgpiao   187 天前
    基本数据结构还是要考虑的吧,不能瞎用。
    smallpython
        33
    smallpython   187 天前
    可以反过来推, 如果程序员这个职业只有很高的技术含量, 那么就不会有这么多人从事这个行业
    其实任何事情在社会上能发展成一种职业, 就已经意味着它已经解决了从事难度过高的问题
    exploreXin
        34
    exploreXin   187 天前   ❤️ 2
    楼主说出了国内 IT 圈子的现状,一个良好的技术生态圈子是包括产学一体化的体系,什么叫产学一体化呢,就是学校教出适合市场需求的人才,然后企业接收成为自己的员工,员工通过自己的工作得到企业赋予的报酬。有人说,现在不就是这样吗?但如果你深入内部去了解,就会发现不管是学校,企业,或者员工,都没有符合一个良好体系的因素,首先说学校,目前学校教的大都是理论,就是那种看上去只有科学家才会精通的东西,而企业需要的是应用型人员,也就是说企业不管你的技术好坏,实现了我想要的业务逻辑,能赚钱,你就是好员工,而员工,在学校学习了理论后,在企业当中接触的都是业务代码,也就是没有算法,数学的代码,需要用到相关代码的时候直接找开源工具,所以自身并没有真正理解过所用组件的内涵与本质,这些所有的加在一起,最终将导致一个不良环境。为什么是不良环境,先看学校,学校只教理论,学生达到分数要求毕业之后,能不能找到工作或者以后混的怎么样,学校就不管了,而企业需要的是直接能够投入市场的技术能力,而不是学校学习的理论,最终结果就是许多计算机专业毕业的学生,也要到程序培训机构去学几个月,才能找到工作,难道大家不疑惑吗?为什么我是计算机毕业的学生,学了 4 年,毕业后找不到工作,还要到外面的培训机构去培训 4 个月才能找到工作?所以可以看出在学校教学和企业需求之间有个巨大的缺口,就是理论和业务之间的过度,这部分缺失了,导致我们必须到培训机构去弥补这部分缺口。所以说培训机构是现阶段国内 IT 体系不完善的历史产物,因为只有在培训机构我们才能获得从学校到企业的跳板,企业没有资金单独给员工提供完整的技术培训,而学校里的教师又都是从来都没有参与过实战编程的教师,没有办法制定出适合企业的培训课程,最终我们只能到培训机构中去学习过度的那部分知识,去了培训机构你会发现,那里的讲师大都是企业中有过实战的技术人员,这就是目前国内的现状。

    企业需要过来就能上手的员工,这错了吗?这没错,企业的最终目的是盈利,而不是慈善机构,不可能免费提供全套培训设施和流程。那学校教理论,这错了吗?这没错,学校教的理论知识,数学,算法,计算机科学这些,只要你工作的足够久,工作中遇到的计算机系统足够复杂,总有一天需要用到数学,计算机科学这些理论知识来对系统进行优化与重构。到底哪里错了?最终的问题出在 整个制度,学校的教师如果能够选用有实战经验的企业员工,那么就不会出现教师不懂企业需求的情况,企业应该更多的与学校合作,提供实习机会,就算企业自家的实习生最终没有留下来,但是全社会的企业都互相培养人才的话,自家的岗位也最终会被其他企业培养出的人才所承担。如果所有企业都只看眼前的蝇头小利,短期是有收益的,但长期以往就会自掘坟墓。这些都是理想的假设,国家培养一个教师已经耗费了很大的人力财力,如果要培养实战型教师,那将付出更多的资源,同时也不是所有企业都负担的起培养实习生和与学校合作的业务,这就需要大企业和有能力的企业在可以承担更多责任的时候不要推脱,为了社会的良序发展,多去承担社会责任。

    最终完善的 IT 体系,需要大家一起,艰难缓慢的构建起来。这样的体系内就算你工作当中没有用到数学,但是你本身是拥有这样的能力的,没有运用只是不需要运用,所以一定要明确我们到底是选择写 CURD,还是只会写 CURD,这才是最关键的,只要自己想要深入研究技术,无论是谁都有这个权利去学习与探索。
    newtype0092
        35
    newtype0092   187 天前
    @xsen #26 逻辑运算是写在高中数学课本里的,递归、二分之类的基础算法思想基本所有的算法书上都有提到,你是根据什么得出的这些不算数学或算法层面的呢?
    你说的工程能力又是什么呢?如果只是增删改查的熟练度,那干外包的不是很熟么?为什么你们都不待见人家。。。
    lail7168
        36
    lail7168   187 天前
    @cmdOptionKana 笑尿 哈哈哈哈
    xsen
        37
    xsen   187 天前
    @newtype0092 #35
    1. 你说的这些,广义来说是属于算法范畴
    简单点算法就是解决问题的一系列步骤;但你要知道,楼主所说的,我们一般意义上讨论的不是这种广义的算法,因为诸多语言或公共库都已然有实现,且效率不低

    我们一般说的算法,属于没有通用解决方案的算法;都是针对特定的场景,比如推荐、海量数据、图像或图形等

    2. 关于工程能力
    简单点就是对算法的实现。但实际工作中会广泛很多。比如要考虑高性能高并发、维护、扩展、运维等等诸多方面;也包括代码的实现、理解等。其实就是除算法之外的所有,都属于工程的范畴
    xuanbg
        38
    xuanbg   187 天前
    计算机领域不是 95%,而是 100%不需要懂什么高深的数学知识。因为数学在计算机领域只是应用而非证明。能够把已证明的应用到计算机领域用来解决某些问题的,就已经是先驱了。最典型的例子就是 RSA 加密算法。

    编程需要的是逻辑能力和工程能力。前者能帮助你建立正确的数据模型,后者能帮你更好的组织代码,以保证软件的可扩展性、可维护性、稳定性、可用性以及更高的运行效率。
    xuanbg
        39
    xuanbg   187 天前
    大多数的程序员缺不缺智商我不知道,但他们肯定缺少逻辑能力和工程能力。据我的观察,他们搞的数据模型总是似是而非,或者干脆就不会搞。只会写改上千百遍还是有 BUG 的面条代码,压根就不会对代码进行有效的组织。
    newtype0092
        40
    newtype0092   187 天前
    @xsen 我觉得你们这种把算法狭义的定义为特殊算法,然后加上程序员不用懂算法,不用懂数学的观点,只能导致写烂代码的人越来越多。
    任何行业,当一味追求降低门槛,而不是提倡打好基础,肯定会越来越烂,因为从业者的平均水平会越来越低。
    ybw
        41
    ybw   187 天前 via Android
    @xuanbg 写游戏引擎,不需要数学?
    ZRS
        42
    ZRS   187 天前
    软件工程是一门系统的学科
    exmario
        43
    exmario   187 天前
    参考一下建筑系,多数人以为自己参加了建设实际只是在搬砖,(你看,我用各种材料各种花色造的这个螺丝钉,让整栋建筑更加健壮)

    最后发现上层的大楼设计师才是灵魂。
    xsen
        44
    xsen   187 天前
    @xuanbg 这个我认同。确实相当部分搞 IT 的缺乏足够的逻辑与工程能力
    hooych
        45
    hooych   187 天前
    引战、日经贴,无力吐槽 @Livid
    leafre
        46
    leafre   187 天前   ❤️ 2
    @exploreXin P 话一堆
    KeyboardManAnAn
        47
    KeyboardManAnAn   187 天前
    扯淡,你计算坐标还得用到基础数学吧,画个水波纹都得用上正弦公式余弦公式吧,光是为了面试不受欺负那你也得晓得些皮毛吧
    ybw
        48
    ybw   187 天前 via Android
    @KeyboardManAnAn 我为什么要画水波纹?
    lostberryzz
        49
    lostberryzz   187 天前
    要不你训练非洲人写代码吧,反正不需要智商
    towser
        50
    towser   187 天前
    100% 的程序员都要和数学和算法打交道,只是交道较浅。穷举、递归、排序、分治、贪心也是算法。
    只是行业分工越来越明确,有人专门搞研究,有人专门搞应用罢了。
    yeze322
        51
    yeze322   187 天前   ❤️ 1
    没有逻辑能力与工程能力的人,也能做程序员,这是软件行业二十年来最大的进步。
    xxoolltt
        52
    xxoolltt   186 天前 via iPhone
    程序员这个名字让我想起了打字员
    tt67wq
        53
    tt67wq   186 天前
    *对于 95 %的程序员岗位 .........*

    楼主是调查了周围的几个人得出的结论吗?
    stori1
        54
    stori1   186 天前
    错把自己看见的,当成了世界的全部,错把自己认为的,当成了真理,有意思。
    raynor2011
        55
    raynor2011   186 天前
    最近工作中刚写了个 连通图的算法,看来我已经超越了百分之 95 的程序员
    charlie21
        56
    charlie21   186 天前
    清高 + 无挑战 => 眼高手低 + 杠精

    基本上 人狠话不多的人 是很好的,要说也就一句,“勿在浮砂筑高台”
    sorke
        57
    sorke   186 天前
    作为一个应用型的程序员,个人认为每写一行代码其实就是算法。为什么需要算法?算法不仅仅追求可用、正确,算法追求的是效率,每一次 debug 有时候不仅仅是优化边际条件,还有降低复杂度。举个抽象的离职:把开销最小判断的条件置前在最坏的情况下效率比想到什么条件就往下写要好的多。
    nyaaar
        58
    nyaaar   186 天前
    说的挺好的,朴实啊,比那些天天算法吹逼的好多了,还是把自己眼前能弄好的弄好再说那些
    aguesuka
        59
    aguesuka   186 天前 via Android
    程序员要学数学吗?要,但是没几个程序员需要学会散度旋度复变函数。对于企业来说,十个能在一个月内生下孩子的孕妇比什么都强
    aguesuka
        60
    aguesuka   186 天前 via Android
    @KeyboardManAnAn import ogr.context.水波纹
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4419 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 267ms · UTC 09:14 · PVG 17:14 · LAX 02:14 · JFK 05:14
    ♥ Do have faith in what you're doing.