Monday, October 2, 2017

Sử dụng Flat Map, Map ... trong scala

Sau thời gian làm dự án scala, mình xin phép chia sẻ một chút kinh nghiệm khi làm việc thực tế như sau

1. là nhóm dữ liệu đơn scalar
2. là nhóm dữ liệu tập hợp collection

- Suy nghĩ tổng quát scala mình chia thành hai nhóm dữ liệu như trên và việc chuyển đổi dữ liệu và làm việc với collection thường rất uyển chuyển, thiên biến vạn hoá làm cho a e đôi khi lúng túng, vậy hãy nhớ những quy tắc thần sầu này hy vọng sẽ hữu ích cho a e

(*) Muốn biến tập hợp này thành tập hợp kia có cùng số lượng phần tử: dùng map
(*) Muốn biến tập hợp này thành tập hợp kia có ít hơn số lượng phần tử: dùng filter
(*) Muốn biến tập hợp này thành tập hợp kia có thường là nhiều hơn số lượng phần tử: dùng flatMap
(*) Muốn gộp các list hay các seq thành một list hay seq mới: dùng flatten
(*) Muốn biến tập hợp này thành 1 phần tử scalar: dùng reduce, foldLeft, hoặc foldRight

Monday, November 21, 2016

Find an index in an array such that its prefix sum equals its suffix sum.

A zero-indexed array A consisting of N integers is given. An equilibrium index of this array is any integer P such that 0 ≤ P < N and the sum of elements of lower indices is equal to the sum of elements of higher indices, i.e. 
A[0] + A[1] + ... + A[P−1] = A[P+1] + ... + A[N−2] + A[N−1].
Sum of zero elements is assumed to be equal to 0. This can happen if P = 0 or if P = N−1.
For example, consider the following array A consisting of N = 8 elements:
A[0] = -1 A[1] = 3 A[2] = -4 A[3] = 5 A[4] = 1 A[5] = -6 A[6] = 2 A[7] = 1
P = 1 is an equilibrium index of this array, because:
  • A[0] = −1 = A[2] + A[3] + A[4] + A[5] + A[6] + A[7]
P = 3 is an equilibrium index of this array, because:
  • A[0] + A[1] + A[2] = −2 = A[4] + A[5] + A[6] + A[7]
P = 7 is also an equilibrium index, because:
  • A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + A[6] = 0
and there are no elements with indices greater than 7.
P = 8 is not an equilibrium index, because it does not fulfill the condition 0 ≤ P < N.
Write a function:
class Solution { public int solution(int[] A); }
that, given a zero-indexed array A consisting of N integers, returns any of its equilibrium indices. The function should return −1 if no equilibrium index exists.
For example, given array A shown above, the function may return 1, 3 or 7, as explained above.
Assume that:
  • N is an integer within the range [0..100,000];
  • each element of array A is an integer within the range [−2,147,483,648..2,147,483,647].
Complexity:
  • expected worst-case time complexity is O(N);
  • expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.

---------------------------------------------------------------------------------------------------------------
Solution:

import java.math.BigInteger;

public class Solution {

    private static BigInteger sub = BigInteger.ZERO;
    private static BigInteger sum = BigInteger.ZERO;
    private static BigInteger left = BigInteger.ZERO;
    private static BigInteger right = BigInteger.ZERO;

    public static void main(String[] args) throws Exception {
        Solution s = new Solution();

        int[] A = {-1, 3, -4, 5, 1, -6, 2, 1};
        System.out.print(s.solution(A));

    }

    public int solution(int[] A) {

        sum = BigInteger.ZERO;
        if (A.length != -1 ) {
            sum = sum.add(sumOfSubArray(A));
        }

        for (int i=0; i<A.length; i++) {
            sub = sub.add(BigInteger.valueOf(A[i]));

            left = sub.subtract(BigInteger.valueOf(A[i]));
            right = sum.subtract(sub);

            if ( left.equals(right)) {
                return i;
            }
        }

        return -1;
    }

