导语:很久没写过涉及技术的文章了,因为进行职业转型后对技术有种很纠结的心态。热爱——每每看到五颜六色的代码窗口就会心里发酸,想起曾经那是生活中的一份灿烂心情;不自信——这么久离开技术会不会已经落后生疏(虽然一直没有脱离技术的学习与参与,但是失去了一线写代码的实践)。今天恰好去参加AWS(亚马逊云服务)的一个区域讨论会,一位亚马逊的架构师在为大家讲解AWS云服务及一些案例的架构设计,很多熟悉的概念,还有这位架构师的谦逊和真实,一切是那么亲切。所以心血来潮,想回顾一下自己做架构的职业之旅。


本想自己定义一下架构设计的要点,发现百度百科中总结的就很好“系统架构既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案,并能把各种目标需求进行不同维度的扩展。”提炼一下:

  • 熟悉业务:技术本身是无“价值”的,要落地到具体的使用场景中为客户/用户解决问题。

  • 掌控整体又要洞悉局部瓶颈:我们时常要对技术实现进行优化、时常要解决各种隐藏的bug,但是正如“过早优化是万恶之源”这句话的深刻含义一般,我们应该在明晰全局的基础上再去确定需要解决哪个局部问题。

  • 不同维度的扩展:面对不断的变化,灵活性与可扩展性是我们进行架构设计所追求的目标。

这是一些做架构的核心要点,其中还有很多其他的点。看看我的点滴领悟。

第一阶段:外包生涯

作为技术人员仿佛会本能的排斥去做IT外包的工作,仿佛这样就会成为IT界“蓝翔”的代言人。其实做外包人员并不意味着低端和无成长性,特别是对于在一些有着严格规范和标准的外包企业中,有对代码规范、注释和文档的要求;由于只需要做业务中的一部分,这就要求把业务功能和接口设计的足够分离。正是这段经历让我形成了规范的代码习惯和有了功能接口化、模块化的思维。

参考:华为代码规范文档, Google 开源项目风格指南 ;书籍—《代码大全》

第二阶段:研发单机软件

这是自己第一次独立负责研发一款软件,开始接触客户了解业务,然后诉诸于代码实现。在这个过程中有一个印象极深的片段,接手的代码有一个长达千行的函数,代码命名随意也没有注释,看得我云里雾里。最后导致自己付出了大量的时间,包括利用debug工具一行行跟代码才了解清楚业务逻辑,心里默默地走了数百遍的草泥马。随后我便用第一阶段养成的好习惯开始进行众多功能的分割,把这个千行的庞然大物分离成一个个套用的小函数,另外在代码(命名和注释)上进行规范,不但利于自己后期的维护,我想也不至于难为下一个接手的研发人员。在这段经历中,我开始有了把一些工具函数抽出来写成工具类的意识(这期间还看了很多开源的代码,从其中抽出不少工具函数)。另外一个重点,就是对单一程序插件机制的利用,比如可以灵活的调节界面展现元素,利用程序的动态加载机制(动态库)来对程序进行局部升级和逻辑改变。

参考:snort和 tcpdump的源码充分实践了程序的插件机制;博客文章—《提高工作效率的工具“类”》

第三阶段:Client/Server端编程

C(B)/S架构意味着开始接触网络编程、web编程。这个阶段对自己影响最大的应该是分层的思想。网络协议栈分层的精妙设计和java SSH框架的使用都深深影响了自己,比如自己一个即时聊天系统的架构设计就充分使用了分层的思想,包括后期使用分层的思想搭建了一些业务无关的技术平台,便利了自身也充实了公司的技术货架。

参考:博客文章—《IM系统架构设计之浅见》,技术平台源码github—高性能TCP网络服务器程序,基于TCP协议的远程过程调用框架客户端实现

第四阶段:转向Linux系统、服务端编程

2011年时随着互联网/移动互联网的风暴愈加狂烈,90%以上的后端服务都是Linux承载,客户端技术又太碎片化,所以自己提前预判,将自己的技术栈从Windows全面转向Linux,从客户端转向服务端。如果说自己的架构生涯里转折点只能选一个,我会选这个阶段。Linux体系和windows就是两种不同的文化,其中《Unix编程艺术》这本书可以说是我的精神导师,我阅读了不下四遍。书中的很多思想都成为我今后做架构的依据和准则,比如“模块原则:使用简洁的接口拼合简单的部件;分离原则:策略同机制分离,接口同引擎分离......”,浓缩成一个词一句话“KISS——Keep It Simple,Stupid!”。当Martin Fowler 与 James Lewis 还未提出微服务的概念时,依据这些思想我已经做了很多微服务的设计和实践。

参考:博客文章—《三读《UNIX编程艺术》——UNIX哲学》  《服务端架构中的“网关服务器”》

第五阶段:搭建互联网平台级产品

