爆栈思想 – 数据库“状态”字段如何设计

前言

之前在文章《学员问答精选 – 1 – 数据库表拆分》中提及过一个数据库的设计问题。今天,微博上的@火丁日记 说:

表里有一个 status 字段,用来表示数据的状态,比如订单的已付款,已关闭等。以前我习惯把它定义为 INT 类型,但是慢慢的,我就记不清楚 1,2,3 到底指的是什么意思了,也想过用 ENUM 类型,但是不方便扩展,最后,我觉得直接用 VARCHAR 类型算了,去它的三范式。

百家争鸣

  • 一些网友赞同使用varchar
  • 一些还是觉得应该enum
  • 一些觉得最原始的int是最好的
  • 一些觉得要用字典表

各种考量

其实,一个字段类型的考量,主要包括:

  • 准确性/精确性:必须能满足业务需求,不能丢数据,溢出等
  • 性能:一般来说,int的运算比varchar要快
  • 空间:尽可能占用最少的空间,一条记录浪费1字节,10亿记录就浪费1GB空间了
  • 辅助性:譬如方便功能上的排序、方便开发人员记忆等

如果要为开发人员着想:

  • 数据库里,表的字段可以添加描述,譬如0: Pending, 1. Paid, 2: Processing, 3: Delivered, 4: Cancelled
  • 如果不满足,那可以用char(1),26个字符足够表达各种状态了吧?不够就char(2),再不行就char(3),主要是省空间。为什么不用varchar(n)而用char(固定数值)?因为varchar(n)要运算做各种trimming,起码在SQL Server里,譬如len()就是后面空格去掉后的长度,和datalength()不一样。这个一般是单词的首字母,记起来比int舒服些。我发现一些公司就是这样做的。

如果要追求节省空间,完全可以用tinyint甚至varbinary,毕竟1个字节有8位,一般订单也就那么几个状态吧?

首先,如果用varchar,那么要考虑:

  • 你这个状态的值,是放英文还是中文?你的产品是否全球化的?
  • 如果是放英文,那你还是需要本地化。
  • 而且,既然要本地化,就没必要放完整的单词,char(1)便可,原因参考上面。

如果使用int,那么要考虑:界面文本显示,开发人员友好。

如果要考虑界面显示如排序等,一般来说,界面需要先根据条件过滤出来某种状态,但是,如果你的业务逻辑就是要同时显示多种状态的数据,这要考虑目标数据只是已经在界面的,还是在数据库的:

  • 界面:那数据库的类型还是最精简的varbinary(1),在界面对值进行解释然后根据解释出来的规则进行排序

当然,有些业务系统会使用字典表,相当于外键,如果返回结果的时候就join,这里会比case xx when 1 then ‘某状态’ 的效率要差些,而且字典表还是需要做语言本地化的。

总结

其实,不管用哪种方案,都没有完美的,还是应该具体业务需求来。

 

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 时间都去哪里了?怎么高效使用时间?

苦恼

我的一个学员问我:“我已经入职了,有点苦恼,感觉现在一天没什么时间是自己的,不过公司这边就有安排导师就是带着我,现在在慢慢地熟悉一些东西。我现在还好,没负责什么项目,所以一天还有一些时间可以自己学习一下,可是看周围的人都感觉好忙,可能就没剩什么时间了,老师,您是怎么解决这个问题的?”

存在即合理

周围的人很忙没有时间剩下来?这不是正常吗?老板给钱你来上班就是努力干活啊,哪里有所谓的”me time”。

所以一般人想学新的东西,除非公司上新项目/改造系统,否则只能自己回家慢慢学,譬如跟我学 😉

专注

工作中,多样事情同时发生,譬如你写代码的时候,刚来公司的新人张三来请教你,可能还没有回答完,隔壁老王又来找你讨论产品的修改。

我们做个小游戏:你同时把左手放胸口搓圆型,和右手拍打脑袋,有点别扭,是吧?

同理,很可惜,很少人能同时应付多个任务,毕竟,你不是多核CPU可以并行计算,你顶多可以并发处理,就是跟CPU那样不断做context switch,在不同的项目中来回切换。

但是,这个的效果其实并不好,因为思路很容易打断,而且继续做的时候要思考一下之前做到哪里,接下来怎么做。

