Thảo luận  Góc Lập Trình

jablonec
Cũng là một người hơi hơi mê bên lập trình, mãi sau này mình mới có hướng đi và đang xây dựng nền tảng cho đam mê này mỗi ngày. Để hiểu thêm về lập trình và cần chia sẻ kinh nghiệm của mỗi người về lập trình. Mình lập topic này mong muốn trao đổi và học hỏi kiến thức.
1. Học lập trình có khó không?
2. Học lập trình có cần giỏi toán không?
3. Học lập trình nên bắt đầu từ đâu?
.....
Cảm ơn mọi người đã đọc topic.

21.jpg
 
Sửa lần cuối:
Trả lời

tranhuulong9x

Rìu Sắt
vậy mình học PHP thôi là viết dc 1 trang web hả a, khỏi cần học HTML và CSS được không a
học web mà ko học css , sql hay javascript sao được . nó là xương sống và nội bên trong trang web mà
 

tran5190

Búa Gỗ
mình đi học văn bằng 2 khoa học máy tính ở BK khi ngành học trước đó ko tìm được việc.
sau 3 năm, ra trường & đi làm, giờ là data engineer. Buổi tối tranh thủ học lên master data science.

Học lập trình mình thấy nó KHÔNG quan trọng khó hay dễ, nó sẽ có những domain cực khó như data science hoặc cực dễ để làm quen như làm software engineer, mọi cấp độ đều có thể tham gia vào ngành này để kiếm việc, quan trọng là bạn có thích coding hay ko. Nếu ko code được thì ko phải bạn dở mà là bạn ko phù hợp, thế thôi. Thầy hướng dẫn mình đến giờ vẫn code cho sinh viên xem 1 cách nhiệt tình & hăng say, đủ để thấy đam mê, hứng thú trong công việc mình chọn nó quan trọng ntn.

mình thấy học lập trình ko những vui, phù hợp với con trai (gái cũng ok nhưng thấy ngành này nam phù hợp hơn) mà còn mang lại thu nhấp tốt, nhiều lựa chọn trong cuộc sống: làm ở office, wfh, làm thêm project. Quan trọng nhất: nó cứu rỗi cuộc sống của mình khi mình bế tắc.

học thì mình có lời khuyên là hãy cố gắng học tốt những gì dc giao, mình dành time rất nhiều cho C++ khi còn đi học, sau này công việc ko dùng nữa nhưng kiến thức của nó dư sức cho mình cân mọi thể loại coding.

hãy theo học những khoá học ở trung tâm, hoặc là đi học văn bằng 2 để có được động lực.
PS: quên nói, tiếng anh là ko thể thiếu, nhưng ko cần quá smooth đâu, ae chơi game, xem film là đủ trau dồi, toeics tầm 700 là đủ cân mọi thể loại khách hàng, công ty nước ngoài nhé.

GOOD LUCK BROS.
 
Sửa lần cuối:

Quov Tsin

Dreamer
Mình xin chia sẻ một chút góc nhìn tổng quát cho mọi người CNTT – Lập trình phần mềm là như thế nào. Mình viết chủ yếu nhằm chia sẻ (vì mình vẫn nhớ hồi cấp 2 mình cũng lướt Google và khá khó để hiểu tổng quát cụ thể lập trình là như thế nào), và do mình cũng chỉ là sinh viên nên có thể kiến thức không chính xác được.

Ai có thể đọc được? Tất cả mọi người, kể cả những em học sinh cấp 2, miễn là mọi người đã từng sử dụng máy tính và thực sự muốn khám phá nó. Những trải nghiệm kể cả nhỏ nhất như mở case máy ra xem RAM ở đâu, ổ cứng HDD hình dạng như nào, giải nén RAR/ZIP hay bật tắt máy tính đều giúp các bạn dễ hình dung hơn khi học các kiến thức liên quan đến máy tính.

Máy tính ngày nay cực kì mạnh mẽ, RAM hàng chục GB, ổ cứng cả TB, CPU xử lí hàng chục triệu lệnh (instruction) một giây, nhưng nó vẫn có một đặc điểm: Máy tính chỉ hiểu được hữu hạn các instruction, và con người chúng ta phải đưa ra chính xác, chi tiết các lệnh để máy tính thực hiện.

