一个资深程序员看12306(终结篇)

“喂?老兄,今晚我请吃饭,你有时间没”?

“有,当然有了。”

“很好,你今晚帮我值班吧!”

上面的台词估计很多人都看了都会一笑。为什么会有笑料?因为脱离了人的惯性思维。日常生活中,大家可能只会当笑话,或者会引用这些笑话,会扩散思维,想到很多更为搞笑的笑话。但技术不能这样,技术得脚踏实地,技术得足够严谨,虚心听别人的意见,技术不能浮躁。一个程序员看待一个问题,和这个程序员本身的成长经历和经验有很大关联,甚至和这个程序员从事的工作领域也有很大关系。还有,隔行如隔山,切记多聆听,不要说外行话,否则你认为你说了一句很牛逼的话,行内人会当笑话看。

本篇继续回到12306上,对其再做一些总结性的说法。

首先:12306存在问题,我是从来不否认的,并且也抨击鄙视过它。

有些问题,我们确实感觉很简单,不应该存在的问题,但他确确实实存在了,那我们就可以提醒他去更改,但不能因为这些,我们就断定我们能做一套这样的系统,并且比他做的好。我甚至碰到过这样的问题,我买了两张高铁票,然后,后悔了,打算改到第二天。我查阅了第二天的票,发现还有很多,于是我改签,可忘记选日期了,竟然没有一句提醒,导致我改签了之后,发现还是原车原日期原班次,只不过座位号变了,而再改签的时候,就只能退票了。这种问题,我就觉得业务逻辑上欠缺了思考。当然还有其他问题。这些问题,是需要12306系统逐步消化改正的。

其次:我是站在程序员的角度来看12306

有的人说了,问题的根源就是票和人的供求关系,如果票够了,比这再烂些都没啥,这话相当正确,但这一句话要实施得多大成本?不妨大概粗略的不能再粗略的想一下:要解决供求关系,就得铺铁路,或者解决地区发展不平衡,那又要和国家大策略挂钩,资金的投入得是战略性的。有外在威胁,内部矛盾,如何协调解决,我想凭我们几个搞技术的在这谈论,非但问题不能解决,被讽刺和嘲笑那是必然的吧,差着行呢,如果我写这样的文章,那用夜郎自大来形容都是轻的。因此,我们还得回过头来,以自己的领域看问题,既然是自己的领域,尝试着对一个新生事物进行分析一下,把它的范围限制在IT技术领域和IT技术理论领域,尽管这依然是一个很庞大的领域,但至少我们能理性看待一下。

“还有人说了看到12306的UI页面,实在忍受不了,果断点叉”。那我们就不妨推测一下,这个人要么是做UI设计的,要么是做UI实现的,他可能在这方面有很深的造诣,但绝对不是做大型网站的。因为关于UI的问题,我第一篇文章就说的很清楚了,那不仅仅是UI的问题,还和网络资源有很大关系,他应该对网络资源的增量和价格的正比关系没有研究过,或者他的领域并不需要考虑这个。

再次:我认为12306是相当复杂的,可以说是有史以来最为复杂的一个系统。

到现在我还这么认为,只不过,我忘记加定语了,这是我的错,这个复杂是建立在IT互联网,即真正的广域网内的,不是局域网。这个话题,也是我今天着重要说的。对于这个话题我分如下几个方面来说:

一、业务不复杂,不见得平台系统不复杂。

有人说,12306的业务他分析了,并不复杂,所以,哪来那么复杂的架构?

12306业务到底复杂不复杂,我这里且不去论。但不复杂的业务就不需要架构了么?或者不复杂业务的系统架构就一定不复杂了么?

       任何一个系统,只要和大访问量、高并发、金钱这三者碰触到一起,必然是一个复杂的大型系统。很多时候,平台的复杂度不是完全取决于需求的,他是要高于需求的,如果平台不高于需求,那后续动态扩展就无从谈起,正是因为有一个好的平台,一个可以很方便扩展的平台,所以腾讯、阿里巴巴等才能依托于平台,扩展出各式各样的庞大功能和需求,有的想法需求甚至是刚刚才有的,难不成他会为此而不停的重新设计平台么?了解腾讯历史的人都知道,腾讯至今一共重新更改设计了四次平台,每次更改和完善,几乎都在两年左右,所投入的人才和资本也是次方级别的。但每次更改之后,依托于新平台的业务功能都会爆发式增长。。

