Skip to main content

Posts

Showing posts from July 3, 2016
Make a Donation 作为6年计算机科班、系统结构方向,我说说我对计算机专业素养的理解吧,希望对大家有所帮助。 知之者不如好之者,好之者不如乐之者,计算机专业也不例外。本科我是被选到计算机专业,大一因为C语言老师的激励而喜欢这个专业,并决定做系统结构研究的。兴趣入门,比如《计算机文化》(第10版?)、《编码的奥秘》(我觉得旧版比新版小开本更好)。传记类的《ACM图灵奖演讲集:前20年 (1966-1985)》《ACM图灵奖 (1966-2006):计算机发展史的缩影》《IEEE计算机先驱奖:1980-2006》。更专业一些,推荐《深入理解计算机系统》(CSAPP),CMU流传着这个段子:15-213,给CMU门牌的课程。这里的15-213,即以csapp为课本的Introduction to Computer System,也是匹村的邮编。Believe it or not,我就是因为这本书,立志研究系统结构的,另一个原因是利用VHDL编写了自定义指令集的cpu和串口,并在带有FPGA的实验台上使两者通信成功! 1)Programming Language 入门当然是C,否则都不好意思说自己是学cs。我当年用的是C Prime Plus,很基础。我就不明白有人居然推荐C之父写的C bible——The C Programming Language,我做编译器从前端做到后端,到现在还不敢说能理解C,居然某人认为这是最快的入门方法?C bible绝对是好书,但是肯定是进阶和reference必备。C进阶还有各种C专家编程,C与指针,C陷阱了,可以提高。之后是C++,java,C#就看科研/项目需要了。我认识的很多msra实习生都从C++转到C#,说什么编码效率高云云。反正我因为做llvm,就是C++一条道到黑。还有个大牛跟我说,按照某语言排名榜的说法 c++快挂了;anyway,大牛没给出出处,在TAMU的C++之父还在弄STAPL,并行版的STL,我觉得C++肯定还不是五丈原的诸葛半仙。C++入门,我用的是C++ Prime,注意,不是C++ Prime Plus。C++之父写的C++程序设计语言,其实比较难懂,入门之后可以翻一翻。C++的进阶书更多,各种Efficient C++,侯捷老师的STL源码剖析啊。(不好意思,我也只是知道,没看
Make a Donation 作为一个文科转码农的“成功”案例(去年成功拿到了两家StartUp 的Fullstack Developer 的offer), 我觉得除了楼上这些基本功之外,一些行业标准的技能也有必要趁早GET。以下是从web development的角度分享一些必备技能: Front End:  - HTML 比较简单,但是在开发过程当中活用HTML模板的技能是需要锻炼的。前端的伙伴们可以研究一下Handlbars.js , Underscore.js 或者直接研习React 的components; - CSS 入门也比较简单,但是现在业内很少让开发人员去hardcode (干写?硬写?真不知道该怎么翻译这个单词)CSS 代码了。一般都会用SASS或者LESS 来写,然后编译出高质量,高可扩展的CSS代码; - JavaScript: 这里面就说头太多了,本人在此有班门弄斧之处,还请各路英雄海涵:   - 首先区别一个概念,JavaScript 和 jQuery 不是一回事儿。jQuery是基于javascript的一个库,所以最基本的JavaScript 一定要熟练。能不用jQuery的地方就尽量不用(performance bottleneck)。同时,了解如何写出OO(面向对象)的JS 代码(这个在ES6里面比较容易,ES5里面可以说是 pain in the ass) 也是一大难点.    - 其次就是jQuery, 熟悉了基本的JS之后,就需要熟悉一下jQuery这一远近闻名的库,它的存在却是让web开发,尤其是AJAX 的调用简单了不少。同时,jQuery自带动画(animation),如果对于UI/UX 不是很讲究的话也可以顺手用用。   - 接下来就是掌握一个框架。JS 社区的高度活跃使得选择开发框架变的很overwhelming, Angular, Backbone, React, Ember, Knockout 等等。足可列出一个词汇表来。本人比较熟悉Backbone,总的感觉下来使用框架就是为了提高开发效率,提升代码质量,除去框架自带的API之外,项目最核心的部分归根结底还是需要自己来写, 所以如果跟Team,就选一个大家都比较欢喜的(或至少不那么反感的)框架;如果是个人的业余项目,就看
Make a Donation 1、编程语言:    a) 个人感觉看着习惯、用着顺手很重要(当然也与对应的工作职位有关);    b) 要想操作下面提到的"一个操作系统"(默认Unix/Linux),脚本语言非常有必要,推荐Bash,包括《sed&awk》,一行shell可以搞定的,也不需要十几行C/C++/Java;    c) 要想深入学习并理解"一个操作系统",这时C是必须的,推荐K&R的;另外还有一个简单易懂的:《How to Think Like a Computer Scientist - C Version》    d) 觉得可以按个人兴趣和工作岗位对应一下,如果以后台开发为主,则C++/Java;如果以前台为主,则Python/Perl/PHP;如果SA/DBA,则Perl/Python;如果数据处理/统计分析/金融/生物,可以考虑Perl/C++;    e) 这里要单独提一下"正则表达式",可以做为一种工作生活技能,最好可以掌握——《精通正则表达式》(Mastering Regular Expressions 3rd)    f) 实际工作中,很可能会遇到数据前台展示的情况,Web方面的东西可能在语言学习过程中会被忽略掉。就像前面同学提到的,可以从LAMMP入手,自己搭建起一个环境,然后使用些框架或模板,随便折腾,边学边实践,直接可以看到可视化的效果,对新人来说,是个不错的开始;相关资源推荐:http://coolshell.cn/articles/4795.html     g) 对于纯粹的初学者,可以考虑多接触下Python,入门易、风格佳~~MIT原来用scheme授课的都换成python了,facebook/google都在使用了……推荐《Python核心编程》;    h) 关于编程理论方面,推荐《程序设计方法》《计算机程序设计与解释》    ——以上言论,只是个人工作感悟,不涉及各个语言优劣哈~~ 2、操作系统:    a) 严重推荐一本打基础的书籍:《深入理解计算机系统》(Computer Systems - A Programmers Perspective)    b) 对于Linux/Unix不太熟悉的新人
Make a Donation 一.建议: 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。 一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。 一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。 注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下: 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》 所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。 二.入门 1、 学习一门脚本语言,例如Python/Ruby 可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目: 处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log) 遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果 跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量 学会用各种print之类简单粗暴的方式进行调试 学会用Google (phrase, domain, use reader to follow tech blogs) 为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。 2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具 Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。 Source Insight

