
“看到有这么多人为了生活努力着,我感觉自己又活过来了。”











转自:https://mp.weixin.qq.com/s/mrghM5I-X86iIg2P-vGKDA
分享个人经验,保留阅读记录,做时间的朋友

“看到有这么多人为了生活努力着,我感觉自己又活过来了。”











转自:https://mp.weixin.qq.com/s/mrghM5I-X86iIg2P-vGKDA

转自:https://mp.weixin.qq.com/s/U4kLTUeNcVw4Hf0odcAUNA

今天,中国人民银行、中国银保监会、中国证监会、国家外汇管理局对蚂蚁集团实际控制人马云、董事长井贤栋、总裁胡晓明进行了监管约谈。

最近,有点发福的马云说了很多“破格”的话,在金融圈捅了“马蜂窝”。
他炮轰传统银行是“当铺思想”;嘲讽巴塞尔协议像一个“老年人俱乐部”,扼杀创新;指出中国金融问题不是系统性风险,而是缺乏金融生态系统。
马云是10月24日在第二届外滩金融峰会上说这些话的,当时被很多人力挺,也被大量传播,外界认为那个敢于开炮的马云又回来了。
不过,舆论很快就发生了变化,后来,陆续有官方监管机构和官方媒体站出来批评马云,有些指名道姓,有些比较含蓄。
财政部副部长邹加怡:要避免金融科技成为非法套利的手段
邹加怡表示,要建立、遵循相应的市场规则,防止金融科技诱导过度金融消费,防止金融科技成为规避监管、非法套利的手段,防止金融科技助长“赢者通吃”的垄断。
邹加怡指出,金融科技并没有改变依靠信用、使用杠杆的金融本质,在提升服务效率、增强金融可及性的同时,也加大了对金融安全的挑战。
“面对疫情冲击,《巴赛尔协议III》实施期限适度放宽,各国金融监管容忍度适当提高,对维护金融稳定和推动经济复苏,发挥了重要作用。”邹加怡表示,放松监管必须审慎有度。随着疫苗研发取得突破,明年全球经济可能加快复苏,金融领域容易出现自我循环、放大杠杆、积累泡沫的情况,需要适时调整金融监管政策。
中国金融学会会长周小川:一些年轻人过多地靠借债过度消费、奢侈消费
周小川表示,往远看,中国的储蓄率还会进一步地变化,就是在“双循环”特别是内循环为主的发展战略情况下,内循环将会更加畅通。
周小川提醒称,他还密切观察到中国年轻一代的储蓄率在明显下调,这有好的方面,有助于扩大内需;也有令人担心的方面,就是一些年轻人过多地靠借债过度消费、奢侈消费,将来是不是好事也不完全知道。但是总的来说储蓄率会进一步地调整。未来“一带一路”的融资格局会与此相关。
十三届全国政协经济委员会主任尚福林:金融科技不能违背金融运行的基本规律
尚福林建议,为更好利用金融科技,就要坚守金融科技服务实体经济的定位,并拓展其在普惠金融领域应用。
同时还要突出金融属性,防范金融风险。尚福林认为,金融科技本质上是一种技术驱动的金融创新活动。无论叫金融科技还是科技金融,始终不能忘记金融属性,不能违背金融运行的基本规律,否则必然会受到市场的惩罚。
“这样的教训比比皆是。”尚福林说,前段时间的网络借贷、虚拟货币交易等活动,很多是披上了“金融科技”外衣的金融乱象,要坚决加以整治。
此外,尚福林认为,加快金融科技监管步伐也必不可少。
“数字信息传播速度快、关联广、影响大,依靠现场检查或者非现场监管报表人工分析研判的传统风险防范模式越来越难以应对。”如何监管金融科技?尚福林说,一是完善监管框架。密切监测基于科技创新的业务模式变化,建立规范化的监管规则标准。
和上述官员表态不同,官方媒体则是直接批评马云的相关言论。
光明网:马云的问题不是张冠李戴那么简单
由中共中央主办的光明日报旗下的光明网10月26日发表了题为《马云所言或未危言耸听却张冠李戴》的评论员文章,称马云问题不是张冠李戴那么简单。

