首页 > 其他 > 详细

编程十年

时间:2020-07-05 19:58:33      阅读:46      评论:0      收藏:0      [点我收藏+]

先放一些之前为公司整理的前端学习资料吧。内容有点旧,有些排版有问题,将就下吧。希望可以帮到热爱学习但没有找到好的方法和资料的人:

css学习

js学习

angular学习

C#、DotNetCore(待定)

 

回首10年前用VBA写记账软件,到现在走过的点点滴滴,略多感慨,稍总结如下:

 

1 何为编程

  这是一个小马过河的问题。去问算法大神,去问CRUD程序员,或者就算同一方向不同技术路线的人,得出的答案可能都不一样。

  这个问题的答案不在于别人,而在于你自已的心——编程对于你而言,它是什么就是什么,让你感受到什么就是什么。

 

2 怎样才能写好程序

  一路走来看来,觉得最重要的还是:兴趣。

  我见过有兴趣没天赋的,也没过没兴趣有天赋的人,但最终还是有兴趣的人的程序要写得好一些,更不用说平日的管理成本了。

  也许你想看到诸如:学习能力、记忆力、分析能力、抽象思维……之类的占比,请相信我,那没有意义,也帮不了你,甚至会唤起一些人莫名的骄傲和自卑情绪。

  编程是生活的一环,好的生活不就是喜欢什么然后去做么?

  之前遇到一些同事,赶上了那波互联网泡沫。工资体面,但他们是由衷的不喜欢也不擅长编程啊。有一个很要好的一个朋友,很长一段他处在一种:学不进,团队不认可,无法晋升,转行没底气的状态中。你知道那是一种怎样的煎熬么?

 

3 我认为的有趣

  帮到自已或别人的成就感;

  程序的结构之美;

  创造或突破一种解决方案时的灵光;

  解疑找到问题所在时的爽;

  一点点超越原先的充实;

  

4 心法至上

  要想长久的保持进步,在首先要养成良好的心态:

  • 保持对编程的兴趣。找出你认为编程有趣的点,想办法跟自已强调它。比如你觉得解决问题有成就感,就多和同学或同事讨论下问题,解决了可以获取多倍成就,没解决也可以学点东西;如果你喜欢"探案",就不断给自已假设各种可能性,去一一拆解;如果喜欢程序的结构,有空可以强迫症似的不时重构下原生的“屎堆”——趁它们还没长成“屎山”。
  • 锻炼遇事不急的习惯。我以前也总想着“毕其功于一役”,但最后还是被“问题是解决不完的”打了脸。客观的需求似乎永远在跟你打太极,要让自已别太急。太急了解决不了问题,也会让你的领导对你印象扣分。
  • 注重基础,或做好长期打算。不做长期打算的人会怎样呢?盲目追求新技术,东学一点西学一点的,最后可能能ABC的发音都没搞准。基础是什么呢:常用快捷键、常用API、常用配置、常用语句、常用的数据结构、常用处理问题的思路、经典算法、常用工具、使用框架的基本原理等
  • 锻炼穷根究底的习惯。(脑中不友好的出现部队训练狗子咬着轮胎不松口的画面)。是的,一旦嗅到丝丝疑惑,力所能及的范围内一定要追查下去。你是程序世界的国王,你可以把事情查清。抱着满心疑惑求证的人,是最有行动力的。一次次求证的过程也是一次次学习和突破原有局限的过程——学习能力和分析能力往往是这么来的)——而且你解决问题的能力越强,领导才越敢把你放在重要的位置,你才越能服众,不是么?
  • 尽可能追求优雅。追求优雅有一个层次的,追求它的过程也是一个程序员健康成长的过程:风格、准确精简的使用api、常用写法和算法、常用的结构、常用的第三方、己方库和第三方的整合、运维和部署。

 

5 业务至上

  本来它应该属于心法之一,但过于特殊,所以单独列举。

  以前问我业务和编程能力哪个重要,我肯定会说编程能力。但现在我感觉业务理解还是更重要一些,领域越深越如此。

  “程序”是什么,就是用来帮人们解决现实中的问题的。所以,业务决定了你写的东西是否有价值。技术不行多数只是换个差点的技术方案慢一些,但如果对业务理解或把握得不准造成产品无人问津,团队会损失钱和宝贵的市场先机。

  或许你会说,需求不应该是产品或项目经理的事么?不理解需求直接问他们不就得了么。这里要说两点:

  一、深入理解业务需求,可以帮你找到更好的思路。有没有这样的经历,很多时候,一个项目写着写着你觉得越来越简单了,回头看之前的代码,发现好多逻辑代码根本不用绕那么多。对业务需求越深,你转化的代码就越强健,代码本身就是一个把需求转换成思维的过程,脱离需求就不叫程序了。等你可以预备到将来需求的改变时,就差不多到专家组别了。

  二、理解需求可以锻炼自已的设计能力。设计能力只是划分几个模块几个类几个接口么?NoNoNo。举两个例子,大家都写过日志,也接触过事件吧。

    如果让你搞个写日志的模块,你要设计哪些功能,由哪些类承担,由哪些接口对外公布呢?

      你要考虑哪些,我们一起思考下:

      1 日志存放在哪(db? 控制台? 文件?http发送出去给其它模块写... 可否动态配置?) ;

      2 日志除了你放的message还要记什么?(程序名?版本?时间? 创建人? 堆栈信息? 环境或设备信息?线程信息?);

      3 那些信息以一种怎样的格式展现呢?(既美观又好搜索,可否动态配置);

      4 如果写文件中,线程并发怎么办,都写一个文件太大怎么办? 如果写http中,发送太频繁怎么办?如果写db,elashticsearch还是sqlite, 还是?

      ...

    如果写事件模块,我们也可以思考下上面的问题:

       1 事件怎么添加,怎么触发,什么时候触发,如xxx.AddEventListener(key, callback), xxx.RaiseEvent(key)。那么,事件的回调函数存放在哪呢?

       2 事件的参数怎么设计,要不要放sender?设计成什么类型?

         3 事件可以传递吗?传递过程中可以取消吗?

         4 有些事件我只监听一次的,可以ListenOnce么?

      5 有的事件只能订阅一次,有的可以多次订阅,是设计不同的api,还是之前的listene放不同的配置参数呢?

      ...

    或许你会说:我在教你造轮子。如果未来你做了团队技术负责人,你能保证你能永远都能找到颜色、重量、轮子纹路、螺丝大小位置,适用场景都刚好匹配的轮子么?

    其实,你知道么?让你不要重复造轮子这句话并不是为你好,而是怕你浪费团队效率而已。

    如果你连轮子都不会造,未来怎么保证可以造车呢?你该不会觉得架构师就是像郎中抓药一样,把各种自已和和第三方的轮子配起来就是一个好系统了吧。他需要了解每个零件的细节,以使整体和谐。在时候可能要把一些零件削一削,有时候可能还要打点补丁,有时候可能会加点润滑剂,如果一些零件太有棱角不好改进又不没什么好的替代,就只好自已造了——而了解轮子最根本的方法,还是自已把它造一遍。

 

