后端。看不见的真相,未透露的故事。在过去,知道PHP足以自称为后端开发者,然后微软引入了ASP.NET。这两个就开始打架,直到Node.js冒出来把东西整理得井然有序。一些事件驱动开发的概念在Node.js上得到了最好的应用,所以如果你选择这个的话,你就是帮了你的项目大忙了。

后端令人困惑的一部分是语言的多样性,在后端你可以采用任何想要的语言,关键是,“后端”其实是“查询数据库、处理书、对客户端进行响应并且尽可能高效执行”的简称。,而选择“合适”的语言/技术/数据库并非选项。尽管一些开发者钟情MySQL或者PostgreSQL这类的关系数据库,但新进入者却选择黑暗面,NoSQL(比如Cassandra 或者MongoDB)。这个选择完全是个人的,但是我有一个简单的方程式。你有没有给你的数据制订严格的计划并且在不远的将来它都不会有太大的变化?如果是的话选择关系式数据库。你是不是每分钟的访问量超过了100万次?那就选NoSQL(很痛苦)。你的产品是不是频繁变更?那就选NoSQL。现在,假设你选好数据库,但是你又打算具体选择什么样的技术呢?你喜欢微软吗?有Windows Server吗?那就选MsSQL。你喜欢Oracle?那就选Oracle。你对Oracle没意见,但是很讨厌微软?选MySQL。你只是不想伤害任何人?那就选PostgreSQL吧。

NoSQL这玩意儿其实挺棘手的。这东西要取决于你的服务和数据架构。你得到的只是文档以及其中的一些弱连接?选MongoDB。你需要存储一大堆的键值对?选Redis。你正致力于类似图的结构(Facebook的朋友图谱,Google的知识图谱等)?选择Neo4j。其实你也不确定自己究竟想要什么,但是觉得这些全都需要?选ArangoDB吧。

数据库保存了所有的必要数据,但是你得客户端要想读/写该数据库却要你定义一个API。这里最有用的选项是Node.js,尽管你也可以用PHP或者ASP.NET、Ruby、Python,但我的个人推荐还是Node.js。好吧,Facebook后端用的是PHP,算是吧。他们用C++重写了PHP的很大一部分。一些人用Python而有的则喜欢用Ruby。诚然,你几乎可以用任何一种语言写后端,比方说Google用的是C++、Java和Python(以及Go)。对于底层的数据处理,C++是最合适的,对于像更新用户朋友推荐这样的后台任务,Java是一个好的选项。对于数据分析或者自然语言处理或者目前红得发紫额AI相关任务,你极有可能用的是Python。

再次地,后端除了各种语言、框架、数据库以外,你还需要掌握一些核心概念。

  • 缓存(Caching)。从CPU缓存(有不同的级别)开始,到浏览器缓存结束,缓存无所不在。对于像Google Search或者Facebook这样的高负载服务来说,缓存是极其必要的。

  • 服务器(Server)。你可能会认为这个跟硬件有关(如果你懂得如何设置几台服务器让它们成为一个整体去存储和处理数据的话当然很棒),不过对于后端开发者来说服务器意味着web服务器。当今流行的web服务器是Nginx,知道如何安装和配置这个玩意儿的话会对你今后大有裨益。

  • 套接字(Sockets)。套接字是网络编程的基石。你通过网络发送/接收所有东西都是通过套接字进行的。了解套接字编程的底层细节对于你的技能军火库来说是非常有用的补充(知道TCP套接字、UDP套接字之间的区别,以及什么是WebSockets更是锦上添花)。

  • 数据库设计。不管你选择了什么样的DBMS,对数据进行操作都会是你的主要任务之一。看清数据全貌,对数据进行可视化,并且将数据单元连接起来,这是你在编程生涯中需要掌握的一项技能。

  • 安全。就像前面提到的其他概念一样,这个概念也非常宽泛。你无法彻底掌握其中的任何一种,所以至少你应该熟悉一些最佳实践,比如存储面哈希值而不是明文。通过API令牌检查请求,要对每一项请求验证用户许可等等。

桌面

我们会讨论桌面应用中令其成为桌面应用的那部分内容。在桌面平台上需要特殊技能组合的应用数不胜数,比方说,Photoshop处理的是图像,如果你想写类似Photoshop这样的东西的话,了解图像处理算法和技术就是必须。如果你想写类似Dropbox这样的东西,了解套接字编程就是必须。如果你想编写编译器或者类似Visual Studio这样的IDE,则知道如何设计编译器就是必须。具体细节这里就不谈了,我们就先探讨一下如果要做桌面平台的东西的话,你最有可能会用到的语言吧。

