初学编程的朋友,总觉得写程序是件单纯的事情:知道如何使用一种语言,熟悉一个开发环境,了解系统的编程接口(API)就已经能够成为一个合格的程序员 了。在我刚刚接触编程学习的时候,我也是这么认为的。这种认识不是没有根据的。在我有这样的认识的时候,我已经会用basic写一些小程序,甚至照葫芦画 瓢写了一些游戏动画界面了。在上个世纪末所谓的计算机的“游侠”时代,这个看法是有其合理性的;但是今天回过头来看,这些最初的认识实在是肤浅的。今天软 件开发已经成为一个成熟的行业,因此如果想在这个行业中生存,核心竞争力是必须的。学会一种语言,熟悉一个开发环境,掌握API的程序员永远只能位于这个 大厦的最下层,仅仅比程编程爱好者强一些。如果想摆脱这个局面,就得知道哪里才是这个行业的核心。
软件行业,就其功能而言就是一个工具行当,和会开车的司机,会开机器的工人没有什么区别。因此仅仅作为工具的操作者, 一个程序员是不值钱的,因为他只是一个更为高级的工具。一个有身价的程序员他之所以值钱,是在于他的创造力。程序员的创造力并不在于会画个界面,会用开发 环境什么;而在于他对计算机这个行当的根本的掌握。 计算机是应用数学和电子工程上派生出来的一个果子。因此程序员的核心竞争力在对数学和硬件知识的掌握。因此这个世界上只有两种程序员永远不会待业,那就是 算法高手和硬件高手。 但是对于软件专业出身的程序员来说, 算法是最核心的竞争力。我和很多程序员相处过,交流过。他们中的大多数都有对失业的担心,即便是已经在大公司从业了很多年的程序员: 软件技术发展日新月异,没人能永远跟住技术发展的脚步,总有会被淘汰的时候。 但是那些着眼于算法的程序员大多没有这种忧虑,年龄的增长只能让他们更加有经验,变得更吃香。我认识的一个做图像处理的朋友,写出来的程序一点可读性都没 有,而且很不规范,动不动就crash了。但是老板无论换谁,都不会换他,因为他的算法性能高,能实现别人不能实现的图像检测能力。而那些帮他改程序,写 注释的“职业”程序员, 尽管写出来的程序正规工整,但是工资涨不了多少,而且还得担心哪天就开路了。 相比之下, 可见一斑。
因此,学习编程的朋友们,不要去太过追求和写代码相关的能力,抱着本MFC手册当宝典了,而是应该耐心下来关注最基础的数据结构和算法,把他们搞透玩熟。 这是基础中的基础,核心中的核心;没有这些,以后的会很难得到提高。而且这些基础可能在以后的十几二十年里面,你都不会再会有时间和精力去重新扎扎实实学 一遍了。
此外,我还想补充一点。是不是这么说软件工程就没必要去学了? 软件工程是计算机科学中比较偏向工程方面的一个比较新的分支,对于开发而言也是至关重要。因此这个肯定是要学,而且要学好,此外在工程上,程序框架,类库 的掌握,都是必须的知识。 但是掌握这些知识只能让人成为一个合格或者出色的工匠, 但是永远成为不了一个有创造力的大师。这个社会上,工匠成千上万,多你一个不多,缺你一个不少;但是大师却是寥寥无几。在计算机行业,更是如此。

转载于:https://blog.51cto.com/nathanxu/110075

