Pages

Thursday, 19 April 2018

计算机相关技术资料


这里收录比较实用的计算机相关技术书籍,可以在短期之内入门的简单实用教程、一些技术网站以及一些写的比较好的博文,欢迎Fork,你也可以通过Pull Request参与编辑。

目录

语言无关类

操作系统


web服务器


版本控制


编辑器


MySQL


NoSQL


项目相关

设计模式


Web


大数据


编程艺术


语言相关类

AWK


SED


Java


Android


C/C++


CSS


Go


Groovy


Haskell


iOS


JavaScript


LaTeX


LISP


Lua


Perl


PHP


Prolog


Python


R


Ruby


Scala


Scheme


Shell


Swift

from https://legacy.gitbook.com/book/uuie/practical-programming-books/details
---------

关于 IM 工具

由于我们的好朋友 WYS 并不能够使用 Telegram,选了个 HipChat,和 Telegram 类似,但是社交性质更差一点,是给公司用的。
注册链接
这是注册链接。最好微信还是加我一下 @CircuitCoder 刘晓义,万一 Hipchat 上不去了还找我有事呢?

关于快速赚钱

今天下午扯淡扯得太欢脱了,发现只说了快速赚钱的部分,没说不快速赚钱的部分,嘻嘻
为了防止各位误解,在这里澄清一下。当时语境是说有快速赚钱的部分,也有不快速赚钱的部分。举例:
  • NLP 自然语言处理
  • CV (Computer Vision) 计算机视觉,曹老师的专业,包括人脸识别,光学文字识别,提取图片信息等等
  • AI/ML 人工智能/机器学习,通常来说是上面那些服务的实现方法。很多你们可能觉得没法解决的问题都是用这个解决的,比如翻译,根据信息搜索图片,等等。比较好玩的地方在于一般学习出来的结果,人们都看不懂是怎么回事。
  • 图像引擎 做游戏,做渲染,等等,研究怎么搞得快
这些可能是更接近各位认为的 CS,也是更接近所谓“学术”的领域。但是事实上这些在 CS 的分类里都算做 Applied Computer Science,所以说到底也都是为了商业、军事服务的,也就是我所说的不是一般人都能赚到的钱。这一部分和物理数学不同,都是很实际的学科,而不是所谓探索宇宙真谛云云。在这些领域的进步是能够反映到大约两年至五年的商业中,这个速度是远大于物理、生物等基础学科的。
当然,这些技术还可能被应用在其他一些科研学科上,比如现在有很多经济学家使用机器学习的方法研究经济现象,或者物理学家使用下面提到的 Python 语言进行计算。但是总归总,这也是很少数的一部分。
关于提到的真正的纯理论领域,CS 涉及的有:
  • 编码学,密码学 如何以最高的硬件或者时间效率保存信息,以及如何安全的保存信息。
  • 计算理论 什么东西可以算。举例:停机问题:不存在一个程序能够在有限时间内预测另一个程序能否在有限时间内结束(你已经能看到数学家的味道了)。
  • PL/Compiler 这两个很近,一个是 Programming Language,研究编程语言的设计,一个是 Compiler,研究编译器的设计
  • 算法以及数据结构 怎么算得快
最后这个层面 算法以及数据结构,是竞赛中经常涉及的。
具体可以看Wiki的介绍
所以总之,还是有不少方向的,下午的时候我可能说的比较绝对了。
关于一切App的开发,都属于软件工程学,也就是 Applied CS 最后的一层,只是 CS 很小的一部分。

选择领域

这里有一些关于研究领域的推荐
软件工程学最简单,也最好上手,但是最后的结果类似 Handicraft。总之能够有一些挺好玩的事情。
人工智能 或者 机器学习 也是个好方面,因为现在算是学术风口,Google 开源了 TensorFlow,百度开源了 PaddlePaddle,都是做机器学习的,所以想要找国外的资料或者国内的资料都有。
Computer Vision 也是很好玩的,现在 ML 发展很快,之前很多的问题用 ML 重新做一次效果拔群,所以最近也是论文大爆发。曹老师是之前做这方面的,所以看各位能不能有幸活到她过完产假回来。
不推荐研究计算理论、编码学和算法。这里研究不是学习,而是指尝试做一些新成果,因为这些领域真的已经有好久好久没有更新了,大学在这些方面投入的资源也不多。当然你要是真的喜欢,另当别论,我并不是说这个就是比其他的无聊一些。

关于工程学

关于工程学多说一点,因为我做这个的,嘻嘻。现在说是开发 App,事实上指三类人:搞 Android 的,搞 iOS 的,搞 Web 的。最后一个指做网站的。Web 是最好上手的一个,因为它用的语言比较好学,比较好用,而且天生自带跨平台(是个智能手机都有浏览器)。

选择编程语言