想在美国找CS软件工作?WARALD提供需要学习的书籍和课程名单,绝对从入门级讲解!

Make a Donation 计算机(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

标  题: 转行CS,分享我独特的经历:回报社会,与君共勉

Make a Donation 发信人: LiDan1276 (LiDan), 信区: JobHunting 标  题: 转行CS,分享我独特的经历:回报社会,与君共勉 发信站: BBS 未名空间站 (Sun Jun 26 18:18:16 2016, 美东) 找到工作已经2个多月,终于有时间坐下来,写写自己转行的经历。一路走来多不容易 ,只有转行的人自己知道,当初就暗暗想,转成功了就一定要和大家分享自己的经历, 回馈给需要的人。 大概就如不幸的家庭各有各的不幸,转行的人也是各有各的原因。5年多工科PhD读下来 ,我对自己的方向与整个行业已经没有多少兴趣,毕业后100份简历换来了1个面试,最 终让我对这个方向彻底失望。在开始找工作后的第5个月,决定转行CS。这里说几点关 于转行的体会: 1. 兴趣。因为CS就业好、待遇高,成为很多人转行的首选。从现实考虑,理所应当, 但就业好、待遇高不能是唯一的原因。要把一个行业作为自己的职  业来发展,最重要 的是自己的兴趣。转行过程困难重重,也唯有兴趣这个源动力能让人一直走下去。 2. 心态。转行的人大多在一个行业或专业有所积累,转行前我是我们领域的专家,可 转行后,我成了小兵,一切又要重头开始,这种心理上的落差需要很长一段时间才能适 应。 3. 准备。因为是转行,跟同龄人比自己已经失去很多时间。相信很多转行的人都会内 心焦躁、急于求成,恨不得一分钟掰成两分钟过。但是,在关键问题上,一定要慢,放 慢脚步、做足调研和准备,这样的关键问题包括要不要转行,转去哪一个行业,具体做 行业里的哪个方向,如何转去这个方向并找到工作。 如何选择 对于我个人,当初这些问题具体是computer science, data science, mechanical  engineering,转哪个?在问过我的同学朋友们,了解过就业情况、转行难度、工作内 容,结合我的个人兴趣,最终定了CS。但CS也分很多方向,最终有些机缘巧合地选择了 web development。 “暴力转行” 我知道的人大多是自己刷题、做project,然后投简历、找工作。如果以前的经历和CS 有一定的相关性,那这种方式绝对是有效的方式。但我的PhD工作,除了用matlab,  fortran编编程,基

标  题: [分享]:转行CS成功经验

Make a Donation 发信人: amrita (Amrita), 信区: CS 标  题: [分享]:转行CS成功经验 发信站: BBS 未名空间站 (Sat Oct 12 02:32:18 2013, 美东) 看到很多朋友讨论转行的事情,问题集中在'我是非专业,能不能转,怎么转,学什么'上. 作为一个成功转行的人,我来分享一下个人的经验,希望对大家有所帮助. 先说下个人情况:[起点]高考失利,被国内三本降分录取,服从分配到农学专业.[终点] 微软SDE.这里向大家传递的第一个信息是--起点这么低的人都能转,这些硕士博士、腿 肚子都比我脑瓜子聪明的人,怎么就不能转?要有信心,要有勇气! 下面分享一些转行过程中的关键点(正向能量)、痛苦(从中学到了什么)和弯路(你 应该避开). [核心]转行指的是要在CS行业工作,而不是说新学了一堆CS的理论知识.所以,未来的学 习过程中要以培养生产力,无论是开发能力,还是测试能力,还是组织协调能力(文科同 学有可能会转项目经理或者产品经理).理论知识有助于更扎实地使用你的技能,但这回 是处在辅助地位.学位学习是知识为主,技能为辅,转行学习要倒过来,技能为主,知识为 辅. [关键点0]不要在‘选择’上浪费太多时间,心动不如行动,想好转了就马上开始计划 ,然后开始学习。很多人就是在拖拖拉拉的选择过程中几年也没转成。要开始学了,那 就选准一个方向(语言和程序方向,详见后面)开足马力学,不要纠结于“我是学Java 还是.NET?”“XXX语言好还是YYY语言好?这个的缺点是什么、那个的缺点是什么……” [关键点1]你不必多喜欢计算机,但至少不能讨厌,不然它不能吸引你反而互相排斥,学什 么都学不进去的. [关键点2]正确的计算机操作,很多人笑了.但你问问计算机玩的好的人,正确的指法和飞 一样的操作给他们带来了多少好处. [关键点3]清楚的语言表达能力(女生有这方面的天赋).现在的程序大多是面向对象编 程,写程序基本上跟聊天一样.语言能力好的人思路清晰,用词准确,组织有条件,程序的 要求是一样的.如果你未来成为软件工程师,看到一堆胡言乱语般的代码,不信你找写代 码的人聊聊天,他说话肯定也那样.而且你想,汉语或者英语这么复杂的语言你都能说好, 词汇量不