编程学习初体验(4. 编程的核心)相关推荐

  1. 编程学习初体验(5. 如何自学编程)(3)

    3 少量项目实践--自学和上学的区别 有句老话叫做学以致用,说的是如果不是为了用而学,是没有意义的: 同样,在用中学才能真正的掌握学到内容.编程跟着书本走,入书之后终究需要脱离书本,做到"出 ...

  2. 【头歌平台】人工智能-深度学习初体验

    深度学习初体验 第1关:什么是神经网络 第一题 神经网络中也有神经元,这些神经元也会与其他神经元相连接,这样就形成了神经网络,而且这种网络我们称之为全连接网络.如下图所示(方块表示神经元): 从图可以 ...

  3. 莆田Java开发_莆田学java编程,莆田java编程学习学校,莆田java编程学习一般能拿多少工资...

    莆田学java编程,莆田java编程学习学校,莆田java编程学习一般能拿多少工资 首页 > java > 莆田学java编程 作者:镀金池   发布时间:2017-10-18 06:51 ...

  4. yii schema.mysql.sql_YII学习,初体验 ,对YII的一些理解.

    先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...

  5. linux编程学习_您需要编程技能才能学习Linux吗?

    linux编程学习 几个月前,我参加了edX提供的Linux入门课程. 这是一门18章的课程,其中包含大量阅读材料,一些视频以及随意测试知识水平的课程. 我写了关于前六章的内容,以及该课程的工作原理, ...

  6. day21—AngularJS学习初体验

    转行学开发,代码100天--2018-04-06 今天按照学习计划安排,开始AngularJS的学习. 关于AngularJS,在菜鸟教程上这样介绍 好吧,Angular学习起来非常简单,哈哈,现在就 ...

  7. Android开发学习之路--网络编程之初体验

    一般手机都是需要上网的,一般我们的浏览器就是个webview.这里简单实现下下功能,先编写Android的layout布局: <?xml version="1.0" enco ...

  8. 1000小时编程恋爱初体验

    作者:Peter Higgins 翻译:童角大王 2017年10月4日,周三,我开始了一段学习和发现之旅,到目前为止,我已投入了700小时自学,500个小时参加编程训练营.一个目标始终激励着我--成为 ...

  9. (linux自学笔记)linux系统初体验与编程基础

    原文出处: http://www.cnblogs.com/hebaichuanyeah/ 接触linux几天时间.感觉快要完全放弃IDE和图形界面了--虽然个人感觉IDE方便很多. 关于gcc gcc ...

最新文章

  1. 计算机、数学、运筹学等领域32个重要算法
  2. 分布式消息队列 — RabbitMQ(3)
  3. Nginx源码分析-内存池
  4. vim的介绍与常用的命令
  5. java之arr.toString()与Arrays.toString(arr)区别
  6. 【SpringCloud】服务网关 gateway 和 zuul
  7. Junit 测试时内存溢出解决办法
  8. 许久了,都体会不到恋爱的气息
  9. java 字符串 字节数组_字符串到字节数组,字节数组到Java中的字符串
  10. 【MATLAB】基本绘图 ( 保存图像 | saveas 函数 )
  11. 基于linux环境tcp网络编程(在线英英词典)文档 [1]
  12. 【流媒体开发】6、ffplay命令
  13. win10 系统无法远程桌面连接到服务器,Win10系统不能建立远程桌面连接总是连接不上如何解决...
  14. 纠删码(Erasure Code)及其演进LRC(Locally Repairable Codes)原理讲解
  15. 再谈EPT与影子页表
  16. 浅谈sklearn中DBSCAN的欧式距离(Euclidean Distance)的计算
  17. 简单的基于交换机迁移的SDN控制器负载均衡实验
  18. warning: iteration xxxu invokes undefined behavior [-Waggressive-loop-optimizations]
  19. Excel快速入门02
  20. 抖音三农号创作者具体应该如何做?

热门文章

  1. 洛谷 P3376 【模板】网络最大流
  2. 在DataGireView中加筛选条件
  3. QQ牧场在高速模式下的一些小bug
  4. JavaScript从入门到精通[文章列表联接]
  5. Ubuntu 16.04 LTS, 64bit,cuda 8, Caffe环境配置编译和安装
  6. 2016年ADAS行业发展潜力及行业发展趋势分析【图】
  7. Redis命令——Keys相关
  8. android:windowSoftInputMode属性
  9. APT案例之点击事件
  10. 维基百科---似然函数