Ngôn ngữ lập trình bao gồm. Ngôn ngữ cũ và chết. Mô hình ngôn ngữ lập trình

Các chương trình máy tính thường được mô tả là “bộ hướng dẫn” và ngôn ngữ máy tính chỉ được nhiều người coi là cách từ vựng và cú pháp để cung cấp các hướng dẫn đó.

Từ quan điểm này, các ngôn ngữ lập trình khác nhau có thể có ngữ pháp hoặc từ vựng khác nhau. Mỗi ngôn ngữ có thể xử lý dấu chấm phẩy khác nhau hoặc yêu cầu chữ in hoa bằng văn bản, mặc dù nhìn chung, cơ sở của tất cả các ngôn ngữ là cùng một nguyên tắc.

Nhưng thực tế lập trình phức tạp hơn nhiều.

Lập trình ngày nay

Thật kỳ lạ, nhưng hầu hết những ý tưởng thực sự “toàn cầu” trong lập trình máy tính đều được phát triển từ những năm 1950 và 60. Kể từ đó, nhiều ngôn ngữ mới đã xuất hiện, nhưng không có ngôn ngữ nào thực hiện một cách tiếp cận thực sự mới về logic và tính toán.

Sự phát triển của các ngôn ngữ lập trình mới trong vài thập kỷ qua đều dựa trên kinh nghiệm của các nhà phát triển. Điều này có nghĩa là có mã dễ viết hơn (động lực đằng sau Ruby) và dễ đọc hơn (Python), đồng thời làm cho một số loại cấu trúc logic và kỹ thuật giải quyết vấn đề trở nên trực quan hơn.

Một số ngôn ngữ đã được phát triển để giải quyết vấn đề cụ thể trong lập trình (chẳng hạn như PHP và SASS) để quản lý một số loại hệ thống nhất định () hoặc để hoạt động trong một môi trường hoặc nền tảng nhất định (Java và JavaScript). Một số ngôn ngữ được thiết kế đặc biệt để giúp người mới bắt đầu học lập trình (BASIC và Scratch là những ví dụ cổ điển).

Vì các lý thuyết và thực tiễn xung quanh việc thiết kế ngôn ngữ đã phát triển thành (hầu hết) chính thống được chấp nhận rộng rãi, phần lớn các lý thuyết mới và công việc thú vị Sự phát triển của thực hành lập trình hiện nay tập trung vào kiến ​​trúc hệ thống.

Một sự phát triển tương đối gần đây bao gồm khái niệm SOA (Kiến trúc hướng dịch vụ). kiến trúc hướng dịch vụ) và MVC (Model-View-Controller), cũng như các khung công tác như , cho phép các lập trình viên dễ dàng làm việc trong các mô hình này.

Danh sách ngôn ngữ lập trình

Danh sách ngày càng tăng các ngôn ngữ lập trình, đánh dấu và giao thức phổ biến. Các liên kết đến mô tả của từng người trong số họ:

mã hóa ASCII

  • Mã hóa ký tự là một trong những khía cạnh cơ bản của máy tính và Internet. ASCII là hệ thống mã hóa ký tự được sử dụng rộng rãi đầu tiên. Nó đã được thay thế bởi UTF-8, nhưng ASCII vẫn là nền tảng cho phần lớn các ký tự trên Internet ngày nay. Hiểu được điều này là rất quan trọng đối với các lập trình viên. Đọc thêm tại đây (tiếng Anh):

ASP/ASP.NET

  • ASP là từ viết tắt của Trang máy chủ hoạt động. Đây là ngôn ngữ kịch bản phía máy chủ đầu tiên dành cho máy chủ web Microsoft IIS. ASP đã được thay thế bằng framework mã nguồn mở phía máy chủ - ASP.NET. Thêm chi tiết (tiếng Anh):

Tự độngLISP

  • AutoLISP là ngôn ngữ lập trình đơn giản, gọn nhẹ, được giải thích được thiết kế dành riêng cho thiết kế phần mềm có sự hỗ trợ của máy tính. Đọc về nó (tiếng Anh):

ôi

  • Awk là ngôn ngữ lập trình xử lý văn bản cực kỳ mạnh mẽ cho phép bạn trích xuất dữ liệu từ một tệp hoặc nguồn khác và xuất dữ liệu đó ở bất kỳ định dạng nào bạn cần. Nó là một công cụ cũ nhưng vẫn hữu ích hơn bao giờ hết. Tìm hiểu thêm (tiếng Anh): .

BASH

  • Bash là giao diện được sử dụng phổ biến nhất dòng lệnh trong thế giới Unix. Đây là giao diện dựa trên văn bản mặc định cho cả Linux và Mac OS X. Đọc thêm:

Lisp thông thường

  • Lisp là một ngôn ngữ lập trình khá độc đáo, có lẽ là ngôn ngữ lâu đời nhất và vẫn được sử dụng cho đến ngày nay. Điều này đặc biệt quan trọng trong khu vực trí tuệ nhân tạo. Thêm chi tiết (tiếng Anh):

C

  • Nếu chúng ta đưa vào đây hai dẫn xuất của ngôn ngữ này, thì chúng ta có thể nói một cách an toàn rằng không có ngôn ngữ nào hữu ích và có ảnh hưởng hơn C. Điều này đặc biệt quan trọng đối với sự phát triển của hệ điều hành và phần mềm khác. Nhiều trình biên dịch và thông dịch cho các ngôn ngữ khác được viết bằng C. Đọc thêm:

C++

  • Ban đầu được gọi là “C với các lớp”, C++ về nhiều mặt chỉ là sự kế thừa nâng cao hơn của C (mặc dù tình hình tổng thể phức tạp hơn). C++ được thiết kế để nâng cao mô hình lập trình C trong khi vẫn giữ được khả năng thao tác phần cứng ở mức độ thấp. Nhiều phần bổ sung trong số này đã được thêm vào C trong nhiều năm và các ngôn ngữ này giống như hai phương ngữ của cùng một ngôn ngữ. Thêm chi tiết (tiếng Anh):

C#

  • Được sử dụng làm ngôn ngữ chính cho lập trình .NET, tương tự như C++, nó là một phần mở rộng của ngôn ngữ lập trình C, nhưng có sự bổ sung quan trọng về khả năng hướng đối tượng. Thêm chi tiết (tiếng Anh):

CSS/CSS3

  • CSS hay Cascading Style Sheets cũng không phải là ngôn ngữ lập trình mà là ngôn ngữ kiểu trang - ngôn ngữ cung cấp các quy tắc về kiểu dáng và bố cục cho tài liệu và ứng dụng. Đây là ngôn ngữ phong cách chính được sử dụng trên Internet. Thêm chi tiết:

Emacs Lisp

  • Emacs từ lâu đã được biết đến như một trình soạn thảo văn bản phổ biến và mạnh mẽ. Nhưng việc thêm Emacs Lisp vào nó sẽ biến nó thành một môi trường phát triển tích hợp cho hầu hết mọi ngôn ngữ lập trình. Thêm chi tiết (tiếng Anh): .

F#

  • F# – ngôn ngữ lập trình mục đích chung. Được thiết kế để cực kỳ hiệu quả. Ban đầu chỉ là Ngôn ngữ Microsoft, hiện là ngôn ngữ nguồn mở và được sử dụng trên tất cả các nền tảng. Thêm chi tiết (tiếng Anh): .

FORTAN

  • Fortran xuất hiện lần đầu tiên vào năm 1957 và vẫn được sử dụng cho đến ngày nay để giải quyết một số vấn đề phức tạp nhất Khoa học hiện đại Và công nghệ. Thêm chi tiết (tiếng Anh):

NGOÀI

  • Công việc trên Forth bắt đầu vào năm 1968 và ngôn ngữ này thường được sử dụng trên phần cứng không có hệ điều hành truyền thống. Nó cũng được sử dụng rộng rãi để điều khiển máy công cụ. Thêm chi tiết (tiếng Anh):

Haskell

  • Haskell là một trong những ngôn ngữ lập trình hàm phổ biến nhất, ngoài ra còn là nguyên mẫu cho hàng tá ngôn ngữ khác. Nó được sử dụng rộng rãi trong giới kinh doanh và học thuật và là một ngôn ngữ tuyệt vời để bắt đầu khi tìm hiểu về lập trình chức năng. Thêm chi tiết (tiếng Anh):

HTML

  • HTML không phải là ngôn ngữ lập trình. Đây là ngôn ngữ đánh dấu - ngôn ngữ để thêm các chú thích ngữ nghĩa và phong cách vào nội dung. Đây là ngôn ngữ chính cho nội dung web. Kiến thức về nó là cần thiết và bắt buộc đối với tất cả các nhà thiết kế web và nhà phát triển web, cũng như tất cả mọi người (nhà văn, biên tập viên) sản xuất nội dung Internet. Thêm chi tiết (tiếng Anh): và

IDL

  • IDL, hay Ngôn ngữ dữ liệu tương tác, là ngôn ngữ lập trình chủ yếu được sử dụng để phân tích và trực quan hóa dữ liệu. Nó vẫn được sử dụng rộng rãi trong hàng không vũ trụ và thiên văn học. Thêm chi tiết (tiếng Anh):

INTERCAL

  • INTERCAL là một ngôn ngữ máy tính nhại lại được phát triển vào đầu những năm 1970. Nó được tạo ra như một trò đùa để cho thấy các ngôn ngữ phức tạp về mặt kỹ thuật và khó đọc như thế nào. Đây là ngôn ngữ thực mà bạn có thể tải xuống và thậm chí bạn có thể làm điều gì đó với nó. Người ta cho rằng bạn phải rất quen thuộc với nó để thực hiện việc này - nhưng, một lần nữa, cũng không quá rõ ràng, vì bản thân INTERCAL cũng sẽ không thích điều đó. Thêm chi tiết (tiếng Anh):

Java

  • Java là một ngôn ngữ cấp độ cao và được thiết kế để sử dụng trên Java ảo Máy móc. Nó có rất ít sự phụ thuộc bên ngoài và được thiết kế để chạy trên bất kỳ máy vật lý nào. Được sử dụng nhiều trong kiến trúc mạng, cũng như trong các thiết bị nhúng và các ứng dụng điện toán khác. Thêm chi tiết (tiếng Anh): .

Javascript

  • JavaScript (không thực sự liên quan đến Java) là ngôn ngữ kịch bản, ban đầu được thiết kế để sử dụng trong trình duyệt web. Vì vậy nó có khả năng tích hợp để làm việc với Đối tượng tài liệu Model (DOM), hiển thị nội dung của các trang web trong bộ nhớ. Đây là ngôn ngữ lập trình chính để phát triển web front-end. Nó chủ yếu hướng đến sự kiện và nhờ Node.JS, gần đây đã được công nhận là ngôn ngữ phía máy chủ. Thêm chi tiết (tiếng Anh): và. Và đây:

Ksh

  • Korn Shell (ksh) là giao diện dòng lệnh được sử dụng trên Unix. Đó là một lớp vỏ đời đầu, tương thích với vỏ tiêu chuẩn Bourne, nhưng có tất cả các tính năng tương tác thú vị của C shell.

Lập trình Linux

  • Lập trình Linux bao gồm mọi thứ, từ viết kịch bản shell đến phát triển ứng dụng đến phát triển kernel. Thêm chi tiết (tiếng Anh):

Logo

  • Logo là một trong những ngôn ngữ dạy lập trình sớm nhất và có lẽ vẫn là ngôn ngữ nổi tiếng nhất. Anh ấy nổi tiếng với chú rùa mà trẻ em có thể di chuyển bằng lệnh của máy tính. Một cách thú vị để dạy lập trình. Thêm chi tiết (tiếng Anh):

M.L.

  • ML ban đầu được thiết kế như một ngôn ngữ lập trình meta: ngôn ngữ để tạo các ngôn ngữ khác. Nhưng theo thời gian, nó trở thành ngôn ngữ có mục đích chung, được sử dụng rộng rãi trong giáo dục, toán học, khoa học và thậm chí cả tài chính. Thêm chi tiết (tiếng Anh): .

MPI

  • Giao diện truyền tin nhắn là một giao thức tiêu chuẩn để gửi tin nhắn giữa các tiến trình hoặc chương trình. Nó đã được triển khai bằng một số ngôn ngữ lập trình, bao gồm C, C++, Java và Python. Nhờ MPI, điều đó đã trở nên khả thi tính toán song song. Thêm chi tiết (tiếng Anh):

Lập trình mạng với ổ cắm internet

Mục tiêu-C

  • Một phiên bản khác của C, được tạo ra vào những năm 1980 để cung cấp khả năng triển khai C hoàn toàn hướng đối tượng. Ngôn ngữ này được sử dụng chính ngày nay là trên hệ điều hành Mac OSX và iOS. Cho đến gần đây ứng dụng iOS lẽ ra phải được viết bằng Objective-C, nhưng bây giờ bạn cũng có thể viết bằng Swift. Thêm chi tiết (tiếng Anh):

OCaml

  • OCaml là một ngôn ngữ máy tính chức năng hướng đối tượng. Theo truyền thống ML, nó được sử dụng rất nhiều để viết các ngôn ngữ và framework lập trình khác. Thêm chi tiết (tiếng Anh): .

Phát triển hệ điều hành

  • Đỉnh cao của công việc lập trình được coi là sự phát triển của một hệ điều hành. Nếu bạn muốn chứng minh với bản thân rằng bạn có thể viết bất cứ thứ gì thì không có gì tốt hơn là viết kernel hệ điều hành của riêng bạn và các công cụ liên quan của nó. Nhưng hãy cẩn thận: đây là cuộc hành trình chỉ dành cho những lập trình viên dũng cảm và chân chính! Thêm chi tiết (tiếng Anh): .

Perl

  • Một công cụ rất hữu ích cho hầu hết mọi lập trình viên. Là một ngôn ngữ thông dịch nên nó không cần phải biên dịch, đôi khi được gọi là “Con dao quân đội Thụy Sĩ” của các ngôn ngữ kịch bản. Thêm chi tiết (tiếng Anh):

KHUYẾN MÃI

  • Prolog là ngôn ngữ lập trình logic được thiết kế để xử lý ngôn ngữ tự nhiên. Thêm chi tiết (tiếng Anh):

Dữ liệu thuần túy

  • Pure Data là ngôn ngữ lập trình trực quan độc đáo. Nó được tạo ra đặc biệt để cho phép người dùng tạo các tác phẩm video, âm thanh và đồ họa. Thêm chi tiết (tiếng Anh): .

