我的编程入门成长之路

接触

说起我的编程入门,其实惨不忍睹。我是2001年上的大学,只是觉得计算机是个高科技,就稀里糊涂的报了个计算机专业。上大学前没摸过电脑,以为大块头显示器就是电脑;也没有摸过键盘,以为学计算机就是学打字的…

刚上大一的时候,那时候学校不让大一新生自己买电脑,网吧还很流行,于是有天晚上就和同学一起去网吧包宿。同学帮我申请了个QQ号,结果整个晚上,我在网上跟别人诉苦说我是计算机专业的,但是打字都打不好,将来怎么办…

大一那时候也开了C语言的编程课,但是上机练习效果很差,因为整节课大部分时间都在键盘上找字母…

听起来是很二、很糗吧,但开头就是这样的。

入门

大一的C语言,学得只能算是稀里糊涂。指针那块儿的涉及到的内存管理有点复杂,写程序经常出错,一点点小问题,就要调试半天。看到隔壁宿舍的一位很早就开始学编程的同学,在Turbo C编辑器上能够写出好几屏都翻不完的代码,我的心里是充满了崇拜,也深深的自卑,都是同学,怎么差距就这么大呢?

不过到了大二,学校不限制买电脑了,这时候自己才有了更多的时间编程练习。还好,我是个能够坐得住的人,虽然愚笨,但是编程作业练习多花点时间也是能完成的,也从来不拿别人的程序改了提交。这点,让我开始对C语言的基础语法开始逐渐掌握了。

大二的时候开了数据结构课,每次课都有个上机作业,每个作业的代码量都需要至少半天时间来完成至少200多行的代码。说实话,当时也真不容易,需要花大量的时间去写代码练习。不过现在回想起来,还是很庆幸当时没有糊弄过去。从现在过来人的角度来看,多写几个三四百行的程序,能够让我的动手能力更好、解决过更多的问题,至少对编程,不再发怵了。

数据结构真的是对编程最有帮助的一门课了,没有之一。包括算法,都是建立在合适的数据结构之上,才能发挥更大的威力。前些年去一些大学去搞校园招聘,遇到不少学生,连上百行的代码都没写过,一看就知道数据结构没有好好练习过,编程能力不过关。

我自己对编程还是挺感兴趣的,总想着做点更有挑战点的程序。于是就自学OpenGL,写了个简单的俄罗斯方块游戏。为了这个程序,我好几晚上都没睡好觉,都在想游戏里砖块变换形状的时候,对应的二维数组里的数据该如何变之类的问题,一想问题脑子就开始运转,睡意全无。最终,这个程序用C语言写了有上千行,也是好几屏幕(当时是1024*768分辨率的CRT显示器)都翻不完的那种长度,我也开始认识到,写程序不只是实现几个函数,更重要的是要写容易维护的程序。

后续也就是大三,除了专业课,也开始自学C++,买了本C++之父写的《C++程序设计语言》,书是好书,我就是看不懂。挣扎了几次,还是把这本书放到了一边,找了本书皮上有小蜜蜂的一本国外教材自学。书名忘了,但是好处是书里面有大量的例子可以仿写,例子也很容易看懂,自己写的时候就容易多了。《C++ Primer》我也看过,同学推荐的,发现对我来说也还是难,以为我连入门都没资格。后来才知道,原来不是我太菜,而是《C++ Primer》难度真的不适合初学者。

这里总结一下,就是学编程,仿写也是个更容易的方法。不要每写一行代码,就要查那种看不懂的API,先把程序写出来,见的多了,慢慢的什么都懂了。就好像词典是个好东西,啥知识都有,但没有人学语文是天天抱着词典学的一样。

什么,打字问题怎么解决的?哦,写代码多了,不知不觉就解决了。

迷茫

大三结束的时候,主要专业课基本上都快学完了。这时候我却很迷茫,一个很重要的原因是不知道自己学的能干啥,总感觉自己写得代码跟现实没有一点关系。那现实又是什么样子呢?

我那时候在哈尔滨,无论实习机会,还是眼界,还是软件产业的发达程度,都远远不能和20年后现在的情况,尤其是北上广深这种一线城市对比,再加上自己的内向,现在回想,当时的迷茫是必然的。

本来想先找个工作体验一下社会,后来一是没有好点的工作机会,而是经过同学的开导,我还是坚持把考验的路走了下来。

庆幸,在一个好大学,重要的不只是有好老师,还有非常优秀的同学。

接触Python

最早知道Python这个语言,也是受宿舍里的哥们的影响。他高中就开始编程,也很喜欢Python,所以从他那里我知道了这个编程语言。但自己真正开始学和用Python,就好像到了读研究生的一年级了。写一些脚本做一些一次性的事情,Python还是非常方便的。