如果是你想合理控制时间,你需要把时间集中起来,某个时间段内任何其它东西都不做,只专注一样东西,这样更容易有实际的产出,譬如每天安排:

  • 上班中,多个30分钟,都只做一样事情
  • 下班后,30分钟看看新闻
  • 下班后,30分钟研究你的领域里的新技术
  • 下班后,30分钟做一下你的个人爱好
  • 下班后,30分钟刷一下社交媒体跟进一下好友动态

站在巨人的肩膀上

经过研究后还是不懂就马上问,别浪费时间,合理搜索正确答案和利用第三方解决方案。不要钻牛角尖,掉坑里爬出来可能是几天甚至几周之后的事情。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – .NET/C# 能力和使用范围

有同学质疑C#的能力和使用范围,我说,C#可以在多个平台跑,包括移动设备(通过Xamarin写iOS/Android)、嵌入式,智能设备、电视、冰箱(如三星Tizen)等。

还有同学说质疑:“说C#能写驱动吗?” 我说:“C#还可以写操作系统 ” (atomixos  和 cosmos)。然后这位同学说:“那java呢,不就更应该建议采用java了”

其实,这种争论,犹如:“飞机可以到处飞,为什么要汽车?” 般没有意义。

你要去探望在小溪的对面的邻居,你会走桥、坐船、开汽车、坐飞机还是乘宇宙飞船过去呢?拿一种技术不擅长或者不能做的事情说事,没有意思。

不同的场景用不同的技术。按照那种“那为什么建议采用xxx技术”的观点,那其它语言都没有存在的价值了,因为每种语言都有优缺点。

而且,我喜欢C#为什么就不能推荐/支持C#了?

我觉得很多技术人对.NET/C#有相当多的偏见,而且这种偏见还是刻舟求剑式的,他们不知道.NET生态开源了,不知道现在C#在多个测试中的性能比Java还好。

微软出的开源的Visual Studio Code,越来越多的在Mac/Linux上做开发的同学用这个了,最近参加几个meetup,做aws/nodejs等等,都用这个演示。

这种偏见,一部分来自对微软的不喜甚至憎恨,譬如最近微软收购了GitHub,有一些用户就马上迁移到GitLab,尽管之前GitLab丢过客户数据。

 

最近,我花了些时间,写了2万多字的《.NET前世、今生和将来》,全面讲解.NET生态圈的历史、作用和潜力,晚点发布。

 

 

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 数据库技术的革新

前言

数据库是大中小型系统的基石,所有操作,最终都需要和数据打交道,一切来源自数据,一切回归数据。

传统的非关系型数据存储

XML、JSON、CSV等文件,没有关系约束。

关系型数据库系统RDBMS

传统关系型数据库系统很难横向扩展(scale-out),很多时候我们都是仔细设计怎么对数据进行分库分片,可能垂直拆分(业务给表分块),也可能是水平拆分(表按时间、地区、自增ID等切分),还可能混合拆分。

传统关系型数据库因为追求强一致性,所以一般高可用性是通过各种形式的日志备份(log backup/log shipping等)。

分布式

当单机无法支撑业务的时候,我们可能会优先考虑升级硬件(scale-up),但单机迟早有物理限制(譬如有些机器最多支持1TB的内存),这种情况下,我们会实现分布式,所谓的scale-out。

但是,根据CAP理论,一般分布式系统做不到C(强一致性),所以他们会实现2PC(Two Phase Commit,二阶段提交)。

NoSQL

NoSQL天生支持分布式、多节点、高可用性,高性能是他们的卖点,但他们一般只强调A(高可用性)和P(分区容错),而做不到或者很基础的支持C。

MongoDB

MongoDB是NoSQL界的旗帜,他们无孔不入的宣传手段让这个问题诸多的解决方案成为很多公司的首选。

坑这么多的 MongoDB 到底是怎么做起来的?其背后的公司运作得不错:在各地区搞了用户组,给组长资金支持,组长办线下活动、找“专家”开讲座/写博客违心地夸奖 MongoDB,文章在这里《MongoDB 背后的营销策略》。

NewSQL