Python

  • Python là ngôn ngữ lập trình cấp cao. Một ngôn ngữ được thông dịch (không được biên dịch), còn được gọi là “ngôn ngữ kịch bản”. Chủ yếu được sử dụng như một công cụ để thực hiện các nhiệm vụ lập trình chuyên dụng như nhiệm vụ tự động hóa và phân tích dữ liệu. Nó có một bộ công cụ mạnh mẽ để tính toán toán học và khoa học và thường được các nhà nghiên cứu sử dụng. Thêm chi tiết (tiếng Anh):

Viên ngọc trên tay vịn

  • Ruby on Rails là một framework phát triển web cho ngôn ngữ lập trình Ruby. Nó cung cấp kiến ​​trúc MVC (Model View Controller), lớp trừu tượng hóa cơ sở dữ liệu và nhiều công cụ để tăng tốc quá trình lập trình ứng dụng web. Rất phổ biến để phát triển ứng dụng web nhanh chóng. Thêm chi tiết (tiếng Anh):

SAS

  • SAS là một ngôn ngữ chuyên dụng được thiết kế để phân tích dữ liệu thống kê. Được sử dụng rộng rãi trong chính phủ, học viện và doanh nghiệp. Đối với những người có một lượng lớn dữ liệu, SAS là sự lựa chọn hiển nhiên. Thêm chi tiết (tiếng Anh): .

Scala

  • Scala là một ngôn ngữ tương đối mới - ít nhiều là Java mới hơn và tốt hơn. Cái này ngôn ngữ xuất sắc dành cho các lập trình viên Java muốn làm việc hiệu quả hơn hoặc dành cho những người mới bắt đầu học lập trình và muốn học một ngôn ngữ mạnh mẽ sẽ không hạn chế họ trong tương lai. Thêm chi tiết (tiếng Anh): .

Cơ chế

  • Cơ chế ngôn ngữ cũ, nhưng vẫn được sử dụng để dạy lập trình và các môn học phức tạp hơn trong khoa học máy tính. Chủ yếu dựa trên Lisp và một phần dựa trên ALGOL. Thêm chi tiết (tiếng Anh): .

Cào

  • Ngôn ngữ lập trình Scratch được tạo ra đặc biệt để dạy lập trình cho trẻ em từ 8 đến 16 tuổi. Scratch rất dễ dàng và nó cho phép trẻ học những điều cơ bản về logic lập trình một cách thú vị. Thêm chi tiết (tiếng Anh):

mô phỏng

  • Simula – về mặt lịch sử ngôn ngữ quan trọng, vì đây là ngôn ngữ đầu tiên giới thiệu các khái niệm đã trở thành nền tảng cho lập trình hướng đối tượng. Thêm chi tiết (tiếng Anh): .

CƯỜI

  • SMIL (Ngôn ngữ tích hợp đa phương tiện được đồng bộ hóa) là một công cụ dành cho những người muốn tạo và phân phối bài thuyết trình. Đặc biệt hữu ích nếu bạn muốn tạo bản trình bày cần được cập nhật theo thời gian. Thêm chi tiết (tiếng Anh):

SQL

  • SQL (Ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ được sử dụng để giao tiếp với Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). SQL cho phép lập trình viên tạo cấu trúc dữ liệu, chèn và chỉnh sửa dữ liệu cũng như truy vấn nó. Thêm chi tiết (tiếng Anh):

Stata

  • Stata là môi trường phát triển và ngôn ngữ lập trình để giải quyết các vấn đề thống kê nghiêm trọng. Và mặc dù nó đã được tạo ra cách đây khá lâu nhưng nó vẫn được sử dụng rộng rãi. Nếu bạn tham gia vào công việc thống kê, Stata là một công cụ tuyệt vời. Thêm chi tiết (tiếng Anh):

Nhanh

  • Swift là ngôn ngữ lập trình mới được Apple phát triển cho iOS, OS X, watchOS, tvOS và Linux. Đây là ngôn ngữ của tương lai dành cho các nhà phát triển chương trình và ứng dụng cho thiết bị Apple. Thêm chi tiết (tiếng Anh):

S-PLUS

  • S-PLUS là phiên bản thương mại của ngôn ngữ lập trình S mạnh mẽ được thiết kế để thực hiện phân tích thống kê. Dự án GNU có phiên bản S riêng, được gọi là R. Tất cả nguồn lực cần thiết về S với trọng tâm là S-PLUS:

Lập trình UNIX

  • Độ rộng của lập trình trên Unix là rất lớn. Nó bao gồm phạm vi từ các tập lệnh quản trị đến mã dựa trên văn bản đến phát triển X Window. Thêm chi tiết (tiếng Anh):

XML

Bài soạn bởi: Akulov Ivan

Chúng ta có thực sự cần ngôn ngữ lập trình mới không? Tất nhiên, trên khoảnh khắc này có khá đủ chúng. Trong số rất nhiều ngôn ngữ mệnh lệnh, chức năng, hướng đối tượng, động, biên dịch, diễn giải và kịch bản, không nhà phát triển nào có thể hiểu được tất cả các khả năng hiện có.

Chưa hết, sự xuất hiện của các ngôn ngữ mới là chuyện khá phổ biến. Một số được tạo ra bởi sinh viên hoặc những người có sở thích dưới dạng dự án cá nhân, một số khác là sản phẩm của các nhà sản xuất phần mềm lớn. Ngay cả các công ty vừa và nhỏ cũng tham gia vào quá trình này, tạo ra các ngôn ngữ phù hợp với nhu cầu của ngành của họ. Vậy tại sao mọi người cứ liên tục phát minh lại bánh xe?

Thực tế là, bất chấp sức mạnh và tính linh hoạt của các ngôn ngữ phổ biến hiện nay, không có một cú pháp nào là phổ biến một cách lý tưởng. Hơn nữa, bản thân lập trình không ngừng phát triển. Sự phát triển của bộ xử lý đa lõi, lập trình đám mây, tính di động và kiến ​​trúc phân tán đã tạo ra những thách thức mới cho các nhà phát triển. Thêm hỗ trợ cho các tính năng, mô hình và mẫu mới nhất hiện có ngôn ngữ hiện có, đặc biệt là những cái phổ biến nhất, có thể quá phức tạp. Thỉnh thoảng giải pháp tốt nhất là bắt đầu lại từ đầu.

Như vậy, dưới đây là 10 ngôn ngữ lập trình tiên tiến, mỗi ngôn ngữ nhìn nhận nghệ thuật phát triển phần mềm từ một góc độ mới, giải quyết một vấn đề cụ thể hoặc một thiếu sót cụ thể của các ngôn ngữ phổ biến nhất hiện nay. Một số trong số đó đã là dự án đã hoàn thành, trong khi một số khác chỉ đang ở giai đoạn phát triển ban đầu. Có khả năng một số trong số chúng sẽ không bao giờ trở nên phổ biến, nhưng bất kỳ ngôn ngữ nào trong số chúng đều có thể là một thành tựu mang tính cách mạng sẽ thay đổi hoàn toàn việc lập trình - ít nhất là cho đến khi các ngôn ngữ mới được tạo ra.

JavaScript rất tốt để thêm yếu tố cơ bản tính tương tác của các trang web, nhưng khi mã ứng dụng web của bạn bao gồm hàng nghìn dòng, điểm yếu của ngôn ngữ sẽ lộ rõ. Đó là lý do Google tạo ra Dart, ngôn ngữ mà công ty tin rằng sẽ trở thành ngôn ngữ "bản địa" mới cho lập trình web.

Giống như JavaScript, Dart sử dụng cú pháp và từ khóa tương tự như cú pháp được sử dụng trong ngôn ngữ C. Tuy nhiên, có một điểm khác biệt đáng kể là trong khi JavaScript dựa trên nguyên mẫu thì các đối tượng trong Dart được xác định bằng các lớp và giao diện như trong C++ hoặc Java. Dart còn cho phép lập trình viên tùy ý định nghĩa các biến có kiểu tĩnh. Ý tưởng là biến Dart thành một ngôn ngữ quen thuộc, năng động và linh hoạt như JavaScript, đồng thời cho phép các nhà phát triển viết mã nhanh, dễ thực thi và khó mắc lỗi.

Phi tiêu ngày nay không được sử dụng rộng rãi. Nó được thiết kế để chạy trên máy khách hoặc máy chủ (giống như Node.js), nhưng cách duy nhất để chạy phiên bản máy khách của mã Dart là biên dịch chéo nó thành JavaScript. Tuy nhiên, ngay cả sau đó nó sẽ không chạy trên tất cả các trình duyệt. Nhưng vì Dart được phát hành theo giấy phép loại BSD miễn phí nên bất kỳ người bán nào đồng ý điều khoản của Google, được sử dụng miễn phí ngôn ngữ này trong các sản phẩm của mình. Tất cả những gì Google còn lại phải làm là thuyết phục toàn bộ ngành.

Mã F# có phần giống với mã OCaml nhưng có cú pháp thú vị riêng. Ví dụ, để tạo thuận lợi cho việc tính toán khoa học các loại số dữ liệu trong F# có thể là đơn vị đo lường. F# cũng bao gồm các cấu trúc để hỗ trợ I/O không đồng bộ, song song hóa CPU và đầu ra GPU.

Sau đó thời gian dài trưởng thành tại Microsoft Research, ngày nay F# xuất xưởng với Visual Studio 2010. Thậm chí tốt hơn, nhưng không phải điển hình cho một tập đoàn, Microsoft đã tạo ra một trình biên dịch F# và thư viện gốc có sẵn theo giấy phép mở Apache. Bạn có thể bắt đầu sử dụng nó miễn phí và thậm chí sử dụng nó trên hệ thống Mac và Linux (sử dụng thời gian chạy Mono).

Đương nhiên, với loại hệ thống tích hợp này, cuối cùng điều gì đó kỳ diệu phải xảy ra. Thời gian chạy Opa tích hợp máy chủ web và hệ thống quản lý cơ sở dữ liệu riêng, không thể thay thế bằng các lựa chọn thay thế độc lập. Tuy nhiên, đây có thể không phải là vấn đề lớn khi xét đến khả năng phát triển các ứng dụng web hiện đại dựa trên dữ liệu chỉ với vài chục dòng mã. Opa miễn phí và hiện có sẵn cho nền tảng Linux và Mac OS X 64-bit, với các cổng khác đang được phát triển.

Fantom được phân phối miễn phí theo Giấy phép Học thuật Miễn phí 3.0 và có sẵn cho các nền tảng tương tự Windows và Unix (bao gồm cả Mac OS X).

Ngôn ngữ lập trình được khám phá # 7: Zimbu

Do tính chất hỗn hợp của nó, cú pháp của Zimbu rất độc đáo và cụ thể, nhưng đồng thời có rất nhiều chức năng. Nó sử dụng các biểu thức và toán tử tương tự như các biểu thức và toán tử được sử dụng trong C, nhưng có từ khóa, kiểu dữ liệu và cấu trúc khối riêng. Nó hỗ trợ quản lý bộ nhớ, chủ đề và đường ống.

Vấn đề duy nhất là tính di động. Mặc dù Zimbu là một ngôn ngữ được biên dịch nhưng trình biên dịch của nó tạo ra mã ANSI C và tập tin nhị phân chỉ có thể được tạo trên nền tảng có trình biên dịch C tích hợp.

Thật không may, dự án Zimbu đang được phát triển. Bạn có thể tự tạo trình biên dịch và một số chương trình ví dụ, nhưng không phải tất cả mã Zimbu thực tế đều sẽ biên dịch và chạy đúng cách. Không phải tất cả các hàm được khai báo đều chưa được phát triển và một số hàm đã được trình bày không hoạt động chính xác. Đặc tả ngôn ngữ cũng có thể thay đổi theo thời gian, thêm từ khóa, loại và cú pháp nếu cần. Do đó, tài liệu vẫn chưa đầy đủ. Tuy nhiên, nếu bạn muốn dùng thử, các tiện ích sơ bộ đã có sẵn theo giấy phép Apache.

Nghiên cứu ngôn ngữ lập trình #8: X10

Xử lý song song từng là một lĩnh vực chuyên biệt trong phát triển phần mềm, nhưng với sự phát triển của bộ xử lý đa lõi và tính toán phân tán, tính song song đã trở nên phổ biến. Đáng tiếc là các ngôn ngữ lập trình hiện tại vẫn chưa theo kịp xu hướng này. Đó là lý do tại sao IBM Research đang tạo ra X10, một ngôn ngữ được thiết kế đặc biệt cho các kiến ​​trúc song song hiện đại nhằm tăng năng suất của nhà phát triển lên "gấp 10 lần".

Có thể thực hiện đồng thời trong X10 nhờ mô hình lập trình PGAS (Không gian địa chỉ toàn cầu được phân vùng). Mã và dữ liệu được phân bổ thành các khối và phân bổ trên các "không gian" khác nhau, do đó giúp dễ dàng mở rộng quy mô chương trình từ nguyên mẫu một luồng (một khoảng trắng) sang nguyên mẫu đa luồng chạy trên một hoặc nhiều bộ xử lý đa lõi(nhiều khoảng trắng) trong một cụm hiệu suất cao.

Mã X10 giống với Java nhất. Về cơ bản, thời gian chạy X10 có sẵn ở cả dạng tệp thực thi tích hợp và tệp lớp cho JVM. Trình biên dịch X10 có thể tạo mã nguồn bằng C++ hoặc Java. Có kế hoạch phát triển khả năng tương thích trực tiếp với Java trong tương lai.

Trong khi đó, ngôn ngữ đang phát triển, mặc dù nó đã khá phát triển. Trình biên dịch và thời gian chạy có sẵn cho nhiều nền tảng khác nhau, bao gồm Linux, Mac OS X và Windows. BẰNG tiện ích bổ sung là một môi trường phát triển tương tác (IDE) dựa trên Eclipse và một trình gỡ lỗi, cả hai đều được cấp phép theo Giấy phép Công cộng Eclipse.

Nghiên cứu ngôn ngữ lập trình #9: haXe

