2023年度总结
2023年度总结成长二月份入职后,整个生活节奏快了很多,最初是先熟悉公司的系统框架,然后是梳理公司的业务流程,封装一些第三方的接口,后来领导看我熟练后,开始将一些简单的新业务让我来设计去做,我觉得这也算是小型公司锻炼人的一点,因为什么都要做,人员就那么几个,只要自己能力够,很快就能接触核心业务,而业务范围并不会太广。
这期间当然也犯了很多错误,不论是写新的业务还是维护老的代码,感谢领导和老板对我的包容,也因此让我对代码产生敬畏心,有一个好的代码规范十分重要,这体现在各个角落中:命名约定,条件判断,异常处理,代码组织方式上。这是我们在学习时最基本的课程,却也是工作中最重要的一部分,当维护一个有八百行的函数时,改哪里都是心惊肉跳的,每次上线都在心中默默祈祷千万别出问题。
今年没有花太多时间去学那些高大上的技术,因为完全用不到,也越发感受到不要过早将事情复杂化。主要精力还是集中在编写好的代码上,直到现在我才渐渐有意识的使用面向对象思想,其中两点让我印象深刻:异常处理,职责划分。
比如在看代码时,我们都不希望行数过多,因为这代表代码的职责也就越多,往往希望一个函数只做一件事。当函数在做处理并需 ...
Effective Ruby
熟悉Ruby第一条:ruby中的True与False
在Ruby中,除了false和nil,其他值都为true,包括数字0
true和false并不是关键字,而是一个全局常量但不遵守命名规范和赋值规范
不遵守命名规范是因为,它没有以$开头
不遵守赋值规范是因为,无法写ture = something
true.class => TrueClass
false.class => FalseClass
既然不是关键字,true和false就有着对象方法
如false和nil都代表 false,那我们怎么进行区分?
这一点在表示配置信息对象中会贯穿始终,因为false一般代表禁用,nil代表未赋值,使用默认值等。
最简单的方式是 obj.nil? 判断是否为nil
还可以使用 false == obj 来进行判断,在一般常规语言中,我们倾向于把不变量放到左边,但这里我们有着功能性上的考虑,因为false是一个对象,而FalseClass定义了==方法,也就是说这里实际执行为 false.==(obj)。这也太牛逼了。比如一个类也定义了==方法,则可能就会出现混乱的样子,比如 ...
面向对象的演化过程和解决问题
面向对象的演化过程和解决问题
前言:
相信大家对面向对象这个概念已经很熟悉了,如果你是使用Java入门编程的,一定会被大量灌输:类,继承,多态的概念,但我们真的理解它们吗?一切就好像自然而然,写代码不就应该是这样吗?但事实上这些概念,只是我们脑海中的一个毫无意义的符号,当我们写一个类时,我们只是按照被教导的方式编写。好比现在最多的Web开发,业务是用户的增删改查,我们想到用户会有:name,age,gender属性。于是我们创建一个实体:
class User {
String name;
Integer age;
Integer gender;
}
然后按部就班的写出Mapper(或Dao)层,Service层,Controller层,这就是MVC结构,它是如此的好用,让我们编写简单业务时十分顺手。但是当业务逐渐复杂时,我们在Service,Controller层中添加了大量的外部依赖,各种依赖注入,大量重复的代码堆砌在各个角落,一个变量被各个函数引用修改,当出现问题时,我们不得不到各个函数中查看,到底哪里出了问题,面向对象中的概念已抛到脑后。而且 ...
前端问题解惑
前端问题解惑 如今前端发展的太快了,让我们这些只会基础HTML + CSS + JS的人无所适从,大量的组件,大量的工具,让人不知道到底干嘛的,所以这里写下最近的学习所得,强烈推荐资源:theodinproject 和 modern-javascript-explained-for-dinosaurs。
前后端渲染后端渲染 如果你用过Java编写过Web项目,应该听说过Servlet 和 JSP这玩意儿,Servlet可以处理HTTP请求并生成响应,JSP是简化版的Servlet,用户通过访问Servlet,获取服务端的HTML页面,通过JSP可以在HTML中嵌入Java的代码,比如条件判断,循环,数据访问等等,增强页面展示和动态性。你可能会疑惑,为什么那时候不用Js啊,因为那时候的Js只能做一些简单的动态效果,表单验证之类的功能。
一切看起来不错,但有一些问题存在:
占用服务器资源多,所有计算在服务器完成。
每请求一次,都要从服务器上获取完整的HTML,比如我就想更新页面上一小部分,却需要下载整个页面(这里就引出了后面的ajax)。
...
如何测试驱动开发
前言
最近在读《匠艺整洁之道-程序员的职业修养》这本书,作者鲍勃大叔开篇就用了大量的示例来讨论与演示为什么需要和如何操作测试驱动开发。我是之前写过测试,但从不知道测试如何驱动开发,大部分情况下也只是先写生产代码,写好后再测试,看看是否能调通,再修改代码中隐藏的问题。 而测试驱动开发会扭转这种思维方式,是先写测试,再写对应的生产代码。这一开始让人会觉得很奇怪,感觉并且很麻烦,但当你尝试一下,就会发现这事儿挺有趣,且神奇。 温馨提示:Clean Craftsmanship: Disciplines, Standards, and Ethics (Companion Videos),这个是该书示例操作的视频说明,非常非常非常有用!!! 第一篇是讲述如何通过测试驱动开发来写一个栈结构。我严重怀疑大叔是不是一边写代码一边喝啤酒。整个过程伴随大叔魔性的笑声和宛如魔法般的操作,就好像他在不停调戏编译器。你会通过这个视频感受到如何从零开始,进行测试驱动开发。 下面将讲讲一些基础知识。
为什么需要测试驱动开发?
就我目前的现状,我能感受到重构代码时的痛 ...
发布自己的GEM
生成基础文件结构bundler gem your_gem创建一个基础文件结构第一次使用时,需要配置一些默认值:
测试Creating gem 'demo_gem'...
Do you want to generate tests with your gem?
Future `bundle gem` calls will use your choice. This setting can be changed anytime with `bundle config gem.test`.
Enter a test framework. rspec/minitest/test-unit/(none)
CIDo you want to set up continuous integration for your gem? Supported services:
* CircleCI: https://circleci.com/
* GitHub Actions: https://github.com/features/actions
* GitLab CI: https: ...
RubyConf China所想
时隔三年Ruby China大会在上海再次举行,也趁着这个机会去上海逛了两天,收获许多。
Ruby在如今中国已经是一个非常小众的语言了,大家都在争先恐后的学习:
Java
Go
Python
我能想到的原因就是大部分的公司在用这些语言,大部分人在用这些语言,如果这时候你选择学习一门小众且岗位极少的语言,也就意味着你在偏离"主流",在浪费时间。当你进入一家使用小众语言的公司,你也会担心这是否会影响今后长远的发展。而当你顺应追随"主流"时,你会想我选择了一个最保险的选择,公司都在招聘它。而当所有人都这么想时,主流中便涌入大量的人力,尤其是在中国。而数量的上升,与岗位的减少,让大家只能提高自己的质量,或想想其他出路。
而主流的人越多,支流的人也就越少,小众语言的公司负责人也会因为招人难而担心后续的发展,进而选择技术转型,甚至是在最初决策时,就转向使用人数最多的语言,而不是最适合场景的语言。这也就导致了一个恶性循环,最终主流上的人更多,支流上的人更少。
在我最初学习Ruby时,是因为看了《码农翻身》《程序员修炼之道》时,作者都在提及这个优雅的语言,让 ...
Turbo Rails Tutorial-第十一章
Adding a quote total with Turbo Frames本章节中,我们将添加一个包含quote总价格的sticky bar,每当我们创建,修改,删除一个line item,总价都会被更新。
What we will build in this chapter总价格会在下面的情况中更新:
一个line item被创建,修改,删除
一个line item date被删除,而一个line item date中可能有多个items
下面的草图,将会展示我们的quote编辑器长什么样子:
现在需求明确了,敲代码吧。
**Note: **现在我们已经体验过很多次Turbo Frames了,让我们来讨论一下什么时候使用<turbo-frame> 或是 <div>
当我们需要使用Turbo去拦截点击链接或者表单提交时,我们必须使用Turbo Frame比如line_items/_line_item.html.erb局部页面的内容必须被嵌套到Turbo Frame中,因为当我们点击line item的”Edit”按钮时,我们希望Turbo ...
Turbo Rails Tutorial-第十章
Nested Turbo Frames这一章,我们为line items构建最后的增删改查代码,而line items是嵌入到line items dates中的,为此我们需要使用Turbo Frames去解决一些有趣的挑战。
What we will build in this chapter本章中,我们会大致敲定quote编辑器,通过增加line item到line item date中,每一个line item都拥有名称,可选的描述,单价,数量。
这一章的的挑战是我们将会有大量的嵌套Turbo Frames,我们将讨论如何在操作LineItemDate and LineItem增删改查时,并Quotes#show页面的状态。
在敲代码前,我们在看一下线上的示例:final quote editor,让我们创建一个quote并且进入对应的Quotes#show页面,让每位创建几个 line item dates and line items,来对我们最终的产品有一个确定的概念。
当我们清楚了最终产品的样子,我们就开始吧,我们会先不用Turbo Frames and Tu ...
Turbo Rails Tutorial-第九章
Another CRUD controller with Turbo Rails本章节中,我们将构建quotes中的日期数据的增删改查,这是一个很好的机会去练习我们之前学习的内容。
What we will build in the following three chapters现在用户可以创建,修改,删除quotes数据,是时候让我们的quotes编辑器做一些更有用的事儿。
接下来三章,我们将在Quotes#show页面中构建,当本章结束时,我们的用户可以为每个quotes添加多个日期,而每个日期里有多个条目,每个条目拥有名称,可选的描述信息,数量,单价。
在动手之前,我们可以再在线上实例中体验一下:quote editor on hotrails.dev,创建一个quote,进入Quotes#show页面,我们可以创建多个日期,并在日期里添加多个条目,当我们创建,修改,删除条目时,quote的总额也会被更新。
What we will build in this chapter我们还是在不使用Turbo Frames和Turbo Streams的前提下构建日期数据的增 ...