Chương trình máy tính (computer program) ví dụ trình duyệt Web Google Chrome, Excel, Word, … chỉ là tập hợp các lệnh (instructions) mà máy tính có thể hiểu và thực hiện được.

Công việc viết ra phần mềm được gọi là lập trình (programming), và tương tự vậy những người làm lập trình thì gọi là lập trình viên (programmer)

Tập hợp những thành phần vật lý (tức nhìn thấy, sờ nắm được) cấu tạo nên máy tính, đảm nhiệm chức năng execute (thực thi mã lệnh) thì gọi là hardware (phần cứng), ví dụ như Mainboard, RAM, CPU.

Khi chúng ta click đúp chuột vào một chương trình, chương trình (lúc này đang nằm trong ổ cứng) sẽ được load lên RAM, từ RAM thì CPU sẽ tiếp tục load lần lượt các instruction lên CPU để thực thi (execute) à Ta nói rằng: Chương trình đang chạy (running), hay đang được thực thi (executing)

Ảnh1.png


Vậy điều các bạn cần hiểu được là gì? Chương trình chỉ là tập hợp các câu lệnh, và CPU là thành phần chịu trách nhiệm execute các câu lệnh này, khi các câu lệnh được executed thì chương trình chạy, và khi hết lệnh thì chương trình kết thúc.

1670209308067.png


Ví dụ đoạn code trên kia là một chương trình được viết bằng C++, chức năng chỉ là in ra màn hình dòng chữ “Chuong trinh chi la tap hop cac instructions”. Nâng cao hơn chút thì chương trình này sẽ được dịch ra Assembly code, và cuối cùng là machine-language instructions (ảnh dưới là assembly code tương ứng với các câu lệnh trong C++)

2022-12-04_224741.png


Lưu ý: Với một số bạn mới, các bạn sẽ rất dễ hiểu nhầm rằng máy tính (hay CPU) có thể trực tiếp hiểu/chạy được đoạn code C++ phía trên, điều này là không chính xác bởi code C++ còn phải qua bước dịch để thành mã máy (machine-language instruction) thì CPU mới có thể execute được. Cụ thể mình sẽ nói sau.

Ngoài ra khi nhắc đến viết code, viết chương trình các bạn sẽ có một số câu hỏi như: Viết như nào (tức có phải theo một bộ các quy tắc nào không, hay cứ viết bừa ra là máy tính chạy được), viết vào đâu, làm sao từ code mà ra được chương trình? Thì nếu các bạn muốn thì mình sẽ viết thêm


Machine language

Quay trở lại định nghĩa: “Máy tính (hay chính xác hơn là CPU) chỉ hiểu được hữu hạn các instruction, và con người chúng ta phải đưa ra chính xác các lệnh mà máy tính phải làm.”

CPU không hề hiểu ngôn ngữ lập trình C/C++ hay Java, … Ngôn ngữ duy nhất mà CPU hiểu là machine-language instruction. Tập hợp hữu hạn các lệnh (instruction) mà CPU có thể trực tiếp hiểu và execute được gọi là machine code (hoặc machine language, hoặc instruction set). Mỗi dòng CPU sẽ có một ISA (Instruction Set Architecture), trong ISA sẽ có quy định các lệnh mà CPU hỗ trợ (có bao nhiêu lệnh, chức năng là gì, …), format lệnh (một lệnh có độ dài bao nhiêu bits, hỗ trợ toán hạng nào, …). Ví dụ ngày trước CPU cổ thì bảng lệnh có nó chỉ có khoảng 30 lệnh tất cả thôi, và các phép cộng trừ thì chỉ thực hiện được với số nguyên, tuy nhiên các CPU hiện nay thì có lệnh (hoặc có cả thành phần vật lý trong CPU) thực hiện trực tiếp phép toán với số thập phân và hỗ trợ hàng trăm lệnh. (Ở đây mình mất cái ảnh Instruction set của con máy PDP-11 ngày trước rồi nên chưa post được)

Ví dụ machine language instruction: 10110000 11110001