Nhiều ngôn ngữ có thể được sử dụng để viết mã di động. Trình biên dịch C có sẵn cho hầu hết các kiến ​​trúc CPU và mã byte Java sẽ chạy ở bất cứ nơi nào có JVM. Nhưng haXe (phát âm là hex) không chỉ có tính di động. Nó là một ngôn ngữ đa nền tảng có thể được sử dụng trong nhiều môi trường hoạt động khác nhau, từ môi trường nhúng

    Danh sách các ngôn ngữ lập trình Theo danh mục Theo thời gian Phả hệ Một danh sách các ngôn ngữ lập trình được nhóm theo danh mục được cung cấp. Một số ngôn ngữ thuộc nhiều hơn một loại. Nội dung... Wikipedia

    Danh sách các ngôn ngữ lập trình Theo danh mục Phả hệ theo thời gian Một danh sách phả hệ của các ngôn ngữ lập trình được cung cấp. Ngôn ngữ được phân loại theo các ngôn ngữ tiền sử có ảnh hưởng mạnh mẽ đến sự hình thành ... Wikipedia

    Nội dung 1 Theo nhà sản xuất hoặc nền tảng 1.1 Flash 1.2 Java 1.3 Microsof ... Wikipedia

    Danh sách các ngôn ngữ lập trình theo danh mục Niên đại phả hệ của các ngôn ngữ lập trình là danh sách các ngôn ngữ lập trình được sắp xếp theo thứ tự thời gian. Nội dung... Wikipedia

    Bài viết này nên được Wiki hóa. Vui lòng định dạng nó theo các quy tắc định dạng bài viết. Các quy ước... Wikipedia

    Trang này là một danh sách thông tin. Ngôn ngữ lập trình .NET (ngôn ngữ hỗ trợ CLI hoặc ngôn ngữ CLI) ngôn ngữ lập trình máy tính được sử dụng để tạo thư viện và chương trình đáp ứng yêu cầu của Comm ... Wikipedia

    Bài chi tiết: Trình soạn thảo văn bản Danh sách các trình soạn thảo văn bản Trình chỉnh sửa Windows và bảng so sánh. Nội dung 1 Bảng so sánh các trình soạn thảo văn bản nổi tiếng ... Wikipedia

    Ngôn ngữ lập trình C# là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay. Phần mềm xử lý mã nguồn mở Paint.NET đồ họa raster SharpDevelop IDE mở cho ngôn ngữ C#, Ngôn ngữ lập trình.NET (VB.NET), Boo ... Wikipedia

    Đây là danh sách phần mềm được Tổ chức Phần mềm Tự do phát triển như một phần của dự án GNU UNIX, một hệ điều hành tương tự bao gồm toàn bộ phần mềm miễn phí. Hầu hết các gói này cũng... ... Wikipedia

    Bài viết hoặc phần này cần sửa đổi. Vui lòng cải thiện bài viết theo đúng quy định viết bài... Wikipedia

Sách

  • Python dành cho trẻ em. Hướng dẫn lập trình của Jason Briggs. Giới thiệu cuốn sách Cuốn sách này là bài hướng dẫn về một trong những ngôn ngữ lập trình phổ biến nhất hiện nay - Python. Bắt đầu từ những bước đơn giản nhất, từng bước một bạn sẽ viết...
  • JavaScript dành cho trẻ em. Hướng dẫn lập trình, Morgan Nick. Giới thiệu về cuốn sách Cuốn sách này sẽ cho phép bạn đi sâu vào lập trình và thành thạo JavaScipt một cách dễ dàng. Bạn sẽ viết một số trò chơi thực tế - tìm kiếm kho báu trên bản đồ, "Người treo cổ" và "Rắn". Trên mỗi...

Zalina Ngày 13 tháng 1 năm 2016 lúc 03:42 chiều

Ngôn ngữ khác nhau lập trình và lĩnh vực ứng dụng của chúng. Bài giảng trên Yandex

  • Blog của công ty Yandex,
  • Phát triển trang web,
  • Lập trình,
  • Lập trình công nghiệp

Chúng tôi quyết định dành bài viết đầu tiên của mình trong năm nay cho một chủ đề rất cơ bản, một bài giảng đã được giảng tại Small ShAD. Nó có sự tham gia của những học sinh trung học quan tâm đến công nghệ, do đó tính đặc thù của bài thuyết trình - bài giảng sẽ đặc biệt thú vị với những bạn mới bắt đầu học lập trình và đang suy nghĩ về hướng phát triển. Đối với họ, Yandex có khóa học “Giới thiệu về lập trình (C++)”, có thể tham gia trên nền tảng Stepic.org.

Giảng viên Mikhail Gustokashin là người phụ trách các chương trình học thuật tại Yandex, giám đốc trung tâm tổ chức các cuộc thi sinh viên tại Khoa Khoa học Máy tính của Trường Kinh tế Cao cấp. Mikhail đã đào tạo hàng chục người chiến thắng và đoạt giải trong các kỳ thi Olympic Lập trình Toàn Nga.

Bài giảng nói về những ngôn ngữ lập trình, chúng khác nhau như thế nào, chúng xuất hiện như thế nào và cái nào tốt hơn, cái nào tệ hơn. Ở phần đầu, chúng ta sẽ nói một chút về lịch sử của ngôn ngữ - chúng xuất hiện như thế nào, con người bắt đầu lập trình như thế nào, mọi thứ phát triển như thế nào, những gì đang xảy ra hiện nay. Phần thứ hai sẽ đề cập đến những nhiệm vụ mà ngôn ngữ phù hợp, cách “chọn ngôn ngữ yêu thích và tận hưởng cuộc sống”. Theo ý kiến ​​​​của ông, giảng viên cũng sẽ nói một chút về cách bạn có thể học tất cả những điều này và sau đó kiếm được việc làm.

Như mọi khi, dưới vết cắt - bảng điểm chi tiết bài giảng để bạn có thể điều hướng nội dung của nó.

Lịch sử ngôn ngữ lập trình

Hãy bắt đầu từ đầu. Lúc đầu, máy tính thậm chí còn không có bàn phím! Tức là mọi thứ đều rất tệ - họ không có bàn phím hay màn hình, họ chỉ có thẻ đục lỗ (đây là những thứ nhỏ có lỗ hoặc không có lỗ). Theo đó, hoặc họ dán những chiếc ghim vào đó, hoặc họ chiếu đèn vào đó. Nếu có một lỗ (hoặc ngược lại, không) - điều này có nghĩa là số 0 hoặc một. Và các chương trình vào thời điểm đó được viết bằng mã máy - mọi thao tác trên máy tính (cộng, trừ, một số thao tác phức tạp hơn) đều có một số loại mã máy. Chính mọi người đã chọn mã này từ một dấu hiệu, tất cả các loại địa chỉ trong bộ nhớ, họ dùng tay gõ ra tất cả và đưa vào đầu đọc - và tất cả đều được tính. Tất nhiên, công việc của một lập trình viên khi đó có lẽ không đặc biệt thú vị - tạo ra các lỗ hổng - và với sự phát triển của khoa học công nghệ, tất nhiên, họ bắt đầu nghĩ ra đủ thứ “thú vị” hơn. Ví dụ: trình biên dịch chương trình, điều này đã làm cho cuộc sống dễ dàng hơn phần nào.

Chà, làm thế nào anh ấy làm cho cuộc sống dễ dàng hơn? Thay vì nhớ rằng có một loại mã “ma thuật” nào đó cho lệnh, tất cả các loại từ được sử dụng tương tự như tiếng Anh “con người” - một số là add hoặc mov - và sau đó là các thanh ghi hoặc vùng bộ nhớ, các biến cần thiết cho những thứ này đã được liệt kê thực hiện các hoạt động. Nhưng rõ ràng là điều này, nói chung, cũng đòi hỏi khá nhiều nỗ lực tinh thần để ghi nhớ trong đầu chúng ta những gì chúng ta có, những biến số ở đâu và những gì đang xảy ra nói chung. Tại sao điều này xảy ra? Bởi vì máy tính vốn “ngu ngốc” và không thể hiểu được điều gì “thông minh” hơn. Trên thực tế, việc lắp ráp mã máy từ trình biên dịch mã cũng đòi hỏi thời gian và bộ nhớ (tất nhiên là vào thời điểm đó rất ít).

Dần dần, người ta thấy rõ rằng việc phát triển những chương trình phức tạp lớn như vậy là rất khó khăn. Năng suất của lập trình viên trong các nhóm này là cực kỳ thấp - tức là anh ta viết vài dòng mỗi ngày (có ý nghĩa) và mỗi dòng không làm gì đặc biệt - một số phép tính số học đơn giản. Và mọi người muốn làm cho các ngôn ngữ trở nên giống với ngôn ngữ của con người hơn, đặc biệt là tiếng Anh, để việc viết chương trình trở nên dễ dàng và thuận tiện hơn. Và chúng ta đi thôi!

Ngôn ngữ cũ và chết

Một trong những ngôn ngữ đầu tiên là Fortran. Nhân tiện, nó cũng được đục lỗ trên các thẻ đục lỗ - có những thẻ đục lỗ đặc biệt để đục lỗ các chương trình Fortran. Nhưng nếu bạn lấy chiếc Fortran này bây giờ, theo tôi, nó thậm chí còn nằm trong khoảng 50-60. xuất hiện - và nếu bạn cố viết điều gì đó lên đó, bạn sẽ rất khó chịu, tôi đảm bảo với bạn! Fortran hiện đại vẫn còn tồn tại nhưng khá khác so với trước đây.

Các ngôn ngữ khác - bây giờ tôi sẽ viết một điều mà có lẽ bạn chỉ nghe đến ở nhiều sự kiện khác nhau nơi họ nói về lịch sử lập trình - đây là COBOL. Đó là một ngôn ngữ để viết các ứng dụng kinh doanh. Ứng dụng kinh doanh là gì? Một số giao dịch trong ngân hàng, một số giao dịch khác, tất cả đều được viết bằng Cobol. Tất nhiên, nó không phổ biến ở đây. Tôi nghĩ bạn sẽ rất khó tìm được một lập trình viên Cobol ở Moscow. Và một nơi nào đó không phải ở Moscow - thậm chí còn khó khăn hơn. Nhưng thật đáng ngạc nhiên, chỉ 10 năm trước, hơn một nửa số mã mà nhân loại viết được viết bằng Cobol. Và cho đến ngày nay, một phần đáng kể của tất cả các giao dịch ngân hàng được thực hiện bằng cách sử dụng các chương trình được viết trong đó (COBOL) và mọi người vẫn viết điều gì đó vào đó.

Ngoài ra còn có một ngôn ngữ "vui nhộn", nó được gọi là Algol (phiên bản thứ 68, đặc trưng cho năm tạo ra nó). Đây là một ngôn ngữ thuật toán. Nói chung, họ đã có thể làm được điều gì đó ở đó, nhưng bây giờ chúng tôi không quan tâm lắm đến những gì họ có thể làm. Và với điều này, chúng ta có thể kết thúc chuyến du ngoạn về thời cổ đại và những ngôn ngữ tương đối ít được sử dụng và chuyển sang những gì vẫn còn sống (và đang sống tích cực).

Ngôn ngữ cũ nhưng sống động

Algol được phát minh ở Châu Âu và Fortran được sử dụng chủ yếu ở Hoa Kỳ - không có sự khác biệt lớn. Xu hướng nào đáng chú ý? Lúc đầu, mọi thứ đều phức tạp và để viết được, bạn gần như phải là một kỹ sư, một kỹ sư điện, để hiểu được những điểm tiếp xúc nào được kết nối và thứ gì khác để lập trình. Rồi bạn cũng phải ngồi với những mảnh giấy mà đếm kỷ niệm, chăm sóc nó. Và dần dần mọi thứ trở nên đơn giản hơn, đơn giản hơn, đơn giản hơn và thậm chí còn đơn giản hơn đối với người lập trình - nghĩ một người càng ít càng tốt, tự động làm nhiều nhất có thể. Vào khoảng cuối giai đoạn này (giảng viên chỉ vào Algol và Kobol), các ngôn ngữ bắt đầu xuất hiện mà theo một nghĩa nào đó, đã “tồn tại” cho đến ngày nay.

NỀN TẢNG. Có lẽ một số người vẫn viết điều gì đó trong đó, ít nhất tôi thấy rằng ở một số cơ sở họ dạy bằng QBasic - có một cửa sổ màu xanh nơi viết “1989”. Nói chung là anh ấy đang “sống hết mình”! Nó được phát minh như một ngôn ngữ dành cho những người không phải lập trình viên. Vào thời điểm đó, lập trình viên là một nghề rất chuyên biệt. Và ở đây họ nói với bạn: "Chúng tôi có một ngôn ngữ Cơ bản tuyệt vời và bất kỳ người hợp lý nào cũng có thể viết chương trình bằng đó - thật dễ dàng." Một lần nữa, BASIC đó và BASIC hiện đại là một sự khác biệt rất lớn. Tất cả những dòng này được đánh số sau 10, đủ loại GOTO và những nỗi kinh hoàng khác - chúng không còn liên quan gì đến BASIC hiện đại nữa, và thậm chí đến BASIC của năm 1989, chúng cũng không liên quan gì nhiều đến nó.

Một câu chuyện hài hước khác là ngôn ngữ Pascal, được biết đến rộng rãi trong giới đại học, chủ yếu ở Nga và các nước trước đây. Liên Xô. Nó đã và đang tiếp tục được sử dụng theo những cách đáng ngạc nhiên. ngôn ngữ giáo dục. Ở phần còn lại của thế giới, nó ít phổ biến hơn, nhưng nó vẫn sống khỏe mạnh. Có một người tên là Wirth - anh ấy là một nhà khoa học, một nhà lý luận. Anh ấy đã tham gia vào cuộc thảo luận về Algol, anh ấy không thích những gì đã xảy ra và anh ấy đã nghĩ ra ngôn ngữ của riêng mình - Pascal. Và sau đó công ty Borland (và trước đó là nhiều công ty khác - đặc biệt là Apple có liên quan) đã chiếm lấy nó và phá hỏng mọi thứ. Anh ấy đã có lý thuyết hay, mỏng - “mọi thứ sẽ ổn thôi” - và họ lấy nó và nhét vào đó những thứ mọi người cần cho công việc. Chà, nó không đẹp như anh mong muốn.

