3.千万不要成为书籍收藏家。我有一个同学,不客气的说,真是废物。他热衷于从各种渠道询问“学XXX看什么书比较好”,最后买了一堆书放在书架上,一页都不看,每天照样看知乎自High。

 

作者:vonLynnShawn
链接:https://www.zhihu.com/question/29745861/answer/65068214
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

买书不像娶老婆,娶了一本书就不能娶另一本书;买书也不想买房子,买了北京的房子就没有钱买上海的房子了。我不可能喜欢A的时候同时向B表白,但是我完全可以买了A书以后再看B书啊!同时买多本书是没有排他性的。

与其在知乎上寻找虚无缥缈的心灵鸡汤,还不如手脚麻利的开始看书。我从来知乎上问“选XX方向有没有前途”或者“XXX书籍怎么样”,有这些时间我自己早就把目录和简介章节读过一遍了。

四年来,我浏览过的方向涵盖Java开发(语法、性能、设计模式、框架)、Python开发(爬虫、网页、数据分析)、数据库管理(MySQL、Hive、MongoDB、Redis)、前端、产品、体系结构(CSAPP)、编译与操作系统(龙书)、数据挖掘、机器学习,还有一些偏门到你想不到的方向,例如工业信号控制、银行资格考试、注册会计师、法理学、信息经济学等等。

鄙人在本科期间的可查图书总开销为:10793.36元(不含现金或者其他平台的交易)

2014年度:762.03(淘宝) + 无(京东)

2015年度:2140.97(淘宝)+ 100.7(京东)

2016年度:2356.35(淘宝)+ 76.3(京东)

2017年度:1094.58元(淘宝)+ 3500.4元(京东)

2018年度:0(淘宝)+ 0(京东)—— 保研以后给报销了


我这些年读这么多书,不求掌握多少,只求做出人生决断的时候一点都心慌。

谁的人生没有迷茫过,我上大学之前想当一个注册会计师,报考了会计专业,后来被调剂到管理科学与工程,大一的时候早早考了会计从业资格证,同时准备着证券资格考试和转专业考试;接触到C语言之后,我没有表现出抗拒,我学完了C语言和计算机基础;在大创项目的过程中,我接触了IT的世界,那时是移动互联网的草莽年代,大一的夏天我在Android Studio中埋着头读过,理想也动摇了;大二的转专业考试我根本没有参加,我选择了留在信息管理专业,准备做一个Java程序员(Android工程师或者后端都可以);做了一段时间以后,我们摸清了这个方向的技能树,但是我没有一头扎进去;大数据时代的风暴起于青萍之末,我接触到了数据挖掘和管理,包括算法和大规模数据的存储与管理,我自学了韩的《数据挖掘导论》,自己搭建Hadoop和Spark;从大三开始到现在,我的方向终于确定在了Data Science上了,最后的保研方向也选择了人工智能。

我敢说我不后悔,我没有看见同学选了某个路而眼红,因为我自己在迷茫的岁月里把全部的闲暇时光花在了探路上。你马上要走的路,我已经好好的试过了,我不会问“当初选择XXX会不会好一点”。


回答评论区的众多疑问:

你说的编程语言是一门体系,那你能否告诉我该怎么入手?我什么基础都没有!

我建议:从最简单的任务开始做起,逐步增加任务难度,通过同时减少程序运行时间和编程本身耗时来提高水平

场景一:

对数组[5,36,76,4,23,1,4]完成排序

这时只需要随随便便一个排序算法就可以完成任务(学习语言本身)

从txt文件中读取[5,36,76,4,23,1,4]并完成排序

这时需要了解语言自带的读取模块,了解文件读写过程(文件IO技能get!)

对10000元素数组[5,3.......23,1,4]完成排序

这时可能需要用快排、堆排等算法(数据结构与算法技能get!)

对10000000000个元素的数组排序

首先要解决这么多元素应该用什么方法存储,然后切割文件,完成多重归并排序。如果有兴趣可能还要搞一个类似Hadoop/Spark的计算框架(大数据技能get!)

 

场景二:

写一个Java后端框架,模拟一个电商平台

用MySQL建几个表,Java这边用Tomcat服务器草草一搭建,语言用的是JSP(好歹数据库技能Get!)

数据库要多七八个,功能页面接口要多十几个

不能手写数据库模板代码了,要换Hibernate或者MyBatis了;JSP扔掉改成Spring MVC框架;然后全局换成Spring做管理(现在知道什么是依赖注入了吗?知道了什么是生命周期管理了吗?知道什么是SSM了吗?技能Get!)

数据库的储存量要加大,读写速度要快,特别是查询

先搞个线程池短时间应付一下啊。背后马上在MySQL上面插上一层Redis做缓存,加快查询。为了排山倒海的数据理,又是分库又是分表的,把MySQL改成异地多机主从分离定期备份。(????啥都会吧)

再往下走我就不知道了,我现在搞的是机器学习,中间件估计都要被你整出来了……

 

场景三:

一个人写十多行的课后作业

随便写

写百余行到上千行的课程设计大作业

可能要用Git来管理一下代码版本,然后熟悉一下文本编辑器例如Vim或者Sublime

一堆人做一个项目

熟悉GitHub的基本操作,如果是涉密项目,还要自己搭建Git服务器(一通Linux操作猛如虎)。

几百万人做项目

分布式的Git貌似无法存储如此大的代码量,这时可能又要回到自制中心管理的路子上。

 

所以说从体系的角度来看,编程任务有三重难关:

1.对语言本身不熟悉;

2.对相关类库和框架不熟悉;

3.语言本身不适合你的工作;

 

在评论区提问的初学者应该是第一阶段的,希望你们多给自己加活。