    public static BigInteger sumOfSubArray(int[] a) {
        BigInteger sum = BigInteger.ZERO;

        for (int i = 0; i < a.length; i++) {
            sum = sum.add(BigInteger.valueOf(a[i]));
        }

        return sum;
    }
}

Monday, January 18, 2016

Những lợi ích khi cho trẻ em học lập trình sớm

Gần đây, có rất nhiều ý kiến từ cộng đồng ủng hộ việc cho trẻ em học lập trình từ sớm. Cũng có ý kiến phản đối vì cho rằng việc lập trình sử dụng các ngôn ngữ lập trình với các câu lệnh phức tạp sẽ gây nên sự gượng ép, nhàm chán cho trẻ em, dẫn tới phản tác dụng. Với những trải nghiệm thú vị trong quá trình dạy trẻ em học lập trình, qua bài viết này tôi muốn nêu lên một vài quan điểm cá nhân về việc dạy lập trình cho trẻ, nhằm chia sẻ kinh nghiệm với những người làm giáo dục trẻ em và các vị phụ huynh về vấn đề này.

Tại sao dạy lập trình cho trẻ em không hề dễ?

Đầu tiên phải kể đến những nhìn nhận phiến diện về việc lập trình máy tính. Qua phim ảnh và quan sát trong đời sống hằng ngày, chúng ta thấy rằng việc lập trình là cái gì đó “khác thường”, hoặc quá phức tạp với những đoạn mã lệnh khó hiểu, rối bòng bong; những người học/làm công việc lập trình thường là những người lập dị, hoặc họ có lối sống cô độc, bừa bộn, và suốt ngày ngồi bên máy tính. Sự thật không phải như vậy, ngay cả một cậu sinh viên ham chơi games cũng có biểu hiện giống hệt như vậy; tức là đầu rối bù, ít giao tiếp và suốt ngày ngồi lỳ bên máy tính hoặc dán mắt vào chiếc laptop. Thực tế, có rất nhiều lập trình viên trên thế giới là những người thông minh, hoạt bát, vui vẻ, và là những nhà kinh doanh giỏi. Điển hình ai cũng biết về Bill Gates (sáng lập Microsoft), Mark Zuckerberg (sáng lập Facebook), Jack Dorsey (sáng lập Twitter), Larry Page & Sergey Brin (sáng lập Google), … đều là những lập trình viên siêu hạng đồng thời cũng là doanh nhân nổi tiếng đã làm thay đổi cả thể giới. Tất cả những người này đều đam mê công nghệ và có một điểm chung nữa, là đều học lập trình từ nhỏ.
Dưới đây, tôi sẽ liệt kê một số nhận thức chưa đúng về việc học lập trình:
  • Học lập trình chỉ là học ngôn ngữ lập trình và viết mã lệnh: Rất nhiều người đồng nhất việc lập trình với việc ngồi tỉ mẩn viết các dòng mã lệnh khó hiểu, rối rắm và nhàm chán. Thực ra, lập trình chính là quá trình ra lệnh cho máy tính thực hiện công việc theo những gì mình mong muốn. Do đó, nó là cả một quá trình bao gồm nảy ý tưởng, phân tích, thiết kế, sau đó viết mã lệnh chương trình, thử nghiệm và cài đặt để chạy thực tế. Quá trình này đòi hỏi phải giàu ý tưởng, sáng tạo, kiên trì và có nhiều kỹ năng giao tiếp, truyền thông quan trọng.
  • Chỉ người nào chọn nghề lập trình mới học lập trình: Nhiều người cho rằng, học lập trình thì sẽ trở thành lập trình viên. Điều này không đúng, vì từ nhỏ chúng ta học văn nhưng không phải ai cũng thành nhà văn, học toán giỏi cũng chưa chắc thành nhà toán học. Trên thế giới có nhiều doanh nhân học lập trình giỏi, nhưng họ không chọn lập trình là nghề của mình. Tuy nhiên, kiến thức và kỹ năng học được từ lập trình giúp họ rất nhiều trong việc kinh doanh.
  • Học lập trình khô cứng và làm mất khả năng học các môn khác: Trong xã hội hiện nay, phần mềm là phương tiện hỗ trợ để chúng ta làm việc, học tập, vui chơi giải trí. Do đó, học lập trình cũng có thể được lồng ghép vào các môn học khác, trở thành công cụ để rèn luyện các kỹ năng và học các kiến thức khác. Ví dụ, chúng ta có thể dạy trẻ em học lập trình để làm ra một trò chơi hỗ trợ học tiếng Anh, qua đó các em rèn luyện những kỹ năng làm việc khi lập trình, đồng thời các em cũng thuộc luôn bài học tiếng Anh mà các em đang xây dựng phần mềm. Một công, đôi việc. Không những vậy, các em sẽ chủ động học với tâm trạng hứng thú.
