程序员的我们,是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题,分享下我的看法。因为我阅历有限,有什么说的不对的,大家见谅,千万不要喷……
一、程序员应该打好基础
1. 现在开发工具众多、语言泛滥,经常听人说“不学CC++神马都是浮云”、“CC++才是万王之王”,CC++就真比PHP、Lua、AS、JAVA牛吗?其实不在于语言本身,而在于CC++依附的平台。因为最靠近操作系统,所以能发挥其它语言不具有的性能优势,而且很多数据结构、算法、特殊功能类,CC++是不提供的,需要自己实现。这时就需要自己去温习“数据结构”、“算法”、“TCP/IP”、“操作系统原理”、“编译原理”等这些知识。正因为如此,我们学习的东西被沉淀下来,也正因如此,CC++经过定制的功能比封装好的功能性能高。
我上大学做项目时,用的是.net平台C#语言, 因为我本性好专研,老师都是把需要研究、比较难的问题交给我。但C#无论是性能和功能都是都是无法跟CC++比的,记得当时是要做一个“远程控制”软件,配置IP和端口后需要连接动态生成客户端程序(木马),但C#是不提供这个功能的。这也是我工作后转为CC++程序员的原因,碰巧也是开发远程控制软件。刚开始写出来的程序偶尔会莫名奇妙的崩溃,但经过两个月和更长的时候后,我掌握了CC++。在此要感谢我工作时的指导老师翁跃龙,没有他我的路不会这么平坦,他教我的不仅仅是技术,更多的是解决问题的思路和做人。
2. 有些人会说大学学的东西是肤浅的,是没有用的。想想看,在学校的时候我也经常这么想,但出来后才知道这些东西有多么重要。不过大学学得再扎实,出来后仍然是需要再温习过的。因为上学毕竟实践少,所学不能所用,计算机是个应用驱动的学科。我们再来看“计算机考研”专业课考的什么(这里并不是说考研就一定好),“数据结构”、“计算机组成原理”、“操作系统”、“计算机网络”。“数据结构”、“计算机组成原理”这两门课程摆在前面,可见其重要性,分别是软件和硬件最重要的两门基础课。我不相信不学好“数据结构”能够把性能优化做得很好。若说自己学好了,能不看书、不查资料,说出“B+树、B-树的应用和区别”、“KMP为什么能快速匹配字符串”、“快速排序在什么情况会蜕变为o(n^2)”吗?我也不相信不学透“计算机组成原理”能搞通汇编和内核,不知道“CPU和I/O的交互过程”、“指令的执行通路”、“CPU运算器的工作原理”,如何写出高效的汇编代码?如何弄清楚内核中“中断”、“GDT”、“IDT”这些概念,实模式保护模式如何切换? “操作系统”和“计算机网络”则是两门非常重要的支撑学科,信号量为什么是最快的同步方式、线程调度比进程调度快、为什么要做内存缓冲池,这些都是来自“操作系统”。而“计算机网络”主要是讲述TCP/IP的,为什么得问“对于一个具有几百万粉丝的用户,数据如何实时投递到所有用户?”要使用多播的方式解决、“如何计算出C/S单向的延迟?”发送ICMP包测量,这些都是来自它。
我们大学学的课程经过多少国内外知名学者专家研究过的,所以计算机理论课是基础,是解决问题的根源。“算法分析与设计”是“数据结构”的延伸,Divide Conque、贪心、动态规划对于程序算法的优化有很大的指导意义。同样,“计算机体系结构”也是“计算机组成原理”的拓展。其次,“编译原理”、“数据库”、“软件工程”等学科的重要性也不言自白。
二、实践、理论、再实践
作为程序员的我们,满足于实现一个程序功能的快感,得意于从网上下载别人的代码加到自己的程序中,陶醉于自己写了上百万行代码。有想过自己是在创造吗,还是装配车间的技术工人。日趋成熟的开发工具,逐步把有丰富想象力的我们沦为奴隶。从网上下载个压缩库就用着、成熟的加密算法直接使了、包装好的类库就include。为何不探究其算法实现、性能优化、底层机制。有人会说很“难”啊!究竟是难,还是掌握的知识不够,还是理论没有达到一定高度。
很难想象不学习“计算机图形学”,去做3D项目客户端图形算法的后果;不研究“数据挖掘”去分析大量客户数据会做得多好;不攻读“概率论”、“线性代数”、“人工智能”去设计AI有多么智能。很多人说,这些东西游戏用不着啊,学了有什么用?我承认初学编程时,这些东西只是高谈阔论。若我们工作了n年后,还只是熟练地做些coding,和刚毕业的学生有什么区别。编程工具只是“工具”而已,别忘记了我们是改变世界的程序员,不提高理论,何以创新、公司拿什么优势和别人去竞争。
“研发”是“研究”和“开发”两大块,只做开发,不做研究,对个人和公司都只是短期目标, 当然理论提高了,是需要投产的,不然理论很快沦为“空想社会主义”,公司白花银子养活研究部门。“实践、理论、再实践”,符合***主义哲学思想,也是计算机学科的价值体现。真正的计算机科学家不是只搞理论的,理论是要应用到产品中的。工程师也不是只做开发不做研究的,是要应用创新,理论微创新。计算机科学家相比于程序员,主要是数学功底相当深厚,所以他们能在理论上有突破。
三、技术、管理两路线
1. “游戏能玩多深,技术就能做多深”,这句话说得很好。只因为我们执着,所以在游戏中能攻破一层层难关,凌晨2、3点还能练级打装备。若能走回正道,做技术就像玩游戏一样,技术做不深才怪呢。走技术路线的人,一定是对技术痴迷的人。但要走得长远,我们需要把技术做穿、做透。如何做穿、做透?计算机底层(C、汇编、逆向工程、驱动、内核)、计算机算法(网格计算、音视屏压缩、语音识别…)、架构(软件工程、跨平台、多语言等)都要有涉及。只有我们掌握了这些,才能做到“看问题看到本质”、“思想有穿透力”。这些才是最宝贵的,需要沉淀下来,仅仅靠做项目、写代码是无法达到的。
2. 对于走管理路线的人,是具有“完成任务为第一要务”、“有计划、善于管理时间”、“善于与人打交道”性格特点的人, 重要的是“综合素质”,而不是“专攻”。但是这些都是可以改变的,很多公司也会选择技术做得最优秀的人做管理。由于我是一个技术痴迷狂,管理这块,我没有发言权,不做多解释。
四、心态
1. 人活在世界上在于奉献而不是索取,帮助别人是一件很快乐的事情, 作为程序员的我们心胸要开阔些,低调些、虚心些, 公司的李老师、老张就是一个心胸很宽广、低调的人,值得学习, 三人行必有我师,我们熟悉的只是自己的这一块、这个领域,不懂的地方要虚心向别人请教, 我见过浮躁、过于自信的人,也见过做人低调的人,发展结果完全不同。
2. 乐于分享,支持开源。这是一个很需要心胸、气度的事,也是决定个人、公司发展快慢的重要砝码。技术发展日新月异,总守着自己手中的那点技术,得不到长足的发展。中国两千年的封建历史、门户关闭政策还不够惨痛吗? “技术是交流和玩出来的”, 这是锐安龙哥告诉我的。他也是一个大黑客、正义的黑客,开源是黑客的一项重要精神,所以黑客能引领技术。
3. 每日学习。很多人认为毕业了就不用学习了,或者不用那么那么地学习了。这是一个非常非常错误的思想,无论何时何地都要把自己当成菜鸟、应届生地去学习。书本是学习的一个捷径,Google、百度解决问题是快,但不是系统化地学习。看书要了解作者背后的知识底蕴,想一想这个问题得解决作者是怎么想到的,这样比单纯解决一个问题更进一层。更重要的是聆听作者的心声,感受大师的心态。
转自:http://www.ipc.me/think-about-the-programmer.html
分享到:
相关推荐
本书《程序员成长的烦恼》对程序员成长过程中所遇到的各类问题进行了深入探讨,涵盖了从初学者到高级开发人员需要掌握的知识点和解决方法。 首先,初入IT行业的程序员将面临学习编程语言的挑战。在众多的编程语言中...
在C++程序员的成长道路上,经常会遇到一些常见的误区和弯路,这些弯路不仅会浪费大量时间,还可能阻碍技能的真正提升。以下是C++程序员在成长过程中最常走的...不断学习、实践和反思,是每个程序员成长不可或缺的环节。
《程序员求职面试宝典》是一本为准备求职的程序员量身打造的综合指南,它涵盖了面试真题、求职技巧以及职业规划等多个方面,旨在帮助程序员在竞争激烈的IT行业中脱颖而出,找到理想的工作。以下是对这些关键知识点的...
### 程序员创业必须要过的三关 随着互联网行业的快速发展与变化,越来越多的程序员选择走上创业的道路。然而,创业并非易事,特别是在一个充满竞争和技术快速迭代的环境中。本文将深入探讨程序员创业过程中必须克服...
### 编程之路:探索与挑战 #### 一、引言与个人背景 本文作者是一位计算机专业本科毕业生,毕业后已从事软件...希望每位想要成为程序员的朋友都能够找到自己的定位,勇敢地走上这条充满挑战但也同样充满机遇的道路。
在当今社会,程序员作为一种技术性极强的职业,受到众多求职者的追捧。然而,对于程序员而言,除了不断学习新...程序员应该在工作中不断总结经验,吸取教训,把握每一个提升自我的机会,以期在程序员的道路上越走越远。
思考方法论对程序员来说同样重要。理解自己的身份、具备的能力以及能为他人提供的价值,这将有助于我们在解决问题时更有针对性。通过不断实践和反思,形成自己的编程哲学和解决问题的策略。 建立影响力是职业发展的...
每一行代码都承载着程序员的思考与智慧。然而,在这个光鲜亮丽的外表下,却隐藏着无数的辛酸与汗水。日复一日的编码工作,不仅要消耗你大量的时间,更要考验你的耐心和毅力。因此,如果你没有足够的热情和兴趣,那么...
### 程序员进阶修炼说明:35岁前要培养的66种明智思维 #### 第一部分:剑走成功偏锋——另类思维与反弹琵琶 在这个快速变化的时代,要想在IT行业中脱颖而出,单凭传统的思维方式往往难以达到预期的效果。因此,**...
虽然新技术层出不穷,但扎实的基础知识依然是程序员成长道路上不可或缺的一部分。例如,深入理解数据结构与算法原理对于编写高效稳定的代码至关重要;而熟悉操作系统、网络协议等底层知识也能帮助我们在遇到问题时更...
- **迷茫与探索**:许多程序员对未来感到迷茫,不确定自己是否走在正确的道路上。然而,这种迷茫感也可以转化为前进的动力,促使人们不断地探索和发展。 - **个人价值观**:作者强调,作为一名程序员,不应仅仅满足...
在科技高速发展的今天,程序员这个职业越来越受到社会的关注,而《疯狂程序员》这部作品,以独特的视角切入,讲述了程序员们在成长道路上的点点滴滴,尤其前40回的精彩内容,给读者们带来了无尽的思考与启发。...
【程序员修身养性的十大原则】是针对IT从业者提升个人素养和职业发展的重要指南。这些原则不仅关乎编程技能的...通过践行这些原则,程序员可以在个人成长和职业道路上走得更远,同时也能够享受到更健康、更平衡的生活。
但这条路并不是那么容易走,本文将分享一位程序员转行成为运营人员的心路历程,从每天想要离职的窘境到最后找到职业归属感的转变。 程序员出身的他,对代码的熟悉度和逻辑思维能力让他在技术领域游刃有余,但转行至...
《程序员职场第一课:技术之外要有灵魂》这本书旨在引导程序员们理解,技术能力虽然是职业的基础,但仅仅依赖技术并不能在职场上获得全面的成功。...这样的程序员才能在职场上走得更远,实现个人和团队的共同成长。
### 知识点总结 #### 一、小规模团队中的多角色挑战 在软件开发行业中,尤其是对于小型软件企业而言...综上所述,小型软件企业面临着诸多挑战,但只要采取正确的方法和策略,完全有可能克服这些困难,实现健康成长。
只有那些具备坚定信念、充足资源并且敢于面对失败的人才更适合走上创业之路。 在学习和成长的过程中,JAVA程序员应避免急功近利,而是保持耐心和持续的学习热情。不断地反思和总结,与同行交流经验,这不仅有助于...
现在市场上有数不胜数的小管理软件公司,这是同中国社会走转型之路相关的。 基于商流、资金流、信息流、物流的行业都有相当的发展前景通过产权交易的商流,带动资金流和信息流的发展。物流是新兴的行业,这些都需要...
对于刚走出校门,即将踏入这一领域的大学生们,实习无疑是一段宝贵的体验。通过实习,他们不仅能够检验在校所学理论知识的实用程度,也能够培养和提升实践技能,从而更好地适应未来的工作环境。以下是对三篇程序员...