大家可以试着从上篇我提到的个文件传输服务器的业务去想一下,不难得出,业务简单,平台可能会很复杂,甚至会更复杂,因为一个简单的业务,可能后面隐藏著说不清的更多业务流程。举个例子,你说你要实现聊天业务,那我就得考虑注册业务、登录认证业务、好友管理业务、消息存储业务、而每个业务又会涵盖有很多子业务。比如好友管理,那最起码就包含查找好友、添加好友、删除好友、好友备注名修改等。注册业务就包含有手机注册、账号注册、邮箱注册、还要考虑VIP等级等等。这些就不简单了吧。如此想来,12306的业务也不见得简单吧,甚至更复杂吧。举个简单的例子,你认为从哈尔滨到深圳的1张票可以卖几次?买票的人不见得会从头做到尾吧。那这张票还能不能再卖呢?很多业务细节,不是行内人士,很难接触到,很难了解其中的复杂度的。因此,我数篇文章,都不评论12306的业务。因为对这些业务,流程,我是行外人士,但这并不妨碍我站在一个程序员的角度对12306系统复杂度进行一番想象吧。

二、融合性平台不是简单的接口相连,他背后有很多事要做。

       还有人说,平台的融合,就更简单了,只不过接到别人接口上而已,哪来那么夸张的复杂度。那我只能说,他对接的东西很简单,或者太简单了,你有想过这些背后的事情大概要考虑多少么?

       就我所亲身经历或接触过的网络系统来说,我知道的局域网系统从安全级别高低来说,依次有:军方网络系统、公安网络系统、银行网络系统、教育网络系统。

军方网络系统的安全级别相当高,我认为除非你作为硬件或软件供应商,能在他们的监控中事先注入病毒而不被发现。否则很难攻破。因为他们的网络是真正独立的一个局域网。就算要从里面导出一个东西,从硬件上就是仅能单向传输的,并且还要经过授权审批的,更何况,有资格做军方的企业,必然要接受来自军方的安全评判并授权。

公安系统也是相当独立的,基本上是不允许外部网络接入的。就拿最简单的身份证识别系统来说,你要想使用,必须是使用它们配给你的终端识别系统,这和你的系统是不对接的。所以,我们常看到的医院、火车站的身份识别客户端等,那都是公安系统授权之后给你的终端机器,不是接口。这就是为啥很多比较出名的网络商,你在上面注册了账号之后,还要让你提交身份证照片,并且还要经过至少24小时的审核才能行的原因,如果他们真和公安系统对接了,还需要这么复杂么?

再有就是银行系统。目前,就国内来说,所有的银行系统准入制,都需要经过一个最高级别的银监会来审核批准,并不是银行说了就算的。如果你做过支付系统,就会知道,如果你要接入到银行接口,那需要银监会的审核审批,他们的一个硬性指标就是,你的公司最起码的市值500亿以上。否则想都别想。所以,做支付只能是那些大公司去做,而小公司做支付只能是通过抓取银行的网页或者跳转到银行的支付网页上去实现。因此,即便你那边交易成功了,这边有可能还不知道,还需要你认为的再点击确认一下,就是这个原因。

而上面这些系统之所以做的这么严格,那是因为这些都是涉及到国家安全、民生等的核心基础。谁敢承担那么大的责任任意公开?更何况,即便公开了,每个系统肯定也是优先考虑内部使用吧。不能因为公开给你了,你的大访问量,导致我系统的瘫痪而不能办公吧。

如上这些,要对接,哪个方面不需要国家层面出面协调,分清问题责任才能做?这还幸亏是在中国,基于中国体制下才有可能。如果在国外,怕是想都不敢想的工程吧。有人说,为啥支付不直接连到支付宝上呢?咱们暂且不说支付宝应付这么多支付信息的能力如何,他作为中间商。会轻易免费给你提供支付功能么?他敢背负骂名,让所有支付汇聚在他一个节点上么?

还有人说,12306的短信通知,只需要一个短信通知接口就行了?但这个短信通知接口12306他敢随便租用一个么?它里面那么多的个人用户信息,他敢受控到一个仅仅是做短信群发平台的公司么?很显然,所有大型公司都不会这么做,都会有自己的短信平台。每个短信平台,至少得接联通、电信、移动吧。而这三家又有CDMA、WCDMA、TD-SCDMA协议,你要相接他们,必须得遵守他们的协议处理吧。他们的协议处理会简单么?做过通信业务的应该知道这里面的复杂度和审批流程吧。

综上、12306的复杂度可想而知了,这么一个复杂的东西,几个因不堪忍受其弊病的程序员就能做的出来么?那不是一个笑话是啥?在广域网而言,世界上谁还能找到一个比他还复杂的平台系统么?所以,我说他是有史以来,最为复杂的一个平台系统了。这种说法,我自认为没什么不妥。