Tiếp theo, phải kể đến rào cản lớn nhất trong việc dạy lập trình cho trẻ em đó là công cụ và ngôn ngữ lập trình. Hầu hết các bậc phụ huynh đều nghĩ rằng khi cho con em mình học lập trình, các em sẽ ngồi tỉ mẩn gõ lệnh trong khi từ ngữ tiếng Việt vẫn còn chưa thành thạo. Nỗi ám ảnh này xuất phát từ việc chúng ta mang công cụ và ngôn ngữ lập trình của người lớn để dạy cho trẻ em. May mắn thay, hiện nay đã có các công cụ lập trình dành riêng cho trẻ em. Các em không phải học viết mã lệnh nhàm chán, rối rắm và dễ sai sót nữa. Các công cụ này cung cấp cách thức lập trình đơn giản, thông qua việc lắp ghép các khối lệnh tạo sẵn một cách trực quan.

Học lập trình sẽ giúp các em phát triển những gì?

Kích thích và phát huy trí tưởng tượng

Nguồn: encrypted-tbn3.gstatic.com
Trẻ em vốn rất tò mò và thích khám phá. Trong quá trình đó, các em sẽ rút ra kinh nghiệm đồng thời tưởng tượng thêm từ những gì đã trải nghiệm và quan sát. Tuy nhiên, trí tưởng tượng của trẻ em gắn với hình ảnh trực quan (điều này lý giải tại sao trẻ em thích đọc truyện tranh và xem phim hoạt hình). Vì vậy, để giúp các em phát huy trí tưởng tượng, chúng ta cần tạo môi trường bằng hình ảnh sinh động để các em lắp ghép những câu chuyện tưởng tượng của mình vào đó, sau đó từ việc quan sát và tác động hình ảnh do mình tạo ra, các em lại tiếp tục tưởng tượng thêm cho câu chuyện của mình ngày càng phong phú hơn. Học lập trình chính là tạo ra môi trường trực quan sinh động để các em chủ động phát huy trí tưởng tượng có mục đích.

Diễn đạt ý tưởng theo cách trực quan

Nguồn: http://www.artisanbarn.org
Nguồn: www.artisanbarn.org
Các thể loại văn mô tả, tưởng thuật giúp trẻ em có thể kể chuyện bằng lời những gì các em hiểu và tưởng tượng. Học vẽ giúp cho trẻ diễn đạt điều tưởng tượng trong đầu bằng hình vẽ. Học lập trình thông qua trò chơi sẽ giúp các em kể chuyện bằng hình ảnh chuyển động kết hợp với âm thanh. Không những vậy, câu chuyện trong trò chơi do các em tạo ra sẽ có diễn tiến thời gian và kết cấu logic chặt chẽ, tuân theo các quy tắc hợp lý. Nhờ vậy, các em có thể tăng dần mức độ phức tạp trong câu chuyện do chính các em tưởng tượng ra. Thông qua việc hòa mình vào câu truyện, trò chơi do chính các em tạo ra, các em không chỉ “kể lại” những gì quan sát được, mà còn sáng tạo thêm theo ý của mình.

Chọn lọc và thử nghiệm ý tưởng

