作者:东方孤思子
链接:https://www.zhihu.com/question/24952874/answer/55270250
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

后端包括很多职业:DBA(数据库维护优化专家),Developer(程序猿),Architect(构架师),Scrum master及类似(敏捷开发专家),Project Manager(产品狗),Maintenance&IT support(通讯和服务器相关)
注:没有任何排名,高低混杂,专业混杂。部分职业有跨界。比如领导一般兼任architect和scrum master。严格来讲,PM可以不是后端,而是marketing或者business Development的人,饿不,狗。
按程序猿内功而言:
关系型数据库,领域驱动设计(Domain-Driven Design),设计模式Design Pattern,算法Algorithm,面向对象编程OOP(SOLID),线程安全,事件驱动,测试驱动开发,依赖注入框架,等等。
按技术栈划分:
ASP.net,LAMP,MEAN,Ruby on Rails,Single Page Application一大堆。
热点词汇:NoSQL,大数据,云计算。
通讯相关:ssl,SPDY,http,tcp,udp
数据库相关:列式数据库,关系型数据库,bigtable,搜索引擎(Solr,elasticsearch),键值对数据库……
按语言划分:PHP,Ruby,Python,Java, Go, Erlang, Rust……太多了,开启圣战吧,骚年们。
按系统划分:
Windows系列(非主流),CoreOS+Docker,RedHat/Fedora/CentOS, Debain/Ubuntu, Arch, BSD系列.....
按IDE划分:类编辑器:Sublime Text,VisualStudio Code,Notepad++,IDE类: Visual Studio,JetBrain系列,Eclipse(老,丑,卡),NetBeans……极客范:Vim+Emacs
备份相关:rsync,replication,cluster,备份工具。
日至相关:传统的:日志的目的地,等级,文件拆分,网站监控,downtime 提醒。新潮的:ELK框架等
还有好多好多啊,什么负载均衡啊,什么合理分层啊……buzzword满天飞。
把这些名词都搞懂需要多久呢?精通又需要多久呢?

题外话:
前端后端都是坑,谁也别看不起谁。完全意义上的全栈是不可能的,别做梦了。

总有windows的开发者来Challenge我,说win平台如何如何。我简单分享一下我说它非主流的基本想法,不然就成诽谤了。我本身目前也是做win开发的。
win平台与开源平台技术栈上有什么本质区别么?我觉得并没有。依赖包管理,你用npm,gem,我用Nuget,你有bash,我有PowerShell,啥啥不缺。那差别在哪里?理念!微软在老鲍手中喜欢用自己强大的技术实力去找寻最佳解决方案然后推送给所有人。Cool?牛逼,然而注定要失败!
开源世界是一千个人有一千种实现方式,技术竞市场择,最好的技术永远只适合最适用它的那种特殊用例。传统数据库没法包打天下,所以才诞生了各种各样的NoSQL以应对不同的使用场景。
以ORM为例:
ORM就有ActiveRecord, DataMapper等多种模式,无可计数的解决方案可供选择。同时期微软是SQL2linq, Entity Framework,对SQL2Linq不太了解,后面这个基本就是DataMapper,不同时期的用法差别很大,然而微软永远比市面上最潮流的技术落后一些。
在vs2012时期微软又尝试推广过Repository Pattern+Unit of work,后来到MVC5的时候又不了了之。可见不是你开发人员多你说话就牛逼,同样也是要经过市场检验的。Aurelia 的作者就觉得Angular2的设计太复杂了,跳出来单干,也没啥不好的。

当然当然,你说不是可以用Dapper么?不是也有NHibernate么?这些都可以让微软通过nuget来拥抱开源世界。这些都是微软转向开放的表现,值得肯定。话锋一转,有开源世界可以控制的也有开源世界不能控制的。比如一代Windows,一代VS,一代framework,一代IIS,一代文档……旧微软信奉安迪比尔定律,用软件促进硬件市场,不想要 IE7 了?买 win7 啊!然而没有人想每过几年就被你折腾一次。我们希望的是滚动升级,Ever-Green!希望的是彼此解耦,灵活拆换!你的 Edge 再好,我也只用Chrome,谢谢!

你可以选择做微软羽翼下的小小开发者,不需要在技术的海洋里抉择,只需一切跟随微软最新的指南就好。当然也可以做开源世界的弄潮儿,在CoreOS和Fedora之间来回切换,尝试下Docker,操作下NoSQL,玩玩Python,试试Ruby。试试复杂而高效的vim,也可以选择用atom.io的智能编辑器。放弃WinForm,选择QT或electron开发最潮的跨平台桌面应用。可以用两分钟学会一套几乎不会过时的命令行指令也可以在若干个不同的GUI版本的文档间迷茫。可以选择保守也可以选择潮流,最新的技术和思想永远发生在开源世界,因为每天全世界的开发者都在做着各种各样的技术试验。

作者:李丹阳
链接:https://www.zhihu.com/question/24952874/answer/42165719
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.Unix/Linux
后端必须掌握的操作系统。个人建议平时可以完全使用Ubuntu Desktop作为日常使用的操作系统。附带的,需要对操作系统本身有足够的认识和了解。
建议的书籍:《Linux编程》《Unix环境高级编程》

2.C/C++
虽然现在后端各种脚本语言盛行,但是C/C++作为基础中的基础,仍然是后端程序员需要掌握的技能之一。当然初入此坑可以暂时不用,但随着技能树日益增长,没有这项技能将寸步难行。
建议书籍:《C/C++ Primer》《Effective C++》《Pointers on C》等等

3.网络编程
不废话,必备技能,这都不懂还当什么后端!
建议书籍:《Unix网络编程》《TCP/IP协议详解》

有了上面三项做基础,后面就可以开始进入选择:

4.脚本语言
PHP、Python、Ruby之类的挑一到两个,深入学习。

5.数据库
这个不多说了,无论是关系型数据库还是非关系型数据库,都是必须要吃透牢牢掌握的东西

我一直认为后端编程都是以上面5个方面为核心扩展开的,无论做哪方面的后端开发,归根到底都是这5个方向的延伸。