Và cuối cùng... C được phát minh bởi các kỹ sư. Nếu Pascal được phát minh bởi một nhà khoa học thì C được phát minh bởi Kernighan và Ritchie, họ làm kỹ sư tại Bell. Làm sao chuyện này lại xảy ra? Vào thời điểm đó, không thể viết bất cứ điều gì có hệ thống bằng các ngôn ngữ này (giảng viên chỉ Fortran, COBOL, Algol). "có tính hệ thống" là gì? Ví dụ, một hệ điều hành, một số trình điều khiển, một số thứ khác. Những ngôn ngữ này được thiết kế để tính toán toán học, tính toán kinh doanh, cho tất cả những điều đó. Và mọi thứ khác đều được viết bằng ngôn ngữ hội. Đã có một số ngôn ngữ, giờ đây chúng đã chết, tức là ngôn ngữ C không xuất hiện ngay từ Assembly mà thông qua một số thứ trung gian.

Vấn đề ở đây là gì? Kernighan và Ritchie thích chơi đồ chơi Tiểu hành tinh - một con tàu vũ trụ bay và có những tiểu hành tinh, anh ta bắn vào chúng và chúng vỡ ra. Họ có một máy chủ để chơi, nhưng có rất nhiều người ở đó và đồ chơi chạy chậm. Và họ phát hiện ra đâu đó trong văn phòng của mình rằng họ có một loại máy tính nào đó mà không ai sử dụng. Nhưng có một vấn đề - nó có kiến ​​trúc khác và trò chơi được viết bằng Assembly.

Tất nhiên, họ đã viết lại nó, thậm chí còn thêm một số tính năng để chơi trên đó. Nhưng điều này khiến họ nảy ra ý tưởng rằng việc viết lại cho một kiến ​​trúc mới mỗi lần là không thông minh cho lắm. Và họ quyết định viết một ngôn ngữ cấp cao phù hợp cho lập trình hệ thống, nghĩa là trong đó có thể quản lý bộ nhớ, trong đó có thể hiểu mọi thứ nằm ở đâu và cách truy cập những phần bộ nhớ này. . Và thế là ngôn ngữ C xuất hiện, có ảnh hưởng rất lớn đến mọi thứ sau đó. Tất cả chúng (giảng viên chỉ ra Algol, Fortran và các ngôn ngữ khác được đề cập) đều có ảnh hưởng lớn, nhưng C - đúng vậy...

Theo đó, nó là ngôn ngữ chính trong Unix, một hệ điều hành thậm chí còn phổ biến hơn vào thời điểm đó so với bây giờ. Và vào khoảng những năm 80, tình hình diễn ra như thế này (giảng viên dạy các ngôn ngữ Basic, C và các ngôn ngữ được đề cập khác). Giả sử rằng tất cả những thứ này đã dần biến mất ở đất nước chúng ta (giảng viên xóa đề cập đến Ngôn ngữ hội, Fortran và Algol)... Và trong những năm 80, máy tính trở nên nhỏ hơn, thông minh hơn, rẻ hơn và mọi người muốn đủ thứ kỳ lạ để cuộc sống trở nên tốt đẹp hơn, sống vui vẻ hơn.

Ngôn ngữ từ thập niên 80

Một trong những điều kỳ lạ đầu tiên là nó là ngôn ngữ C++. Ngôn ngữ C có số lượng lớn những thiếu sót (à, nói chung là rất lớn) - bạn có thể làm mọi thứ trên đó, bao gồm tự bắn vào chân mình, tự bắn vào chân mình bằng một phát minh, nói chung là bằng chân kia, tự bắn vào chân mình bằng chân kia - làm bất cứ điều gì bạn muốn. Nhưng đồng thời, một số công việc kiến ​​​​trúc được thực hiện ở đó khá khó khăn - một lần nữa, như trong Assembly, chúng ta phải theo dõi xem chúng ta đang ở đâu, chúng ta đã phân bổ những gì và bộ nhớ nào; Nó luôn luôn “chảy” đi đâu đó, bộ nhớ này - tức là chúng ta đã cấp phát, quên xóa, xóa nhầm, vượt quá giới hạn bộ nhớ, nói chung - chúng ta đã gặp phải một loạt vấn đề.

C++ ban đầu được tạo ra như một tập hợp các phần bổ sung cho ngôn ngữ C để giúp việc phát triển dễ dàng hơn. Vào thời điểm đó, lập trình hướng đối tượng đã trở thành mốt và mọi người quyết định rằng mọi thứ có thể được mô tả dưới dạng phân cấp, nghĩa là bạn có một quả bóng (trừu tượng), bạn kế thừa từ nó một quả bóng đá, một quả bóng chuyền, một quả bóng trừu tượng khác . Lúc đó thật là thời thượng khi “bây giờ chúng ta đang viết mọi thứ dưới dạng một hệ thống phân cấp nào đó, và mọi thứ sẽ ổn, cuộc sống sẽ tốt hơn, mọi thứ sẽ ổn và thế là xong.” Theo một nghĩa nào đó, C++ đã triển khai cách tiếp cận dựa trên đối tượng này - nó không phải là ngôn ngữ lập trình hướng đối tượng đầu tiên, nhưng nó đã trở nên khá phổ biến và tất cả các loại tính năng bắt đầu xuất hiện trong đó. Đồng thời, C++ vẫn giữ được khả năng tương thích gần như hoàn toàn (vào thời điểm đó) với ngôn ngữ C; một chương trình viết bằng C đã được biên dịch thành công thành C++ trong 99% trường hợp và thậm chí hoạt động theo cách tương tự. Điều này nhằm mục đích giúp dễ dàng chuyển từ C sang C++.

Bên cạnh đó cách tiếp cận đối tượng(trong C++) Thư viện mẫu chuẩn (STL) xuất hiện khá nhanh. Tôi nghĩ rằng ở trường, những người vẫn đang học Pascal đã phát hiện ra rằng, thứ nhất, bạn không có tính năng sắp xếp tích hợp sẵn (trong Borland Pascal cổ kính, màu xanh lam, bây giờ nó đã có trong các phiên bản hiện đại) - có một ví dụ (nguồn code) sắp xếp, nó có thể được sao chép và dán. Nhưng nếu bạn muốn sắp xếp các số nguyên ở đây, ở đây bạn muốn số thực, và ở đây các chuỗi có thể so sánh với nhau, bạn phải viết ba loại khác nhau thực hiện chính xác cùng một việc, chúng chỉ có các loại khác nhau dữ liệu. Điều này không tốt lắm và các mẫu không xuất hiện ngay lập tức trong C++ đã làm giảm bớt vấn đề này rất nhiều. Nghĩa là, bạn đã có một chương trình trừu tượng đã sắp xếp thành công thứ gì đó có thể so sánh với nhau.

Ngôn ngữ kịch bản từ những năm 90

Nhưng thời gian không đứng yên; vào thập niên 80, rất nhiều điều thú vị đã xảy ra. Nhưng đâu đó vào khoảng đầu những năm 80 và 90, máy tính đã trở nên tốt đến mức có thể làm được những việc rất kỳ lạ và rất kém hiệu quả. Đặc biệt, đây là những ngôn ngữ kịch bản không được biên dịch thành mã máy mà được thông dịch. BASIC đôi khi cũng được thông dịch, nhưng những ngôn ngữ kịch bản này chủ yếu nhằm mục đích xử lý văn bản - ví dụ như Perl, Python (khi đó nó không nổi tiếng lắm), PHP, Ruby - đây là những ngôn ngữ kịch bản rằng ở mức độ này hay mức độ khác, họ vẫn sống (tất cả họ đều xuất hiện trước năm 2000, thậm chí sớm hơn nhiều).

Chúng ta hãy điểm qua chúng một chút, vì đây là những thứ cụ thể và hiện được sử dụng ở nhiều nơi. Ý tưởng là gì? Nếu chúng tôi không biên dịch, thì chúng tôi có thể cho phép nhiều hơn nữa. Ví dụ, một chương trình có thể xem mã của nó và bằng cách nào đó sử dụng nó; cô ấy biết những gì đang xảy ra trong mình và nhờ đó cô ấy có thể làm được rất nhiều điều thú vị.

Perl được thiết kế để xử lý văn bản - vào thời đó, máy tính có rất nhiều bộ nhớ đến mức bạn có thể nhét một số văn bản vào đó và làm điều gì đó hữu ích với văn bản này (ví dụ: đếm từ, thực hiện một số loại tìm kiếm). Nhưng, theo ý kiến ​​của tôi, nó được thiết kế bởi những người hơi điên rồ, bởi vì có một câu nói đùa về nó: “Bất kỳ bộ ký tự nào được viết đều là một chương trình Perl hợp lệ.” Theo tôi, bạn chỉ có thể viết lên đó, bạn không thể đọc được. Khi tôi nhìn vào mã Perl và cố gắng hiểu điều gì đó, tôi chẳng hiểu gì cả. Có lẽ nếu tôi biết anh ấy nhiều hơn, tôi sẽ hiểu được điều gì đó, nhưng khi tôi nghe từ những người vẫn biết cách, họ nói rằng viết lại sẽ dễ dàng hơn. Nghĩa là, các chương trình trở nên ngắn và việc viết lại chúng từ đầu thực sự dễ dàng hơn là tìm ra những gì ở đó và sửa nó.

Vào khoảng thời gian đó, giữa những năm 90, Internet xuất hiện. Lúc đầu, đó là thư, các trang web có HTML tĩnh, nhưng mọi người muốn thêm một số loại động lực vào đó, để mọi thứ sẽ diễn ra một cách linh hoạt, một số biểu mẫu có thể được điền, sổ khách có thể được tạo và những thứ khác. Theo đó, điều này đòi hỏi một số loại tương tác, họ đã đưa ra một giao thức, cách nó tương tác và quan trọng nhất là việc tạo ra các trang tĩnh (có điều kiện) này sẽ được “phát ra” cho người dùng để đáp ứng yêu cầu của anh ta.

Nói chung lúc đó không có gì ngoài Pearl phù hợp cả. Viết một trình xử lý bằng C hoặc C++ thuần túy là một ý tưởng tồi. Và vì thiếu thứ gì tốt hơn nên vào thời điểm đó (và trong một thời gian khá dài) Pearl là ngôn ngữ phổ biến để phát triển web. Tất nhiên, quy mô không thể so sánh với những gì đang diễn ra hiện nay.

PHP xuất hiện dưới dạng... tình cờ. Một người nhanh chóng ngừng làm việc này - anh ấy đã tạo trang riêng của mình, anh ấy đã Sổ khách một số, cái gì đó khác, một số thứ. Và anh ấy đã viết một bộ macro cho Perl tương tự như C, vì anh ấy biết cách sử dụng C, đơn giản vì nó quá tiện lợi đối với anh ấy. Và tôi gọi nó là Trang chủ cá nhân. Anh ấy chia sẻ nó và nói: “Mọi người, hãy nhìn những gì tôi viết, mọi thứ ở đây rõ ràng hơn nhiều so với trong Perl và bạn có thể chỉnh sửa nó.” Và mọi người thích nó.

Sau đó anh từ bỏ công việc kinh doanh này. Nhìn chung, kết quả là PHP này bắt đầu tồn tại và theo thời gian trở nên phổ biến hơn nhiều so với Perl. Nhưng “chấn thương khi sinh” này của anh ấy (được coi là một tập hợp macro cho Pearl) đã chơi một trò đùa khá tàn nhẫn với anh ấy. Ngôn ngữ trở nên kỳ lạ. Tức là nó tự phát triển, không ai thiết kế, không ai quản lý quá trình phát triển (không phải công ty hay bất kỳ người nào), nhưng có rất nhiều nhóm, mỗi nhóm đều cưa những gì họ thích. Kết quả là, các chức năng được đặt tên khác nhau, thậm chí không có kiểu dáng, mọi thứ đều được gạch dưới, về cơ bản là lộn xộn, các cài đặt ở đây và ở đó, và tất cả những thứ này sẽ hoạt động như thế nào thì không rõ ràng lắm. Nhưng bạn có thể ngồi xuống và viết bằng PHP trong hai giờ, vì đó là mục đích của nó.

Python và Ruby: Ruby bây giờ ít phổ biến hơn, Python bằng cách nào đó được “lên kế hoạch” tốt hơn, hãy nói về nó sau. Rõ ràng là vào thời đó, đây là những ngôn ngữ có tính chuyên môn cao (giảng viên chỉ vào Perl, Python, Ruby, PHP) cho các mục đích chuyên môn cao. Nói chung, vào thời điểm đó không có ai viết bất kỳ chương trình hệ thống nào, không có logic nghiệp vụ nào trong đó và bây giờ cũng không có nhiều người làm việc đó.

Ngôn ngữ được biên soạn từ những năm 90