Nguồn: www.nationalcityca.gov
Với một em bé thích đi chơi xa, tưởng tượng về hành trình đi đến Huế với hành trình đến Băng-Cốc cũng không khác nhau mấy nếu em không thực sự được quan sát và trải nghiệm cảnh vật và sự việc trên những hành trình đó. Tương tự như vậy, trí tượng tượng nếu chỉ dừng lại trong đầu các em thì mới chỉ là những hình ảnh sơ khai, đơn giản (vì không có hình ảnh thực tế để đắp “da thịt” vào phong phú hơn). Bằng việc dựng lên các câu chuyện và lập trình thành trò chơi, các em đã diễn đạt những gì mình tưởng tượng theo cách trực quan và logic, từ đó gợi mở trí tưởng tượng để có câu chuyện phức tạp hơn, chặt chẽ hơn. Xa hơn nữa, các em có thể đối chiếu so sánh để nhận biết mức độ khó – dễ của các ý tưởng, từ đó có thể thử nghiệm, phân loại và chọn lọc được những ý tưởng của mình.

Phân chia và phối hợp làm việc theo nhóm

Nguồn: us.cdn2.123rf.com
Nguồn: us.cdn2.123rf.com
Khoa học đã chứng minh, lao động và giao tiếp là hai công cụ cơ bản để hình thành ngôn ngữ và tư duy của con người. Việc học lập trình không chỉ tạo động lực để trẻ em chủ động làm việc mà còn thúc đẩy các em chia sẻ và phối hợp với nhau để hoàn thành công việc. Một trò chơi được làm ra đôi khi đòi hỏi nhiều em cùng tham gia thực hiện. Quá trình làm sẽ đòi hỏi các em giao tiếp với nhau để chia sẻ, trao đổi ý tưởng, kiến thức, kinh nghiệm. Với sự hỗ trợ của thầy cô hướng dẫn, các em sẽ làm quen và dần dần nắm bắt được kỹ năng làm việc nhóm.

Xử lý lỗi và tìm giải pháp thay thế

Nguồn: bp.blogspot.com
Nguồn: bp.blogspot.com
Đây là một kỹ năng rất quan trọng trong quá trình rèn luyện cho trẻ em. Bởi vì cuộc sống không phải lúc nào cũng màu hồng, trong khi về mặt tâm lý con người luôn muốn mọi thứ diễn ra dễ dàng, suôn sẻ và kết thúc “có hậu”. Nếu không được chuẩn bị trước, khi gặp tình huống bất lợi, một số người có thể dễ dàng bỏ cuộc. Học lập trình sẽ giúp rèn luyện tính cách kiên trì, dám đối mặt với khó khăn. Quá trình lập trình có thể phát sinh ra lỗi, đòi hỏi người viết (là các em) phải kiên trì đối mặt với cảm xúc khó chịu, đồng thời phải biết cách tìm ra lỗi và nghĩ ra giải pháp khắc phục. Việc rèn luyện cho trẻ kỹ năng này đòi hỏi thầy cô, người hướng dẫn phải có phương pháp tốt để giúp các em lĩnh hội được kỹ năng trong tâm trạng thoải mái, sẵn sàng đối mặt với những bất lợi sắp xảy ra.

Rèn luyện kỹ năng thuyết trình

Nguồn: cdn4.123rf.com
Nguồn: cdn4.123rf.com
Khi trẻ em làm được một cái gì đó, chắc chắn các em sẽ khoe ngay với người lớn (bố mẹ, anh chị, thầy cô) và bạn bè về sản phẩm mình đã làm ra. Mức độ vui sướng, hài lòng của trẻ sẽ tăng cao nếu có nhiều người lớn quan tâm, hứng thú, và hiểu rõ những gì các em đã làm. Điều này phụ thuộc rất nhiều vào khả năng trình bày, diễn đạt ý tưởng của các em. Việc học lập trình sẽ giúp cho các em rèn luyện kỹ năng thuyết trình, bao gồm từ dáng đứng, giọng điệu cho đến cách tổ chức nội dung mạch lạc, có thứ tự cũng như thái độ tự tin, chững chạc khi nói.

