早期职业生涯的教训:不给钱,不干活 (No Pay, No Work)
Part 3: No Pay, No Work; 早期职业生涯的教训
2025年4月7日 · 阅读时长5分钟 分类:career education 标签:practical-experience 系列:My career so far
小象公司 — 7个人在一个随机的房子里工作 — 2013年
我知道我们已经30天没给你发工资了,你愿意再垫付一个月吗?
不,抱歉,我退出。
好吧,很遗憾你对公司不够忠诚。
不给钱,不干活
那是2013年末,我已经两个月的工资没发了。客户仍然没有付款,我不想开始免费工作。
我辞职了。我当时告诉我的老板:“不给钱,不干活”。
离开并不容易。他们给了我作为专业程序员的第一次机会。我真的很难过要离开办公室,和我的同事一起去附近的Subway餐厅,特别是那只在我们办公室/住宅工作区里漫步的猫。
在支付问题之前,这对一个17岁的孩子来说,绝对是一份很棒的工作。 这是一家做AR的公司,以及当时一些非常酷的项目。当我开始的时候,这家公司专注于墨西哥在可再生能源方面的一个项目。这是一个让公司申请商业建筑节能补助的页面。
如果公司符合要求,他们将获得资金,这些资金必须通过收据/发票和其他类型的控制措施进行严密跟踪。这意味着我们必须做很多事情:
- 经常变化的复杂业务规则
- 具有相互依赖字段的多阶段申请流程
- 计算量大的返利公式
- 文档验证工作流程
领域特定语言和表单魔法
由于这些 Web 控件的复杂性,我的经理为 PHP 开发了一种领域特定语言 (DSL)。 我们将业务规则编码到这个 DSL 中,框架会自动生成相应的 Web 表单字段。 看到元编程的真实示例,我只在论坛上读到过,这真是令人印象深刻。
然后,我会用 JavaScript 修改表单,使其更易于填写(添加日历,如果存在依赖项/约束等,则自动隐藏,一些 jQuery 魔法)。 我被聘用以使用 jQuery/JavaScript 实现魔法切换,但您必须了解这是 2013 年的 JavaScript。当时 ECMAScript 甚至还不存在,types, Typescript 都还没有被发明出来。 没有,什么都没有。 当时我们使用 Firefox 和 Firebug 来测试我们的代码。 我会使用 JavaScript/jQuery 加载东西,然后在名为 Firebug 的早期 chrome 调试工具中测试它们。 我会用一些不错的 JavaScript 在顶部增强使用我们的业务逻辑创建的字段的 UI。
$('#project_type').on('change', function() {
var selectedType = $(this).val();
if (selectedType === 'renewable') {
$('#solar_panels_section').show();
$('#efficiency_section').hide();
} else if (selectedType === 'efficiency') {
$('#solar_panels_section').hide();
$('#efficiency_section').show();
} else {
$('#solar_panels_section').hide();
$('#efficiency_section').hide();
}
}
欢迎来到有趣的儿童乐园。React 或 Angular 都不存在。
我们还为人们在 JavaScript 中获得的返利做了不错的计算器/计算(天啊,真可怕)。当时,JQuery 正处于繁荣时期,它对于不必直接管理 DOM 来说非常有用。我仍然记得我过去使用的 $.on( "click")
怪物函数。直到今天,它们仍然困扰着我。
Firebug:2013 年开发者最好的朋友。CSS 调试从未如此……充分。
对于一个只能通过 FTP 推送他的网站并使用 SVN 进行版本控制的孩子来说,这可能已经很先进了。奇怪的是,我们通过在办公室里大喊来协调哪些人检出了哪些文件:“嘿,我要检出返利计算器,请不要碰它,好的,谢谢,再见!”
没有 pull requests。 没有代码审查。 没有分支。 只是一个共同的理解,如果有人对一个文件大喊大叫,它暂时就是“他们的”。 直到几年后,我才明白正确的版本控制工作流程对于项目成功是多么重要。
移动优先? 在 React Native 出现之前从未实现的承诺。
这也促使我使用 PhoneGap 编写了我的第一个 Android 应用程序。 性能很糟糕,UI 很笨拙。 可悲的是,这不会是我最后一次面对 PhoneGap。 在 Web 服务器中编写一次应用程序,然后自动在应用程序中反映所有内容,这具有很大的吸引力。 对于不了解 PhoneGap 的人来说,PhoneGap ~是~ 一种允许创建 Web 服务器和设置跨平台应用程序的技术。 它是 React Native 的早期版本,但非常糟糕。 write-once-run-everywhere 的承诺具有很大的吸引力,但现实要痛苦得多。
结束了吗?
尽管存在技术挑战和有些混乱的开发环境,但我成长了很多。 小团队意味着我可以接触到整个堆栈:后端 PHP、前端 JavaScript、移动开发,甚至一些系统管理。
但在几个月后,裂缝开始显现。 我们的主要客户延迟付款,公司开始耗尽现金。 首先是“付款可能会晚几天”。 然后,“我们肯定会在下周付款。” 最后,“我知道我们已经 30 天没给你发工资了,你愿意再垫付一个月吗?”
那时我学到了我职业生涯中最重要的课程之一:不给钱,不干活。
即使在 17 岁的时候,“忠诚”的内疚感也没有奏效。 我明白雇佣关系是一种双向交易。 我通过我的技能和时间提供价值,公司通过薪酬提供价值。 当一方停止履行其义务时,交易就结束了。
当我收拾东西并向办公室里的猫说再见时,我并不感到痛苦。 我很感谢这次经历和学到的教训。 并感谢有机会在 17 岁时为一家真正的开发公司工作。
谢谢你,小象公司。
您是否经历过“不给钱,不干活”的时刻? 在下面或 HN 中发表评论。
« Part 2: Beyond Code, The Power of Communication Part 4: Finding pride in shipping real features »
这个博客是 open source,看到错别字了吗?您可以在 GitHub repository 中提出修复建议。