Trước đây khi máy tính tính mới ra đời, các lập trình viên phải lập trình trực tiếp bằng cách viết machine code (tức viết 0 1), và các bạn có thể thấy ngay nhược điểm đó là:

  • Rất khó viết, các bạn sử dụng tiếng Việt/Anh giao tiếp hằng ngày. Còn lập trình lại phải 0 1 liên tục
  • Không có tính portable. Tức là mỗi dòng CPU sẽ có một ISA riêng (tức bảng mã instructions khác nhau), ví dụ lệnh copy số 5 vào register AX ở CPU X có dạng 0001 1110, nhưng cùng lệnh đó sang CPU Y thì lại biến thành 0111 0101 à Cùng một chương trình, thực hiện chức năng y hệt nhau nhưng đem sang máy tính khác sẽ phải viết lại toàn bộ
 
Sửa lần cuối:

dammage

Rìu Chiến
Ngoài ra khi nhắc đến viết code, viết chương trình các bạn sẽ có một số câu hỏi như: Viết như nào (tức có phải theo một bộ các quy tắc nào không, hay cứ viết bừa ra là máy tính chạy được), viết vào đâu, làm sao từ code mà ra được chương trình? Thì nếu các bạn muốn thì mình sẽ viết thêm
viết thêm đi bạn
AD06HjV.gif
 

Quov Tsin

Dreamer
Mà không biết có bác nào quan tâm đến giáo trình của trường ĐH không nhỉ? Mình có thể post giáo trình, nhận xét cho các bạn :v
P/s Mình cũng muốn xin giáo trình của trường ĐH Công nghệ DHQGHN - UET ngành CNTT, nếu ai có cho mình xin với
 

guest11

Rìu Chiến Chấm
8/tiếng anh trong học lập trình
không có tiếng anh bạn không thể tiến xa được trong ngành này, nhưng theo tui học tiếng anh để đi cào phím chửi lộn mới khó, chứ tiếng anh để đọc hiểu viết tài liệu khá dễ, có bao nhiêu đó thuật ngữ, chịu khó đọc nhiều là quen thôi
I love it.

Bạn nào muốn bắt đầu học C++ (introduction to C++) thì vào trang web tiếng Anh này. Có giải nghĩa rõ ràng và có phần thực tập (đơn giản).
 

khoa135789

Gà con
Mình cũng học lập trình nhưng đang bỏ ngang
Thật sự muốn tìm lại cảm giác như ban đầu là học rất thích
 

guest11

Rìu Chiến Chấm
Mình có cái bài toán này, từ hồi sinh viên mình nghĩ ra do hay đánh bài.

Hồi đó đi làm thêm ở Metro được nghịch máy tính thích lắm nên mình lấy Excel ra mình lập functions rồi bắt Excel nó tự giải bằng cách điền vào ô trống. Bài toán như sau:

Có 9 ô trống được sắp xếp theo 3 cột 3 dòng theo thứ tự

A1, B1, C1
A2, B2, C2
A3, B3, C3

Có 9 số tự nhiên liên tiếp từ 1 đến 9
Hãy sắp xếp làm sao để Tổng của bất kỳ 3 ô hàng ngang, hàng dọc, hoặc đường chéo cộng lại đều bằng 15.
Tổng bằng 15 có nghĩa là

A1+B1+C1 = 15
A2+B2+C2 = 15
A3+B3+C3 = 15

A1+A2+A3 = 15
B1+B2+B3 = 15
C1+C2+C3 = 15

A1+B2+C3 = 15
A3+B2+C1 = 15

Điều kiện là số 5 nằm ở ô chính giữa ô số B2, bạn hãy xếp 8 số còn lại vào 8 ô trống.

Mình mày mò tầm 30 phút viết functions sau đó Excel tự điền 8 số còn lại vào 8 ô trống, đấy là lần đầu tiên trong đời mình xử dụng máy tính vào để tính toán và nó khiến cho mình thích thú đến tận bây giờ.

Điền chéo thứ tự từ 1 đến 9, sau đó mang những số bên ngoài vào trong
1673059906402.png
 
Sửa lần cuối:

guest11