如果看看当下中国金融业里昨天“跑路”今天“爆雷”的景象,马老师所言指的中国金融业监管存在问题,当为不虚。但是,究竟存在什么样的问题,却不是“问题”二字所能涵括。显然,如果真如马老师所言“这个不许那个不许”,那么就不会有支付宝、蚂蚁金服。如果事实上就是存在“这个不许那个不许”,中国手机支付的用户规模却能“弯道超车”至全球前列,同时也存在此起彼伏的“爆雷”,那么只能说明金融监管管的不是地方,该管的没管,不该管的反倒管了。
可是,如果说金融监管是不该管的管了,该管的没管,那么,支付宝、蚂蚁金服这样的金融创新应该归类于“老年人俱乐部”下的“该管”项,还是“该管没管”项呢?
“这样的逻辑矛盾,非有先置的张冠李戴而不可。当然,问题可能还不是张冠李戴这么简单。因为马老师上述演讲,并非是茶余课后的闲篇,而是在蚂蚁集团就要上市(IPO)大背景下的有的放矢。“文章称,最近一段时间,蚂蚁集团的估值不断攀升,其最新数值已超3万亿,将成为有股票市场以来规模最大的IPO。然而,所谓市值者,股民的钱是也。
这么多股民的钱,怎么监管是个问题,没有监管则是万万不行。
文章称,巴塞尔协议是否为“老年人俱乐部”是一回事,该不该由“老年人俱乐部”管则是另外的问题。正是在2008年金融危机后,巴塞尔协议(III)对蚂蚁金服类的金融业务一并纳入监管。没有这种监管,IPO规模和“爆雷”的声响肯定会成正比。
证券时报:不能简单地把监管对立化
人民日报主管的证券时报10月27日发表了题为《把金融监管对立化有失公允》的文章,指出“简单地把监管对立化,甚至抱怨监管的硬约束在根本上阻滞了金融业务的发展和创新,于逻辑、于现实都很难讲得通,且显失公允。”

文章称,不惟银行像当铺,马云最为钟爱的“蚂蚁”,和当铺也不存在基因层面的差异。前者主要围绕有形的抵押资产做文章,而后者更多接受的是无形的信用抵押。就“抵押约束”和欠钱要还而言,无论是像当铺的银行,还是以未来为己任的“蚂蚁”,实在是同一个战壕里的战友。
就外部监管的出发点而言,监管的目的,显然在于对监管对象安全的维护,只有在安全的基础上,无论是银行,还是当铺、“蚂蚁”,才能更好地生存、发展,才能更好地为实体经济、社会以及贷款人提供各自的服务,并在这个过程中实现各自的利益和发展。外部监管的初衷,显然不是把一个人或者一个系统束缚住、限制死。
“在可预见的时期内,来自外部的监管和约束,不会有本质性地放松,而且随着技术手段的进步,监管将更有效率。只有在有效监管的框架内,金融业务的发展和创新,才有可能,才有足够的拓展空间。”文章称。
以上五个表态,并非空穴来风,也不是一般人茶余饭后的闲聊,而且都来自官方,背后的深意大家自己意会。
周六,刘鹤主持召开国务院金融委会议。当然这主要是为了学习十四五规划,提出2035远景目标建议;但与此同时也对过去一周大家争论最多的金融监管和金融科技的关系做了定调。
一、第二部分开篇即定调:“当前金融科技与金融创新快速发展,必须处理好金融发展、金融稳定和金融安全的关系。”
会议纪要第一部分主要是老调重弹,包括注册制,银行改革,化解金融风险,整治乱想,增强金融普惠性,强调金融服务实体。
我反而认为第二部分谈监管和创新关系是更加具有针对性,其隔空喊话的性质更加明显。
二、金融委:“要落实五中全会精神,坚持市场化、法治化、国际化原则,尊重国际共识和规则,正确处理好政府与市场的关系。”
金融监管最核心的国际共识就是巴塞尔监管框架,也是马云外滩讲话中批评最尖锐的部分,称之为资本监管垂垂老矣。金融委此次旗帜鲜明地指出,对于国际基本的监管共识需要尊重,并坚持在现有的金融监管框架下,市场化法治化处理市场和政府关系。简单来说就是:蚂蚁金融也好,其他金控也好,子公司金融板块应遵从一行两会监管框架,母公司很可能纳入央行金控监管。
其实资本监管本来和蚂蚁关系不大,毕竟整个蚂蚁金融的确很少承担表内信用风险,风险都是资金方承担。但是马云外滩喊话又偏偏重点痛批资本监管,所以这次金融委会议重点把资本监管国际共识拿出来,给马云醒醒脑。
也详细分析了对于蚂蚁金融的各个板块,尤其是对于蚂蚁小贷这个板块,资本监管不可或缺。
三、金融委:“既要鼓励创新、弘扬企业家精神,也要加强监管,依法将金融活动全面纳入监管,有效防范风险。”
这句话我认为最具有针对性。至少你蚂蚁集团需要全面纳入监管。
虽然国内金控集团不止马云的蚂蚁金服,但是蚂蚁金服最具有争议,此次外滩论坛喊话也最具有争议。所谓争议不在于口水仗,而是到底怎么管类似蚂蚁金服这样的金控,其号称主要是科技驱动的公司,实际从事金融业务不多,信贷都转给别人了,基金也只是代销,支付业务全部场景化,支付账户央行已经管得死死的。
就分品种看,蚂蚁旗下网商银行肯定遵从资本监管;蚂蚁小贷虽然没有资本的概念,目前ABS和信贷转让需要遵从4倍杠杆监管;联合贷款需要遵从互联网贷款新规监管;货币基金已经纳入证监会货基的监管框架,但是未来央行可能会纳入系统重要性监管框架。支付宝已经在央行支付机构管理体系中。
但我觉得显然上述分而治之的金融监管思路肯定不够,金融活动全面纳入监管分量足够,也为未来央行的金控监管做了框架性铺垫,至于到底怎么管仍然没有细则。比如集团公司治理结构,比如货币基金需要按照平台整体规模认定系统重要性。比如蚂蚁小贷规模可能是自持+ABS+银行信托通道放款+联合贷款认定规模。
四、金融委:“监管部门要认真做好工作,对同类业务、同类主体一视同仁。要监督市场主体依法合规经营,遵守监管规则,完善公司治理,履行社会责任。”
对同类业务、同类主体一视同仁,这是功能监管的灵魂,也是最初金融委最核心的使命之一。因为国内的金融监管现状是机构监管,这就导致不同金融牌照做同类业务时,面临的监管要求不一样,最终导致市场主体有了寻求监管套利的空间。
从机构监管向功能监管过渡,这个定位自2017年的全国金融工作会议后就定调了。但这实施起来困难重重,因为一行两会都有金融监管职能,发改委和财政部也保留了一部分,所以需要金融委作为更高级别的协调机构确保从业务维度切入,防止金融创新变成监管套利。
这句话尤其适合蚂蚁集团,确保金融普惠性同时,做好立法立规及时跟进。比如2018年对货币基金垫资T+0赎回限制,银行理财现金管理类产品需要和货币基金完全靠拢防止流动性风险,蚂蚁小贷ABS从2018年开始纳入表内计算杠杆率,未来系统重要性金融机构可能会对更多蚂蚁集团表外业务有准备金和资本金要求。
五、金融委:“要健全公平竞争审查机制,加强反垄断和反不正当竞争执法司法,提升市场综合监管能力。”
这也是针对性极强的一句话。目前的蚂蚁集团,不论是蚂蚁征信,还是消费金融小贷,或者支付宝,都已经初具了垄断的雏形(货币基金垄断还早,更多是流动性风险外溢可能性需要强化流动性监管)。
国家市场监管总局承担反垄断统一的执法职能,设立了反垄断局,反垄断的职能主要集中在反垄断局。国务院反垄断委员会,包括国家市场监管总局在内,反垄断委员会由14个国务院机构组成。
国务院反垄断执法机构是指国家工商局(负责非价格垄断协议、非价格滥用市场支配地位、滥用行政权力排除限制竞争行为的反垄断执法)、国家发改委(价格)、商务部。
发改委副主任连维良也是金融委成员,相信也是他此次参会主要议程。
当然,后续具体执行和调查还需要和市场监管总局协调。市场监管总局不是金融委成员,预计没有参加此次会议。
六、金融委:“要督促上市公司规范使用募集资金,依法披露资金用途。”
乍看之下,这个和蚂蚁主业没有关系,但联想蚂蚁集团两地上市有2000亿以上资金募集,招股说明书显示:

