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

NgoHungCuong


Junior Moderator
Thành viên BQT
Mình đang học về phần hàm trong C++. Ví dụ : Dưới đây là một dạng đơn giản của hàm giải phương trình bậc 2.

Code:


Chạy mà bị báo lỗi này các bác ạ:
error: undefined reference to 'winmain'
ld returned 1 exit status

Mấy ngày nay seach google để sửa lỗi mà chưa được. {ah}
bạn dịch thành ứng dụng console thì nó là hàm main còn dịch thành ứng dụng đồ họa Win32 thì nó cần hàm WinMain.
Bạn có thể chỉnh lại chế độ thành console là được.
 
Sửa lần cuối:

NgoHungCuong


Junior Moderator
Thành viên BQT
topic coi bộ xôm tụ vậy, tui cũng xin góp vài ý kiến dựa theo hiểu biết cá nhân (mặc dù mấy cái này tui cũng nói nhiều lần rồi)

1/học lập trình có khó không
không khó cũng không dễ, còn tùy lĩnh vực và mức độ, hồi trước có thằng nhóc mới lớp 7 lớp 8 gì đó viết cái trình duyệt web, bên Nhật cũng có 1 bà hình như 70 tuổi rồi cũng học lập trình rồi viết app điện thoại được

2/lập trình có cần toán hay không
lập trình chỉ là cách nói chung chung, thật ra nó rất rộng (giống bác sĩ vậy, răng hàm mặt, tai mũi họng, tim mạch, thần kinh...), tùy từng lĩnh vực và mức độ mà sẽ có cần toán nhiều hay ít, như tui đây có những lúc rất cần, nó giúp tối ưu chương trình, tính toán hiệu quả của các thuật giải hay hướng cài đặt... cũng có những khi tui chỉ copy công thức hay áp mấy hàm có sẵn vô rồi chạy thôi

3/học lập trình là học gì
như 1 bạn có nói ở trên, học lập trình là học kĩ năng, công cụ, tư duy, còn muốn viết ra cái gì thì cần phải có kiến thức chuyên về cái đó nữa, hồi trước bên vn-zoom cũ có 1 bạn (hình như là nữ) nói rằng muốn lập trình cái này cái nọ mà sao đọc biết bao nhiêu sách lập trình c rồi quanh đi quẩn lại cũng chỉ có mảng, cấu trúc, con trỏ, abcxyz... đơn giản vì sách c thì nó chỉ dạy về c thôi chứ còn cái gì khác nữa đâu, những bạn mới học lập trình dễ bị lạc lối giống vậy

4/học lập trình nên bắt đầu từ đâu
trước hết là bạn xác định coi bạn thích đi theo ngành nào, lĩnh vực nào đã, xong rồi sẽ có người hướng dẫn cho bạn học những kiến thức, ngôn ngữ, công cụ trong lĩnh vực đó, còn nếu chưa xác định được hướng đi rõ ràng thì cứ lấy đại 1 ngôn ngữ nào đó mà học lấy căn bản, lời khuyên của tui là nên học c/c++, còn nếu bạn thích 1 ngôn ngữ nào đó thì cứ học thẳng nó luôn

5/nên chọn ngôn ngữ lập trình nào để lấy nền tảng căn bản
các ngôn ngữ hiện đại đều phát triển tiệm cận lẫn nhau theo hướng thân thiện, giúp người mới dễ tiếp cận nắm bắt, ngôn ngữ nào cũng có thể làm nền tảng được

hồi năm 1 tui học turbo pascal, lên năm 2 học lập trình c vô lớp thầy giảng có đúng... 10 phút là làm bài tập, đơn giản vì nó chỉ khác nhau cái cú pháp với chút xíu đặc trưng, như mảng trong pascal thì bắt đầu từ 1 còn c thì bắt đầu từ 0 vậy thôi, mà bài tập thì quanh đi quẩn lại cũng nhiêu đó, giải phương trình bậc 2, duyệt mảng, duyệt ma trận, tìm số nguyên tố, số chính phương, số hoàn hảo...., abcxyz y chang, ngoại trừ 1 số phần như con trỏ là mới vì bên pascal không có thôi, rút ra 3 điều

