作者 | Johnny

译者 | 香槟超新星,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

以下为译文:

每当我在reddit上浏览r/programming频道的时候,总会有程序员发帖子说:“我已经完成了Sololearn课程,通读了编程书籍,结束了CS课程。我现在甚至能听懂大部分关于编程的梗了。所以,我是不是已经足够优秀了?”。

通常情况下,当我看到这样的帖子,心里就会想“不,这还不够。你是否用代码思考?就像你用自己的母语一样?如果不是,那就去重读《像程序员一样思考》一书吧(Think Like a Programmer)。”

想要达到编程语言的流畅使用需要走过一段漫长的道路,而且这条道路没有终点,到最后你需要抛弃CS测验题,开发出自己的产品,然后(我知道你一直在等我说这个)找到一份工作。

如何摆脱编程初学者的不自信,成为一名专业人士?下面介绍一下我个人的学习历程,分步骤来。

第一步:自己选一门语言来完成一些基础项目

我很不愿意看到的一种情形是,很多学编程的同学在掌握了一门语言的一系列抽象概念后,在课余却完全不知道要用它来做什么。这也是为什么我一直孜孜不倦地强调简单项目的重要性——以下是我最喜欢的几个。

用你正在学习的语言创建一个井字棋游戏

就游戏本身而言,它虽然简单,但能极大地培养你对编程逻辑的把握能力。下面就给大家介绍一些基本的代码规则:

  1. 创建一个九宫格游戏区域

  2. 将X分配给玩家,将O分配给电脑

  3. 添加一个弹出窗口,询问玩家想把X放在哪里

  4. 在玩家放好一个X之后,计算机再放置一个O

  5. 确定获胜者

创建一个Hangman游戏(有或没有GUI都可以)

这个任务分为两部分,一是将游戏的底层逻辑翻译为代码,二是创建一个友好的用户界面,带给玩家愉快的游戏体验。首先,让我们先概述一下游戏的规则:

  1. 创建一个字母列表,每个包含5-6个字母,并让每次游戏都显示一个随机的条目

  2. 要求游戏参与者猜测所选单词的字母

  3. 如果玩家猜中了正确的字母,就用它来填上相应的空白。

  4. 如果玩家猜错了,让他知道在小人被吊死之前,自己还剩多少次尝试机会

在你的代码中实现了上述原则后,集中精力把最终产品打包起来。由于这次的编程重点不是创意,而是功能性,所以使用现成的GUI包是非常合适的。对于Java,通常我使用的是Swing——它能提供几十种可用的接口元素。

好好做功课

如果这些例子项目太过基础,那么网上还有很多例子可以帮助你磨练自己作为一名程序员的技艺。以下是编程学习者必备的平台:

Codegym是一个Java学习课程,能够提供几十种Java游戏,适合初级以及中级水平的学习者。

