关于编程

关于编程

原本想写一篇关于:我读过的那些技术书的介绍。但静下来想想其实没什么必要去那么橡筋,有些知识点是可以归结出来的,所以你现在将要看到的这篇文章将是一些我对编程的理解的归结点。如果你现在没什么要紧的事情,或者刚好比较无聊的话,可以接着把这篇文章看完。

首先,我们来说点番外话:什么是编程,你会不会编程,你为何编程

看起来很哲学,其实将要表述的一些观点仅是我个人想法,不要对号入座

什么是编程

很多人把编程认为是会用编程语言写程序,以至于我看到不少人喜好争论编程语言的优劣。但往往这些人的争论最后都成了鸡同鸭讲的过程。毕竟大家入了行,或者经过了一些年在行业里面的摸爬打滚,走入了自己心怡的工作性质的岗位,从不同的业务特性的上必然有相应的语言所向。如下工作性质的人凑在一个话题上讲时,便有可能爆发语言之争:

  • 语言核心开发与维护的
  • 编译器开发的
  • 操作系统开发的
  • 中间件开发的
  • 游戏引擎开发的
  • 云服务框架开发的
  • 人工智能方面开发的
  • 以及其他用户层面开发的

这些开发者因不同的职业所向,编程语言也是五花八门,所以吵来吵去的那些人,除了带给观众不少的喜感,或许是背后的私语外……然并卵……简直就是程序界的真人秀

回到主题:编程是什么,什么是编程?

我思索这个问题的时候,刚好见到了Spring Cloud的杰出贡献者Josh Long,听完他的布道,看完他在spring cloud下飘逸灵动的操作,快速的搭建微服务,我不得不服用户层的活,将会变得如此简单,你不需要再懂太多的编程知识就可以直接干活了,多线程/持久化/高可用/可扩展/以及业务的快速搭建都已经集于一身。难道编程就是这样的工作吗?是的或不是的!

,是因为对于一些大众性的用户来说,这确实是个不错的梦,而且作为任何一个业务系统开发都应该拥护的梦。

不是,是因为这让我想到了大概20年前的故事,我记得那时候的人对照相的爱是远超过现在的,然而那时候大家非常不屑于去研究摄像馆里的大块头。认为那是摄影师的事情,我们只需要付费就行了。后来傻瓜相机出来了,就连我家这样的普通家庭都拥有了一台,那种装上胶卷随意按下快门就可以得到一张还不错的照片的时代彻底的到来。我想那个阶段的摄像与现在很多编程工作一样,我们找到了一个不错的框架,修改一下配置,就可以快速的在controller下填充信息,在handler层加上业务,就连测试框架也是绑定好的,还可以对外说:hey! 我这是TDD……不知道哪年起,我们被特写的照片所打动,我们被广角镜头下的照片所震撼,我们想要完成自己延迟摄影的作品。我们不再抗拒焦距,不在畏缩光圈,甚至热爱于单反下的所有可调参数。是啊,这种追求灵活性的设计难道不是才是我们想要的吗?学编程,其实就是一场属于自己的创作,可能没人会为你的作品埋单,但这不应该影响你对编程的一种喜爱。

你会不会编程?

编程难吗?

  • 不懂的命令可以使用man来查看帮助说明
  • 程序运行的环境,或运行环境的基础环境是操作系统,对操作系统的管理难吗?
    • 文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip
    • 学会文本操作:sed/awk/grep/tail/less/more,当然你还可以用perl深度的把玩起来
    • 性能问题怎么搞: ps/top/lsof/netstat/kill/iptables/dd,还有强大的perf
    • 网络怎么整:ping/traceroute/telnet/tcpdump/wireshark

这其实算不上什么编程,当然有人曾说:你知道我在某价值观公司每天敲下多少命令行吗?到现在还有后遗症……

  • 有人觉得C语言已经不符合现在的时代发展要求了,有这个想法的人不要去跟他争,要看他从事什么的
  • 有人觉得C语言很多坑,自己对C语言的了解深厚,可以成为一个C语言黑,有这个想法的人不要去跟他争,要看他从事什么的
  • 有人觉得C语言没有面向对象的特性,但很多书籍上真的表面了,这不是什么硬伤,C++当初带着这个特性也没把C语言最后怎么样
  • 有人觉得C语言没有stl/泛型编程等,那你就随他去吧

我在C语言方面的学习已经渐渐深入了,当然我是热爱数据库开发的,然而数据库开发的虽然是C++主导,但sys模块是纯c的,另外其他模块是类c的,所以还是那句话,职业所向。但C语言的学习让我系统的了解了开发与计算机系统的前后关系,还有我已经渐渐喜欢上有可做指针操作的语言了。

有不少人都认真并系统的写过算法,不难发现:递归实现造就了绝大部分算法,然而数组与指针的搭配同样造就了绝大部分常用的数据结构。

  • 用C语言实现一下各种经典的算法和数据结构。可以学习《算法导论》和 《数据结构与算法分析》,算法导论枯燥,但网易上有视频……还有个不错的麻省理工的视频是计算机科学与编程导论。
  • 学习(麻省理工免费课程)C语言内存管理
  • 学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。
    • 用这些系统知识操作一下文件系统,进程环境之类的。
    • 了解进程与线程之间的优缺点,和网络编程在进程,event loop,以及线程之间的特点,当然线程的学习你还需要明白信号量的知识,对spin/rwlock/mutex以及atomic造就的lock less可以适当的去了解,这些知识都会有“纸上得来终觉浅”的感觉,所以多写。
    • 明白signal/kill/raise/alarm/pause/sigprocmask并实现一个多进程间的信号通信的程序。
    • C语言的学习是离不开对编译器的理解的,可以试着去看gcc的一些介绍,clang也可以找找相关的文章,这一块我只知道个大概。
    • C语言是贯穿软件与硬件的语言,你对它的编译,可以让你看到汇编代码,也可以让你更近距离的接触socket网络编程,网络编程的书籍想必大家比我更了解了:《unp》/《tcp/ip》,看完至少能说得清网络时序图里面的概念,除此之外你将会明白什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO模型。
  • 工欲善其事,必先利其器
    • 学会正确的使用gdb调试程序,可以参考一下这篇文章:http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html
    • 学会使用makefile来编译程序,明白configure的使用,当然像mysql5.6版本后的,你可以直接跳过去了解一下cmake的规范即可

经过了上面几本宝贵的书的洗礼是不够的,因为你或许会像我这样还体会不到C语言编程里面的非常多巧妙的运用,这时候,可以像我这样试着去抓住自己比较喜欢的领域,把这个领域知识的运转原理琢磨清楚,然后一有时间就写一个相似的程序出来,这样你会看到你与大神写的程序的差距,也会从更细节的方面去了解C语言编程的魅力,从而真正的读懂了手册,学明白了编程。这是一个非常消耗时间的事情,与写算法有点异曲同工之妙,这也是锻炼自己如何智慧编程的过程。有时候我无聊的时候就是拿着glibc里面的一些函数,来自己做一次实现,有标准在那,反馈也足够即时。

至于你为何编程

我觉得这个话题是很难说清而且极大程度因人而异,每个人都有自己的追求,我曾突然想明白一个事实:世界以繁而多姿,人以逐简而鸣人。


原文:https://18plusui.github.io/programming/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值