Monday, October 17, 2016

想在美国找CS软件工作?Warald提供需要学习的书籍和课程名单!

现在有越来越多的人想学CS,自然就有这样一个问题:如何打好CS的基础?如何入门学习?

请注意,Warald这里说的不是如何成为大牛或者技术达人,无论成为高人靠先天灵性还是后天苦练,跟俺这个帖子的主旨无关。我这里说的是:如果一个人,从来没学过cs(比如非cs专业的),想学cs,但是毫无头绪,那他/他该如何入手?有哪些书籍、课程材料或者网上的资源,对于入门,会很有帮助?

Warald以前写过《[EECS申请与就业专辑]之计算机专业在美国的就业情况+如何选课如何学习》一文,尤其是在该系列文章下篇里谈过需要学习的三样基本功:

1)一门编程语言
2)一个操作系统
3)一个数据库

其中编程语言从学习的角度,无非是C++ or Java。但是学习的时候,最好结合着
4)Data Structure


论坛里一直有这方面的讨论,比如这几天的《难道只要练好coding就行了???》,但是依然不够具体,我想要的是很清楚的回答“具体看这本书、学习这个资料”对于你上路最有帮助,而不仅仅是点评。前段时间我也发起过《【活动号召-呼唤参与】我在美国上课的感受和总结》,但是这个可能侧重研究生层次的,再一个,对于新人来说,依然不够具体。


Warald毕业多年,早就过了翻书学基础的阶段,这里想跟各位在读的同学问一下,你们有没有好的资料可以推荐给新手学习?比如

a)浅显易懂的课本,不需要从技术的角度,讲的多么深入。for example,<A First Course in Database Systems>就是一本很容易懂的数据库入门书籍,没cs基础的人也可以拿来学。读过这本书的同学,也知道我说的“通俗易懂”是以什么为标杆的吧?我这里说的是“筑基”。
b)老师的slides、notes、assignments等等,比如美国这里,很多老师有自己的course page,有的老师隐藏不公开,但是也有些老师是资料公开的,这里尤其想问问美本,你们上课的时候,觉得哪门功课、哪位老师的课程资料好而且公开在网上,能否推荐一下,给出链接?
c)open courses。比如MIT, harvard等学校都有
d)任何其他资料,各位还知道吗?


如果你知道我说的四门课程的资料,那最好,我觉得新人应该从这些方面开始学起来打好基础;如果你有其他功课的资料,也欢迎share给大家。我觉得简洁易懂和侧重应用而不是理论的,对新人更合适。

谢谢你的参与!肯回答的筒子们,rp好,后面要被offer雨淋透~~我跟在后面加分

请各位发言按照以下四门功课组织
1)Programming Language
2)Operating Systems
3)Database
4)Data Structure

把你认为好的资料回复在每个功课下; feel free to add other courses,但是这个帖子征集的简洁应用的入门性质资料,而不是高深理论;中英文不限,尽管我个人推荐直接看英文。



计算机(CS)专业在美国最好找工作已是共识,Warald在《[美国就业Warald指数]数据分析各专业在美国找工作难易程度和工资水平》中已经指出。现在想找计算机软件工作的人很多,各个专业学生都有想转CS的。关于该如何动手、该学习哪些知识,网上有各种推荐、众说芸芸。

周星驰版的《鹿鼎记》里,陈近南指着高高的绝世武功书架,对不会武功的小宝说:我是看了三年,练了三十年,才有今天的境界。Warald不会像陈师傅那样,不会对着薄弱甚至零基础的你,潇洒指一下算法导论、career cup、leetCode,然后做高人状飘然而去,留下你硬啃天书~

Warald希望提供一个可行也相对容易实现的学习计划,希望你能从入门学起、循序渐进。Warald综合各种信息,针对如何在美国IT公司找工作,给出了下面这个书籍和课程名单。
如果你基础很好,读算法导论易如反掌、应付各种面试题目不在话下,那你当然应该跳过这个文章,早点去搞定工作。Warald敬请您在找到工作之后,来一亩三分地找工求职版分享一下经验、提供一下公司内推,帮帮其他人。

Warald提供留学申请服务,每年都有客户转专业甚至零基础读CS类专业,我也提供后期就业辅导。这个帖子的部分内容,也来自于我跟客户之间的一些讨论。
. 1point3acres.com/bbs
先说两个网站,一个是udacity.com,一个是coursera.org,都提供免费的在线公开课程,很多功课全球几十万人一起学习。

. Waral 鍗氬鏈夋洿澶氭枃绔�,
《第一阶段》筑基

