路要怎么走?关于程序员成长的一点思考

程序员的我们,是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题,分享下我的看法。因为我阅历有限,有什么说的不对的,大家见谅,千万不要喷……

程序员的休息一刻

一、程序员应该打好基础

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.mzph.cn/news/454195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow 常见API

数据类型转换相关API Tensor Shape获取以及设置相关API Tensor合并、分割相关API Error相关类API 常量类型的Tensor对象相关API 序列和随机Tensor对象相关API Session相关API 逻辑运算符相关API 比较运算符相关API 调试相关API 图像处理-编码解码相关API 图像处理-调整大小相关…

8.2 命令历史

2019独角兽企业重金招聘Python工程师标准>>> 命令历史 history //查看之前的命令.bash_history //存放之前敲过的命令,在 /root/ 目录下最大1000条 //默认参数值是1000条变量HISTSIZE/etc/profile中修改 //在其中可编辑HISTSIZE参数HISTTIMEFORMAT"…

TensorFlow 实例一:线性回归模型

代码 # -- encoding:utf-8 -- """ Create by ibf on 2018/5/6 """import numpy as np import tensorflow as tf# 1. 构造一个数据 np.random.seed(28) N 100 x np.linspace(0, 6, N) np.random.normal(loc0.0, scale2, sizeN) y 14 * x - …

Dapper的基本使用

Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。给出官方地址。 http://code.google.com/p/dapper-dot-n…

易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别

利用 NLP 技术做简单数据可视化分析Chat 简介:用递归神经网络采用端到端识别图片文字,递归神经网络大家最早用 RNN ,缺陷造成梯度消失问题;然后采用了 LSTM,解决 RNN 问题,并且大大提高准确率;现…

Android4.0蓝牙使能的详细解析

毫无疑问,bluetooth的打开是在Settings中进行的操作。因此,冤有头,债有主,我们来到了Settings.java中,果然发现了相关的代码如下: mBluetoothEnabler new BluetoothEnabler(context, new Switch(context));…

移动端导出excel_连载系列【4】Excel开发移动端quot;APPquot;

前三篇文章介绍了百度地图生成器、源代码编辑器、GPS经纬度批量转换工具、源代码编辑器中添加自定义功能按钮和地图控件。这些写好的Java Script代码虽然可以实现所有期望的结果,但毕竟不是一个HTML文件,不便于传播和使用,更无法变成一个类似…

《操作系统》OS学习(二):启动、中断、异常

Bootloader:加载OS。操作系统一开始是放在DISK(硬盘)中,并不是放在内存中。 BIOS:基本I/O处理系统。存放在ROMRead-Only Memory)只读存储中 BIOS(Basic Input/Output System)基本输入输出系统。…

常用css属性集(持续更新…)

禁止换行,超出部分显示…:a. 代码:.hide_word{ max-width: 100px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } b. 效果: 本文转自 bilinyee博客,原文链接: http://blog.51cto.co…

parallels网络初始化失败_33 个神经网络「炼丹」技巧

自然语言处理Andrej Karpathy 是深度学习计算机视觉领域、与领域的研究员。博士期间师从李飞飞。在读博期间,两次在谷歌实习,研究在 Youtube 视频上的大规模特征学习,2015 年在 DeepMind 实习,研究深度强化学习。毕业后&#xff0…

《操作系统》OS学习(三):系统调用

例子 首先看一个标准C库的例子:当我们程序中使用了C库中的printf()函数,实际在底层是在内核态中调用了write()函数。图中右侧则是将程序代码与C库都算到应用程序中,内核提供了一个系统调用接口。 从这个例子我们可以得到以下几点&#xff1a…

JavaScript服务器端开发技术(对象属性的枚举与查询)

既然对象是属性的集合,那么检测与枚举集合中的属性就是一项重要任务。对此,我们来分别看一下ES3和ES5提供的解决方案。 1) ES3枚举方案 示例代码: var contacts{ ID:[0,1,2,3,4,5], names:["Zero","One","Two&q…

treelistview 所有节点失去焦点_垃圾询盘过滤,焦点科技的 Milvus 实践

文章作者:黎阳,焦点科技软件开发工程师李成龙,Zilliz 数据工程师Milvus (https://milvus.io/) 向量搜索引擎开源半年以来,全球已经有数百家企业或组织用户。焦点科技是一家以 B2B 外贸交易为主营业务的科技公司,也是 M…

《操作系统》OS学习(四):计算机体系结构、内存层次和地址生成

计算机除了计算能力之外还有存储能力,存储能力即计算机拥有一系列的存储介质,我们可以在存储介质上存储我们的代码和数据。计算机体系结构中约定了哪些地方可以用来存储数据:CPU内的寄存器、内存和外存。不同的存储介质,容量、速度…

GCC中SIMD指令的应用方法

X86架构上的多媒体应用开发,如果能够使用SIMD指令进行优化, 性能将大大提高。目前,IA-32的SIMD指令包括MMX,SSE,SSE2等几级。 在GCC的开发环境中,有几种使用SIMD指令的方式,本文逐一介绍。X86的…

使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular

上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from angular/core; import { Http, Headers } from angular/http; import { Observable } from rxjs/Observable; import { ErrorHandler } from angular/core; import rxj…

leelen可视对讲怎么接线_楼宇对讲系统怎么布线 楼宇对讲系统布线方式【介绍】...

随着智能小区规模不断增加,楼宇可视对讲系统应用越来越广泛,因而视频信号的传输方式与布线设计显得越来越重要。视频信号与数据和音频信号不同,可行的一种传输方式为视频信号基带传输,下面小编就简要介绍一下这种传输方式和布线方…

路由汇总实例

5.2.2.2 路由汇总策略 之前提到过,在网络管理员计划好子网选择并进行预期地路由汇总时,手动路由汇总工作能取得最佳效果。例如,之前的例子设定好了一个考虑周全的计划,管理员只使用远离Yosemite路由器并以10.2开头的子网。这个规定…

《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统

内存碎片 在没有其他方式辅助的情况下,我们分配给一个进程的内存是连续的。在分配时候我们需要有动态分配与碎片处理。如何理解呢?就是每个进程需要一块内存,我们要选取合适的位置的内存分配给它。当有的进程先结束了内存还给操作系统&#…

世界之窗浏览器删除文本框信息_文本框——Excel里的便利贴

工作表里面的单元格应该是足够我们来记录数据和信息了。但是文本框这个功能在工作表中还是存在,可以理解为便利贴功能。插入文本框1.点击“插入”选项卡。2.然后点击“文本框”。3.在下拉菜单里面,有两种可供选择:横排文本框和垂直文本框。在…