Daniel Sada Caraveo | Developer Productivity & Culture

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 中提出修复建议。