如果你不知道什么是for/while lopp、不知道什么是list,建议你先上这门公开课:
UDacity CS101:Introduction to Computer Science/Building a Search Engine
https://www.udacity.com/course/cs101
学完了以后,好歹对基本的programming control flow, very basic data structure熟悉一下。绝大多数的理工科学生,本科期间是上了C语言的;如果你是美本,很可能上过其他编程语言,这就算消除了零基础了。


《第二阶段》入门
你必须先学Java和SQL,Warald推荐的书籍如下:
1)Head First Java. 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
. 鐣欏鐢宠璁哄潧-涓€浜╀笁鍒嗗湴
目前市面上要求Object oriented programming尤其是Java的工作是最多的。这本书最大的优点就是容易读懂,无论是内容讲解还是大量图片设计,都非常容易理解。
Amazon链接:

                                
登录/注册后可看大图


2)A First Course in Database Systems,作者是Jeffrey D. Ullman, Jennifer Widom
. From 1point 3acres bbs
用SQL查询数据库是基本技能。基本上你会英语就能读懂这本书、学会SQL。这本书Amazon上也有,图片链接:
. more info on 1point3acres.com
                                
登录/注册后可看大图

. from: 1point3acres.com/bbs 
Warald非常推荐转专业学CS的同学从这本书入手来培养兴趣,计算机/管理信息系统甚至Business/Marketing等行业,有些人的日常工作就是用SQL处理数据。coursera之前有过Daphne Koller的database公开课,貌似下面要换成Jennifer Widom来教(https://class.coursera.org/db/class/index),上这门课程也可以。
读完这两本书,下面你要继续学Java和数据结构:

3)Data Structures and Algorithms in Java
Warald推荐Berkeley CS61b:http://www.cs.berkeley.edu/~jrs/61b/ 使用的课本如下:

                                
登录/注册后可看大图


                                
登录/注册后可看大图
. Waral 鍗氬鏈夋洿澶氭枃绔�,
据joyce在一亩三分地里说,这个老师是berkeley计算机系本科教课最清楚的老师之一,所有的lecture video都在youtube上,notes都可以自由下载。作业和projects也都在网上,可以自己练习。这门课程是给大一新生上的,并不高深,里面推荐了head first java,也推荐了Data Structures and Algorithms in Java。
另一个选择是coursera的algorithm课程,Princeton大学Robert Sedgewick教授开的,算法跟数据结构都有了,作业不错,也是用Java,以前开课时一亩三分地里有人组织一起上课:http://www.1point3acres.com/bbs/thread-37519-1-1.html。最近正好在开Round II。
. 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
公开课最大的好处是可以得到及时的feedback,而berkeley的CS61b这类传统的video下载观看模式,你只能闷头做题,作对作错都不知道。

如果你们学校有类似课程,你可以去选课或者旁听,但是一定要做作业、练习编程!否则这门课就算是白上了!
熬到这里为止,你已经具备最基本的能力了!如果这些你早就会了,恭喜!你的书没白念!


下面Warald建议你更深入的学习Java:
. 1point3acres.com/bbs
4)Thinking in Java
这本书很经典,但是不适合作为入门书籍。学完了前面两本java书,你可以翻着看看这本,会有帮助。

                                
登录/注册后可看大图


然后是一个重头戏:
5)Programming Interview Exposed

这本书籍不是“课本”,不是“课程”,而是教你做各种常见面试题目的。
. visit 1point3acres.com for more.
                                
登录/注册后可看大图
.鐣欏璁哄潧-涓€浜�-涓夊垎鍦�

很多人来问Warald:我是小白,请问该如何准备面试求职?这本书就是我的回答。熟练掌握这本书籍的内容,是你找到工作的基础。
完成了上面这五步,你就已经具备了在美国找工作的基本条件了;尽管没人敢保证你一定能找到工作,但是即使只会这些,你已经“有可能”找到工作,尤其是不瞄准google、facebook等热门公司,或者找对软件开发技能要求不高的工作。. 涓€浜�-涓夊垎-鍦帮紝鐙鍙戝竷
各位同学,计算机/CS和其他专业一个很大的不同,就是容易上手、容易自学成才!你不需要焊电路板、做化学实验(这些都需要设备和钱),下载电子书和免费软件,spend your time,use your talent,就可以了! 你离在美国找到工作的距离,可能只有这五本书的厚度。


《第三阶段》进级. From 1point 3acres bbs
要全面扎实的掌握计算机学科知识,要想在找工作的时候稳拿offer、获得更多更佳的就业选择,当然不可能只学前面的五本书。基础教育可以有稳定可循的套路,而往高处进级就复杂了,有些人也未必能训练出来,否则岂不是人人都去google、linkedin、微软工作了?. 1point3acres.com/bbs
从找工作的角度来看,下面是你应该做的:
6)刷cracking the coding interview和leetcode题目
. 鍥磋鎴戜滑@1point 3 acres
前者是本书,带答案讲解:

                                
登录/注册后可看大图