(地址:https://codegym.cc/?ref=hackernoon.com)

ZetCode上有一系列超棒的Java 2D游戏(你既可以直接查看很多现有项目的代码,也可以通过练习题获得一些实际的游戏开发经验)。

(地址:http://zetcode.com/?ref=hackernoon.com)

Codingame是我最喜欢的练习项目之一(有超过25种语言可供选择),因为它能教给新手开发者如何拥抱责任感。基本上来说,这个平台能让程序员从其他人上次结束的地方开始,为一个全球范围的游戏做贡献。

(地址:https://www.codingame.com/?ref=hackernoon.com)

第二步:使用代码挑战平台

想要确保自己能有信心在现实世界中运用一门编程语言,你需要在软件开发学习的最后阶段,尽可能地把精力都投入到编程实践中去。

幸好,网上有很多有用的资源,开发者们可以利用这些谜题和练习来挑战自己。以下是我最喜欢的几个:

1.CodeGym (Java)

我是一名Java讲师,也是Java爱好者,所以一讨论起新项目我就会特别兴奋。现在,CodeGym是我向学生首推的平台。首先,上面的资源明确具体地只针对Java——因此,开发团队对这门语言的认识一定非常深入。

除此之外,我发现CodeGym提供的学习曲线非常的有条理——所有的练习问题都是依据概念进行分组的。你可以找到几十个关于Java语法的题目,然后再进行集合、类型化、OOP和其他概念的练习。

练习题总共有1200多道——完成所有这些题目后,你就已经为求职面试做好了充足的准备。

2. Coderbyte(JS,Java,Python,Objective-C,Swift等)

Coderbyte能够提供10种以上的编程语言以供不同经验和技能水平的开发人员使用。根据你当前的能力高低,可以自由选择简单的任务(比如寻找字符串中最短的单词),也可以选择高级难题(比如图基数匹配类的题目)。

3. Codechef(支持35种编程语言:C,C++,Java,Python等等)

如果你想在学习过程中引入友好竞赛的经历,那就一定要试一试Codechef。这个平台会定期举办编程比赛,并提供Java,Python,C以及其他流行语言的各种题目。你可以使用编辑器内置的工具来编写和检查自己的代码(我个人认为,它的界面相当方便)。

4. LeetCode(C,C#,C++,Python,Ruby,Java以及JS)

如果你准备找一份程序员的工作,千万不要错过LeetCode。这个平台很强,可以让你在真实的环境中练习写代码,为公司面试做准备。

LeetCode支持七种编程语言——C,C#,C++,Python、Ruby、Java以及JS。你可以分别探索平台上的两种模式——按主题分组的题目模式,或“模拟面试”——在第二种模式下,你将接受各种代码问题的轰炸,而且还必须在有限的时间内回答。

5. Sphere Online Judge(超过45种编程语言,包括Haskell,Ocaml,以及那些小众的语言)

SPOJ是目前世界上最大的代码练习平台之一,有超过两万道编程题目。Sphere Online Judge也会定期举办黑客大会,让开发者们互相对峙,共同提高。

就我个人而言,我对SPOJ完全是朋辈之间的交流这一点有些意见,因为这意味着你看不到官方给出的练习题答案,而只能选择相信其他同伴开发者。

第3步:向朋辈寻求帮助

即使你已经能利落地解决编程题目,并且能很好地理解语言的理论了,也需要更进一步才能成为一名顶尖程序员。

长期沉浸在编程社区中,可以帮助你了解专业人士通常都面临着哪些挑战,当前哪些项目最受欢迎,以及了解一些行业内才能听懂的笑话等等。

这样一来,当你拿到第一份编程工作的时候,你就能够让办公室变得像自己的第二个家那么舒服了。

从哪里可以接触到程序员?我整理了一下自己常看的论坛和交流频道,希望能帮到你。

Reddit 频道

一般性的编程话题:

  • r/programming

  • r/learnprogramming

  • r/codetogether

  • r/programmingtools

  • r/gamedev

  • r/prograrticles

  • r/webdev

  • r/dailyprogrammer

编程语言:

  • Java: r/java, r/javahelp

  • JavaScript: r/javascript, r/LearnJavaScript

  • Swift: r/swift

  • Objective-C:r/objectivec

  • PHP: r/php

  • Python: r/python, r/learnpython

  • C#: r/csharp

  • C: r/c_programming

Slack频道

一般性的编程话题:

  • Hashtag Developers——Slack上最大的一个编程频道。

  • European Dev Explorer——为考虑移民去欧洲国家的开发者们提供帮助的频道,内容包括就业市场,生活成本,税收等。

  • Angular JS Chat——优秀的 Angular 开发者在此分享案例并回答代码问题。

  • DevOps Chat——这里是最极客的Slack社区之一,主要讨论的是有深度的DevOps概念。

编程语言:

  • #ruby

  • #php

  • #python

  • #node.js

  • #go

其他平台

以下是其他的著名论坛,不管是初学者和高级程序员通常都会在这些论坛上活动:

StackOverflow——这个平台在同辈论坛中占据着至高无上的地位。在这里,你可以得到理论问题的答案,也可以得到实用的建议,还可以得到别人对你的代码的反馈。

(地址:https://stackoverflow.com/?ref=hackernoon.com)

SitePoint——是一个在web开发者和设计师中间很受欢迎的论坛——除了能让你在开发方面更加熟练,在SitePoint上交流还有助于你理解其他部门的同事(UI/UX,营销部门等)。

(地址:https://www.sitepoint.com/?ref=hackernoon.com)

Hackers News——是黑客们的头号论坛,上面能发布行业内的最新新闻,回答其他人的问题,分享工作经验等等。

(地址:https://news.ycombinator.com/?ref=hackernoon.com)

第四步:在网上分享你的项目

要养成习惯,把自己完成的每个项目的代码和Readme文件都规范化,这样别人在阅读的时候就不会感到很费劲。如果你还没有GitHub账号,马上去注册一个吧(我个人的角度来看,Github项目数量的多少是区分编程初学者和专业人员的关键)。

如何确保你已经做好把项目分享给全世界的准备了?以下列了一些简短但有用的代码格式化检查项:

  1. 在 Readme 文件中详细描述项目,让别人了解这个项目的背景。

  2. 不要粘贴现成的StackOverflow或Github的代码片段。重写是可以的,但直接使用别人的代码就不行,因为那样你就无法详细解释代码的工作原理。

  3. 为对象和变量命名的时候勤快点。初学者常常会用“0hy1”这样奇怪的,只有自己才能看懂的名字来创建变量。这样的命名方式看起来可能会更快,然而,这会让你的代码变得非常不全面,而且从长远来看很难维护。

  4. 注意写注释,以确保别的程序员也能理解这个项目。因为到了某个时候,你会需要去公司里工作,所以写下注释来指导将来会接手此项目的同行,是必须要做的。所以说,你最好在初期就养成写注释的习惯,只公开分享注释过的代码。

  5. 对你的项目进行单元测试。每个人都明白单元测试是开发人员的分内之事,所以现在公司对求职者的预期已经包含这部分了。

  6. 在整个项目中坚持使用同一种代码结构和风格。

结论

正如你所见的那样,对语言的学习仅仅意味着编程之旅的开始。但好消息是,在这条路上无论等待着你的是什么,都将是有趣而又刺激的,因为你终于可以构建出一些实际的解决方案,找到一份有薪水的工作,并自豪地称自己为开发者了。

为了弥合学习和专业水准之间的鸿沟,你需要专注于用理论知识来解决实践问题,在网上创建以及分享你的项目,而且也不要忘了访问网上的开发者社区——Stack overflow,Reddit和Slack频道等。

原文:https://hackernoon.com/you-learned-a-programming-language-but-how-do-you-start-coding-80ab300w

作者简介:Johnny,高级Java开发,Learning Tree International编程课Java讲师。

本文为 CSDN 翻译,转载请注明来源出处。

【END】

更多精彩推荐
☞程序员之痛:六次创业五回失败了
☞研发的未来在哪里?Serverless 云开发来了!
☞张一鸣是如何练就字节跳动的
☞性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
☞DevOps 在移动应用程序开发中扮演什么角色?
☞稳定币经济:十大稳定币简史
你点的每个“在看”,我都认真当成了喜欢

如何摆脱初学者的不自信,成为一名专业编程人士?相关推荐

  1. 初学者怎样看懂python代码_入门编程(初学者怎样看懂代码)

    你既然喜欢编程,就应该认认真真的学习一门语言,学习微软的就先从vb开始,vb是比较好的入门语言,可视化的,比较简单,是非常好的入门语言.书籍最少应该准备两. 先认认真真的学习一门语言,学习微软的就先从 ...

  2. 初学者,你应当如何学习C++以及编程-转

    Javascript是世界上最受误解的语言,其实C++何尝不是.坊间流传的错误的C++学习方法一抓就是一大把.我自己在学习C++的过程中也走了许多弯路,浪费了不少时间. 为什么会存在这么多错误认识?原 ...

  3. 初学者去哪学计算机,零基础学习编程从哪学起

    很多的朋友想转行学习编程,但是零基础又不知道如何学起,今天小编就整理了些关于编程入门学习的内容,下面就分析给大家做一下参考! 编程入门先学习什么 编程入门先学C语言或者python. 为了解决使用机器 ...

  4. Django Python:完整的BUNDLE + Django真实项目2021

    Django和python Bundle:从学习python的所有基础知识到高级python再到UI设计TKINTER,然后是Django 你会学到: 学习编程的基础知识 学习Python编程语言 学 ...

  5. Servlet 工作原理解析

    2019独角兽企业重金招聘Python工程师标准>>> 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servle ...

  6. python程序设计 清华大学出版社 pdf下载-清华大学出版社-图书详情-《Python程序设计》...

    前 言 Python是一种解释型的.面向对象的.带有动态语义的高级编程语言.它由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年.经过二十多年的发展,Pytho ...

  7. java会被rust替代吗_自从尝了 Rust,Java 突然不香了

    Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全.而且,Rust 还能在无需使 ...

  8. Java脑洞程序编写怎么写,脑洞丨自从尝了Rust,Java突然不香了

    原标题:脑洞丨自从尝了Rust,Java突然不香了 作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅 Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C ...

  9. C++和Rust_自从尝了 Rust,Java 突然不香了

    作者 | Sayan Dey策划 | 李冬梅 相对而言,Rust 是软件行业中比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功 ...

最新文章

  1. 深入浅出Yolo系列之Yolov3Yolov4Yolov5核心基础知识完整讲解
  2. python基础笔记_python基础学习笔记(九)
  3. java虚拟机调优_Java虚拟机中JVM参数调优及其有用的命令
  4. Sharepoin学习笔记—架构系列--03 Sharepoint的处理(Process)与执行模型(Trust Model) 2
  5. 【前台技术】-播放音频
  6. UWB定位系统中为何要加入陀螺仪
  7. 重装系统后安装并激活Office
  8. Kaggle Titanic 数据分析
  9. dcos marathon - 容器的存储
  10. 13.56Mhz下50欧姆阻抗匹配简易教程
  11. PHP 文字生成透明图片
  12. DDL和DML的含义
  13. ADE-Tran-Dynamic parameter
  14. 使用VPS时的注意事项
  15. Vue.js 教程---菜鸟教程
  16. IoT黑板报:树莓派Zero W发布 配有Wi-Fi和蓝牙售价10美元
  17. 3U VPX接口卡学习资料:基于FMC接口的Kintex-7 XC7K325T PCIeX8 3U VPX接口卡288
  18. %f %.2f %lf %.2lf的含义
  19. matlab第六讲考试答案,社会实践 | 数学建模培训第六讲
  20. 计算机spec分值怎么算,计算机性能测试.pdf

热门文章

  1. Angular 5和ASP.NET Core入门
  2. 201521123061 《Java程序设计》第七周学习总结
  3. HTML/CSS基础知识总结
  4. 拖拽之路(一):自定义QListWidget实现美观的拖拽样式(拖拽即选中)
  5. 2021显著目标检测(SOD)方向部分论文汇总
  6. java9 变化_Java 9 ← 2017,2019 → Java 13,来看看Java两年来的变化
  7. linux 开机 找不到 文件系统 下载文件系统就好了,开机启动找不到文件系统的修复步骤...
  8. 力扣--36有效的数独
  9. python ^ 与 - +是有运算的先后顺序的
  10. 如何让地面不起灰_地面不平能铺地板吗?木地板不平怎么修复