闯过这 54 关,点亮你的 Git 技能树

闯过这 54 关,点亮你的 Git 技能树,第1张

开篇

如今,Git 大行其道,颇有一统天下之势。如果你的技能树上 Git 和 Github 的图标还没有点亮的话,你都不好意思说你是程序员。别说互联网企业,我接触到的许多传统企业都在从 SVN,Clear Case 等迁移到 Git 上,甚至大厂还会有一个团队去定制适合自己企业的 Git 服务器。

很多人简历上写的「精通 Git 与 Github」,但如果你问他熟悉到什么程度的话,回答通常是「就是会用常用的add

,commit

,push

*** 作」。

但工作中我们会遇到一些更加复杂的场景:

作为一线程序员,我们要如何快速学习 Git 以发挥其最大威力呢?

今天我就要向大家介绍一个工具,准确说应该是「游戏」,名字叫 「githug」 ,它把平常可能遇到的一些场景都实例化,变成一个一个的关卡,一共有 55 个关卡:

安装

首先我们需要来安装这个游戏,githug

是用 Ruby 编写的,可通过如下命令安装:gem install githug

如果遇到权限问题,请加上sudo

:sudo gem install githug

安装成功后,在 Terminal 里进入你常用的目录,输入githug

,会提示游戏目录不存在,是否要创建一个,输入y

基本命令

在开始前我们还需要了解游戏的一些基本 *** 作:

play - 默认命令,检查是否过关

hint - 显示过关提示

reset - 重启本关,或者重启到指定的某关

levels - 显示关卡列表

来试一下,githug reset

下面是程序员所应该具备的基本职业技能:

基本技能 技能描述

阅读代码 这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。

编写程序 编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。

软件设计 这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。

熟悉软件工程 每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析 设计,编码测试,Release和维护这几个阶段。当然,几乎所有的人都知道这些东西,但并不是每个人都很清楚这些东西。现在很多高级程序员都会混淆“需求规格说明书FS”和“概要设计HLD”。另外,程序员还需要知道一些软件开发的方法论,比如:敏捷开发或瀑布模型。

使用程序库或框架 一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,都需要学会做。比如:C++中,需要学会使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用这些东西,可以让你的工作事半功倍。

程序调试 程序调试是分析BUG和解决问题最直接的能力。没有人能够保证程序写出来不用调试就可以运行正常 也没有人可以保证程序永远不会出BUG。所以,熟练使用调试器是一个程序员需要具备的基本技能

使用IDE 学会使用IDE工具也会让你的工作事半功倍。比如,VC++,Emacs Eclipse等等,并要知道这些IDE的长处和短处。

使用版本控制 一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利用版本控制工具维护不同版本的软件。这是程序员需要明的的软件配置管理中最重要的一块。

单元测试 单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。

重构代码 每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》 每个程序员都应该读一下

自动化编译 程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样整个开发团队可以不停地集成代码 自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。

当然,还有很多的基本技术也是非常重要的,比如,与人的沟通能力,语言的表达能力,写作能力,团队协作能力,适应变化的能力,时间管理能力,多任务处理能力,自我学习能力,故障处理能力,等等,等等,这里只是列举了和技术相关的能力,这些是程序最最最基本的能力,只要是程序员就必需要有的能力。

介绍下我的想法:

大学里学的是计算机专业,所以顺道学了不少计算机系的基础课程,总体来讲学得很不好,直到大四毕业,我才勉强下定决心要以写代码为生(现在想想,可能是当时实在想不出其他出路)。大学4年,很遗憾的事情就是我没有弄清楚该去真正学些什么东西。

毕业后第一份工作,在一家小公司写servlet/jsp,说实话,我写的很烂,当时带我的人对我的工作很不满意,直到有一次,项目经理跟我谈说,你的工作表现你也看到了,差点就被开掉了,不过我觉得还是要在给你机会。。。当时,我真的是自信心崩溃到极致,觉得自己这段时间其实很努力,但为什么还不入门路。。这次经历给了我非常大的影响,之后的不久,我终于明白了怎么去写那些servlet/jsp,于是我努力的写那些代码,不久,我就成了公司新员工里面,做东西最快的人。当时还发了个公司的什么最快进步奖给我。我想第一份工作给我最大的感受是,想要做为一个程序员,你得先明白,程序是个什么东西。

一年多以后,servlet/Jsp实在不想写了,于是换到另外一家公司,做聊天软件的J2ME客户端。其实我当时不懂J2ME,在刚入职的一个月里,啃完CLDC和一些会用到的JSR的英文文档,然后每天去看项目的代码,有任何问题就去问周边的同事。不久,我也慢慢能写一些J2ME的代码了。接着,我加入了新版客户端的项目组,开始做一些UI组建。最开始,我写一个Text组件,就是把文字显示到屏幕上,还要根据屏幕可显示区域的宽度、高度对文字做调整。没几天,我就信心满满的写完了这些代码,原来写客户端代码也不难啊。不过不久,当同事要用我的组件时,问题百出,以至于同事跟经理抱怨说,这么基础的组件应该给有经验的人去写啊。。 这次,虽然我的工作做的很烂,可自信心倒没受多少打击,因为已经工作一年多了嘛,脸皮厚了不少。但是我心里知道,我的工作肯定哪里出了问题,否则我的组件应该能经受住使用者的考验的啊。这份工作中,我学到了不少东西,首先呢,脸皮要厚一点,不会就追着去问,其次,没有想清楚的话,写出来的东西经不住考验的。再次,英文资料好像更准确啊。当然还有一些具体的编程技术。

