我是学工程的背景,做过行业软件,具体的产品开发了解类似机械电子土木行业软件的同胞都能理解,反正是在单机上跑,比如photoshop就是个经典例子,当然人家现在也“互联网”了。对应地,我们这些人力资源也需要Change, 原有知识基本过气。
基于自己经历,简单地写写,非科班专用,科班生见笑了。
1. 非科班生如何上路基础知识。
工科大学生其实也修过计算机的课程,不过比较浅显。在做工程软件的时候,我们的强项是领域知识。但是很多人确实地需要补补计算机方面的课程了。
先说数据结构和算法课程。很多教材光讲原理和伪代码,学习了以后会出现“眼高手低”的现象。
推荐几本代码驱动的数据结构书籍,当然它们不一定是最好的书,但是确实是“有码可依”
- 喜欢C语言的建议读 : "数据结构C语言版(台湾)-陈峰棋"这本书难度不高,但是全程教学案例是完整运行的C代码,比如 dijkstra 寻路,Toplogy 排序,通过debug可以让读者明白到底“idea”是如何变成“code”的。网上有scan下载。
- 喜欢java的推荐"data structures algorithms and applications in java bysartaj sahni " 。 此书相当于研究生教材 , 其实题材选择古旧,虽然完整覆盖了Data structure 和 algorithm, 但是对互联网时代的算法和数据结构(比如TRIE)关注不够 , 优点是源码完整,跑一遍java代码可以有助于了解经典算法原理的实现 。 二手也就一个汉堡的价格 。
- Algorithms 4th edition by robert sedgewick 这个很推荐 , 深入浅出教学的典范 。题材选择上偏重了比较新的算法,比如String的处理。
它的java代码实现有时候依赖java collection,那么请追踪到java源码探寻究竟。
这是一部可以当小说读的书,请大家不要做猥琐男女,掏钱买个纸版的吧。它早期的C++语言版本更便宜,覆盖面很全, 有码有图,写得也非常好,观点高远,偏重追根溯源,可传给子女看:)再说操作系统的书 , 我只读过一本经典 “operating system with java ". 写得非常好,比如java 的调用 wait, notify的背后到底是如何原理,如何实现。
最好有空可以看看离散数学的教材,了解基本范畴。有些东西比如GrayCode,你觉得它偏门?其实很基础。
最后务必补习Database的知识,桌面软件往往不涉及这个。
推荐Beginning Database Design Solutions2. 算法的龙门一跃包括我在内的好多人估计学完基础课程后,发现一些面试的难题还是没思路,比如何时用上recursive,何时用DP。原因是没有掌握“解决问题之道”。 其实sartajsahni 书上已经总结了基本的包括DP,DC等五大类策略。世面上当然还有更专门化的书。
先推荐"introduction to the design and analysis of algorithm" by anany levitin . 这书把基本的五大策略又进一步细化,总结得棒极了,比如最核心的combination 和permutation 如何用“minimum change”的策略实现。另外推荐大家想想为何combination和permutation是如此重要?再推荐"The algorithm design manual"。这书和sedge wick的那本一样可以当小说看,关键是作者把解决问题的来龙去脉考量写得非常清楚,就是应用的Context决定了算法的取舍。如果不舍得买这本书,我怀疑学习者有无诚意从事码工这行。
最后推荐"The programming pearl", 这个也是关于“道”的书,此书文笔优美,它的最大特点就是示范如何“演进”地解决问题,我个人认为面试官也愿意看到你的这个策略,如果一下子写出最优解,估计还是事先见过题目了,可惜工作不是面试,大部分实际问题需要“演进”的策略。
还有些好书就不说了,我想说的是计算机器的优势就是重复,本质上Iteration就是解决问题的核心方法,区别是Top down 还是 Bottom up.如果解决之道看多了估计就考像GRE一样,一看题目里面的关键词,就预测出了可能的解法。
LeeCode的题目设计得很讲究,考试专用,有一定的区分度,不会特别复杂,但是难度不低,用意就是考察你有没有掌握“算法之道”
3. 互联网的技术Stack。
从行业软件往互联网方向转,刷题这种事倒是不难,可是被招聘进去对公司产品的bigpicture如何呢?基于目前的跳槽经验是我们比较缺乏基于Web的分布式系统的设计和实现。
具体来说,一个例子就是类似amazon这样的online resource management 如何实现?需要考虑那些问题
如 Browser从点击add an item into cart 到place order完成的过程发生了那些事?推荐 Http the definitive guide,须学习如何用IE/Firefox/Chrome来Debug。
比如前端的Javascript如何使用才能优雅?推荐Javascript, the good parts,须学习最简单的JQuery如何实现。
比如 service oriented architecture 如何实现?SoapUI的魔法是如何实现的?推荐阅读 Web Servcie /Restful API方面的书比如在表现层/业务层/存储层间流动的 web data 如何表现,转化和互动?推荐阅读XML,XSLT 和BPEL方面的书比如传统database 如何match领域模型?推荐 Hibernate in action by Gavin King比如data set的存储为何因Web而从传统的RDBMS转向NoSql?推荐 Martin fowler的 NoSql Distilled比如云平台云计算的原理是何?如何Scale一个网站的处理能力?推荐Cloud Architecture Patterns by Bill Wilder比如Enterprise 的architecture 有哪些定式?例如流行的Active Record。
推荐 martin fowler 的patterns of enterprise application architecture经典的web based enterprise架构有何完整案例?推荐Rod johnson的系列红皮书,案例就有类似Fandango的业务如何设计。
比如互联网的算法偏重哪些?自动“Recommendation”是何秘密?推荐programming Collective Intelligence by Toby Segaran.计算机算不上是科学,它是个大杂烩,非常强调实践,请务必上手“织网”。
如果想学习最稳定的企业级的Framework,推荐学习Spring。
如果想学习最有格调的Framework,推荐学习Ruby on Rails。
如果想学习最热门的Framework,推荐试试Node.js 系列Stack。
大数据我没经历,无法推荐。
最后请多观摩github上的大型Web Framework源代码,很多大型web framework都是工业级别的的,应用了DI, AOP等技术,“源码之前,了无秘密!”
4. 我们的资本在IT业发展的好的代表既有顺理成章的科班生,也有从其他专业转的GEEK。
如果因为IT热,就转,只想找个好工作,不争不闹,天花板可能就在眼前。
我推荐大家读读 Everything store 这本书,看看在美国或者全世界的互联网行业如何才能生存下去。
你的资本不是你能刷题,而是你的厚脸皮,你被羞辱的忍受力,你对变化的积极反应,你学习新东西的能力和速度,你的好奇心,你的野心。推荐大家选择这种公司:工作最累,有最革命的商业模式,在最有人气的地理。
最后一句话,想涨本事的话推荐选择Startup,原因很简单,人力资源紧张,你有更多机会变成Full Stack。
评论 (0)