【CSDN编者按】对于程序员来说,选择深耕单一技术还是各领域涉猎一番是二选一的必考题。如果你是后者,那恭喜你成为很多开发者艳羡的全栈工程师了!你会很受欢迎,很多技术问题上都需要你的参与。但是,一个残酷的事实是,尽管你付出了巨大的努力,但是一旦遇上大神你仍然不配称作高级开发。本文的作者曾经幻想自己会成为无所不能的技术大拿,但是“囫囵吞枣”的学习却让他和同事的实力越拉越大。
作者 | Philipp Ranzhin,.net程序员。
译者 | 弯月
责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
挑战高薪,进军人工智能领域:
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
以下为译文:
回顾我刚开始学习编程的时候,我深信那句老话“编程语言并不重要”。我一直梦想着有朝一日能够成为一名无所不能的开发人员,成为那个能够将经验从一种技术无缝应用到另一种技术而不受细节约束的人。
——但后来我发现,这个想法大错特错。
曾经的我梦想着无所不能
我通过不同的应用程序域(ASP.NET、WPF、Xamarin),JS/TS(React / Redux、Node)学习了C#和.NET,基本上我也相信自己无所不能。
我的想法是对各种技术进行抽象,同时有效地掌握多个编程范例,而且我在专业软件工程的各个方面都具有实践技巧。也因此,我经常嘲笑那些40多岁只知道沉迷于单一技术的老人,自认为他们花了半生的时间所理解的东西我能在一周内就全部掌握......我甚至认为,深入某个知识领域只适合于那些甘愿在相同的岗位上工作一辈子的蠢货。
我以为一切技术都是已有技术的重复,而且我已经找到了规律。
所以,当我的工作涉及到一些荒唐的Python代码时,我会说:“给我点时间让我快速阅读一下规范,我就可以用更高级的技术解决这些问题了。这个世界上怎么可能出现我从未见过的复杂情况?”所以我完全忽视了细节。让新人去纠缠细节吧,他们还没有抽象的能力。
技术细节上的差距总是在不经意间拉大的
我曾在TypeScript中使用基于抽象类的设计,结果却遭到了嘲笑,因为很明显没有人这么用TypeScript。我当然是假装我的同事都是无可救药的白痴,虽然以前这种做法可以替我解围,但是那段时间给我留下了不好的回忆。
对开发人员来说,好声誉可以掩盖你的同事与你的知识差距。因此,你会忽略大量的细节问题,但是当然你看不见这些细节完全是因为你不懂——这就导致了我屡屡碰壁。
我不知道SQL中的索引类型;我忘了什么时候应该在C#中调用静态构造函数;如果不上Google搜索,我就无法正确实现IDisposable;我还曾试图改动React组件的状态......
然后,我开始怀疑我的抽象根本不管用。毕竟我所处理的技术类型不同,而且细节很重要,每个技术生态系统都有自己独特的最佳实践。你的.NET开发经验不会阻碍你使用JVM,但它无法取代JVM的经验。我自我评估的“学会如何学习”的技巧都成了泡影,我的学习速度并不比其他人快。
而且我意识到这个事实的时候已经太晚了。
我的技术只是一堆矛盾的想法——东一块西一块的知识让我头昏脑胀。我没能成为无所不能的全能手,相反,我成了一名了解多项技术的中级开发人员,沦为了只掌握一项技术的40多岁老人的笑柄。因此,我感觉选择全栈开发的职业生涯是一个错误。
自我批评是全栈开发的通病
问题是,企业需要全栈开发人员。不是我这样的开发,而是那种多才多艺的老人,他们拥有五年以上的全栈技术经验。
然而,这样的稀有人才并不存在,所以企业会自欺欺人。他们聘请了一些平庸的中级工程师,专门研究三种大型技术,并称其为高级全栈开发人员。这个职位上的工程师都属于冒名顶替,而且还会给这些人带来无穷无尽的自卑感,任何专注于一种技术的普通开发人员都比他们强。
现在我承认,我没有准备好与那些某些方面比我优秀的人平等地合作。否则,用不了一周我就会把自己打死。
自我批评是我们这个行业的通病,但我们却用错误的方式来补救。我们普遍认为自己是超级英雄,而周围的人都是混蛋。我们不认为贬低了高级人员,我们一直觉得我们低估了自己,我们只需要抛开谦卑,并相信内心的软件开发大神。我们认为我们需要用傲慢的态度指责那些对我们没信心的人。
其实,我们只需要承认开发不仅对外人很难,而且对我们也很难。有些时候不懂得某些知识也是情有可原的。即便你有差距,也不意味着你的价值低,应该被驱逐出社区。
但在深入自我反省的时候,我们仍然会责备自己。全栈开发人员会因为缺乏对技术的深入了解而埋怨自己,擅长单一学科的专家会感叹他们没有更广泛的技术力。
广度学习与深度学习如何抉择?
我们都面临同样的困境:广度学习还是深度学习,两者不能同时兼顾。我注意到一个有趣的现象:当你开始学习一项新技术时,旧的技术似乎就不再那么有趣了。但是在IT世界中,如果你在一年之内没有学习到新的技术知识,那么就意味着你过时了。
如果你想继续成为一个全栈开发人员,那就必须阅读一些TypeScript的发布说明,一边读一边尝试这些功能,即使你不喜欢。即便这样做了,与那些每天都用TypeScript写代码的专业人士相比,你还相差很远。
这种矛盾的主要问题是我们不知道哪种学习方式才是最好的。我们(特别是企业)两种方式都想兼顾,想让每个人都拥有正确的、深入的技术力。
我不知道哪种学习方式才是最好的,但我知道从全栈开发者的角度来看,与单语言开发人员相比,你需要花费更多的时间学习。只要你继续做全栈开发者,这种情况就会持续下去,而且你的熟练程度依然不够。
你会很受欢迎,却也没有什么地方非你莫属。尽管你付出了巨大的努力,但是一旦遇上大神你仍然不配称作高级开发。
你将永远是一个中等水平的开发。
我个人决定坚持自己的道路。我可以尝试深入学习一些东西,我也可以转行做管理(管理的表面知识都是工业标准),但是我宁愿继续我的全栈开发这条路,并忍受痛苦,直到我真正做到无所不能。
原文:https://habr.com/en/post/436596/
本文为 CSDN 翻译,如需转载,请注明来源出处。
热 文 推 荐
☞ 华为起诉美国政府!
☞ 火速拿来用!对比 12,000 个 Vue.js 开源项目发现最实用的 TOP45!
☞ @00 后 IT 大佬们,有个编程问题请教下
☞ 女神节该送程序媛什么礼物?保命指南来了!| 程序员有话说
☞ 小学生手写 Python 程序解魔方!这是高手,这绝对是高手!
☞ 小团队的微服务之路
首发 | 旷视14篇CVPR 2019论文,都有哪些亮点?
两会第一天, 大佬们关于区块链的探讨, 你要了解的都在这了
☞ 神操作!这段代码让程序员躺赚200万?给力!
print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"
点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。
喜欢就点击“好看”吧!