031.1 Bài 1
Chứng chỉ: |
Web Development Essentials |
---|---|
Phiên bản: |
1.0 |
Chủ đề: |
031 Phát triển Phần mềm và Công nghệ Web |
Mục tiêu: |
031.1 Khái niệm cơ bản về Phát triển Phần mềm |
Bài: |
1 trên 1 |
Giới thiệu
Những chiếc máy tính đầu tiên đã được lập trình từ quá trình gán các cáp vào các ổ nối đầy cực nhọc. Từ đây, các nhà khoa học máy tính đã không ngừng tìm kiếm những cách dễ dàng nhất để có thể ra lệnh cho máy tính. Chương này sẽ giới thiệu cho người đọc về các công cụ lập trình. Chúng ta sẽ thảo luận về những cách chính mà các chỉ thị bằng văn bản—tức ngôn ngữ lập trình—đại diện cho các tác vụ mà một lập trình viên muốn hoàn thành cũng như về các công cụ dùng để biến các chương trình thành một dạng được gọi là ngôn ngữ của máy mà máy tính có thể chạy.
Note
|
Trong văn bản này, thuật ngữ chương trình và ứng dụng có thể được sử dụng thay thế lẫn nhau. |
Mã Nguồn
Một lập trình viên thường sẽ phát triển một ứng dụng bằng cách viết một bản mô tả bằng văn bản—hay còn được gọi là mã nguồn--của các tác vụ mong muốn. Mã nguồn sẽ ở dưới dạng ngôn ngữ lập trình được xác định một cách nghiêm ngặt để thể hiện những gì máy tính có thể thực hiện được ở mức độ trừu tượng cao mà con người có thể hiểu được. Nhiều công cụ cũng đã được phát triển để cho phép các lập trình viên cũng như những người không phải là lập trình viên diễn đạt suy nghĩ của họ một cách trực quan; tuy vậy, mã nguồn vẫn là cách lập trình chủ yếu nhất.
Cũng giống như trong một ngôn ngữ tự nhiên có danh từ, động từ và các cấu trúc để diễn đạt ý tưởng theo những cách cụ thể, các từ và dấu chấm câu trong ngôn ngữ lập trình là các ký hiệu tượng trưng cho các thao tác sẽ được thực hiện trên máy.
Về mặt này, mã nguồn không khác nhiều so với bất kỳ loại văn bản nào khác mà trong đó tác giả sử dụng các quy tắc đã được thiết lập từ lâu trong ngôn ngữ tự nhiên để giao tiếp với người đọc. Với mã nguồn, “người đọc” chính là máy móc; vì vậy, văn bản không thể chứa những điểm mơ hồ hoặc mâu thuẫn dù là nhỏ nhất.
Và giống như bất kỳ một văn bản thảo luận sâu về một chủ đề nào đó, mã nguồn cũng cần được cấu trúc tốt và tổ chức một cách hợp lý khi dùng để phát triển các ứng dụng phức tạp. Các chương trình đơn giản và các ví dụ mô phạm có thể được lưu trữ chỉ trong một vài dòng của một tệp văn bản chứa tất cả mã nguồn của chương trình. Các chương trình phức tạp hơn có thể được chia nhỏ thành hàng nghìn tệp, mỗi tệp có hàng nghìn dòng.
Mã nguồn của các ứng dụng chuyên nghiệp nên được sắp xếp thành các thư mục khác nhau có liên quan tới những mục đích cụ thể. Ví dụ như một chương trình tán gẫu có thể được tổ chức thành hai thư mục: một thư mục chứa các tệp mã xử lý việc truyền và nhận tin nhắn qua mạng và một thư mục khác chứa các tệp xây dựng giao diện và các phản ứng với thao tác của người dùng. Thật vậy, thông thường sẽ có nhiều thư mục và thư mục con chứa các tệp mã nguồn dành riêng cho các tác vụ rất cụ thể trong một ứng dụng.
Hơn nữa, mã nguồn không phải lúc nào cũng được tách biệt trong các tệp riêng được viết bằng một ngôn ngữ duy nhất. Ví dụ: trong các ứng dụng web, tài liệu HTML có thể nhúng mã JavaScript để thêm vào tài liệu một số chức năng bổ sung.
Trình Soạn Mã và IDE
Sự đa dạng các cách viết mã nguồn có thể khiến cho các nhà phát triển trở nên lúng túng. Do đó, nhiều nhà phát triển đã tận dụng các công cụ hỗ trợ việc viết và kiểm tra các chương trình.
Tệp mã nguồn cuối cùng cũng vẫn chỉ là một tệp văn bản thuần túy. Vì thế, nó có thể được chỉnh sửa bởi bất kỳ trình soạn thảo văn bản nào dù đơn giản đến đâu. Để dễ dàng phân biệt giữa mã nguồn và một văn bản thuần túy, mỗi ngôn ngữ sẽ sử dụng phần mở rộng tên tệp tự giải thích: .c
cho ngôn ngữ C, .py
cho Python, .js
cho JavaScript, v.v. Các trình soạn đa dụng đều hiểu rõ mã nguồn của các ngôn ngữ phổ biến đủ để thêm chữ nghiêng, màu sắc và thụt đầu dòng nhằm làm cho mã trở dễ hiểu hơn.
Không phải nhà phát triển nào cũng sẽ chọn chỉnh sửa mã nguồn trong những trình soạn đa dụng. Một Môi trường Phát triển Tích hợp (IDE - Integrated Development Environment) sẽ cung cấp một trình soạn thảo văn bản cùng với các công cụ để giúp lập trình viên tránh các lỗi cú pháp và không nhất quán rõ ràng. Những trình soạn thảo này đặc biệt được khuyên dùng cho những lập trình viên ít kinh nghiệm, nhưng những lập trình viên nhiều kinh nghiệm cũng vẫn sử dụng chúng.
Các IDE phổ biến như Visual Studio, Eclipse và Xcode sẽ theo dõi một cách thông minh những gì lập trình viên nhập, thường xuyên gợi ý các từ để sử dụng (tự động hoàn thành) và xác minh mã trong thời gian thực. Các IDE thậm chí có thể cung cấp tác vụ sửa lỗi và kiểm thử tự động để xác định các vấn đề bất cứ khi nào mã nguồn thay đổi.
Một số lập trình viên có kinh nghiệm hơn sẽ chọn các trình soạn ít trực quan hơn (ví dụ như Vim) hỗ trợ tính linh hoạt cao hơn và không yêu cầu cài đặt các gói bổ sung. Những lập trình viên này sử dụng công cụ độc lập bên ngoài để thêm các tính năng được tích hợp sẵn khi bạn sử dụng IDE.
Bảo trì Mã
Cho dù trong IDE hay khi sử dụng các công cụ độc lập, điều quan trọng là phải sử dụng một số loại hệ thống kiểm soát phiên bản (VCS - Version Control System). Mã nguồn luôn không ngừng phát triển vì các lỗi không lường trước được cần phải được sửa và các cải tiến cần phải được kết hợp. Hệ quả tất yếu của quá trình phát triển này là các bản sửa lỗi và cải tiến có thể sẽ ảnh hưởng đến các phần khác của ứng dụng trong một cơ sở mã lớn. Các công cụ kiểm soát phiên bản như Git, Subversion và Mercurial sẽ ghi lại tất cả các thay đổi được thực hiện đối với mã cũng như người thực hiện thay đổi đó, cho phép bạn theo dõi và sau cùng là khôi phục sau một phiên sửa đổi không thành công.
Hơn nữa, các công cụ quản lý phiên bản cho phép mỗi nhà phát triển trong nhóm có thể làm việc trên một bản sao của các tệp mã nguồn mà không can thiệp vào công việc của các lập trình viên khác. Khi các phiên bản mới của mã nguồn đã sẵn sàng và đã được thử nghiệm, các chỉnh sửa hoặc cải tiến trên một bản sao có thể được kết hợp bởi các thành viên khác trong nhóm.
Git là một hệ thống kiểm soát phiên bản phổ biến nhất hiện nay; nó cho phép nhiều bản sao độc lập của kho lưu trữ được duy trì bởi những người khác nhau muốn chia sẻ những thay đổi của họ theo ý muốn. Tuy nhiên, cho dù sử dụng hệ thống kiểm soát phiên bản phân tán hay tập trung thì hầu hết các nhóm đều sẽ phải duy trì một kho lưu trữ đáng tin cậy có mã nguồn và tài nguyên có thể dựa vào. Có nhiều dịch vụ trực tuyến cung cấp kho lưu trữ mã nguồn, phổ biến nhất trong số các dịch vụ này là GitHub và GitLab. Savannah của dự án GNU cũng rất đáng được nhắc đến.
Ngôn ngữ Lập trình
Có rất nhiều ngôn ngữ lập trình tồn tại; mỗi thập kỷ trôi qua chúng ta đều chứng kiến sự ra đời của những ngôn ngữ lập trình mới. Mỗi ngôn ngữ lập trình có các quy tắc riêng và được khuyến nghị cho các mục đích riêng. Mặc dù các ngôn ngữ thể hiện sự khác biệt nhất định về cú pháp và từ khóa nhưng điều thực sự phân biệt các ngôn ngữ với nhau là cách tiếp cận khái niệm sâu sắc mà chúng thể hiện, được gọi là mô hình (paradigm).
Mô hình
Các mô hình sẽ xác định tiền đề mà ngôn ngữ lập trình dựa vào, đặc biệt liên quan đến cách cấu trúc mã nguồn.
Nhà phát triển sẽ bắt đầu từ mô hình ngôn ngữ để hình thành các tác vụ mà máy cần thực hiện. Những tác vụ này được thể hiện một cách tượng trưng bằng các từ và cấu trúc cú pháp do ngôn ngữ cung cấp.
Ngôn ngữ lập trình đều tuân theo thủ tục khi các hướng dẫn được trình bày trong mã nguồn được thực thi theo thứ tự tuần tự, giống như một kịch bản phim. Nếu mã nguồn được phân thành các chức năng hoặc chương trình con thì một quy trình chính sẽ đảm nhận việc gọi các chức năng theo thứ tự.
Đoạn mã sau là một ví dụ về ngôn ngữ thủ tục. Được viết bằng C, nó định nghĩa các biến thể hiện độ dài cạnh (side), diện tích (area) và thể tích (volume) của các hình dạng địa lý. Giá trị của biến side
được gán trong main()
là hàm sẽ được gọi khi chương trình thực thi. Các biến area
và volume
được tính toán trong các chương trình con là square()
và cube()
đứng trước hàm chính:
#include <stdio.h>
float side;
float area;
float volume;
void square(){ area = side * side; }
void cube(){ volume = area * side; }
int main(){
side = 2;
square();
cube();
printf("Volume: %f\n", volume);
return 0;
}
Thứ tự của các hành động được xác định trong main()
sẽ xác định trình tự các trạng thái của chương trình, đặc trưng bởi giá trị của các biến side
, area
và volume
. Ví dụ sẽ kết thúc sau khi hiển thị giá trị của volume
với câu lệnh printf
.
Mặt khác, mô hình lập trình hướng đối tượng (OOP - Object-Oriented Programming) có đặc điểm chính là tách trạng thái chương trình thành các trạng thái con độc lập. Các trạng thái con và hoạt động liên quan này là đối tượng (được gọi như vậy vì chúng ít nhiều có sự tồn tại độc lập trong chương trình và có các mục đích cụ thể).
Các mô hình riêng biệt không nhất thiết phải hạn chế loại tác vụ mà một chương trình thực hiện. Mã từ ví dụ trước có thể được viết lại theo mô hình OOP bằng ngôn ngữ C++:
#include <iostream>
class Cube {
float side;
public:
Cube(float s){ side = s; }
float volume() { return side * side * side; }
};
int main(){
float side = 2;
Cube cube(side);
std::cout << "Volume: " << cube.volume() << std::endl;
return 0;
}
Hàm main()
vẫn còn. Nhưng bây giờ ta lại có một từ mới là class
(hạng) đưa ra định nghĩa về một đối tượng. Hạng được định nghĩa (có tên là Cube
) sẽ chứa các biến và chương trình con của chính nó. Trong OOP, một biến còn được gọi là thuộc tính và một chương trình con còn được gọi là phương thức.
Việc giải thích toàn bộ mã C++ trong ví dụ trên nằm ngoài phạm vi của chương này. Điều quan trọng ở đây là chúng ta thấy được Cube
chứa thuộc tính side
và hai phương thức. Phương thức volume()
sẽ tính toán thể tích của khối lập phương.
Ta có thể tạo một số đối tượng độc lập từ cùng một hạng và các hạng này có thể bao gồm các hạng khác nữa.
Hãy nhớ rằng các tính năng tương tự này có thể được ghi bằng những cách khác nhau và các ví dụ trong chương này đã được đơn giản hóa đi nhiều. C và C++ có nhiều tính năng phức tạp hơn cho phép xây dựng các cấu trúc mang tính thực tế và phức tạp hơn rất nhiều.
Hầu hết các ngôn ngữ lập trình sẽ không nhất quyết phải áp đặt một mô hình nhất định mà sẽ cho phép các lập trình viên lựa chọn các khía cạnh khác nhau của một mô hình nào đó. Ví dụ như JavaScript kết hợp các khía cạnh của nhiều các mô hình khác nhau. Lập trình viên có thể phân tách toàn bộ chương trình thành các chức năng không chia sẻ một trạng thái chung với nhau:
function cube(side){
return side*side*side;
}
console.log("Volume: " + cube(2));
Mặc dù ví dụ này cũng tương tự như lập trình thủ tục nhưng hãy lưu ý rằng hàm sẽ nhận một bản sao của tất cả thông tin cần thiết để thực thi và luôn tạo ra một kết quả giống nhau cho cùng một tham số, bất kể có những thay đổi nào xảy ra bên ngoài phạm vi của hàm. Mô hình này, hay còn được gọi là mô hình chức năng, bị ảnh hưởng mạnh mẽ bởi chủ nghĩa hình thức toán học mà trong đó, mọi phép toán đều tự hoạt động.
Một mô hình khác bao gồm các ngôn ngữ khai báo; nó mô tả các trạng thái của hệ thống mà bạn muốn. Một ngôn ngữ khai báo có thể tìm ra cách đạt được các trạng thái đã chỉ định. SQL là một ngôn ngữ chung để truy vấn cơ sở dữ liệu, đôi khi vẫn được gọi là ngôn ngữ khai báo dù nó thực sự chiếm một vị trí độc nhất trong quần thể lập trình.
Không có một mô hình phổ quát nào có thể được áp dụng cho mọi hoàn cảnh. Việc lựa chọn ngôn ngữ cũng có thể bị hạn chế bởi loại ngôn ngữ được hỗ trợ trên mỗi nền tảng hoặc môi trường thực thi nơi chương trình sẽ được sử dụng.
Ví dụ như một ứng dụng web được trình duyệt sử dụng sẽ cần phải được viết bằng JavaScript vì đây là ngôn ngữ được toàn bộ các trình duyệt hỗ trợ (một vài ngôn ngữ khác cũng có thể được sử dụng vì chúng có cung cấp trình chuyển đổi để tạo JavaScript). Vì vậy, đối với trình duyệt web—đôi khi được gọi là phía khách hàng hoặc phía người dùng (front end) của ứng dụng web—nhà phát triển sẽ phải sử dụng các mô hình được cho phép trong JavaScript. Phía máy chủ (back end) của ứng dụng là nơi xử lý các yêu cầu từ trình duyệt và thường được lập trình bằng một ngôn ngữ khác; PHP là ngôn ngữ phổ biến nhất cho mục đích này.
Bất kể là trong mô hình nào, mọi ngôn ngữ đều sẽ có các thư viện chức năng được xây sẵn và có thể tích hợp được vào mã. Các hàm toán học—như các hàm được minh họa trong mã ví dụ—không cần phải triển khai từ đầu vì ngôn ngữ đã có hàm sẵn để sử dụng. Ví dụ như JavaScript cung cấp cho đối tượng Math
các phép toán phổ biến nhất.
Thậm chí nhiều chức năng chuyên biệt hơn thường sẽ có sẵn từ nhà cung cấp ngôn ngữ hoặc nhà phát triển bên thứ ba. Các thư viện tài nguyên bổ sung này có thể ở dạng mã nguồn, tức là trong các tệp bổ sung được tích hợp vào với tệp mà chúng sẽ được sử dụng. Trong JavaScript, việc nhúng được thực hiện với import from
:
import { OrbitControls } from 'modules/OrbitControls.js';
Trong cách nhập này, tài nguyên được nhúng cũng là một tệp mã nguồn; cách nhập này thường được sử dụng nhiều nhất trong cái được gọi là ngôn ngữ thông dịch. Các ngôn ngữ biên dịch sẽ cho phép kết hợp các tính năng được biên dịch sẵn trong ngôn ngữ máy (tức các thư viện đã được biên dịch) bên cạnh nhiều yếu tố khác. Phần tiếp theo của bài học sẽ giải thích sự khác biệt giữa các loại ngôn ngữ này.
Trình biên dịch và Trình Thông dịch
Như chúng ta đã biết, mã nguồn là một biển diễn tượng trưng của một chương trình cần được dịch sang ngôn ngữ máy để chạy.
Nói một cách đại khái, có hai cách khả thi để thực hiện dịch: chuyển đổi mã nguồn trước để thực hiện trong tương lai, hoặc chuyển đổi mã tại thời điểm thực thi. Ngôn ngữ của phương thức thứ nhất được gọi là ngôn ngữ biên dịch và ngôn ngữ của phương thức thứ hai được gọi là ngôn ngữ thông dịch. Một số ngôn ngữ thông dịch sẽ cung cấp tính năng biên dịch dưới dạng tùy chọn để chương trình có thể bắt đầu một cách nhanh hơn.
Trong các ngôn ngữ biên dịch có sự phân biệt rõ ràng giữa mã nguồn của chương trình và chính chương trình sẽ được thực thi bởi máy tính. Sau khi được biên dịch, chương trình thường sẽ chỉ hoạt động trên hệ điều hành và nền tảng mà nó được biên dịch.
Trong một ngôn ngữ thông dịch, bản thân mã nguồn sẽ được coi là chương trình và quá trình chuyển đổi sang ngôn ngữ máy sẽ rất rõ ràng đối với người lập trình. Đối với một ngôn ngữ thông dịch, người ta thường gọi mã nguồn là tệp lệnh. Trình thông dịch sẽ dịch tệp lệnh sang ngôn ngữ máy cho hệ thống mà nó đang chạy.
Biên dịch và Trình Biên dịch
Ngôn ngữ lập trình C là một trong những ví dụ nổi tiếng nhất về ngôn ngữ biên dịch. Điểm mạnh nhất của ngôn ngữ C là tính linh hoạt và hiệu suất của nó. Cả siêu máy tính hiệu suất cao và bộ vi điều khiển trong thiết bị gia dụng đều có thể được lập trình bằng ngôn ngữ C. Các ví dụ khác về ngôn ngữ biên dịch phổ biến là C++ và C# (C sharp). Như tên của chúng đã cho hay, các ngôn ngữ này được lấy cảm hứng từ C nhưng sẽ bao gồm các tính năng hỗ trợ mô hình hướng tới đối tượng.
Cùng một chương trình được viết bằng C hoặc C++ có thể được biên dịch cho nhiều nền tảng khác nhau mà chỉ cần rất ít hoặc thậm chí là không có sự thay đổi trong mã nguồn. Trình biên dịch mới là yếu tố xác định nền tảng đích của chương trình. Có các trình biên dịch dành riêng cho một nền tảng nhất định cũng như các trình biên dịch đa nền tảng như GCC (viết tắt của GNU Compiler Collection) có thể tạo các chương trình nhị phân cho nhiều kiến trúc riêng biệt.
Note
|
Ngoài ra còn có các công cụ nhằm tự động hóa quá trình biên dịch. Thay vì gọi trực tiếp trình biên dịch, lập trình viên sẽ tạo một tệp chỉ định các bước biên dịch khác nhau để thực hiện tự động. Công cụ truyền thống được sử dụng cho mục đích này là |
Quá trình biên dịch không phải lúc nào cũng tạo ra một chương trình nhị phân bằng ngôn ngữ máy. Có những ngôn ngữ biên dịch sẽ tạo ra một chương trình ở định dạng thường được gọi là bytecode. Giống như một tệp lệnh, bytecode không phải là ngôn ngữ dành riêng cho một nền tảng nhất định; do đó, nó yêu cầu một chương trình thông dịch dịch nó sang ngôn ngữ máy. Trong trường hợp này, chương trình thông dịch sẽ được gọi đơn giản là thời gian chạy.
Ngôn ngữ Java sử dụng cách tiếp cận này để các chương trình được biên dịch viết bằng Java có thể được sử dụng trên các hệ điều hành khác nhau. Mặc dù tên là Java nhưng nó không có liên quan gì đến JavaScript.
Bytecode sát với ngôn ngữ máy hơn mã nguồn; vì vậy, tốc độ thực thi của nó có xu hướng nhanh hơn. Bởi vì vẫn còn một quá trình chuyển đổi trong quá trình thực thi bytecode nên rất khó để đạt được hiệu suất giống như chương trình tương đương được biên dịch thành ngôn ngữ máy.
Thông dịch và Trình Thông dịch
Trong các ngôn ngữ thông dịch như JavaScript, Python và PHP, chương trình không cần phải được biên dịch trước nên việc phát triển và sửa đổi chương trình sẽ trở nên dễ dàng hơn. Thay vì được biên dịch, tệp lệnh sẽ được thực thi bởi một chương trình khác gọi là trình thông dịch. Thông thường, trình thông dịch của một ngôn ngữ được đặt tên theo chính ngôn ngữ đó. Ví dụ: trình thông dịch của tệp lệnh Python là một chương trình có tên python
. Trình thông dịch của JavaScript thường là trình duyệt web, nhưng các tệp lệnh cũng có thể được thực thi bởi chương trình node
bên ngoài trình duyệt. Vì được chuyển đổi sang chỉ thị nhị phân mỗi khi được thực thi, một chương trình với ngôn ngữ được thông dịch sẽ có xu hướng chạy chậm hơn so với ngôn ngữ được biên dịch tương đương.
Một ứng dụng hoàn toàn có thể có các thành phần được viết bằng các ngôn ngữ khác nhau. Nếu cần, các thành phần này có thể giao tiếp với nhau thông qua giao diện lập trình ứng dụng (API - Application Programming Interface) chung.
Ví dụ như ngôn ngữ Python có khả năng khai thác dữ liệu và tổng hợp các bảng dữ liệu phức tạp. Nhà phát triển có thể chọn Python để viết các phần của chương trình xử lý một số khía cạnh nhất định và một ngôn ngữ khác (chẳng hạn như C++) để thực hiện xử lý các quy trình số học nặng hơn. Người ta có thể áp dụng chiến lược này ngay cả khi không có API (API cho phép giao tiếp trực tiếp giữa hai thành phần). Ví dụ: mã được viết bằng Python có thể tạo tệp ở định dạng phù hợp để chương trình được viết bằng C++ có thể sử dụng được.
Mặc dù có thể viết hầu hết mọi chương trình bằng bất kỳ ngôn ngữ nào nhưng nhà phát triển vẫn nên áp dụng một ngôn ngữ phù hợp nhất với mục đích của ứng dụng. Khi làm như vậy, bạn có thể được hưởng lợi từ việc tái sử dụng các thành phần đã được thử nghiệm và ghi chép đầy đủ.
Bài tập Hướng dẫn
-
Những loại chương trình nào có thể được sử dụng để chỉnh sửa mã nguồn?
-
Loại công cụ nào có thể giúp tích hợp công việc của các nhà phát triển khác nhau vào cùng một cơ sở mã?
Bài tập Mở rộng
-
Giả sử bạn muốn viết một trò chơi 3D để chơi trên trình duyệt. Các ứng dụng web và trò chơi đều được lập trình bằng JavaScript. Mặc dù có thể viết tất cả các chức năng đồ họa từ đầu, nhưng sẽ hiệu quả hơn nếu bạn sử dụng một thư viện có sẵn cho mục đích này. Thư viện của bên thứ ba nào có thể cung cấp khả năng cho hoạt hoạ 3D trong JavaScript?
-
Ngoài PHP, những ngôn ngữ nào khác có thể được sử dụng ở phía máy chủ của ứng dụng web?
Tóm tắt
Bài học này đã trình bày các khái niệm thiết yếu nhất về phát triển phần mềm. Nhà phát triển phải nhận thức được về các ngôn ngữ lập trình quan trọng và trường hợp sử dụng phù hợp cho từng ngôn ngữ. Bài học này đã nói về các khái niệm và quy trình sau:
-
Mã nguồn là gì.
-
Trình soạn mã nguồn và các công cụ liên quan.
-
Các mô hình lập trình thủ tục, hướng đối tượng, chức năng và khai báo.
-
Đặc điểm của ngôn ngữ biên dịch và thông dịch.
Đáp án Bài tập Hướng dẫn
-
Những loại chương trình nào có thể được sử dụng để chỉnh sửa mã nguồn?
Trên nguyên tắc, câu trả lời có thể là bất kỳ chương trình nào có khả năng chỉnh sửa văn bản thuần túy.
-
Loại công cụ nào có thể giúp tích hợp công việc của các nhà phát triển khác nhau vào cùng một cơ sở mã?
Hệ thống quản lý nguồn hoặc phiên bản, chẳng hạn như Git.
Đáp án Bài tập Mở rộng
-
Giả sử bạn muốn viết một trò chơi 3D để chơi trên trình duyệt. Các ứng dụng web và trò chơi đều được lập trình bằng JavaScript. Mặc dù có thể viết tất cả các chức năng đồ họa từ đầu, nhưng sẽ hiệu quả hơn nếu bạn sử dụng một thư viện có sẵn cho mục đích này. Thư viện của bên thứ ba nào có thể cung cấp khả năng cho hoạt hoạ 3D trong JavaScript?
Có nhiều lựa chọn về thư viện đồ họa 3D cho JavaScript, chẳng hạn như threejs và BabylonJS.
-
Ngoài PHP, những ngôn ngữ nào khác có thể được sử dụng ở phía máy chủ của ứng dụng web?
Bất kỳ ngôn ngữ nào được hỗ trợ bởi ứng dụng máy chủ HTTP được sử dụng trên máy chủ lưu trữ. Một số ví dụ chính là Python, Ruby, Perl và JavaScript.