thứ 1, trên mạng tui thấy nhiều người khuyên nên bắt đầu bằng những ngôn ngữ như pascal hay c, rồi tiến lên java c#, rồi tiến lên abcxyz... hồi đó tui cũng được dạy theo cái lộ trình này nhưng thực tế thấy nhiều bạn bắt đầu với java, visual basic, c#, actionscript... mà giờ vẫn code ầm ầm => kinh nghiệm của tui là không có cái lộ trình nào hết, bạn thích ngôn ngữ nào cứ bắt đầu thẳng với nó, học 1 ngôn ngữ để lấy nền tảng chứ không có ngôn ngữ nào gọi là ngôn ngữ nền tảng, nền tảng chắc chỉ có assembly,

thứ 2, nhiều bạn có thể lo lắng "học xong ngôn ngữ abc nào đó mốt chuyển qua ngôn ngữ khác có lãng phí thời gian không", học ngôn ngữ quan trọng nhất là nắm bắt tư duy, mà tư duy thì không lệ thuộc ngôn ngữ, bạn nắm được cách thức tư duy rồi thì chuyển qua 1 ngôn ngữ khác cũng sẽ dễ dàng nhanh chóng hơn, như tui kể ở trên, mấy khái niệm lập trình căn bản tui đã học hết ở bên pascal rồi, qua c chỉ có học sơ cú pháp rồi làm bài tập thôi, không có lập trình viên nào chỉ biết độc 1 ngôn ngữ duy nhất đâu

thứ 3, có 1 ngoại lệ đó là đừng chọn những ngôn ngữ lỗi thời, tui học pascal xong, qua năm 2 học c thì tất cả các môn đều cài đặt bằng c hết, kĩ thuật lập trình, giải thuật, hệ điều hành, đồ họa máy tính... bài tập, giáo án, code mẫu tất cả đều là code c, pascal đúng nghĩa học xong bỏ, đúng là nó ít nhất cũng có tác dụng giúp tui học c nhanh hơn nhưng như đã nói, bạn có thể học thẳng ngôn ngữ nào bạn thích không cần "bước đệm" gì hết, tui khuyến khích c/c++ vì nó là 1 ngôn ngữ thời thượng, hiện đại, tầm ứng dụng sâu rộng, là nguồn để cho nhiều ngôn ngữ sau tham khảo và phát triển (các ngôn ngữ hệ c), trong số những thứ tui học được hồi xưa thì cái pascal chắc là thứ vô dụng lãng phí nhất

6/các môn về kĩ năng và tư duy
ở trên cũng có bạn nhắc tới mấy môn như kĩ thuật lập trình, phong cách lập trình, giải thuật, nếu coi ngôn ngữ là công cụ diễn đạt thì những môn này chính là kĩ năng và tư duy diễn đạt, mà tư duy thì không lệ thuộc ngôn ngữ (như tui cực dốt tiếng mỹ mà thử đưa tiền mỹ đây coi biết xài hông
7L1XX2F.gif
), dù bạn học ngôn ngữ nào, lĩnh vực gì thì cũng nên biết qua mấy môn ở trên

7/sách ngôn ngữ lập trình căn bản
sách lập trình thì nhiều nhưng thật ra kiến thức cũng chỉ nhiêu đó, mỗi cuốn chỉ khác nhau cách tiếp cận vấn đề mà thôi, nói nôm na giống như tin tức sự kiện thì chỉ có 1 nhưng mỗi tờ báo tiếp cận khác nhau, bình luận theo góc nhìn khác nhau, mỗi cuốn sách như 1 con đường, cuối cùng rồi cũng về la mã vì rốt cuộc đều nói về cùng 1 đối tượng thôi (dĩ nhiên phải là sách đúng chứ lụm mấy cuốn xàm trôi nổi trên mạng tên tác giả còn hông có thì thua)

theo tui là cứ lướt qua hết 1 lượt, thấy cuốn nào ưng ý thì chọn cuốn đó, đọc xong rồi nếu muốn tìm hiểu thêm thì đọc qua cuốn khác, thời gian đọc cuốn sau sẽ nhanh hơn cuốn trước vì có những thứ đã biết từ cuốn trước rồi, tốt nhất nên đọc mấy sách tiếng anh, thứ 1 vì sách tiếng anh nhìn chung tốt hơn tiếng việt, thứ 2 là luyện ngoại ngữ, bạn cũng nên chọn sách nào càng mới càng tốt để update luôn các chuẩn ngôn ngữ và công cụ mới

