怎么自学编程?编程遇到瓶颈,求过来人指点。

天道酬勤
  • 55

怎么自学编程?编程遇到瓶颈,求过来人指点。

回复
阅读 4.1k
12 个回答

码海无涯,回头是岸

基础性的东西反复的看。。。我是这么干的。。。

买书适合你现在的情况

我前两天琢磨出一个道理啊。
花样就是基础知识的迭代,之所以瓶颈就还是基础知识不够牢固啊
你想啊,最早你学编程,试着把hello,world改成别的打印出来,激动得很。
现在这网页上一条条的不还是hello,world嘛,换了种方式输出而已,所以买本Thinking in Java吧

C、C++、devexpress、.NET、java、JavaScript 2年内涉猎这么多语言,难怪什么都不熟练,专攻一门

tmac011
  • 1
新手上路,请多包涵

不对,用了这么多语言,还在乎忘记API吗

书读百变,不如手敲一遍,不要一遍看视频一遍敲代码,最好结合项目开巩固自己学单位知识,不运用进项目,不结合实际做东西,那些知识很容易忘,也体味不出它们的意思。

个人觉得,最好有一本java基础的书。一定要是书!!!每天看一点,看完做总结。看的时候不在乎看了多少,而是注重理解了多少,把笔记和总结做好,就算以后忘了,也能很快找到解决的方法。其实重要的不是你能背多少,而是理解多少。个人觉得,其实编程难的不是代码的实现,而是解决问题的思路。慢慢来!

本人也非计算机专业,后来基本自学,确实到了一段时间后会有学习上的瓶颈,那到后面其实就是考验计算机基础知识的时候,比如计算机组成原理,操作系统,编译原理,数据结构与算法等等,编程基本离不开这些东西,买些书自己看(网易公开课上也有好多计算机基础课视频,可以结合学习)如果有了这些基础,那学编程就是容易多了。

Missu
  • 2
新手上路,请多包涵

从知乎上看到一个不错的答案,希望对题主有参考价值


我大概学习了四个大方向:系统、软件设计、理论与数学、和通用的编程技能。

先说通用的编程技能

编程语言都有共性。比如变量、函数、值、引用、对象、继承、泛型等等。不管题主学习的什么语言,其中共通的东西要理解。虽然每种语言对每个概念的诠释和标准不同,甚至同一个术语在不同语言下意义完全不同,但触类旁通。

C++的创始人说过:“任何只会一种语言的人都不是高手。”

精通一门语言的方针是对的,但是学习多门语言的路线也是正确的。所以你要有可行的计划。两头都要抓。

那么,建议选择至少两门语言

从语言运行环境来说,一门编译型(compiled)语言,一门解释型(interpreted)语言。当然现在的编程语言异常发达,这两种只是粗糙的分类。

编译型语言有C,C++,Java等等(我就说些常见的,就不说什么D、Rust来装逼)

解释型语言又叫脚本语言。Python、JS、Lua、PHP、Ruby都是。

这里面Java又是虚拟机语言。即被Java编译器编译成JVM字节码,再被JVM解释。(JVM:Java Virtual Machine)

JavaScript 又是使用了 JIT 技术的语言,即 Just In Time Compilation,在被解释的瞬间被编译成机器码。所以,不要纠结这些细节。

我想强调的是,选择一门更底层的语言,选择一门更高层的语言。

从编程范式来说,选择一门面向对象的语言吧(虽然现在大多数语言都有面向对象特性)。面向对象是很基础的编程范式,没有这个技能,之后的设计板块无从谈起。

Java就是非常经典的面向对象。语言非常严谨,语法和逻辑又简单易学。是非常好的面向对象入门语言。实际上,很多高校都是以Java来作为面向对象和各种设计范式的教学语言的。

C++不说了,水太深,我自己都不懂。C++14之后几乎支持所有编程范式,就是对新手非常不友好。慎入。

像Python、Ruby、PHP这些都有面向对象的功能,不过设计上不同。总之,如果你习惯了Java,这些语言的一些面向对象特性会让你重新认识什么是“面向对象”。

建议同学们再挑一个有函数式编程特性的语言,不一定非要是严格函数式的CommonLisp家族的。像Python、JavaScript就有一些函数式的血统。总之,这里强调的不是一种语法,而是一种编程范式。

那么就我个人来说,我主要会的就是JavaScript、Python、Java、C。

这里是我给同学们提供的一个选择池(纯个人看法):

面向对象:Java、C#、Python、Ruby、PHP
函数式:CommonLisp、Haskell、JS、Python
编译型:C、C++、Java
解释型(脚本):Python、Ruby、PHP、JS、Lua

就说到这里吧。