– Phạm Ngọc Hùng –

Suy Nghĩ về việc dạy Tin học – Hồ Đắc Phương

Bài liên quan: 5 Lý Do Nên Dạy trẻ sớm Học Lập Trình
http://javadevexpress.blogspot.com/2014/01/5-ly-do-nen-day-tre-som-hoc-lap-trinh.html

Ở Đại học, tôi thường được phân công giảng dạy sinh viên năm thứ 2, thứ 4 và hướng dẫn khóa luận. Do công việc kiêm nhiệm phụ trách dạy môn Tin học cho trường THPT Chuyên KHTN, tôi có điều kiện trực tiếp sử dụng các học liệu dành cho cấp 3, quen biết và có đôi chút hiểu biết về tình hình dạy Tin học ở cấp 3 ở nhiều địa phương trên cả nước.

Trong bài viết này, tôi muốn nhấn mạnh việc giảng dạy Tin học và CNTT hiện nay rất lạc hậu, và điều này gây tổn hại lớn đến ngành CNTT cũng như làm suy yếu một trong những tư duy khoa học quan trọng trong thời hiện đại.

Học Tin học quá muộn sẽ làm ngành CNTT tụt hậu
Ở Việt Nam, CNTT là 1 ngành quan trọng, được Đảng và Nhà nước coi là một mũi nhọn trong việc phát triển kinh tế. Và để có thể cạnh tranh trong ngành công nghiệp, chúng ta cần thật nhiều những chuyên gia – lập trình, thiết kế hệ thống, quản trị hệ thống. Những người này phải có khả năng tương tác, nhận và bàn giao công việc với các đối tác nước ngoài.Ngành CNTT của chúng ta thực sự thiếu trầm trọng những nhân lực có chất lượng cao.

Dù là một trong những Khoa CNTT có sức thu hút lớn nhất của cả nước, nhưng chúng tôi chưa đào tạo ra thật nhiều những cử nhân có “chất lượng ở mức quốc tế” như vậy. Đó là một trong những trăn trở của tập thể Khoa CNTT.

Một trong những điều chúng tôi cố gắng làm, là đưa việc giảng dạy chuyên môn vào ngay từ đầu, nhưng phải đến sau năm thứ 3 và thứ 4, sinh viên mới dần có đủ khả năng để đi thực tập. Thời lượng của việc học tập chuyên môn là rất ít. Mặc dù cấp THPT đã có môn lập trình, nhưng gần như sinh viên lên Đại học lại học lại từ đầu.

Trong bất kỳ lĩnh vực nào, để trở thành chuyên gia xuất sắc, bạn phải bỏ ra 10000h luyện tập. Ngành CNTT cũng không ngoại lệ. Trong lĩnh vực CNTT, rất nhiều hãng khởi nghiệp bởi những thanh niên còn rất trẻ. Và những người rất trẻ này thường được tiếp xúc với máy tính, lập trình từ bé.

Bill Gates trước khi khởi nghiệp Microsoft đã lao vào lập trình từ lớp 5. Sergey Brin (sáng lập Google) đã được bố (một giáo sư Toán học người Nga) dạy lập trình từ năm 7 tuổi. Ngay cả ở Việt Nam, những bạn trẻ có độ thành công tương đối cao (trong phạm vi hiểu biết của tôi) như Hồ Vĩnh Hoàng [Founder của TOSY, chuyên Tin Tổng hợp,], Vương Vũ Thắng [Founder của VCCorp, chuyên Tin Tổng hợp], Nguyễn Hòa Bình [Founder của PeaceSoft, chuyên Tin Nguyễn Huệ], Nguyễn Đình Nam [Founder của VP9, chuyên Tin Tổng hợp]cũng đều là học sinh chuyên Tin ở cấp 3. Do đã bắt đầu tích lũy “10,000h luyện tập” sớm (trước khi vào Đại học) nên họ có khả năng thành công cao hơn những người xuất phát chậm.