6 方法论

  对的,光有内功还不够,你还是想听一些关于招式上的,可执行的方法和建议, 随机总结一些吧:

  • 注重笔记。什么叫好的笔记呢?如果你能做到一个问题或知识点,80%左右第二次不用查原资料就及格了。早些时候我用过市面上可以下载到的几乎所有的付费和非付费云笔记,各有所长,最终选择了网页剪辑能力好一些的为知(我网页查得多)。笔记工具没有好坏之分,自已用得顺手就行。比如现在我看开源多一些了,就自已写了一个笔记工具,最主要的原因是用它做插件可以直接把vs里的代码右键添加到笔记中,同时可以记录下笔记所在项目、文件,行等。技术分享图片技术分享图片

 

  • 立足当下,稳步拓展。当下可能是你所在项目所用到的技术,也可能是你自已在研究的课题。当下的课题才是自已的大脑热点,只有够热的区域才有灵感迸发的可能;只有替团队解决当下的问题,你才是有价值的。如果见到一些人当下做不好,总抱怨这那的,甚至说自已想换个领域的,真给他换个地方十有八九还是做不好。
  • 重点优先, 先出成果。没有必要把一门技术学到100%再学另一块。用不到的技术,放在真正的教课书里就好。以学习前端为例,在培训的时候,我给团队的定学习路线大约是:css(20%) -> js(30%) -> angular(20%) -> css(40%) -> js(60%) -> angular(40%)。其实angular掌握到40%,已经基本上可以窥见技术路线的概况,也可以开始干活了。他们没掌握的余下60%中的内容,由技术骨干或者我来负责就行了。这和立足当下也是一样的道理,我们先把当下用得着的css, js, angular知识学会了,再一点点加深就好了。先出成果既能激励团队成员(因为自已创造了价值),又利于团队出成果甚至赶进度,一举两得。
  • 基础优先。 除了心态篇上说的基础,这里更指基础思维。大框架可能变得很快,细分的基础思维则不会。比如早年间ajax刚出的时候,用了一段时间后就想,如果一直请求ajax,然后替换界面的html,是不是就可以不用刷新页面了——后来出现了angular之类的单页面程序;学习了html做winform的时候,就想,每个控件单独设置样式太麻烦了,有没有像css那样可以全局起作用的呢?wpf中的style文件就有了;ado时代就,一直操作表格太麻烦了不OOP,能不能把读出来的数据转成object。存的时候自动把object转成table呢,后来出现了ef;“绑定思维”在winform时代早有了,wpf中更加强化了,在前端三足鼎立之前又出现在了一些小框架中如knockout.js,现在前端三大框架也都有了;早些时代的java:依赖注入,方法拦截,现在的asp.net(core)已经自带了;.net的linq和一些新语言特性,在java和其它语言中也能见到……如果面试WPF,面试官让你给他讲讲MVVM,你说winform的实践中你已经实践过自已的MVVM框架,你觉得他会怎么看你?以前WPF是新框架不假,但它的思路未必是全新的。
  • 不定期给自已或团队写点小tool,无关进度无关考核,只为单纯的满足下写代码的乐趣:比如上面的vs笔记插件,或者某款单机游戏外挂,或者团队某个数据转换/查询工具等,代码生成器什么的。
  • 多和其它人讨论问题,不管比自已水平高还是低,有助于帮忙自已从不同角度看问题。
  • 重构。没时间就挤时间重构。时间少就小规模重构。时间多就大规模重构——没什么方法会比重构让你进步的效率更高。
  • 能自已查资料的就别请教,能用英语查的就尽量用英语——英语不行就,每天上下班的时候背嘛,扇贝走起。
  • 打字速度尽量练习得快一些,高手抽出时间从自已工作中切换出来指导你已经很可以了,别给他们表演“找字母”。

 

---未完待续

编程十年

原文:https://www.cnblogs.com/caption/p/13248511.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!