但最终如何监控资金用途,确保中小股民利益,将是证监会监管重点。证监会主席也是金融委成员之一,相信他是这个议题主要参与者。
七、金融委:“要建立数据资源产权、交易流通等基础制度和标准规范,加强个人信息保护。”
数据交易产权和交易基本制度规范,这针对蚂蚁最核心的命根子,就是你蚂蚁集团那么多个人信息其产权归属,需要专门立法立规,并不是你收集的就归你。
目前,所有立法都是基于个人信息的收集、防止泄露方面,尚未涉及数据资源产权和交易流动等领域,而这恰恰是蚂蚁集团在蚂蚁征信、蚂蚁小贷(包括自己贷款和联合贷款)、网商银行等板块展业的基础。
关于个人信息保护相关立法,2019年5月国家互联网信息办公室颁布《数据安全管理办法(征求意见稿)》,对网络运营者收集和使用个人信息做出了规定。2020年3月6日国家市场监督管理总局、国家标准化管理委员会发布《信息安全技术个人信息安全规范》,对个人信息收集、储存、使用做出了明确规定,个人信息主体有查询、更正、删除、撤回授权、注销账户、获取个人信息副本权力。
2020年10月商业银行法征求意见稿第七十六条规定:
1.收集、使用个人信息。
商业银行收集、保存和使用个人信息,应当符合法律、行政法规的规定,遵循合法、正当、必要原则,取得本人同意,并明示收集、保存、使用信息的目的、方式和范围。
商业银行不得收集与业务无关的个人信息或者采取不正当方式收集个人信息,不得篡改、倒卖、违法使用个人信息。
2.防止泄露和滥用。
商业银行应当保障个人信息安全,防止个人信息泄露和滥用。
3.因业务原因个人信息需要提供给第三方或境外。

转自:https://mp.weixin.qq.com/s/fz8xZ9Fr1DwOM5v44lCNPw
来自公众号:编程指北