但是越用Python越后悔,怎么没早点学Python!

为啥?那时候AI并不火,Python只是一门比较古老、普通的通用编程语言而已,PHP反而是非常火的语言。所以感觉Python好,并不是出于功利主义,而是Python的优雅简洁,让我觉得原来编程可以这么简单!之前死磕C/C++的那么多复杂语法,怎么想都感觉当时是在自虐。

于是后来,我给别人建议的时候,都会建议别人学一下Python:

  1. Python 容易学。用它可以更快地接触到代码的逻辑、结构、面向对象等编码的核心层面。死磕复杂的编程语法,至少对初学者帮助不大,甚至只会导致知难而退。
  2. Python是 脚本语言。哪怕你已经学了其他C\C++\Java等编译型的语言,多学一门不同类型的语言,会对扩大眼界大有裨益。
  3. Python很流行。意味着现在学Python更容易找到好工作,找到同道中人。

接触Java

因为读研时实验室里用的主要语言就是Java,因此那时候学了Java,也在合作的企业里做过一些项目。当时还是挺喜欢Java的,比Python快,比C++容易,社区也大。

接触更多语言

工作之后,因为公司里的项目用的是C#,不过C#在很多方面和Java很像,因此面试时也比较顺利。后来因为项目需要,又自学了ActionScript,JavaScript等。

不过编程语言学得越多,就感觉对自己来说,语言越来越不重要,需要什么就学什么呗,重要的是能够把工作中的问题解决掉

每种语言就像一个工具,面对问题的时候,多掌握一些语言,工具的选择面更广而已。对大部分人来说,三种类型的语言,每种掌握一种就够了:

  1. 偏底层的编译语言:C、C++
  2. 高级点的编译语言:Java、Kotlin、C#等
  3. 脚本语言:Python、JavaScript、PHP等

其他语言,用得着的时候再学习也不迟。

逐渐的,我不再喜欢和别人说我是XX语言的程序员,我更喜欢说我是前端开发还是后端开发。

求职

我自己当时毕业时候的求职经历,也很曲折,不过对大家没有太多参考价值,这里就不多说了。

从找工作角度来看,除了前些年社会需求量就比较大的Java,目前C/C++这种比较难的编程语言,社会需求量也还是比较大的。找工作前,尽早多刷一些题,知道自己的不足,及时补上。

如果更喜欢所见即所得的成就感,那么前端开发也可以考虑以下。只是学校一般不教前端开发,或者教得很少,要靠自学。幸好前端东西不算太难,只是比较杂,耐心坚持学下去就必有所成。

如果不喜欢编程,那么也可以考虑做测试。测试也分为手共测试和自动化测试。自动化测试也需要写代码,但对代码要求不高,更多的还是知道如何做好测试。学校一般也不教如何测试,需要自己找书学习。

找工作一方面是能力,另一方面是机遇。暂时没找到,不一定是你的能力不行,还可能是属于你的机遇还没来而已。

算法的重要性,确实很重要,但我自己的观察,大部分毕业生的数据结构都没有学好,基本的编程思路也不过关,因此在找工作前要多注重基础的练习。不能受很多营销宣传的影响,把大量的钱和精力都投入到算法上,那是舍本逐末。对于绝大部分的公司来说,能干活才是最重要的,考查算法只是择优的一种手段

成长感悟

做技术20年,因为只待过一两个公司,见识面少,表达能力也欠缺,所以这里能够说的感悟不多。

  1. 每个人的核心竞争力,是解决问题的能力
    解决问题的能力,不是指自己解决过多少问题,而是面对新问题的时候,有多少信心能够解决掉,又能多快多好真正地解决掉。
    解决过多少问题,可以从别人那里学习和借鉴,但解决新问题的自信心,则只能通过不断挑战自己来培养。拥有这种能力的人,是最稀缺的、最不容易被AI替代的。
  2. 学技术,要坚持,要动手
    技术岗位,和别的岗位相比,可能是社会上最公平的岗位了,只要你的技术好人品好(35岁以下),不需要找关系就肯定能找到合适的工作。如果才能技术好?发现写程序的创造性的乐趣,勤于动手去练手即可。
  3. 你很优秀
    相信你自己肯定可以做得更好!

关于我

哈工大01级本科,05级研究生。在MA工作了十几年,技术总监和架构师,做过年营收几十亿美金的产品。目前在做八股精网站,希望能够帮助大家以后求职准备更容易。

有任何问题,请私信我交流,我会很高兴。

你可能感兴趣的:(成长,职场和发展,学习方法,程序人生)