8/công cụ lập trình
công cụ lập trình thì mỗi hãng mỗi khác nhau, thậm chí cùng 1 công cụ nhưng khác phiên bản thôi cũng khác luôn rồi, bởi vậy code viết trên trình này xong đem qua trình khác không chạy được là bình thường, những bạn mới học lập trình chưa có đủ kinh nghiệm hay kiến thức sẽ khó fix được, để tránh rắc rối không đáng có tốt nhất bạn học sách nào thì xài công cụ theo sách đó luôn (cùng phiên bản luôn nữa thì càng tốt)

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
tuyệt vời.
 

NgoHungCuong


Junior Moderator
Thành viên BQT
tui tìm đâu thấy chỗ nào nói thay thế hàm main đâu bạn, hơn nữa hàm main được quy ước là nơi chương trình bắt đầu, không có gì thay thế nó được
Chắc bạn ấy code trên windows.
Kiểu ứng dụng console thì bắt đầu bằng hàm main còn kiểu ứng dụng đồ họa Win32 thì bắt đầu bằng hàm WinMain
 

jablonec

Rìu Chiến Chấm
Chả nhẽ code cho vi điều khiển dùng PHP với golang?
Tùy mục tiêu mà học cái gì cho phù hợp chứ bạn.
Mình viết code cho vi điều khiển đây. C vẫn là ổn nhất cho vi điều khiển.
Trước mình cũng lập trình cho chip 8051 và cũng ngâm cứu ARM, cũng học khá nhiều về ngành này nhưng sau lại đi cài win dạo nên dừ đang đam mê bên lĩnh vực khác.
 

jablonec

Rìu Chiến Chấm
Bài toán: Thực hiện chụp màn hình Desktop trong C#.
Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Capture_Screen
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnCapture_Click(object sender, EventArgs e)
{
Size s = Screen.PrimaryScreen.Bounds.Size;
Bitmap bmp = new Bitmap(s.Width, s.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(0, 0, 0, 0, s);
pictureBox1.Size = s;
pictureBox1.Location = new Point(0, 0);
pictureBox1.Image = bmp;

}

private void btnSave_Click(object sender, EventArgs e)
{
SaveFileDialog saveF1 = new SaveFileDialog();
saveF1.Title = "Save Image";
saveF1.Filter = "Bitmap|*.bmp|ALL File|*.*";
saveF1.FileName = "";
if(saveF1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(saveF1.FileName);
}
}
}
}
Kết quả:

Animation.gif
 

ryuvan

Gà con
theo mình nghĩ :
1 : học lập trình tất nhiên khó rồi, lập trình nó cũng như những môn học khác, cần đòi hỏi tư duy để giải quyết vấn đề ,
2 : học lập trình nên biết về toán, không cần phải giỏi giỏi như thi đội tuyển toán, nhưng nên biết về toán,
3 : học từ những cái cơ bản nhất, mình nghĩ lập trình nó cũng chỉ xoay quanh : vòng lặp, if/else, tuần tự,
 

kuang

Gà con
Theo ý kiến của mình, ngôn ngữ lập trình không khó. Chưa quen thì làm/học ít bữa là quen được.
Mà lập trình khó ở chỗ phải có cái tư duy logic, phương pháp phân tích vấn đề để giải quyết
Nên nếu học lập trình, các bạn học từ cơ bản của ngôn ngữ lập trình: loại ngôn ngữ, các cách khai báo tên/biến, cấu trúc điều khiển (như if/vòng lặp/rẽ nhánh...,), và quan trọng là cấu trúc chương trình của ngôn ngữ đó.
Khi học cơ bản, các bạn nên học & hành cùng lúc thông qua các ví dụ, mẫu.
Sau đó thì nên học các phương pháp logic, phân tích, thiết kế phổ biến và áp dụng (top-down, bottom-up, KISS, SOLID,...)
 
chán nhể, chả có nhẽ cả vn-z không có ai dân lập trình ???

