零基础如何自学编程？
如果你正在自学编程和代码，并苦于没有优质资源，那么我就找对了地方。  接下来给你介绍21个免费学习写代码的网站，在办公室里或在家里即可轻松学编程。  编程初学者必必必必必必！看！  精选21个有关代码、编程、Java、Python、SQL、Git、和Ruby on Rails学习的网站。这些网站为以下内容的学习提供了免费的优质资源：编程语言（Python和Java等) 、常用技术（SQL等)、操作系统（Linux等）、Web开发框架（Ruby on Rails等）、函数式编程语言（Haskel等）和构建网站等其它课程。  传送门：https://www.freecodecamp.org/  这是最棒的社区网站之一，由Quincy Larson创建，在该网站可以免费学习写代码、进行实战训练并有机会找到一份开发人员的工作。  网站上有大量JavaScript、数据结构和算法以及前端开发等交互式教程和练习。  新手们可以在此开启精彩的编程之旅。此外，该网站甚至在脸书上拥有一个庞大的群组（freecodecampearth)，供新手提问并分享学习经验。  传送门：http://www.coursera.org 这是一个很棒的在线学习网站，由斯坦福教授Andrew Ng和DaphneKoller创建，提供课程学习、专业学习和网络课程学位。Coursera最好的地方在于其提供来自斯坦福大学、伦敦大学、密歇根大学、科罗拉多大学、伦敦帝国理工学位等多所大学的在线课程。 它提供免费和付费的在线课程和专业。我最喜欢Coursera上的一些免费编程课程是:  （1）RobertSedgewick“算法I和算法II”  传送门：http://bit.ly/algorithms-part1  （2）Andrew Ng “机器学习”  传送门：https://www.coursera.org/learn/machine-learning?ranMID=40328&ranEAID=JVFxdTr9V80&ranSiteID=JVFxdTr9V80-j4CgBJn3pMyyWE9z_ko8Tg&siteID=JVFxdTr9V80-j4CgBJn3pMyyWE9z_ko8Tg&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=JVFxdTr9V80#enroll  （3）零基础Python入门专项课程  传送门：https://www.coursera.org/specializations/python?ranMID=40328&ranEAID=JVFxdTr9V80&ranSiteID=JVFxdTr9V80-iGW8bMtocjNJzvbVmtl_Hw&siteID=JVFxdTr9V80-iGW8bMtocjNJzvbVmtl_Hw&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=JVFxdTr9V80 Coursera还提供付费的课程认证，可用于领英个人资料展示。 传送门：https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&offerid=323058.9409&type=3&subid=0 这是在线学习的最佳场所之一，在该网站可获得所有有关最新技术和编程语言的在线课程，如Java、Spring、数据结构和算法、Selenium、REST等课程。它提供免费和付费资源。 以下是一些可以学习有趣技术的免费课程：  （1）零基础Java教程  传送门：http://bit.ly/2zO3AHT  （2）高级数据结构轻松学  传送门：http://bit.ly/introduction-to-data-structures  （3）Python 编程入门  传送门：http://bit.ly/2D5vvnV  （4）高级和面向对象的JavaScript和ES6  传送门：http://bit.ly/2Dk46PJ 网站上的付费资源也很便宜，限时抢购常有发生，只需9.99美元即可购买到课程。网站上名师云集，拥有Colt Steele、Rob Percival、Stephen Grider、Josh Portilla和John Purcell等名师。  传送门：http://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Flearn  这是学习任何技术或IT课程的最佳网站之一，可以在上面学习如Java编程语言，Spring framework Web开发框架Java编程语言、Spring framework和Hibernate等Web开发框架等课程。 该网站还收购了CodeSchool网站的课程，可以通过实战的方式学习web技术。使用该网站很快就能学到很多很酷的东西。  传送门：http://try.github.io/  一个很棒的网站，学习Git只需15分钟。这个网站最好的地方是它是一个元网站，这意味着它包含了一些最有用的在线学习Git的资源网站，比如LearnGit branching网站，在web浏览器上就能学到Git命令。  新手不仅会学习基本git命令，还会了解到一些具有挑战性的git概念，如分支、合并、撤销、择优挑选,变基等概念。  VisualizingGit（传送门：http://git-school.github.io/visualizing-git/）是另一个很棒的资源, 新手可在自由探索模式和一些构造场景下，学习git命令如何在web浏览器上影响存储库的结构。   传送门：https://mbsy.co/sFqPc  通过这个网站，可以在一个月内学会写代码并搭建web应用程序。该网站并非完全免费，你需要买一个类似训练营的课程。  该网站有30天学习Python、Ruby和JavaScript的课程，而且训练营的教学方式非常有效。  另外，该网站提供免费试用的机会并开设《命令行》之类的课程。同时，网站上还将推出《一个月内免费学写代码》的播客。   传送门：http://codecademy.com/  该网站提供交互式教程，免费学习JavaScript、Java和Linux等最流行的技术。同时还提供一些付费课程，来学习Python、Java和JavaScript等高级概念。  此外，该网站是将交互式学习与图片结合的开创者之一，而且它的JavaScript课程也许是最受欢迎的在线课程。   传送门：http://codingbat.com/  这是另一个学习编程的好网站，包含了许多免费的编程练习，可以用Python和Java来建立对编程的感觉。  传送门：http://code.org/  学习编程和计算机科学基础知识的绝佳网站。孩子们可以在该网站上通过玩Minecrat游戏来学习编程。   传送门：https://code4startup.com/?ref=javinpaul  这是一个由Leo Trieu创建的很棒的网站，可以通过搭建真实公司的网页和实战项目来学习如何写代码。  该网站是从零开始学习Web开发的最佳场所之一，可在3个月内学习搭建像Airbnb、优步等4家真实的企业网页，且不需要经验。  网站上还有许多免费课程，如下：  （1）菜鸟如何一小时搞定ReactJS  传送门：https://code4startup.com/projects/reactjs-for-newbies?ref=javinpaul  （2）学习Rubyon Rails、Heroku和Wistia APIs  传送门：https://code4startup.com/projects/hero-learn-ruby-on-rails-and-wistia-apis-by-cloning-code4startup-version-newbies?ref=javinpaul   传送门：https://www.codeabbey.com/  这是一个有很多编程练习的很棒的网站，可以学习写代码，并提高你在任一编程语言中的编程技能。   传送门：http://sqlzoo.net/  毫无疑问，对于任何IT专业人士来说，SQL都是必备技能之一。但是不幸的是，很少有网站或免费课程提供SQL课程。  该网站是初学者学习SQL或已有基础的人提高SQL查询技巧的最好的地方之一。  网站提供了配有练习的交互式SQL教程，非常适合提高SQL查询技巧。   传送门：http://gitimmersion.com/index.html  这是学习Git和GitHub的最佳网站之一。Git是当今程序员必备的技能之一，通过该网站的学习，能一览Git的基本原理。该网站的灵感来自于这样一句话：实践出真知。  这是学习Git最好的课程之一，由已故的重量级程序员Jim Weirich编写。  如果在.bashrc 和.gitconfig中配置别名，则该课程可以大大提高工作效率。   传送门：https://learngitbranching.js.org/  分支和合并是任何源代码控制工具（如SVN、CVS）都难以掌握的概念之一,在Git中也曾如此，但现在通过该网站并没那么难以掌握。这个交互型网站将以与众不同的方式提供git合并和分支的课程。  该网站是在网上学习Git最直观、最具互动性的方式之一，根据逐步演示的强大功能，提供了许多针对不同水平具有挑战性的练习，还能在学习过程中带来不少的乐趣。   该网站可通过玩游戏，学习如何用Python和Javascript写代码，这是最具互动性和最有乐趣的在线学习方式之一。  传送门：http://tryhaskell.org/  通过免费的互动课程学习Haskell。  通过观看视频和完成练习来学习Ruby on Rails。该网站现在已与Pluarlsight网站合并。   这是一个与众不同的网站，你可以在其中选择课程，并获得导师指导。   通过该网站的交互性材料，可以在浏览器中发现Ruby的习惯用法。该网站为初级、中级和专业Ruby开发人员提供了进一步提高Ruby编程语言的机会。   这是另一个在线学习Ruby的好网站。现在该网站也与Pluarlsight合并，只有注册了会员才能获取课程资源。   传送门：http://learnpython.org/  这是学习Python基础知识的好网站，Python是近十年来最受欢迎的编程语言之一，无论是在简单的自动化工具还是在开发网站上，都可以用Python进行许多操作。现在Python可用于机器学习和数据科学。 接下来，针对你另一个问题。 开发人员拥有广泛的技能，资历往往不能决定一个人的能力。 拥有5年、10年甚至15年的“工作经验”的并不一定是一个有能力的高级开发者，甚至称不上高级开发者。在成功的高级开发者中肯定会有一些不太好的代表——但在高级开发者的梯队中，有一些特征和知识是共享的。  这不是一个商业秘密，而是一种可以开发知识点和思维方式的办法。认真学习，努力做到以下几点，才够格迈向一名高级开发者，   SOLID、面向对象和函数式编程三种编程范式形成了大部分代码创建的思维模式。  许多初级开发者在编写代码过程中忽略了编程是一种语言，也就是说其超越语法规则。编程是一种通信工具，可以多种方式构成，且编程范式有助于在代码通信方式上创建一个特定立场。  任何人都可以编写代码，就像任何人都可以在亚马逊上写文本邮件或简短的书评一样。但这种编写和斯蒂芬·金的小说并不相同。编程范式作为高级开发人员代码的指导力量，正如情节结构对于小说家的作用。所有语言都是由公式组成的，高级开发人员能通过内在化的水平进行理解，这是许多初级和中级开发人员还未体验过的。   当开始使用for循环语句和if else语句时，会通过复制和粘贴代码来找到答案。如何理解区别于新初级开发者和低水平中级开发者的技能不同。  然而，高级开发者会更进一步。在没有谷歌强大的知识库帮助下，他们会在沙箱中创建类似于mini-gods的功能。高级开发者清楚自己正在做什么，明白行为会意味着什么，也见证或至少预测出突发事件，知道如何完善代码中的漏洞。  对于高级开发者来说，如果知识水平有差距，则会看得更远，而不仅仅是表面。对工具箱中的所有内容都会有更深的理解，属于代码的世界也是不同的。   每个人对此都有偏见。初级和中级开发者会根据个人经验而不是与代码相关的论证来表现各自的极端偏见。个人偏好、风格、命名惯例和思维方式是可能遇到的任何建议或评价的核心。  这并没有错，因为这是成长过程的一部分。真正的客观性是在有一系列足够的相反经验给开发者提供一个中心效果时得到的。没有正确的编码方法，只有基于不同情况下的有效方式。高级开发者明白并承认其代码并非最佳，还有改进的空间。  高级开发者往往是有能力的代码看守者，标注同辈造成的麻烦和结构中的薄弱部分。能够退一步看到未来可能发生的更大情况，根据最意想不到的负面影响做出选择，并且不受任何一种代码风格或范式的约束，而是侧重于解决方案而不是工具。   开发者编写运行代码。一部分人会终止于编写运行的代码这一步。另一些人则会更进一步，想办法收拾残局。最好的资深开发者是在编写代码时不断进行编辑和重写——因为他们知道好的软件和工作软件之间的区别，会接受出现的问题和失败，并且尽快改进。  大多数老板只关注软件是否正常工作，但是好的高级开发者知道得更多。他们了解技术债和代码异味的隐藏成本，懂得如何平衡工作软件和好的软件之间的需求——在项目按时交付和扩展协商中维持平衡点。  知识的广度和对结构和语言的理解使其成为区分好的软件和工作软件的专家——以及如何创建两者——并且有能力在情况需要时提出创造性的解决方案。    真正的高级开发者会有一定的热情，这激发了在该领域里经验较少的同辈，帮助打磨下一代。    编程本身就是想法的集合，高级开发者有能力将这些想法转换为简洁易懂的东西。在不同接口和媒介间进行通信和翻译代码的能力表明了对其选择的语言的真正掌握度。  成为一名教师需要一定的熟练程度。虽然“经验”可能通过简历上的项目和在不同公司的工作时长的形式展现，但教学是一种技能，只有真正了解自身行业的人才能掌握。  真正的高级开发者具有多方面技能，有时在主要工具包领域外用语言伪装成初级或中级开发者，但在编程哲学上有很强的基础。  然而，上述特征体现在个性和知识的深度，会比一般程序员更快熟知未知的代码领域。这些人往往是考虑大局的人，以明智心理看待代码。  在不形成破坏导向力的情况下，会提倡并引导同辈养成干净的代码习惯，正确看待他人错误，并坦然接受个人错误——旨在教育和学习，而不是摧毁自我。  以上，希望你能够在开发人员这条路上遇走越宽～ 留言 点赞 关注 我们一起分享AI学习与发展的干货 欢迎关注全平台AI垂类自媒体 “读芯术”