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

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

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


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

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

像我是经验和代码熟练读不太够的,我会在第 2 步查资料和第 3 步搭建最小化的架构耗费比较多的时间,才能定下来一个可用的方案。
如果熟练的老手,时间可能是在日常的视野扩展上花的比较多,平时就会有意识去了解业内的新技术新方案并快速做个小系统练练手,这中间的试错积累的就是经验。这样实际遇到问题,就可以直接选型解决掉。
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
2016-01-11 09:24:28 +08:00
拿个小板凳,等大家各抒己见。
zeroten
2016-01-11 09:24:50 +08:00
感想楼上诸位的回答
theJian
2016-01-11 09:30:37 +08:00
mark
nick32m
2016-01-11 09:34:19 +08:00
我们一般 by convension 说 CRUD 不是 CURD
expkzb
2016-01-11 09:38:31 +08:00
长远地来看,到最后就只需要一个**建表**能力了
zeroten
2016-01-11 09:53:59 +08:00
收藏比回复多系列。。
windyboy
2016-01-11 09:55:22 +08:00
数据存储
分布计算
资源协调
zky001
2016-01-11 09:59:29 +08:00
Zky001
zky001
2016-01-11 10:00:22 +08:00
@zky001 做好自己
zeroten
2016-01-11 10:04:48 +08:00
@windyboy 可否讲的详细点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX