变化的新时代下我们技术人出路在哪里?

23年技术人的开发、架构成长之路

自我介绍:互联网行业从事开发工作23年,曾任英才网架构师,中间创业过也加入过创业公司,现为面向金融/保险业开发的营销数据中台的架构师。

年前有幸认识《程序员的三门课:技术精进、架构修炼、管理探秘》一书的作者,蚂蚁金服的右军大神,约了一发命题作文“技术人成长路:技术、架构”,因而有了这一篇假期的回忆。

01 

关于技术研发

在大学选择了“计算机科学系“的软件专业后,就走上了这一条互联网研发人的路。还记得学习的起步就是从谭浩强老师的《C语言程序设计》开始,最初的学习的成果是用 Turbo C 在 DOS 5.5 下实现了一个像下图的下拉式多层次菜单模块。

Turbo C 的编辑器界面

在同一个时间,“中国第一程序员”求伯君写出了 WPS 1.0,程序员的偶像之一雷军正进入金山公司。

C 语言与汇编语言同为第二代计算机语言,独有的指针概念让人又爱又恨:使用起来高效、简洁、直接。但是不小心,就可能造成空指针错误,还容易造成内存泄漏,最抓狂是跟踪、调试、排错的过程非常困难。

因为是过程化程序设计, C 语言又有面向函数编程之称。继承 C 语言的 C++,增加了面向对象的特性,并衍生了继承和多态的特点。当时特别膜拜一位同事大神,用 C++ 写了一个类似 Photoshop 具有画图、编辑、特效功能的软件。

工作中开始编程时,是使用当时流行的商业化编程语言 Basic 。对于只能一行一行代码画界面的 C 语言,能用鼠标在编译器里拖拽出各种窗口、表单、数据组件,然后在组件绑定的各类事件函数里写业务代码,简直是开发神器。而后微软推出了经典的 Visual Basic 6.0,到现在和 C# 一起被并入了 ASP.NET。

大约在2003年,淘宝网成立的时候,国内主流开始逐渐使用 Linux 平台,以及在该平台上的 mysql 数据库,WEB容器 Tomcat,PHP 或者 Java 语言开发和运行自己的商业应用系统。

找了一张主流编程语言的变迁图,简单的一窥语言发展的路径:

编程语言的变迁图

编程语言的从面向计算机编程发展出现了第三代面向对象的编程语言,大大提升了编程开发的效率,也使得建模解决问题变得更便捷,让更多人可以参与到编程工作来。

它能够让人用更贴近自然表述的方式来编写程序,隐藏了操作地址的指针,对开发者提供了更加友好的语法。出现了流行的诸多语言:最流行的语言 Java,最好的语言 PHP,用的最多的脚本语言 Javascript 。

最新出现的 GoLang 则更具有高并发的特性,Python 则更适合人工智能、大数据的编程需要,也体现了现在开发的特点:高并发,大数据,人工智能。并且在业务变化快,敏捷开发占主流的客观要求下,Golang,Python这类相对比较“务实”的语言一定程度也降低了开发的复杂度。

回顾技术的发展,从最初的小型机+终端,到中间的服务器+客户端模式,再到现在的云计算+终端(PC/手机/iPad/智能终端等)。如果把云计算看做一个升级后复杂的、具有多种现代功能的、分布式的小型机,历史又走了一个轮回,仍然回到了最初的胖服务器,瘦终端模式。 

从这种趋势看起来,在不久的将来,基于云计算、无服务器(Serverless)的编程语言可能是将来开发的主潮流。

02

关于软件系统架构

最早在 IT 领域并没有“架构师”这个职位,“架构”一词也是来源于建筑行业。由于互联网迅猛发展,对于快速增长的数据,用户访问的高并发,各种技术选型所引发的需求,由原来的拿来主义转为自力更生,也就产生和凸显了软件系统架构的重要性,也就顺理成章的出现了“架构师”一职。软件架构是一个系统的基本(基础)组织,包含所必需的组件、它们之间的关系以及与周边的关系。

木结构的房屋架构图

以早期和近期的做的两个架构演变对比来看,除开根据业务的需要所需要的软件逻辑架构,只考虑系统部署架构:

  1.  最开始的英才网就是典型的一台服务器承载了所有的功能,以 ASP (Active Server Pages 动态服务器页面)+ MS SQL Server 运行在 IIS (微软的 Internet Information Services)上开发了网站所有的功能:求职、招聘。

  2.  在后续业务发展,逻辑流程变得复杂,数据量快速增长的情况下,当时在微软的技术体系环境下,业内也没有什么好的替代方案,只能简单的增加服务器硬件的配置来解决问题:购买更高配置的服务器做数据库,买硬件的负载均衡器(F5),防火墙。处于凡是钱能解决的问题,都不是问题的阶段。

  3. 在后续预算有限,而且硬件配置有限的情况下,到了问题是没钱的阶段:开始根据业务(公司、个人、简历、职位、校园招聘等)来拆分软件架构,以及分库,分表来拆分数据库。

  4. 在拆分后,仍然碰到了瓶颈:查询职位时,会非常慢,以致会导致数据库服务器负载增高,直至整个系统无法响应。在实验测试了几套方案之后,实施了手工版本的职位表的读写分离,每5秒从主表同步职位的修改信息到专供搜索部分用的从表。

