认清Android框架 MVC,MVP和MVVM
编者按:现在很多时候,我们都是面向搜索(或 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的更多相关文章
- MVC MVP 和 MVVM的图示
一直对于这些什么MVC MVP 和 MVVM都是云里雾里的 完全分不清楚 感觉jq上也没怎么用过,理解也很片面,画几张图也许能够大体分清他们之间的区别. 1.MVC(Model-View-Contro ...
- [转载]Android MVC,MVP和MVVM 思想&例子
在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图 mvc mvp 可以看出,在 MV ...
- MVC, MVP, MVVM比较以及区别(上)
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- MVC, MVP, MVVM比较以及区别
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- MVC, MVP, MVVM比较以及区别(下)
上一篇得到大家的关注,非常感谢.一些朋友评论中,希望快点出下一篇.由于自己对于这些模式的理解也是有限,所以这一篇来得迟了一些.对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己 ...
- 选择恐惧症的福音!教你认清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 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- android MVC && MVP && MVVM分析和对比
相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...
- Android App的架构设计:从VM、MVC、MVP到MVVM
随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...
随机推荐
- 在AspNetCore 中 使用Redis实现分布式缓存 (转载)
文章概念描述 分布式缓存描述:分布式缓存重点是在分布式上,相信大家接触过的分布式有很多中,像分布式开发,分布式部署,分布式锁.事物.系统 等有很多.使我们对分布式本身就有一个很明确的认识,分布式就是有 ...
- kettle学习笔记(五)——kettle输出步骤
一.概述 数据库表: • 表输出 • 更新,删除,插入/更新 • 批量加载(mysql,oracle) • 数据同步 文件: • SQL 文件输出 • 文本文件输出 • XML 输出 • Excel ...
- 20155209 林虹宇 Exp 8 Web基础
Exp 8 Web基础 Web前端HTML 正常安装.启停Apache kali本机自带apache,上个实验已经使用过,直接使用 查看80端口. 127.0.0.1 编写一个含有表单的html 在浏 ...
- 20155325 Exp7 网络欺诈防范
实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof ...
- [CF1059E]Split the Tree[贪心+树上倍增]
题意 给定 \(n\) 个节点的树,点有点权 \(w\) ,划分成多条儿子到祖先的链,要求每条链点数不超过 \(L\) ,和不超过 \(S\),求最少划分成几条链. \(n\leq 10^5\) . ...
- R语言学习 第三篇:数据框
数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同.数据框的每列 ...
- SSIS 事件的向上传递
在SSIS中,Package是Task组件的有序组合,具有层次结构,Package处于层次结构的顶层(Root Level),对于父子包结构,父包(Parent Package)通过Execute P ...
- 13、通过Docker-compose快速搭建Wordpress
一.compose定义 以下定义摘自docker官网:https://docs.docker.com/compose/overview/ Compose is a tool for defining ...
- JNI探秘-----你不知道的FileInputStream的秘密
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 设计模式系列结束,迎来了LZ ...
- 修炼内功_day01
测试六段: 测试第一段: - 能根据测试用例的描述步骤来执行用例 - 能对照用例的预期结果发现产品的问题 - 能够清晰准确的将问题记录下来后反馈给开发, ...