再过20几天,就要春节了,2014年就这样一眨眼,就过去了,时光如梭啊。
这一年到底收获了什么呢,还是回想一下,做个简单总结吧。我最害怕自己一年下来,没什么进步,没有进步就是浪费人生。
我现在后悔以前没做总结,现在已记不起来,以致感觉以前不够努力,而心怀愧疚。从现在起,我每年要做总结,留下足迹,希望以后回头看时,心中有一丝安慰,不至于太过悔恨自己“少壮不努力”。
我是做技术的,谈进步,也只能是谈看了什么书,学到了什么知识,当然也包括非技术方面的。
(其实以前,也就是13年,12年也有看书学知识,只是不记得的了,现在后悔当时没记录下来。)
回想一整年的事,有得也有失,也难免会有所疏漏和不准确之处。
我记得14年春节回来第一件事,是换工作,很多.NET的职位要求ASP,而我之前没做过WEB,只能边找工作边看书,也就是14年第一本书,《ASP.NET4入门经典》,当时是为了临阵磨枪,现在已记不清楚,但我记得书中的内容很适合初学者,翻译得也很好,我突击的也很快...当然,看得快,忘得也快。:-)
3月份我找到了新工作,是一家做大数据的公司,刚入职自然要好好表现,把所有时间精力都用在工作上,也就没学其他新技术,两个月后,公司统一加班,晚上加,周六加,忙得不可开交,一加就是三个半月,差不多到了9月份了,我自己认为这段时间我有不小的损失,损失有三:一是因为太忙,我很少抽出时间学习相关或其他的新技术,二是公司采用了闭源第三方组件,妨碍了我既有技术的进一步加深和提高。三是由于工作繁忙和心情郁闷,致旧病复发,手术治疗,花费万元。 有损失也有收获,我还是看了一些书的。
我列举一下我今年看的书,并附简短评论。(也有一些是加班期间看的,评论仅代表个人观点)
《Microsoft.NET企业级应用架构设计》
这是本介绍架构设计的相当好的书,被认为是《企业应用架构模式》的.NET版本,看这本书的背景是大家有改进软件设计结构的想法,我希望自己能贡献一个合适的方案。虽然我没完全看完,但我仍然学到了很多,(没看完也跟软件规模偏小不足以应用书上的所有知识有关),书上讨论了常见的一些分层,翻译很好,浅显易懂。我认为自己学到的最重要的一点是 模式并不是在什么情况都适用,不同场合应该使用不同的模式。不要过早地套用某个模式,没有最好的模式,只有最适合的模式,以最小成本换来最大价值才是明智之选。 推荐你阅读。
《Programming Ruby 1.9&2.0》
比我之前看的《Book of Ruby》,《Learning Ruby》更全面,更权威,包含了1.9&2.0新特性,看完这本书后,我开始动手练习,不动手练习的话,会忘掉的,我(像以前学Perl一样)尝试写一些处理日常工作的脚本,rubyinstaller自带的chm帮助文档,很全面,查阅很方便,Ruby就像传说的那样,很酷,越用越开心,我推荐你也学学它,但有个不好的地方,中文资料太少,你可能要忍受英文了,还好前阵子出了两本讲Ruby语言的中文书,奇怪的是网上供不应求,处于无货状态,而书店里却摞着一大堆无人问津。你若有兴趣,可以找我,我们共同学习。
《程序员的呐喊》
这本书是谷歌的一个程序员写的,它的标题偏人文,但它的内容很偏技术,他说了很多有关编程语言的分类与方法学,很有哲学范儿,也论述了几门主流编程语言的特点和优缺点,(但不包括C#,着实让我这个C#程序员汗颜了一把)他对重构和设计模式的见解很独到。让我感触颇深的有:1,“名词王国”其实是一种毫无必要的简单问题复杂化. 2.Lisp思维很优秀很重要.(等以后我有时间时再体会) 3.数学很重要,但要有正确的学习方式.(我被学校老师坑了) 4.编译原理和 算法与数据结构 同等重要,却被忽视。看完后,我立刻去淘宝买了复印版的算法和编译原理,因为复印版的便宜,即使没看也不致太亏,结果是我一直没看。:-) 另外,喜欢吐槽的你千万不要错过,书里有很多很多的吐槽,且都很犀利,绝对能让你过把槽瘾。强烈推荐给(没有偏见的)程序员阅读。
这本书还让我想起以前看过的一本书,叫《程序员,你伤不起》,是国人写的,书的内容很好,只是名字起得不咋滴。内容很少有技术,大多都是人文处事方面的,还有些是真实事件的感悟,内容符合国情,也富含正能量。强烈建议程序员和项目经理阅读,建议看慢点,边看边想,效果更佳。五星级推荐。
《TCP Sockets编程》
这本书很薄,是基于Ruby语言介绍Socket编程的,看这本书是因为我想用脚本写个轻量的服务端,它功能简单,只在内存中处理数据,可运行在每个开发人员的本机上,之所以会有这个想法,一个原因是有段时间不知是服务端故障还是网络故障,客户端经常连接不上,耽误客户端的开发进程,另一个原因是想搞个客户端的自动化测试,若要覆盖通信的测试,最好有一个可定制的服务端......理想很美好,现实很残酷,通信不灵。 我猜原因应该是Ruby在Windows上“水土不服”,*nix上起家的工具在Windows上有故障 很正常。可是,看书花的时间谁还给我?:-(
《理解Unix进程》
这本书也很薄,也是基于Ruby语言介绍,和《TCP Sockets编程》是同一个作者写的,因为在介绍Socket并发的时候,有种方式是多进程,作者在旁注上说若想深入理解,请参考我的另一本书《理解Unix进程》,于是我很乖地去看了,本书介绍了Unix进程相关的基础知识,很适合入门,翻译也很好,但如果你从事的工作和*nix无关,请不要看,看了也是白看,很快就忘干净,就像我一样。:-(
《程序员的数学》
我天生数学就不好,好在作者比较“啰嗦”,还附了很多图,虽然大部分我都懂,但有些地方我硬是转不过弯儿来。总体来说书的内容,并不像你想象的那样深奥,大部分还是比较简单的,你甚至早已遇见且处理过了,只是,他所采用的视角和思路很值得学习。此书对我这种数学菜鸟有用,对聪明的你不一定有用,我不推荐你看。在看这本书时,我产生了多次跟在看《程序员的呐喊》时一样的冲动,那就是 想把当年那些教我中学数学的老师们统统踹死。
《图解TCP/IP》
这本书和《图解HTTP》《图解网络硬件》是姊妹书,都是日本人写的,其实上文的《程序员的数学》也是,日本人写的书里面有很多插图,而且很Q,我是标准宅男,酷爱看动漫,所以这一类书对我很有吸引力,看这类书就像看漫画书一样,有趣还能学知识。看这本书的背景是在公司我负责Socket通信这一块,我希望这本书能弥补一些疏漏或带来一些启发,同时我也有打算学习一下网络与Web开发的想法。书的优点是插图多,简洁清晰,对想复习一下忘干净的网络知识很有用处。(我看了前半本,后半本还没抽出时间)
《WEB开发敏捷之道 应用Rails进行敏捷开发 第4版》
《Agile Web Development With Rails 4》
初学Rails,自然是选最新的Rails4,而4没有对应的中文版,现有的中文版第4版讲的是Rails3,由于3和4差异不大,所以我中英文对照着看,先看中文,再看英文。中文版前半本是实践,翻译得很好,后半本是理论,翻译得烂透了,尤其是路由那一章,我恨不得把小学语文课本砸到他脸上(人家还是博士呢),让他重新学小学语文。我搭建Linux环境,照着书上动手实践,那感觉真得很爽,Rails很奇妙,很智能,DSL很自然,效率超高,根传说中一样。第一遍实践,我有点害怕,因为不知道为什么,直到过了一段时间,看第二遍, 做第二次实践,才开始摸出其门道,有了豁然开朗的感觉,我还更新了Rails环境搭建的blog.很有满足感。
《Linux入门很简单》
这本书非常适合linux初学者,作者语言诙谐,创新使用拟人手法,即使是毫不了解的人,看了后都能理解,还会露出会心的微笑。它的内容非常实用,讲解很有趣,不像传统的linux书那样到处是无聊的命令行和参数且很多都是不常用的命令。我一直都难忘作者拿子进程父进程打比喻的那段,笑得我都流泪直流,如果你不了解linux,我很推荐你读一读,已经了解的人就不必了,虽然我之前有了解过,但还是学到了一些最基本的概念和基本的工具,这本书给了我开始使用linux的信心,(其实老早以前我就安装过,但那只是好奇尝鲜而已)这次是真的使用,配合以前看过的《鸟哥的linux私房菜》来解决常见的问题。Ubuntu现已是我在家里的默认系统,Windows是备选系统,只有非Windows不可时才会用它。我使用linux的直接驱动力来自Rails, 因为Rails不适合在Windows上开发(其实很多开源的技术都是linux更合适),也算是逼上梁山,但我不畏惧, 因为我早就开始做铺垫了,在公司Windows上优先使用开源,跨平台软件,如OpenOffice,Firefox,Thunderbird,VirtualBox,还有一些开发会用到的 Umlet,Pencil,Freemind,Dia等,这都是为了以后转到linux或mac os时,不至于“硬着陆”而“休克”。如果你也可能被逼上梁山或弃暗投明,那你也可以从现在开始优先选择跨平台软件。(这篇总结是在ubuntu上用libreOffice Writer编辑的)
《Linux口袋书》
这本书很小很薄很轻,里面全是常用的linux命令行及参数,很适合带在身上,在公交上或排队时翻看。看完后,感觉蛮基本的,没发现有多么“厉害”的东东。你要看可随时找我借。
《PHP和MySQL Web开发》
本来想通过Rails切入Web开发领域的,可是天有不测风云,受人之托,身不由已,被迫中途急转弯,钻进PHP。我发现PHP就像个大杂烩,它的基本语法照搬的Perl,它的文件读写照搬的C,它的面向对象照搬的Java, 感觉API也有照搬嫌疑,因数它的API有点乱,风格不一致。但它做事的思想很直率,用什么拿什么,不怎么讲究模式,这一点倒蛮自由的,phpMyAdmin操作MySql很方便,帮了我大忙,它有丰富的社区资源,只靠百度就能很容易解决,尤其它中文的在线文档,必须点赞。书我只看了前半本,因为对于任务内容来说,已经足够。受益于它广泛的网络资源,我没有付出多大代价,就完成了任务。(其实也跟任务内容有关,只是实现后端web service,不涉及前端UI展现) 哦,差点忘了,其实我还买了本国人写的《细说PHP》,它的书皮上写着LAMP,结果里面用的是Windows, 写书的模式有点像谭浩强,所以没怎么细看,当字典用倒蛮合适,它里面有很多现成的可用的代码段,图像处理那段就是我直接在这本书里抄的。
《HTML5权威指南》
之前无论是Rails还是PHP,都主要讲后端程序,涉及前端很少,HTML和CSS几年前倒是学过,但没实践过,年初突击ASP时眼熟了一下,朦胧地记得些基本结构,感觉还是让美工搞比较靠谱,搞程序的容易事倍功半。但最近HTML5炒得很热,再加上公司最近有接web项目的征兆,于是我就未雨绸缪了,这本书很厚,很全面,每个标签在不同HTML版本中的不同意思都介绍了,是一本综合大词典,适合查阅,里面也包含了CSS3,还有JS,但JS不够,还得看更详细的书。 这次我又黑熊掰玉米了,看得快忘得快。:-) 更操蛋的是,我刚看完没几天,HTML5标准就正式宣布定稿了。:-(
《图解HTTP》
了解HTTP协议对Web开发是有帮助的,虽不会带来直接的帮助,但了解它能让人更加“不惑“,步子走得更踏实。书的内容很简单,点到为止,而且只讲常用的,不常用的一笔带过,本来发什么信息代表什么意思的枯燥内容,被书中的可爱的拟人插图代替了,阅读起来不会觉得乏味。 看了半本,借给QA了。
《Rails 101》
这是本很薄,只有100多页,是台湾人写的,写的很不错,重点知识都包括了,只不过他的示例代码包含与mac电脑相关的东西,必须在mac电脑上实践,我也知道Rails程序员大多都用mac,但我是个穷屌丝,不舍得买。作者在前言上非常诚恳地劝说读者有必要买台mac, 从作者解释理由的那番话,我能断定作者一定是个好人,而且是个智者。我发誓如果有一天我从事了Rails开发工作,我一定会去买一台,但在从事相关工作之前就出手,我觉得这有点任性,也许我可以在虚拟机中试试。 目前我只是看了一遍,还没实践,等有条件了,我一定要回来实践一下。(虽然我有实践其他书上的示例,但不同的书学到的知识是不同的,多实践一定是有好处的)
《Rails Tutorial 第二版》
这本书最明显的地方是 TDD,测试驱动开发,全书都是TDD模式的,且使用的是RSpec,又加入了capybara和FactoryGirl,语法酷到没朋友,前端集成了bootstrap, 界面瞬间高大上,《Agile Web Development With Rails 4》和本书差异很大,前者比较保守,后者比较奔放,这两本都是介绍Rails的好书,你要学的话最好两本都看,RT我只实践了一遍,还差一遍。温故能知新,等有时间了我定会再来实践第二遍。
这里我要提一个Rails开源项目Redmine,公司采用了这个系统,但这个系统有瑕疵,我出于一方面巩固既有知识,提高自己水平,一方面方便大家使用,请缨维护Redmine,但后来发现它实现方法很老旧,大概是Rails3甚至Rails2时代的用法了,跟我看的书(Rails4)有很大差异,且还有不少地方设计得明显不合理。同时我看了一篇文章,大意是WordPress虽然是著名开源系统,但不适合初学者阅读学习,因为它的实现很老旧,经历了多年的修修补补,已经积累了很多应该重构的地方,而大多数人更在意稳定可靠,少有人在意代码写得好不好,且重构一个庞大沉重的系统,不是件容易的事,开发者没必要也不愿意冒险去干出力不讨好的事情。结论是即使是著名开源系统,它的代码也有可能很烂,也就是说阅读开源代码,不一定能提高你的水平。这篇文章一语惊醒梦中我,然后我就没再管过Redmine了.(为了它,我还特意买过一本国人写的 使用旧用法 的Rails3的书,内容质量很差,连垫桌子腿 或 糊墙都不配)
《Objective-C 基础教程 第二版》
学OC也是身不由已,个中原因,一言难尽。还是先说语言和书吧,我发现不同的语言有明显的不同的设计哲学,而介绍这门语言的书往往把这种哲学流露得淋漓尽致。Perl书流露出来的是懒,懒,懒;Ruby书流露出来的是酷,酷,酷;PHP流露出来的是借,借,借;而OC流露出来的是内存,内存,内存,全书上下都在提内存管理和性能,尤其是引用计数这个词,让我仿佛一下子回到了8年前学C++智能指针那会儿,心里开始悬挂起一块大石,不愧是上世纪80年代的语言,果然够低级。也难怪苹果设备上的应用占用内存少,还运行流畅,因为OC开发人员时时刻刻都在考虑内存和性能,它是强制性的。OC的低级语法一定会让初学者很难适应,幸亏我有金钟罩(C),铁布衫(Ruby),因为OC本质上是C,在C基础上添加了对象特征,C我很熟悉,(在12年转C#之前,一直都用C) OC添加的对象机制是消息式的,这跟Ruby是相同的,(准确的说,OC和Ruby都是从Smalltalk那里借鉴的消息式机制). 总体看来OC还是具备大部分“现代”语言的机制的,只是用法让用惯“现代”语言的人觉得违和,别扭,需要适应一段时间,这本书确实跟京东评论的差不多,就是浅显,每个知识点只是略微一提,入门可以,深入的话,还得再找进阶书看,幸好有一本专门讲OC内存管理和多线程的,能弥补本书应该细讲而没有细讲的不足。我虽然看完了,但还没实践,mac电脑还没舍得买,打算先用虚拟机,关掉动画特效,虚拟机还算凑合能用。
其实13年选择学Ruby时,也是考虑到Ruby在mac上地位很高,而MacRuby是苹果内部开发出来的用Ruby语言开发原生二进制mac应用的高效工具。谁知新任的库克那个SB又搞出个Swift,既生瑜何生亮,可惜乔老爷又不能爬出来捶他...... 最后我只能选最靠谱的OC了,因为OC陪伴苹果风雨20多年,其稳定性和知识积淀毋庸置疑,岂是乳臭未干的swift可以比肩,也许三五年后情况会改变,但现在还不行。
JS和AI只学了一点点,还不够忘的呢,只能忽略不计。
R 曾经学了两三个章节,放弃了,并不是因为它语法脑残,而是因为我自己先天数学不好,对这种数学密集型的东西只会事倍功半,还是尽早放弃的好。
差不多就这些,(感觉和13年相比,少了)春节期间,我打算看本Cocoa的书。
如果这篇短文能让你产生想给自己充充电的想法,那我真是太荣幸了。不管你学什么,麻烦你给我说声,让我拜你为师,以后劳烦你能指点我一二,不胜感激。
最后我得感谢一个人,婶子(Junx他妈),她在这里帮我们买菜,做饭,刷碗,打扫房间,还帮我收晒衣服, 如果没有她,而是我自己做这些,一定会花掉很多时间,我会少看很多书,因为她,我没有少看这些书,真的很感谢她。