昨天一朋友在微信上问了我一个问题,我觉得很有趣,于是将本次聊天的内容分享给大家。
我朋友说,如果一个程序员不会使用 git,会不会被别人觉得低一个档次?
事先声明啊,这与公司技术栈无关,不要说有些公司只用 git 管理。对于公司而言,使用什么版本控制有一定的考虑或者历史原因。但如果你遇到一个不会 git 的新同事,会不会感觉 ta 以前的公司有点low ?
我当时就回复了他四个大字:同行相轻。
「 会git有那么重要吗 」
不得不说,近年来,使用git的公司越来越多,甚至已经成为了主流。当你去一家使用git的公司时,掌握它就成为了硬性指标。如果你在公司遇到一个不会git的新同事,也不要大惊小怪,可能人家之前呆的单位用svn。
个人感觉讨论这些有点 low,说白了一个工具而已,编程能力才是最重要的吧!
git 重不重要,挺重要,但不是企业主要的考核标准。企业用到,不会就学。企业用不到,我干嘛要学,学不学都无所谓。
说真的,我之前也和这哥们有同样的想法,直到有一天下班前在工作群里看到通知:“某同学 recursive sed 代码出错,无视 conflict 强行 push 导致集群瘫痪,现已关闭所有人该 repo 权限,工作未提交的同学晚上加下班等通知,恢复时间未知”。
因为自己的技术不精且不认真学习的,而给其它协作者带来困扰,这种人才是被鄙视的对象。
所以,我认为,会不会其实没什么大问题,只要虚心承认自己的实际水平就好,比较烦这几种情况:
1. 履历上说自己精通 git,实际上连 merge 和 rebase 的区别都不清楚。
2. 工作中在用 git,但只满足于 pull push commit merge 的基本用法,不求甚解。
3. 无视团队 git 操作规定,肆意使用危险操作指令。
所以,成熟公司都有 CodeReview 的制度,不会用 git 也不可能把主分支搞坏的,让他们自己分支上玩玩就会了。
「 会git了不起是吗 」
Sorry,会git就是了不起。学会 git 确实好处多多,比如绝大多数的开源社区都是使用 git 作为版本控制工具,学会 git 有助于参与到开源社区中,算是提升自我技术能力的渠道之一。
普通程序员学会常用的 clone commit pull push merge checkout branch 就可以了。sourcetree 基本满足日常,stash 非常适合临时存一下,cherry-pick rebase 也能提高工作效率。
其实严格说来,Git 既可以指 Git 命令行,也可以指 Git Repository 的格式,或者 Git 所推崇的基于分支、合并、变基、Git Flow 等的项目管理方法(操作 Git Repository,使用 Git 命令行并不是必须的,完全可以自己编写程序实现)。
有些人说会 Git,是会生成一个 Repo 然后推来拉去。
有些人说会 Git,是会一些命令的用法。
有些人说会 Git,是会把 Branching Merging 等技巧运用到项目管理当中去。
这些「会 Git 」是完全不同的。
所以我如果鄙视一个人,一定不是他单纯技术低。
「 你真的会git吗 」
如果所谓的 [ 会 git ] 等同于 [ 网上随便一查十几分钟就能学会的 clone add commit pull push 命令的 ] 的话:
这我觉得没什么好鄙视的,很简单的东西,就像你不能因为一个人只使用 Terminal 而不使用 iTerm2 你就鄙视他一样,也许你在 iTerm2 上还没别人用 Terminal 用的6。(就像你不能因为一个人只使用 eclipse 而不使用 idea 你就鄙视他一样,也许你在 idea 上还没别人用 eclipse 用的6。)
如果所谓的 [ 会 git ] 等同于 [ 基本掌握 git 的所有用法里面的大部分用法 ] 的话:
我觉得所有 git 用户里面只有很少一部分掌握了 git 的大部分用法,平时我们工作主要就是 clone add commit pull push,再多一些什么 checkout,log,branch 等等这些较低频次的用法,但这些功能也只不过占了 git 所有功能的一小部分而已。
这算不算“不会 git ”呢。如果鄙视这种“不会 git ”的人的话,我觉得 前端群 里面 90%以上的人都怕是要被你鄙视了。
现在很多人有一种很不好的心态,不专心搞技术,各种所谓的高大上的东西都简单学一下,然后鄙视那些不会这些东西的。比如一些技术群里经常能看到一些用一个东西就优越感爆棚的话语,“这个网站封的好,我有 ss 随便封”(ss 鄙视,挺搞笑的是吧),“这个问题你不会谷歌吗,都 2018 年了,你说你不会上谷歌,Are u(注意:这里一定要用 u 才能鄙视用 you 的) kidding me ?”(谷歌鄙视,用一个搜索引擎也值得鄙视?)
还有比如我现在这篇文章没有用 markdown 语法,可能也要被鄙视了,然后我前面的 Markdown 的 M 没有大写,也要被鄙视了。
我说说我自己关于鄙视的看法,如果你要真的鄙视别人,你至少得跟别人拉开几个档次吧,比如是你在 ECMAScript的造诣已经达到登峰造极能与 javascript之父谈笑风生的地步,OK 你可以鄙视那些连原型链都不知道是什么东西的人,但是你如果只不过刚学 javascript两三年,就去鄙视那些刚入门的连原型链都不知道是什么东西的菜鸟,那确实挺低端的了。
况且一个真正热爱技术的人,真的没有闲心和时间去鄙视别人不会这个不会那个。
「 鄙视链毫无意义,该停止了 」
我觉得鄙视 xxx 的态度,这类可以理解;鄙视 xxx 目前的技术掌握情况。。真正的大神不会如此吧。。毕竟技术是要有经验积累,我之前老大从初中就开始玩儿编程,现在学任何新技术上手都贼快,大多数是因为他经历的多,掌握的技术栈雄厚,已经触类旁通,很多都可以类比到传统技术栈做展开。
打个比方。
开百万豪车鄙视零头不到的几万车的买菜车,这只是一种无礼的行为。
买菜车通勤不比豪车差,碰上堵车,豪车也飞不过去,严重事故豪车也一样死翘翘。
但会开动车和会开车完全是回事,乱开远光灯,无脑加塞等把他人和自己的安全当儿戏的行为可不是会开车人的表现。
svn 和 git 就好比买菜车和豪车,基本的源码版本控制功能都能满足,只是 git 多了些酷炫的功能而已。
但会 git push 命令并不表示会 git,你难道就忘记前几天疯传的因 git push -f 而发生的惨案了吗?
因为自己的技术不精且不认真学习的,而给其它协作者带来困扰,这种人才是被鄙视的对象。
会使用 git 的表现和会 linux 一样。你从网上复制出解决你问题的命令时,你至少要知道这些命令的意思,执行它会引发什么后果,如果别人恶作剧把 git status | sudo rm -rf / 贴在网上,而你不假思索的就执行了,还傻傻的输了密码,如果不鄙视你,难不成还说,"小伙子,你真棒"。
回到 git 鄙视。。 会用 git 和 懂 git 是两个层次,可能会有半数的人不知道 merge 和 rebase 对于节点的操作区别,以及 怎样才能维持 master 在节点上的洁净,甚至。。不知道 stash、cherry-pick 这类命令。。
但说白了。。。在同一家公司的技术人员,,有那么复杂么,你不会的我会,我不会的他会,互相讨教共同进步升职加薪才是正道啊。。
程序员鄙视链到你我这停止吧!
老前辈送你一句警世良言,希望你能牢牢记住:“与人为善,福虽未至,祸已远离”。
「 写在最后 」
说到底,一项技能,是否重要,还是看市场需求,还有就是通用程度。当每个程序员都会使用git的时候,你还不会使用,那就有些说不过去了。
觉得有帮助,
就尽快转发、传播吧!