培训班能帮你入门嘛?
放弃吧,如果你没有能力自学,培训班根本帮不了你。
写代码没有捷径,如果你希望在这条路上继续走下去,你必须打好基础,不断学习新的知识才有可能。
如何学?
学习要经历很多阶段:1.基本语法;2.编码实践;3.技近乎道;4.创造新世界。
A(基本语法):学习任何东西,都是一个由表及里的过程。对于一门编程语言来说,“表” 就是基本词汇和语法。对于基础语法的学习,我们可以看一些简短而又系统的教程。B:要掌握基础,持续练习。每一门编程语言的学习容都会涉及:1,运行环境;2,数据类型(数字、字符串、数组、集合、映射字典等);3,表达式;4,流程控制;5,类、方法与函数,等基本内容;6,不同的语言还有一些不同的特性。
看经典书+优秀的视频 应该是最好的入门。
“里”就是思想。深入了解面向对象编程OOP、函数式编程FP、并发、异常、文件IO、网络、标准库等内容。
B(编码实践):
在实践中,我们逐步熟练使用很多API库、框架,也不断踩坑填坑、看源代码、不断解决问题,不断加深对语言的理解,同时会看一些优秀的框架源代码。
如果还有精力,我们再去学习语言更底层的东西,而不仅仅停留在应用层面。如Java中的集合类实现的算法与数据结构。
如JVM是如何执行Java代码的。如Java的线程和操作系统线程的关系。以及一些操作系统方面的知识。
所有数据结构和算法用Java 都实现一遍。
Java集合框架, 不但要学会用, 我还会尝试着实现一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等
C:“无他唯手熟尔”
《敏捷软件开发, 原则,模式,实践》,里边详细的讲解了一个薪水支付案例,是迄今为止最好的面向对象设计的例子
在学习Java SE和Java EE的同时, 我会读一下这些源代码:
D(技近乎道):“运用之妙,存乎一心”
E(创造新世界):
“编程的本质就是创造世界。”达到这个境界的,基本都是世界顶尖大牛了。
工欲善其事必先利其器
工具用的顺手,能让你事半功倍,所以需要把工具,环境搭建好。效率提升的同时,也能让你少踩坑,少走弯路。
搭好环境+配好工具
重点内容
计算一段程序的时间复杂度、空间复杂度,如何理解栈、队列等数据结构,了解网络协议的基础。
提问式
不要先讲概念。直接上代码,让学生尝试着解答(引发学生主动思考)。答疑的过程中讲解概念。
SICP
上手开发后,你就要理解原理,懂得调优。
分5步走:1. 建立基本概念;2. 按照User Guide/Tutorial写例子,写个Demo;3. 扩展;4. 深入技术原理;5. 输出。讲解,写博客,讨论都可。
初入职场的“菜鸟”,怎么攻克一门看起来很难的技术?
学习是一个螺旋上升的过程,想要上升就得深度思考,多问几个为什么。 基于为什么进行思考。思考多了,积累到一定程度,量变就会引起质变,整个系统就被你看透了,你的知识又扩大了一圈,更多的疑问出现了…
吃透基础技术
养成良好的阅读源码的习惯
制定长期的技术学习规划
你主动去发现应用中的问题,以及找解决方案来解决问题,这个时候就不仅限于眼前的某一种技术了,需要有一个大局观,如何培养你的这种大局观呢,多混社区多和优秀的同行交流,多看源码多学习优秀的开源项目。最好是能够成为优秀开源项目的contributor甚至commiter。
学习代码的历程,你会发现都是类似的,是螺旋上升的,是循序渐进的。你是从先会一些最简单的逻辑,到开始写一些能用但不好的代码,慢慢自己通过阅读文档、阅读别人的源码来慢慢提升。
写代码一方面需要灵性,需要实践经验的积累,另一方面需要打好基础。在这行业里奋斗的同学们能沉下心多钻研,不要相信有所谓的捷径。
从局部到整体。说得通俗一点就是要脚踏实地,不要老是飘在天上,因为在天上看到的是一整个生态,你当然会看到有很多很多东西,但是如果你不走近看的话你是不会知道,其实有很多东西都是类似的,经典的理论就那么几个,大家的系统很多都是照着这些理论去实现的,只是实现的方式会有些不一样,所以同类型的产品可能场景会稍有不同,但是架构是非常类似的,熟悉了之后你会发现,大部分系统万变不离其宗。
指导方针
要利用以前所学的语言的功底,但是也要保持开放的心态。这些在认知心理学中有相应的讲述。
底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。
以终为始先定一个目标,比如学完后写一篇教程,然后去学习,这样更加有动力,有意思的刻意练习,更为有效。知识经过整理,才更容易理解,容易理解的只是才更容易记忆。
通过PDCA控制。PDCA循环又叫质量环,是管理学中的一个通用模型,最早由休哈特于1930年构想,后来被美国质量管理专家戴明博士在1950年再度挖掘出来,并加以广泛宣传和运用于持续改善产品质量的过程。
PDCA是英语单词Plan(计划)、Do(执行)、Check(检查)和Adjust(纠正)
P (plan) 计划,包括方针和目标的确定,以及活动规划的制定。
D (Do) 执行,根据已知的信息,设计具体的方法、方案和计划布局;再根据设计和布局,进行具体运作,实现计划中的内容。
C (check) 检查,总结执行计划的结果,分清哪些对了,哪些错了,明确效果,找出问题。
A (Adjust)纠正,对总结检查的结果进行处理,对成功的经验加以肯定,并予以标准化;对于失败的教训也要总结,引起重视。对于没有解决的问题,应提交给下一个PDCA循环中去解决。
以上四个过程不是运行一次就结束,而是周而复始的进行。
总结:前期准备、中期执行、后期回顾
人性天生懒惰,大部分的人都是半途而废的专家,其实很多时候,不是我们比别人笨,而是别人比我们更坚持。高德纳先生曾经说过“过早退出是一切失败的根源。 兴趣遍地都是,专注和持之以恒才是真正稀缺的。”
如何坚持下去?给任务作出规划,按进度一步步执行。完成后,反思自己的计划和执行情况。
过不断跳出自己的舒适区,使得自己快速的成长。
通过对比学习来加深理解,并通过大量实践深入理解,达到熟练使用。
深度广度辩证
深度和广度,虽然表明看起来是相悖的,但是我认为其本质是统一的。一个卓越的程序员,其最终都应该是一门精通多门熟悉的人。在早期的时候,程序员是在学习基础课程。到工作以后就需要通过实践来加深自己的技术深度,否则将很难通过大公司的技术面试,这个时候深度要比广度重要。而当程序员的技术达到一定高度后,你的岗位职责就要求你有更高的视野,而只有扩展技术栈才能提高技术视野,这个时候广度就优先于深度了。
程序员的不同阶段,广度和深度的优先级也不尽相同。最终,程序员所掌握的每个技术栈都将构成他的一部分,而这些技术栈一起合力打造一个最完美的程序员。所以,不存在转行一说,只是有时候程序员需要去接触更多的技术。