我是如何成为一名程序员的?只能说是巧合,是命运的捉弄,是误打误撞。如果我真的只是因为高中物理比较好就申请了物理专业,我现在可能还在读研或者当老师,现在后悔当了程序员。?我只能说我后悔了。我多次认为我不适合这份工作。现在我可以享受技术和编码。可以说是走了很多弯路才走到现在的地步。怎么说?虽然我不信上帝,但此时我想说,也许这一切都是命中注定吧。事情的起因都来自于高三的一本志愿书。看到一个叫物联网的专业,听上去很有说服力,也很厉害,所以想也没想就报了这个专业。学校呢?当时我想的学校是哈尔滨工业大学,我会成为未来创造物联网历史的人。结果高考的选择题大概比我想象的要好。12道中文选择题我选了9道。我最擅长的物理选了3-5,题目看似简单,实则暗藏玄机。失去了15分。最后,我的愿望缩小了,我成了吉打。不过,作为村里难得的几年985大学生,迫于压力不想复读了,而且吉林大学的大部分专业也是有选择的,最后愉快的接受了,终于成功录取了。它将决定我未来十年的人生轨迹。进入大学后,突然发现一切都和想象中的不一样。据该校ACM相关人士介绍,吉大的电脑有一种农村包围城市的感觉。我深信这一点,因为我是农村人。编程更不用说,我也没接触过电脑,对输入法的理解还停留在小学智能abc时代。我是用两根手指打字,看c语言编程的书感觉没那么难,结果在第一节实验课上,卡在了VC6.0,无法创建工程。我终于创造了一个。我发现输入法中的标点符号有中文和英文,而且VC60这个古老的IDE不会提示语法错误。是的,那时候我连helloworld都不会写。更要命的是,当时老师推荐的书,竟然是谭浩强写的。用今天的眼光来看,全书充斥的只有一个“错误”二字。开玩笑说C语言期末考试的内容就是找谭浩强书上的错误,找到多少就给多少分。而且,书上的大部分代码,敲完都运行不了。比如a++++++b这样的鬼代码,写出来是对初学者信心的严重打击。这是一个实验班。当时我想,这和我在电视上看到的程序员不一样。程序员不应该敲一下屏幕,过一会儿再解决问题吗?结果现在各种错误,烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫瓶瓶写瓶写瓶写瓶写瓶服装烫管体喝瓶服装容光管仪,让我们谈论课程,我想象的大学课程教我们如何编写网站,如何破解其他人的计算机,无论它有多糟糕,我们都应该拥有一个办公室PSVideo剪辑什么的,结果呢?大学里的每一门课程都给人一种很神奇的感觉。怎么说?只是刚开始几乎是想都没想就听懂了老师说的,半个小时后,开始陆续出现几个奇怪的点。三天后,老师讲的标点符号你一个也听不懂。你会怀疑你连1+1等于2都不敢回答,还会聊一些跟找工作无关的东西,比如高等数学,电路,甚至还有数群,c语言,c***,然后就是各种编译,各种芯片,算法,数据结构的编译。作为一个实用主义者,我的脑海里有无数个问号。最大的问题是它们有什么用?马达转一周有什么用?迷茫×2在迷茫中,我度过了人生中最迷茫的三年。虽然大学里的课程多而杂,但我从来不敢说,即使学了一点,掌握了一点,也不敢去听。说自己做了一件让自己骄傲或者觉得有意义的小事,论文都是从百度百科里复制粘贴过来的,不知不觉就该找工作了。我真的觉得我浪费了四年时间,别说是面试官了,我都找不到对方要我的理由。我没有努力工作,没有做任何事情。我什么都不知道。我没有任何特殊技能。接受了,虽然这会让我接下来两年受苦,但大概是对我的一种惩罚,惩罚我这三年不作为,没有积累,我想过无数次,如果我报物理估计我我更擅长我不会这样度过四年。我一定是优等生。甚至软件工程也比现在好得多。至少别人教的东西比我们实用。我要做什么?就一个C语言的c**而已,连皮毛都算不上,不过好歹大学毕业了,第一批老鼠也顺利出狱了。然后就是毕业,在外包公司两年,怎么说呢?钱不够不要紧,最让人受不了的是它会让你产生偏见。这种外包业务主要分为国内和日本两种。不幸的是,我被分配到了日语系。这两年你过得怎么样?首先是公司所在的位置,在半山腰的一栋高大的大楼。上下班必须在门口签到,员工卡绝对不能借。然后必须穿衬衫,不允许穿牛仔裤、短裤、休闲裤、七分裤、运动鞋、凉鞋、运动鞋、运动鞋、休闲鞋、系带鞋。然后就是一个小时的午休时间,然后房间里到处都是摄像头。手机不准放在办公桌上。会把手机锁在门口的柜子里,如果这样还可以理解:电脑人走的时候,每个月都要换一次锁屏密码,电脑几个月内不能重复。磁盘(这一点我能理解),电脑不能访问外网,嗯,只能局域网,不能百度,手机不能截屏,需求是日文,得靠你的第六感猜猜是什么意思,不用百度翻译。需要一行代码一行注释,日文注释,没有百度翻译,也不会打日文自己找复制粘贴。还要求为每一行代码同步文档。文件是什么?表结构域设计书,基础设计书,详细设计书,单元测试设计书,组合测试设计书,checklists等等,数不胜数,而且都要同步。什么都得同时改,测试要重测,设计开发测试全靠你一个人搞定。不换还好,可惜客户一周能换八次。测试文档需要截图+日文说明,截图工具也很古老,特别不好用。你拍什么照片?一个一个地检查每一个变量,添加页面的截图,从数据库添加数据,从每个服务器添加日志。变更的位置必须用红色标注,红色字体必须与其他字体保持一致。它只是看起来不够好,所以最安全的方法是复制和粘贴。对了,中间的内容比较少,容易忘记,需要重考。覆盖要求如何?100%!你没听错,是100%,甚至还不够去allifelse和所有的可能和例外,还有各种业务边界条件比如时间,你要考虑,1号30号12点clockinmorning0onesecond等等,有点常识就知道异常不是那么容易测试的,需要创建异常数据,为了创建这个数据,需要分析前面的所有代码exception,有的是根本不容易造成异常的情况,比如系统时间相关,有的要断网。您只能更改调试中断点处的值。改java的值就可以了。别忘了还有存储过程调试。搞定了。如何测试?不是说没有外网吗!公司给了一个虚拟机终端,可以访问外网,然后从虚拟机上传一个类似网盘的东西,然后下载到本地。虚拟机有多少内存?2g,公司电脑有多厉害?4gi3,窗口太多,卡住了。对了,虚拟机每天都会恢复,而且没有截图软件,也不能从外网下载东西,只好先用网盘上传一份安装,过程比较麻烦细节不再赘述。总之,上班前需要反复准备的东西很多。这项工作只能开始,然后重新启动计算机时一切都将消失。我应该测试什么?Firefox、Google、ie、ieAndroid3G确实是非智能机时代的3G。所有的测试和截图,文档断点等等都要重复五遍。最后,我们谈到了架构。代码是什么样的?一个2000行的文件不是java代码,而是一个存储过程。存储过程也会调用存储过程。你不知道它会调用多少层。Java会调用存储过程,定时任务也会调用,shell也会调用。Java几十万调整几十层的类和ifelse也是很常见的,怎么配置呢?使用表的字段来配置,一个表有几十个字段,命名为flag1flag2已经超过了flag20每个都有它的意思,什么意思自己去看文档,有多少张表?200多个,存储过程有多少?也有200多个,但不是一一对应。之前不是要切数据吗?测试时,还需要将关键数据字段标记为红色,红色不是你的选择。最安全的方法是复制和粘贴。流程开始的时候有几个表的联合查询,这也是我非常讨厌sql脚本的原因。有框架吗?可惜这是十年前的日本框架。离开公司后,我也分不清这是一个什么样的框架。很非主流,传承满天飞。积累了十年的垃圾代码被抛在脑后。你想改变它吗?你想重构吗?不可能的!你想使用新技术吗?不!就像日本人胆子小一样,你写新东西他们看不懂你。最重要的是,我根本不会写日文文档注释。我没有从网上下载任何东西,改了几十行代码。需要看几千行代码,查几十份文档。日式测试或者自测重构会害死人。最主要的是他们不敢,更别说新技术了,三元运算符都不允许用,代码风格创新一点都不好,肯定看不出来是你写的,还有一个问题是日文代码,他们分为全角和半角,全角英文数字带空格,我被这玩意骗过无数次Pass。像这样生产是什么感觉?一周几十行代码都差不多,什么?很少?gettersetter纯手工制作,这样的文档,这样的结构体,这样的测试测试环境,还是日文要求,客户改了哪怕只是一点点,还想输出?这些天我每周写几千行的情况并不少见,你想尽快摆脱那些破规矩。而且,不可能加快复杂的代码和业务编写几十行来调查近乎无限的代码。这期间,我多次想过离职,但我的技术在外面无话可说。java基础不错,因为我在测试的时候一个一个中断debug。java的内存模型被我的身体记住了。而且CrazyJava看了很多遍,shelltomcatspring之类的东西也抽空看了一遍。限于环境,虽然工作压力很大,做的是神仙才能做的工作,但我也不知道自己是否真的离开,所以我一直不敢离开,主要是我不了解任何主流开源框架。正是这一点让我没有勇气不辞而别,也是很多抗日人士不敢走的根本原因。因为你的知识体系与主流严重脱节。最后我复制粘贴鼠标手就走了。虽然我还没有准备好,但我已经完全明白,即使我在这里工作十年,也不会改变什么。工资上不去,技术上不去,跳槽不断增加。难,这就是外包的精髓,钱少也好,但也不能太过分,投诉公司领导,感觉自己还是一团糟。一边叫你搞技术,一边上网挂服务器让你擦屁股;一边让你全力开发,一边一天打断你十几次让你写不出代码;一边说不想搞传统公司。定,一边想着什么,我半夜给你打电话;一边说我看不起的公司,一边说我看不起的那一套。真不明白有些人天天在想什么。我终于开始了找工作的过程。其实我面试过很多公司。主要是我的基础还不错。主要问题是我的项目经验很少。我写的东西不可能没有我的独创性。说白了就是Copyandpaste,不用复制粘贴你自己写也可以,但是客户领导不允许。有些公司面试官喜欢当着你的面贬低你,给你看设计模式git等等,今天终于来到这家公司,可能以普通的工作经历一个正常人是无法理解有一个工作的有多爽没有门的环境,不管你穿什么,没有摄像头,也没有信息安全。最重要的是没有日本人。其实工作一段时间后,你会发现互联网公司除了架构之外的水平并没有那么高。相反,技术越先进,使用起来就越容易。然而,正是因为简单,才能走得更远。什么,当你被很多细节束缚的时候,你没有心思也没有能力去做自己原创的东西,至少我做不到,而且设计模式也不是绝对的好东西,大部分人也是飞如果其他的。框架会很肤浅,但因为流程更正规,分工更明确,所以我从原来的“伪全栈”变成了真正的服务端开发。至此,我曲折的程序员生涯才刚刚步入正轨。这六年,只能用凄惨来形容。后来偶然接触到函数式编程,并尝试在实际项目中开始使用它。一开始只是一个简单的streamforeach,后来学习了mapfiltercollectors和reduce,后来学习了Optionalcontainer,然后开始理解高阶函数,重新理解闭包的概念,然后理解currying,重新认识函数式编程和面向对象结合泛型设计模式,到上个月结合的异步编程,现在开始进入Scala提高自己的编程水平短短几个月提升了n级,而且我根本停不下来,因为这些年终于遇到了更简单实用的东西。如果大学不学c语言而是学scala,现在可能又是另外一番景象了。目前代码水平如何?我只能说,这个东西是不能用时间来衡量的,需要一点天赋,就像我这六年没有编程天赋一样。能力有多强,是因为函数式编程最基本的思维方式就是映射,也就是公式。这也是很多人觉得尴尬的根本原因。您沉浸在过程式编程中的时间越长,就越难适应它。越难理解。至此,我会回顾自己走过的所有弯路,以及给新人的一些建议。首先,编程学习分三个流派。一是学习各种数学、电路和算法、数据结构、操作系统,然后写程序。是的,另一个就是学习如何写网页,写小游戏,以及其他一些了不起的东西。前者称为魔法派,后者称为实用派,还有一种介于两者之间。混学派之间,我更倾向于实用派,可惜大学的教育方式大多都是魔幻的,导致我整个大学都处于迷茫的阶段,ide的选择是最好的选择newtools和技术。人们不必担心机器可以为您做的事情。只需将语法检查留给编译器即可。二是教材的选择。谭浩强的书被用作大学考试的笔试。还是不错的,不过如果真想学c,还是推荐cprimer。一本错误的教科书会让你怀疑人生,然后大学教科书,包括业界主流,只强调两种编程模式,面向对象和面向过程。说起面向切面编程,函数式编程这种与图灵机并驾齐驱却生不逢时的编程模型却很少被提及。就说函数式编程对于刚上大学的人来说肯定比面向对象编程好。更容易接受,更符合未来编程的主流。还有一点就是不要选择外包和测试,但是如果有一点回旋余地,就不要去外包,那就是灾难,还有测试。虽然测试的门槛不高,但凡是门槛低的作品,付出的代价都会更高。门槛不高。如果是自动化测试,还可以,但是一点点就没有前途了。以后会做产品吗?想想也无妨。说到底,还是要辞职。我工作两年后才辞职。如果你的价值观有问题,就尽快离开,割肉止损。头两年,HR可以理解你换了很多跳槽,他会认为你在尝试,在犯错,但两年后跳槽就不能那么冲动了。