一亩三分地论坛有个编程算法面试题专版(http://www.1point3acres.com/bbs/forum-84-1.html),近期有人组织大家一起刷题讨论:http://www.1point3acres.com/bbs/thread-48094-1-1.html. Waral 鍗氬鏈夋洿澶氭枃绔�,
同时,Warald建议你继续在udacity和coursera上课比如machine learning和algorithm,学了都会很有帮助。如果你在本校选计算机课程没选上,那更是应该利用这种免费的机会,听斯坦福等牛校牛人讲课。
对于在美国读书的同学来说,进入这个进级阶段,往往也是你在美国读书的中晚期了,你已经上了网路、操作系统、软件工程等课程,简历逐渐充实了,甚至对于将来做哪个行业或者方向也大体有眉目了,然后就是根据自己的兴趣,补充该领域的专业知识了。

地里很多同学表示:网上信息太多,书籍太多,不知道看什么好。地里很多人推荐过其他书籍,举几个例子。操作系统方面,拿到Google和Facebook的bumbing在求职总结里推荐

本书有一个优点,就是每个方面只讲必要的东西,过于深入的细节都没有太讲。。。但是还是太多了。。。我觉得还是看面啥公司,有针对的看一看就好吧,比如面硬件的公司,尤其是写c的,就要去了解下一个program在内存里是怎么构成的,static变量存在哪,stack在哪heap在哪blabla;面pure storage就去看看memory和disk。。。。然后多线程,设计hashmap我觉得还是有必要看一看的
-google 1point3acres
传送门:

. From 1point 3acres bbs
OS还有另外一本赞誉很高的书籍,传送门:



最后,Warald提醒:
1)如果你要在美国找工作,看书就看英文的。
2)如果要来讨论A语言比B语言好啊,C书籍比D书籍好啊,D功课讲的太浅啊,请去一亩三分地EECS专版或者编程算法面试题版块里找共鸣。Again,Warald提供这个名单的目的,是从在美国找工作的角度,循序渐进、从入门讲起,而且我也只讲较为主流的Java路线。
3)无论别人提供的书籍和课程名单有多好,最终还是要靠你坚持不懈学下来。

Sunday, October 16, 2016

cs转专业的步骤

计算机(CS)专业在美国最好找工作已是共识,Warald在《[美国就业Warald指数]数据分
析各专业在美国找工作难易程度和工资水平》中已经指出。现在想找计算机软件工作的
人很多,各个专业学生都有想转CS的。关于该如何动手、该学习哪些知识,网上有各种
推荐、众说芸芸。

周星驰版的《鹿鼎记》里,陈近南指着高高的绝世武功书架,对不会武功的小宝说:我
是看了三年,练了三十年,才有今天的境界。Warald不会像陈师傅那样,不会对着薄弱
甚至零基础的你,潇洒指一下算法导论、career cup、leetCode,然后做高人状飘然而
去,留下你硬啃天书~
Warald希望提供一个可行也相对容易实现的学习计划,希望你能从入门学起、循序渐进
。Warald综合各种信息,针对如何在美国IT公司找工作,给出了下面这个书籍和课程名
单。所有推荐的东西,在网上都有能搜索到、都有免费下载。

如果你基础很好,读算法导论易如反掌、应付各种面试题目不在话下,那你当然应该跳
过这个文章,早点去搞定工作。Warald敬请您在找到工作之后,来一亩三分地找工求职
版分享一下经验、提供一下公司内推,帮帮其他人。
Warald提供留学申请服务,每年都有客户转专业甚至零基础读CS类专业,我也提供后期
就业辅导。这个帖子的部分内容,也来自于我跟客户之间的一些讨论。

先说两个网站,一个是udacity.com,一个是coursera.org,都提供免费的在线公开课
程,很多功课全球几十万人一起学习。


《第一阶段》筑基
如果你不知道什么是for/while lopp、不知道什么是list,建议你先上这门公开课:
UDacity CS101:Introduction to Computer Science/Building a Search Engine
https://www.udacity.com/course/cs101

学完了以后,好歹对基本的programming control flow, very basic data structure
熟悉一下。绝大多数的理工科学生,本科期间是上了C语言的;如果你是美本,很可能
上过其他编程语言,这就算消除了零基础了。


《第二阶段》入门

你必须先学Java和SQL,Warald推荐的书籍如下:
1)Head First Java
目前市面上要求Object oriented programming尤其是Java的工作是最多的。这本书最
大的优点就是容易读懂,无论是内容讲解还是大量图片设计,都非常容易理解。

