程序员方法论

作为一名经历过.Net Winform桌面应用程序开发,Java + Spring + mybatis管理系统开发,PHP + ZendFrameWork/Laravel + MySql电商系统开发,Java + Spring + oracle + Extjs广告采集前端开发,以及python + Django + postgresql招聘系统开发的资深流水线工人,一次次焦虑的转切换中决定整理出自己的编程方法论,以缓解学习焦虑之感。虽然一次次切换,但基本一直专注在Web开发,也算不幸中的万幸。

语言的学习

种类繁多的编程语言

目前已经有上百中编程语言,笔者接触过得就有汇编,C++, C#,Java, PHP, Python, JavaScript。而且,总有某些大牛哪天闲着无聊开发一些新的语言出来玩,我等流水线工人只能跟随潮流。现在Web开发而言主流的还是Java和PHP, Python也有不少,笔者对于其它编程语言也并不是很了解。早些时间翻过《七周七语言》,当然只看了第一章,就是作者为什么要选择这几种编程语言,有兴趣的同学可以看一下。

语言的通性

就Java, PHP, Python等面向对象语言而言,能够理解面向对象编程思想,随便切换语言都没有什么难度。思想就是内功,内功深厚自然学什么功夫也快。入门阶段针对语言通性和特性去了解。开始学习一门新的语言不要过分纠结与细节,先抓住几个大的模块,了解基本用法。

  • 开发环境的安装配置 (如php.ini)
  • 代码调试方法
  • 编程风格(Python缩进代表代码结构)
  • 基本数据类型和数据结构(强类型还是弱类型,类型转换)
  • 操作符支持 (短路表达式)
  • 控制流程执行(常用:switch, if else, loop等)
  • 面向对象(继承,重载,接口)
  • 异常处理(常见异常)
语言的重要特性

每种语言都有自己的特性,花时间去掌握语言的特性才更好的发挥语言的优势。长时间使用一种语言则可以更加深入的理解语言特性极其原理。
以Python为例,在理解Python编程的基础知识后可以学习:

  • 数据结构借常用方法: list,dict, tuple
  • 切片: 快速截取list,dict, tuple
  • 模块: 创建和导入
  • 装饰器: 简单理解为在方法上@method_name语法,用于处理函数执行的前置条件。比如框架中使用@login_required做登录验证
  • 上下文管理器with语法,常用于资源的打开和释放
  • 生成器yield语法,等待通知,按顺序返回一个或者多个值,直到迭代终止。
  • 魔术方法: 特定条件下触发的方法,__call__使得一个Class可以像方法一样调用
高大上却优先级不高的东西

很多高大上的东西,在实际Web开发中使用频率并不高。但是在一些面试中却常常被提到用以区分面试者的水平高低。
所以在学习中完全可以降低优先级。在对语言,框架,项目相对了解并且有余力之后再花时间学习。平时也可以可以整理一些相关的面试题目。

  • 位运算
  • 多线程,线程池
  • 协程
  • IO模型#### 语言的学习
种类繁多的编程语言

目前已经有上百中编程语言,笔者接触过得就有汇编,C++, C#,Java, PHP, Python, JavaScript。而且,总有某些大牛哪天闲着无聊开发一些新的语言出来玩,我等流水线工人只能跟随潮流。现在Web开发而言主流的还是Java和PHP, Python也有不少,笔者对于其它编程语言也并不是很了解。早些时间翻过《七周七语言》,当然只看了第一章,就是作者为什么要选择这几种编程语言,有兴趣的同学可以看一下。

语言的通性

就Java, PHP, Python等面向对象语言而言,能够理解面向对象编程思想,随便切换语言都没有什么难度。思想就是内功,内功深厚自然学什么功夫也快。入门阶段针对语言通性和特性去了解。开始学习一门新的语言不要过分纠结与细节,先抓住几个大的模块,了解基本用法。

  • 开发环境的安装配置 (如php.ini)
  • 代码调试方法
  • 编程风格(Python缩进代表代码结构)
  • 基本数据类型和数据结构(强类型还是弱类型,类型转换)
  • 操作符支持 (短路表达式)
  • 控制流程执行(常用:switch, if else, loop等)
  • 面向对象(继承,重载,接口)
  • 异常处理(常见异常)
语言的重要特性

