如何才能一统编程语言的江湖?
脚本之家
你与百万开发者在一起
以下为译文:
在撰写本文的时候,我搜索了一下:“我应该学习哪种编程语言”,结果得到了5.17亿个搜索结果。每个结果都介绍了某种语言战胜其他语言的优势,其中90%的结果最终都推荐了Python或JavaScript。
可能我有点太大胆了,我不太赞同这5.17亿个结果,我建议你应该学习的第一门编程语言是逻辑。
如今只知道如何编程已经行不通了。市场已经被速成班渗透,“初级软件开发人员”的职位已经消失殆尽。今时今日为了取得成功,你不仅需要知道如何编程,还需要建立逻辑思维。
1
我的第一门计算机科学课程
我第一次接触计算机科学是10年级的一门选修课。上课的第一天,我的眼前摆满了各式各样的冰淇淋和制作圣代的原料。大家坐好以后,老师宣布说:
“今天,我们来制作圣代。首先你需要编写一份有关如何制作圣代的具体说明,然后由我根据你的说明来制作。”
我心想,没问题,这很简单啊。不到一分钟的时间,我就写下了一份完美的圣代制作说明:
盛三勺黑树莓冰淇淋放到碗里;
放两勺热巧克力到碗里;
放鲜奶油到碗里;
在圣代上撒上少许彩色糖粒和一颗樱桃。
然后,我的老师(这台可爱的模拟计算机)就上演了一幕准确无误又充满讽刺的表演。她开始狠狠地扎冰淇淋的盒子,由于盖子还没有打开,所以她根本无法穿透盒子坚硬的外表。
“好吧,先取下盖子。”我迫不及待地想吃冰激凌。
“但你的说明里没有提到这些,因此,很遗憾,我没办法为你制作圣代,下一位!”
第二次尝试
取下盖子,打开黑树莓冰淇淋;
盛三勺黑树莓冰淇淋放到碗里;
打开热巧克力,然后放两勺到碗里;
打开鲜奶油,然后放一些到碗里;
在圣代上撒上少许彩色糖粒和一颗樱桃。
这次我确定我的说明没问题。在放到圣代上之前,我提前检查了一下每样东西是否都打开了。
于是,我的老师打开盖子,盛了三勺冰淇淋放到了碗里。终于,我的圣代就要做好了。然后,她打开热巧克力,放了两个勺子到我的碗里。请注意,不是两勺热巧克力,而是两个勺子,根本没放热巧克力。我说的还是不够具体。最后,老师按照我说的全部做完了,我拿到了一碗冰淇淋,两把金属汤匙,一个鲜奶油罐,还有大约300个彩色糖粒。
我想说到这里大家都明白了,计算机是一个纯粹的逻辑实体。它没有上下文,也没有任何假设。它会严格遵循一组非常具体的指令。
最后我的圣代制作说明是一场非常繁琐但很有必要的灾难:
如果下列各项尚未打开,则请打开:黑莓冰淇淋、热巧克力、彩色糖粒和鲜奶油;
从一摞碗中拿一个,然后放到你面前;
拿起冰淇淋勺,盛三勺黑树莓冰淇淋放入碗中,一次放一勺。完成后请放下勺子;
如果还没有加热巧克力,则请拿一个盛热巧克力的勺子,然后盛两勺巧克力放入碗中,一次放一勺。完成后请放下热巧克力;
将鲜奶油倒过来,用手指按住喷嘴在碗上方喷3秒钟,然后把瓶子放回原位;
在碗上洒约40颗彩色糖粒,完成后将瓶子放回原位;
从樱桃罐中取出一颗樱桃,然后小心地放在圣代上面;
将圣代和一把勺子一起交给学生。
最后一项非常重要,因为如果没有这句话,老师就会吃掉我的圣代。
这就是真实的计算机编程。你需要向计算机提供大量详细的指令集。从本质上讲,所有编程语言都会分解成指令。
2
软件开发职业发展
如今软件开发这个职位的范围非常广泛,可以作为一个单独的行业来探讨,而“软件开发人员”也是一个过于宽泛的职位头衔。两名在市场上同样枪手的开发人员拥有的技能可能完全不同,这表明开发工作不仅仅是单纯的编程能力。除了编程以外,熟练的开发人员还有一个通用的属性:逻辑。
优秀的开发人员都是批判性思维方面的专家。这一点至关重要,因为大多数软件项目都没有文档,七零八碎,简直就是灾难。这样的项目需要拥有批判性思维的开发人员将信息拼凑起来,并在需要时填补空白。凡是无法将所有线索联系到一起的人都会落伍。
因此,我可以得出另一个大胆的声明:计算机科学的基础知识对编程能力至关重要,而且永远如此。
流行的编程语言起起落落。很多框架都过时了,各个公司都希望通过混合技术栈来应对不断变化的需求。什么才是一成不变的东西?基本原理!
3
如何改善逻辑思维
对于那些无法深入思考的人,请考虑使用以下工具来提高批判性思维:
了解运行时的复杂性
程序的运行时复杂度又称大O(Big O),可以表示为相对于输入大小(n)执行的步骤数。永远把关注点放在运行时间上,这是学习编程的第一步。
了解数据结构
数据结构是每个复杂程序的核心。掌握在什么情况下使用哪种结构本身就是一门艺术。数据结构直接关系到运行的时间复杂度,因为选择错误的结构会导致程序停滞不前。搜索数组中的某个值的复杂度为O(n),也就是说随着输入大小的增加,使用数组的代价也会提高。哈希查找的复杂度为O(1),因此哈希密钥的查找时间将是恒定的,与哈希中密钥的数量无关。
我曾经面试过一个候选人,他坚持认为数组的搜索时间比哈希表要快。这种人在招聘时就不要考虑了。
多读/多看/多听
Udemy,Pluralsight和Codecademy等网站为学习新编程语言提供了优秀的资源。为了学习基础知识,你需要阅读软件工程通用概念、最佳实践以及编程风格之类的书籍。工程师首推的书包括《设计模式》、《重构》、《代码大全》、《代码整洁之道》以及《程序员修炼之道》等。最后,每个工程师都应在自己的办公桌上放一边《算法导论》。
实践!
不经过千锤百炼就不可能成为小提琴大师。HackerRank、CodeWars、CoderByte、TopCoder和LeetCode等网站提供了成千上万道编程考题,旨在测试你对数据结构和算法的掌握程度。我发现这些网站的最佳利用方法是动手解决问题,将解决方案上传到Github上,然后再看看最佳解决方案,以了解其他人如何解决该问题。因此,引出我的最后一点:
多读其他人的代码
在从事软件开发的过程中,你可能犯的最大错误就是独来独往。软件开发是需要集体的努力。我们一起建立标准,一起犯错误,并随着时间的流逝学习有效的方法(从大量失败中吸取教训)。花时间阅读其他开发人员的代码,会让你受益良多。
我可以给你的最好建议是,不要为自己的无知而感到羞愧。这个行业规模巨大,语言数量众多,内容密集。学好编程需要大量的时间和精力,而熟练掌握编程所需的时间则更多。
原文:https://medium.com/better-programming/the-one-programming-language-to-rule-them-all-620366df2805
本文为 CSDN 翻译,转载请注明来源出处。
(更多精彩值得期待……)