软件开发的确是一个系统性的工作,需要很多方面的知识和技能。根据我的研究,一个合格的程序员,单单是专业能力,就需要从技术栈、工具链、程序设计、架构设计、工程化、软件环境、软件开发模型、业务、产品这9个方面来学各式各样的东西。

当然并不是每个方面都要学很多很多,而是根据个人所处的阶段不同,有选择的学习。选择的原则是——满足本阶段的工作需要。

你刚开始,属于新手,典型的特点是在别人指导下完成非常具体的工作,那架构设计、业务和产品这三个方面基本可以略过,所以下面我只说技术栈、程序设计、工具链、工程化、软件环境和软件开发模型这六个方面都要学点什么,然后再给出项目实战怎么学。

一、技术栈

技术栈指软件开发特定技术方向的一系列技术的组合。

你学习C++,那以这个方向为例来说明。技术栈可以细分为语言、应用开发框架、数据库这三个方面。

语言方面,C++你已经在学了,可能还会牵涉到一些标记性的语言,比如XML,还可能会有混合语言的编程,需要学JS、Lua、Python等,根据项目需要来选就好。你初学,又没有明确的项目要求的话,先搞定C++本身就好。

关于C++本身,推荐两本书。

第1本是——《C++大学教程》(英文名C++ How to program)。这是很经典的教程,写的很通俗,我家里的是第2版,现在已经出到第9版了。

第2本是《C++编程思想》。这是经典中的经典,除了C++语言和标准库,还讲了编程实践的一些东西,比如调试、极限编程、测试先行、设计模式等等。

应用开发框架方面,就特别多了,比如STL、Qt、ffmpeg、libevent、Vorbis、OpenAL、OpenCL、C++React、Crypto++、OpenSSL、CppUnit、Cocos2d-x、CEGUI、wxWidgets、Ogre 3D、Skia、CxImage、OpenCV、Caffe、SDL、GStreamer、ACE、ZeroMQ、libcurl等等,干什么的都有,根据你要做什么样的项目来选择一两个就好。

数据库方面,也有很多,MySQL、Redis、SQLite、MongoDB等等,你要做的项目需要数据库,就挑一个,不需要,就不管它好了。

二、程序设计

广义的程序设计包含很多过程,比如分析、设计、编码、测试、排错等等。我这里说的是狭义的程序设计,仅仅指如何让程序变得更简洁有效更优雅的代码层面的设计。

这块需要了解数据结构、算法、编程惯用法、设计模式等等内容,初学的话,了解一些数据结构和常见的算法就好,其他的等干上两三年再来学也成。

推荐这本《数据结构、算法与应用:C++语言描述》:

三、工具链

工具链指的是在特定平台上的一套用于支持代码编写、编译、调试、运行、分析的工具组合。

就C++而言,你可以掌握一种IDE,比如Qt Creator、VS Code,这些IDE,一般都打包了编辑器、编译器、调试器和各种分析工具,一站式解决你的问题了,初学时基本不用别的了。

用VS Code的话,推荐这本《Visual Studio Code 权威指南》:

四、工程化

工程化工具,指的是编程、调试和分析等工具链之外的各种支持软件开发工作顺畅进行的工具。

你现在是新手,掌握两个方面的东西就好:

  • 掌握一种代码版本管理工具,git、svn、github、gitlab,都可以;

  • 掌握一种安装包制作工具(C++的程序有各种依赖,不做安装包的话,装到别的机器上很费劲),比如Inno Setup、NSIS或者VS自带的,都可以。

这块推荐一本Git的书——《Git版本控制管理(第2版)》:

五、软件环境

软件环境指的是完成开发所需要的支持环境和软件产品运行所需要的支撑环境。

假如你用C++编写的软件,在Windows下运行,就需要Windows操作系统、Windows上的各种运行时,这些也是你需要了解的,比如C++的运行时库、MFC的运行时库、OpenSSL的运行时库,起码要了解他们是什么,从哪里可以找到,应该放到系统中的什么地方。

如果你在Linux环境下开发,软件在Linux下运行,那你就要熟悉Linux的常见命令、脚本(Shell/Python)等。

除了操作系统和各种运行时,还有你软件所需要的协作软件,比如你用了数据库,那你还要了解数据库的安装、驱动的配置等等。

这块推荐三本书。

第一本是操作系统基础,看经典的《深入理解计算机系统》:

第二本是Linux的基础学习,看《鸟哥的Linux私房菜 》:

第三本是一本老书《程序员的自我修养:链接、装载与库》,能帮助你更好的理解C++程序是怎么运行起来的。绝版了,可以买到二手的。

六、软件开发模型

软件开发模型是指软件开发全部过程、活动和任务的结构框架。常见的有瀑布、迭代、精益、敏捷等。各种模型现在都有在用,推荐看经典教材《软件工程》,里面有各种开发模型的简要介绍。

七、项目实战

以上分门别类介绍了要学什么,但往往是,我们学了很多东西,不知道怎么做项目。对初学者,我建议是分三个阶段:

  1. 刷题

  2. 照抄项目

  3. 自己设计项目