2)A First Course in Database Systems,作者是Jeffrey D. Ullman, Jennifer
Widom
用SQL查询数据库是基本技能。基本上你会英语就能读懂这本书、学会SQL。
Warald非常推荐转专业学CS的同学从这本书入手来培养兴趣,计算机/管理信息系统甚
至Business/Marketing等行业,有些人的日常工作就是用SQL处理数据。coursera之前
有过Daphne Koller的database公开课,貌似下面要换成Jennifer Widom来教(https:/
/class.coursera.org/db/class/index),上这门课程也可以。


读完这两本书,下面你要继续学Java和数据结构:
3)Data Structures and Algorithms in Java
Warald推荐Berkeley CS61b:http://www.cs.berkeley.edu/~jrs/61b/

据joyce在一亩三分地里说,这个老师是berkeley计算机系本科教课最清楚的老师之一
,所有的lecture video都在youtube上,notes都可以自由下载。作业和projects也都
在网上,可以自己练习。这门课程是给大一新生上的,并不高深,里面推荐了head
first java,也推荐了Data Structures and Algorithms in Java。

另一个选择是coursera的algorithm课程,Princeton大学Robert Sedgewick教授开的,
算法跟数据结构都有了,作业不错,也是用Java,以前开课时一亩三分地里有人组织一
起上课:http://www.1point3acres.com/bbs/thread-37519-1-1.html。最近正好在开Round II。

公开课最大的好处是可以得到及时的feedback,而berkeley的CS61b这类传统的video下
载观看模式,你只能闷头做题,作对作错都不知道。

如果你们学校有类似课程,你可以去选课或者旁听,但是一定要做作业、练习编程!否
则这门课就算是白上了!
熬到这里为止,你已经具备最基本的能力了!如果这些你早就会了,恭喜!你的书没白
念!


下面Warald建议你更深入的学习Java:
4)Thinking in Java
这本书很经典,但是不适合作为入门书籍。学完了前面两本java书,你可以翻着看看这
本,会有帮助。


然后是一个重头戏:
5)Programming Interview Exposed
这本书籍不是“课本”,不是“课程”,而是教你做各种常见面试题目的。

很多人来问Warald:我是小白,请问该如何准备面试求职?这本书就是我的回答。熟练
掌握这本书籍的内容,是你找到工作的基础。

完成了上面这五步,你就已经具备了在美国找工作的基本条件了;尽管没人敢保证你一
定能找到工作,但是即使只会这些,你已经“有可能”找到工作,尤其是不瞄准google
、facebook等热门公司,或者找对软件开发技能要求不高的工作。

各位同学,计算机/CS和其他专业一个很大的不同,就是容易上手、容易自学成才!你
不需要焊电路板、做化学实验(这些都需要设备和钱),下载电子书和免费软件,
spend your time,use your talent,就可以了! 你离在美国找到工作的距离,可能只
有这五本书的厚度。


《第三阶段》进级

要全面扎实的掌握计算机学科知识,要想在找工作的时候稳拿offer、获得更多更佳的
就业选择,当然不可能只学前面的五本书。基础教育可以有稳定可循的套路,而往高处
进级就复杂了,有些人也未必能训练出来,否则岂不是人人都去google、linkedin、微
软工作了?

从找工作的角度来看,下面是你应该做的:
6)刷career cup和leetcode题目
一亩三分地论坛有个编程算法面试题专版(http://www.1point3acres.com/bbs/forum-84-1.html),近期有人组织大家一起刷题讨论:http://www.1point3acres.com/bbs/thread-48094-1-1.html。

同时,Warald建议你继续在udacity和coursera上课比如machine learning和algorithm
,学了都会很有帮助。如果你在本校选计算机课程没选上,那更是应该利用这种免费的
机会,听斯坦福等牛校牛人讲课。

对于在美国读书的同学来说,进入这个进级阶段,往往也是你在美国读书的中晚期了,
你已经上了网路、操作系统、软件工程等课程,简历逐渐充实了,甚至对于将来做哪个
行业或者方向也大体有眉目了,然后就是根据自己的兴趣,补充该领域的专业知识了。

最后,Warald提醒:
1)如果你要在美国找工作,看书就看英文的。
2)如果要来讨论A语言比B语言好啊,C书籍比D书籍好啊,D功课讲的太浅啊,请去一亩
三分地EECS专版或者编程算法面试题版块里找共鸣。Again,Warald提供这个名单的目
的,是从在美国找工作的角度,循序渐进、从入门讲起,而且我也只讲较为主流的Java
路线。
3)无论别人提供的书籍和课程名单有多好,最终还是要靠你坚持不懈学下来。

–Warald (Email: iamxiaoning@gmail.com)
博客: http://www.1point3acres.com/
微博:http://www.weibo.com/warald
--