开局两张图,剩下全靠吹了。
上面这两张图便是写这篇文章的原由。
对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑。
透过屏幕,似乎看到了大一时的自己,不会装环境、不知道怎么编译,报错也不会解决,更不知道除了计算水仙花数、打印乘法口诀表…还能写些什么。
感同身受让我觉得有必要认真的好好回答一下(其实是因为这是小姐姐问的😝,也算是对大一时的自己一个隔空对话。
做公众号短短这一个多月,我在后台看到过不少类似问题的,每次看到学弟学妹们这样认真又略带迷茫的提问,其实是比较有压力的。
怕自己不能够站在他们的境地去思考问题,搞成了「B」乎似的回答,也担心自己的回答不能帮到他们,甚至在某些方面对他们产生误导。
所以一般我都是选择回答比较政治正确的那种,比如:
“加油,你要多去实践,xxx”
“嗯嗯,你要多去看书,balabala”
“刚开始都是这样的,你多坚持一下呢,xxx”
…
怎么说呢,这都是正确的废话,谁都知道要多看书,要实践,要去动手写代码。
有时候想回答得更细致一些,但是迫于各种原因,也没时间去挨个的回复。
但这次学妹特地打了很长一段字,我看到了她想要快速适应计算机学习却又不得其法的迷茫,也许我的回答会对她有所帮助呢?
因此我让她描述得更加细致一点,也很好针对性的提出一些建议。
不过首先申明下,本文主要是以回答学妹的问题为主线,面向的对象是大一、大二以及自学还未找到合适的学习编程方法的同学。
如果你已经有了自己的一套方法论,或者说已经工作了,那本文对你几乎没有参考价值,建议直接拉到末尾点个赞~
可能有小伙伴没细看聊天截图的内容,我在这里再贴一次学妹的问题:

下面是我抽出来的一些问题:
1、只会像高中一样跟着课程学习
2、怎么可以脱离课本和教学视频自己编写一个小项目?
3、停于理论,不知道如何实战
4、就算跟着教程安装软件,搭配环境几乎每一步都会有这样那样的错误
5、知识遗忘得快,理论没有形成体系,自己计算机的学习只局限在刷了一些慕课上的题,做了学校要求的实验
6、学完一门课程不知道能干什么
7、畏难情绪严重
8、焦虑、担心找不到工作
首先,看似抽出了很多条的问题,但是我把所有问题都归为一个,那就是 「如何提高编程能力」。
只要编程能力、实战能力提高,上面一长串的问题自然也就不成问题了,更不用担心找工作的问题。
所以今天就来聊聊如何提高编程能力这个话题。
要说提高,总得先明确下什么是 「编程能力」 吧~
经常能看到大V、前辈们说,你要多写,要多练,提高自己的“编程能力”,但是编程能力到底是什么呢?
在我看来啊,所谓的编程能力其实说到底就是用代码解决问题的能力,无论是 Leetcode 上的还是现实世界的问题。
能够从问题本身或是业务逻辑提炼出解决方案,并且用代码去实现,编程就是在干这样一件事:
现实世界的问题 -> 抽象出解决方案/建模 -> 计算机语言表达
可以看到,写代码只是最后一步,而我们常常说自己不会写,真的是不会写代码吗?
这让我想起了以前英语老师说的:
“很多同学说英语作文说写不了几句就写不下去了,但是真的是英语学得差吗?我看未必,大概让你用中文写,也写不上几句”
是啊,英语作文写得不好,很多同学下意识的觉得是自己英语本身没学好,确实有这个原因。
但是更本质的原因或许是你语言表达和组织能力的问题,也就是让你用母语写,也不一定能有条理的写上一段文字。
那回到编程这里,不会写代码,也许是你连解决问题的思路都没想明白,就是说你的脑海里没有形成「第一步该做什么,第二步该做什么」这样的流程。
这其实是最重要的,编码实现反而是相对简单的事情。
很多大厂,一般都是高级工程师或者架构师进行领域设计、架构设计,初级工程师进行编码实现各种接口。
说到这,我又想起了最近工作上的事情。
由于时间紧迫,我被 leader 安排去了支援隔壁部门开发,但是他们那里的很多业务背景我一点都不知道。
对方对接的人让我去模仿 xxx 模块写,我看了 xxx 模块两天,愣是没写出个啥来。
事后,我在想,为啥会这样呢?是我编程能力太差吗?
也许是吧,但是更重要的原因是,我不理解业务背景,所以我的脑海里没有要实现这个需求的流程图.
检查参数、鉴权、认证、签名…… 这些流程不清晰,表现出来的形式就是,我不知道代码到底该先调哪个接口,再做什么。
心中没思路,自然无从下手。
所以其实编程的核心就是,你需要在心中对整个实现流程有一个大致的思路,然后用代码去一步步的实现。
在实现过程中,你会遇到很多细节问题,比如数据结构的选择,用 set 还是 list,存储结构的选型,以及如何 bug free的实现。
更进一步,怎样写出高性能、易读、易维护、易扩展高质量的代码,当然这都属于编码能力了。
嗯,我回过去看了自己上面的一翻分析之后,我觉得……分析了个寂寞,说的太尼玛抽象了,我 TM 就想知道到底怎么提高编程能力!
好,接下来我就具体一点,不搞这些虚头巴脑的东西了。
提高编程能力,我自己总结了以下几点:
来,先上第一点,关于做项目,这也是学妹的痛,不知道如何去开始一个项目。
谈到这点,对不起,我又想讲自己的经历了,有点长。。。
learning by doing
是的,我们都知道编程是一门实践的学科,不动手永远学不会,看懂了和学会了之间差了上万行代码。
或者说:看懂了 + 上万行代码 = 学会(此公式未经证明,纯碎自己拍脑袋想的
刚学完一门语言,想必大家都想做点有用的东西,而不是天天写练习题,但是呢,又不知道从何下手,尤其是 C 语言。
我大一上完 C 语言课,就处于这种状态,但是我隔壁一个室友就不一样的。
他在学习 C 语言的过程中,刚学到动态内存分配(malloc),就去摸索着写贪吃蛇、坦克大战,而且完成度都挺高的,那时候是我们眼里妥妥的大神。
但是大神和我上的课,学的东西都完全一样呀,况且都是上了大学才开始接触编程,为什么差别这么大呢?
以至于那时候,我和学妹一样,常常怀疑自己没有编程天赋,觉得别人天生就是这么强。
这种状态一直持续到大一下,那时候刚学完 Java,而 Java 也比 C 友好了不少,所以总想写点什么。
于是自己就选择写一个类似 QQ 的聊天工具,其实功能就很简陋,就是一个简单的 GUI + Socket 编程,然后在加上用户信息管理就完了。
但是,当我用这个简陋的软件,分别在室友和我的电脑上跑起来并且成功发送消息的那瞬间,我觉得我的编程世界被点亮了。
原来编程这么好玩,原来我也能做一些有趣的东西!似乎找到了一丝编程的感觉,但还说不上到底是什么感觉,毕竟这个程序总共也就几百行。
紧接着,趁热打铁,我又写了一个联机五子棋,实现上依然是 GUI + Socket 传输数据。
但是写这个又遇到了不同的问题,比如棋盘在我的实现里是一个 N*N 的数组,棋子是用对象表示,对象里有坐标、颜色这些属性。
当时我就疑惑了,当一方落子后,该怎么把棋子对象通过网络传输给对方呢,再从网络接收的数据恢复到对象?
起初自己的想法是手动的把对象转换成字符串,然后像聊天工具一样发送给对方,比如:
{x: 12, y: 13, color: black .......}。
这种做法没问题,但是总感觉不够优雅完美,于是上网一番搜索之后发现,原来我想的这个就叫「序列化」和「反序列化」。
并且在 Java 里直接实现 Serializable接口就好了,甚至可以直接使用ObjectOutputStream类就能完成序列化和反序列化对象。
这些问题在现在看来,根本就不是问题,更像是“常识”。甚至序列化这块,还会选择一些兼容性更好、性能更高的协议,比如 Protobuf、Thrift、Avro 等等。
但是对大一时的我来说,在这个过程中不断的遇到问题并且去解决,就是实打实的编程能力上的提高啊。
在我解决掉一系列问题之后,顺利的和隔壁室友用自己写的联机五子棋对战了几局,这个五子棋还支持不少诸如悔棋、暂停、自动判断输赢等功能。
界面风格和下面这个很相似(这是网上搜的)

但是由于当时没有存 Github 的习惯,代码在换电脑之后没能留下来。
通过写这些项目,我像打通了任督二脉一样,不是学了什么厉害的算法、也不是高深的设计模式、更没有分布式这样高级的东西。
那是什么呢?
我感觉到编程就好像搭积木一样,基本的函数、库、组件就是一个个的积木块,写的代码就是胶水。
只要我们心中有设计图纸,那就能通过胶水把这些积木搭建成想象的模样,缺少什么积木块,用到的时候再去搜索就行了。
在程序的世界,只要你想,你就能。
这段时间大概是我编程能力提升最快的一个阶段之一。
关于这个五子棋,还有个小插曲:
我写的不是联机五子棋嘛,然后启动的时候输入对方的 IP 和 Port 就能连上对战。
后来,我找了一个在其它城市上大学的高中同学,让他和我一起玩五子棋,但是呢,我傻乎乎的让他用 ifconfig 查看自己 IP 后告诉我,然后我在这边连接。
那个 ip 呢,大概长得像 192.168.1.xxx,熟悉的同学都知道,这个就是局域网内使用的 IP 了,并非公网上的 IP。
局域网内的 IP 只能在内网才能使用,所以我用这个 IP 是永远连不上的他的电脑的。
但是那时候我才大一,没学过计网,根本不懂这里面的原理。
为啥我和室友能连上呢(因为在一个局域网)?为啥和其它学校的同学就不行?
别看现在这个东西在我看来是常识,但我那时候是一点计网知识都没,就是硬着头皮学的 Socket 编程,去理解 IP 和 Port。
那是怎么解决的呢?
当然是找谷歌呀!
在网上一番查询后,大概明白了,如果想让不同局域网内的主机进行 P2P 通信,需要一个公网中转服务器辅助进行 NAT 打洞。。。后来,我就又去尝试 NAT 打洞了,其中细节就不再描述了。
其实把我个人编程经历上写这么多,就是想展现我是如何一步步去实践的,遇到了什么问题,又是怎么解决的,把这个过程展现出来。
你看我没学任何计网知识,还不是通过边学边用,完成了网络相关的项目。
所以你离项目只差一个开始。
说到这里,不少同学又会说,我知道要多实践、多动手,道理我都懂。
可我还是不知道如何开始去写一个五子棋、贪吃蛇之类的东西。
好,那我就要问问你了
小北:为什么你学了 C 语言还是不会写贪吃蛇呢?
学妹:老师没教我贪吃蛇如何在 C 语言中表示,也没教我如何让画面动起来,更没教我如何绘制 GUI ,所以我不知道怎么做。
这应该是大多数同学最典型的问题吧?
那我们以贪吃蛇为例拆解一下,看看是如何从问题到代码的。
首先,贪吃蛇是一个个的节点组成的,节点肯定有横纵坐标吧?一个个的节点组成了一条蛇,那自然应该想到链表吧?
蛇还有什么属性?当前移动的方向
还要食物位置吧?那这些属性在 C 语言中用结构体表达出来就是这样:
typedef struct node{
int x;
int y;
struct node* next;// 单向链表
} SnakeNode;
typedef struct snake {
SnakeNode *pHead; // 蛇头
SnakeNode *pFood; // 食物
int direction; // 方向 0-3 依次表示:上、下左、右
...
}
接下要考虑的就是如何去绘制蛇,这个简单呀,就把整个链表从头开始把每个节点打印出来。
每个节点可以是一个圆点,也可以是方形。
那如何让蛇动起来?所谓的动,其实就是不断的将蛇打印出来,然后又清除。
并且不断的根据移动方向更新蛇的位置,只要这个过程够快,快过人眼能够分辨的帧率,那看起来蛇就像是在连续的动一样。
然后这个过程你还要去考虑如何检测碰撞,如何判断吃到了食物,还要随机产生食物。。。这些东西首先你得想清楚逻辑,代码实现其实if、else 、for 就足够了。
做项目的过程总会遇到不会的东西,也会遇到问题。
但是要相信,所有的问题在你之前基本上都已经有人遇到过了,只需要把问题准确的描述出来,然后去搜索引擎上搜就肯定能找到解决的线索。
如果你要等学会所有东西,才去开始做项目,那估计等到本科毕业也没机会。
本科上的就那几门课,Java/C/C++、操作系统、计网、编译原理、离散、数据结构……
可能没有学校会单独开一门课教你 Java Web、Python 写爬虫等等。
学完这些理论课,等到毕业,你会发现,依然好像什么都做不了,所以说,要动手,趁早。
并且理论上,学完一门语言,掌握了数组、链表、 if、for、函数这些编程最基本的概念,就有能力去实现一些诸如贪吃蛇、五子棋、扫雷这样的小玩意了。
这种通过项目去学习,以解决问题为导向的学习才是更加精准和高效的。
课堂上的学习大多数是老师灌输知识、学生记住,然后考试就能拿高分。
实际上有多少知识能转化为解决问题的能力呢?
不好说。
还是那句话,编程就像搭积木,学完基础的,积木块都给你了。
你能搭出房子、车子、还是火箭这全靠自己。
学会用工具,更要用好的工具。什么是好的工具?
诸如 VSCode,Github、Stackoverflow、Google、知乎、Jetbrains 全家桶都是不错的编程工具,有的提高生产力,有的能解决问题。
都 2020 年了,就不要在机房装着 VC6 写练习题了。
不要等到大一结束了,还没上过 Github,更不知 issue、pull request 为何物。
计算机专业的学生,如果还在用百度搜索技术问题,送给你一段陈皓(左耳朵耗子)前辈的话:

当然,在没法使用谷歌的情况下,百度还是可以用的,但是这对计算机专业的同学,不应该是一个问题。
很多时候,你把遇到的问题准确的复制到 Google/Stackoverflow 搜索框,大概就能找到答案。
而百度会将你带向培训班的课堂,嘿嘿,刺激不。
现在处于信息大爆炸的时代,互联网上充斥着各种博客、学习资源,这是对学习者最好的时代。但是资源太多,就存在一个选择的问题,在这里我给你几个建议:
把网盘里屯的那 500G 视频/资源 删掉,你永远不会去下载来看的
正所谓,收藏从未停止,学习从未开始,当你不再习惯的收藏资源了,你就成长了。最好掌握获取/搜索资源的方式,自己需要什么资源再去搜就完了。而不是让资源白白的占据你的网盘。
当需要学习某个东西的时候先去知乎/Google 搜索 「xx学习路线」
然后根据高赞/优质回答,选取大 V 们都提到的资源,这大概是这个领域比较经典的,然后去搜集资料,开始学习。
B站、mooc、网易公开课、Coursera等视频网站上有很多优质免费的课程
答应我,不要再被那些关注送 500 G 学习资源的骗了好吗?资源都在网上公开着,直接打开 B 站就能看,不香么?
学应用框架,官方文档是最适合入门的,并且很多都提供了「快速入门」的指引
比如 Vue、Hadoop、Requests 这些官网的指引都非常的清晰易懂,真的不要再去看七零八碎的博客,博客的定位应该是补充。
少看博客,多看书
很多博客其实就是博主自己读完书,然后复述一遍的笔记,你再去看他的博客那就是等于学二手知识,他的高度就决定了你的高度。
当然有些优秀的博主能够概况性的总结,或者把某些原理讲得特别清楚,这是值得看的。
总的来说,系统性的看书是你成长最快的方式。
大学的学习,学的绝非是仅仅的知识,最应该学会的能力是「自学」。
等走上工作岗位的时候,你便会发现这个能力有多么重要。
初入职场,在公司,没人会像学校里的老师那样,手把手的教你。
就算有安排导师,也是扔给你一堆的文档和资料,自己去学习,然后开始上手实际项目。
这个过程大多会比较痛苦,至少我这几个月是这么过来的。
说到这,我突然想说下我认为的「自学的能力」,因为在程序员这个群体中,不管是科班学生还是野生程序员,自学都是必不可少的。
那「自学的能力」又到底是什么呢?
我个人体会有以下几点:
1. 明确你学习的目标,比如我要学 Java Web、IOS 开发、机器学习等等
2. 了解该领域包含了哪些子模块,比如 Java web 需要学 Java 语言基础、JVM、数据库、计算机基础等
3. 掌握这些子模块的学习顺序和依赖路径,也就是先学什么,再学什么
4. 搞清楚这个方向有哪些入门、进阶的学习资料
5. 按着学习路线,开始学习一个子模块
上面这个过程,不断的递归下去,直到拆分出一个比较小的学习目标。
比如我要学 「Java web」,那这里面可能包含了Java 基础、Netty、JVM、Spring、MySQL、Redis 等等。
那 Java 基础又可以进一步分为 基础语法、面向对象、异常、集合、IO、反射等。
分到这里,你就可以开始去找资料学习了啊。
比如先安装 JDK,然后写 Hello World,然后慢慢开始刷书或是刷视频……
这里我用了一个定语「小而美」,小是指代码量少,最好就几千行,这样我们能够充分把控,美则是指代码实现写得很优雅。
我们都知道提高审美能力很重要的一环就是多看美的东西,好的设计。
那写代码也是一样的,自己学完基本语法,写出来的代码大概停留跑起来的水平。
这时候去看看大佬写的代码,你绝对会惊呼 卧槽,还能这样?
这样的代码有哪些呢?
如果你是大一的同学,我推荐你去看看 Linux 内核中关于链表的实现,简直特么太妙了,平常我们定义链表不都是这样嘛
struct Node {
int data;
struct Node* next;
}
但是这个存在的问题就是,每个想用链表存储的结构体,我们都得去写一遍,遍历、插入、删除的逻辑,显然太low了。
那 Linux kernel 中就用宏,在对用户自定义数据结构侵入性很小的情况下,实现了其它语言中模板的功能。
相信我,看完,你会学到很多骚操作的,后面找机会写一下这块。
又比如学完 C 语言,你会不会觉得 C 中的字符串有点不灵活,那推荐你去看看 Redis 中关于动态字符串的设计–SDS。
这些代码都不长,也不难理解,但是看完对于提升我们的编码能力是有很大帮助的,这就是小而美。
提倡看源码,不是让你直接上手就啃什么 Nginx、Sqlite、Redis的源码,这些都是几万级别的代码量,一般初学者
即使要啃,我给你说个好办法,这些东西目前来看,代码量都是几万几十万的级别,有点不友好,你可以去 github fork 下来。
然后回退到第一个 commit,从第一个 commit 开始看起,看到第一个完整的版本。
这个过程也是能学到不少东西的,看看罗马都是怎么建造成的。
好了,BB了一大段假大空的东西,最后再回到学妹具体的问题上,挑几个来具体问题具体分析:
说到底,还是填鸭式,没有形成自己的目标和学习路径。
如何破局?
最简单的方式,给自己定一个目标,或者我给你定几个,自己领一个:
如果你做技术岗,上面这几个基本覆盖了应届生找工作的主要岗位,你选一个自己相对喜欢一点的。
至于如何去达到目标?
当然是分解,然后去找 Google 呀,去看看 BAT 这些岗位需要点亮哪些技能,怎么学才能达到。
记住,目标、目标、目标!!!
没有目标,你的生活就会是得过且过,满足于上课、做作业、考试、绩点这样的循环。
到了毕业找工作,你会发现面试官好像都不怎么关注你的绩点有多高,他们更关注你的基础知识和解决问题的能力。
解决问题的能力怎么体现?
可以是刷题或者是让你讲你参与的项目,以及在这个项目中你扮演的角色和遇到了什么题,又是怎么解决的。
我们会发现,那些优秀的人,无一不是有着清晰的目标,从现在开始给自己定一个目标吧!
初学者跟着视频做是很有帮助的。
先跟着课本或者视频完成一个项目,记住不是看视频里的老师完成,而是你自己要跟着完整的敲一遍!
第二步,不看视频,根据自己脑海中的流程、思路来逐渐编码,明确先做什么,再做什么。
第三步,改造,或者基于视频里的做一个类似但不同的项目,比如视频里写的商城,那你可以自己做个论坛,视频里是贪吃蛇,你可以自己做个坦克大战,诸如此类。
其实这就是学自行车嘛,先用借助辅助轮或者别人扶着练习,然后慢慢的下掉辅助轮,自己骑。
千万不要没学会走,就想跑了,这样会摔得很惨。
这个问题,百分之 99% 的同学肯定都遇到过,甚至现在,我安装一些新环境的时候也会有各种问题。
想起刚学 Java 的时候需要去配置 Path、ClassPath、环境变量这些,但是第一次接触根本不知道配置这些的作用,也不知道他们的原理。
就跟着博客教程一步步执行,但是经常就会发生,明明都照着来了,还是跑不通。
那这个时候怎么办呢?
第一办法是重新搜索尝试不同的教程,这个其实是换汤不换药,能不能配通还是看运气
第二个办法就是去搜为什么要这样配?
了解之后,你就明白 Path 就是指定了我们平时在终端使用命令的搜索路径,ClassPath 则是让 Java 执行环境找到指定的 Java 程序对应的 Class 文件以及程序中引用的其他 Class 文件。
当你去了解这些东西之后,再去看博客的配置步骤就不再是懵的了。
在不了解背景的情况下,我们只能根据别人的指令一步步走,害怕和被人有一丝的不一样,而导致最后配置失败。
但是当你了解了原理之后,这些博客就只是参考了,你甚至还可以考虑到你和博主的某些环境是不是有差异,这些差异会对应到步骤中哪里应该采用不同的配置。
这个其实我体会特别深,在我第一次用到 CMake 的时候,起初,我是去抄别人的 CMakeList.txt 文件。
但是当我需要增加编译依赖或者其它定制化的时候,我就懵逼了。
include_directories、include_directories、target_link_libraries 这些指令,不知道如何去组合达到自己想要的目的。
那我当时是去找来了 CMake 的教程,浏览一遍后,我便懂了 CMake 构建的原理,以及各个指令的作用。
这时候,我便有能力基于别人的 CMakeList.txt 去定制化。
这就是我个人认为「搭配环境几乎每一步都会有这样那样的错误」的内在原因和解决办法了。
一句话,你是否清楚你所看博客做的每一步操作是在干什么,如果不明白。
只是复制别人的命令,那出错了,肯定会懵逼的。
不知道学妹这里说的遗忘得快的知识是指什么?
我说一下我的看法吧,我在不同文章中都反复提到了,学习新知识要学会抓主线,把零碎的、非本质的东西浏览一遍就行,用到的时候知道去哪找,这就够了。
我在万字长文 | 这可能是东半球最保姆级的后台服务器开发学习路线中也提到过各个学科的主线是什么,这里再啰嗦一遍,比如计网,你说你把 CRC(循环冗余校验码)的计算方式忘了,这就是遗忘吗?
对不起,我也记不住,也完全没有必要去记。
计算机网络的主线是「两台主机之间的数据包是如何通过网络传输给对方的」,其它的,像 UDP 的包头的构成呀,SMTP 使用的端口号呀 之类的问题,看一遍,有个大体印象就行了。
但是你得知道 UDP 包头里有源端口和目的端口以及数据包长度,为什么呢?
因为这个是靠理解,反推出来的,首先 UDP 是传输层协议,传输层的目的是区分同一主机上的不同进程,那么一定是需要一个标识的,这就是端口号。至于它们是怎么排列的,这丝毫不是关键。
上面这段话,抛砖引玉的聊了下我认为什么知识是可以遗忘,什么是不可以遗忘的。
那不能遗忘的知识也遗忘了怎么办呢?
多看。多去思考这样设计背后的原理,多问自己「Why」。
至于理论没有形成体系,其实我也存在这个问题。
但是我想的是,量变引起质变,你先积累足够的各个领域的知识,总会有打通任督二脉的那一天。
才开始学,怎么可能有完整的知识体系呢,至少到了大三、大四再来考虑知识体系这个问题。
畏难这个事,老实说,人人都会有,我也不例外。
不要想着去克服它,畏难其实和喜欢舒适区差不多,这大概是天性吧。
除了天性使然,还有一个原因是想得太多,做得太少,还没开始做呢,就去想各种后果了,进而产生一系列奇奇怪怪的想法,自己吓自己。
那克服畏难情绪最简单方法就是行动,立刻行动起来,去分析一下,要做成这件事,需要哪些资源、前置条件等等
行动是缓解焦虑的最好方式,这真的不是鸡汤。
至于担心找不到工作,这完全没啥好焦虑的呀,你按照上面说的去制定目标,学习,找工作就是一件水到渠成的事。
20 世纪 50 年代末,年幼的贝丝·哈蒙(安雅·泰勒-乔伊饰)被遗弃并托付给肯塔基州的一家孤儿院。她具有惊人的国际象棋天赋,同时对政府提供给孩童的镇静剂上瘾。 贝丝被自己心中的恶魔所困扰,在药物和痴迷的双重作用下,她变成了一个令人印象深刻、技艺高超且富有魅力的弃儿,并决心打破男性主导的国际象棋界建立的传统界限。











但这并不影响我们在善恶之间,选择善;
不影响我们在美丑之间,选择美;
不影响我们在撕逼和体面之间,选择体面;
不影响我们在爱恨之间,选择爱。
转自:https://mp.weixin.qq.com/s/h5_fKHbbnwcFl2pcGmc4wQ