第1个阶段——刷题,一方面你要做你用的C++教材上的课后练习和小项目,另一方面,也可以使用leetcode来刷题。

第2个阶段——照抄项目,可以找专门的项目类的图书、课程等,跟着学,跟着。这里做推荐一本书好了,《C++项目开发实战入门》,上面有一些项目,可以参考。

第三个阶段——自己设计项目,可以从自己看到的需求出发,比如图片浏览器、音乐播放器、录音机、文件管理器等等,都可以做做看。这个阶段你做出来的,就属于真正的程序了。

等你完成这三个阶段,能自己搞定一些小项目,基本上,C++就算是入门了。以后,再做个十年八年,差不多就能精通了。

一个合格的程序员除了编程语言还要学什么?相关推荐

  1. 如何招聘一个合格的程序员?

    如何招聘一个合格的程序员? 发表于2012-12-03 16:29| 11559次阅读| 来源TheNextWeb| 23 条评论| 作者张祺 招聘程序员 摘要:作者是ApeForest和Conten ...

  2. 什么样的程序员才能算是一个合格的程序员呢?

    合格的程序员不是根据代码的行数来判断的,代码敲得飞一般的速度,只能说是个不错的打字员. 程序是为解决实际问题而存在的,要解决生活中的实际问题,掌握基本的语言知识是前提,敏捷的思维才是最有效的保障,思想 ...

  3. 如果你是一个合格的程序员或者你认为自己应该是计算机科学家

    如果你认为自己应该是计算机科学家,那么,你应该做如下的事情: 1,你学的第一门语言应该是C++,第二门是汇编 2,你应该对数学的掌握不差于数学专业的比较差的学生,对于数论那些东西你也应该会 3,你应该 ...

  4. 如何成为一个合格的程序员?

    想要成为一个合格的程序员,往往需要满足以下几点要求: 一.细心 对于很多程序员来说,写出来的代码可能这里因为不小心漏了什么,那里因为不小心没有测试出一个Bug,这里少个符号,哪里多个空格等等,因为马虎 ...

  5. 一个合格的程序员所具备的素质和修养

    程序员基本素质: 作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该 具有的素质. 1:团队精神和协作能力 把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基 ...

  6. 怎样成为一个合格的程序员

    成为程序员就意味着要开启程序生涯,开始敲代码,如果说做程序员仅仅为了高工资,那么就不必做了.一天天干坐着只为等工资那么奉劝你,另谋高就. 学编程应该在编程中感受到快乐,不然每天对着没有表情的字母,很是 ...

  7. 如何成为一个合格的程序员

    程序员如何提升自己的综合能力?众所周知,程序员工作几年后,就会面临职业的选择,主要原因在于前期几年都在积累和学习,达到一定程度后,就开始考虑个人的职业发展了. 那么想要成为一名优秀的程序员,需要注意哪 ...

  8. 一个合格的程序员,需要哪些必备技能?

    对于一个Java开发来说,编程技能毋庸置疑是很重要的. 但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素. 比如,问题排查能力.线上运维能力.项目管理能力.协调沟通能力 ...

  9. 一个合格的程序员也是一名合格的侦探---Debug篇

    调试 文章目录 调试 1.什么是bug? 1.1bug概念 1.2bug的起源 2.什么是调试,调试的重要性 2.1调式的概念 2.2 调试的基本步骤 2.3Debug版本和Release版本 2.3 ...

最新文章

  1. framework之Activity 生命周期解析(基于Android11源码)
  2. Nancy之基于Self Hosting的补充小Demo
  3. 串口通信模块5:串口操作自定义类(3)
  4. glide 显示图片慢_做个看图片的App玩玩_第一篇
  5. 同一个网站下不同应用程序可以不同Framework版本
  6. jquery关于多个显示隐藏
  7. 前端学习(3120):react-hello-react的setstate的使用
  8. Python实现一个简单的毕业生信息管理系统的示例代码!非常简单
  9. 【Flink】FLink SQL TableException: Table sink doesn‘t support consuming update changes which is
  10. pytorch FC_regression
  11. 【硬件】推荐软件『软硬件的基准测试工具』
  12. python写的crf训练代码
  13. httprunner 2.x学习4-测试用例分层
  14. PPT如何制作?掌握这几个思维,就可快捷设计制作PPT了
  15. linux如何自定义桌面,如何自定义 GNOME 3 桌面? | Linux 中国
  16. lzg_ad: FBWF配置详解
  17. 一文读懂authorized_keys和known_hosts
  18. C++的函数声明、函数定义、函数调用
  19. P1233 木棍加工
  20. 【实战】基于urllib.request登录爬取163邮箱

热门文章

  1. Web前端开发书籍推荐(下)
  2. 前端页面之间url传参
  3. 2018-1-11-【转】PHP简洁之道
  4. 查看树莓派中python安装路径
  5. Micropython读写文件操作
  6. Paxos的实际应用
  7. Blender图解教程:动画常用快捷键
  8. Java基础学习之生产者消费者(29)
  9. python 函数返回值为函数
  10. php 实现抽奖程序中奖概率算法