工作也快两年了,偶然看到自己以前写过的一些技术博客,发现自己自毕业后一直没有更新过自己的技术博客,趁现在是刚过完春节快要回公司工作之际,谈谈我个人对后台开发的一些个人见解,希望能够对在校的学生或者刚刚接触C++后台开发的童鞋有点帮助。

还记得自己在学校的时候,一直都比较注重的是:编程语言+数据结构与算法。没错,对于一个在校的计算机专业的学生,这是很重要的方面。但是,这往往不够,或许是因为毕业前一直没有进入企业实习,以至于自己在毕业之前,对自己未来的职业规划做得很不够,不知道自己以后会做什么方向,那时候比较宽泛且迷茫的定位是,只要是软件开发的工作,我都OK。毕业后,主要是从事C++后台开发,工作一段时间后,才知道自己擅长什么,对什么感兴趣。

前端和后端,你喜欢什么?一提到前端,大家都会想到html+javascript+css,或许这是web前端的最最基本的东西了吧。我个人会将与用户直接打交道的端称为前端,除了前面所提到的传统意义上的前端,我还会把android和ios开发的app称为前端。现在前端各种框架的迭代速度相当的快,要跟上各种比较NB的框架的步伐,也不是那么简单的事情。虽然工作之后,没有做过前端方面的项目,更多的是与前端工程师FE合作,但是我知道,前端领域也有很多东西要学,而且前端的东西由于能自己直接看到开发结果,或许在工作中会很有成就感,所以永远不要觉得前端工程师做的事情没技术含量,萝卜青菜,各有所爱,任何一个领域,只要深入了,都很有技术含量,关键在于自己喜不喜欢,擅长不擅长。就我个人而言,更喜欢的是后端开发,主要原因是在学校的时候一直学的是C++,工作之后一直做的是后端的项目,没有直接参与前端的项目,既来之,则安之,既然上天给我分配了一个方向,我就应该在这个方向上做深入研究。

后台开发是什么?我第一次听说过后台开发这个岗位是在腾讯的招聘网站上,有一个岗位叫后台开发。个人觉得,后台开发也很广,开发语言也很多,如:php,node.js,java,C/C++,go ,每一个公司都有自己主打的语言,如腾讯和百度的后端开发中,C++用的比较多,当然php也用得比较多,阿里和美团,java用得比较多。当然,语言只是一种实现工具而已,不能单一地认为那种语言好那种语言不好,没有最好,只有最适合。后台开发,是相对前端开发而言,个人觉得,所有跟前端直接交互的开发都可以认为是后台开发。企业里面,除了前端开发的岗位,就是后台开发了吗?当然不是。这也是我要说的,希望能够给在校的学生一点思考。在互联网公司里面,有美学功底非常好的UE工程师,他们常常会站在用户的角度进行审美,提高用户体验,能够在产品真正落地之前,做出各种demo;有市场调研和需求分析的产品经理PM,具有严密的逻辑思维和良好的沟通能力;有前面所提到的前端工程师FE,负责向后端发送用户提交的请求,并接收后端返回的结果,进行展示;有软件研发工程师RD,需要具备一定的研发能力和bug定位和修复,系统性能优化等能力;有测试开发工程师QA,上线前的最后把关;又做运维的OP,负责维护和监控线上的稳定;有做运营的,像双十一等大型的购物节,一般都需要强大的运营支持;有做大数据的,hadoop+spark+storm各种大数据框架;有做基础架构的;有做算法分析的。。。还有更多的职位。

  C++后台开发需要掌握什么?这个话题有点大,而且像我这种小菜,只能抛砖引玉。语言只是基础,不能一味地去研究语法糖。记得我在学校的时候,特别喜欢去研究语法糖,现在想想,浪费了很多时间。当然,作为C++后端的研发工程师,你首先需要掌握C++的基础语法,需要掌握STL里面常用的库和算法,如果你觉得这还不够,你可以去系统地学习下boost库,里面多STL里面所不具有很备的,看看C++11就知道了,里面很多新增的东西都是来自boost库。当然,仅仅掌握语言还远远不够,C++做后台开发时,模块跟模块直接除了通过lib库或so库的方式相互调用外,还有更多的是采用网络交互,这个时候,你就需要掌握多线程编程和网络编程的基础知识,当然,由于开发效率的需要,现在你不需要从零搭建一个网络服务框架,比如:ACE、boost的asio和libevent。当然现在已经有各种开源的RPC框架了,比如google-rpc,你可以通过调用本地函数来完成网络包的发送与接收,so easy!那么网络通信包的格式如何定义呢?客户端和服务端需要提前约定?数据交互格式,常用的包括:json、xml和protobuffer,通常前端后后端交互会采用json,而后端各个模块的交互,你可以随便选择;对于HTTP协议的交互,我用的比较多的是json,而 tcp协议,我用的比较多的是protobuffer。当然,服务端的平台有很重要,国内后台开发,基本都是运行在Linux系统上,所以你需要掌握Linux系统的常用的命令,这样你才可以在Linux系统上运用自如,所以,如果你想从事或者即将从事C++后台开发,请暂时抛下VS下的C++学习,从现在开始,转向Linux平台下的C++开发,那里有你要编译器GCC/G++,调试时用到的gdb,如果你想依次性一个命令编译所有的文件,请学习下如何编写makefile。好了,有了编程语言,有了编译和调试方法,你就可以将你的应用程序放在你的Linux系统上监听客户端的请求了。如果某一天,你的程序出core了怎么办?你必须要学会如果找出bug,除了前面提到的gdb,在大型的应用里面,你必须要学会掌握如何追bug,这个时候,你就要学会打日志,并且分等级打印日志,这样一出问题了你就能够快速定位问题的所在。日志有了,程序也能正常跑了,那你怎么算你程序的性能或者收益呢?所以,你需要学会编写脚本语言,我个人推荐你去掌握shell脚本和python脚本,脚本语言能够一边执行一边编译,具有比较高的开发效率,不用你每次执行前编译,掌握了脚本,你不用再那么忙了,哈哈。

