IT自由职业者的成功秘诀

2023-11-16

原文作者Greg Jorgensen是一位典型的程序员,他从1974年开始编程。曾在耐克和苹果等公司任职。他专攻修复和完善受损、被遗弃和"半生不熟"的Web应用程序,尤其是后台语言是PHP的网站。

我从事自由职业已有十余年了,有时候在我有全职工作时我把它当做副业,有时候我只做自由职业。关于自由职业中如何成功地编程,我也学到了一些经验。

  1. 做你会做的事情

  客户付钱请你解决问题。他们对Haskell语言有多炫根本不感兴趣,而且他们也不想付钱让你去学习新的工具和编程语言。因为上一个程序员力不能及而 退出或者被解雇,我接手这一类的项目,多的数不胜数。你应当拓展自己的技能以保持竞争力,而且不要因为其自身价值而过分喜爱时下流行的程序语 言。(注:Haskell是一种纯函数式编程语言。)

  2. 不要独树一帜

  如果你掌握了一种新奇的、炙手可热的技术,那你当然可以使用它。但是,如果仅仅是因为看到会Lisp的自由职业者赚钱多就去学习Lisp,那你得仔细 考虑一下自己如何跟他们竞争。当然,现今有很多PHP程序员,但大部分都是业余爱好者,你能轻易地跟他们竞争,并且有的是PHP工作去做。跟技术娴熟的、 有经验的专家竞争少数工作更困难。别人能赚钱的工作你都想去做,但不打算做的更好,所以你在与一支六年级的队伍打篮球,而不是试图去加入NBA。

  3. 不要试图做所有事情

  注意不要忙于做技术支持、硬件安装、设计、艺术创作等工作。要坚持做自己擅长的。把那些你不擅长的工作发送给其它擅长的自由职业者,遇到同样的情况,他们也会发送给你。

  4. 不要接规模太大的工作

  如果很难用一张纸把项目描述清楚,或者整个开发进度要持续几个月甚至几年,那么你得注意了。通常,规模较大的项目对一个人来说工作量太大。如果你非常 想接一个大规模的项目,那么,试着把它分成若干个小的子项目,每个子项目可以短期完成并有一个可交付的成果,这样你和客户就可以看到项目的进度和成果。

  5. 避开行为恶劣的客户

  如果客户看起来狂暴、专横、吝啬、贪婪、粗鲁、苛刻、霸道等,那么远离他们。去找其他客户。如果你很难想象与客户能够保持一种专业的、有报酬的工作关系,或者你感觉客户做的任何事情都很恶劣,那么拒绝他们。

  6. 大多数业务都是通过推荐得到的

  好好干,让你的客户满意,与其他自由职业者合作,构建能够推荐你并给你带来工作的人际关系网。

  7. 不要试图让它看起来像个“真正的”交易

  很多企业家过分注重积累公司的外在形象。你不需要花哨的网站、信头、办公室等。你可能甚至都不需要创建一个企业或者有限责任公司。除非你有员工或者一 天能给客户开出72小时的账单,否则你不会赚到足够的钱来证明一切都制作精良或者能被认定为“专业”。你的客户不会在乎你在家工作,也不会在乎你没有排 场。

  8. 采用源码控制和问题跟踪

  学会如何使用源码控制和基于网络的问题(bug)跟踪。在Wiki上记录每一个项目的需求、问题及决策。运用工具,让客户通过系统向你汇报bug。我使用ProjectLocker,现如今还有其他便宜的托管方案。不要浪费时间在你的服务器上搭建它。

  9. 追踪工作时间并定期开账单

  获取报酬最好的方式就是准确地记录工作时间,并定期向客户开账单。我喜欢按小时记录工作,每两周向客户寄发票。你不需要一个成熟的记账系统,现在有很 多时间跟踪托管软件以及像BlinkSale这样的在线开发票方案,它们能帮你完成大部分工作。(编注:选用何种追踪工作时间的工具,请参阅伯乐在线编译 的这篇文章《追踪时间的10个给力应用程序》。)

  10. 不要转包

  我提倡与其他自由职业者合作,但我不喜欢将工作转包出去。很可能给别人讲解项目并审核其工作完成情况所花费的时间,与你亲自完成这项工作所花费的时间 一样长。不管怎样,任何跟你水平相当的程序员花费的时间都是差不多的。如果你认为在Craigslist找到了一个每小时收费12美元的程序员是捡到了大 便宜,那祝你好运。如果你承担的工作多到你处理不了,那么试着将它转交给另一个懂得回报的自由职业者。

  11. 使用敏捷开发技术

  客户都想了解工作进度。对需求的错误理解,可能是你犯的错误中代价最高的。采用短期可交付成果和反复审核的敏捷开发技术,会让你的客户满意,也会让你远离繁杂的任务。你不需要向用户讲解敏捷开发,他们根本不在乎。只是告诉他们你如何做以及你需要从他们那里得到什么。

  12. 让客户及时了解项目情况

  在线发布工作进度,让客户了解你在做什么。对大部分人来说,编程很神秘,所以让你的工作进度清晰可见会使客户感觉跟你合作很舒服。我发现敏捷透明的开发过程可以防止账单纠纷,而且一旦客户习惯了你的高标准服务,他们便很少会把工作再交给其他自由职业者来做。

  译文来源:职场博客 - 自由职业者
  译文链接:http://www.jobbole.com/entry.php/554
  原文作者:Greg Jorgensen  文章推荐: 关关  编译:敏捷翻译组 - 牛冬梅

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IT自由职业者的成功秘诀 的相关文章

  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 在 Haskell 中编写 Web 应用程序的最简单方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的项目中更多地使用 Haskell 并且我认为如果我可以开始将它用于 Web 应用程序 这将真正
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • 在 Haskell 中将 Maybe Int 转换为 Int

    我正在编写以下代码 并希望找到框字符串中数字的索引 所以我用了findIndex但它返回Maybe Int值 而我只想要Int value 我怎样才能转换Maybe Int to Int值或者有什么方法可以提取Int from Maybe
  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • 在 Haskell 中提升 State monad 中的值

    我正在 Haskell 中编写一个数独生成器 求解器作为学习练习 My solve函数接受一个UArray但返回一个State Int UArray 这样它也可以返回解决问题时发现的最大难度级别 到目前为止 这是我的功能 仍处于实验性的早期
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 整数转浮点数

    这段代码的工作原理 posToXY Float gt Float gt Integer posToXY a b do let y a b round y 但这不起作用 posToXY Integer gt Integer gt Intege
  • 访问函数中的环境

    In main我可以读取我的配置文件 并将其提供为runReader somefunc myEnv正好 但somefunc不需要访问myEnv读者提供 链中的下一对也没有提供 需要 myEnv 中某些内容的函数是一个微小的叶函数 如何在不将
  • 为什么 Haskell 中有协函子和逆变函子的区别,而范畴论却没有区别?

    这个答案是从范畴论的角度来看的 https math stackexchange com a 661989 72174包括以下语句 事实是 协函子和逆变函子之间没有真正的区别 因为每个函子只是一个协变函子 More in details a
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • 在 Haskell 中,为什么我必须在这段代码中使用美元符号?

    我仍在尝试破解这段代码 import Data Char groupsOf groupsOf n xs take n xs groupsOf n tail xs problem 8 x maximum map product groupsO
  • 如何在 Haskell 中向右或向左移动列表的 1 个元素?

    嗨 我一直在寻找答案 但找不到 假设我们有一个像这样的列表 1 10 4 5 3 我怎样才能将 5 向左移动 使这个列表变成 1 10 5 4 3 我尝试过了swapElementsAt通过找到该元素的索引 但它看起来非常不足 swapEl

