一岁的程序猿

  我记得我是15年9月21号正式参与工作的,虽然只是作为一个实习生,但总算完成了从学校到社会的一次跨越。然而距离那一次跨越,再过10天居然要满一年了。翻回以前的朋友圈,隐隐约约可以还能找到第一次参加工作的清涩感,焦虑感,菜鸟味。一年能改变的事情真多,认真地想了这一年经历的事,就作为一程序员而言,少少提了几个觉得重要的点,写在简书上。

1.学习的代码与工作的代码

  我第一份实习只干了一周,写的是C++。当时求职非常不顺利,C++让我觉得十分沮丧。幸运的是,很快接到另外一个实习offer,语言用的是Java,我那时候几乎不怎么写Java,但考虑到行业Java的使用率很高并且后面的公司给我提供的实习工资达到“惊人的”1200人民币(在此前的面试中,我甚至求过面试官给机会,不要工资),于是我就跳槽了。在第二家公司一呆就是5个月,所以严格而言,那才是我第一家公司。
  此前,我一直都是在宿舍编一下算法,写写二叉树的实现、图的遍历、各种排序和查找,看TCP/IP的协议,几乎没写软件,一切都很学术,很知识。而因为没写过真实的项目,上班前,我还经常在想公司能让我写什么代码,会有哪些代码我会看不懂的吗?(自己对Java教科书的语法很熟悉)
  我现在还非常清楚地记得第一次见到公司代码的情形,绝对是目瞪口呆。我把项目导下来后,居然足足几百M(也包含了不少jar包和前端资源),点开每一个package都有几十个Java文件,随便打开一个都会有好几百行代码。那种感觉,就像在河边住大半辈子的人第一次看到大海的样子,明明都是水,就是被吓得不知所粗——明明知道是Java代码,就是不知从何看起。那一瞬间,我彻底明白了,为什么语言只是工具,因为工具造出来的东西是可以如此宏大,宏大到你不知所措的地步。
  进入公司的前一个月都是在适应公司的代码和堆码规则(吐槽一句,公司代码的命名规则无比糟糕,是逼走我重要原因)。工作后的代码显得非常踏实,一点都不允许花哨,我有时候会发现一种新颖的实现方式,需要多建几个类,结果是找不到合适的放这些类的package,咨询导师后,导师让我放弃新方式,原因是要保证其它同事能看懂。这事让我懊恼许久,但后面慢慢考虑起来,也不无道理。学习的代码和工作的代码就有着最本质的区别:一个是给自己看的,一个是需要大家一起看的。公司写的是政府OA系统,连具体编程都得加了非常多的规矩,我本来认为:大概上班了就这样了,按部就班即可。后来我还是逮到了一次机会,通过运用二叉树结构和数据库的范式设计成功地改良了系统某个模块的性能,这次表现让我获得了提前转正的机会。
  All in all,公司的代码总是带有一些编程约束的,但无可否认的是这些规矩一定程度上是避免了很多无谓的错误,但是在面对具体问题的节点上,学术性的知识和代码往往能让我们“灵机一动”,写出精妙的代码,瞬间提高代码的性能和程序可读性,在学校里坚持基础学习就能在工作上给自己,甚至是公司带来惊喜!这也是为什么下班后最好能坚持学习基础的原因。

2.编程是一门科学,还是一门艺术?

  这是一个我大学前就反复问过自己很多遍的问题,编程是理科吗?需要数学吗?现在编程一年了,我认为,只要不去设计太高深的算法,编程研究的问题深到某个程度时就需要用到数学了,然而那些都是研究生或博士要考虑的问题。对于普通地编程,我们的数学已经完全足够用了(数学是一种推力,而不是门槛)。我不认为编程是一门科学,而是一门艺术。
  证据就在大家的口中,因为我们从来都是设计软件,而不会研究软件(设计物理同样听起来非常别扭)。编程就是一门设计的艺术。关于这个观点,Paul Garaham写的《黑客与画家》就非常详细地阐述过。我非常幸运在我真正开始编程前,自己先进入了宣传部,我从我的部长华阳师兄身上体会到设计的美,逐渐有了对丑陋设计零容忍的态度。两年的PS海报设计让我对设计变得异常偏执,虽然不断重做是十分煎熬的,但是逐渐发现,坚持追求美的过程也是一种享受。这种心态顺理成章地也表现在我的程序上,重构的过程就是坚持追求代码美的过程。美丽的设计和实现是一种让人非常着迷的东西,这样的代码一目了然,完美地实现需求的同时,还保持着足够扩展空间,一切都恰到好处,就像一个画家在纸上画出一个完美的圆一般,无可挑剔。编程就是一门设计的艺术。
  给同行和师弟师妹推荐一下,关于什么程序是好程序,我推荐《重构》这本书;关于如何设计好的程序,我推荐《设计模式》。

3.快速学习编程的捷径

  在大学里,我很长一段时间都自以为自己理科思维好(高中物理成绩好),所以就感觉自己的编程天赋比一般人都要好,我可以快速地学习编程。当然,事实是自己和一般的同学在所谓的天生能力上别无差异。但随着毕业工作,我们的编程能力慢慢呈现了高低之分。这促使我思考一个问题,什么样的方法才是好的学习编程方法呢?
  经过了1年工作,两次换公司的亲身体会,我发现,折腾才是学习编程最快的捷径。什么是折腾?可以理解为:明明不需要也可以,但偏要整出来,这就是折腾。我每一次换公司,就是一次折腾:第一家写政府的公司,自己本来就不会Java,活生生折腾两个月,最后能够独立开发模块;第二家公司是游戏公司,基本上每天晚上都在折腾各种bug,没试过消停。Java领域上,一家公司让我从入门到熟悉,另一家让我从熟悉到深入。每个过程都是非常难熬的,为了各种自己不明白的错误焦头烂额,但一旦解决后,就会有种豁然开朗的感觉,并且以后会自动地免疫这种问题和错误。所以,一个老成的程序员,他编程的神态总是异常平静,仿佛所有的bug都不是问题一样,你折腾好几个小时都找不到的坏代码,他能动几下键盘和鼠标就定位出来,事后平静地拍一下你的肩旁,留下一句“能重现的bug都不是bug”如此大气的话,让我等菜鸟自觉地献上膝盖,现在公司里的宇哥就是这样的一号人物。这样的程序员,并不能看到他所谓的天赋,他身上散发的都是他在代码上饱经风雨的气息。
  这也是我为什么十分喜欢现在的公司,游戏代码每一周都会更新一次,任何自己写得不好的代码,周四更新,周五就会有人投诉出异常了,快速地暴露自己的问题代码会让自己编程能力提升很快,而且还要有这么多的玩家来给自己的代码检查,作为一个菜鸟,这既是挑战也是一个非常难得的机会,越是折腾,越是进步。错误总是让人印象深刻,生活是这样,编程更是这样。

最后
  工作一周年了。不管是编程,还是为人处事,回想起去年今日,这一年的进步确实让我觉得很惊喜。去年这个时候还因为找不到实习而哭过,幸好还是坚持下来了,能从事自己喜欢的工作确实是一件很幸运的事。工作后有了收入,有了更大的自由,无论是对自己、朋友、家庭还是公司,作为一个社会独立角色的存在,慢慢开始觉得自己有了更多的责任,未来会有更多的问题和事情等着我。
  作为一个市井小人,我的目标也不过是多赚一分几毛,争取日后富成一个废人,躺在沙发上让别人服侍。偶尔想像一下,感觉又有了新的动力去面对新一天的工作。
  【全文完】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值