Friday, December 29, 2017

TOP 6 “TRƯỜNG DẠY CODE” CHO CÁC DEVELOPER

Là một developer, việc học 1 ngôn ngữ, công nghệ mới là “chuyện thường ở huyện”. Mình đã từng chia sẻ một số hướng tiếp cận ngôn ngữ, công nghệ ở bài trước. Bài viết này sẽ giới thiệu 1 số “trường code” online. Các trường này cung cấp bài giảng online dưới dạng video (có hoặc không có phụ đề), cho phép ta code trực tiếp trên trình duyệt. Bảng xếp hạng này dựa theo độ nổi tiếng của web trên google, cũng như trải nghiệm của mình khi sử dụng.
Các “trường code” này đều là tiếng Anh nhé, vì mình không có thói quen học hay tìm tài liệu bằng tiếng Việt. Không phải mình kì thị tiếng Việt hay đâu, vì trước giờ tiếng Việt không bao giờ cung cấp đủ tài liệu cho mình học cả. Không tin thì các bạn thử tìm tài liệu tiếng Việt đầy đủ về Ionic Framework hay Caliburn.Micro xem :'(.

Code Academy

1
Web nổi tiếng nhất trong danh sách. Giao diện của trang khá trực quan, đơn giản, lại miễn phí. Bạn có thể học HTML, CSS, JS, jQuery, … ở đây. Code Academy dạy theo kiểu: Ra một số task, chúng ta thực hiện từng task (Bằng cách code), sau khi hoàn thành các task ta sẽ chuyển tới bài sau. Theo ý kiến cá nhân, các bạn mới nhập môn HTML CSS có thể học trang này.
Khuyết điểm: Số lượng các công nghệ/ngôn ngữ mà web dạy hơi ít.

Pluralsight

