编者按:现在很多时候,我们都是面向搜索(或 Google 或百度)、GitHub 编程,那么,在早期没有互联网的情况下,该如何学习编程,成为一名真正的开发者?亦或是作为一名小白,如何进入互联网编程时代?本文作者分享自己从 0 到 1 的编程成长经历,希望帮助更多的开发者踏出职业生涯的第一步。
  
  640?wx_fmt=png&wxfrom=5&wx_lazy=1
  
  我从 11 岁开始就梦想成为一名黑客,一名真正的黑客,但那时我并没有非常高端的电脑,也没有电影里面出现的那种非常炫酷的双显示屏,甚至没有网络。我的电脑配置仅仅是一个普通的 Core 2 Duo 处理器以及 2 GB 内存,但这并不阻碍我想要成为一名黑客。当时家里有几本关于编程和计算机的书籍,但我几乎翻都没翻。因为我想成为一名黑客,而不是只会敲代码的程序员。
  
  我的黑客之旅启蒙于一本非常糟糕的书。如今你想学习黑客技术,大家通常会推荐《黑客之道-漏洞利用的艺术》(https://en.wikipedia.org/wiki/Hacking:_The_Art_of_Exploitation) 这类的黑客书籍。而我那个时候完全是孤身一人,没有黑客朋友也没有互联网。然而,我通读了整本书,做完了书中的每一个练习,于是我自认为自己对基本的黑客技术了如指掌,但遗憾的是我并没有攻克五角大楼。我甚至错误地认为黑客是无所不能的,应该能够独立开发出不仅功能强大而且外观漂亮的软件,目前看来,我真的太傻了。
  
  那么读了这样一本糟糕的书,我有什么收获呢?在没有互联网和线上资源的情况下,它给我让我对计算机有了一个宏观的理解,基于这样粗略的理解实际上我无法做任何事情。只是让我觉得编程不再那么神秘,这些计算机书籍也不再那么令人生畏。
  
  后来再一次,依然没有任何老师和指导的情况下,我拿起一本书继续学习。这一次并不像我想的那么糟糕,学习效果不错。之后我读了更多的书,整夜整夜地学习 C++,一年之后我可以用 C++ 编写出相对不错的程序。接着我又学习了 C#,因为我想开发桌面应用程序。自此我喜欢上了编程,喜欢做一名程序员。
  
  不过需要注意的是,编程需要耗费大量的时间,当你开始创建真正的应用程序时更是如此。那么在没有互联网和老师的指导、只有一台性能很差的电脑的情况下,如何学习编程呢?
  
  方法其实很简单,真的。
  
  选择一门编程语言
  
  每个编程语言都有它自己的优点。选择一个并坚持下去,不断学习直到你真正掌握这门编程语言的精髓。新手常见的错误是,他们总是试图学习尽可能多的编程语言。实际上数量一多久容易导致混乱,缺乏关注度会让自己分心,最后无奈放弃。以下是经常使用的编程语言的简短列表分类:
  
  JavaScript、HTML、CSS 和 PHP —— 用于 Web 开发;
  
  C#、C ++、JAVA、Python —— 用于桌面和移动开发;
  
  C、C ++ 和 Rust —— 用于底层开发;
  
  Swift 和 Objective-C —— 用于 iOS 开发。
  
  0?wx_fmt=jpeg
  
  在过去 20 年的任何一个操作系统上,只要你安装一个浏览器,就可以使用 JavaScript 做做客户端的开发了。如果你在线购买了 Ubuntu 操作系统光盘,或者加入了本地 Linux 用户组,那么它们已经为你安装好了 Python,你可以轻松开始 Python 的开发。
  
  你可以安装一个 C/C++ 开发环境进行 C/C++ 的编程,比如 Dev-C++(http://www.bloodshed.net/devcpp.html)(虽然它已经相当古老了),你可以用库的形式管理。在没有互联网连接的情况下获得其他开发环境可能会困难得多。
  
  你可以将 Python 文档(https://docs.python.org/3.5/download.html)下载到本地离线查看。为 C# 安装 monodoc(http://www.mono-project.com/docs/tools+libraries/tools/monodoc/),但这需要你获取一些未默认安装的软件包。至于 Linux 上的 C 语言编程,可以参考manpages(http://www.mono-project.com/docs/tools+libraries/tools/monodoc/),虽然手册的导航功能做的一般。
  
  边学边做
  
  阅读太多的教程和书籍除了让你感到枯燥乏味之外,对你编程技能的提升效果并不好。
  
  提升编程技能最好的方法是探索,实践和创新。当我转到 C# 时,我就没有借助书籍和教程。学成编程最美好的体验就是动手写代码。如果你选择创造而不是模仿,那么你可以学到很多东西。但是大多数开发人员都是从教程开始,然后阅读几本书,以两年的时间都不会自己动手去写任何应用程序或软件,最终他们都放弃了。你需要给自己动力,动力的最好来源就是动手写代码。
  
  不要盲目追求独一无二的应用程序
  
  当我在开发 Macalifa(现在被称为Bread Player)(https://www.microsoft.com/en-us/store/p/bread-player/9nblggh42srx)时,我的朋友和家人经常问我最近有没有开发一些新的、独一无二的东西。事实上我并没有开发那种独一无二的应用程序。客观来说,几乎所有你能想到的应用程序市面上都已经有了,你需要做的是创造更好的应用程序,而不是独一无二的应用程序。如果你追逐唯一性,那么你可能永远都无法完成一个应用程序。相反,我们应当创建一个对用户有益的应用程序,或者比当前市面上体验更好的应用程序。
  
  幸运的是,这解决了没有网络连接的问题。没有网络连接,你无法下载程序。这意味着你的程序与别人的程序是重复的也影响不大 —— 因为你不能得到你正在复制的其他程序,你创建了一些能够解决你的部分问题的东西。
  
  拥抱开源
  
  说实话这需要互联网,但不要忽视这一点,它将在未来有用。
  
  当我开始开发真正的应用程序时,起初没有想过开源将会如此重要,但是在我将 Bread Player 开源之后不久,我逐渐意识到了开源的威力。你不需要开源一个 Linux 级别的项目,任何一个项目,不管多小都是可以的。
  
  一开始,每个人都想快速简单地赚钱,但恕我直言,早期没有人知道你,也没有人会关心你在做什么。积极投身 GitHub(https://github.com/theweavrs/)、Bitbucket(https://bitbucket.org/) 或任何其他 Git 源码网站,以便人们知道你的存在。这比建立一个网站好,因为它完全免费并且不需要很多时间来维护。
  
  开源是一个社区,所以你可以结识优秀的人,也许可以吸引一些贡献者来参与你的项目,如果你够幸运,甚至有人会聘用你。事实上,开源是最大的开发者社区,如果你愿意,你可以学到很多东西。
  
  0?wx_fmt=jpeg
  
  参与多个项目
  
  我曾经在一个项目上持续了 3 年多,这非常不容易。当你一直投身一个项目且开发工作很饱和时,有时候你会对这个项目感到厌倦。相反,如果同时开发多个项目这有助于保持开发热情,如果你厌倦了其中一个项目,可以转到其他项目。这样,你将永远在前进,能够持续开发应用程序。
  
  然而,同时进行多个项目最大的好处是你的成长速度很快。你有多种观点,多种思路、多种方式来解决问题,最主要的是能够获得很多动力。目前我在同时开发超过 5 个应用程序,为了让用户收益,近期我可能就会发布一个。
  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container"
android:orientation="vertical"
tools:context=".ui.view.MainActivity"
android:fitsSystemWindows="true">

<Button
android:text="get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="get"/>

<Button
android:text="change"
android:www.ccyl178.com/ layout_width="match_parent"
android:www.yitiali.com layout_height="wrap_content"
android:onClick="change"/>

<TextView
android:id="@+id/top_contributor"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:www.2018yulpt.com textSize="30sp"/>

  按自己的思路进行编程
  
  优秀的开发人员用编程来思考和表达。如果你告诉我一个想法,我不会认为这是一个想法,而是将它开发成一个应用程序。一旦你做到用代码思考,用代码说话,那么你就是一名真正的开发者了。
  
  总结
  
  学习编程并不依赖于互联网、指导或者书籍。不要找借口,不要犹豫不决,行动起来!我并不是现代程序员的典范,所以我的建议你可以借鉴,但是自己也需要进行尝试,从错误中学习。记住:这个世界并不需要你,但你可以让它需要你。今天开始行动,明天才会成功。

认清Android框架 MVC,MVP和MVVM的更多相关文章

  1. MVC MVP 和 MVVM的图示

    一直对于这些什么MVC MVP 和 MVVM都是云里雾里的 完全分不清楚 感觉jq上也没怎么用过,理解也很片面,画几张图也许能够大体分清他们之间的区别. 1.MVC(Model-View-Contro ...

  2. [转载]Android MVC,MVP和MVVM 思想&例子

    在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图   mvc mvp 可以看出,在 MV ...

  3. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  4. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  5. MVC, MVP, MVVM比较以及区别(下)

    上一篇得到大家的关注,非常感谢.一些朋友评论中,希望快点出下一篇.由于自己对于这些模式的理解也是有限,所以这一篇来得迟了一些.对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己 ...

  6. 选择恐惧症的福音!教你认清MVC,MVP和MVVM(转:示例挺好,不太赞同画图)

    转自:http://zjutkz.net/2016/04/13/%E9%80%89%E6%8B%A9%E6%81%90%E6%83%A7%E7%97%87%E7%9A%84%E7%A6%8F%E9%9 ...

  7. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  8. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  9. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

随机推荐

  1. 一键安装Docker图形化管理界面-Shipyard

    Shipyard是一款开源的图形化的Docker管理工具,记得以前安装很麻烦的,现在官方有了自动安装脚本,使用非常方便.复制.粘贴.使用,就这么简单.先不研究他是如何实现的,安装使用起来再说. $ c ...

  2. C/C++函数调用方式

    __cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以 ...

  3. 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒

    2017-2018-1 20155202 张旭 嵌入式C语言--时钟提取时分秒 任务要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案, ...

  4. 20155209 林虹宇 Exp9 Web安全基础

    Exp9 Web安全基础 XSS 1.Phishing with XSS 跨站脚本攻击,在表单中输入超文本代码 在网页中形成一个自制的登陆表单,然后将结果反馈到自己的主机上. 攻击成功 2.Store ...

  5. 20155301 Exp6 信息搜集与漏洞扫描

    20155301 Exp6 信息搜集与漏洞扫描 实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 (4 ...

  6. java 锁白话

    一.锁 1.可见性: 定义:数据对所有线程可见 原因:cpu操作数据时会把数据读取到内存中去,可以理解为值做了备份,但是备份数据和原始数据在后续操作中不一定一致 实现:java使用volite关键字来 ...

  7. mfc 线程的诞生和死亡

    知识点:  线程概念  线程的诞生  线程的死亡 一. 线程: 线程,是程序执行流的最小单元. 另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...

  8. mfc 类型间的强制转换

    一. static_cast运算符 用法:static_cast < type-id > ( expression ) 该运算符把expression 转换为type-id类型,但没有运行 ...

  9. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  10. 蓝牙inquiry流程之Inquiry Complete处理

    inquiry流程一般持续有12s多,当inquiry完成的时候,设备端会上报一个Event: Inquiry Complete 上来,那协议栈是如何把这个事件上传到应用层的呢?本篇文章来分析一下其具 ...