现在做系统部署架构设计时,就会考虑做一些常规应对方案:

  1. 系统会分为前端、后端已是基本常识。

  2. 对数据库采用读写分离方案,频繁的读操作访问读从库,少量的写操作访问写主库。

  3. 对于一些可能会高并发的业务场景(例如:下订单,支付,注册等),在实现时,会考虑使用消息队列方案来达到削峰、解耦的目的。

  4. 对于经常访问,又比较少更新的内容采用缓存方案。

  5. 对于权限管理,可能会采取成熟的权限开发框架,例如有 Apache Shiro,或者 ThinkPHP 的 RBAC (Role-Based Access Control 基于角色的访问控制)。

从上面两个例子可以得到下面的结论:

  1. 不同的时代背景、团队的技术栈会产生不同的架构设计方案,适合自己的就是最好的

  2. 互联网的发展有其自己的规律,网站的架构是逐步演化出来的

  3. 架构必然需要适应组织结构。

架构师应具有的能力:

洞察力:能够认识、深刻了解业务,看透事务本质的能力。可以认识到现有技术方案的优缺点,在现有的环境和条件下,定义初始的架构,并在后续的发展中做出扩展和延伸或者是重构,本质上是整体的抽象或简化;

技术积累:在一些基础的技术领域(例如:编程开发、数据库、缓存、消息队列等)有比较好的技术深度,也许不需要每个领域都是专家,但是要能够快速学习领域中的核心技术和了解一些技术要点;

设计能力:在技术落地方案中,能符合逻辑的将不同功能的模块划分为不同的层,并清晰的定义出各层主要职能和边界;

沟通能力:和技术团队的取得共识,与上级、外部获得支持和认同,听取和包容不同的声音和方案;

好奇心:对技术发展保持一定的关注和跟踪,有自己的了解、认知和判断,比如人工智能方向算法的新动态,物联网的应用技术的解决方案等等;

根据设计的层面不同,一个完整的架构有如下几层:

一、业务逻辑架构:系统中模块之间的边界、层级、调用、组合关系。从下面这张图可以看出,系统有五个基本模块,而且每个模块都含有多个逻辑组件。

仓储系统逻辑架构图

二、运维部署架构:开发完成的系统是怎么部署在硬件服务器、云计算上的。

简单的网络架构图

三、系统架构:其他非功能的特性。这部分需要设计系统的可扩展性,可靠性,强壮性,灵活性,安全性,以及性能如何。也包括了如何测试、自动化部署,开发版本控制等等方案设计。

四、开发架构:系统开发框架的选型、开发工具和编程语言、模块划分等内容,以及开发团队的人员配置和岗位职责。

在做设计决策时,需要参考业务需求以及功能要求、补充和其他方面的约束(例如人力、资金的要求)。而这些决策又会在更具体细节的层次上为需求和将来的设计决策施加进一步的约束。

通常在一个开发小组中,最有经验的开发会负责一些架构方面的工作。由于架构工作的重要性,不同组织层次的需要,组织会设置不同层次上的架构师,来负责逻辑、部署、系统架构的设计、配置、维护等工作。由于职责的不同,架构师也分为企业架构师、信息架构师、数据库架构师、业务架构师、技术架构师、系统架构师等。

未来会有什么?应对的方法是什么?成长之路是什么?

云计算会取代服务端编程吗?

大数据会让个人隐私不再安全吗?

人工智能会替代大多数的我们吗?

中台是适合我们的方案吗?

区块链的去中心化会导致自由主义吗?

拥抱变化、与时俱进、察觉问题、积极应对、永不放弃。

写在最后:正值新型冠状病毒感染的肺炎疫情防控工作在全国展开,就像互联网行业遇到了新的挑战。有了上一次非典 SARS 的成功在前,相信就像通过技术的不断更新迭代一次次成功的解决了互联网业务的问题一样,我们可爱、可敬、勇敢的医护、医疗战士,也会圆满成功的控制、结束这次疫情。


新开的订阅号不能评论,大家可以长按下方二维码加我微信(微信号:foghuang),跟我做朋友,发送关键字【进群】,我拉大家进群,讨论技术、商业、产品、运营、学习等等,秒拉哦。

别忘记点“在看”支持一下,谢谢你!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值