随机推荐

  • 聊一聊会话编程

    HttpSession接口中常用方法 会话的创建 销毁的方法 会话与请求的区别 什么是会话 客户端向服务器发送请求 服务器端接收请求并生成响应返回客户端 客户端对服务器端这样一次连续的调用过程 被称为会话 seccion 登陆访问控制 某些
  • 如何在linux服务器部署sonar服务?

    文章目录 前言 一 上传sonar插件 二 设置sonar插件的权限 三 启动插件 四 配置环境变量 前言 sonar服务是代码质量扫描的工具 我们如何利用sonar进行代码质量扫描还有在linux服务器上部署呢 下面这篇文章详细的记录了我
  • 【Python基础知识整理】

    一 Python的基本信息 1 Python的起源 Python的创始人是吉多 范罗苏姆 Python的创作过程 吉多对于Python的定位 2 Python的基本工作机制 一个用编译性语言比如C或C 写的程序可以从源文件 即C或C 语言
  • SVN 解决冲突

    版本冲突原因 假设 A B 两个用户都在版本号为 100 的时候 更新了 kingtuns txt 这个文件 A 用户在修改完成之后提交 kingtuns txt 到服务器 这个时候提交成功 这个时候 kingtuns txt 文件的版本号
  • 逻辑回归的总结(详细步骤)

    什么是逻辑回归 逻辑回归虽然名字中带有回归 但是并不是一个回归模型 而是一个分类模型 逻辑回归的目的就是解决分类问题 最常用的就是解决二分类问题 逻辑回归和线性回归的关系 逻辑回归 Logistic Regression 与线性回归 Lin
  • Linux修改文件所有者和用户组

    一 修改文件所有者 修改的用户必须在 etc passwd文件中 etc passwd记录用户信息 chown change owner的简写 修改文件的所有者 chown R 所有者名称 文件或目录 R 递归 将子目录下文件全部修改 二
  • 关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎

    关于 Vulkan Vulkan 被视作是 OpenGL 的后续产品 它是一种多平台 API 可支持开发人员准备游戏 CAD 工具 性能基准测试等高性能图形应用 它可在不同的操作系统 比如 Windows Linux 或 Android 上
  • Interface中input delay&output delay

    最开始在学习SV的时候 碰到interface的使用并没有过多的在意 只是了解clocking block是为了解决竞争问题 然而在后续使用clocking block的过程中 总会碰到一些时序错位的问题 如下 通过简单的例子来表述下clo
  • Mac 安装 Android Studio 以及 Android 开发环境配置

    安装 Android Studio 1 下载 Android Studio 下载地址 https developer android google cn studio 直接下载最新的dmg文件 安装 一直点 Next 下一步直到完成 2 P
  • 多线程日志库

    本文参考自陈硕老师的muduo网络库 删减了繁多的依赖文件 精简如此 供更多的人参考学习 感谢陈硕老师 copyable h ifndef MUDUO BASE COPYABLE H define MUDUO BASE COPYABLE H
  • 小小换行符乱谈(文本文件vs二进制文件)

    使用 C 语言的 fopen 打开文件时 可以指定的 mode 有 12 个 其中 6 个包含 b 使用 C 的 fstream 打开文件时 可用的模式组合有 24 个 其中 12 个包含 binary 使用 python 的 open 打
  • Unity3D 4.0 界面 基础 入门

    Unity3D 4 0 界面 基础 入门 一 屏幕布局 2 by 3布局 4Split布局 Tall布局 高的布局 wide布局 二 在屏幕布局模式下的五个主要区域 1 场景视图 Scene View 用于摆放游戏对象 2 游戏视图 Gam
  • CMOS图像传感器OV7740数据手册

    下载地址 阿里云盘分享https www aliyundrive com s 4GXdCkz9mvG
  • git从已有分支拉一个自己的开发分支

    第一步 切换到被copy分支 并且当前分支必须要保持是最新代码 git checkout 被copy分支 git pull 第二步 从当前分支拉开发分支 git checkout b 自己的分支名称 如下 tengxiao ma SJ DN
  • 微信小程序的常用组件

    目录 一 常用的视图容器类组件 view scroll view swiper 和 swiper item 二 常用的基础内容组件 text rich text 三 其它常用组件 button image navigator 一 常用的视图
  • 启动tomcat服务器,为何要配置CATALINA_HOME和JAVA_HOME ?

    问题 win10系统 本地安装jdk 配置环境变量 是将jdk的bin目录 笔者本地目录为 E JavaTools jdk1 8 0 131 bin 直接配置到系统变量path中 cmd执行java javac都正常 认为jdk安装配置没有
  • vue中运行项目自动打开浏览器失败

    问题 在package json文件中设置 open后自动打开失败 失败 失败后跳转到浏览器中 解决方法 在vue config js中将原先的代码替换成如下代码并保存后 重新编译就ok了 const defineConfig requir
  • 2018-CVPR-NVIDIA-Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Inte

    基于光流反向变换的框架 第一部分是双向光流估计 第二部分是进行中间帧的合成 采用了stacking的思想 将光流的估计分成两个阶段 第一阶段是粗估计 第二阶段再进行精调 从而来改善图像的生成效果 此外第二阶段还要估计出掩膜权重 参考 htt
  • ubuntu初次使用笔记

    环境 win7 vmware10 ubuntu13 10 1 上网配置 一般只要装上虚拟机 安装ubuntu之后 选择桥接模式联网即可 但是 也有可能出现奇怪的问题 那么看以下设置 假设ubuntu联网方式设置为NAT NAT和桥接模式的区
  • IT自由职业者的成功秘诀

    原文作者Greg Jorgensen是一位典型的程序员 他从1974年开始编程 曾在耐克和苹果等公司任职 他专攻修复和完善受损 被遗弃和 半生不熟 的Web应用程序 尤其是后台语言是PHP的网站 我从事自由职业已有十余年了 有时候在我有全职