转码
我目前的理解:
- (可选)一门概论课增加兴趣/通识入门
- 首先在一个月内学会、掌握一门编程语言(常见的:Java/Python/C++/Javascript)
- 跟随着一个具体方向和一条明确路径,刷课+动手。这一阶段下来达到能做简单项目的程度,就算入门了
- 入门之后,我还没到这个程度,但我觉得入门之后咋样都行… 刷算法题/做项目/准备简历面试找工/继续钻研底层/学习别的语言/学习新技术新框架/自己做项目/改别人的项目/给开源社区贡献代码…..
鸡汤 1:人的精力、动力是有限的,知道一个道理≠做成一件事情。成功完成一件事,和精力、天赋、兴趣、环境、正向反馈、甚至运气都有关系,非常偶然和不确定,并不是明白道理、打个鸡血就能成功的。转码需想清,想清请行动。
鸡汤 2:“感觉有些东西好难,看起来像看天书”,产生这种感觉是非常正常的,这不是因为你蠢、数学不好、不适合编程等等等,很可能只是因为你闯入了水平不符的领域,缺少基础技能和前置知识。 因为STEM一般不以自然语言作为表达工具,而是有自己建立起的一套规范系统。这套系统,一环扣一环、循序渐进地习得并不难,而且会了之后就像掌握语言一样,理解和运用起来很自然;但不会的时候,想自己格物致知、原地顿悟,基本不可能。所以你要做的,只是跟随一个靠谱的入门课程和理论框架一步步学下去、一个个知识点搞懂。
一句一定没错的话:多动手多写码多敲键盘,coding本质是技能不是知识!
概论
(以下三门 [由易到难,由纯看到动手] 程度提升,不确定自己要不要/能不能转码的可以挑选着看,已经下定决心转码的可以跳过这步直接开始学语言)
-
Crash Course:Crash Course Computer Science bilibili
-
Harvard CS50:CS50’s Introduction to Computer Science 丨 edX
-
Berkeley CS61A:CS 61A Fall 2020
CS61A: PL theory 的入门课,地位等同于国内的 C/C++编程基础。 主要内容有 Python, Python 在 interpreter 一层的简单原理,Higher-Order function (函数式编程入门), OOP 入门,数据结构入门 (Python 里的 dict, list…), delcarative programming 入门,parallell programming 入门。 说了这么多,概括地说,61A 就是什么都讲,但是什么都只讲一点,讲到够用的程度,但是不深究原理。
值得一提地是,61A 的 stuff 团队非常厉害。 由于 61A / B 一般是 1.4k+ 以上人的大课,不可能使用传统的课堂形式解决问题。 所以 61A 的 stuff 为这门课做了一些研究,效果就是,不用到课堂上课,让学生快速掌握全部内容。 (其实就是 MOOC 的 idea)。 他们开发了一套 autograding 的程序,还发了 paper.
语言
入门语言的推荐视频(只放了我学过的/有口皆碑很出名的,欢迎补充推荐)
Java:韩顺平 《零基础30天学会Java》
Python:小甲鱼《零基础入门学习Python》
前端三大件:黑马 《web前端零基础html5 +css3+前端项目》、黑马 pink《零基础JavaScript入门》、黑马 pink 《JS的DOM BOM操作教程》
C++:盲区
此外,有一系列叫做Head First的入门书也很出名,不过我觉得入门还是视频更合适,阻力更小,更容易坚持
具体路径
我个人推荐鱼皮的编程学习路径,面向找工、路线清晰、有理有据、脚踏实地 (缺点是这个的根本目的是国内找工,可能不一定完全适合国外)
kamranahmedse/developer-roadmap:2022 年成为开发人员的路线图 (这是国外的,不过我觉得并没有很明确…有点该详细的不详细 该简略的不简略 看完还是不知道该怎么学…?)
前端
2022年web前端开发学习路线图 - 黑马b站 / Web前端培训- 课程大纲 -黑马官网
吐槽 cs自学指南
我总体同意这位象友的观点, 对这个“自学指南”一直不太感冒
这不叫“指南”,最多只能叫“百科”,对 90%想转码的人都没什么用。
除非你的人生感召就是 computer science,你可以拿出三年时间,什么都不干,就把这里面的课学完;或者本来就是相关专业的,但感觉一直浑浑噩噩不得要领,因为缺乏好老师好课程。 对真正零基础、主要为了找工而转码的人,这篇“指南” 一 点 用 都 没 有
全不一定有用,看起来牛逼不一定有用。转码要学的是技能,不是知识;需要的是路径,不是百科。
底层与基础
对于一般程序员来说(小方向的程序员比如说网络程序员,安全方向,ai 方向除外),初级面试最重要的是算法和数据结构,次重要可能是软件设计。长期来看设计是最重要的。
如果要给理论知识排个序,数学可能是最低的(除非搞理论),操作系统和网络这些可能稍微重要点(有些大厂面试也会考)。如果有些时间想深入一下,去看看语言的一些特性也挺好的。如果要给理论知识排个序,数学可能是最低的(除非搞理论),操作系统和网络这些可能稍微重要点(有些大厂面试也会考)。如果有些时间想深入一下,去看看语言的一些特性也挺好的。
所以说最重要的是算法数据结构,在刷题的过程中对于语言就逐步熟悉了。至于做到的项目,也需要熟悉软件设计来过面试(这个是长期更重要的次重点)。数学一类的可能考的很少,只有一些和数据/研发/谷歌有关的岗位有可能涉及。对于操作系统和硬件可能是底层一些的岗位会有涉及。面试肯定准备的还是以通用为主。Linux和git一类的,算是比较重要的工具。如果要单独看一本书也不适合不推荐,可以看看mit的一个“在cs教育中没有教过你的东西”。学过这个之后,git/linux/debug等等熟练度甚至是解决问题的能力可以在刷题,做项目的过程中提高。做项目确实是挺接近实际工作的,也可以放到简历上,面试也会问。
——来自某群
我觉得 计算机底层基础(组成原理、网络、操作系统),还有数学什么的,其实可以看趣味性比较强的入门课和书。因为它们和开发工作没有太强实际联系,也不是成为开发者的必备条件。对它们有了深入理解肯定有益无害,有时候面试也会考,但直接跟科班课本/课程学容易劝退。
- 数学
- 《程序员的数学》、结城浩系列
- 3Blue1Brown 3Blue1Brown的个人空间_哔哩哔哩_bilibili
网络:图解 HTTP、网络是怎样连接的
计算机组成原理:crash course、计算机是怎样跑起来的、编码、程序是怎样跑起来的
数据结构与算法
算法和数据结构比较特殊。
很多人转码的目的是 找工/进大厂/润,然后很多大厂面试重点考数据结构和算法,而面试可能是转码最难的一关。所以虽然在实际工作/开发中可能也不咋用得到,但算法和数据结构依然常常被强调,甚至在有些语境下,力扣刷题量俨然=转码成功度,只能说… 想使巧劲没错,但是不要被捷径思维洗脑,不要想着什么都多快好省。
有一个批评捷径思维的帖子:谨慎转码 - 不要以为刷完题拿到 offer 就结束 - 这只是开始
趣味入门书:《图解算法》
刷题导向⬇️
labuladong 的算法小抄 :: labuladong的算法小抄
其他
在cs学习路径/大纲里不会被特地提起,但是很常用很重要,任何时候学都不亏的东西
计算机教育中缺失的一课 · the missing semester of your cs education
-
shell/vim/命令行
-
git/github/版本控制
-
注释/代码规范/如何写出简洁易懂的代码
-
linux
感想碎片
其实转码朋友不知道从哪入手的话,我还挺推荐从黑马开始,先找一个语言的课直接看起来的,一边看一边做笔记和实操作业。
后端就 java,前端就 html css/javascript,想搞数据和爬虫就 python(python 也是语法最简洁的)。
首先是它的课都完全免费放在b站上,也提供了学习路径。
然后,它讲得很细,逻辑顺序安排得也合理,非常新手友好。而且一节课一个知识点就5-10分钟,很容易给人成就感/“再来一集”的动力,不容易疲劳。
我反而觉得那种一上来就给新手安利美国名校 cs 课、cs 各种底层原理、数学算法之类的,非常容易打击人的自信、令人眼花缭乱“不明觉厉”、怀疑“我学这个干嘛”(投入太多 收益太远,是个人都不可能坚持自学四年科班cs课程再去找工作吧!这又不是武侠小说闭关修炼!),最终“收藏夹吃灰”。
总之,不如先挑一个实用的工具和语言直接拿起来一步步学,最基本的要求就是先一个月学会一门编程语言。
「一本好的方法论入门书应该如楼梯,概念环环相扣,辅以实操练习,行文不卡壳,逻辑不跳跃,读者如爬楼梯,一步一步即可登楼。」
也是这套课给了我这种感觉,就是STEM的学习只要把基础知识扎实学好、一步一个脚印,就一定可以慢慢精进到至少入门水平。需要的只是时间和坚持/习惯。
然后,现在“感觉有些东西好难,看起来像看天书”,这种感觉是非常正常的,这很可能是因为你闯入了水平不符的领域,缺少基础和前置知识。
因为STEM一般不以自然语言作为表达工具,而是有自己建立起的一套规范系统。这套系统循序渐进地习得并不难,而且会了之后就像掌握了语言一样,理解起来很自然,但不会的时候想自己格物致知、原地顿悟基本不可能…
总之,转码入门就是找一个靠谱的、和你现阶段水平符合、你感觉看得下去的教科书/教程课去看+敲它提供的练习/案例!
现在对“转码”认真了一点,又有了新想法(可能过几个月我又感觉我想得不对hhh)
https://www.gter.net/bbs/index/view.html?mobile=yes&tid=2075174 做天在看这个帖子,关于加拿大转码,楼主建议学java,下面有人觉得应该先学C++,然后在争。 最近也看了很多培训班相关文章、“做程序员需要一个cs学位吗”的讨论,就在思考这些
要不要学数学?要不要学科班CS里的操作系统、计算机网络、数据结构与算法、计算机组成原理?学底层且难的C语言,还是学最主流的java,还是学最简单的python?
公司对普通程序员的期待就是招进来就能干活。学校里教的可能和实际开发都没什么关系,那这些东西重要吗?要学吗? 我觉得,肯定是重要的,但它们是基础和内功,学好了可以让一个人对整个计算机的理解变深、写的代码更有逻辑更健壮更简洁、学习新知识也更容易。 但是事实是没有公司真的会考这些(除非特定方向),最多就专门考数据结构和算法,还是大厂为了省事刷人。 可能是“道”和“术”的区别
掌握了底层、自下而上学习是巨大优势。这也是“数学好的人通常会擅长编程”说法的来源(即使学的内容完全无关)。 你学懂了C语言,学其他语言肯定非常快。就像学习演奏,不该死磕一个简单曲子,而是不断挑战“稍难一点的曲子”,最后你回头去弹简单曲子会发现“怎么这么简单!” 但是一上来就学简单的,可能开始走得很快,但是很难走远,或者越走越难。
but!人的精力、动力是有限的,如果知道一个道理=能做到一件事情,那我现在早就是超人了。 事实是——完成一件事,和精力、天赋、兴趣、环境、正向反馈、甚至运气都有关系,非常偶然和不确定,并不是明白道理、打个鸡血就能成功。
so
如果你精力旺盛,动力充足、毅力坚定、热爱计算机,那就照着 CS 科班的课自学好了。
如果你下定决心要转码,那么 先学会 java(语法、面向对象编程、做项目),然后学数据结构和算法,同时照着后端开发的路径学下去,随时补各种编程相关,比如数据库、框架、网络、git、shell、数学……
如果你迟疑不决、入门徘徊,可以先看看 cs50、试试 python or 前端这条路,来培养兴趣、打消畏难心理。
如果你方向迷惑、自控力不足但是真心想短平快转码,花个两三万报个口碑好的培训班,脱产学个不到一年毕业出来狂投简历先入职再说。
如果你想进大厂,请读个正经cs学位的同时狂刷力扣。
最重要的是,无论走哪条路,都要亲自动手打代码、多多积累项目和经验