Chúng ta sẽ đi vòng quanh những thời điểm tương tự, nhưng theo hướng khác. Vào thời điểm đó, chúng tôi sử dụng C++ cho hầu hết mọi thứ cần viết, không phải cho web, không phải để xử lý văn bản mà chỉ cho các ứng dụng, hệ điều hành, đồ chơi - nói chung, cho bất cứ thứ gì. Nhưng C++ thực sự là một ngôn ngữ đáng sợ. Tại sao? Bởi vì, thứ nhất, nó kế thừa toàn bộ vấn đề của C do tính tương thích ngược. Ở đó, bạn vẫn có thể tự sát theo hàng triệu cách khác nhau, giống như những cách đã có trong C (đương nhiên, những cách mới đã được thêm vào trong C++). Đồng thời, nếu bạn viết mọi thứ tốt và chính xác, như dự định của các tác giả C++, thì tất nhiên, bạn không thể tự sát bằng cách sử dụng các phương pháp mã C cũ nữa và có vẻ như có ít hơn họ. Tuy nhiên, nó có một mô hình vật thể rất kỳ lạ và đặc biệt. Việc chia một chương trình thành các mô-đun, thành các phần nào đó, thường đến từ C (nếu bạn biết cách viết include trong C hoặc C++ - trên thực tế, nó chỉ nhằm mục đích chèn văn bản thư viện vào chương trình của bạn, trong Cuối cùng, khi bạn viết một loạt các phần bao gồm, bạn có tất cả mọi thứ - nếu đó là "nguyên thủy", như lúc đầu - mọi thứ được chèn vào một tệp và sau đó tất cả phải mất một thời gian rất dài để biên dịch, bởi vì cùng một Pascal , Virtovsky, đã chu đáo hơn nhiều về vấn đề này, những phiên bản sau này thậm chí còn trở nên tốt hơn.

Nói chung, C++ có rất nhiều nhược điểm. Lập trình viên phải có trình độ cao để viết bằng C++, và những lập trình viên như vậy rất tốn kém (và đào tạo, và một số thứ khác, tức là rất khó tìm được lập trình viên trên thị trường, họ cần được trả rất nhiều tiền, và nói chung đây là không phải vấn đề... ). Và máy tính của chúng ta đang đếm ngày càng nhanh hơn, chúng trở nên rẻ hơn, mọi người đang mua máy tính mới và muốn thêm nhiều ứng dụng, nói chung là có thêm đồ chơi cho điện thoại - thêm niềm vui.

Đây là cách Java xuất hiện. Ngoài ra còn có một câu chuyện khá hài hước về việc ngôn ngữ này có tên như thế nào. Ở đó có những lập trình viên, họ uống cà phê mọi lúc và vào thời điểm đó, uống cà phê được trồng trên đảo Java là mốt. Ngôn ngữ này được hình thành như một ngôn ngữ dành cho các thiết bị tích hợp, đặc biệt là cho máy pha cà phê. Đây là lý do cái tên này ra đời...
Điều gì đã bắt đầu với cô ấy, điều gì tốt ở cô ấy và tại sao cô ấy lại nổi tiếng đến vậy? Đầu tiên, họ đã loại bỏ hoàn toàn di sản của Sishnoi. Không có dấu hiệu, xin lỗi ít cách hơn bắn ra một phần cơ thể của bạn và phá vỡ mọi thứ. Thứ hai, họ đã giới thiệu nhiều ý tưởng gần đây hơn về mặt mô hình đối tượng- nghĩa là, C++ xuất hiện sớm hơn nhiều so với Java và sử dụng mô hình đối tượng “hoang dã” cổ xưa hơn. Chà, ở đây (giảng viên chỉ vào Java) lúc đó nó đã được nghĩ ra nhiều hơn, và về mặt lý thuyết thì mọi người đã nghĩ, còn trên thực tế, họ đã áp dụng và làm cho mọi thứ trở nên thú vị hơn nhiều.

Và cuối cùng, thứ ba. Các chương trình Java của chúng tôi được biên dịch không phải thành mã máy mà thành mã cho máy ảo. Tức là bạn đã có một máy ảo (VM) JVM - Java. Các chương trình của bạn đã được tập hợp thành một loại biểu diễn trung gian nào đó và sau đó, với sự trợ giúp của chiếc máy này, chúng đã được thực thi. Điều này đã mang lại điều gì? Thứ nhất, nó chậm lại, thứ hai, nó ngốn bộ nhớ với một lực khủng khiếp, thứ ba, nó có thể di động đi bất cứ đâu (về mặt lý thuyết) - ngay cả với máy pha cà phê, thậm chí với máy xay cà phê, thậm chí với máy tính, thậm chí với điện thoại di động. Một mặt, điều này tốt, tức là bạn vừa viết một bản triển khai của một máy ảo, sau đó bạn chạy các chương trình Java của mình ở mọi nơi. Nhưng mặt khác, thật tệ là chiếc điện thoại đó lúc đó có rất ít bộ nhớ, hiệu năng thấp và tất cả những điều này càng bắt đầu trở nên buồn tẻ và chậm lại.

Nhưng đây thậm chí không phải là mục đích chính mà ngôn ngữ này được phát minh ngay từ đầu. Ngôn ngữ Java được phát minh để giảm bớt yêu cầu về trình độ chuyên môn đối với các lập trình viên. Nghĩa là, những lập trình viên kém hơn có thể viết các chương trình tốt bằng Java, vì nó không cho phép bạn viết chương trình xấu- không có cách nào để viết chương trình xấu. Ở đó bạn chỉ có thể viết chương trình tốt. Vâng, theo cách hiểu của những người tạo ra ngôn ngữ.

Nghĩa là, nếu trong C, trong C++, trong Python, trong bất cứ thứ gì, chúng ta có thể tạo ra một loại bãi rác khủng khiếp nào đó từ dự án của mình, nơi chúng ta trộn lẫn mọi thứ, tập hợp trong nhiều giờ và thứ gì đó khác. Trong Java, bạn cũng có thể tạo một bãi rác, nhưng để làm được điều này, bạn cần phải nỗ lực một chút. Nghĩa là, theo mặc định, đó không phải là “bãi rác”, các vấn đề khác nảy sinh, đó là thứ gì đó đã được kế thừa và kế thừa - nói chung, đối với một dòng có ý nghĩa thì có mười dòng không có ý nghĩa lắm. Tuy nhiên, một lập trình viên có trình độ vừa phải như vậy có thể viết mã chất lượng khá cao.
Chúng ta gần như đã đến đích. Đối với chúng tôi, thứ tiếp theo xuất hiện là .Net (dotnet), và đặc biệt chúng tôi quan tâm đến C# (gần như giống nhau [giảng viên chỉ vào Java], tức là có những khác biệt về chi tiết, nếu bạn chọn giữa chúng , hãy xem họ trả nhiều tiền hơn ở đâu).

Và một điều nữa - JavaScript. Không có gì để làm với ngôn ngữ Java, xuất hiện cùng năm - từ này đang thịnh hành, họ đã cấp phép Nhãn hiệuđể sử dụng.

Điều chính bạn cần chú ý là gì? (Giảng viên vẽ mũi tên từ C++ sang Java, .Net, C#, JavaScript và PHP). Để viết một chương trình đơn giản bằng một trong những ngôn ngữ này và bằng nhiều ngôn ngữ khác - nếu bạn biết C++, bạn thường không cần biết bất cứ điều gì khác - bạn viết bằng C++, sau đó thêm đô la vào đầu, một việc khác sẽ làm những việc nhỏ và nó bắt đầu làm bất cứ việc gì (giảng viên chỉ vào các ngôn ngữ mà các mũi tên từ C++ được chỉ định). Tức là chúng cực kỳ giống nhau ở một số điểm những điều đơn giản. Nếu bạn quyết định một số nhiệm vụ học tập, nhiệm vụ giáo dục, thứ gì khác (bạn không thiết kế một dự án lớn - bạn có một tệp đọc số, hiển thị số trong bảng điều khiển và làm một việc khác), thì hầu như không có sự khác biệt giữa các ngôn ngữ này. Rõ ràng là JavaScript và PHP là chuyên biệt, mọi thứ đối với chúng đều có một chút khác biệt. Nhưng ở đây (giảng viên chỉ vào Java và C#) có rất ít sự khác biệt.

Kể từ đó, đủ thứ thú vị khác lần lượt xuất hiện nhưng không rõ chúng sẽ sống hay chết thành công. Bây giờ họ đang sử dụng cái gì, với mục đích gì?

Chọn ngôn ngữ tùy theo nhiệm vụ

Giả sử bạn đang phải đối mặt với nhiệm vụ viết trình điều khiển cho card màn hình. Hôm nay bạn sẽ sử dụng ngôn ngữ nào? (Khán giả hét lên: Java!) Tại sao... Java tuyệt vời, nhưng tại sao Ruby hay PHP lại không? (Thầy giảng nói một cách mỉa mai.)

Lập trình cấp thấp

Nếu bạn đang viết thứ gì đó ở cấp độ thấp thì lựa chọn tốt nhất là C, nhưng thực ra tôi đã nghe (nhưng chưa thấy) rằng C++ được sử dụng cho việc này. Nhưng tôi không mấy tin tưởng vào điều này, bởi vì trong C bạn có thể kiểm soát rõ ràng - vì bạn đã cho rất nhiều byte bộ nhớ, điều đó có nghĩa là sẽ có rất nhiều byte. Và trong C++ (STL) chuỗi được triển khai như thế nào? Vâng, bằng cách nào đó nó đã được thực hiện. Và cuối cùng, chúng tôi không biết làm thế nào và điều gì đang xảy ra ở đó; có thể chúng tôi sẽ hết bộ nhớ trên card màn hình hoặc điều gì khác sẽ xảy ra. Vì vậy, C vẫn sống và không chết, những công việc lập trình hệ thống như vậy vẫn tồn tại - viết hệ điều hành, viết driver, viết cái gì khác - C rất tốt cho việc này. Ngoài ra, hiện nay có đủ loại thiết bị (Internet of Things được hứa hẹn sẽ sớm ra mắt) chạy bằng pin (và tất nhiên sẽ có hàng triệu thiết bị, mọi thứ sẽ được bao phủ bởi Internet of Things này), họ nên rất rẻ và tiêu thụ rất ít điện năng. Theo đó, sẽ có bộ nhớ 2 KB, bộ xử lý 5 kHz và rõ ràng là bạn sẽ cần phải sử dụng một số loại máy ảo hoặc ngôn ngữ kịch bản sẽ không hoạt động trong tương lai gần - điều đó có nghĩa là bạn sẽ phải viết thứ gì đó bằng C. Và ngay cả bây giờ, chẳng hạn, tính toán trên card màn hình (OpenCL hoặc một số công nghệ khác) - họ không nghĩ ra ngôn ngữ mới để viết chương trình cho họ - họ làm C với một số hạn chế lớn. Chỉ vì người ta đã biết rồi thì tại sao lại phải học cái mới? Về mặt hình thức, điều này có lẽ cũng là, theo một nghĩa nào đó, C.

Lập trình web

Giả sử bạn muốn viết Facebook mới(mạng xã hội). Bạn sẽ viết cái này lên cái gì? (Mọi người trong khán giả đang nói về HTML và CSS.) HTML và CSS là thiết kế và chúng tôi muốn có thể thêm ảnh, bạn bè và để lại nhận xét ở đó.

Đối với phần viết kịch bản - nghĩa là những gì sẽ xảy ra ở phía máy khách - đây là JavaScript. Hơn nữa, đôi khi JavaScript được tạo bằng ngôn ngữ khác và được gửi (điều đó xảy ra là tập lệnh được tạo... vì đôi khi việc xử lý một số thay đổi trong logic sẽ dễ dàng hơn).

Điều đáng ngạc nhiên là nó được viết bằng PHP - và Facebook cũng như nhiều dự án lớn khác. Tất nhiên, họ phải viết một số thứ của riêng mình để nó vẫn hoạt động bình thường chứ không phải theo kiểu “lộn xộn” nhưng họ đã làm được. Về nguyên tắc, việc bạn viết gì không quan trọng, nhưng tôi không khuyên dùng Perl. Tất nhiên, ở đây và bây giờ, không ai viết bất cứ điều gì cho web từ đầu. Mọi người đều đang viết một số loại khuôn khổ hoặc một cái gì đó khác. Cửa hàng trực tuyến? Chúng tôi đã tải xuống khung cho một cửa hàng trực tuyến - và thế là xong, chúng tôi đã viết một cửa hàng trực tuyến.

Lập trình cho doanh nghiệp

Tiếp theo bạn muốn viết một số ứng dụng nhàm chán cho một ngân hàng. Hoặc, ví dụ, bạn có ai bán thẻ SIM không? Có lẽ bạn đã từng mua một chiếc điện thoại hay một thứ gì đó khác và được thông báo: “Hệ thống bị treo, chúng tôi không thể làm gì được”. Bạn sẽ sử dụng gì để viết một ứng dụng như vậy? (Khán giả hét lên về Python) Bạn không thể viết cái này bằng Python, bạn đang nói gì vậy?! Không cần phải viết bất cứ điều gì cho doanh nghiệp bằng Python. Tại sao? Bởi vì khi bạn viết một cái gì đó bằng Python, bạn không thể phát hiện ra một số lượng lỗi đáng kể trong quá trình viết. Python được gõ động theo mọi cách có thể và nói chung, bạn có thể ẩn lỗi theo cách mà nó sẽ xuất hiện trong tình huống mà bạn thậm chí không thể hiểu những người dùng quanh co này đã làm gì ở đó, rằng mọi thứ đều như vậy tan vỡ vì bạn. Nghĩa là, trong Python, tốt hơn là bạn nên viết các tập lệnh nhỏ cho chính mình - bạn hiểu điều gì đang xảy ra ở đó và những gì đang được thực hiện. Chà, hoặc thứ gì đó mà bạn không ngại vứt đi: bạn muốn tung ra thứ gì đó trước đối thủ cạnh tranh, vậy nếu thỉnh thoảng nó bị hỏng thì sao. Bạn đã viết bằng Python và thế là xong - bạn đã chiếm được thị trường. Và nếu bạn viết một cái gì đó trong một thời gian dài, chẳng hạn như một loại ứng dụng ngân hàng nào đó (để nó phê duyệt các khoản vay, thứ gì đó khác) - bạn viết nó bằng Java. Bởi vì đó là một vấn đề nghiêm trọng, giấy tờ, tiền bạc, tài liệu, những thứ khác, nhưng bạn không thể làm hỏng nó đến mức mọi thứ tan vỡ, nếu không mọi người sẽ bị xúc phạm - tiền của họ đã biến mất và không đi đến đâu, bởi vì theo một cách nào đó thời điểm chuỗi chuyển thành số hoặc ngược lại. Vì vậy, điều đó có nghĩa là bạn sử dụng nó trong Java một cách có phương pháp và viết, viết... Chà, hoặc trên .Net, về nguyên tắc, những tình huống như vậy cũng xảy ra. Tất nhiên, ở đó bạn cũng có thể gặp vấn đề, nhưng khả năng xảy ra điều này vẫn thấp hơn một chút.

Lập trình cho quân đội, ngành hàng không vũ trụ

Bây giờ hãy tưởng tượng rằng họ quyết định đưa bạn lên Mặt trăng bằng tên lửa. Bạn muốn sử dụng cái gì để viết mã điều khiển động cơ tên lửa? Chúng ta hãy xem xét. Điều này, có lẽ (giảng viên chỉ ra Perl, Python, PHP, Ruby), không đáng - nó chậm lại, có điều gì đó khác đang xảy ra và nói chung tôi sẽ không đồng ý bay trên một tên lửa như vậy. Trong C++? Thành thật mà nói, tôi cũng không tin điều đó, vì trong C++ có quá nhiều cách để tự sát. Khi bạn ở đâu đó ngoài không gian, điều đó không tốt lắm.

Có lẽ bằng Java? Có vẻ như mọi thứ ở đó khá đáng tin cậy và kiến ​​trúc tốt, không có kiểu hoang dã, không có những chuyến đi không cần thiết vượt quá giới hạn bộ nhớ. Giả sử thời điểm quan trọng nhất đã đến và Java của chúng tôi đã quyết định thu gom rác cho chúng tôi. Chúng tôi cần hạ cánh, giảm tốc độ và cô ấy nói: "Không, rác đang chảy." Nói chung cũng không ổn lắm.

Thành thật mà nói, tôi sẽ thích chương trình này hơn nếu được viết bằng Pascal. Tất nhiên, tôi không thực sự thích Pascal, nhưng bằng cách nào đó trong những vấn đề như vậy, nó sẽ rất tuyệt.

Sử dụng nhiều ngôn ngữ để phát triển phần mềm

Vâng, những gì cần phải nói về những ngôn ngữ hiện đại. Giờ đây, nhiều dự án không tồn tại ở bất kỳ ngôn ngữ nào, nghĩa là một số dự án tồn tại bằng một ngôn ngữ, một số ở ngôn ngữ khác và một số ở ngôn ngữ thứ ba. Ví dụ: nếu bạn có một số loại ứng dụng web xử lý lượng thông tin khổng lồ, các lệnh gọi tới đĩa (thậm chí không đến cơ sở dữ liệu, chúng lớn đến mức ngay cả cơ sở dữ liệu ở đó cũng không thể xử lý bất kỳ thông tin nào đã được viết sẵn) có thể được viết bằng một số loại sau đó là cấp độ C thấp, để ghi cực kỳ nhanh vào đĩa và tất cả những thứ đó. Đương nhiên, không đáng để viết toàn bộ dự án bằng C. Có thể có một loại logic trung gian nào đó được viết bằng Java gọi các hàm C để gọi nhanh. Tất nhiên, giao diện người dùng (những gì người dùng nhìn vào) đã được viết bằng thứ gì đó, trong một số tập lệnh, bằng thứ gì đó được trình duyệt thực thi trực tiếp (JavaScript). Và tất cả những điều này sống cùng nhau và tương tác thành công.

Khi phát triển một số ứng dụng, kể cả những ứng dụng lớn, đôi khi người ta làm gì? Họ lấy nó và viết một nguyên mẫu bằng Python (mọi thứ sẽ hoạt động như thế nào), phác thảo nó ra, suy nghĩ về một loại kiến ​​​​trúc nào đó. Viết trên đó thực sự rất nhanh - họ đã cùng nhau tạo ra một nguyên mẫu, thử nghiệm nó và nói: “Chà! Thú vị thật!" Và họ đã viết lại nó hoàn toàn. Có vẻ như họ đã thực hiện công việc này hai lần, khiến thời gian phải mất gấp đôi (à, một rưỡi). Nhưng không! Hóa ra phương pháp này thường không tệ, bởi vì nếu bạn viết một cái gì đó ngay lập tức, chẳng hạn như bằng Java, rồi quyết định: “Không, hãy cấu trúc lại, thay đổi hoàn toàn kiến ​​​​trúc và tất cả những thứ đó,” thì bạn sẽ tốn gấp 10 lần thời gian . Những thứ như vậy cũng tồn tại và sống.

Điều kiện thành công của bất kỳ ngôn ngữ lập trình nào

Bây giờ hãy nói về lý do tại sao một số ngôn ngữ đẹp mắt đã không tồn tại hoặc tồn tại trong điều kiện rất khó khăn. không gian hạn chế. Khi Wirth nhìn thấy những điều tồi tệ mà các công ty Apple, Borland và tất cả những gì đã làm với Pascal của anh ấy, anh ấy đã nghĩ ra một ngôn ngữ thậm chí còn tốt hơn - Oberon. Nó cực kỳ tối giản - nghĩa là có rất ít lệnh (Chuỗi? Tại sao chúng ta cần chuỗi? Chúng ta sẽ tạo một mảng ký tự!). Chà, có điều gì đó không ổn với anh ấy, đến mức mà lẽ ra nó có thể giải quyết được.

Một điều nữa. Quân đội Mỹ yêu cầu họ phát triển một ngôn ngữ tuyệt vời trong đó mọi thứ đều hoạt động và mọi thứ đều có thể được viết ra. Kết quả là một ngôn ngữ Ada khá quái dị, tuy nhiên, họ vẫn viết thứ gì đó, nhưng một lần nữa, chỉ dành cho quân đội.

Vấn đề là gì? Tại sao một số ngôn ngữ như Python, vốn không được công ty hỗ trợ ngay từ đầu, lại chiếm lĩnh thị trường. PHP, cũng được thiết kế kém, cũng tự mình chiếm lĩnh thị trường (phần lớn). Và hàng tỷ đô la đã được đầu tư (giảng viên chỉ vào Ada) và chẳng đi đến đâu, không có chuyện gì xảy ra. Điều này được kết nối với cái gì? Điều này là do thực tế là không có cơ sở hạ tầng xung quanh các ngôn ngữ này. Nghĩa là, ngôn ngữ có thể xuất sắc, nhưng miễn là không có tài liệu, miễn là không có cộng đồng nào có thể trả lời các câu hỏi (trên Stack Overflow) và cuối cùng, quan trọng nhất là miễn là không có số lượng lớn của các thư viện, ngôn ngữ không cất cánh. Ví dụ: bạn muốn viết một trang web trên Oberon. Nó là gì, tại sao không? Và rắc rối bắt đầu... Bạn không thể thiết lập máy chủ web của riêng mình trên Oberon để kiểm tra nhẹ nhàng, bạn không thể kết nối bất kỳ thư viện nào, vì Oberon không có chúng. Và tất cả những điều này được thực hiện thông qua một số chiếc nạng, sức lực biến mất và nói chung, bạn từ bỏ và viết trang web của mình bằng C thuần túy thay vì Oberon. Và những ngôn ngữ sống tốt là những ngôn ngữ biết sử dụng thư viện từ các ngôn ngữ khác. Python tương tự ở những nơi nó chạy chậm lại. Chà, nói chung, tất cả những thứ tiêu chuẩn như sắp xếp và những thứ khác đều được viết bằng C và nó (Python) có thể tương tác với chúng.

Java cũng có Giao diện gốc Java. Đây thực chất là C, tức là ở đó (theo tôi thì họ luôn muốn cấm nó, nhưng có vẻ như họ chưa cấm nó) những ngôn ngữ này có thể tương tác với các thư viện đã có sẵn (chủ yếu là C). Và vì điều này, họ chấp nhận nó và làm việc. Ý tưởng tôi đang cố gắng truyền đạt cho bạn rất rõ ràng phải không? Không viết bằng các ngôn ngữ không hỗ trợ thư viện C. Vâng, nếu bạn muốn sử dụng một cái gì đó mát mẻ. Chà, dần dần họ (các ngôn ngữ) có được cơ sở hạ tầng của riêng mình. Và bằng cách nào đó họ sống tốt.

Ngôn ngữ lập trình và định hướng nghề nghiệp

Bây giờ hãy nói về cách hiểu những gì bạn muốn trong cuộc sống. Những điều tuyệt vời nhất là gì? Bạn có thể làm điều gì đó lập trình hệ thống, Đúng? Thật tuyệt khi bạn đếm những bit này, bạn muốn khởi chạy máy bay bốn cánh, một số loại máy ảnh và làm việc khác. Khi đó, có lẽ C là sự lựa chọn của bạn.

Nếu bạn muốn viết, có thể đó không phải là những ứng dụng thú vị nhất trong cuộc sống, nhưng thật tuyệt khi bạn thiết kế chúng, nghĩ về tất cả và kiếm được rất nhiều tiền cho việc ngồi và cảm thấy buồn chán hầu hết thời gian (bạn phải trả tiền cho việc này nếu bạn giỏi bỏ lỡ), chúng đây - Java, .Net. Bạn đến làm việc ở một ngân hàng nào đó, viết thư, đi làm lúc chín giờ trong chiếc áo sơ mi trắng, nhận mức lương khá tốt và viết theo khuyến nghị của các nhà phát triển Java giỏi nhất, .Net cừu và tất cả những thứ đó...

Nếu bạn muốn viết một số ứng dụng, một loại trình duyệt nào đó, một loại đồ chơi nào đó hoặc thứ gì đó khác thì C++ là lựa chọn tuyệt vời. Nếu bạn muốn viết trang web thì đây, những ngôn ngữ bạn chọn (giảng viên dạy Perl, Python, PHP, Ruby), không có nhiều khác biệt. Chỉ có điều PHP sẽ chết trước Python nên nếu bạn lười học cái mới thì hãy học Python. Bạn sẽ không nhận thấy nhiều sự khác biệt, nhưng bạn sẽ sử dụng được lâu hơn.

Chuyện gì đang xảy ra với Ruby cũng không rõ ràng. Chà, bạn có thể làm PHP nếu bạn đã học nó rồi, may mắn thay nó đơn giản đến mức không mất nhiều thời gian để học lại.

Và cuối cùng, có một lĩnh vực ứng dụng khác của ngôn ngữ lập trình - đây là khi những người không phải lập trình viên sử dụng chúng. Giả sử bạn là một nhà toán học, nhà vật lý, nhà hóa học, nhà phân tích, bất kỳ ai và bạn cần nhanh chóng tính toán điều gì đó, phân tích một số dữ liệu (ví dụ: đối với các nhà sinh vật học, có bao nhiêu con cáo Bắc Cực sống trên Quần đảo Chỉ huy). Bạn có thể đặt tất cả những thứ này vào một bảng trong Excel hoặc phân tích nó bằng thứ gì đó. Python cũng tốt cho việc này, nó có thể hoạt động với văn bản và có rất nhiều thư viện, thống kê và tất cả những thứ đó. Nếu bạn muốn thực hiện một số loại Machine Learning, xử lý một số dữ liệu, đưa ra dự đoán thì việc này cũng được thực hiện bằng Python một cách nhanh nhất hiện nay. Đúng, cần lưu ý rằng các nhiệm vụ rất khác nhau. Ví dụ: nếu bạn muốn giao dịch trên sàn giao dịch chứng khoán ngay lập tức trong điều kiện báo giá luôn thay đổi, thì cho dù bạn viết Machine Learning bằng Python hay đến đâu, những người viết nó bằng thứ gì đó nhanh hơn sẽ có thời gian để mua mọi thứ trước mọi thứ sẽ được tính cho bạn, ngay cả khi thuật toán của họ tệ hơn. Vì vậy, ngay cả những nhiệm vụ học máy này (một số trong số đó) cũng yêu cầu hiệu suất cao(và cực kỳ cao), và theo đó là các ngôn ngữ khác.

Cách duy nhất để hiểu những gì bạn muốn là thử mọi thứ. Bây giờ tôi sẽ nói nó như một trong những tầm nhìn về cách bạn có thể thử mọi thứ. Làm thế nào để trở thành một lập trình viên và trở thành một người hạnh phúc? Vì thế. Hãy bắt đầu với một bảng xếp hạng sạch sẽ. Ở đây bạn đang học toán, tiếng Nga và các môn học bắt buộc và tùy chọn khác ở trường, và kiến ​​thức của bạn trong lĩnh vực lập trình hiện được phản ánh trên bảng (giảng viên chỉ vào bảng trống). Và bạn muốn trở thành một người hạnh phúc, làm những gì mình yêu thích, kiếm được nhiều tiền và không phủ nhận bản thân bất cứ điều gì và được hạnh phúc.

Một cách để đạt được điều này. Tất nhiên, có đủ loại câu chuyện đầy cảm hứng về những người không hề học đại học, hoặc bỏ học và trở thành tỷ phú, chủ sở hữu công ty, v.v. Nhưng cần lưu ý rằng hầu hết những người có thể không trở thành tỷ phú nhưng vẫn sống sung túc nhưng vẫn tốt nghiệp đại học ở một thời điểm nào đó.

Tình hình tuyển sinh đại học thế nào (bạn hiện đang học ở trường)? Khi còn đi học, bạn cần hiểu rằng bước tiếp theo là đăng ký và lo liệu. Vượt qua kỳ thi Thống nhất hoặc giành chiến thắng trong Olympic. Trong Kỳ thi Trạng thái Thống nhất, bạn có thể sử dụng Pascal, C++ (bao gồm cả C thuần túy), Python (tôi sẽ không đề cập thêm về chúng). Tại Olympic có cùng một Pascal, cùng một C++, cùng một Python (bây giờ chúng ta sẽ nói về các vấn đề của nó) và thường xuyên nhất là có Java. Có những điều khác xảy ra tùy thuộc vào Thế vận hội, nhưng đó không phải là vấn đề.

Biểu đồ phân phối ngôn ngữ trông như thế nào? Olympic toàn Nga trong khoa học máy tính? Những người tham gia Thế vận hội toàn Nga, Thế vận hội thú vị nhất, họ viết gì? Nó trông như thế này (ở đây nó có nghĩa là Pascal, và ở đây là khoảng năm 2000, và ở đây là khoảng 0, ở đây là C++, và đây là năm 2015).

Năm 2000, hầu như không có ai viết C++. 15 năm đã trôi qua và hầu như không có ai viết bằng Pascal, mặc dù Pascal rất hiện đại. Đây là ngôn ngữ có thể làm hầu hết mọi thứ giống nhau. Chỉ là mọi người đã trở nên quá lười để học những thứ này, mọi xu hướng mới, và họ tiếp tục viết mọi thứ bằng Borland Pascal, điều đó tất nhiên là không thể làm được gì. Trong C++, mọi người viết một số thuật toán (STL) để sắp xếp - thật tuyệt, họ đã viết Sort() và thế là xong. Trên Pascal, thông thường, trên cái cũ - đây là một vấn đề. Chúng tôi đã viết một số loại tập hợp (cần thiết) - thật tuyệt, chúng tôi đã viết nó bằng C++, nhưng trong Pascal thì điều đó lại hoàn toàn là một nỗi đau. Tất nhiên, bạn có thể làm điều này với Pascals mới, nhưng chúng thường tốn tiền. Có thể bạn không nhận thấy điều này, nhưng đó là sự thật.

Ngoài ra còn có Java nhưng Java có rất nhiều chữ cái. Nó dành cho các dự án lớn, nhưng đối với các chương trình nhỏ chạy một lần thì kết quả rất tệ, vì có rất nhiều chữ cái thừa. Nhưng một số người cũng viết, bạn có thể học cách viết trên đó. Nhưng nó không có trong Kỳ thi Thống nhất và phần lớn vẫn sẽ phải tham gia Kỳ thi Thống nhất.

Điều gì là tốt nhất cho kỳ thi Thống nhất? Đối với Kỳ thi Thống nhất, tốt nhất (nếu bạn không biết gì và họ không dạy bạn bất cứ điều gì ở trường) là học Python. Một số vấn đề thi có thể được giải quyết một cách hoàn hảo trên đó. Tại Olympic, nói chung, hóa ra C++ được sử dụng, vì Python rất chậm, không phải mọi thứ đều được giải quyết ở đó.

Vì vậy, bạn đã nghiên cứu một số tập hợp con nhỏ của ngôn ngữ và một số thuật toán (có thể) và giải quyết nhiều vấn đề để nhận được bằng tốt nghiệp từ Olympic và vào đại học để nhận được giáo dục đại học.

Bây giờ tôi sẽ nói về cách chúng tôi cấu trúc khóa học tại HSE, thứ tự các ngôn ngữ được dạy, cách chúng được nghiên cứu trong toán ứng dụng và khoa học máy tính tại Khoa Khoa học Ứng dụng mà chúng tôi hợp tác với Yandex. Trong học kỳ đầu tiên - Python (không đầy đủ, gần đúng như bạn nên học ở trường) và C++ (đã rộng hơn, rộng hơn nhiều so với những gì nó thường được dạy ở trường). Để tôi nói ngay cho bạn đừng sợ, nếu đột nhiên muốn đăng ký học, bạn sẽ nói: “Cái gì, cái này tôi biết rồi, sao phải đi đâu đó học? Tôi thà đi nơi khác còn hơn.” Đối với những người đã biết cách lập trình tốt, có cơ hội chuyển ngay sang nghiên cứu các thuật toán và chuẩn bị khá lý thuyết. Bây giờ chúng tôi không xem xét chúng, cái này (chỉ vào bảng) dành cho những người ở trình độ trung cấp hoặc hoàn toàn không phải là lập trình viên.

Trong học kỳ đầu tiên, những điều cơ bản về Python được dạy chỉ để mọi người học cách lập trình và để không ai cảm thấy quá khó chịu. Python hiếm khi được dạy ở trường; hầu hết mọi người đều có kiến ​​thức về Pascal hoặc C++. Hầu hết là Pascal, nếu đây là trường đại học. Chà, để không ai bị xúc phạm, mọi người đều học một ngôn ngữ mới (như thể họ ở trong những điều kiện bình đẳng). Và C++ đơn giản vì từ C++ bạn có thể đi bất cứ đâu.

Sau đó là khóa học “Thuật toán” và một khóa học riêng dự án khóa học. Các thuật toán cổ điển có triển khai. Không phải là chúng tôi lấy điều gì đó trên lý thuyết và tính toán độ phức tạp. Tại bài giảng chúng tôi lấy nó, tính toán độ phức tạp, tại hội thảo chúng tôi lấy nó và thực hiện thuật toán. Dự án là nơi học sinh thực hiện một điều gì đó hoàn chỉnh. Ví dụ: một trong những dự án là: đếm... Giả sử bạn có rất nhiều căn hộ ở Moscow và bạn hiểu: “Ồ, tôi còn rất nhiều thứ, tôi sẽ cho thuê một ít. Và họ đặt ra một mức giá nhất định, và vì lý do nào đó mà không ai muốn thuê căn hộ của bạn - nó có thể quá đắt. Hoặc họ đặt ra một mức giá nào đó, ngay lập tức họ lấy nó từ bạn và bạn nghĩ: “Ồ, chắc mình đã bán rẻ” - và bạn cũng khó chịu. Tức là cần phải tính toán chi phí thuê một căn hộ là bao nhiêu? Bạn nhập dữ liệu - nó sẽ tạo ra ước tính cho bạn. Một trang web như vậy, bao gồm một số thứ: lấy câu, phân tích chúng, áp dụng một loại thuật toán học máy đơn giản (có thể) nào đó và tạo ra một giao diện web đẹp mắt trong đó bạn có thể chọn thứ gì đó, nhập thứ gì đó, vài mét, một số phòng , số lượng phòng tắm hơi, số lượng bể sục trong căn hộ của bạn và ước tính chi phí đại khái. Đó là, một số loại đã hoàn thành, không phải là rất điều phức tạp. Ở đây nó có nghĩa là (giảng viên chỉ vào khóa học về thuật toán) một C++ lõi như vậy, với đầu vào-đầu ra của bảng điều khiển. Chà, ở đây (giảng viên chỉ vào dòng chữ “dự án”) một cái gì đó dưới sự hướng dẫn của người cố vấn, có thể với cơ sở dữ liệu, có thể bằng phân tích văn bản và thứ gì đó khác.
Sau đó là học kỳ thứ ba - đây là khóa học có tên “Hệ thống máy tính”. Chỉ có một ít ngôn ngữ hợp ngữ để hiểu (rất ít) và sau đó là thứ gì đó tương tự như ngôn ngữ C thuần túy và tương tác với các hệ điều hành, lập trình hệ thống về cơ bản. Và dự án cho hội thảo cũng là một chủ đề về tất cả các loại tương tác mạng, ở mức độ khá thấp: phát triển một số loại tiện ích, ví dụ như rsync (đồng bộ hóa, có lẽ bạn biết. Trong C thuần túy, ít nhiều, hãy viết một tương tự như rsync, mà bạn sẽ có qua mạng đồng bộ hóa các thư mục với tất cả các quyền truy cập tệp, v.v.).

Và cuối cùng, thứ tư. Tôi thậm chí còn không biết phải gọi nó là gì, nó là một tập hợp các công nghệ cần thiết cho sự phát triển thực sự, chẳng hạn như phát triển web. Đó là, cái này công dụng thực tế cơ sở dữ liệu, một lần nữa tương tự như những gì đã được thực hiện trong dự án (giảng viên chỉ vào dự án năm thứ 2) nhưng sâu hơn. Nghĩa là, những điều ít nhiều cụ thể như vậy đã lập trình thực tế. Song song với điều này là mọi lý thuyết, và ở đây họ cũng đang làm khoa học.

Và sau hai khóa học, mọi người bắt đầu làm bất cứ điều gì họ thấy hứng thú, bởi vì môn học này bao gồm khá rộng rãi những kiến ​​thức cơ bản về lập trình và đến lúc này mọi người đã hiểu rằng họ không muốn làm điều đó. hệ thống máy tính không có trường hợp nào (chẳng hạn như họ không thích lập trình hệ thống), nhưng họ muốn nghiên cứu một số thuật toán lý thuyết, tính toán độ khó, nghĩ ra một số thứ mới, phân tán hoặc thứ gì đó khác. Hoặc ngược lại, họ nghĩ rằng ở đây họ không có nhiều ( giảng viên chỉ vào dòng đầu tiên của khóa học Python và C++) đã đi, thì ( giảng viên chỉ vào dòng khóa học thứ ba, với lập trình hệ thống) - Tôi không thích việc đếm byte và đặt đủ loại hạn chế về đọc và ghi, tạo luồng, luồng và những thứ khác. Và theo đó, người ta chọn một hướng đi và học tập. Về nguyên tắc, đó là để bạn không phát triển “hội chứng vịt con” - bạn là người đầu tiên nhìn thấy Pascal của mình và bây giờ nói “Pascal là sức mạnh”; hoặc cao cấp hơn - bạn thấy C++ và bắt đầu nói với mọi người rằng C++ rất mạnh, nhưng mọi thứ khác thì không tốt lắm.

Bây giờ chúng ta cần nhìn rộng hơn về điều này (giảng viên chỉ vào danh sách các môn học trên bảng) - đây là một trong những phương pháp đã được chọn, đặc biệt là ở HSE (nó mới xuất hiện nên khá hiện đại). Có nhiều cách khác để làm quen. Ở các trường đại học tốt khác, thứ tự hơi khác một chút và các điểm nhấn khác được đặt. Nhưng họ cũng cố gắng giới thiệu cho mọi người mọi thứ họ có.

Làm thế nào để tìm việc làm lập trình viên

Bạn là ( giảng viên chỉ vào danh sách các khóa học) đã làm mọi thứ, học đại học, làm việc khác hiệu quả hơn trong hai năm và bạn cần phải đi làm. Làm thế nào để chọn một cái gì đó cho công việc? Đầu tiên, bạn đã làm quen với mọi thứ, đi sâu hơn ở đâu đó và đã biết mình yêu thích điều gì. Bạn phải chọn những gì bạn yêu thích, một cách tự nhiên. Bởi nếu yêu, bạn nỗ lực thì bạn sẽ có động lực và nói chung mọi chuyện sẽ ổn thôi. Bởi vì vấn đề không chỉ là tiền mà còn là làm cho nó trở nên thú vị và hấp dẫn đối với bạn. Vâng, bạn muốn vào một công ty tuyệt vời và có được một công việc. Cá nhân tôi muốn gặp loại người nào? Giả sử một trăm sinh viên đến với tôi - tôi nên thuê hai hay một. Tại sao họ lại đến, tôi không hiểu chút nào, họ là ai, họ là ai, họ thế nào? Tốt nhất, họ sẽ cho tôi xem bằng tốt nghiệp mà họ đã nhận được ở trường đại học, và tôi sẽ nói: “Chà!” Đây là một bằng tốt nghiệp tuyệt vời, nhưng nó không quá tuyệt vời!” Và nhân tiện, tôi có thể sai. Có lẽ người đó đã có nhiều thời gian rảnh rỗi và học hỏi tốt hơn nhiều.

Điều gì sẽ tuyệt vời? Đầu tiên, một số dự án nguồn mở mà bạn đã viết từ đầu đến cuối. Tốt hơn là, nếu tôi đang tạo ra một loại cơ sở hạ tầng nào đó để dữ liệu có thể được đọc nhanh chóng hoặc thứ gì đó khác, thì tất nhiên, tôi sẽ quan tâm đến việc có thứ gì đó nguồn mở được viết cho tôi. Họ không tạo ra một trang web mà là một cái gì đó về chủ đề này. Tại sao tôi quan tâm đến điều này? Tôi có thể xem mã của bạn, tôi có thể biết tần suất bạn cam kết, tôi có thể xem cách bạn phản ứng với lỗi từ người dùng, lỗi từ nhà phát triển sử dụng nó - mọi thứ đều được ghi lại, tôi nhìn vào mọi thứ và nghĩ: “Ồ, lỗi này không có Đã hai năm rồi.” Đã đóng cửa, ở đây bạn đã trả lời người dùng một cách bất lịch sự, đây là thứ khác - Tôi sẽ không lấy nó. Đó là, đây là dự án cá nhân của bạn.

Tiếp theo, còn gì thú vị nữa? Tôi muốn xem bạn làm việc nhóm như thế nào. Tức là bạn đến gặp tôi để phỏng vấn và nói: “Tôi và những người ở trường đại học đã nộp đơn ứng tuyển tốt. Tôi đang tạo cơ sở dữ liệu ở đó, họ đang tạo một loại ứng dụng di động nào đó ở đó, và chúng tôi cũng có một anh chàng làm việc ở đó, một cô gái thiết kế, một chàng trai hỗ trợ kỹ thuật. Có năm người chúng tôi và chúng tôi đã thực hiện một dự án tuyệt vời.” Chà, tôi thấy đó thực sự là dự án của bạn, tôi nói: "Của bạn là gì?" Tôi xem lại mã và hiểu rằng bạn biết cách làm việc theo nhóm với mọi người.

Lập trình viên không phải là người ngồi một mình (indie) trong gara, nơi nào đó tắt đèn, không nói chuyện với ai, để râu và viết. Vẫn có sự tương tác với mọi người. Ví dụ, với một ông chủ, người đôi khi có thể chửi bới bạn (sếp, họ là như vậy, không phải lúc nào cũng tốt bụng). Và tôi thấy rằng bạn biết cách làm việc với mọi người và tôi rất vui nếu bạn đội ngũ tốt một số loại Dù không tốt nhưng vẫn tốt hơn là không có.

Cá nhân tôi còn muốn gì nữa? Nếu bạn thể hiện mình trong dự án lớn. Ví dụ: bạn đã cam kết điều gì đó vào nhân Linux, nếu bạn đang lập trình hệ thống và đã sửa một số lỗi. Nghĩa là, họ đã cho thấy rằng bạn biết cách đọc mã của người khác và biết cách thực hiện một số thay đổi đối với mã đó. Tôi nhìn: “Ồ, thực sự, bạn đã tìm ra một điều gì đó phức tạp và sửa được một số lỗi!” Và tôi bắt đầu rất hạnh phúc về điều này. Bởi vì tôi đã... à, tôi không biết... lập trình viên của tôi đã nghỉ việc vì các đối thủ cạnh tranh đề nghị mức lương cao hơn cho anh ấy, và tôi rất cần người thế chỗ anh ấy - với bạn. Tôi thấy rằng bạn chỉ viết từ đầu nhưng bạn không biết cách đọc và chỉnh sửa mã của người khác, và tôi rất khó chịu.

Và cuối cùng, tùy vào vị trí cụ thể, còn có nhiều thứ khác. Nếu bạn đang kiếm việc làm nhà phân tích, tôi muốn bạn giải quyết các vấn đề phân tích dữ liệu trên Kaggle. Nếu bạn đang nộp đơn xin một số thứ liên quan đến thuật toán, tôi muốn bạn lập trình thể thao một số thuật toán đã được thực hiện. Và cuối cùng, nếu bạn nghĩ về nghề nghiệp, đọc cách tiến hành các cuộc phỏng vấn, bạn sẽ thấy rằng một số người ở đó bày tỏ sự không hài lòng lắm: “Tôi đến và họ hỏi tôi sở thích là gì. Tôi ngồi như một con cú và không trả lời vì tôi không có sở thích,” và họ nghĩ rằng HR làm điều này. Trên thực tế, họ đang cố gắng hiểu bạn thân thiện và phù hợp như thế nào. Nếu bạn không thân thiện và thiếu năng lực thì dù bạn có thiên tài và tham công tiếc việc đến đâu, một chuyên gia cứng rắn, có kiến ​​thức uyên bác thì cả nhóm cũng khó có thể làm việc cùng bạn và bạn sẽ không thể hoàn thành dự án một mình. Ngoài ra, dù có rút ra cũng có thể tưởng tượng được gánh nặng của công ty là như thế nào. Điều gì sẽ xảy ra nếu ngày mai bạn đến và nói: “Tăng lương cho tôi gấp 10 lần, nếu không tôi sẽ bỏ bạn”. Rõ ràng là các công ty không muốn rơi vào tình huống như vậy. Vì vậy, việc trau dồi tính thích đáng và thiện chí ở bản thân cũng quan trọng (ít nhất) như việc phát triển một số kỹ năng chuyên môn.

Tóm lại, chúng ta có thể nói gì? Ngôn ngữ nào tốt và ngôn ngữ nào xấu? Chà, trong một nhóm ngôn ngữ nhất định, ví dụ giữa Ruby, Python và PHP, bạn nên chọn ngôn ngữ nào? Tất nhiên, câu trả lời đúng là Python, nhưng trên thực tế, sự khác biệt giữa chúng là ở số lượng lỗi được phép, ở số lượng lỗi khác - 5%, à, có thể là 10%. Nghĩa là, nếu bạn đã có một dự án làm sẵn được viết bằng PHP, thì không ai tỉnh táo sẽ nói: “Hãy viết lại mọi thứ bằng Python”. Họ sẽ nói: “Hãy thuê thêm nhà phát triển PHP và tiếp tục viết bằng PHP.” Tuyệt vời, đó là một lựa chọn tốt. Rõ ràng là nếu bạn đột nhiên quyết định viết một loại dự án nào đó, thì nên chọn Python ngay bây giờ. Mặc dù, điều đó cũng phụ thuộc. Có thể bạn có rất nhiều nhà phát triển PHP giá rẻ trên thị trường, còn Python thì đắt tiền và bạn nghĩ: “Đúng, công nghệ này tuyệt hơn, nhưng tôi sẽ tiết kiệm tiền cho các nhà phát triển đã có sẵn”. Và mọi thứ đều tuyệt vời, bạn đã đến và làm việc ở đó.
Làm cách nào để chọn giữa Java và C++? Vâng, gần như điều tương tự cũng xảy ra. Tôi nghĩ rằng vào thời điểm bạn quyết định sử dụng ngôn ngữ nào để bắt đầu một dự án lớn mới, bạn sẽ có được kiến ​​thức trong lĩnh vực chuyên môn của mình và có thể đưa ra lựa chọn đúng đắn. Bây giờ bạn chưa phải đưa ra lựa chọn đó, và vì vậy tôi khuyên bạn nên làm những gì bạn thích.

Những điều cơ bản, như tôi đã nói, những điều cơ bản nhất của lập trình (hàm là gì, if'ics là gì, for'ics, mảng, thứ gì khác) có thể được học bằng bất kỳ ngôn ngữ nào. Ví dụ, trong C++, vì có rất nhiều điểm tương đồng với nó và có ít chi tiết cụ thể nhất trong nó (ở cấp độ này) và có ít chữ cái bổ sung nhất để viết. Vậy thì khi bạn học một số thứ kiến ​​trúc phức tạp, bạn sẽ học được và không cần phải lo lắng quá nhiều về nó. Đó là, điều chính là cố gắng, tìm kiếm những gì bạn thích và khi bạn nhận ra rằng đã 4 giờ sáng và bạn đang ngồi viết cho vui, vì bạn thích nó - có lẽ là vào lúc đó rõ ràng là bạn đã tìm thấy .

Việc đưa máy tính vào mọi lĩnh vực hoạt động của con người đòi hỏi các chuyên gia thuộc nhiều lĩnh vực khác nhau phải thành thạo các kỹ năng sử dụng công nghệ máy tính. Trình độ đào tạo sinh viên đại học ngày càng tăng, những người ngay từ năm đầu tiên đã được làm quen với việc sử dụng máy tính và các phương pháp số đơn giản, chưa kể đến việc khi hoàn thành các khóa học và đồ án cấp bằng, việc sử dụng công nghệ máy tính đang trở thành tiêu chuẩn trong đại đa số các trường đại học.

Công nghệ máy tính hiện nay không chỉ được sử dụng trong tính toán kỹ thuật và khoa học kinh tế mà còn trong các chuyên ngành truyền thống phi toán học như y học, ngôn ngữ học và tâm lý học. Về vấn đề này, có thể nói rằng việc sử dụng máy tính đã trở nên phổ biến. Một nhóm lớn các chuyên gia đã xuất hiện - những người sử dụng máy tính cần kiến ​​thức về cách sử dụng máy tính trong ngành của họ - các kỹ năng làm việc với các công cụ hiện có. phần mềm, cũng như tạo ra phần mềm của riêng bạn phù hợp để giải quyết nhiệm vụ cụ thể. Và ở đây các mô tả về ngôn ngữ lập trình sẽ hỗ trợ người dùng.

2. Ngôn ngữ lập trình là gì

Ngôn ngữ lập trình- một hệ thống ký hiệu chính thức được thiết kế để mô tả các thuật toán ở dạng thuận tiện cho người thực hiện (ví dụ: máy tính). Ngôn ngữ lập trình xác định một tập hợp các quy tắc từ vựng, cú pháp và ngữ nghĩa được sử dụng để soạn thảo một chương trình máy tính. Nó cho phép lập trình viên xác định chính xác những sự kiện nào máy tính sẽ phản ứng, cách dữ liệu sẽ được lưu trữ và truyền đi cũng như những hành động nào sẽ được thực hiện trên máy tính trong các trường hợp khác nhau.

Kể từ khi tạo ra những cỗ máy lập trình đầu tiên, nhân loại đã nghĩ ra hơn hai nghìn rưỡi ngôn ngữ lập trình. Mỗi năm số lượng của họ được bổ sung thêm những cái mới. Một số ngôn ngữ chỉ được sử dụng bởi một số ít nhà phát triển của riêng họ, trong khi những ngôn ngữ khác được hàng triệu người biết đến. Các lập trình viên chuyên nghiệp đôi khi sử dụng hơn chục ngôn ngữ lập trình khác nhau trong công việc của mình.

Người sáng tạo ngôn ngữ diễn giải khái niệm này theo cách khác ngôn ngữ lập trình. Trong số những điểm chung được hầu hết các nhà phát triển công nhận là:

· Chức năng: một ngôn ngữ lập trình được thiết kế để viết chương trình máy tính, được sử dụng để truyền hướng dẫn đến máy tính để thực hiện một quy trình tính toán cụ thể và tổ chức điều khiển các thiết bị riêng lẻ.

· Nhiệm vụ: Ngôn ngữ lập trình khác với ngôn ngữ tự nhiên ở chỗ nó được thiết kế để truyền lệnh và dữ liệu từ người sang máy tính, trong khi ngôn ngữ tự nhiên chỉ được sử dụng để con người giao tiếp với nhau. Về nguyên tắc, chúng ta có thể khái quát hóa định nghĩa “ngôn ngữ lập trình” - đây là một cách truyền tải mệnh lệnh, mệnh lệnh, hướng dẫn hành động rõ ràng; trong khi ngôn ngữ của con người cũng dùng để trao đổi thông tin.

· Chấp hành: Ngôn ngữ lập trình có thể sử dụng các cấu trúc đặc biệt để xác định và thao tác các cấu trúc dữ liệu cũng như kiểm soát quá trình tính toán.

3. Các bước giải một bài toán trên máy tính.

VT đã tìm thấy ứng dụng hiệu quả nhất của mình khi thực hiện các phép tính tốn nhiều công sức trong nghiên cứu khoa học và tính toán kỹ thuật. Khi giải một bài toán trên máy tính, vai trò chính vẫn thuộc về con người. Máy chỉ thực hiện nhiệm vụ của mình theo chương trình đã được lập sẵn. Vai trò của con người và máy móc rất dễ hiểu nếu quá trình giải quyết một vấn đề được chia thành các giai đoạn được liệt kê dưới đây.

Xây dựng vấn đề. Giai đoạn này bao gồm việc hình thành vấn đề (vật lý) có ý nghĩa và xác định các giải pháp cuối cùng.

Sự thi công mô hình toán học. Mô hình phải mô tả chính xác (đầy đủ) các định luật cơ bản của quá trình vật lý. Việc xây dựng hoặc lựa chọn một mô hình toán học từ các mô hình toán học hiện có đòi hỏi sự hiểu biết sâu sắc về bài toán và kiến ​​thức về các ngành toán học liên quan.

Sự phát triển của World Cup. Vì máy tính chỉ có thể thực hiện những thao tác đơn giản nhất nên nó “không hiểu” cách trình bày bài toán, ngay cả trong công thức toán học. Để giải quyết nó, phải tìm ra một phương pháp số có thể đơn giản hóa vấn đề thành một số thuật toán tính toán. Trong từng trường hợp cụ thể phải chọn giải pháp phù hợp từ những tiêu chuẩn đã được phát triển.

Phát triển thuật toán. Quá trình giải một bài toán (quy trình tính toán) được viết dưới dạng một chuỗi các phép toán số học và logic cơ bản dẫn đến kết quả cuối cùng và gọi là thuật toán để giải bài toán.

Lập trình. Thuật toán giải quyết vấn đề được viết bằng ngôn ngữ mà máy có thể hiểu được dưới dạng một chuỗi thao tác được xác định chính xác - một chương trình. Quá trình này thường được thực hiện bằng cách sử dụng một số ngôn ngữ trung gian và việc dịch ngôn ngữ đó được thực hiện bởi chính máy và hệ thống của nó.

Điều chỉnh chương trình. Chương trình được biên dịch có nhiều loại lỗi, lỗi không chính xác và lỗi văn thư. Gỡ lỗi bao gồm giám sát chương trình, chẩn đoán (tìm kiếm và xác định nội dung) lỗi và loại bỏ chúng. Chương trình được kiểm tra bằng cách giải các bài toán kiểm soát (kiểm tra) để có được sự tin cậy về độ tin cậy của kết quả.

Tiến hành tính toán.Ở giai đoạn này, dữ liệu ban đầu để tính toán được chuẩn bị và việc tính toán được thực hiện bằng chương trình được thiết lập tốt. Đồng thời, để giảm bớt lao động thủ công trong việc xử lý kết quả, có thể sử dụng rộng rãi các hình thức đưa ra kết quả thuận tiện dưới dạng văn bản và thông tin đồ họa, dưới dạng dễ hiểu đối với con người.

Phân tích kết quả. Các kết quả tính toán được phân tích cẩn thận và soạn thảo các tài liệu khoa học kỹ thuật.

4. Ngôn ngữ lập trình để làm gì?

Quá trình hoạt động của máy tính bao gồm việc thực thi một chương trình, nghĩa là gõ hoàn toàn một số đội nhất định khá theo một thứ tự nhất định. Dạng máy của lệnh, bao gồm số 0 và số 1, cho biết chính xác hành động nào sẽ được thực hiện. CPU. Điều này có nghĩa là để cung cấp cho máy tính một chuỗi hành động mà nó phải thực hiện, bạn cần chỉ định một chuỗi mã nhị phân cho các lệnh tương ứng. Các chương trình mã máy bao gồm hàng nghìn lệnh. Viết những chương trình như vậy là một công việc khó khăn và tẻ nhạt. Người lập trình phải nhớ sự kết hợp giữa số 0 và số 1 trong mã nhị phân của mỗi chương trình, cũng như mã nhị phânđịa chỉ dữ liệu được sử dụng trong quá trình thực thi nó. Việc viết một chương trình bằng một số ngôn ngữ gần với ngôn ngữ tự nhiên của con người sẽ dễ dàng hơn nhiều và giao phó công việc dịch chương trình này sang mã máy cho máy tính. Đây là cách phát sinh các ngôn ngữ được thiết kế đặc biệt để viết chương trình - ngôn ngữ lập trình.

Có rất nhiều ngôn ngữ lập trình khác nhau có sẵn. Trên thực tế, bạn có thể sử dụng bất kỳ cách nào trong số đó để giải quyết hầu hết các vấn đề. Các lập trình viên có kinh nghiệm biết nên sử dụng ngôn ngữ nào là tốt nhất để giải quyết từng vấn đề cụ thể, vì mỗi ngôn ngữ có khả năng, định hướng riêng đối với các loại vấn đề nhất định và cách mô tả các khái niệm và đối tượng được sử dụng trong giải quyết vấn đề riêng.

Tất cả nhiều ngôn ngữ lập trình có thể được chia thành hai nhóm: ngôn ngữ cấp thấpcác ngôn ngữ bậc cao.

Ngôn ngữ cấp thấp bao gồm các ngôn ngữ hợp ngữ (từ tiếng Anh sangassemble - lắp ráp, lắp ráp). Hợp ngữ sử dụng các lệnh tượng trưng, ​​dễ hiểu và dễ nhớ. Thay vì một chuỗi các mã lệnh nhị phân, các ký hiệu tượng trưng của chúng được viết và thay vì địa chỉ nhị phân của dữ liệu được sử dụng khi thực thi lệnh, tên tượng trưng của dữ liệu này do lập trình viên chọn sẽ được ghi. Hợp ngữ đôi khi còn được gọi là mã ghi nhớ hoặc mã tự động.

Hầu hết các lập trình viên đều sử dụng ngôn ngữ cấp cao để viết chương trình. Giống như ngôn ngữ thông thường của con người, ngôn ngữ này có bảng chữ cái riêng - một tập hợp các ký hiệu được sử dụng trong ngôn ngữ đó. Những ký hiệu này được sử dụng để tạo nên cái gọi là từ khóa của ngôn ngữ. Mỗi từ khóa thực hiện chức năng riêng của mình, giống như trong ngôn ngữ quen thuộc của chúng ta, các từ được tạo thành từ các chữ cái trong bảng chữ cái của ngôn ngữ này, có thể thực hiện chức năng các bộ phận khác nhau lời nói. Từ khóađược liên kết với nhau thành câu theo những quy tắc cú pháp nhất định của ngôn ngữ. Mỗi câu xác định một chuỗi hành động nhất định mà máy tính phải thực hiện.

Ngôn ngữ cấp cao đóng vai trò trung gian giữa con người và máy tính, cho phép con người giao tiếp với máy tính theo cách quen thuộc hơn với con người. Thông thường ngôn ngữ như vậy giúp chọn phương pháp phù hợp để giải quyết vấn đề.

Trước khi viết chương trình bằng ngôn ngữ bậc cao, người lập trình phải viết thuật toán giải quyết một vấn đề, tức là một kế hoạch hành động từng bước cần được hoàn thành để giải quyết vấn đề này. Vì vậy, các ngôn ngữ yêu cầu biên dịch sơ bộ thuật toán thường được gọi là ngôn ngữ thuật toán.