2018年3月19日:开源日报第11期

每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;电报群 https://t.me/OpeningSourceOrg


今日推荐开源项目:《开放性后端开发面试题库BEDIQ

推荐理由:Back-End-Developer-Interview-Questions(后端开发面试题)是一个开放性的题库,包含面试时可能会考到的各种题目。项目中并没有提供这些问题的答案,不过当然大家也知道,比起答案来更重要的是藉由这个问题与面试官交流的过程,这能让面试官更能知道你在后端开发这方面的独有的见解与思路。这样看来这个题库更主要地是在告诉你在面试时你可能会需要的思路与一定的知识储备。

首先,该题库是有中文版的,由monklof对其进行了翻译,但更新不及时。连接:https://github.com/monklof/Back-End-Developer-Interview-Questions

其次,题库中的一部分问题可以在这个项目中获得一定的解答,虽然可能不适用于面试,但也可以提供许多有用的信息:

https://github.com/monklof/Back-End-Developer-Interview-Questions

作者将问题分为以下类型:

通用问题:有较为标准的答案的问题

开放式问题:没有固定答案,与编程经验有关的问题

设计模式相关问题:与体系的架构有关的问题

代码设计相关问题:与编程习惯、规范有关的问题

语言相关问题:与某种语言的特性有关的问题

Web相关问题

数据库相关问题

非关系型数据库相关问题

代码版本管理相关问题:对各个代码版本管理的应用之间的带有比较性的问题

并发问题

分布式系统相关问题

软件生命周期和团队管理相关问题:有关代码的可延展性以及工作方式的问题

逻辑和算法相关问题

软件架构相关问题

面向服务架构(SOA)和微服务(Microservice)相关问题

安全相关问题

比尔盖茨式问题:玄学问题,哲学问题……

代码示例问题:提供代码并以此为题作出解答

通用问题示例

1、微软、谷歌、欧朋(opera)和火狐这类公司是如何从他们的浏览器中获利的?

思路:浏览器最大的收入在于广告收入,竞价链接、与搜索引擎合作分成。广告一直是传媒业的主要收入。而像google一直做的事就是信息精确投放,这就是google的优势所在。所以本质上浏览器公司获利的主要来源还是广告。

这方面的内容推荐一本书:https://book.douban.com/subject/6709783/

2、封装的重要性:

思路:抽象和封装是互补的概念,抽象关注对象的可观察到的行为(外部),而封装关注的是行为的实现。封装通常是通过信息隐藏来实现的。信息隐藏是将那些不涉及对象本质特征的秘密都隐藏起来的过程。“复杂系统的每部分都不应该依赖于其他部分的内部细节”,抽象“帮助人们思考他们做什么”,而封装“让程序可以借助最少的工作进行可靠的修改”。其中底层封装,对用户来说是没什么影响的,但是对于编程人员来说,封装和私有提升了接口的可读性,规范性,用封装好的函数会极大的提高程序编写效率。

开放式问题

这种问题就比较多样化了,更强调对应聘者的思维及各种能力的考察。比如:

在你当前的工作流中,什么事情是你计划下一步需要自动化的?

如何向你的祖母解释什么是线程?

为什么写软件是困难的?是什么使软件的维护变得困难?

等等范围很广的问题,当然也没什么标准的答案。个人认为这种问题的意义在于应聘者是否对自己的领域有所思考。这当然是个很重要的事情,就算对于没有面试要进行的人也同样重要,赶紧去试试回答吧。

设计模式相关问题

为什么说goto语句是恶魔般的存在?

思路:这个说法最早是由荷兰著名计算机科学家E.W.Dijkstra于1968年提出的,在一封给ACM编辑的信《go to statement considered harmful》中指出。http://ce.sharif.edu/courses/90-91/1/ce364-1/resources/root/GoTo/Dijkstra.pdf