2
Tuy chỉ đứng thứ nhì trong bảng xếp hạng, nhưng trong cộng đồng developer, pluralsight lại nổi tiếng hơn codeacademy nhiều. Bạn có thể học được hầu như mọi ngôn ngữ, mọi framework (C#, Java, PHP, MVC, AngularJS, …) trên pluralsight. Tác giả các khóa học đều là những lập trình viên chuyên nghiệp, danh tiếng (MVP), chất lượng khóa học cũng rất cao.
Pluralsight có thu phí đăng ký. Giá dao động khoảng 30-50USD/tháng. Các bạn sinh viên có thể dùng tài khoản trường để được free 2 tháng. Dân đi làm như mình có thể xin ké tài khoản của cty để vào. Mình học được vô số thứ hữu ích từ trang này: AngularJS, định hướng sự nghiệp, Dependency Injection,…. Bạn nào cần giới thiệu 1 số course hay cứ liên hệ mình.
Khuyết điểm: Học qua video, không thực hành. Tốn phí, phải dùng tài khoản VIP mới download được bài tập.

Code School

3
Một website khá mới mẻ, đang gây được sự chú ý trong thời gian gần đây (Vừa được Pluralsight mua lại).
Codeschool dạy khá nhiều: Ruby, Python, AngularJS, Javascript, một số course miễn phí, nhưng phần lớn là thu phí >.<. Hình thức học cũng na ná code academy, bạn sẽ được giao một số task nhất định. Bằng cách hoàn thành từng task, chương trình sẽ chấm điểm và cho bạn qua màn mới.

Tuts+

4
Website này không chỉ dạy code mà còn có 1 số course về đồ họa, thiết kế. Mình chưa dùng bao giờ nhưng nghe nói là trang này dạy dưới dạng bài giảng hoặc ebook, thôi xin kiếu.

Udacity

5
Trang web này khá nổi tiếng trong cộng đồng lập trình viên nước ngoài. Số lượng course không nhiều, nhưng được tập trung thành các pathway, bổ trợ kiến thức cho nhau. Udacity còn có hệ thống nanodegree, tương đương với những chứng chỉ-mini dành cho các lập trình viên. Có điều cái giá hơi cao, tận 200USD/tháng, do đó mình không khuyến khích các bạn học trang này.

Skillshare

6
Mình chưa xài trang này bao giờ, nhưng đọc qua review thì thấy nó cũng khá tốt. Trang web dạy thông qua các bài giảng dạng video, có bài tập và giáo viên chấm điểm. Giá khá rẻ so với Udacity phía trên, chỉ 10$/tháng.
Còn các bạn thì sao? Hãy chia sẻ những “trường code” mà các bạn hay học trong phầm comment của bài viết nhé.

Sunday, November 5, 2017

Content management system: Wordpress Joomla Drupal

A content management system (CMS)[1][2][3] is a computer application that supports the creation and modification of digital content. It is typically used to support multiple users working in a collaborative environment.[4]
CMS features vary widely. Most CMSs include Web-based publishing, format management, history editing and version control, indexing, search, and retrieval. By their nature, content management systems support the separation of content and presentation.
A web content management system (WCM or WCMS) is a CMS designed to support the management of the content of Web pages. Most popular CMSs are also WCMSs. Web content includes text and embedded graphics, photos, video, audio, maps, and program code (e.g., for applications) that displays content or interacts with the user.
Such a content management system (CMS) typically has two major components:
  • A content management application (CMA) is the front-end user interface that allows a user, even with limited expertise, to add, modify, and remove content from a website without the intervention of a webmaster.
  • A content delivery application (CDA) compiles that information and updates the website.
Digital asset management systems are another type of CMS. They manage things such as documents, movies, pictures, phone numbers, and scientific data. CMSs can also be used for storing, controlling, revising, and publishing documentation.
Based on market share statistics, the most popular content management system is WordPress, used by over 28% of all websites on the internet, and by 59% of all websites using a known content management system.[5][better source needed] Other popular content management systems include Joomla and Drupal.

Contents

Common features

Content management systems will often contain the following features:[citation needed]
  • SEO-friendly URLs
  • Integrated and online help
  • Modularity and extensibility
  • User and group functionality
  • Templating support for changing designs
  • Install and upgrade wizards
  • Integrated audit logs
  • Compliance with various accessibility frameworks and standards, such as WAI-ARIA

Advantages

  • Reduced need to code from scratch
  • The ability to create a unified look and feel
  • Version control
  • Edit permission management

Disadvantages

  • Limited or no ability to create functionality not envisioned in the CMS (e.g., layouts, web apps, etc.)
  • Increased need for special expertise and training for content authors

Tổng hợp

https://octoverse.github.com/
https://insights.stackoverflow.com/survey
https://www.tiobe.com/tiobe-index/

The 15 most popular programming languages, according to the 'Facebook for programmers'

If you're looking to get hired as a programmer, you're going to need to know the right coding languages.
There are few better windows into the tech trends sweeping Silicon Valley than GitHub, the $2 billion startup that's been called the "Facebook for programmers." Each year, the company puts out its "Octoverse" report which lays out some of those trends, including the most popular programming languages among users of its site.
GitHub knows a lot about what's going on in coding. It has some 24 million users in 200 countries who are working in 337 different programming languages. Those users include employees from some of the biggest tech companies, including Apple, Google, and Facebook. They all rely on GitHub for spreading their open source software to the world.
Here are the top languages they're using, according to GitHub:

View As: One Page Slides


#15: Objective-C

#15: Objective-C
Getty
This offshoot of the C programming language is still the most popular way to build iPhone apps.

#14: Scala

#14: Scala
Dan Kitwood/Getty Images
First released in 2004, Scala was designed as an alternative to Oracle's popular Java. Scala's biggest boosters say it's a better way to build large-scale software.

#13: Swift

#13: Swift
Taylor Swift rocks an iPhone circa 2012.Getty Images/Mike Coppola
Apple released Swift in 2014, and the company says it's a better and easier way to build software. Swift has become trendy; Lyft, among others, used it to make its iPhone app.

#12: Shell

#12: Shell
Nintendo
Shell isn't exactly a programming language. Instead, a shell script instructs an operating system to automatically run a pre-designed list of commands. For instance, a shell script might have an operating system convert every ".bmp" file to a ".jpg" whenever it's run.

#11: TypeScript

Relatively young by programming language standards, TypeScript was created by Microsoft in 2012. It's closely related to the mega-popular JavaScript and designed to run big applications.

#10: C

#10: C
Flickr
One of the oldest programming languages still in common use, C was created in the early 1970s. In 1978, the language's legendary and still widely read manual, "The C Programming Language," was published for the first time.

#9: Go

#9: Go
Adam Berry/Getty
Go was originally designed by Google to build systems at the immense scale needed to power the world's busiest search engine. It has since become a hit with developers who want to tap into that capability.

#8: C#

#8: C#
A C# note.Wikimedia Commons
This language, pronounced "C-Sharp," was also developed by Microsoft. It's a rival to the even more popular Java and largely used by business software developers.

#7: CSS

#7: CSS
Wikimedia Commons
Cascading Style Sheets, or CSS, is the programming language that's widely used to design websites and browser-based apps.

#6: C++

#6: C++
Bjarne Stroustrup, inventor of C++Wikimedia Commons
Another offshoot of the C programming language, C++, which was originally created in 1983, can be found in everything from desktop web apps to server infrastructure.

#5: PHP

#5: PHP
An Internet meme explains the feeling many programmers have about PHP.Reddit
Big web companies including Yahoo and Facebook use PHP as the code behind their flagship sites. Meanwhile, many programmers hate PHP with a passion.
"PHP isn't so much a language as a random collection of arbitrary stuff, a virtual explosion at the keyword and function factory," Stack Overflow founder Jeff Atwood once wrote.

#4: Ruby

Ruby has won lots of acclaim for being easy to read and write. Also popular is Rails, an add-on framework for Ruby that makes it simple to build web apps. The language's official motto is "A programmer's best friend."

#3: Java

Java was originally invented by Sun Microsystems in 1991 as a programming language for interactive television systems. Since purchasing Sun, Oracle has turned Java into a powerhouse. The programming language is the most common way to build Android apps.

#2: Python

#2: Python
Members of Malaysia’s Civil Defence Force hold a python believed to be 26 feet long and found on Penang island.Herme Herisyam/Malaysia’s Civil Defence Force
Python dates back to 1989 and is loved by its fans for its highly readable code. Many programmers believe it's the easiest language to get started with.

#1 JavaScript

#1 JavaScript
Shutterstock
Despite the similarity of their names and popularity, JavaScript doesn't actually have much to do with Java. JavaScript underlies much of the modern web, but it also catches a lot of flak for slowing browsers and sometimes exposing users to security vulnerabilities.

For bonus points, here's the chart showing these languages' relative popularity.

For bonus points, here's the chart showing these languages' relative popularity.
GitHub
The chart shows the number of pull requests (requests to download and change a project's code) in each language. Pull requests aren't a perfect proxy for popularity, but they're a good indicator. And take note JavaScript's huge margin of victory.
You can view GitHub's full report here.

Friday, August 25, 2017

Turing Award

The ACM A.M. Turing Award is an annual prize given by the Association for Computing Machinery (ACM) to "an individual selected for contributions of a technical nature made to the computing community". It is stipulated that the contributions "should be of lasting and major technical importance to the computer field".[2] The Turing Award is generally recognized as the highest distinction in computer science[3][4] and the "Nobel Prize of computing".[5][6]
The award is named after Alan Turing, a British mathematician and reader in mathematics at the University of Manchester. Turing is often credited as being the key founder of theoretical computer science and artificial intelligence.[7] From 2007 to 2013, the award was accompanied by a prize of US $250,000, with financial support provided by Intel and Google.[2] Since 2014, the award has been accompanied by a prize of US $1 million,[1] with financial support provided by Google.[8]
The first recipient, in 1966, was Alan Perlis, of Carnegie Mellon University. The first female recipient was Frances E. Allen of IBM in 2006.[9]

Recipients[edit]

YearRecipientsCitation
1966Alan J. PerlisFor his influence in the area of advanced computer programming techniques and compiler construction[10]
1967Maurice WilkesProfessor Wilkes is best known as the builder and designer of the EDSAC, the first computer with an internally stored program. Built in 1949, the EDSAC used a mercury delay line memory. He is also known as the author, with Wheeler and Gill, of a volume on "Preparation of Programs for Electronic Digital Computers" in 1951, in which program libraries were effectively introduced[11]
1968Richard HammingFor his work on numerical methods, automatic coding systems, and error-detecting and error-correcting codes[12]
1969Marvin MinskyFor his central role in creating, shaping, promoting, and advancing the field of artificial intelligence.[13]
1970James H. WilkinsonFor his research in numerical analysis to facilitate the use of the high-speed digital computer, having received special recognition for his work in computations in linear algebra and "backward" error analysis[14]
1971John McCarthyMcCarthy's lecture "The Present State of Research on Artificial Intelligence" is a topic that covers the area in which he has achieved considerable recognition for his work[15]
1972Edsger W. DijkstraEdsger Dijkstra was a principal contributor in the late 1950s to the development of the ALGOL, a high level programming language which has become a model of clarity and mathematical rigor. He is one of the principal proponents of the science and art of programming languages in general, and has greatly contributed to our understanding of their structure, representation, and implementation. His fifteen years of publications extend from theoretical articles on graph theory to basic manuals, expository texts, and philosophical contemplations in the field of programming languages[16]
1973Charles W. BachmanFor his outstanding contributions to database technology[17]
1974Donald E. KnuthFor his major contributions to the analysis of algorithms and the design of programming languages, and in particular for his contributions to "The Art of Computer Programming" through his well-known books in a continuous series by this title[18]
1975Allen Newell and
Herbert A. Simon
In joint scientific efforts extending over twenty years, initially in collaboration with J. C. Shaw at the RAND Corporation, and subsequently with numerous faculty and student colleagues at Carnegie Mellon University, they have made basic contributions to artificial intelligence, the psychology of human cognition, and list processing[19]
1976Michael O. Rabin and
Dana S. Scott
For their joint paper "Finite Automata and Their Decision Problem,"[20] which introduced the idea of nondeterministic machines, which has proved to be an enormously valuable concept. Their (Scott & Rabin) classic paper has been a continuous source of inspiration for subsequent work in this field[21][22]
1977John BackusFor profound, influential, and lasting contributions to the design of practical high-level programming systems, notably through his work on FORTRAN, and for seminal publication of formal procedures for the specification of programming languages[23]
1978Robert W. FloydFor having a clear influence on methodologies for the creation of efficient and reliable software, and for helping to found the following important subfields of computer science: the theory of parsing, the semantics of programming languages, automatic program verification, automatic program synthesis, and analysis of algorithms[24]
1979Kenneth E. IversonFor his pioneering effort in programming languages and mathematical notation resulting in what the computing field now knows as APL, for his contributions to the implementation of interactive systems, to educational uses of APL, and to programming language theory and practice[25]
1980Tony HoareFor his fundamental contributions to the definition and design of programming languages[26]
1981Edgar F. CoddFor his fundamental and continuing contributions to the theory and practice of database management systems, esp. relational databases[27]
1982Stephen A. CookFor his advancement of our understanding of the complexity of computation in a significant and profound way[28]
1983Ken Thompson and
Dennis M. Ritchie
For their development of generic operating systems theory and specifically for the implementation of the UNIX operating system
1984Niklaus WirthFor developing a sequence of innovative computer languages, EULER, ALGOL-W, MODULA and Pascal
1985Richard M. KarpFor his continuing contributions to the theory of algorithms including the development of efficient algorithms for network flow and other combinatorial optimization problems, the identification of polynomial-time computability with the intuitive notion of algorithmic efficiency, and, most notably, contributions to the theory of NP-completeness
1986John Hopcroft and
Robert Tarjan
For fundamental achievements in the design and analysis of algorithms and data structures
1987John CockeFor significant contributions in the design and theory of compilers, the architecture of large systems and the development of reduced instruction set computers (RISC)
1988Ivan SutherlandFor his pioneering and visionary contributions to computer graphics, starting with Sketchpad, and continuing after
1989William KahanFor his fundamental contributions to numerical analysis. One of the foremost experts on floating-point computations. Kahan has dedicated himself to "making the world safe for numerical computations."
1990Fernando J. CorbatóFor his pioneering work organizing the concepts and leading the development of the general-purpose, large-scale, time-sharing and resource-sharing computer systems, CTSS and Multics.
1991Robin MilnerFor three distinct and complete achievements: 1) LCF, the mechanization of Scott's Logic of Computable Functions, probably the first theoretically based yet practical tool for machine assisted proof construction; 2) ML, the first language to include polymorphic type inference together with a type-safe exception-handling mechanism; 3) CCS, a general theory of concurrency. In addition, he formulated and strongly advanced full abstraction, the study of the relationship between operational and denotational semantics.[29]
1992Butler W. LampsonFor contributions to the development of distributed, personal computing environments and the technology for their implementation: workstations, networks, operating systems, programming systems, displays, security and document publishing.
1993Juris Hartmanis and
Richard E. Stearns
In recognition of their seminal paper which established the foundations for the field of computational complexity theory.[30]
1994Edward Feigenbaum and
Raj Reddy
For pioneering the design and construction of large scale artificial intelligence systems, demonstrating the practical importance and potential commercial impact of artificial intelligence technology.[31]
1995Manuel BlumIn recognition of his contributions to the foundations of computational complexity theory and its application to cryptography and program checking.
1996Amir PnueliFor seminal work introducing temporal logic into computing science and for outstanding contributions to program and systems verification.
1997Douglas EngelbartFor an inspiring vision of the future of interactive computing and the invention of key technologies to help realize this vision.
1998Jim GrayFor seminal contributions to database and transaction processing research and technical leadership in system implementation.
1999Frederick P. Brooks, Jr.For landmark contributions to computer architecture, operating systems, and software engineering.
2000Andrew Chi-Chih YaoIn recognition of his fundamental contributions to the theory of computation, including the complexity-based theory of pseudorandom number generation, cryptography, and communication complexity.
2001Ole-Johan Dahl and
Kristen Nygaard
For ideas fundamental to the emergence of object-oriented programming, through their design of the programming languages Simula I and Simula 67.
2002Ronald L. Rivest,
Adi Shamir and
Leonard M. Adleman
For their ingenious contribution for making public-key cryptography useful in practice.
2003Alan KayFor pioneering many of the ideas at the root of contemporary object-oriented programming languages, leading the team that developed Smalltalk, and for fundamental contributions to personal computing.
2004Vinton G. Cerf and
Robert E. Kahn
For pioneering work on internetworking, including the design and implementation of the Internet's basic communications protocols, TCP/IP, and for inspired leadership in networking.
2005Peter NaurFor fundamental contributions to programming language design and the definition of ALGOL 60, to compiler design, and to the art and practice of computer programming.
2006Frances E. AllenFor pioneering contributions to the theory and practice of optimizing compiler techniques that laid the foundation for modern optimizing compilers and automatic parallel execution.
2007Edmund M. Clarke,
E. Allen Emerson and
Joseph Sifakis
For their roles in developing model checking into a highly effective verification technology, widely adopted in the hardware and software industries.[32]
2008Barbara LiskovFor contributions to practical and theoretical foundations of programming language and system design, especially related to data abstraction, fault tolerance, and distributed computing.
2009Charles P. ThackerFor his pioneering design and realization of the Xerox Alto, the first modern personal computer, and in addition for his contributions to the Ethernet and the Tablet PC.
2010Leslie G. ValiantFor transformative contributions to the theory of computation, including the theory of probably approximately correct (PAC) learning, the complexity of enumeration and of algebraic computation, and the theory of parallel and distributed computing.
2011Judea Pearl[33]For fundamental contributions to artificial intelligence through the development of a calculus for probabilistic and causal reasoning.[34]
2012Silvio Micali
Shafi Goldwasser
For transformative work that laid the complexity-theoretic foundations for the science of cryptography and in the process pioneered new methods for efficient verification of mathematical proofs in complexity theory.[35]
2013Leslie LamportFor fundamental contributions to the theory and practice of distributed and concurrent systems, notably the invention of concepts such as causality and logical clocks, safety and liveness, replicated state machines, and sequential consistency.[36][37]
2014Michael StonebrakerFor fundamental contributions to the concepts and practices underlying modern database systems.[38]
2015Martin E. Hellman
Whitfield Diffie
For fundamental contributions to modern cryptography. Diffie and Hellman's groundbreaking 1976 paper, "New Directions in Cryptography,"[39] introduced the ideas of public-key cryptography and digital signatures, which are the foundation for most regularly-used security protocols on the internet today.[40]
2016Tim Berners-LeeFor inventing the World Wide Web, the first web browser, and the fundamental protocols and algorithms allowing the Web to scale.[41]