Rìu Chiến Chấm
Mình xin chia sẻ một chút góc nhìn tổng quát cho mọi người CNTT – Lập trình phần mềm là như thế nào. Mình viết chủ yếu nhằm chia sẻ (vì mình vẫn nhớ hồi cấp 2 mình cũng lướt Google và khá khó để hiểu tổng quát cụ thể lập trình là như thế nào), và do mình cũng chỉ là sinh viên nên có thể kiến thức không chính xác được.

Ai có thể đọc được? Tất cả mọi người, kể cả những em học sinh cấp 2, miễn là mọi người đã từng sử dụng máy tính và thực sự muốn khám phá nó. Những trải nghiệm kể cả nhỏ nhất như mở case máy ra xem RAM ở đâu, ổ cứng HDD hình dạng như nào, giải nén RAR/ZIP hay bật tắt máy tính đều giúp các bạn dễ hình dung hơn khi học các kiến thức liên quan đến máy tính.

Máy tính ngày nay cực kì mạnh mẽ, RAM hàng chục GB, ổ cứng cả TB, CPU xử lí hàng chục triệu lệnh (instruction) một giây, nhưng nó vẫn có một đặc điểm: Máy tính chỉ hiểu được hữu hạn các instruction, và con người chúng ta phải đưa ra chính xác, chi tiết các lệnh để máy tính thực hiện.

Chương trình máy tính (computer program) ví dụ trình duyệt Web Google Chrome, Excel, Word, … chỉ là tập hợp các lệnh (instructions) mà máy tính có thể hiểu và thực hiện được.

Công việc viết ra phần mềm được gọi là lập trình (programming), và tương tự vậy những người làm lập trình thì gọi là lập trình viên (programmer)

Tập hợp những thành phần vật lý (tức nhìn thấy, sờ nắm được) cấu tạo nên máy tính, đảm nhiệm chức năng execute (thực thi mã lệnh) thì gọi là hardware (phần cứng), ví dụ như Mainboard, RAM, CPU.

Khi chúng ta click đúp chuột vào một chương trình, chương trình (lúc này đang nằm trong ổ cứng) sẽ được load lên RAM, từ RAM thì CPU sẽ tiếp tục load lần lượt các instruction lên CPU để thực thi (execute) à Ta nói rằng: Chương trình đang chạy (running), hay đang được thực thi (executing)

Xem phần đính kèm 40669

Vậy điều các bạn cần hiểu được là gì? Chương trình chỉ là tập hợp các câu lệnh, và CPU là thành phần chịu trách nhiệm execute các câu lệnh này, khi các câu lệnh được executed thì chương trình chạy, và khi hết lệnh thì chương trình kết thúc.

Xem phần đính kèm 40670

Ví dụ đoạn code trên kia là một chương trình được viết bằng C++, chức năng chỉ là in ra màn hình dòng chữ “Chuong trinh chi la tap hop cac instructions”. Nâng cao hơn chút thì chương trình này sẽ được dịch ra Assembly code, và cuối cùng là machine-language instructions (ảnh dưới là assembly code tương ứng với các câu lệnh trong C++)

Xem phần đính kèm 40671

Lưu ý: Với một số bạn mới, các bạn sẽ rất dễ hiểu nhầm rằng máy tính (hay CPU) có thể trực tiếp hiểu/chạy được đoạn code C++ phía trên, điều này là không chính xác bởi code C++ còn phải qua bước dịch để thành mã máy (machine-language instruction) thì CPU mới có thể execute được. Cụ thể mình sẽ nói sau.

Ngoài ra khi nhắc đến viết code, viết chương trình các bạn sẽ có một số câu hỏi như: Viết như nào (tức có phải theo một bộ các quy tắc nào không, hay cứ viết bừa ra là máy tính chạy được), viết vào đâu, làm sao từ code mà ra được chương trình? Thì nếu các bạn muốn thì mình sẽ viết thêm


Machine language

Quay trở lại định nghĩa: “Máy tính (hay chính xác hơn là CPU) chỉ hiểu được hữu hạn các instruction, và con người chúng ta phải đưa ra chính xác các lệnh mà máy tính phải làm.”