而如MongoDB之类的NoSQL虽然天生支持scale-out,但无法解决CAP定理指出的问题: 一致性、可用性、分区容错三者不可兼得

所以NewSQL的出现尝试解决这个问题,他们的目标是拥有NoSQL的高可用性和分区容错,还拥有传统关系型数据库系统的强一致性。

CockcroachDB

CockcroachDB是相对成熟的新型分布式数据库系统,底层基于PostgreSQL,所以支持传统的SQL查询,做得相当智能,可以自动根据数据的访问频率来把热点数据推送到最近的节点。

特点:是CP非A(强一致性和分区容错),兼容PostgreSQL。

官网在这里,开源。

Fauna

Twitter一些工程师离职后搞的数据库系统,高可用性、高性能、分布式、支持最严格的ACID。这篇文章拿MongoDB 4.x支持ACID来比较,实际上MongoDB并不支持强ACID,而且只有他们收购的WiredTiger引擎才支持,而且只支持本地节点而已。

官网在这里

ActorDB

分布式数据库,特别适合作为手机App的服务器端存储,开源项目

比较

其实,大部分的观点是,NoSQL比传统关系型数据库快,这个定义必须明确一下:

  • NoSQL的存取是读写一个文本(主要是JSON/B SON格式),一般没有外键约束等检查,没有关联查询,所以简单粗暴的操作是来得快
  • 关系型数据库系统,一般的读写要做以下操作
      • 规范化:一条记录根据业务关系拆分别存储到不同的表
      • 外键约束
      • 更新索引
      • 关联表

所以你看见,关系型数据库系统,需要额外的操作,自然会“慢”。但是,说传统关系型数据库就是慢的同学,估计没有用Bulk Copy。

应用场景

你要去探望在小溪的对面的邻居,你会走桥、坐船、开汽车、坐飞机还是乘宇宙飞船过去呢?

同理,不同的场景用不同的数据库系统。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 什么样的工作才是做得爽?

前言

我之前在《爆栈思想 – 开发人员如何面对各种不公和不满》里面说过各种不公对待,那么,大家究竟希望怎么样的工作环境,需要怎么样才能爽呢?

马克思说:“资本家害怕没有利润或利润太少,就像自然界害怕真空一样。一旦有适当的利润,资本就大胆起来。如果有百分之十的利润,他就保证到处被使用;有百分之二十的利润,它就活跃起来;有百分之五十的利润,它就铤而走险;为了百分之一百的利润,它就敢践踏一切人间法律;有百分之三百的利润,它就敢犯任何罪行,甚至冒绞死的危险。”

作为老板,他们的任务就是尽可能地压榨你的贡献,用最少的钱办最多的事。

在古代,那些在红楼卖唱的女子,被客人调戏,一般对白都是:“客观请自重,小女子卖艺不卖身。”

而当代,有个半调侃的段子:“只要给得足够多的钱,我不管你让我做什么!”

一些网友总结说:做得不爽的,说到底,还是老板给的钱不够多,只要钱给足了,哪里还有不爽呢!

钱能解决的问题,那就不是问题。问题是,老板未必愿意给你期望的待遇。

 

钱少事多离家远,
位卑权轻责任重。

 

自由

自由度要够高,做你喜欢做的事情,不是被局限于做重复性劳动。

对口味

用自己喜欢的技术,而不是被迫用一些很抗拒的技术。

升迁

努力后的回报是,老板根据你的贡献来给你加薪、升职。

学习进步

在之前的文章《究竟怎样才能技术专家》中说过,一个公司的文化和领导意志决定了你是否能在工作中不断学习进步。

团队融洽

没有混蛋,这是大家希望看见的吧?然而,每个公司都有这样的人。有人的地方就有江湖,有利益的地方就有冲突。没有人会踢一直死狗,如果有人对你不利,那是因为你潜在或者已经触动了他们的利益。

残酷的现实

你的愿景和实际是有差距的。所以要么郁郁不得志,要么离开。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 水平高低、改进和重写

入乡随俗?

泰国要搞一个大型基础设施,找了中国的工程队去,当地的协会要求该工程队先考一个资格证,国王知道后,说:“你们就是自己做不了才找的中国的工程队过来,这说明人家水平比你们高,你还需要别人考取你们的资格证?这不像话。不需要他们考证。”

