网络软件工程师的N种境界

之所以说网络软件开发,是因为本人以前,以及目前的工作是这个,做网络软件开发。如果说其他领域的软件开发,由于
对领域知识不是很熟悉,评价有可能不太客观。所以还是在自己的本行发发议论最好。
做网络软件开发,就我所做的这个领域,缩小一下范围:是网络安全方面,再缩小一下范围,是防火墙,VPN之类的东西。
本人在N个做安全的公司从业过,基本上一直做到就是网络协议栈,以及filter,routing等等。更高级的安全话题,比如
web firewall, ids/ips等等。没有做过。以前见过,都是拿snort改的,加上界面,估计设计到engine以及signature开发的
也少。以前在国产安全公司工作,基本上就是ipchains, iptables, netfilter等等。虽然有现成的东西,但是在上面做产品,需要
做的事情也很多。最起码需要一个好的用户界面WEBUI/CLI之类的需要考虑,做好了也不容易。再者就是功能的集成,把许多
东西集成到一起,能跑起来,不出错,不crash,这个还是需要一些技术的。在这个层次,需要了解的知识包括:
a) 内核。由于ipchains/iptables/netfilter都是在内核空间里实现的。所以要对内核提供的机制和api需要了解。这是一个基本
的要求。因为不能指望什么事情都是ready,所以很多时候需要亲自动手。Get hands dirty,从open source做东西,基本
都是这样。
b) RFC。需要对网络协议很熟,最起码的要求,ip/tcp/udp要熟。但是这个相对简单的要求,很多从业人员是达不到的,很多人可能
没有仔细看过RFC,对一些细节的定义模糊,导致做产品不能符合要求。
c) 协议栈。RFC有N种实现方式,至少应该熟悉一种,多看看代码,多想想如何从协议映射到代码。
d) 业界最佳实践。最简单的,data plane/control plane分离。这是一个很基本的常识。由此引申出,用netfilter做东西,需要做大
改动,因为它和协议栈结合的太紧密了。最好是把ip层分离出来,直接在用户空间里实现firewall,而不是纠结于linux stack的代码迷宫
之中。
以上只是一个搞网络开发的基本境界。如果做来做去离不开这些。职业如何发展。要明白,任何代码都是为功能服务的,任何功能都是
为产品服务的,任何产品都是为客户服务的。只有为客户服务,才有钱可赚。从这个角度来说,做开发的,里离客户太远了,有时候就
不太明白自己的价值。客户的环境,客户的服务,如何为客户创造价值。这些事情是只懂一点内核和协议的人无法参悟得了的,所以需要
多了解客户的环境,客户的服务。先放下技术的细节,从应用角度来考虑问题。
不知道真正的大牛是否关注一行代码如何写了?大牛在规划产品时需要考虑这些吗?以此为目标,努力前进。

最新评论
1天 1 小时 前
1天 9 小时 前
2 天 5 小时 前
3 天 3 小时 前
6 天 1 小时 前
6 天 1 小时 前
6 天 5 小时 前
1周 1天 前
1周 1天 前
2 周 2 天 前