再谈设计

这里的设计不是指“平面设计”、“美术设计”之类的设计。同学们可以把“设计”理解为“软件工程”的代名词。

我在这个方面学习了一些程序设计范式,比如人人都会说的 MVC。举一些例子装个逼:

和GUI相关的
Model View Controller
Model View View-Model
Model View Adapter

和GUI无关的
Singleton
Static
Factory

设计范式不是一个看看设计图就可以习得的技能,而是要真正地写出可用的软件。这里有一个我当时学习MVC用Java写的纸牌游戏,题主可以用Eclipse导入玩玩。

设计范式又和你使用的语言有关,不同设计范式适用于不同语言。比如Class、继承、抽象类这些在Java中很好设计模式就不适合JavaScript。这两个语言的相似度就和“卡”与“卡巴斯基”的相似度一样 —— 不怎么像。所以,设计范式的学习也和你学习的语言相辅相成。

API设计也是其中很重要的一环。作为一个开发者、你要么使用别人的API,要么写API给别人使用。API是开发者对话的通道。

测试很重要,一定要学习怎么写测试。及时你很多时候不会真的去写测试,但是会写测试一定是加分的。

除了软件工程里面的各种设计模式,数据库的使用也可以算作“设计”吧。其实就是SQL的基本操作。SQL 数据库很多,语法各有不同,但是逻辑是相同的。我的数据库能力很差,因为不是每个开发者每次项目都会接触数据库。NoSQL比较新潮,可以了解了解。

设计就谈到这里,多了就成了更细节问题的回答了。

三评系统

这里主要指两个系统,一个是操作系统,二是网络系统。个人觉得计算机操作系统是要先学习的。

那也就是Unix/Linux相关的一些东西。操作系统、包括一定计算机架构的学习,会让你对编程有更全面的认识。

计算机网络的学习归根结底是对于网络协议的学习,附带一些对于系统网络接口的学习。

那么,如果你时间不够,就学一学IP、TCP、HTTP吧。这三个估计是业界最常用的。

有时间可以在Linux系统上用比较底层的语言封装一下socket,实现一些简单地功能。

对于系统的学习目的不在于把自己培养成厉害的系统工程师,旨在让自己对开发有更深层次的认识。

最后道理论

算法、算法、算法。一些基本的排序、搜索算法了解一下。算法和数据结构是好基友。

可以深入学习一下拓扑学、逻辑学和线性代数。计算机科学对数学要求不会很高(计算科学另当别论)。你有个基本的离散数学基础就行了。

我觉得逻辑学对实践大有帮助。

再给你推荐一些学习资源

题主的截图所罗列的课程多少也全面。不过他们就是Java路线,完全不能说这是一个好的选择。而且也难说他们Java教的好不好。

从就业上讲,这一两年经济下行,低端程序员工作更加不好找了。加之微信公众号开发让企业成本下降,很少有一般公司还要做自己的APP了,所以低端移动开发人员也不好找工作了。也就是说,我们这些应届生就不好找工作。提升自己的水平才是王道!

得看题主想成为用户端应用的开发者还是别的什么。从GUI用户端来说,主要就是有 Web,移动,桌面这三大块。

从实践的角度我首推 Udacity (中文名叫什么优达学城。。。)
这个网站上面好多课程都很有学习价值。我自己在Udacity学习了快两年,上面除了实践课,也有不少计算机科学课程,是佐治亚理工出的。我最近就在学习计算机视觉。

他们的课都附带了很多实战项目,完成了这些项目实力会有大大的提升。课程都是和硅谷的公司联合制作的。比如谷歌、Facebook、Github等等。

U家还有就业渠道输送,很符合我们应届生的需求。

理论课可以上一上Coursera,有很多知名大学的公开课。不过题主英语得好,翻栅栏姿势也得到位。听说他们暂时不会大举进入中国,所以中文字幕这个问题就尴尬了。

国内的MOOC内容提供商、我就只能说:唉。

其他网上资源:
网上的博客。大神都在网上,多看看几个大神的博客也不错,这里就不一一列举了,不然又是一篇答案的长度。就是别局限于中文大神博客,英文博客好东西更多,甚至现在国内开发者也会用英文写东西(没办法,谁叫英文最流行)

Github一定要用。Github可以说是开发者的聚集地。

如果你对某一种技术感兴趣,相关论坛也是好去处。

各种技术一般都有自己的年度研讨会(Conference)。每次都会把内容上传到油管。题主一定要会用标准姿势翻栅栏看油管。油管上的教程和技术视频太多了。

嗯,大概就是这样。

作者:Philosophy King
链接:https://www.zhihu.com/questio...
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

你知道吗?

宣传栏