一些时候,新人进入公司,不管该新人背景如何,水平多高,就是把你当初级程序员那样用,即便过了一段时间该新人对业务系统已经有一定的认识,仍然得不到应有的重用,反观一些水平差不少、态度很差的老油条却不断升迁、加薪。

改进和重写

英文里,我们有evolution 进化和revolution 革命,一个字母之差,如中国古语说:差之毫厘,谬之千里。

一些老系统,如果要改造,主要考虑项目的大小和公司的资源,如果系统较小、资源充足、权衡利弊后回报合理,那可能选择重写。否则,应该采用进化的方式逐步改进。

我之前说过,开发人员有英雄主义情结,有些开发人员做得比较极端的是,看着系统不爽就说要推倒重来,主要心态是:

  • 我想学新东西,平时没机会,现在找这个做借口,练手
  • 老子自认天下第一,别人的代码都是垃圾,都得扔掉

Dependency graph of a Big Ball of Mud architecture

当然,也有可能是客观的情况:系统不行

  • 系统设计一团糟 (big ball of mud),无法维护和改进
  • 要么性能低下
  • 要么问题百出
  • 要么用户体验糟糕
  • 要么跟不上时代,如不支持各种移动设备,或者用户量上来了现有架构无法应付

其实,即便全面改造现有系统,也可以有序地进行,譬如垂直按模块来,分而治之。又或者采用所谓的lift & shift,改造底层架构,譬如本地服务器改成用云的分布式。

曾经有这样的系统,采用新技术重写,花了8年,仍然还是半成品。所以还没有交付,技术又落后了。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 是什么阻碍了我们成长

前言

在上一篇的《究竟怎样才能成为技术专家》中说过几个提供水平的办法:

  • 去参加其它组的技术分享
  • 可以回家去学
  • 可以参加外部的技术分享
  • 可以上网找课程
  • 参与开源项目,多读优秀的开源项目的代码
  • 刻意地通过去做新的东西来学新技术

但毕竟你没有足够的实战机会。

心态

我发现,不管是否开发人员,相当一部分的人心态,可以总结为3种类型。

第一种:钱

  • 现在什么都能找到免费的了,软件啊、电影啊、电子书啊,随便下载,不管它是否盗版,反正老子能下载
  • 能不花钱就不花钱,不管多便宜。咱们就得多占外国人的便宜,多下载盗版软件、电影,这是当年八国联军欠我们的!
  • 大家都不给钱,我为什么要给钱?我给钱我就是傻!
  • 如果某个教程收钱,我就找免费的,尽管质量/效果没有那么好。
  • 我很穷,我什么钱都给不起!

首先,对于第一种类型,一句话概括之:能用钱解决的问题不是问题。或许你习惯了Windows不给钱,用的都是破解/免费/开源软件。但你上学的时候,真的一分钱不花吗?

知识来自哪里?前人的研究、总结,这些人需要花费大量时间、精力、金钱换来这些经验、心得,凭什么都要免费送给你?

你上班辛苦工作,可以不拿工资吗?

你写的商业软件,被别人盗版,你怎么想?

真有那么穷吗?玩游戏给那么多钱买装备。

而且,对于一些群体,如学生来说,很多硬件、软件、服务都是有特价的。

第二种:舒适区

  • 我现在舒服着呢,我够用了。为什么要那么累去学习提高自己?
  • 我是老油条,在这里养老便可,新技术神马都是浮云。

对于在舒适区的同学,需要警惕温水煮蛙。你掌握的技术现在有用,不等于明天还有需求,技术革新越来越快。

你低头干活,再抬头一看,NoSQL/NewSQL、分布式、云、大数据分析/处理/存储、日新月异的Web前端、ML机器学习、AI人工智能、VR虚拟现实/AR增强现实/MR混合现实、区块连等等早已流行。

我们需要做的是周期性关注流行的技术,知道他们是什么、用途有什么、相比其它技术的优缺点是什么,等等。

第三种:新人

  • 我完全不知道我需要提高,我以为去上班就行了,在工作中再慢慢学要用到东西
  • 我完全不知道该做什么,没有人指点我,我很迷茫

