在上课的时候你可能会有这样的经历:一门课非常复杂晦涩,你学得非常痛苦,并且不断怀疑所学的东西有什么用。直到有一天你遇到一个问题,恰恰能够用这些知识来解释或者解决而恍然大悟。

就比如说,学编程的人往往遇到一个问题:「如何使用两个栈来实现一个队列」。当初学习的时候总以为这只是一个纯粹的技巧,除了面试之外并没有什么用。直到有一次我面试的时候从面试官那里学习到这是一种将读和写分离的方式,在某些情况下能够提高并行程序的效率。还有就是上数字逻辑课的时候感觉到非常不解,觉得我计算机系的搞这个干什么,我们不是只要学编程学演算法就行了,搞什么卡诺图状态机。直到在演算法课和编译原理上认认真真学习了有限状态自动机、正则表达式才明白这些东西都是相通的。

再比如,大学里学过一门课叫做《近世代数》,当时学群环域的时候满脑子都在想「这是什么鬼东西」,直到后来遇到一些问题的本质是置换群,从而可以进行解释和分析才恍然大悟。

我提出这个问题就是在反思以前对于学校开课的态度,以前认为不合理的东西,其实多多少少都有些合理性的,只是当时都不肯学不肯下工夫。希望能从大家那里听到更有趣的经历。


class Solution(object):
def isNumber(self, s):
"""
:type s: str
:rtype: bool
"""
#define a DFA
state = [{},
{blank: 1, sign: 2, digit:3, .:4},
{digit:3, .:4},
{digit:3, .:5, e:6, blank:9},
{digit:5},
{digit:5, e:6, blank:9},
{sign:7, digit:8},
{digit:8},
{digit:8, blank:9},
{blank:9}]
currentState = 1
for c in s:
if c &>= 0 and c &<= 9: c = digit if c == : c = blank if c in [+, -]: c = sign if c not in state[currentState].keys(): return False currentState = state[currentState][c] if currentState not in [3,5,8,9]: return False return True


文言文和诗词。

有时候会觉得此时此刻所想的就是诗词里面所写的。
@吴军 老师的《数学之美》

其实,个人觉得当初你认为这些知识「没用」,跟教材也有很大的关系。

国内的教材一般直说「应该怎样怎样」,但是从来不谈知识点的背景和来龙去脉。其实每个理论都有从问题提出到解决到被提炼成理论的过程,如果大家理解了这个过程,就会觉得很自然了。

前面有答主说的TCP/IP协议是很好的例子,这种标准化的协议每一个步骤都是经过前人反复试错检验的结果。但是如果只说应该怎么做,第一次看到肯定头大。


下动作片的方法同样可以下电影,下教程


推荐阅读:
相关文章