说到桌面应用的语言,开发者得在C++、Java或者C#之中做出艰难选择。不过这里有一个简单的公式帮你做出正确选择:如果你喜欢微软,用C#。如果你喜欢Oracle,用Java。如果你认为语言不应该从属于从何一家公司,用C++。如果这个的帮助作用不大,我们就讨论一下具体的子平台。如果你编写的软件只是给Windows用户用的,C#是最佳选择。理由很显然,这两个都是微软的产品,自然也会是最佳拍档。尽管C#的开发者坚称在发布了.Net Core之后,其实C#也可以用于Linux环境,但我个人建议是如果你也想覆盖Linux的话,那就用C++。其关键是,C++本身就是作为跨平台编程语言开发出来的,在所有操作系统中都表现得很好(是的,甚至在MacOS上)。在这个上下文中跨平台会假设你要把你的C++项目在各个操作系统中都要独立地进行编译,从而在具体的OS中交付“不同”的应用可执行文件。还有,说实话C++缺乏任何的GUI。实际上,这一点最大的借口可以说“C++是给铁杆开发者准备的,而铁杆开发者除了Terminal(命令行接口)以外什么都不用。”然而,一群很友好的开发者聚到一起开发出了Qt,这是完美适配C++的跨平台GUI库。

最后,如果你对C++的复杂性以及你得连接像Qt这样的独立库用户才能拥有完整的GUI体验感到愤怒,并且你讨厌要为不同的OS给你的产品编译和交付不同的可执行文件的话,那就用Java。Java有一个虚机,所以交付可执行文件很容易。你的应用在任何安装了JVM(Java虚拟机器)的OS都能工作得一样好。

移动

说到Java,第一个想到的东西就是Android。在Kotlin被引进之前很久时,Java是实现Android app事实上的标准语言。而在今天,Kotlin俘获了开发者的心,使得Android平台的应用开发体验变得更好。所以,如果你想要制作Android app的话,你应该在Java和Kotlin之间进行选择。为了做出正确的选择,我们应该看看幕后的东西。关键是,Google对Oracle不太感冒。Java是Oracle的,而Java统治着Google的Android,所以为了让自己有点灵活性,Google在明面上必须引入一个选项(或者在暗面上,这取决于你),而引入Kotlin的目的就是“哇哦,如果有这么个好东西的话为什么要用Java呢。”如果你刚开始你的Android开发者生涯的话,我个人建议你从Kotlin开始,尽管要想在市场上成为一名胜任的开发者,你必须支持此前已经用Java实现的app,所以,知道Java的话对你的简历会是个加分项。

最后是iOS。iLand完全是另一个故事。很长一段时间以来,Objective-C是iOS的统治性语言,而且说实话,掌握Objective-C需要非常认真,要有一些好耐性。这也是look开发者数量相对较少的主要原因之一,所以苹果最终做出了正确的选择,引入了Swift。Swift掌握起来要比Objective-C容易多了,这使得iOS的开发者数量出现了增加。所以,要想成为一名iOS开发者,你需要跟进Swift,但要想成为一名真正自信的开发者,建议你掌握Objective-C,从而为app(无数app都是用Objective-C写的)提供支持。

这里我还必须提一提React Native,因为它允许你只用JavaScript编写同时支持Android和iOS平台的app,然而,作为这个市场一个新的变化节奏很快的玩家,我们知道有这么一个东西,而如果你只知道JavaScript的话自己就能写简单的app了。

准备编码面试

在编程世界有些概念是基础。大多数技术面试的目的都是为了发现你的问题解决技能以及看看你是否了解那些概念,所以除了掌握一门编程语言之外,你应该熟悉一些在程序员军火库中必须的一些概念。

要想为编码面试做好成功准备,你应该对以下领域有自信:

  1. 算法与数据结构

  2. 计算机组织&操作系统

  3. 编码

  4. 系统设计

算法&数据结构

这是程序眼最迫切需要的技能集。以下是每一位程序员都应该熟悉的主题:

算法复杂性:大O的概念以及如何计算算法复杂性;基于复杂性知道哪一种算法更好,比方说O(N) vs O(logN)。

基本数据结构&适配器:数组、链接表、堆栈、队列。

排序&搜索:知道各种排序算法可帮助你识别项目的最佳的实现。作为练习,不妨试着实现以下插入排序选择排序或者合并排序,然后识别线性搜索与折半搜索的不同。

数&图:树和图无所不在,可以从Facebook的“朋友图谱”和Google Search的“知识图谱”开始。

哈希表:作为世界上最有效的数据结构之一,哈希表一直都是一个好选择。你应该能够实现一个哈希表并且熟悉解决冲突的技巧。

计算机组织&操作系统

强烈建议你要熟悉的主题包括:

  • 逐位运算

  • CPU是如何执行机器代码的

  • RAM与动态RAM之间的区别时什么

  • 有哪些类型的OS内核

  • “互斥”与“信号量”之间的区别是什么

  • 什么是死锁,什么是活锁

编码

你应该至少对一门语言有着非常好的了解。要知道你喜欢的语言所有的优缺点,最佳实践,这有助于你写出优雅高效可读性强的代码。

高度推荐你通过解决有挑战性的问题来进练习,比如:

  • 约瑟夫斯问题

  • 汉诺塔

  • 字符串压缩

