关于程序员成长的一点思考,程序员必须得看
程序员的咱们,是否想过从此的路该怎么走、如何发展、技术怎样提升?其实这也是我一直在思考的问题。下面就此问题,分享下个人见解。由于我阅历有限,有什么说的不对的,你们一块儿喷!
1、程序员应该打好基础
1. 如今开发工具众多、语言泛滥,常常听人说“不学C,C++神马都是浮云”、“C,C++才是万王之王”,C,C++就真比PHP、Lua、AS、JAVA牛吗?
我一哥们学java+android仍是从黑马程序员培训出来的,月薪就8K多了?难道他学的是C,C++?
(看到这里确定不少人好奇了,这么牛?培训出来真的这高工资?骗人的把?这我也很少说,推荐个比较经典java基础教程给大家看看,感兴趣的能够本身看下,看过以后你就会明白。)
基础教程下载:
点击下载
再推荐一个教程分享的订阅:
点击订阅
2. 有些人会说大学学的东西是肤浅的,是没有用的。想一想看,在学校的时候我也常常这么想,但出来后才知道这些东西有多么重要。不过大学学得再扎实,出来后仍然是须要再温习过的。由于上学毕竟实践少,所学不能所用,计算机是个应用驱动的学科。咱们再来看“计算机考研”专业课考的什么(这里并非说考研就必定 好),“数据结构”、“计算机组成原理”、“操做系统”、“计算机网络”。“数据结构”、“计算机组成原理”这两门课程摆在前面,可见其重要性,分别是软 件和硬件最重要的两门基础课。我不相信不学好“数据结构”可以把性能优化作得很好。若说本身学好了,能不看书、不查资料,说出“B+树、B-数的应用和区 别”、“KMP为何能快速匹配字符串”、“快速排序在什么状况会蜕变为o(n^2)”吗?
我也不相信不学透“计算机组成原理”能搞通汇编和内核,不知道“CPU和I/O的交互过程”、“指令的执行通路”、“CPU运算器的工做原理”,如何写出 高效的汇编代码?如何弄清楚内核中“中断”、“GDT”、“IDT”这些概念,实模式保护模式如何切换?“操做系统”和“计算机网络”则是两门很是重要的 支撑学科,信号量为何是最快的同步方式、线程调度比进程调度快、为何要作内存缓冲池,这些都是来自“操做系统”。而“计算机网络”主要是讲述 TCP/IP的,为何德问“对于一个具备几百万粉丝的用户,数据如何实时投递到全部用户?”要使用多播的方式解决、“如何计算出C/S单向的延迟?”发 送ICMP包测量,这些都是来自它。
咱们大学学的课程通过多少国内外知名学者专家研究过的,因此计算机理论课是基础,是解决问题的根源。“算法分析与设计”是“数据结构”的延 伸,Divide Conque、贪心、动态规划对于程序算法的优化有很大的指导意义。一样,“计算机体系结构”也是“计算机组成原理”的拓展。其次,“编译原理”、“数据 库”、“软件工程”等学科的重要性也不言自白。
2、实践、理论、再实践
做为程序员的咱们,知足于实现一个程序功能的快感,得意于从网上下载别人的代码加到本身的程序中,陶醉于本身写了上百万行代码。有想过本身是在创造吗,仍是装配车间的技术工人。日趋成熟的开发工具,逐步把有丰富想象力的咱们沦为奴隶。从网上下载个压缩库就用着、成熟的加密算法直接使了、包装好的类库就 include。为什么不探究其算法实现、性能优化、底层机制。有人会说很“难”啊!到底是难,仍是掌握的知识不够,仍是理论没有达到必定高度。
很难想象不学习“计算机图形学”,去作3D项目客户端图形算法的后果;不研究“数据挖掘”去分析大量客户数据会作得多好;不攻读“几率论”、“线性代 数”、“人工智能”去设计AI有多么智能。不少人说,这些东西游戏用不着啊,学了有什么用?我认可初学编程时,这些东西只是高谈阔论。若咱们工做了n年后,还只是熟练地作些coding,和刚毕业的学生有什么区别。编程工具只是“工具”而已,别忘记了咱们是改变世界的程序员,不提升理论,何以创新、公司 拿什么优点和别人去竞争。
“研发”是“研究”和“开发”两大块,只作开发,不作研究,对我的和公司都只是短时间目标, 固然理论提升了,是须要投产的,否则理论很快沦为“空想社会主义”,公司白花银子养活研究部门。“实践、理论、再实践”,符合马克思主义哲学思想,也是计 算机学科的价值体现。真正的计算机科学家不是只搞理论的,理论是要应用到产品中的。工程师也不是只作开发不作研究的,是要应用创新,理论微创新。计算机科学家相比于程序员,主要是数学功底至关深厚,因此他们能在理论上有突破。
3、技术、管理两路线。
1. “游戏能玩多深,技术就能作多深”,这句话说得很好。只由于咱们执着,因此在游戏中能攻破一层层难关,凌晨二、3点还能练级打装备。若能走回正道,作技术就想玩游戏同样,技术作不深才怪呢。走技术路线的人,必定是对技术痴迷的人。但要走得长远,咱们须要把技术作穿、作透。如何作穿、作透?计算机底层(C、 汇编、逆向工程、驱动、内核)、计算机算法(网格计算、音视屏压缩、语音识别…)、架构(软件工程、跨平台、多语言等)都要有涉及。只有咱们掌握了这些,才能作到“看问题看到本质”、“思想有穿透力”。这些才是最宝贵的,须要沉淀下来,仅仅靠作项目、写代码是没法达到的。
2. 对于走管理路线的人,是具备“完成任务为第一要务”、“有计划、善于管理时间”、“善于与人打交道”性格特色的人, 重要的是“综合素质”,而不是“专攻”。可是这些都是能够改变的,不少公司也会选择技术作得最优秀的人作管理。因为我是一个技术痴迷狂,管理这块,我没有发言权,不作多解释。
4、心态。
1. 人活在世界上在于奉献而不是索取,帮助别人是一件很快乐的事情, 做为程序员的咱们心胸要开阔些,低调些、虚心些,公司的李老师、老张就是一个心胸很宽广、低调的人,值得学习,三人行必有我师,咱们熟悉的只是本身的这一块、这个领域,不懂的地方要虚心向别人请教, 我见过浮躁、过于自信的人,也见过作人低调的人,发展结果彻底不一样。
2. 乐于分享,支持开源。这是一个很须要心胸、气度的事,也是决定我的、公司发展快慢的重要砝码。技术发展突飞猛进,总守着本身手中的那点技术,得不到长足的发展。中国两千年的封建历史、门户关闭政策还不够惨痛吗?“技术是交流和玩出来的”,这是锐安龙哥告诉个人。他也是一个大黑客、正义的黑客,开源是黑客的 一项重要精神,因此黑客能引领技术。
3. 每日学习。不少人认为毕业了就不用学习了,或者不用那么那么地学习了。这是一个很是很是错误的思想,不管什么时候何地都要把本身当成菜鸟、应届生地去学习。书本是学习的一个捷径,Google、百度解决问题是快,但不是系统化地学习。看书要了解做者背后的知识底蕴,想想这个问题得解决做者是怎么想到的,这样 比单纯解决一个问题更进一层。更重要的是聆听做者的心声,感觉大师的心态。最后给你们推荐“黑客与画家”这本书,写得真的很好,老吴不提,我还不知道。
欢迎关注本站公众号,获取更多信息