Ở ngay Đại học Công Nghệ, chỉ có khoảng ¼ số sinh viên vào thẳng của Khoa CNTT, Đại học Công Nghệ là có nền tảng lập trình tốt (phần lớn là học sinh có giải Tin học trong kỳ thi HSG Quốc gia). Đa phần trong tổng số ¾ sinh viên còn lại là những người thi Đại học ở khối A và khối A1 thì gần như không biết gì về lập trình, và phải dạy lại từ đầu. Và sau này, gần như tuyệt đại đa số các bạn có thành tựu đều là những học sinh chuyên Tin từ cấp 3.

Tuy nhiên, hiện nay, Tin học ở cấp THPT là môn “siêu phụ”. Giáo viên Tin học chỉ được coi là giáo viên loại 2. Gọi là “siêu phụ” vì theo kiểu “so sánh” hay có ở VN, “Tin học” còn “phụ” hơn cả Sinh – Sử – Địa. Những môn trên còn có thi tốt nghiệp, thi Đại học. Còn Tin học không được thi tốt nghiệp, không được thi Đại học (kể cả vào các khoa CNTT).

Chính vì thế, nên ở cấp 3, việc dạy và học Tin học đa phần bị buông lỏng, giáo viên muốn dạy như thế nào cũng được (đừng cho điểm quá thấp là được). Về mặt căn bản, học sinh không học đủ, không làm được những bài tập lập trình rất cơ bản. Giáo viên Tin học có thể phải kiêm nhiệm thêm hàng núi các công việc “vô danh” khác và ít có điều kiện trau dồi chuyên môn. Chính vì bị coi là môn phụ, tuyệt đại bộ phận phụ huynh đều ngăn cản con học Tin học sớm. Trong quá trình giảng dạy tại trường chuyên, một trong những vấn đề khó khăn nhất chính là việc thuyết phục phụ huynh cho phép con học Tin học, theo đuổi niềm đam mê.

Trong khi đó ở nước ngoài, học sinh sớm được học lập trình, “hý hoáy” sớm với máy tính, lập trình nên sau này khả năng phát triển lớn hơn nhiều.

Khác với nhiều ngành nghề, CNTT là ngành phụ thuộc rất lớn vào trí tuệ và kỹ năng lao động (kỹ năng lập trình, kỹ năng vận hành các hệ thống tin học). Như vậy ngành CNTT của Việt Nam hoàn toàn có thể “cất cánh” trở thành một ngành mũi nhọn. Và để tiềm năng này trở thành hiện thực, hãy coi trọng và khích lệ học sinh học Tin học từ bé.
Sự cần thiết của tư duy Tin học

Tin học, Công Nghệ Thông Tin là lĩnh vực rất rộng. Ở đây tôi quan niệm việc sử dụng máy tính hay những chương trình ứng dụng như Word, Excel chỉ là kỹ năng mà bất kỳ ai trong xã hội hiện đại cũng đều phải biết. Dạy tin học là dạy kỹ năng lập trình và tư duy thuật toán.

Nhiều người cho rằng, sau Cách mạng Công Nghiệp, thì CNTT chính là làn sóng Cách mạng KHKT tiếp theo triệt để thay đổi lịch sử loài người – nhờ máy tính mà nhiều thay đổi to lớn xảy ra trong lao động, sản xuất, khoa học, công nghệ, chính trị – gần như trong mọi hoạt động của con người.

Trong một nền kinh tế dựa vào công nghệ cao – khi mà “nội dung” (content) sẽ là một trong những mặt hàng chính thì Lập trình – thao tác trên các dữ liệu thô, tạo ra các tri thức có giá trị trở thành một kỹ năng thiết yếu, một nghề nghiệp thu hút trong thị trường lao động.

Gần như mọi khía cạnh của nền kinh tế, mọi hoạt động khoa học ngày nay đều có sự hiện diện của Tin học. Xu hướng dữ liệu lớn (giờ chúng ta đang bơi trong biển dữ liệu, vậy làm thế nào để có thể “chắt lọc” được những tri thức đáng giá) là minh chứng rõ nét cho xu thế này.