响应w大号召,简单说一下我对CS入门(for转CS)的一些建议

W大这个帖子里面提到了一个问题:“
现在有越来越多的人想学CS,自然就有这样一个问题:
如何
打好CS的基础?如何入门学习?”
我自己本科是学EE的(信号处理方向),然后到这边读CS小硕,所以觉得自己还是很有发言权的。我大二的时候发现自己对于EE完全无爱之后就一直在自学CS方面的知识,积攒了一些经验和资料,在这里和大家分享下。

本文适合打算从非CS专业(最好是工科)转到CS读master然后毕业找工作的人群,不适合打算读CS phd的同学。



首先根据我对CS业界的观察以及实习经历,我觉得业界对于CS毕业生的需求倾向大概分为两种:

1、算法分析和设计的能力,要求熟练掌握常用算法和数据结构,能够快速针对一般性的问题给出optimal的解决方案,对于较复杂的问题能给出解决思路,要求手写代码的能力,而对project经历要求不高。

代表公司:facebook,amazon,google等以互联网为主要业务的公司

2、就是俗称的coding能力,要求熟练掌握常用算法和数据结构,并对某一种开发流派比较熟练,如web开发方向的javascript/PHP/Silverlight/HTML5,本地开发的Java/.Net,移动开发的ios/android/wp7,还有些更专精的方向,比如嵌入式开发的Linux+C,驱动开发等,对经验要求较高。

代表公司:Microsoft,IBM,Oracle等传统软件公司+各种小公司+各种startup公司

所以各位想转CS的同学,先想好你们以后打算往哪个方向发展,如果数学功底比较好、脑筋比较快的适合第一种(智力型),如果喜欢engineering的感觉、有一定coding经验的话适合第二种(敏捷型)。


第一种升级路线:

首先要打好算法功底,本人推荐《Introduction to Algorithms 3rd》,算法学习的圣经,虽然厚但是非常细致,全书使用伪代码。把一些比较重要的章节学完之后做做课后习题,基本别的算法书就不用看了,之后做做面试题就行。

然后掌握一门语言,建议C/C++,因为这两门语言非常低层,甚至连string处理都要自己一个char一个char地写(先无视STL吧),非常考验编程功力和优化水平。

对于C,大家知道有个C四库全书,其中K&R写的那本我觉得早就应该看完,然后剩下的《C和指针》、《C专家编程》和《C陷阱和缺陷》也要看一遍。看完这四本书基本就可以自称“精通C语言”了。

对于C++,因为过于博大精深,所以其实很难推荐,而且事实上没有一个人敢声称自己“精通C++”。但有一本书是学C++不可不看的,中文译名叫做《深度探索C++对象模型》,侯捷翻译的,质量不错。

对于编程语言的掌握水平,必须达到对于自己的代码、在大脑中能时刻勾画出代码的执行流程和数据在内存中的排布方式这种程度。

最后是OS和数据库,我觉得各选一门CS系研究生级别的课就足够了,只要明白基本概念、能使用unix的系统调用编程、能日常操作MySQL即可,不需要研究太深入。


第二种升级路线:

这一种对于算法的要求虽然没有第一种那么高,但是常用的算法和数据结构,比如快排、二分搜索、二叉排序树(即堆排序)、二叉搜索树、哈希表等还是要熟练掌握的,也推荐上面那本算法导论,没时间的话也可以用《数据结构与算法分析:C语言实现》来代替。

对于语言,建议除了以上提到的C/C++的基础,再另外掌握一门开发语言+一门脚本语言,如Java/C#+PHP/Perl/Python等,这个没什么教材好推荐,建议多做project,熟能生巧。

对于OS建议掌握更深一点,最好能阅读和学习Linux内核,推荐ULK第三版,即《Understand Linux Kernel 3rd》,讲2.6的内核,然后下载个Source Insight软件同步阅读内核源代码,不必全部看,重点关注进程管理、进程调度、内存管理、文件管理即可。还想深入、或者打算投身驱动开发的同学,LDD3(《Linux Device Drivers 3rd》)不可不看。

(关于OS再补充一句,我个人觉得面试如果问到OS,不会问你一般性的原理,比如“互斥锁是怎么实现的?”,而是会问你“Linux的互斥锁是怎么实现的?”。我记得以前在国内面试某T公司的时候,面试官看我简历上写了“Windows内核”就和我探讨了Windows内核对于物理内存的管理方式来着,然后我把AVL树说成红黑树了,囧啊。)

对于数据库,仍然建议掌握MySQL,能日常操作即可。

想走第二条升级路线的同学,project经历是重中之重(课上做的那种project不算),建议多参加一些实验室工程性质的项目、软件开发的比赛,或者干脆投身移动app开发,总之就是多积累作品,这样和面试官才有得聊。