大概又过了一年多,大家都说J2ME快完蛋了,android已经开始大兴其道,公司里面也有人在做android客户端,可我还在写没有前途的J2ME.恰好,qq群里有人发消息说招人,我脑子一热,扔了份简历过去。于是,一个多月后,我就到了新的公司上班,这家公司是一个做手机的厂商,而我也可以参与android的开发。在这个公司的前3个月,基本啥活没干,除了学习android之外,就是各种培训和等待。大概待到5个月的时候,我实在坐不住了,我去跟经理说,有没有活可以给我干。经理说我考虑下,不久便安排给我一个项目,让我去把它维护好了,然后集成到产品里面。可当我拿到代码时,傻眼了,2w多行代码,而且很多地方写的很复杂,看了好几天也没看懂。好吧,不管了,这件事既然是我负责,那怎么都应该挺住。在接下来的快2个月里,我每天都扑在这两万多行代码里,解决里面的bug,理解里面的设计思路、代码风格、编程技巧,使用公司的工具链,从发布、审核到持续集成等等。我了解到了很多我平时不知道的东西,我解决了发现了的所有的bug。可是最终,我并没有把这个项目维护到可以发布的程度,最后一关的AT&T的稳定性测试宣判了我的这个项目的死刑,随后这两万多行代码慢慢的从我的提交列表里面消失掉了。我第一次明白了,竟然还有如此严格的质量测试,也明白了什么叫风险与代价,虽然这些代码,我已经用monkey模拟跑过了5个钟头,但是依然被ATT测试蹂躏2个钟头之后挂掉。我也明白了,要预防风险,你就必须提前考虑到,否则,等到那个不好的事情发生,你已经没有机会了,你的努力会白费。

在这家公司我还做了另外一个项目,做的很辛苦,甚至于项目后期了,我们还加班加点把整个项目的结构重写了一遍。这个项目被人重视,甚至被当作新产品的一个卖点写到宣传海报里面去。可我们真的搞出很多事情,有一次,软件部门的头头报给我们几个软件崩溃的bug,于是这些小头头们着急了,整天拉着我们解决各种各样的问题,整天压着我们要把bug list里面的问题尽快搞定。幸好,我们最终都搞定了。软件成功发布,虽然它不如预期的那么完美,但是至少,在新产品里有它的身影,而我自己每天也在用。。这个项目最大的感受是,决定必须有实践结果的支持,我们刚开始的方案,因为最终不能满足性能要求,不得已,在项目后期加班加点换实现方案。而且,我也第一次感受到一个好上司,真的很重要。因为最后公司部门重组,我们几个给某些领导带来麻烦的人,好像不是很受欢迎啊。我想,如果一个只为自己考虑的管理者,应该是这样的吧。

年初,我觉定去一家小公司发展(也看了一些关于大小公司工作之间的争论文章 http://www.dbanotes.net/jobs/howto_choose_company_style.html 和 http://robbin.iteye.com/blog/730223 等等)。于是通过猎头介绍,到了现在这一家。这几天,我带领的团队终于完成了一个移动互联网的项目,老板拿着最近的版本去给他的朋友看去了,可我自己在想,还不完善啊,我们需要在努力下,好让老板(主抓市场)去卖我们的产品的时候更有面子一点。。这段时间里,我学到最重要的东西是,老板也不容易,有时候得替老板想想;执行力很重要;在小团队里,你自己的技术视野和细节都很重要,因为出了问题,肯能需要你去解决;学会激励别人;除了学会快速学习之外,还要能帮助团队成员快速学习;不要逃避问题,因为你就要是那个问题解决者(任何问题,不管技术和其它)。。等等

昨天跟第一家公司带我的朋友聊起,他说,你现在太拘泥于细节,你现在要从代码的层面出来,站在更全面的角度去把握整个团队的工作,建立框架,建立模式,这样你的团队才能高效执行。。。。 总之,他说的话我也不是太理解,也许需要时间。不过我想,自己一个人走的太累的时候,可以找找周边的朋友帮你分析和指导下,因为可能,在一年多以前,我也在看stackoverflow上那篇,技术人员应该读什么书,是的,那些书我会去读,可我现在更重要的是要解决工作中所碰到的问题。

也许我的废话太多,也没有上面毛小毛贴出来文章那么深刻。而我也只是一个非常普通的程序员,我得先学会蹲马步才能去学铁布衫啊。也许,我想说是,具体要学什么我不知道,没有定论,但是得从环境中分析出,需要学什么,也许刚开始分析的不对,走了错路,分析对了,没执行对,也走了弯路,可那有什么办法呢,成长的代价,不是理所当然的吗。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11428363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存