这个阶段因为自己的角色已经不仅仅是个技术人员,而是已经深入到业务和产品设计以及运营中去。这时的思路是一定要以业务指导架构设计,我们不可能考虑全面所有事,架构可以随着业务发展慢慢演化。但此时的架构范畴已经不单单是某个程序的架构,而是技术选型、架构设计、性能优化、 安全、系统发布、运维监控、业务数据分析等对整个业务链的支撑。

参考:待总结(包含移动APP,智能硬件、web开发、数据库、云服务、高并发等等)


以上就是今天心血来潮的一些主要节点的回忆,其实还有很多的点点滴滴,正是由于这些点滴构成了自己的技术思想和职业生涯。敬曾经作为技术人员的自己,敬所有还在技术岗位的程序猿兄弟美眉们。

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1982646如需转载请自行联系原作者


yaocoder

我的“技术架构”之旅相关推荐

  1. 《大型网站技术架构》《K8S进阶实战》等书籍!送45本!读完工资多个0!

    学习如逆水行舟,不进则退.所以又来给各位读者送书了,这次送45本技术书,内容涉及深度学习.Python.Dubbo.Flutter等. 感谢本次活动的赞助商『电子工业出版社博文视点』 另外!急于购书的 ...

  2. 阿里道延:我对技术架构的理解与架构师角色的思考

    我叫道延, 2014 年加入阿里,在阿里通信工作了近两年.2016 年年底加入业务平台团队,当时 Leader 找我的第一件事就是要解决大促的问题,第二件事就是解决安全生产的问题. 我带着这个命题进入 ...

  3. 爱奇艺微服务标准技术架构实践

    背景 为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造. 在微服务化的过程中,各业务团 ...

  4. 推荐与广告技术架构的迭代逻辑

    作者·黄崇远 『数据虫巢』 全文共4520字 题图ssyer.com " 所有的技术架构并不是一蹴而就的,都是在需求迭代中逐步的探索,并且不断的适应业务的发展,才逐步发展成最终我们所看到的样 ...

  5. 一文看懂docker容器技术架构及其中的各个模块

    概述 今天主要简单介绍下docker的技术架构及其中组成的各个模块. 技术架构 distribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据 ...

  6. 德国SNS交友/视频网站Poppen.de的技术架构分享

    Poppen.de是一个德国的 交友/ 聊天/ 视频 的SNS网站, 部分内容NSFW,网站采用了很多我们熟悉的技术,像Nginx ,MySQL,CouchDB,Erlang,Memcached的,R ...

  7. 余额宝技术架构读后感

    本次阅读文章为:余额宝技术架构及演讲 文章地址:https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547540&idx ...

  8. flutter ios启动白屏_Flutter技术架构概览

    前言 最近在整理各种技术架构,给自己的列了个TODO list,希望能在几个月的时间内,研究完各种前端技术架构,包括移动端技术架构.今天分享一下自己整理的flutter技术架构.完整的技术架构TODO ...

  9. 干货!3 个重要因素,带你看透 AI 技术架构方案的可行性!

    作者 | 房磊 责编 | Carol 出品 | AI 科技大本营(ID:rgznai100) 人工智能这几年发展的如火如荼,不仅在计算机视觉和自然语言处理领域发生了翻天覆地的变革,在其他领域也掀起了技 ...

最新文章

  1. Windows 10 搭建Python开发环境(PyCharm )
  2. Angel Borja博士教你如何撰写科学论文一:Six things to do before writing your manuscript
  3. 减少代码中该死的 if else 嵌套
  4. 26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树
  5. jq动态渲染后获取不到元素高度_浏览器的渲染机制
  6. 蓝桥杯第七届国赛JAVA真题----七星填数
  7. python跳出循环重新开始_python怎么跳出循环
  8. Linux学习笔记017---文件解压命令的使用_压缩解压
  9. 数据存储技术-专题介绍
  10. 函数和结构(C++)
  11. hdoj-1046-Gridland(规律题)
  12. CAM365|超高性价比CAM软件推荐
  13. 思科模拟器vlan的划分
  14. [VS code - SSH Remote] ln: failed to create hard link ... File exists
  15. 小米手机连接电脑只能看到部分相片_小米手机连接电脑后怎么看照片?
  16. 【axios】get和post请求用法
  17. ai中如何插入签名_怎么将CAD中插入图片的多余部分抠掉?如何设置透明效果?...
  18. 数字电视业务PSI-SI学习系列
  19. Visual Studio中的rc是什么文件
  20. 第四届中国化学会2023电催化与电合成国际研讨会即将举行

热门文章

  1. LeetCode 769. Max Chunks To Make Sorted
  2. 【mac】Bartender 2不能隐藏百度云同步盘图标的解决方法
  3. java 权限管理与用户角色权限设计
  4. 我的软件测试之旅:(10)贡献——开发项流程
  5. linux中用shell获取昨天、明天或多天前的日期
  6. C Primer Plus 第8章 字符输入/输出和输入确认 8.11 编程练习答案
  7. 品运维自动化之cobbler的安装序
  8. Linux 命令(96)—— ln 命令
  9. Linux 命令(34)—— vim 命令
  10. c#在当前窗体的按钮事件调用另一封…