提高自己的技术硬实力。这个话题更大,但是适合很多技术岗位。在工作中,你不能只跟项目中的业务逻辑打交道,那样你会觉得自己做的事情越来越没意思,越来越没技术含量。你应该有一种开源的情怀,你要找一个比较NB的开源软件,如 redis, zookeeper,nginx等,去阅读其中的源码,当然,你也可以将你写的一些库上传到gitlab上,让大家给你提建议,相信开源让人进步;你可以去gitlab上下载和学习各种有意思的开源库,这会给你带来更多的成就感。同时你要学会利用各种资源来解决你所遇到的各种问题,如segmentfault,stackoverflow等国外著名的网站。

提高自己的情商。这个话题与我的tittle当然没有直接关系了,哈哈。我是一名工科男,周边的同事基本都是工科男,工科男大多比较直接,也容易发泄自己的不满。对于自认为一些不合理的需求,要深入思考该需求是否确实不合理,深入分析,有理有据,让人心服口服。

随随便便写了一点东西,新的一年工作希望跟大家一块进步,一同成长!

——————————————————————————作者作于2017-2—————————————————————————

【转】C++后台开发之我见的更多相关文章

  1. 给大一的学弟学妹们培训java web的后台开发讨论班计划

    蓝旭工作室5月大一讨论班课程计划   课时 讨论班性质 讨论班名称 主要内容 主讲人   第一讲 先导课 后台开发工具的使用与MySQL数据库基础 后台开发工具的基本使用方法与工程的创建,MySQL数 ...

  2. discuz后台开发常用函数

    showsetting()表单显示 返回值:无 参数: $setname - 指定输出标题,如:setting_basic_bbname, 自动匹配描述文字为:setting_basic_bbname ...

  3. php后台开发(二)Laravel框架

    php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常 ...

  4. php后台开发(一)hello world

    php后台开发(一)hello world 环境安装 开发环境为Ubuntu 12.04,选择linux+apache+php的开发环境 安装 apache2 sudo apt-get install ...

  5. Linux后台开发面试问题汇总

    个人从事安全后台开发,当然是linux环境下的了.举几个常见的问题.1. 数据结构基础.比如实现一个最简单的哈希表.2. 操作系统基础.linux进程模型,堆/栈的区别,大概的位置,各往哪个方向生长, ...

  6. 携程Java后台开发三面面经

    前言 携程是我面试的第一个互联网公司,投递的岗位是后台开发实习生,总共面了三面,止步于人才库.中间兜兜转转,复杂的心理活动,不足与外人道也.唯有面试的技术部分与大家共享. 宣讲会完了之后有个手写代码的 ...

  7. SpringBoot技术栈搭建个人博客【后台开发】

    前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...

  8. JavaWeb网站后台开发记录手册

    1.javaweb网站后台开发 1.封装DBTools类 1.注册数据库驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); 2 ...

  9. Golang后台开发初体验

    转自:http://blog.csdn.net/cszhouwei/article/details/37740277 补充反馈 slice 既然聊到slice,就不得不提它的近亲array,这里不太想 ...

随机推荐

  1. Magazine Ad CodeForces - 803D(二分 + 贪心,第一次写博客)

    Magazine Ad The main city magazine offers its readers an opportunity to publish their ads. The forma ...

  2. Linux 学习第四天

    Linux学习第四天 一.常用命令 1.tar  (压缩.解压) A.添加压缩包  tar czvf 压缩包名称.tar.gz 源文件 B.添加压缩包  tar cjvf 压缩包名称.tar.bz2 ...

  3. ASP.NET MVC4.0 后台获取不大前台传来的file

    <td>选择图片</td> <td> <input type="file" id="uploadImg" name=& ...

  4. Flume:source和sink

    Flume – 初识flume.source和sink 目录基本概念常用源 Source常用sink 基本概念  什么叫flume? 分布式,可靠的大量日志收集.聚合和移动工具.  events ...

  5. js分片上传大文件,前端代码

    首先导入jQuery.form.js文件,下面src是相对于改js文件位置, <script type="text/JavaScript" src="jquery/ ...

  6. 自定义view实现圆角图片

    前两天想实现一个圆角图片的效果,通过网络搜索后找到一些答案.这里自己再记录一下,加深一下自己的认识和知识理解. 实现圆角图片的思路是自定义一个ImageView,然后通过Ondraw()重绘的功能,将 ...

  7. 前端模拟API数据的两种方式

    第一种方法:使用 mock-api 1.创建一个项目 2.创建一个资源 3.拖动创建记录 点击data查看记录 4.如何访问API的数据 第一种方式:在终端中通过 curl + 地址,如图: 第二种方 ...

  8. 20145234黄斐《Java程序设计》第一周学习总结

    教材学习内容总结 1.java是SUN公司推出的面相网络的编程语言,当时取名Oak,后改名Java. 2.Java三大平台分别为:Java SE.Java EE与Java ME. 3.Java不仅是程 ...

  9. Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示

    首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规 ...

  10. ROS Twist和Odometry消息类型使用(Python)

    消息类型: 1. Twist - 线速度角速度 通常被用于发送到/cmd_vel话题,被base controller节点监听,控制机器人运动 geometry_msgs/Twist geometry ...