CPU không hề hiểu ngôn ngữ lập trình C/C++ hay Java, … Ngôn ngữ duy nhất mà CPU hiểu là machine-language instruction. Tập hợp hữu hạn các lệnh (instruction) mà CPU có thể trực tiếp hiểu và execute được gọi là machine code (hoặc machine language, hoặc instruction set). Mỗi dòng CPU sẽ có một ISA (Instruction Set Architecture), trong ISA sẽ có quy định các lệnh mà CPU hỗ trợ (có bao nhiêu lệnh, chức năng là gì, …), format lệnh (một lệnh có độ dài bao nhiêu bits, hỗ trợ toán hạng nào, …). Ví dụ ngày trước CPU cổ thì bảng lệnh có nó chỉ có khoảng 30 lệnh tất cả thôi, và các phép cộng trừ thì chỉ thực hiện được với số nguyên, tuy nhiên các CPU hiện nay thì có lệnh (hoặc có cả thành phần vật lý trong CPU) thực hiện trực tiếp phép toán với số thập phân và hỗ trợ hàng trăm lệnh. (Ở đây mình mất cái ảnh Instruction set của con máy PDP-11 ngày trước rồi nên chưa post được)

Ví dụ machine language instruction: 10110000 11110001

Trước đây khi máy tính tính mới ra đời, các lập trình viên phải lập trình trực tiếp bằng cách viết machine code (tức viết 0 1), và các bạn có thể thấy ngay nhược điểm đó là:

  • Rất khó viết, các bạn sử dụng tiếng Việt/Anh giao tiếp hằng ngày. Còn lập trình lại phải 0 1 liên tục
  • Không có tính portable. Tức là mỗi dòng CPU sẽ có một ISA riêng (tức bảng mã instructions khác nhau), ví dụ lệnh copy số 5 vào register AX ở CPU X có dạng 0001 1110, nhưng cùng lệnh đó sang CPU Y thì lại biến thành 0111 0101 à Cùng một chương trình, thực hiện chức năng y hệt nhau nhưng đem sang máy tính khác sẽ phải viết lại toàn bộ
(Phần phụ (đọc) thêm cho bài viết của tác giả.)

Coding làm gì trên máy vi tính.
Câu trả lời ngắn gọn: Coding chỉ dẫn máy vi tính phải làm những gì.

Nhưng thực sự không quá đơn giản như vậy.

Trả lời dài:
Máy vi tính chỉ phân biệt được 2 trạng thái rất đơn giản: on/off (tắt/mở) của transistors (nhiều mạch điện bán dẫn hợp lại). Trong một máy vi tính hiện thời, có cả hằng triệu, tỷ transistors. Thiết bị vi tính chỉ có thể làm được là tắt những transistors nào và mở những transistor nào.

Mỗi transistor có 2 trạng thái: tắt hoặc mở. Hai trạng thái này được toán học biểu hiệu bằng 2 số 0 (tắt) hoặc số 1 (mở), còn gọi là số nhị nguyên. Một transistor còn được là 1 “bit”, gom 8 transitors lại thành 1 “byte”.

Thí dụ dãy số dưới đây là một binary code (code nhị phân) gồm 8 bits, hoặc một byte: 11101001

Tới đây, một trở ngại, vấn đề to lớn xuất hiện. Để viết một phần mềm, người viết code phải viết hằng triệu, hằng tỷ số 0 và 1, cần đến một khối óc siêu phàm và đôi khi cần cả một hoặc hai đời người để hoàn thành một phần mềm viết bằng machine language (code nhị phân).

Vấn để này khai sinh nhiều ngôn ngữ lập trình (programming languages) mới như assembly language, C/C++/C#, Python…

Assembly language thuộc loại low -level language, dùng cả chữ lẫn số 0 và 1, gần gũi với machine language hơn trong khi C, Python…. thuộc loại high-level language. Lợi điểm lớn của high-level language là dễ đọc, dễ hiểu, dễ viết, dễ tìm lỗi… vì gần gũi với Anh Ngữ.

Hãy so sánh 2 đoạn codes, một của machine language và một của C++, viết cho cùng một mục đích.

Machine Language C++ Language
1673232000308.png
1673232068171.png

Cho dù một người chưa hề biết viết coding cũng phải nhận ra học viết code trong C++ sẽ dễ hơn học viết codes trong machine language.

