27

Maybe a bit too complicated, but fun nevertheless: Teach them about bitboards. Conveniently enough, a chess-board has precisely 64 squares, so a 64-bit integer can store one bit of boolean information per square. Now the whole state of the board (disregarding en-passant and castling for now) can be encoded by having one integer per type of figure and one ...


22

Computer Science vs. Programming Really worrying situation. I do well with CS subjects but at the end of day it is all useless as I don't know how to code. That is normal. Computer Science and Programming are two completely different things. You should not expect that studying one will not automatically make you learn the other, any more than you should ...


13

My advice is not too dissimilar from Buffy. I would try to get involved in projects with others. You might look into the indie game development community, or into the open source community. Join a project, contribute and observe. Aim small. Even tiny-sounding projects will be surprisingly complex, and will help you to get your programming sea legs ("...


11

Another fun game is "Spelling Bee" from the New York Times (https://www.nytimes.com/puzzles/spelling-bee). You supply a file containing words. The student program reads the file and selects words that match the rules. The milestones are from a past project from Reed College. Print all the words that can be spelled using a fixed string (e.g. "...


10

Here is a concept but it works much better with visual feedback. Simulate a Pandemic. A pandemic requires a world with inhabitants that can be in one of several states, such as healthy, sick, dead. The pandemic spreads from sick inhabitants to "neighbor" inhabitants who are healthy. "Dead zones" stop the spread. You can also erect ...


9

There are lots of international programming competitions for undergraduate students .Here are some of the well known competitions(not mentioned by you).As you didn't mention what kind of competitions you were looking for, here are some general competitions. I have provided links to past problems so you can decide which fits you best. 1.Google Code Jam Code ...


9

If you're really new to programming, joining an open source project can be quite overwhelming. I would recommend picking up a puzzle challenge like Project Euler. Make a habit out of solving a challenge or two a day. Its great fun, and you'll find that you'll learn the basics quite quickly. Although I cannot agree more with what was said above, practice ...


8

If your aiming for the IOI, the first step has to be figuring out how to get onto your country's delegation. In the USA (where I am), that means USACO. If not, then you will have to determine what that pathway is. Every country has some method of determining delegates. The next step would depend a lot on how those delegations are formed within your ...


8

Possibly prior to Buffy's wonderful answer, if the goal is to help students gain practice and fluency with the basic operations: Addition and subtraction without using + and -. Multiplication by 2s and integer division by the same. The Russian Peasant algorithm for more general multiplication. A string comparison that ignores case (presumably using ascii) ...


7

Honestly, I would be surprised if this method bore the kind of fruit that you hope for. While flowcharts seem like a nice way to make ideas more concrete, I contend that they will actually become another level of abstraction that makes the task harder for middle-school students, who are only now making the transition from concrete to abstract thinking. You'...


6

As a non-CS adult, when I'm learning a new language I like to write programs to solve some of the Project Euler problems. Stick to the lower numbered problems and they're not too hard for non-mathematicians. For me, these problems are fun. There is enough information given in the problems to make sure that non-mathematicians understand the goal. Good Luck!


6

One of my first (Fortran) programs was one to use bit masks to find all prime numbers less than some large number. I my case the maximum was twice the number of bits in the memory locations available to a user program, but a refinement can bypass that by stating a start point. The idea is that in a large array, every bit of every word represents an odd ...


6

Ben's answer on how to find and join a team is spot on. I'll address what you should be studying. Competitive programming generally is about correct use of algorithms and data structures. There are college courses available on youtube for mastering that subject. At a bare minimum, you should be comfortable implementing a linked list, graph, stack, heap, ...


5

Autograding doesn't have to be all-or-nothing How can I reduce the amount of grading for the assignments? The term "autograding" implies end-to-end work taking a zip file of submissions all the way to posting the completed grades onto your LMS via the API. I don't see the situation as all-or-nothing, and it seems like you'll only get so far ...


5

There is a recent thread on the SIGCSE mailing list about whether assignment uses "labels" or "boxes" as an explanatory mechanism. I actually prefer "references", which is a bit like labels but more abstract. And I avoid boxes like I avoid the pandemic. To explain assignment, therefore, I wouldn't use the word "assignment&...


4

Reading and editing the files created by Minecraft requires a fair bit of bit manipulation, and would likely grab the attention of at least some of your students. The bittiest part is that, for a chunk with K different kinds of blocks, the blocks themselves are stored as a dense array of log(K) bit numbers. The Minecraft wiki has an excellent description of ...


4

Here's a few ideas for things that a student might conceivably end up working with. Some of these are a bit more advanced than your basic example of decoding a byte-packed list of numbers from an API. The more advanced ones are also somewhat skewed towards cryptography, both because it's a field I'm familiar with and because cryptographic algorithms tend ...


4

For the imperative decision making aspects, one of the best approaches I have personally found for getting people interested is to have them write programs that play a game (not writing the game itself, but writing a program that can stand in for a human playing the game). This challenges them to think analytically about how the game is played, and that ...


4

You might want to explore CS Unplugged for use with any youngster. While it doesn't use programming, it provides some foundation in computational thinking and provides some metaphors, etc, that might be useful to learning even in an environment where the student is learning to program. I don't think it is necessary to do everything in the CS Unplugged ...


4

My grand-daughter is interested in programming and has been from the age of 5 or so (and is now nearly 10). I teach programming at university and my son-in-law (her father) teaches at secondary school level so we both have experience at teaching different age ranges. We find the Usborne books to be very useful for that age range, and they are so interesting ...


4

Programmers are free to pick up the language, and there are plenty of resources out there to help anyone who wishes to learn COBOL to do so. I could imagine a programmer boot camp that focused on COBOL, and it might be in the interest of the Big Banks to create just such an institution. However, the mission of a computer science program is quite different ...


4

One way that you could improve the output for the students (and thereby decrease the grading load on yourself) is to provide a sort of slapdash test-driven development. With each assignment, provide a guiding class with a runner. In that runner, provide the tests you want the students to be able to pass, as well as intermediate tests, in order. Then ...


4

The way to learn how to do this (or most anything) is to practice it so that experience gives you better results. You aren't going to learn it from a book or a video. And, a good way to do it is in partnership with someone else (search for Pair Programming, say at wikipedia). I suggest that you find someone, such as another student with similar concerns and ...


4

While I did study CS, I learned most of what I use daily on my own, previous to my studies. As an adolescent, I would find something that interests me, and figure out how to do it from whatever sources of information that were available (paper books mostly, at that time, there was no Internet yet, at least not for the general public). So, let your thoughts ...


3

Web scraping is a vast domain that might interest students. Python is great for string matching (the power of regular expressions!), for parsing HTML (or XML or JSON) into structures that are so much more simple to manipulate. There are even sites that provide APIs to help. The Python Praw library allows you to wander down Reddit pages your students may ...


3

Python turtle Related to what their major is if you can find something relevant else import turtle # this module allows some visual output, that can be interesting, and gives good feedback. Jupiter notebooks / google colab notebook. It allows you to create pages using markdown (same as this site), and to incorporate python code, tables, and charts. Tables ...


3

At my institution, we (often) take our courses' final products in a different direction: free choice, working as a pair (or in a trio). Students write 2 to 3 ideas ("proposals") within a google doc, and then talk among themselves to find projects that seem like a good fit. They then write up short proposals, and divide tasks into "must-have ...


3

This answer comes from experience teaching C to students that have about 2 years of programming experience in Python and no exposure to low-level programming. I teach an Operating Systems-like course and students take introductory C lessons before the main course. For C begginers strings are hard. Although the concept seems rather easy, students struggle ...


3

One I've used is an algorithm which solves Latin squares (the algorithm is easy to extend to Sudoku puzzles). When solving by hand, it's common to keep track of which digits are possible in each cell. Bitmasks can be used analogously in an algorithm, so for example if 1, 3 and 4 are the possible digits in some cell then 0b0000011010 represents this set of ...


3

varints Implement encoding and decoding something like Protobuf's varint, perhaps without using negative numbers. Quoting: Each byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number ...


Only top voted, non community-wiki answers of a minimum length are eligible