我觉得对于转CS同学的指导思想就是在有限时间之内迅速掌握实用的知识和经验,其实CS虽然叫做Science,本质上还是个Technology为王的领域,不需要长年累月的积累,只要努力任何人都可以得其门而入。


以上皆为一家之言,欢迎各位指正和补充。

暴力转行数据库路线图v1.0

暴力转行数据库路线图v1.0

(发现写总结还真不是那么容易。这一版我已经尽力了,但还是比较粗线条。有时间的
话,我会持续添加细节、资源、和FAQ问题,也请有经验的人可以来添砖加瓦)

请先认真读1 基本的条件,看看数据库是不是适合你。

我主要学的是Microsoft的database,所以只会讲Microsoft的Bussiness Intelligence
。我的简单理解,BI的数据分析,就是分析business在管理和运营中得到的大量数据,
根据分析结果来指导business做出科学的决策。我的暴力转行是从BI入手。因为BI是个
现在很热的噱头,它的一切都是建立在数据之上的,所以如果懂database,从这里入手
很好找工作。但请记住,database才是你真正要进入和扎根的领域。如果有一天,big
data啥的都成了浮云,靠做database engineer,reporting analyst,BI developer,
SQL developer,照样大把的工作。
本来只是个简单的路线图,想想还是加了些具体的东西,让想学的人下得了手。

1. 基本的条件
其实我在经历那篇说过了,这里再重复一下。可能有些搞培训的不爱听,但这是我们转
行database领域的现实。
  - 要绿卡。如果没身份,工作机会大大减少。不如直接CS master,一步步搞定身份
会更稳妥。
- 要有兴趣。没兴趣你肯定没法下苦功夫并坚持下去。如果想要尝试,学一学下面我
说的2.1,如果不喜欢数据库就算了,没多大损失。
- 英语不能太差。交流非常多,因为数据都是从business来的,要和business方面人
有很多的交流才能够理解,尤其是作为reporting analyst。
- 要很强的表达能力。还是因为需要很多的交流。有时候会混淆表达和英语的关系。
想知道自己表达怎么样,不妨用中文来表达。如果也表达不清楚,逻辑不强,那就是表
达问题而不是语言问题。表达不好的人很难通过这领域的面试,也难应付以后的工作。
- 机会成本比较高。如果想速成,参加培训,成功不成功,你都要花费巨大的精力和
相当数额的money。
- 要能接受年薪不太可能到达20-30万的现实。

2. 学习路线图
所有的操作和知识都可以在网上(youtube上或google)找到。逐渐学会这样去解决问
题,是在IT行业生存的基本技能之一。建立Work environment看FAQ。

2.1 Database Basics and SQL Programming
1)先学习relational database基本知识和概念
这个系列不长但很不错,可以了解fundementals。
https://www.youtube.com/watch?v=QKgNjIEp_lI
Echowuhao推荐过Coursera上的Stanford db class, 经典的课程。

了解了基本概念和知识以后,也可以去学一学/了解Microsoft以外的relational
database,比如Oracle,MySQL等。这是增加本领域知识宽度,便于以后找工作。

2)同时学基于Microsoft 的SQL(Structured Query Language)。SQL是个比较简单,
多年来变化不是很大的数据库语言,这大概是转行这个领域最大的好处之一。我上班时
间偷刷www.w3schools.com几遍入的门。基本的东西差不多,比如下面这个,由浅入深:
https://www.youtube.com/watch?v=IIzA8gedbIg
用3-5个月左右的时间把建立起Relational Database的概念和较强的SQL的能力。

3)SQL要越精越好,直到最后能大量掌握T-SQL,你就算一技傍身,衣食无忧了。
其实你如果已经走到这儿了,你就知道自己需要什么了,也知道到哪里找到这些资源。

2.2 ETL
ETL(Extract,Transform,Load)是把数据从data source抽取出来,经过一些处理,然
后load到destination的database去。ETL的tool很多,这里从Microsoft的 SSIS (SQL
Server Integration Services)入手。会基本操作之后,做project。精通以后,再
大致了解一下其他的ETL tool,比如informatica等。
如果2.1达到一定水平,再掌握了SSIS,那就可以准备出去找工作了。

2.3 Reporting
Reporting就是分析数据,呈现结果的过程。Reporting的tool也很多。这里从
Microsoft的 SSRS(SQL Server Reporting Services)入手。会基本操作之后,做
project。精通以后,再大致了解一下其他的reporting tool。比如Excel,Crystal
Reports,Tableau等。
2.1+2.3,可以直接找reporting方面的工作。甚至有人就学SSRS几周就出去找工作了。
但我真的不推荐这么做。一个好的reporting analyst是要有很好的database
knowledge和很强的SQL programming的能力,才有可持续发展的空间。