Dù sao, lập trình nào cũng cần đến một “thông dịch viên” để thiết bị vi tính thi hành các lệnh của lập trình.

- Các dòng codes (program) của nguồn từ high-level language được dịch sang Assembly Language.
- Assembly Language được dịch sang machine language
- Machine language thi hành lệnh bằng binary code.



P.S. Có bao nhiêu dòng lệnh trong Windows 10? Khoảng 50 triệu dòng lệnh.

Có bao nhiêu dòng lệnh trong Google? Khoảng 2 tỷ dòng lệnh, cho Google Search, Gmail, và Google Maps

 

LaConCop

Búa Gỗ Đôi
Ở TP HCM muốn học C++ thì học ở đâu các bác nhỉ ? học liên tục trong tuần
 

Long Sao

Rìu Bạc Đôi
Học lập trình không khó. Học giỏi toán không hẳn là sẽ giỏi lập trình. còn việc học lập trình thì nên chọn MacOS hoặc Linux Core thì sẽ dễ lập trinh và ít bị Autoit và spy hơn là dùng Windows để lập trình. Học lập trình cần giỏi trừu tượng hay còn gọi là khả năng ảo hóa trong tư duy về cách lập trình những bước gì.
 

alaky

Rìu Sắt
Ở TP HCM muốn học C++ thì học ở đâu các bác nhỉ ? học liên tục trong tuần
Học được 30% các kênh sau đây các Bạn đã trở thành pro rồi ạ 🙂
Xin chia sẻ với các Anh Em, các Bác
Các Kênh Lập Trình Chuyên Nghiệp nhé ạ 😃

Top Pro (Full Code)
https://youtube.com/@freecodecamp

edureka! (Training, Learning, Beginners, )
https://youtube.com/@edurekaIN

Programming With Mosh (Top Coder)
https://youtube.com/@programmingwithmosh

Tech With Tim (Python)
https://youtube.com/@TechWithTim

MySirG.com
https://youtube.com/@saurabhexponent1

Corey Schafer (1.1M sub)
https://youtube.com/@coreyms

CS Dojo (1.9M sub)
https://youtube.com/@CSDojo

Engineer Man (Rì ắc 🙂, ...)
https://youtube.com/@EngineerMan

K team ( C# cơ bản )


Fox Learn (Visual Studio)


evondev (VSCode toàn tập)


#SimpleCode (T.Nga)


CodeXplore (VN)
https://youtube.com/@CodeXplore

Alek OS
https://youtube.com/@AlekOS

The Amazing Codeverse


Yugi Hacker Channel
https://youtube.com/@YugiHackerChannel

VU Vicky
https://youtube.com/@VUVicky

Le Dung
https://youtu.be/xZOPbYK9diA
 

hatcatvodanh

Rìu Sắt
Học được 30% các kênh sau đây các Bạn đã trở thành pro rồi ạ 🙂
Xin chia sẻ với các Anh Em, các Bác
Các Kênh Lập Trình Chuyên Nghiệp nhé ạ 😃

Top Pro (Full Code)
https://youtube.com/@freecodecamp

edureka! (Training, Learning, Beginners, )
https://youtube.com/@edurekaIN

Programming With Mosh (Top Coder)
https://youtube.com/@programmingwithmosh

Tech With Tim (Python)
https://youtube.com/@TechWithTim

MySirG.com
https://youtube.com/@saurabhexponent1

Corey Schafer (1.1M sub)
https://youtube.com/@coreyms

CS Dojo (1.9M sub)
https://youtube.com/@CSDojo

Engineer Man (Rì ắc 🙂, ...)
https://youtube.com/@EngineerMan

K team ( C# cơ bản )


Fox Learn (Visual Studio)


evondev (VSCode toàn tập)


#SimpleCode (T.Nga)


CodeXplore (VN)
https://youtube.com/@CodeXplore

Alek OS
https://youtube.com/@AlekOS

The Amazing Codeverse


Yugi Hacker Channel
https://youtube.com/@YugiHackerChannel

VU Vicky
https://youtube.com/@VUVicky

Le Dung
https://youtu.be/xZOPbYK9diA

Pro Thật Nha...Cám ơn Rất Nhiều...👏👏🤝🤝🤝👍👍👌