从公司角度来说,需要物尽其用,人尽其事,简单点来说,会尽可能榨干你的每一滴汗水。所以,好的公司会给你一些机会学习/提高,其它公司直接让你私底下/回家慢慢学。

而且,就业竞争大,比你水平高的同学是有的,所以,如果你期望入职后才慢慢学,那就比其它同学落后在起跑线了。

 

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 究竟怎样才能技术专家

专才和全才

我之前在我的《爆栈之旅》课程里详细说过专才和全才的差别。

韩愈的《师说》中说到:“闻道有先后,术业有专攻”,意指所听到的道理有先有后,技能学术各有研究方向。

我大学的老师引用著名生物学家Thomas Huxley 赫胥黎的传世名言:”Try to learn something about everything and everything about something”(试着去学一切的一点皮毛,和某些皮毛的一切)。这是让大家尝试成为全才。

JOATMON 万金油

然而,并不是每个人都愿意、有能力、达成全才。英语里有一句老话:Jack of all trade, master of none(门门精通、样样稀松)。大概意思就是真正的全才难以达到,最后只能半吊子。

 

在中国,我们会称之为“万金油”,其实就跟瑞士军刀一样,难以样样精通。

级别

开发人员:初级程序员、中级程序员、高级程序员、小头目(Team Lead/Tech Lead)、首席开发人员(Principle Developer)

架构师:应用架构师(Application Architect),系统架构师(System Architect),企业架构师(Enterprise Architect – EA)

技术管理:研发经理、高级研发经理、技术副总(VPE)、CTO

这些我都在《爆栈之旅》课程里深入讨论过差异、需要多长时间、需要什么才可以逐步升级。

限制

一般开发人员,会在某个小组里做某个业务模块,因为业务范围限制,能使用的技术不多,譬如,你负责某个模块的前端,你就比较少机会接触后台、存储、分布式等等技术,没有这个需求,也没有这个机会。

某司,某个小组的技术元老,跟CTO进言:“我组的开发人员,一般就接触前端(Web)和桌面(WPF),没有什么机会接触到后台、数据存储等技术,我想送他们去参加那些付费的培训班”。

CTO马上说:“我们这是在做业务产品,不是给大家来学某种编程语言/技术的,如果他们愿意,可以自己回家去学。而且大家都去学得花多少时间和钱?”

我坐在旁边,颤颤抖抖地说:“我遇到过有这样要求的开发人员,说着这里只能学到某种特定的技术,其他的学不到,所以离职了。其实,我司用的技术挺多的,后台.NET、Java、Scala等,前端React、AngualrJS、Knockout等,数据存储SQL Server、PostgreSQL、MongoDB、Redis等,硬件设计/嵌入式等,大数据处理存储如Hadoop、Kafka、Spark、Elasticsearch、Kibana、Logstash,我们还有大数据分析、人工智能、机器学习等等,只是因为业务组限制,没有机会接触。要不,既然我们每个星期五下午都有一个小时的啤酒时间,就利用这个大家都不工作的时间,每周找个具体的话题,大家上去轮流着讨论,这样比写文章效果更好,而且可以录制视频,公司全球分舵都可以分享。”

CTO答道:“愿意学的人无论如何都会找到办法去学,不想学到人无论怎么创造机会都不会学,所以,我们没必要做你们说的。”

专家

经过多年钻研,把某一门技术做深做强,成为该领域的专家,已经是非常难得了。如果要成为更多领域的专家,那更加困难。

办法

所以,怎么办?业务模块未必提供足够的机会,当然,你可以:

  • 去参加其它组的技术分享
  • 可以回家去学
  • 可以参加外部的技术分享
  • 可以上网找课程
  • 参与开源项目,多读优秀的开源项目的代码
  • 刻意地通过去做新的东西来学新技术

但毕竟你没有足够的实战机会。

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

在《爆栈之旅》,我根据大家都实际情况、水平、方向等规划职业路径,手把手带你做实战的项目,用最高效的办法达到你想要的高度。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈思想 – 开发人员如何面对各种不公和不满

某司,同一天,有2个开发人员通知大家他们离职,其中一个还是做技术这块算是二号人物的元老。另外一个,和我谈过一些对他不公平的事情,对管理如何的不满。