2.4. Database Administrator
多数情况下工作轻松,工资高。但现在先忘了这茬。等到入了行,悟性好,Developer
干些年转DBA机会比较大。没有丰富经验基本没有直转DBA的可能。

2.5 Expand your database knowledge base…
入了门,你就有精力,有想法,有钱,开始向任何你想发展的方向走了。

3. Job Hunting
刷SQL Developer的面试题,搜SQL和BI的interview questions。准备简历,网上找职
位,投简历,等面试,去工作。转行的人在interview方面要做更多更好的准备。这个
以前echowuhao谈到过一些,非常中肯。我也有深刻的体验。如果需要的话,可以探讨
一下。

4. Resources:
www.youtube.com(最重要最全面资源)
www.sqlcentral.com (我订阅了,每天必读)
www.codeproject.com(可以找到一些Project)
www.stackoflow.com (找问题答案)
https://technet.microsoft.com/en-us/library/bb510440(v=sql.105).aspx(最好的
概念学习网站,因为只要安装了AdvantureWorks的sample database,就可以照着run程
序了)

5. Book References
这领域参考书其实不重要,尤其是对初学者。下面这些书我都有,但都是大致翻过一些
章节,但没有系统看过。其实也可以跳过,拿我上面提到的微软网站当字典。那个我学
习和工作的时候都经常去。
SQL Server 2012
Introducing SQL Server 2012
SQL Server 2012 Integration Services


6. FAQ

【问: 我们这里工作机会多不多啊?】
答:上indeed,用SQL Server,或者business intelligence developer做关键词,搜
搜附近的工作机会,看看能搜到多少工作。一般来说,大城市机会很多,小的城市少点。

【问: 技术那么多,学啥?】
答:博大精深。博大,有关database和BI,知道得越多越好,这个可以帮助你找工作。
精深,ETL tool和reporting tool各要专精一个tool,我推荐 SSIS和SSRS,其他公司
的tool都是大同小异,可以触类旁通。旁通了一点以后就都放在简历上。

【问:怎么开始?】
先建立Working Environment。自己找video,先安装SQL Server Management Studio(
全部feature包括integration services,analysis services,reporting services)
。推荐2012版本,但2008R2 - 2014任何一个版本都行,不要用express版本。然后装上
sample database (各种AdventureWorks的 sample database),然后就可以开始玩了
。所有知识和技术都要在database 上学,因为这是实践。比如:
https://www.youtube.com/watch?v=805Suu5kaOg&list=
PL5gdMNl42qykDfb4KNhRsL1vtoIKKOKmL
想入这个行你就得当自己是IT人士了。

【问:我能学Oracle吗?】
答:可以,工作机会也不少。但我没有啥经验可以分享。

【问:要不要参加培训?】
答:如果你很感兴趣,又没自制力想加快进度,就选择一个培训,短平快。对培训我说
两点,一是可以直扑我说过的那些内容,其他的东西先别浪费你的时间精力。二要能给
你带来project经验。因为不是本版提倡的,我不多说了。

【问: 我能直接学Big Data吗?】
答:可以,但作为一个刚转行的,你会那些高大上的东西,别人很难相信,可能找不到
工作。

【问: 内容那么多,我能学会吗?多长时间学完?】
答:集中优势兵力打攻坚战,就奔我说的2.1+2.2或 2.1+2.3或 2.1+2.2+2.3。最好一
年内完成。找到工作再继续学。工作是学习真正开始的地方。

【问:几个月的时间能学好找到工作吗?】
答:能。
学习:不要当学问来学,要当技术来学。简单地说,玩精俩软件,你就入门了。战略上
藐视对方,战术上重视对方。
面试:不要当技术来说,要当学问来说。
学生物的人应该很容易理解这个,你说做了个简单的实验,跑了个电泳,这就是技术。
你老板说,我们的研究发现了一个新的蛋白质,这个蛋白是2型糖尿病病程发展的关键
因子,这就是学问。

Tuesday, October 4, 2016

The 9 Best Programming Books to Read Right Now if You Want to Distinguish Yourself

If you read just one of these best programming books this year you’ll be a step ahead of nearly everyone around you. That’s because, according to Steve McConnell, the author of Code Compete, one book is more than most programmers read each year.
Back in 2008 author, blogger, software engineer and creator of Trello made this bold statement:
Programmers seem to have stopped reading books. The market for books on programming topics is minuscule compared to the number of working programmers. Instead, they happily program away, using trial-and-error. When they can’t figure something out, they type a question into Google.
 Does this sound like you?