非结构性地使用goto可能导致程序流图不可规约(irreducible)。而非系统的使用goto语句并且会降低代码的可读性。对于编译器来说,良好结构的代码和goto语句产生的面条式代码(这里没有贬义)根本没有区别。这里引用一篇文章             (http://blog.csdn.net/cpq37/article/details/47342665)其中节选:Donald Knuth在他的论文结构化编程语句写道,”过早的优化是万恶之源。”清晰的编程重要得多,直到你知道您的代码中的hot spot,特别是考虑到现代的优化和分析工具比Knuth当他在1974年写论文是更加强大;大部分他给出的例子:使用goto来进行优化,事实上现代编译器都已经做了这部分工作。

数据库问题:什么是N + 1问题?

可以参考:https://secure.phabricator.com/book/phabcontrib/article/n_plus_one/

 


今日推荐英文原文:《Here are the best programming languages to learn in 2018

Here are the best programming languages to learn in 2018

This is the definitive guide for anyone wanting to choose the right programming language career path in 2018.

And let me be clear about something:

This is not a “top hottest languages” post throwing around a bunch of names and buzzwords.

This is an objective and practical review of the current state, tendencies, and safe near-future predictions of the IT industry at the start of 2018.

It’s based on statistical data from various trusted sources and is the result of a two-week period of in-depth research.

The goal of this post is to help you make an informed decision about which languages the IT market is looking for in 2018. It’ll help you decide which niche is worth the time and effort to master, and which will help you start (or continue) a successful and profitable career as a software developer.

When trying to decide which programming language makes the best career path, developers typically look for these four traits:

  1. High salary
  2. Popularity — plenty of job openings, variety
  3. Tendency to become more in-demand in the future
  4. Preferably easy to learn and pleasant to work with

For each language outlined in the list, you’ll see:

  1. A brief intro to get you familiar with the language, what types of career options it can offer, and what’s cool about it
  2. Language popularity diagrams according to TIOBE and GitHub Octoverse
  3. Salary comparison based on data from Indeed.com and StackOverflow’s 2017 survey
  4. The tendency in demand for the last five years according to Google Trends
  5. A short example code snippet to give you a visual idea of the language’s syntax

At the end, I’ve included four lesser-known languages which gained rapid popularity in the past few years and are expected to be in very high demand for 2018.

Let’s dive right in with the number one pick.

1. JavaScript

JavaScript is the most popular language according to StackOverflow’s annual survey, with 62.5% of respondents claiming to use it.

It’s undoubtedly the dominant language of the web and the growth of JavaScript over the past decade has been immense. Why? Just look around and count how many web-enabled devices you can see. Stack Overflow’s co-founder and popular programming figure Jeff Atwood famously said:

Any application that can be written in JavaScript will eventually be written in JavaScript.

Having that in mind, it’s safe to say there will be no shortage of JavaScript opportunities in 2018 and beyond.

JavaScript knowledge feeds into plenty of front-end frameworks such as Angular, React, Ember, Backbone, and others, as well as the Node.js run-time environment, which allows you to run JavaScript on the backend with high efficiency.

Three of the top four most popular frameworks for 2017 according to StackOverflow are JavaScript-based.

If you enjoy immediately seeing the results of your work in action, for example making interactive web components, JavaScript is a good idea for you. Have in mind that a career in JavaScript implicitly means you should also be comfortable with HTML and CSS, which is basically what web pages are made of.

Tools like Apache Cordova or React Native allow using JavaScript for mobile applications. It’s even possible to get into game development or desktop app development with projects like Electron.

Let’s see the stats behind JavaScript being the #1 pick:

JavaScript stats

JavaScript tendency in popularity for the past 5 years: Steady increase

2. Swift

Swift is a relatively new programming language released by Apple in 2014. This is a language for developing native iOS or macOS applications.

It is considered an improvement in terms of usability and performance compared to Objective-C — the language used for Apple’s iOS and OS X operating systems.

Swift is generally favored by developers, standing at #4 in the list of most loved languages for 2017, after being #1 in 2015. Should you pick up a career with Swift, chances are you would enjoy it.

If you want to get into mobile development, you should definitely consider Swift as a high-paid career path. Generally, iOS apps have proven to be more profitable than Android apps.

Swift tendency in popularity for the past 5 years: Steep above

3. Python

Python is a general purpose language which you can find almost anywhere today. You’ll find it in web applications, desktop apps, network servers, machine learning, media tools and more.

It’s used by big players like NASA or Google, where the Python creator Guido van Rossum was employed for about 8 years writing mostly…Python.

Python code is neat, readable, and well-structured. Proper indentation is not just for beauty here — it determines code execution.

Python-based web development frameworks like Django and Flask have been gaining more and more popularity. Also, the language is heavily equipped with quality machine learning and data analysis libraries like Scikit-learn and Pandas.

On the whole, career paths with Python are various and here to stay. It’s a good choice for beginner developers, as it’s high-level and easy to read and comprehend.

Python tendency in popularity for the past 5 years: Impressive

4. Java

Java is arguably the most popular programming language as 90% of the Fortune 500 companies heavily use it. Its famous slogan “write once, run anywhere” captures one of the keys that makes Java so valuable — its powerful Java Virtual Machine (JVM), which makes it cross-platform compatible.

Popular career paths with Java are backend developer, big data developer, embedded systems engineer, or Android developer. Although not the most “trendy” language at the moment, Java is so heavily used that we can pretty much guarantee it won’t go anywhere in the next decade and beyond.

Because of this, you can be confident that there are plenty of Java job positions both in your city and remotely, which can’t be said for some of the less popular languages on this list. Thus, if you are comfortable with Java, it’s only a matter of time before you’ll find the right place.

Java tendency in popularity for the past 5 years: Decrease

5. C++

C++ is a highly efficient and flexible language, first created back in 1985. It has remained in high demand due to its performance, reliability, and variety of contexts you can use it in.

Plenty of large systems have been created and maintained successfully using C++, including the likes of Microsoft, Oracle, PayPal, and Adobe.

A career with C++ typically involves developing desktop applications, especially for performance-intensive tasks. While rather complex, getting comfortable with C++ would give you a deeper understanding of how languages work, for example by giving facilities for low-level memory manipulation.

C++ tendency in popularity for the past 5 years: Ups and downs

6. Ruby

Ruby is one of the most loved programming languages around. It’s designed to be friendly and easy to use by developers, as even its own tagline is “a programmer’s best friend.”

Ruby is a high-level language which aims to achieve a lot with few lines of clean, readable code. This sometimes takes significant effort “under the hood,” which makes Ruby relatively slower in terms of efficiency compared to other popular languages — but it definitely boosts your productivity.

Well-written Ruby code almost looks like sentences written in plain English. It’s a great choice for the first language to learn, as beginners typically pick it up fast and enjoy it along the way.

Ruby is mostly used for its most popular framework — Ruby on Rails. Ruby on Rails is a web framework which encapsulates all of Ruby’s ideas into a powerful tool for the web. The great productivity achieved with Rails makes it a common choice for startups who aim for a running start.

A career with Ruby on Rails is definitely a great choice as the framework is “optimized for programmer happiness” and is also well-paid. The only major drawback of picking up a career with Ruby is that the language is not quite as popular compared to the languages mentioned above. Thus, job openings with Ruby may be limited in some locations.

Ruby tendency in popularity for the past 5 years: Decrease

7. Rust

Rust is sponsored by Mozilla and was voted most liked by developers for a second consecutive year in StackOverflow surveys. This is a relatively new language, first appearing in 2010, which already gained remarkable popularity and is expected to improve even more in the future.

Rust is a compiled language which is often compared to C both in terms of use cases and performance. The main difference is that Rust is memory safe. One of the most common faults you could find in C code are dangling pointers, buffer overflows, or any other kind of memory errors. Rust is created with the purpose of avoiding those — the language literally makes it impossible for you to make such errors as they are caught during compilation (before the code was ever run).

For a beginner, Rust might be a bit of a struggle to pick up as it insists on various rules to achieve the memory safety. However, experienced developers love it, and it’s quite possible that in the next few years Rust will be in very high demand.

As far as salary is concerned, Rust is considered well-paid, ranking second worldwide in StackOverflow’s 2017 survey.

One more reason to choose Rust is that the language is being developed by a household name in IT, Mozilla.

Rust tendency in popularity for the past 5 years: Rising

8. Elixir

Elixir is another new language, first appearing in 2011, that immediately gained popularity.

Elixir was inspired by Erlang, a language developed back in the 1980s by Ericsson and stands as arguably one of the best tools for heavy concurrency. Elixir’s author José Valim himself said that he liked everything about Erlang, but also saw room for improvement. The biggest drawback of Erlang for developers is the often quirky syntax and usability plus the lack of intuitive package management.

Thus, Elixir appears — combining aspects from Ruby, a highly developer-friendly language and ecosystem, with those from Erlang.

Elixir is mainly used for web development, and career options are typically well-paid but limited. The popularity of the language has been increasing year after year, so if your city has various IT companies around, Elixir developers may be highly sought after.

Salary-wise, Elixir is typically well-paid standing at third place worldwide in StackOverflow’s 2017 survey.

Elixir tendency in popularity for the past 5 years: Rising

9. Scala

Scala stands for Scalable Language, and is one of the many attempts to “rewrite Java” while improving its drawbacks. Scala code is compiled to run on the Java Virtual Machine (JVM).

We can safely agree that Scala is already a success given the fact that big companies like LinkedIn, Twitter, and The Guardian use it in their codebases.

Scala has the reputation of being a complex language to learn for a junior developer. But those who make it past the learning curve probably enjoy a great career as open positions for Scala developers are definitely popping up more and more.

Scala ranks high in salary surveys, making the top ten worldwide and sharing first place in the US according to StackOverflow’s 2017 report.

Scala tendency in popularity for the past 5 years: Rising

10. R

R is a programming language and environment used for statistics, graphic representation and data analysis. This is the #1 choice for data scientists. If you find yourself interested in this field, then R is a stable and profitable career choice for you.

R tendency in popularity for the past 5 years: Steady rise

That concludes the list of the top ten programming languages you should consider learning in 2018.

If you are looking for free courses to try out any of the above-mentioned languages, you can check out our advice on choosing from the best tutorials or even having a dedicated website browse tutorials for you.

If you have any questions about a future career as a software developer, make use of our free featured material or contact us further for a professional opinion.

This article was originally published on MyFirstITJob.

What’s next?

Choosing the right language career path is great — but usually problems start when trying to get “good enough” and get hired.

Next, I’ll focus on the results of my research on why many developers give up before ever getting a job. The main reason is actually quite simple.

 


每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;电报群 https://t.me/OpeningSourceOrg

()
基于 Debian 的 Xfce 桌面发行版 MX Linux 发布 17.1 版
开源项目精选:下一代文本编辑器 Xray
暂无评论
做你所想,开源工场

开源工场是一个校园风格的古典开源文化社区,通过开源协作形式来创造生产力和寓技术于乐趣的频分多址非盈利开源社区。主张享受开源审美和动手做开源。目前有全球流行开源项目榜中榜开源周报、开源日报、媛宝、猿帅、开源尚青、开源工寮等原创栏目及主办学生开源年会(sosconf)。了解我们加入我们

联系我们

中国:重庆市沙坪坝区沙正街174号重庆大学
新加坡:113 Jalan Besar, Singapore 208833

编程浪子
编程浪子
人不堪其忧,我不改其乐 base64 -d "d2VuQGJvb3RpbmdtYW4ub3Jn"
153
文章
35
评论
97
喜欢