mình dân kinh tế nên chạ chia sẻ đc gì giúp bạn.
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?
Theo quan điểm mình như thế này
1. Học lập trình không khó về kỹ thuật, tư duy >>vì các trang mạng hỗ trợ rất nhiều, cái khó ở đây là bạn bắt buộc phải cần cù. Làm nhiều bài tập và thành thói quen lúc đó sẽ trở nên dễ dàng và là nền tảng bạn phát triển cho các code cấp cao hơn
2. Học lập trình không cần giỏi toán, không giỏi nhưng phải nắm cơ bản, hơn nữa lập trình có nhiều mảng. Bảng theo mảng nào thì đặc thù mà việc tư duy toán tử có cần thiết hay không.
3. Với 1 người mới bắt đầu tiếp cận lập trình định hướng là xác định học 1 ngôn ngữ thuần thục, và trước là tập tềnh theo các Video youtube và tài liệu mạng. Sau đó làm bài tập cơ bản của các tài liệu trên mạng đó. Sau khi nắm các cơ bản nếu định hướng lập trình mảng nào thì nên đăng ký 1 khóa online có hỗ trợ giảng bài để tương tác trực tiếp vừa có thể hệ thống bài học và nhanh lên lv.
 

lvt491

Rìu Vàng Đôi
Nhờ mọi người chuyển giúp các dãy số dưới đây sang dạng thời gian. Vì có cái app nó tạo ra các file có tên bên dưới nằm trong ngày 18.08.2021 khung giờ 06h00 ~ 06h59 (17 files) mà ko hiểu sao lại có tên như vậy.

1629241378
1629241590
...
1629244778
 

TrungLun0112

Búa Gỗ
Phải xác định là lập trình gì mới đc: Web, app, phần mềm... rồi cứ thế mà học thôi
 

khdang

Gà con
Có bạn nào đang học Node.js không, cho mình hỏi có khó học không nhỉ?
 

Quov Tsin

Dreamer
Cho em hỏi mọi người thường xử lí như nào khi gặp một vấn đề, lý thuyết khó hiểu khi học lập trình? Hiện tại em đang học C++ (em chưa học NNLT nào trước đây), mỗi khi em gặp một phần định nghĩa, lý thuyết khó hiểu thì em đều search Google, nhưng quan trọng là khi giải thích họ lại dùng những kiến thức khó hiểu/ chưa học tới/ nâng cao hơn để giải thích những cái lý thuyết đó. Chưa nói tới rào cản về tiếng Anh (có thể khắc phục bằng Google dịch hoặc từ điển) thì những thứ mà họ giải thích lại kéo thêm cả đống thứ khó hiểu khác thành ra em phải "chữa cháy" bằng cách tìm cái dễ hiểu nhất, hoặc tự đoán đoán nó là cái gì (mặc dù cái em đoán có thể không chính xác hoàn toàn).
 

Xuale

Búa Gỗ Đôi
Chào các bạn
Mình mới học lập trình C, ban đầu mình khai báo biến x là int.
Mình muốn chương trình nhận biết khi nhập giá trị của x là các ký tự (thay vì số), để loại bỏ trường hợp này không?
Mong các bạn giúp cám ơn.
 

statistics

Moderator
Thành viên BQT
Chào các bạn
Mình mới học lập trình C, ban đầu mình khai báo biến x là int.
Mình muốn chương trình nhận biết khi nhập giá trị của x là các ký tự (thay vì số), để loại bỏ trường hợp này không?
Mong các bạn giúp cám ơn.
là sao bác nhỉ, là bác muốn biến x của bác nhận ký tự thay vì số hả bác.
 

randomusername

Rìu Bạc Đôi
Cho em hỏi mọi người thường xử lí như nào khi gặp một vấn đề, lý thuyết khó hiểu khi học lập trình? Hiện tại em đang học C++ (em chưa học NNLT nào trước đây), mỗi khi em gặp một phần định nghĩa, lý thuyết khó hiểu thì em đều search Google, nhưng quan trọng là khi giải thích họ lại dùng những kiến thức khó hiểu/ chưa học tới/ nâng cao hơn để giải thích những cái lý thuyết đó. Chưa nói tới rào cản về tiếng Anh (có thể khắc phục bằng Google dịch hoặc từ điển) thì những thứ mà họ giải thích lại kéo thêm cả đống thứ khó hiểu khác thành ra em phải "chữa cháy" bằng cách tìm cái dễ hiểu nhất, hoặc tự đoán đoán nó là cái gì (mặc dù cái em đoán có thể không chính xác hoàn toàn).

