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

web 开发者(后端)的核心能力是什么?

  •  
  •   zeroten ·
    ladder1984 · 2016-01-10 21:36:51 +08:00 · 9141 次点击
    这是一个创建于 3244 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1.对所使用语言、框架的掌握
    2.还是关系型、非关系型数据库的掌握
    3. HTTP 协议(暂时只想到这个)的理解,是否要很早的涉及 TCP/IP
    4. Linux 系统的使用、部署能力
    5. 扎实的数据结构、算法、计算机网络、操作系统知识,但是这些又如何体现在平时的开发。
    6. 架构、设计模式的理解
    7. 一定的前端技能
    8. 欢迎补充

    这些最重要的是什么呢?如果在有限的时间内、应该先深入学习哪些呢?如何让自己不限于某种语言、某种框架、某种具体的业务?
    45 条回复    2016-01-13 01:23:33 +08:00
    tibbers
        1
    tibbers  
       2016-01-10 22:16:52 +08:00
    运用成本最低效率最高,适当考虑安全和维护的技术,多快好省地解决问题,这就是 web 开发者的核心能力
    fy
        2
    fy  
       2016-01-10 23:03:51 +08:00
    CURD
    YouXia
        3
    YouXia  
       2016-01-10 23:05:29 +08:00
    分布式
    zeroten
        4
    zeroten  
    OP
       2016-01-10 23:42:54 +08:00
    @tibbers 这句话包含的东西太多了。。
    hahasong
        5
    hahasong  
       2016-01-10 23:44:09 +08:00
    CURD + SQL
    alexapollo
        6
    alexapollo  
       2016-01-11 00:06:35 +08:00
    计算,存储,网络
    恩,所有人其实都需要,但看你的量级吧。
    lbp0200
        7
    lbp0200  
       2016-01-11 00:12:39 +08:00
    楼主已经给出答案了,先 1 ,再 2 ,……,如果学到 6 ,已经是小牛了
    strahe
        8
    strahe  
       2016-01-11 00:20:24 +08:00
    第五点还没达到,暂时没觉得很重要,但后期是要补回来的
    lecher
        9
    lecher  
       2016-01-11 00:23:42 +08:00   ❤️ 4
    对后端来说我认为重要程度排序是这样的:
    5. 扎实的数据结构、算法、计算机网络、操作系统知识,但是这些又如何体现在平时的开发。
    2.还是关系型、非关系型数据库的掌握
    6. 架构、设计模式的理解
    4. Linux 系统的使用、部署能力
    3. HTTP 协议(暂时只想到这个)的理解,是否要很早的涉及 TCP/IP
    1.对所使用语言、框架的掌握
    7. 一定的前端技能


    其实后端主要还是理论要扎实,实际解决问题就会快很多。理论基础是第一重要的,没有这个就没有办法分析问题。
    实际开发的时候,通常的场景是,遇到一个问题
    1.利用自己的理论基础诊断分析可行的方案,预测需要什么算法或方式解决问题。
    2.扩大视野寻找可用工具和成熟的方案,这时候很看英文能力,毕竟很多资料都是英文的。
    3.搭建最小化的架构测试工具和方案的可行性,这时候很看中对 linux 系统的使用、部署能力和语言熟练程度。
    4.分析测试结果,评估可选方案,这时候就只是看数据和经验了。
    5.最后就是定方案开发。

    这一套走下来,主要还是靠分析,如果实际开发能力足够强,经验丰富,往往可以跳过 123,直接选择一个成熟的方案上线。

    像我是经验和代码熟练读不太够的,我会在第 2 步查资料和第 3 步搭建最小化的架构耗费比较多的时间,才能定下来一个可用的方案。
    如果熟练的老手,时间可能是在日常的视野扩展上花的比较多,平时就会有意识去了解业内的新技术新方案并快速做个小系统练练手,这中间的试错积累的就是经验。这样实际遇到问题,就可以直接选型解决掉。
    lecher
        10
    lecher  
       2016-01-11 00:51:46 +08:00
    如果是进阶的话,我个人觉得再进一步提升的捷径是了解一些网络攻防的 hacker 技巧,这对提升架构能力很有帮助,做为开发者写代码的时候,有时候由于视野的局限,没有精力去考虑系统的健壮性,写出来的程序的可用性就要差一些。

    如果业余有时间了解一下别人是怎么攻击 web 服务器的,比如 xss 攻击, sql 注入,溢出, DDOS 等等破坏系统的行为是怎么绕过正常检测攻击系统的。有时间实践实践,对个人架构提升还是挺大的。

    这样至少会在开发上多注意几点
    1.不信任任何客户端提交的数据,写代码的时候会额外做提交数据校验,对敏感数据进行多种检测,负值、转义符、超大溢出数值这些普通应用在开发的时候往往是交给框架处理的,但是自己要有这个意识去确定框架是否能完全解决这个问题。
    2.不会将敏感数据传给客户端,敏感数据只会在服务器之间传输,客户端永远只凭借 session_id 或者 auth2 的 key 提交请求,服务端拿到标识依然要进行鉴权,比如避免构造 session_id 或者 key 之类的仿造用户提交的请求,用户的敏感信息如邮箱、身份证等返回给客户端的接口被人恶意遍历。
    3.对接口性能比较敏感,对直达数据库的接口尽可能做缓存。比如校验用户是否存在,密码是否正确,生成验证码之类的接口会考虑到容易被攻击,使用缓存、多做一些请求频率的限制。
    4.对数据一致性和安全性特别敏感,比如数据库操作的时候会考虑是否加锁,风险高的业务要不要用队列分摊请求峰值,日常数据库备份的方案等等。

    这些意思如果自己不去接触 hacker 的技巧,再强调也没有用。自己动手玩一遍,知道危害程度有多大,开发的时候就会分出一部分精力去预先考虑解决方案了,当然可能最后考虑到开发成本和实际能力没有去做,但至少不至于遇到问题会慌张。
    elgoog1970
        11
    elgoog1970  
       2016-01-11 09:24:28 +08:00
    拿个小板凳,等大家各抒己见。
    zeroten
        12
    zeroten  
    OP
       2016-01-11 09:24:50 +08:00 via Android
    感想楼上诸位的回答
    theJian
        13
    theJian  
       2016-01-11 09:30:37 +08:00
    mark
    nick32m
        14
    nick32m  
       2016-01-11 09:34:19 +08:00
    我们一般 by convension 说 CRUD 不是 CURD
    expkzb
        15
    expkzb  
       2016-01-11 09:38:31 +08:00
    长远地来看,到最后就只需要一个**建表**能力了
    zeroten
        16
    zeroten  
    OP
       2016-01-11 09:53:59 +08:00
    收藏比回复多系列。。
    windyboy
        17
    windyboy  
       2016-01-11 09:55:22 +08:00
    数据存储
    分布计算
    资源协调
    zky001
        18
    zky001  
       2016-01-11 09:59:29 +08:00
    Zky001
    zky001
        19
    zky001  
       2016-01-11 10:00:22 +08:00
    @zky001 做好自己
    zeroten
        20
    zeroten  
    OP
       2016-01-11 10:04:48 +08:00
    @windyboy 可否讲的详细点
    simapple
        21
    simapple  
       2016-01-11 10:18:07 +08:00
    发现问题 搞清楚问题的原理 解决问题

    然后就是越快越好
    li24361
        22
    li24361  
       2016-01-11 10:57:26 +08:00
    6 比 5 重要
    Lucups
        23
    Lucups  
       2016-01-11 11:16:52 +08:00
    我觉得作为一个 Web 开发者(后端),终极目标是:根据现有条件制定解决问题的相对比较多快好省的方案,并作为 Leader 角色去解决问题。 (非 Web 领域的项目不算在内)

    要达到这个目标,既需要野路子的那种实践精神(大量的实际项目经验,踩过各种坑),也需要学院派那种扎实的研究(基础理论的学习)。
    zonghua
        24
    zonghua  
       2016-01-11 11:19:52 +08:00
    机器学习,人被机器奴役
    zdkmygod
        25
    zdkmygod  
       2016-01-11 11:26:07 +08:00
    建模。。。其他都是死知识,只有这个才是活知识。
    romisanic
        26
    romisanic  
       2016-01-11 11:29:50 +08:00
    业务能力。
    zeroten
        27
    zeroten  
    OP
       2016-01-11 11:37:38 +08:00
    @romisanic 这个问题问的就是如何脱离具体业务。。
    SoulSleep
        28
    SoulSleep  
       2016-01-11 11:51:21 +08:00
    这么多人讨论难道没人考虑 对业务的熟悉吗? 整体来看 经验多的人 更多的是业务经验啊....技术水准不见得多太多,但是业务经验就和你人生经历一样啊,真是在用时间在换
    SoulSleep
        29
    SoulSleep  
       2016-01-11 11:53:40 +08:00
    看了#27 的回复 那就另外说一点:
    我想核心能力是对技术的热爱吧 不装逼,真的爱技术,写代码、学习新技术是开心的,如果只爱钱,这个过程是痛苦的,不一样。
    后台没难搞的,这么多年都很成熟了,真的喜欢 3 年干别人 5 年的,不就可以说优秀有竞争力了?
    loading
        30
    loading  
       2016-01-11 12:36:38 +08:00 via Android
    在写代码时时刻考虑安全性!
    felixzhu
        31
    felixzhu  
       2016-01-11 16:28:24 +08:00
    开发者的核心能力应该是从公司的角度来说的吧,不应该从程序员的角度来看

    那毫无疑问,就是能帮公司解决问题,这个问题很广泛,随便列举

    1. 能凭借自己的经验判断一个项目的开发周期和人员需求,技术选型,而不会留下坑
    2. 负责的项目知道从一个用户到一亿用户,要经历哪几步的改进,知道如何快速定位问题,让技术不会制约公司业务发展
    3. 能够打造一个稳定的技术团队,能够持续吸引优秀的人加入

    etc...
    WendellSun
        32
    WendellSun  
       2016-01-11 16:32:54 +08:00
    少写 bug 。
    joewangyz
        33
    joewangyz  
       2016-01-11 16:56:09 +08:00
    我感觉看你想发展的方向吧,是纵向还是横向
    纵向的话,就针对于目前工作所需的技术研究透彻,并有所创新。
    横向的话,类似全栈,核心竞争力应该是超强的动手能力和给出解决方案的能力,这种的话感觉需要多关注新技术、新框架,自己有什么想法的话尝试着自己实现。
    以上只是我对自己工作的一个设想和想法,并没有什么实践基础,只是自己后面可能会选一条路然后摸索
    thenbsp
        34
    thenbsp  
       2016-01-11 19:10:04 +08:00
    处理 Http 中的 Request 和 Response
    Gem
        35
    Gem  
       2016-01-11 19:15:38 +08:00
    钱花的少,事办得好。
    Chanel
        36
    Chanel  
       2016-01-11 20:43:23 +08:00
    大神们对应届生(明年暑假找这样方向的工作)有什么建议,感谢答疑
    dsphper
        37
    dsphper  
       2016-01-11 21:39:14 +08:00
    这里面根本没有我。你让全栈工程师咋办?/大哭
    zeroten
        38
    zeroten  
    OP
       2016-01-12 09:31:26 +08:00 via Android
    收藏远超回复系列
    xman99
        39
    xman99  
       2016-01-12 10:21:57 +08:00
    我觉得是强大的恢复能力吧, 不然加班加点干一个项目,炒鸡累的。精神恢复很重要
    zeroten
        40
    zeroten  
    OP
       2016-01-12 10:24:11 +08:00
    @xman99 我感觉这和年龄有关。。。
    xman99
        41
    xman99  
       2016-01-12 10:30:21 +08:00
    先 mark 吧, 晚上有空再多看看, 谢谢各位前辈指引
    wyx
        42
    wyx  
       2016-01-12 13:29:54 +08:00   ❤️ 1
    活的久
    avantcontra
        43
    avantcontra  
       2016-01-12 22:31:48 +08:00
    运维
    HarveyZ
        44
    HarveyZ  
       2016-01-12 23:47:30 +08:00
    其他几点不谈了,我很想知道扎实的数据结构、算法知识的掌握包括哪些呢?不会是大学的那些课程吧?
    zeroten
        45
    zeroten  
    OP
       2016-01-13 01:23:33 +08:00 via Android
    @HarveyZ 我的理解很浅薄,可否谈谈你的理解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:11 · PVG 20:11 · LAX 04:11 · JFK 07:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.