程序员们为什么如此排斥外包?网友:做外包就是给大厂当妾
在职场论坛看到一个热帖,讨论为什么程序员们排斥外包。
有位网友的比喻直接把我看乐了:外包不是“妾”,而是“妓”——需要时给钱叫来,用完就撵走。合同签在“清楼”(外包公司),老板娘(HR)还会挑“优秀者”推荐给有钱的大官人(大厂)。要是真被看上了,才能进大厂做个“妾”。
虽然说法夸张,但程序员排斥外包的理由也差不多:没有归属感。干着核心业务的活,却被视为外来人员,连技术分享会都可能被排除在外。就算日夜加班,产品上线了,功劳也和你无关——那种疏离感,真挺让人郁闷。
再说成长性,外包大多是“体力活”,天天改 bug、写 CRUD,学不到前沿技术。更别提一些外包公司直接拿人当“消耗品”,项目一结束就裁员,完全不考虑员工的职业发展。
所以,不是程序员“瞧不起”外包,而是这条路真的太难走,走好了是副业能养家,走不好就是废掉几年青春。【备注:文末可领最新资料】
算法题:保持城市天际线
今天和大家聊一个算法题:保持城市天际线。
作为一个写代码的,看到这种题目就像程序员看到咖啡机,嘴上说着“真麻烦”,手已经开始冲了。
题目是这样的:给你一个二维矩阵,表示城市建筑的高度,你可以调整建筑高度,但必须保持每行每列的天际线(即最大值)不变,问你在这个约束下,最多可以增加的建筑总高度是多少。
来看这题,咱用 Python 写个简单实现。
首先,这题的思路其实很直观:
找到每行和每列的最大值。 再遍历整个矩阵,每个元素能增加的高度就是它的当前位置受行列约束的最大值减去当前值,简单说就是 min(row_max[i], col_max[j]) - grid[i][j]。
代码上手就撸:
def max_increase_keeping_skyline(grid):
# 获取行和列的最大值
row_max = [max(row) for row in grid]
col_max = [max(col) for col in zip(*grid)] # 计算总增加高度
total_increase = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
total_increase += min(row_max[i], col_max[j]) - grid[i][j]
return total_increase
# 示例输入
city_grid = [
[3, 0, 8, 4],
[2, 4, 5, 7],
[9, 2, 6, 3],
[0, 3, 1, 0]
]
print(max_increase_keeping_skyline(city_grid)) # 输出应该是35
代码的逻辑很清晰,咱们一步步看:
row_max这一行,用max(row)一把梭,找出每行最大值。col_max把矩阵转置一下(用zip(*grid)这个经典操作),再来个max,轻松搞定每列最大值。然后遍历矩阵的每个元素,计算每个位置能增加的高度,最终汇总到 total_increase里。
运行结果出来了,是不是一目了然?35,这就是这个城市天际线被保持住的情况下,最多能增长的高度。
细节之处的“天际线逻辑”
要注意的是,这题的关键在于行和列的约束关系。有些同学可能一开始觉得“每行和每列最大值都要保持不变”,这是不是要分两步走?其实不是。这里的核心是用 min(row_max[i], col_max[j]) 计算每个位置的天际线约束,这一步就保证了既不破坏行的最大值,也不破坏列的最大值,真正实现“天际线协调”。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。