初学者应该如何开启自己的编程生涯?,nginx架构图相关推荐

  1. 程序员:开始编程生涯的5个建议

    程序员:开始编程生涯的5个建议 ugmbbc发布于 2010-10-18 13:14:21| 感谢GG的投递 如果想成为一名程序员,你需要通过一些有创造性的方式来获取经验并且并推销自己.本文作者分享了 ...

  2. 编程生涯 21 载,那些我踩过的坑

    作为一个有着21岁编程年龄的中年程序员,我可以自豪地说,我成功地经历了软件行业这个充满变数的世界的高峰和低谷. 这篇文章记录了迄今为止我在软件开发的职业生涯中所犯的错误,同时也是如何避免这些错误的一本 ...

  3. justjavac:从辍学到成为Deno核心代码贡献者,我的十年编程生涯

    [CSDN 编者按]大学因学费而辍学,最困难时睡在公园长椅,有远见的母亲让他走上了编程之路,温柔智慧的妻子用爱与信任激励着他秉承初心.奋勇前行.编程十余年,他已在GitHub开源三百多个项目,项目总S ...

  4. Bruce Eckel:编程生涯

    Bruce Eckel:编程生涯 作者 Bruce Eckel 是编程界的大牛,著有大名鼎鼎的<Thinking in C++>和<Thinking in Java>. 本文是 ...

  5. CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯

    现年52岁的Bernardo Castilho先生是GrapeCity(中文名为葡萄城)ComponentOne公司的CTO,在与他的对话过程中,充满风趣严谨和厚重的历史感. 当作为年轻人的我们崇拜着 ...

  6. 【Linux网络编程】Nginx -- 模块开发(upstream / subrequest)

    [Linux网络编程]Nginx -- 模块开发(upstream / subrequest) [1]upstream VS subrequest 简介 upstream 为访问上游服务器,它把Ngi ...

  7. Docker安装Nginx,初学者也能让您轻松玩转Nginx的安装

    目录 从之前几期开始开始,我们一直在分享Linux的一些常见系统操作以及一些常用操作系统的安装. 如果您感兴趣的话,也可以看看我们之前的帖子 Docker安装BookStack,打造属于您公司自己的开 ...

  8. 第一篇博客,开启我的编程学习生涯

    目录: 一.自我介绍 二.编程的目标 三.打算怎么学编程 四.准备花费多长时间在编程上 五.目标的公司 六.结束 正文: 一.自我介绍 大家好,我是大三的学生,现在开始全力准备秋招,为了能在秋招时找到 ...

  9. 初学者注意:你需要明白编程的意义所在,否则是学不好编程的!

    编程的意义是什么,又为什么要编程呢?我觉得如果不明白这个问题的话,你是无法真正了解编程了解程序员这个职业的,就算你自认为自己会开发项目,但是在我看来你还是个外行程序员.为什么我这么说,请跟着笔者往下看 ...

最新文章

  1. 平板电脑安装软件_题宝典软件升级了,微信公众号版不受影响,电脑版/手机APP/平板APP需要重新下载安装...
  2. 小甲鱼c++源码_飞凌课堂丨OK1046A-C内存交互测试,小白也能看懂
  3. First Grid 枚举(100)
  4. [java进阶]2.Jedis基础与List的接口
  5. LeetCode 14. 最长公共前缀
  6. 阿里巴巴投资以色列风投JVP 规模数千万美元
  7. Uploadify 配置错误信息提示
  8. Java成神之路——String长度限制
  9. android x86 arm translator,让x86的android模拟器能模拟arm架构系统
  10. 获取当前时间getDate()注意点
  11. 小米无线网卡linux驱动下载,Linux下安装MT7601U无线网卡驱动
  12. java中映射getproperty,PropertyUtils.getProperty和PropertyUtils.setProperty的用法详解
  13. 1288元,苍井空“空系列”内衣微博开卖
  14. 大学四年,学了这些计算机基础知识,成为了别人眼中的大神
  15. 采用LocalDateTime获取指定时间段
  16. 记住鲁迅的所有文章,因为他具有深远的意义,在当下意义重大。
  17. 您有新的订单提示音在线试听_告别千篇一律的微信提示音
  18. 电脑视频转换成mp4格式,视频格式转换器转换
  19. [附源码]java毕业设计网上书店系统
  20. 微信头像失效_微信头像地址失效踩坑记附带方案

热门文章

  1. Flutter进阶—实现动画效果(一)
  2. Wi-Fi 6还没用上,Wi-Fi 7就要来了?
  3. 阳振坤:电动汽车与分布式数据库的共同命运
  4. 一图看尽编程语言十年热度变化!
  5. 阿里巴巴成立云原生技术委员会,云原生升级为阿里技术新战略!
  6. 漫画:什么是红黑树?(下篇)
  7. 35 岁以下科技创新 35 人之一,这位博士解开美团 AI 的冰山一角!
  8. DDoS 攻击爆发!医疗在线教育成重点,代理攻击成常态
  9. 5G、IoT 时代下,手机聚焦拍照是否走错了方向?
  10. 7 个令人兴奋的 JavaScript 新特性