特别郑重说明啊,我真的不是12306团队中人,甚至没见过一个参与过12306系统的开发人员。所以只是站在一个局外人的角度,以程序员的经历、经验,站在自己的思考角度来分析一下这个系统而已。

  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 63
    评论
### 回答1: 以下是从一名小白快速成为资深程序员的一些建议: 1. 学习编程语言和工具:作为一名程序员,必须掌握至少一种编程语言和相关工具,例如IDE,文本编辑器等。建议初学者先学习易于理解和入门的编程语言,例如Python或JavaScript,并且学会使用一些基本的工具,例如Git和命令行。 2. 掌握算法和数据结构:算法和数据结构是编程的核心,它们可以让你编写更高效、更简洁的代码。建议学习基础的算法和数据结构,例如排序、查找、链表等,并掌握它们的时间复杂度和空间复杂度。 3. 参与开源项目:参与开源项目可以让你学习到其他优秀程序员的代码,了解行业最佳实践和编码规范。在Github等开源平台上找到感兴趣的项目,开始贡献代码和解决问题。 4. 阅读相关书籍和文档:阅读相关书籍和文档可以让你深入了解编程语言和工具,以及其他相关的技术领域。建议读一些经典的书籍,例如《深入浅出Python》、《JavaScript高级程序设计》等。 5. 持续练习和实践:编程是一门实践性很强的技能,需要不断地练习和实践。可以尝试解决一些编程练习题、编写自己的项目、参加编程比赛等。 6. 学会自我学习和解决问题:作为一名程序员,你需要不断学习和解决各种问题。可以学会使用搜索引擎和技术社区寻找答案,并学会提出明确的问题和进行有效的调试。 ### 回答2: 想要从一名小白快速成为资深程序员,以下是几点建议: 1. 学习扎实的基础知识:作为一名程序员,必须掌握基本的编程语言、数据结构和算法等基础知识。可以通过学习相关教材、参加在线课程或参加编程培训班来打牢基础。 2. 实践项目:理论学习只是第一步,实践才是提高的关键。通过完成一些编程项目,不仅可以强化知识,还能锻炼解决问题的能力和思维方式。可以找一些开源项目或者自己构思一个小项目进行实践。 3. 持续学习:程序员一个朝气蓬勃的行业,技术更新迅速。要想成为资深程序员,需要持续学习和跟进最新的技术趋势。阅读技术书籍、博客,参加技术交流会议和培训,保持学习的动力。 4. 参与开源项目和社区:积极参与开源项目和技术社区的讨论,你能从资深程序员的经验中学到很多。这也是锻炼自己技术能力和交流能力的良好途径。 5. 寻找导师或 Mentor:找一位资深程序员作为导师,能够帮助你指导学习方向,解答疑问,并提供实践经验和建议。 6. 勤于总结和分享:将学习过程中获得的经验和知识以博客、技术文章等形式进行总结和分享。这样不仅能够加深自己对知识的理解,还能提升自己的表达能力和影响力。 最重要的是,要坚持不懈地学习和实践,不断提升自己的技术能力和思维方式,才能成为一名资深程序员。 ### 回答3: 要从一名小白快速成为资深程序员,关键在于持续学习和实践。以下是一些具体建议: 1.选择合适的编程语言和领域:根据个人兴趣和市场需求选择一门编程语言,并专注于相关的领域,例如移动应用开发、网络安全等。熟悉一门语言和领域将有助于深度学习和提升技术水平。 2.系统学习编程基础知识:打好基础是成为资深程序员的关键。学习算法、数据结构、计算机网络等基础知识,并掌握常见的设计模式与编程规范。 3.通过实践不断积累经验:通过编写实际项目来应用所学知识,并逐步提升自己的编程技能。参与开源项目、参加编程比赛等都是不错的实践机会。 4.持续学习新技术与工具:学习不同领域中的新技术和工具,保持与行业发展的同步。阅读技术书籍、参加技术社区、关注技术博客等都是获取新知识的途径。 5.与他人交流与合作:活跃参与技术社区和开发者社群,与其他程序员交流、学习和分享经验。通过与他人的合作,可以了解不同的解决方案和开发方法。 6.注重代码质量和项目管理:学会编写高质量、易于维护的代码,并熟悉常用的版本控制工具与项目管理方法。良好的代码风格和项目管理能力将提升职业水平。 7.不断挑战自己:设定目标和挑战,不怕失败,勇于尝试新的技术和项目。不断超越自己,拓宽自己的技术范围与视野。 成为资深程序员需要时间和经验的积累,没有捷径可走。因此,持续学习与实践是最重要的一点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值