zoukankan      html  css  js  c++  java
  • 【转】什么是互联网精神

    我的故事-扭扭蛋的成功
    几年前的一次公司晚宴上,跟我同一桌有位同事带来2岁左右的女宝宝,女宝宝手里握着1个戒指大小的塑料玩具玩得不亦乐乎。我很好奇的寻味那是什么,这个问题开启了我对互联网精神的认知。在超市收银的柜台上会摆放着扭扭蛋,女宝宝专属的是粉红色的蛋,男宝宝专属的是蓝色的蛋,外包装就是一层塑料皮,形似鸡蛋大小,里面有价值几毛钱的巧克力里豆和价值几分钱的塑料玩具。整个扭扭蛋的材料成本估计在1块钱以内,但是统一售价10块钱一枚,而就这么一颗看似平凡的蛋成为了一个爆款,很多家长一买就是几十颗。

    我们来分析下这个案例,里面的塑料玩具小朋友可能玩一天就失去新鲜度了,同样的价格更是可以买到十倍以上的巧克力豆,为什么组合在一起就能迸发出如此大的魔力呢?因为它里面的小礼物是随机的,因为男宝和女宝喜欢的东西不一样所以设计上也做了颜色上的区分,孩子们并不是为了吃一口里面的糖豆玩一下里面的玩具,而是因为了扭开蛋壳打破未知世界时好奇心得到了满足,站在家长的立场,虽然明知它的成本也就几毛钱,但是10块钱买孩子们一次开心,这笔生意还是划得来的。

    定义互联网精神
    随着经济的发展老百姓也越来越有钱,我们也不再以性价比为唯一标准去评价一件商品的好坏,更多关心是你是否认可这件商品,认可了它你就会愿意为它去花钱,就像你认可了这枚蛋,你就愿意用10块钱的价格去买一个几毛钱的东西。你用京东是认可它的物流,你用天猫是认可它的性价比,你去私立医院是认可它的服务,所以如果你是互联网企业的老总,你不用担心客户没有钱,你只需要担心你凭什么让客户认可你愿意为你掏钱,这就是互联网精神。

    对我们程序员来说,这个定义可能显得比较遥远,因为并不是每个程序员都要去创业当老板的,所以如果站在程序员的角度来定义互联网精神,那就是一个字,“快”。

    快包含两层意义:

    第一层: 对于产品来说(性能快、终端响应快、扩容快);

    第二层: 对于开发人员(轻量级、上手快、开源)。

    只有够快才可以提高客户体验,没人愿意盯着手机屏幕等5秒钟以上。至于如何为客户提供更舒服的服务方向那属于策划部门考虑的问题,不属于咱们程序员能左右的。

    产品要“快”:
    基础设施:
    CPU、内存等硬件设施在充分压榨利用的前提下配置越高越好,非图形化的Linux肯定是操作系统的首选,关系型数据库的PK中mysql比Oracle领先了一个身位,服务节点间的网络跳纤越短越好,静态的部分是否可以交给Nginx甚至CDN。基础设施的选择和构建是最重要的一环,这一步没有考虑清楚的话很可能会寸步难行。

    客户端响应:
    再好的产品如果客户点一个按钮后顶着手机5秒都没有反馈的话,那你将会永久失去这个客户,所以提高客户端响应速度是非常必要的。客户不会听你的解释,你的后端将会为这次操作执行多么复杂的运算、跳转了多少个网络节点,客户只关心你耽误了他们的时间,他们不认可你的产品,就这么简单。

    提高客户端响应的手段有很多,最通用的两大手段是缓存和异步。

    *缓存是一种通用的技术,意义在于减少重复运算和提高少量数据的IO,有磁盘缓存和内存缓存,Spark对缓存的使用达到了登峰造极的地步。我们最常用的缓存是Redis,它可以做持久层二级缓存、系统的共享缓存、分布式锁、消息队列、NoSql数据库。

    *异步的意义有2个,第一个意义是迅速响应客户,减少客户等待时间,实现手段是通过Ajax之类的Js代码;第二个意义是削峰填谷,在高QPS时保证产品的稳定性,实现手段是通过Kafka、RabbitMQ等消息队列技术,当然每种消息队列有其特有的设计思想,也就对应着不同的应用场景,有的注重吞吐,有的注重稳定。

    扩容:
    因为你的客户体量是不断增加的,所以要以发展的眼光去评价一个组件或者一种技术的好坏。绝大部分的互联网组建在这方面已经设计的很好了,我们除开根据自己的需要学习特性之外,还需要抽象出其中的共性,像Master/Slaver、Metadata、分片、冗余这些常用的分布式名词一定要掌握。

     
    开发要“快”:
    互联网时代每天都可能风云突变,商机也会转瞬即逝,所以一个好的Idea和策划要想真正落地还得靠咱们程序员们去实现。而我们程序员们拿人钱财替人消灾,但又不想通宵达旦冒着猝死的风险去燃烧自己,怎么办? 那就需要用科学的办法,从技术的角度来提高自己的开发效率。

    编码快:
    语言分这么多种类就是因为它们有自己的应用场景,要开发一套系统虽然在理论上讲用任何语言都可以coding,但是每种语言在实现不同场景时的开发速率是不一样的,这是由语言本身的特性所决定的。一般我们能用脚本语言搞定的就不用Java,能用Java搞定的就不用C,而且语言本身也有很多变种和分支,例如JavaScript的三驾马车,Java的Scala、Groovy两大变种。就拿Groovy来说,它的coding效率估计要比Java快一倍。

    利用开源:
    不要重复发明轮子,因为你不是第一个吃螃蟹的人,github肯定有巨人们已经给你把路铺好了,用现成的永远比自己重新开发来得更快些。我刚入职谋某份工作的时候用8个月的时间开发了一套系统,其实github上google和Netflix等公司早就开源了类似的产品,而且我8个月的东西跟他们的比起来就是玩具,可见合理利用开源是多么重要的技能。

    但是国内的开源氛围并不好。

    一方面研发人员都是拿来主义用完就算,很少有人会回馈社区;

    另一方面,客户方对开源仍存在误区,总以为开源是廉价、不稳定、野路子、不专业的代名词,他们更愿意多花个几百万去买个商业的工具,殊不知这些商业工具很多就是开源包装起来的。

    目前以BAT为首的大型互联网企业已经开始注重开源这一块,例如一些涉及到混合云的开源工具,如果你不去支持开源,那么使用这些工具的企业也不会采购你的云平台。反之,你支持自己云平台的代码提交到github上,客户在使用过程中发现的bug和修复的代码也会源源不断地回馈回github上来,就会形成一个良性循环。

    上手快:
    互联网中用到的所有的技术基本都是默认可用和水平扩展的,为了满足“上手快”的要求。例如Spring Cloud中启动参数基本都有默认值,zookeeper、elasticsearch、logstash、kafka等组件目录结构都是bin里是启动程序,conf里是配置程序,解压开箱即可用,都有默认值,通过配置做水平扩展。Redis、MqSql等在Linux中甚至可以以apt-get或者yum的方式来安装使用,

    如何学习新技术
    每天都有新技术的推出,我们该如何学习这些新技术或新组件呢?我分享下我自己的学习思路,我把它称为4轮学习法。

    第一轮,初步了解新技术的背景、特性、解决场景,对它的作用有个宏观上的理解。

    第二轮,深入这个技术的算法和原理,架构图、数据流向、角色特性等等,这是个相对漫长的过程,需要有一定的聪明才智和学习能力。可以通过默写法来检验自己的掌握程度,在白纸上把原理和设计恢复出来,哪里有疑问就标注下来,回头继续去查。

    目前为止应该掌握了80%了,但是有些细节通过理论学习还是不清楚怎么办?

    第三轮,研究新技术安装和消费程序代码。安装过程中每一个操作步骤是在干什么,里面的配置是为了干什么,客户端代码里每一行代码,特别设计到端口配置项的都是为了干什么。这些可以弥补细节上的不明白的地方。

    第四轮,实战中去碰壁,遇到问题后再慢慢研究吧。

    禁止空中楼阁
    设计思想的实现必定基于具体的技术,所以在学习过程中不要妄图绕过不懂的技术直接去看高大上的课题,例如在学习HBase时如果不明白元数据、zookeeper这些概念你是不能真正学会的,学习上层技术时遇到底层技术的空缺应道立刻停止当前学习,先把底层的掌握好再回来继续,否则你根本看不懂别人为什么那么去设计。

    找到它的小伙伴
    孤立的去学习一项技术很难彻底理解它的意义,很多东西组合起来才会迸发出无穷的魔力。例如ELK日志三兄弟,zookeeper解决master/slaver选举问题,Git+Jenkins这对CI搭档。就像乐高积木一样,你会的技术越多,你手上的资源就越多,组合后的种类也就越多,搭建起来的成品也就越丰富多彩。

    而且产生关联的技术点是最不容易被忘记的。例如妈妈要去国外旅游一个月,叮嘱过我记得给她的花浇水,但是我每天都会忘记。后来我想到一个绝招,用我的洗脚水来浇花,因为我每天回到家第一件事就是要泡脚,然后顺便用洗脚水来浇花,让洗脚与浇花产生了关联关系,就不再那么容易忘记了。

    总结:
    如果你相当一个创业公司的老板,请先想清楚如何让客户认可你愿意为你买单;如果你相当一个技术大牛,那就要掌握互联网技术的“快”。
    ---------------------
    作者:牛麦康纳
    来源:CSDN
    原文:https://blog.csdn.net/yejingtao703/article/details/82974428
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    mysql基础知识
    django知识
    gitlab的CICD搭建记录
    nginx的基础知识
    JAVA基础知识总结——part1
    【Python】python基础练习题_1
    【Docker】——Linux下搭建docker环境
    day3
    python_day2
    python_day1
  • 原文地址:https://www.cnblogs.com/yanghj010/p/9850722.html
Copyright © 2011-2022 走看看