每种语言都有自己的特性,花时间去掌握语言的特性才更好的发挥语言的优势。长时间使用一种语言则可以更加深入的理解语言特性极其原理。
以Python为例,在理解Python编程的基础知识后可以学习:

  • 数据结构借常用方法: list,dict, tuple
  • 切片: 快速截取list,dict, tuple
  • 模块: 创建和导入
  • 装饰器: 简单理解为在方法上@method_name语法,用于处理函数执行的前置条件。比如框架中使用@login_required做登录验证
  • 上下文管理器with语法,常用于资源的打开和释放
  • 生成器yield语法,等待通知,按顺序返回一个或者多个值,直到迭代终止。
  • 魔术方法: 特定条件下触发的方法,__call__使得一个Class可以像方法一样调用
高大上却优先级不高的东西

很多高大上的东西,在实际Web开发中使用频率并不高。但是在一些面试中却常常被提到用以区分面试者的水平高低。
所以在学习中完全可以降低优先级。在对语言,框架,项目相对了解并且有余力之后再花时间学习。平时也可以可以整理一些相关的面试题目。

  • 位运算
  • 多线程,线程池
  • 协程
  • JVM原理
语言包

各种丰富的语言包,极大的节约的开发成本。可以花时间了解常用的包和库,有经历的也可以看源码实现。但大多数情况下,懂得引用和使用包即可,没必要重复造轮子。

工具的使用

骨灰级工具了解一下

笔者曾经花了一个月时间,练习和记忆vim的使用。虽然大部分命令都忘了。但之后的开发中使用频度也不大。花时间了解几个常用的指令还是值得的。

编辑工具保存配置

先后用过各种开发工具,使用开发工具前最好进行一些相关配置的设置。有之前导出或者保存的配置文件最好不过。

管理构建工具多花时间

第一次使用maven的时候感觉很高端,找了一本书了解了一下。之后Php的compaser,Python的pip。主要还是跟随项目组需要吧。多去了解一下,使用的时候就心中有数了。
用多了之后再用新的工具也就那么回事。不过前端构建工具脚手架一直没机会学习,大致用过gulp之类,当时项目原因,没有过多了解。

其他工具

刚开始接触git的时候,爱不释手。看了一遍《git权威指南》。平时开发,了解工作区,暂存区,版本库,远程库,掌握add,commit,push,pull,rebase,merge,会解决冲突就够用了。之后再用svn就懒得看了。大致知道怎么用就行了。

框架的学习

MVC

主流的框架还是MVC居多。笔者使用过Java框架Spring, PHP框架ZendFrameWork,Laravel, Python框架Django均为MVC框架。

搭建、配置、生命周期

使用一个框架,环境搭建配置必不可少,了解项目的配置及生命周期大致就可以了解一个框架功能的全貌。

Models

模型层是学习框架之初应该多投入精力的地方,因为你的整个业务模块都是基于对Models的CRUD等操作。熟悉模型创建,增删改查,关联查询,打印sql,执行原生SQL等。

Controller

配置路由,项目较大时候进行拆分。熟悉框架提供的各种快捷方法,数据如何封装传递。熟悉Session,Cache的使用。Controller更注重业务。

View

前端相对难度较小,以Django为例,了解模板继承等使用,国际化处理,自定义过滤器等基本解决大部分问题。

框架特性

记得使用Laravel时,涉及一些Facade(门面),Service Providers等其它框架不涉及概念,多花时间理解这些概念和使用,可以更好的发挥框架的优势。

其他

MVC就是一个框架的核心,其它衍生的只可以逐步学习。比如,POST提交表单时候csrf验证,框架是不是实现了分页等。这些都可以在提高开发效率。

项目职责

花时间理清业务

作为一名全后端都做的web流水线线工人,深刻意识到,大多数时候技术都不是阻碍你的技术。从事二次开发的工人都知道,阅读别人的代码是一件很同痛苦的事情。而理解代码的功能后再去阅读,难度会减低一丢丢。所以花时间阅读项目相关的文档是很值得的。对于没有文档,没有注释的项目,只能心中万马奔腾的了。

代码其实就是在你理解需求之后实现它,所以先多花时间理解清楚业务。对于相对复杂的后台功能最好先进行伪代码的实现并文档化,这样之后再修改时候不至于自己都理不清。

    if 申请过该职位:
        重定向提示页

    if 职位需要填简历 and 没有填:
        申请的职位放到session里,填完简历后能跳回来
        重定向到填简历页

    if 需要做测评 and 没有做:
        申请的职位放到session里,做完简历后能跳回来
        重定向到做测评的页面

    ...
如何添加新功能

添加新的模块时候,要多参考类似功能块的实现,可能有一些特定的操作,比如刷新cache等。或者类似功能块提供了各种方便的util方法。

后记

路漫漫其修远兮, 流水线工人不好当。

猜你喜欢

转载自blog.csdn.net/u010098544/article/details/80342382
今日推荐