工作中,我们会遇到各种不公平的事情。我的职业生涯中,超过10间公司,每间都有这样那样的不公平/我不满意的事情,譬如:

  • 一些老油条把他们的任务强塞给你
  • 你完成的任务,他们抢过去邀功
  • 出现了问题,就说是你造成的
  • 管理混乱,团队负责人纯技术出身,完全没有学过人员管理,老板为了挽留那些老油条而给他们升职,把他们放到不恰当的管理岗位
  • 一些时候,老板给新来的人高薪,而一些确实贡献很大而且经验丰富的人,他们的待遇比新人还低
  • 一些老油条,平时你请教他们,他们要么无视你,要么有意无意地只给你片言只字,让你无从下手。他们的思维,大抵是:
    • 老子多年前就是这么过来的,你们总得辛苦一下
    • 我总不能让你快速上手,否则让我这种不勤快的人很难堪
  • 一些老油条,察觉到你对他们有威胁,诸多阻挠给小鞋穿
    • 我大学毕业第一份工作,因为我大学的时候就有工作经验,毕业后快速成长,部门经理隔三差五把我写的代码删除掉
    • 另外一家公司,我做出来的东西,在生产服务器跑,一个人先后多次把生成的数据删除掉,等我发现之后,就说:“你重新跑一下不就行了吗?”

如果你遇到这样的问题,你会怎么办?

 

大家一般的做法是:

  • 尝试反馈,如果对方不改变,就找人力资源或更高的管理层
  • 如果还没改善,走人

其实,人的性格无法改变的,即便他们表面上和你客气了,实际中还是会耍各种阴招。

英文说:If you can’t change others, change yourself。其实就是说,走人是上策。

不过,既然选择要走人,那没什么好害怕的了,把所有证据收集起来,走之前群发。

 

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

开发思想 – 做软件开发和转行

George Bernard Shaw(萧伯纳)在《Man and Superman》(人与超人)中的Maxims for Revolutionists《致革命者的箴言》写道:“He who can does; he who cannot, teaches.” (有能者则为,无能者则教)。

大家不要误解作者的愿意,这个名言表面上看起来是说有能力的人才能做事情,没有能力的人就只能转行去做老师了,看着是在讽刺教师这个职业。但实际上,没有明确的考证这就是作者想表达的意思。

我引用这个名言,只是想引出今天要讲的话题:作为开发人员,如果对这个职业失去了兴趣,接下来会做什么?

我之前写过长篇博文,关于《大龄码农何去何从》,我还说过,一些大学刚毕业的开发人员,去到第一个公司,被严重打击了,失去了信心。又有一些工作几年的开发人员,在一家公司呆久了,有了”开发不过如此,真实糟糕“的幻觉,也失去了动力。

我在多年打靶的过程中,见过上百个猎头/中介,碰到过几个从开发一线退下来的码农,现在转行做了”有技术背景的猎头“,这种猎头起码比剩下的95%以上的猎头靠谱,毕竟他们懂开发,知道怎么考察应聘者的技术水平。

今天,一个码农朋友跟我说,他最近在面试,昨天碰上一个懂技术的猎头,搜索了一下领英LinkedIn,之前是做高级前端开发人员。我这朋友现在主要做.NET桌面开发,最近恶补前端尤其React,用它做了个个人网站,然后希望找份前端的工作。

我跟他说:“你这样是抛弃了过去几年积累的.NET/后台经验优势,你起码应该找份全栈的,保留后台优势的前提下,可以学习实战前端”。他说:“这个猎头告诉我纯前端收入更高。”

不过他后来又告诉我:”其实我最近研究React等前端,过度透支了我的兴趣,我现在看着前端就想吐了。我想我是做后台好些,不过我还是想学/做些不一样的东西。”

在某公司,一个码农离职,说:“这公司只能学到C#,世界那么大,我应该去学学别的语言。” 其实这公司使用很多的其它技术,Windows/Linux,桌面/Web/嵌入式,软件/硬件,.NET/Java,不一而足。其实很多时候,要么你没有去追求,要么你因为局限于某个项目/小组的所需要的技术。

想知道为什么我这么多年来能掌握那么多种技术,不仅仅是广度,还有深度,达到我所说的“爆栈”吗?

 

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。