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
喜歡