While search engines and community forums like Stack Overflow are indispensable, there’s no way you can obtain the same depth of knowledge and perspective as you get from reading books.
The best types of programming books are ones that don’t just tell you how, but explain the why behind it. They don’t just teach you about specific languages or how to code, but how to think. They stand the test of time and will help you become a better programmer, whether you are just starting out or have been in the industry for 30 years.
Without further ado, here is the list of the top 8 best programming books to read if you want to set yourself apart and become a coding powerhouse.
If you’re curious about life as a programmer than Coders at Work is the book for you. It’s packed with interesting interviews from 15 accomplished programmers and computer scientists including Joshua Bloch, Peter Norvig, Donald Knuth, Ken Thomson, and Jamie Zawinski. The author, Peter Seibel (a programmer turned writer), got interviewees to open up about the famous projects that they worked on and the inspiring stories behind them. Coders at Work gives a peek into what makes some of the greatest programmers tick and how they think. Definitely a must read!
Coders at Work Best Programming Books
Steve McConnell’s Code Complete is considered to be the encyclopedia of practical coding and a must-read for any professional programmer. And, it’ easy to understand why – it’s a massive piece of literature at 900-pages, but each chapter is packed with suggestions and techniques to improve everyday programming and construct code that is readable and easier to manage. McConnell has a knack for presenting his material in a story format that makes the book easy to read and even entertaining. No matter what level you’re at, Code Compete will undoubtedly change the way you think about and write code.
TIP: If you don’t have time to read the book in its entirety, flip to the last three chapters since it serves as a resource guide. From there, you can read through whichever chapters you want information on. Skip the Kindle edition and opt for the print copy since chapters are easier to reference.
The premise of this book is built on the fact that computers change, but people don’t. The Mythical Man Month is a programming classic that discusses the human elements of software engineering. Even though the book was written 30 years ago (first published in 1975) it’s stood the test of time. Why? Because building things, including software, has been as much about people as much as hit has been about materials or technology. If you’re aspiring to become a project manager, this book will help you understand things that can go wrong in software development and will give you practical advice or working with, organizing and managing teams.
The Mythical Man Month Best Programming Books
If you’re going to read a book on usability make it this one! Don’t Make Me Think is a great resource for any web developer who want to create websites, mobile sites or mobile apps that are much easier to use. The book is loaded with helpful information that’s presented in a clear and concise way that could be understood by both technical and non-technical audiences alike.
Don't Make Me Think Best Programming Books
Another oldie, but goody, that continues to stand the test of time. The Pragmatic Programmer is a collection of lessons and recommendations for software developers. The book contains a set of numbered tips, about 70 of them, which are collected on a single tear-out card situated in the back of the book. The tips alone might seem obvious, but they contain some surprising dimensions that will help strengthen your programming career and hone your craft! 
The Pragmatic Programmer Best Programming Books
Poorly written code can bring a project to its knees, which is why developing great code is so important! In Clean Code, “Uncle Bob” Martin shares tips and examples on how to create better code. The book dives into the principles and best practices of writing clean code, and also presents increasingly challenging case studies presented that challenges readers to think about what’s right with the code, and what’s wrong with it. While examples in Clean Code are given in Java, but is applicable to nearly all programming languages.
TIP: Read Clean Code after getting through Code Complete since it deals with some of the same topics but at a higher level.
Clean Code Best Programming Books
This is a classic book for newbies that teaches the basics of solving problems. If you work through the problems on your own (without looking ahead) you’ll learn a lot and be a much stronger programmer with a deeper understanding of algorithms and algorithm design.
Programming Pearls Best Programming Books
This is one of the go-to books for programming interviews if you’re looking to land a gig at a top company such as Amazon, Apple, Facebook, Google or Microsoft. As the title suggests, the book contains 150 programming questions that you might encounter at interviews, and then breaks down how to solve them. The remainder of the book focuses on non-coding aspects of the interview process such as interview prep, resume prep, behavioral prep, etc. Definitely one of the best programming interview books out there. Another good prep book is Introduction to Algorithms , which is considered to be the “bible of algorithms.”  
Cracking the Coding Interview Best Programming Books
For most software developers, coding is the fun part. The hard parts involve dealing with clients, peers, and managers, staying productive, achieving financial security and so on. This book covers everything-else-apart-from-coding ranging from career, to personal branding, blogging, learning, teaching, finances, and even fitness and relationships.
Soft Skills: The software developer's life manual Best Programming Books
The author of Zero Bugs spent two years researching every bug avoidance technique she could find. This book contains the best of them! It includes useful tips and techniques, and presents information in an easy-to-digest way and brought to life with stories and metaphors that make it a really enjoyable (and memorable) read.
zero bugs
Have any other “must read” books that you would add to the list? Share!