三月码代码总结

从3月1日开始工作,到上周周五,第一份工作的第一个月在码代码的过程中完美度过。一个比较大的不足就是没有每天写总结,虽然公司有一个每天要写的 daily report,但基本是简单记录了一天里做了的事情,而不是做完这些事之后的心得体会,没有深入反思,也就没有深刻的印象。在这月终,必须对上个月进行一个整体的总结。

这个月主要分成四个阶段:

  1. Catch up assignment,主要是 HTML & CSS, SQL, JavaScript, JQuery 的练习,大部分是之前比较熟悉的内容,用了一天半,完成任务。

  2. First assignment catalog,这是我们公司软件开发很重视的一点,用 catalog 的形式,思考设计好要软件,再进行开发。主要是从这几个方面去阐述:

    • 商业运作的场景
    • 运作过程中会碰到的问题
    • 用户名片(具体的中文名叫什么来着?):
      • 用户是谁?
      • 用户完成任务的场景
      • 用户要完成什么任务?
      • 用户完成这项任务的期待是什么样的?
      • 这个软件能够如何帮助用户完成任务?
    • 在使用软件的理想情况下,商业运作的场景会是什么样的?
    • 软件有哪些功能?
    • 软件能带来哪些好处?
    • 针对每个好处罗列具体的功能,以及每个功能所能带来的好处。

    这部分的内容,有点像是之前 IS3102 Enterprise Systems Development Project 要求写的 report 的一部分内容,但是像是产品经理做的用户需求分析,一直对产品经理很感兴趣的,有接触过一些产品经理要写的文档,所以写的过程中考虑的比较详细,加上有之前入职朋友的提醒,有幸成了极少数能在第一个次审核就通过的。

  3. First assignment implementation,开始用在第一阶段里面复习的语言写第二个阶段设计的程序。捋起袖子,直接开撸。比较集中开始写代码是从大二的暑假开始,假期的实习用 Ruby on Rails 写全栈,前端用的 JQuery,半知不解的边查边写完成了任务;IS3102 用的是 Primefaces,集成好了的包,除了极个别,不用直接使用到 JavaScriptJQuery,在以色列实习时,基本都是用 python 写后端。零零总总的经历,虽然用过一点,自己也看了一些这方面的材料,但没有大规模的用 JavaScriptJQuery 写过,直接开撸的后果就是,不熟悉代码组织的模式,在尽量的保持不重复代码,分成了好几个文件来写(和其他人一个文件几百行相比)的情况下,代码越写,越是乱成了一锅粥,也没有停下来好好想想,怎么做比较好,写了一个多星期,差不多把系统的初始版本都写完了,边写边踩坑,进度还算可以。提交审核,整体上没有大问题,但一些之前没有提到的细节上,需要做一些修改,比如:表格没有验证输入内容,表格没有分页和搜索等。

  4. First assignment implementation improvement,在原来的基础上,简单的加上要求的新功能,可能最多3天就能够写完,却是不能忍受乱成一团的代码,在 Udacity 上看完 Product Design 的课后,正好看到了 JavaScript Design Pattern。花了一天的时间,紧凑的看完了视频,跳过了用 KnockoutJS 那部分,觉得之前试的那种模式已经够用了,就开始重构原来的代码。这个的模式大概是这样的

    $(function() {
    var model = {
    init: function() {}
    };

    var controller = {
    init: function() {
    model.init();
    view.init();
    }
    };

    var view = {
    init: function() {}
    };
    controller.init();
    }());

    本来以为是个不错的模式了了,一个页面,放一堆的这些东西,但是在写下一个页面要用到这个页面里面的函数时,麻烦就出现了,没法使用到,只能用 window.modules = {} 这个方法,先将这部分的代码存到 module 里面,再到另外一个页面去引用,显然,不合理。不经意和同期的越南小哥聊天时,讨论了下代码,他用的是 MVC 模式,恍然大悟,这不就是和 Ruby on Rails 组织代码的模式一摸一样吗。。。本来想跳过的那本书 JavaScript Design Patter 还是得硬着头皮翻一遍。第二天,就开始按照 MVC 的机构将之前写的所有代码全部重构,加上新的功能,又写了一个多星期。不过以这种模式来组织代码,清晰明了,重复利用率高,维护和修改也比之前来的容易的多。

    然而,这个坑,还不能说完全跨过了这个坑。将这个页面作为一个 View 的方式还是不够模块化,一个长得一样的 List 或者完全相同功能的 分页功能 要在多个页面使用时,就让我意识到,在动手写代码之前,没有好好设计,会碰到一些早就改先想清楚的问题,比如说一个模块被多次重复使用时,每次使用都有一些特殊的使用方式,要如何处理。写完后改代码的质量和效率,远低于设计好再开始写的质量。深刻体会到了《构建之法》中提到的那点,有经验的程序员,前期设计和思考的时间长,真正开发时用的时间反而比较短。 Senior Student: 大四学生;SDE:工作三年以上程序员 (Senior Student: 大四学生;SDE:工作三年以上程序员)

写了一个月代码,整体感觉还是有点疲惫和乏味,一直都在不断的学习新的内容,而且都是实打实的进步,但是要学要掌握的东西还是太多,不是 CS 专业毕业的码农,还是有些劣势的。

下个月,每天进行一个新加点技能的总结,积累和沉淀写东西。