C++ 是个好语言,学了 C++ 基本学其他的语言都比较容易了,因为它既涉及了计算机的架构,也涉及了面向对象等较为先进的编程理念。这里会说一些挺好玩的其他的语言:
  • Java 纯面向对象语言,对于 C++ 的优势是能够跨平台运行,编程过程没有 C++ 那么痛苦,库很多很多很多,基本上工程里面想干啥都有造好的轮子,而且是 Android 上面多用的编程语言,最近跟着 Google 飞了一会。也是很老的语言了。
  • Python 科研 & 工程用语言。Python 的优势也是库多,而且开发比 Java 快,并且自带跨平台。Python 出名出在它上面有一套类库叫 SciPy,图表打爆 PPT,符号运算打爆 Mathematica,并行运算打爆一般本科生手打的 C++ 代码,因此在科研界十分出名。Python 做 Web 开发也是很常用的。
  • Javascript 上面提到的,用在 Web 上的主要语言。特点就是写起来爽,约束很少,并且现在还在很快的发展中,是一个很有活力的语言。最近忽然成为 Web 界大哥是因为 Node.js 的出现,解决了传统 C++ 做网站后端的并发问题(举例,服务器要读文件,那么代码的执行就要卡住。这时 C++ 写的程序只能等,Node.js 写的程序能够干别的事情)。
  • Ruby 工程用语言,打着的旗号是对人十分友好,并且对它“有7种求1-100和的方法”十分自豪。由于一个在它之上建立的 Web 开发框架 Rails 十分的厉害,Ruby 现在基本靠 Rails 苟延残喘。
  • Haskell 概念语言。之所以用概念语言是因为这个语言和上面那群腊鸡都不一样,这个语言是纯函数式的。上面那些语言都是指令式的,意思是都是一行一行执行。Haskell 的写法和数学更接近,定义一串函数的解析式,然后去直接求值。这个语言里没有指令的概念。
    square :: Int -> Int
    square x = x * x
    以上这段代码定义了一个函数,叫做 square,干的事情就是平方。第一行意思是说 square 拿一个整数做参数,返回一个整数,第二行是 square 的表达式。这给 Haskell 带来了很多上面的语言没有的特性,是很有趣的一门语言。
  • Rust 一个新生的 C++
  • Go 一个 Google 爸爸造的专门用来写 Web 服务器的语言,解决了 Node.js 解决的一部分问题。
以上这些语言都可以自由选用,但是更推荐每一个都看看。除了 Java,其他的语言都是新生的语言,官网上都有类似 Try xxx in 5 minutes 之类的教程,所以看一看是不会花太多时间的。

一些书

基础

C++ 基本上算是以上大多数的基础。入门 C++ 今天提到了一本书叫做
  • C++ Primer Plus
如果各位对 C++ 本身比较感兴趣,希望能够写出高效优雅的 C++ 代码,我推荐如下的书(都有中文版)
  • The C++ Standard Library - A Tutorial and Reference (C++标准库)
  • Inside C++ Object Model (深入C++对象模型)

Java

  • (完全无编程基础) Head First Java <- 大半本漫画书
  • (有编程基础) Thinking in Java <- 这个作为入门书在业内毁誉参半,很多人认为对初学者太难
剩下的语言... 学完 C++ 基本在网上都可以学了吧,十分轻松。在下面会有一些网站。

竞赛

如果各位希望做竞赛,或者希望能够对上面说的算法及数据结构有一些了解,可以看这本书,大概谈到了如何解决一些常见的问题:
  • Introduction to Algorithms (算法导论,很有名)

其他

如果各位想学学自己做一个编程语言,有一本书,俗称龙书,引为业界传奇,可以看一看。

网站

这些网站很厉害:
  • Codecademy https://www.codecademy.com 可以在上面学一些编程语言或者涉及的工具,比如 Java,Ruby on Rails, Javascript, Python, Git 等等
  • Codeforces https://codeforces.com 今天说的那个打比赛的网站。对于各位可能会比较难,而且是全英文的。
  • Github https://github.com 全球最大同性交友平台(嘻嘻),其实是开源代码平台。开源至一群人把源代码在特定许可证下公开的行为。Github 上有很多高手做的项目。
  • Github explore http://github.com/explore 这里会实时刷新 Github 上面最受人关注的项目,可以作为刷 Github 的入口。
  • HackerNews 小型 Reddit,整天发一些挺好玩的关于技术圈的新闻。这个最好在手机上下个阅读器,因为原版网站太难看了。
顺便一提,Github 上有一个 Repo,放了很多很多免费的书,上面我说的大多数都有,Repo 名字叫做 free-programming-books,直接搜索就可以找到。

工具

加入高等研究实验室可能会需要对以下工具有所了解。

Git

直译饭桶,是管理源代码的工具,扩展开来可以用来管理大多数以文件为基础的多人合作项目,提供的功能是能够让多人同时修改一个项目内的文件,标记各自的修改,可以查询任意一个时刻的历史状态,并且能够很简单的合并多人做出的更改。
Github 是以 Git 为基础的。实验室有一个内部的 Git 服务器在 git.thsitg.org,可以放一些私人项目,因为 Github 的私人项目是要交钱的。

Google

熟练使用 Google,因为你用 Baidu 真的查不到专业性太强的信息,而且广告一大堆。
如果你在 Google 上看到了以下网站,基本可以认为问题已经解决了:
  • Stackoverflow 以及 StackExchange 有关的一票子网站: 理工专业向百度知道
  • MDN: 这个我在做 Web 开发的时候经常遇到

一个拿手的编辑器

无论如何,进了实验室,不是写代码,就是做设计。有一个拿手的编辑器,可以大大提高效率。推荐的代码编辑器有:
  • Atom: Github 爸爸搞得,十分的好用
  • Sublime: Atom 抄袭的目标,最近有点颓
  • Visual Studio: 写一些和 Windows 系统有关的代码的话,是无敌的
  • Vim: 自虐以及服务器管理用,是我的编辑器,嘻嘻
设计师用的软件我不太了解,在这里说两个我觉得比较爽的:
  • Sketch: 做 App 和网站设计十分的方便,就是有点贵,而且只能在 Mac 上用。我之前买了一个,可以找我要序列号
  • Adobe Illustrator: 优于 Photoshop 主要在于矢量以及对 App/Web 设计的一些优化。

一款拿手的游戏 (可选)

嘻嘻,在我们屋子里可以经常看到这些游戏:
  • Starcraft II
  • Overwatch
  • Protal 2
  • Osu
from https://gist.github.com/CircuitCoder/fc7a795f430d9521a18f8b04656cde04

No comments:

Post a Comment