Chính vì thế, có được một tư duy tốt về thuật toán và kỹ năng lập trình sẽ giúp ích rất lớn cho học sinh.

So với nhiều ngành Khoa học khác, Tin học rèn dũa cho học sinh tư duy thuật toán và tính thực tế. Ở mức độ đơn giản, học sinh phải có được kỹ năng giải quyết vấn đề: từ một tập hợp đầu vào, cần phải xử lý như thế nào để có được một kết quả thỏa mãn. Ở mức cao hơn, học sinh phải rèn luyện kỹ năng sáng tạo ra vấn đề, rồi tìm cách giải quyết nó. Ngoài ra, Tin học sẽ giúp học sinh có được sản phẩmthông qua quá trình lao động. Điều này khiến cho việc học nói chung không chỉ mang tính lý thuyết, mà còn tăng tính thực hành.

Qua quá trình giảng dạy, tôi nhận thấy việc dạy các kỹ năng lập trình cơ bản sẽ giúp

  • Tăng tốc quá trình phát triển của học sinh.
  • Thúc đẩy sáng tạo.
  • Tăng tính tự tin.
  • Năng cao kỹ năng giải quyết vấn đề và tư duy phản biện.
  • Giúp học sinh thấy được ứng dụng cụ thể của các môn khoa học khác, đặc biệt là Toán học.
  • Định hướng nghề nghiệp.


Ở nước ngoài


Ở Hoa Kỳ, Tổng Thống Barack Obama trong thông điệp liên bang 2013, đã nhấn mạnh vào “việc xây dựng các kỹ năng cho học sinh đáp ứng một nền kinh tế công nghệ cao”, và sau này, ông kêu gọi “giới trẻ – thay vì chỉ biết tiêu thụ, hãy sản xuất ra thông tin”, và “không chỉ sử dụng máy điện thoại di động, hãy lập trình cho nó”. Hoa Kỳ đã nhiều chương trình tài trợ đưa việc giảng dạy lập trình vào khối tiểu học và trung học.

Anh quốc là quốc gia đầu tiên trên thế giới đã đưa việc học lập trình thành điều bắt buộc trong các trường tiểu học và trung học. Trẻ em sẽ học lập trình ở độ tuổi 5 đến 16. Ở giai đoạn 1, học sinh học viết chương trình nhỏ, các khía cạnh đơn giản của thuật toán, cài đặt và thực thi trên thiết bị điện tử. Trong giai đoạn 2, học sinh được học cách thiết kế và viết các chương trình phức tạp hơn, tương tác với môi trường xung quanh. Ở giai đoạn 3 (cấp trung học), học sinh học về đại số Boolean, tư duy thuật toán. Giai đoạn 4 tập trung vào sáng tạo và định hướng nghề nghiệp.

Lời kết

Việc dạy tin học và lập trình sớm không chỉ có ích cho toàn bộ học sinh, mà còn trợ giúp rất lớn cho ngành CNTT và quá trình hiện đại hóa đất nước.

Hệ thống Giáo dục phổ thông ngày nay đã quá lạc hậu trong việc giảng dạy CNTT. Và tôi kỳ vọng vào công cuộc Đổi mới Giáo dục mà Bộ Giáo dục đang tiến hành có thể góp phần thay đổi thực trạng này.

Tuy nhiên khi đọc các bài báo về các phương án thi cử mà Bộ Giáo Dục đưa ra, tôi có cảm nhận rằng, môn Tin học sẽ vẫn chỉ là một môn “Siêu phụ”.

Trong quá trình đổi mới giáo dục, Bộ Giáo Dục hãy thực sự cầu thị, mời các nhà khoa học, các chuyên gia trong lĩnh vực tin học, các chuyên gia trong ngành CNTT cùng tham gia.

Hồ Đắc Phương
Giảng viên Đại học Công Nghệ