Theo mình, để hiểu lý thuyết thì cứ thực hành nhiều vào bác, ít nhất là nó phù hợp với mình.

Khái niệm khá khó hiểu nên khi đọc nó dùng não nhiều để load và phải đọc từng từ từng chữ của nó vì không có chữ dư thừa đâu.

Dạy để hiểu thì dễ chứ từ hiểu mà rút ra khái niệm mới khó vì nó cần cô đọng, chính xác và tránh hiểu nhầm.

Cho nên, cách đơn giản nhất là thực hành nhiều vào là hiểu lý thuyết thôi bác. Hoặc ít nhất là bác hiểu sơ sơ thì đọc lại lý thuyết sẽ hiểu rõ hơn rất nhiều.
 

Xuale

Búa Gỗ Đôi
là sao bác nhỉ, là bác muốn biến x của bác nhận ký tự thay vì số hả bác.
Chào bạn
Ý mình là khi người sử dụng nhập ký tự, chương trình làm sao phát hiện và không thực hiện. Thí dụ khi mình viết vòng lập while nếu nhập số thì bình thường nhưng khi nhập ký tự vòng lập cứ chạy hoài và không thể thoát ra được, làm sao để loại bỏ trường hợp này.
Cám ơn bạn
 

statistics

Moderator
Thành viên BQT
Chào bạn
Ý mình là khi người sử dụng nhập ký tự, chương trình làm sao phát hiện và không thực hiện. Thí dụ khi mình viết vòng lập while nếu nhập số thì bình thường nhưng khi nhập ký tự vòng lập cứ chạy hoài và không thể thoát ra được, làm sao để loại bỏ trường hợp này.
Cám ơn bạn
Khi bác nhập ký tự vào biến kiểu int thông qua "cin" là không hợp lệ thì nó sẽ báo không thành công và sẽ bỏ qua cin. Khi cin không thành công, thì nó không có báo lỗi ra màn hình nên bác sẽ không biết.
Cho nên bác chỉ cần chèn thêm cin.fail() vào, nếu không thành công thì nó trả giá trị true cho bác, thành công thì ngược lại.
bác có thể chạy dòng code sau để test thử.
C++:
#include<iostream>
using namespace std;

int main(){
    int x = 7;

    while(!cin.fail()){
        cout << "OK\n";
        cin >> x;
    }

    return 0;
}
Mong là giải quyết được vấn đề của bác.
 
Sửa lần cuối:

Teplice

Offline
Thành viên BQT
Chào bạn
Ý mình là khi người sử dụng nhập ký tự, chương trình làm sao phát hiện và không thực hiện. Thí dụ khi mình viết vòng lập while nếu nhập số thì bình thường nhưng khi nhập ký tự vòng lập cứ chạy hoài và không thể thoát ra được, làm sao để loại bỏ trường hợp này.
Cám ơn bạn
Khi bác nhập ký tự vào biến kiểu int thông qua "cin" là không hợp lệ thì nó sẽ báo không thành công và sẽ bỏ qua cin. Khi cin không thành công, thì nó không có báo lỗi ra màn hình nên bác sẽ không biết.
Cho nên bác chỉ cần chèn thêm cin.fail() vào, nếu không thành công thì nó trả giá trị false cho bác, thành công thì ngược lại.
bác có thể chạy dòng code sau để test thử.
C++:
#include<iostream>
using namespace std;

int main(){
    int x = 7;

    while(!cin.fail()){
        cout << "OK\n";
        cin >> x;
    }

    return 0;
}
Mong là giải quyết được vấn đề của bác.
Nãy dừ mình đang ngâm nghĩ, do bạn này chưa đặt lệnh return 0; nên vòng lặp cứ chạy mãi, nếu điều kiện trong vòng lặp sai chỉ cần có lệnh kết thúc vòng lặp là được.
 

statistics

Moderator
Thành viên BQT
Nãy dừ mình đang ngâm nghĩ, do bạn này chưa đặt lệnh return 0; nên vòng lặp cứ chạy mãi, nếu điều kiện trong vòng lặp sai chỉ cần có lệnh kết thúc vòng lặp là được.
Em chưa hiểu ý anh lắm. Lệnh return 0 anh đặt ở đâu.
Cơ mà cin nó có cơ chế buffer. Em chưa tìm hiểu cái này nên không nắm rõ cho lắm.