FYI: this coming Tuesday (April 25th), I will be away at a conference.
Week 11
Unveiled EoCE
Started talking about object-oriented programming
Week 10
tinkered on gd, worked on gfo0
Week 9
More playing with the gd library- polygons and other things
The next project, gfo0 has you utilizing your looping, array, and file access skills as you write a program to calculate your current grade in the class.
We may have hit the high water mark for the semester… upon evaluating mbe1 there was a sharp decline in trends. Clearly the most troublesome project of the semester. But largely due to pure non-submits. We almost had a 50-50 split of submits vs. non-submits, and those who have consistently been following along, putting in effort, experimenting and exploring: they just did fine. In fact from them I probably fielded the least number of questions all semester. And of the questions I got, there was clear comprehension of concepts. They have demonstrated they understand, and I am most pleased with them. As for the others– a lot are still fighting with themselves, at some level still believing the class brute force tactics of assignment completion will still somehow work (or just ignoring it and hoping it will just go away). Remember: computing is the fine art of thinking. Abstract, conceptual thinking. Not copying/pasting. Not following a recipe. Understanding a process and how one would like to arrange a solution.
Week 8
For those who have missed class, or those who want a copy of any code we worked on in class, I have rigged up a “grabit” for the in-class examples. To obtain it, do the following:
change into the directory where you've been placing your cprog code (~/src/cprog, perhaps)
run the following (grabit cprog examples)
you will now have an examples/ directory
in there will be the in-class programs we've worked on
there is a CHANGELOG file that attempts to summarize what files have been added on what date (cat CHANGELOG)
you can build all the code by typing 'make'
you can update your copy of the in-class examples by running that grabit line again, from within the examples directory.
Next project has us rendering graphics with the gd image library. You'll be generating a circle made of squares (cos0), the perfect synchronization of math and programming!
Week 7
pnc0 has been evaluated. It tended to prove super-easy or super-hard, depending on the individual. If it was a challenge, I highly suggest seeking out some tutoring. Please.
mbe1 is the next project, where we revisit our previous multiply by 11 implementation and optimize it with loops and arrays.
structs and unions are on the docket for this week. Probably touch on File I/O some as well.
For those interested in taking the prime number programs to the next level, I have released pnc2, which will be a BONUS project. Note that there may not be early submission bonus points awarded as this is already a bonus project.
as a bonus project, this can only help you; it cannot hurt you.
Week 6
Our explorations of C and its concepts is growing by the week. At this point we've covered many of the basics, recently touching on two powerful optimizing concepts- loops and arrays. We continue this week with functions, and then structures.
The next project is a continuation of the prime number theme; pnc1 has us exploring additional optimizations and algorithms within the prime number space, helping us get an even better understanding of algorithms and the importance of their design and efficiency.
Break 1
As I process through the knowledge assessment results, a few general observations:
just because you CAN use a thing, doesn't mean you should
I found that many people jumped straight to trying to use a loop, without properly understanding the underlying problem. Loops do not solve the problem, they can only improve upon an existing solution. No solution, the loop isn't going to help you.
Working out stuff by hand before you start to write any code is an effective problem solving technique. If you wonder why you may be struggling, staring at a screenful of broken code that isn't solving a problem you yourself have yet to work through to understand, I really think you should make a more conscious effort to do this. I've seen various individuals waste a considerable amount of time (all the while I am suggesting to “work it out my hand”, having my suggestions be ignored almost to the bitter end). Again, code doesn't solve problems, computers don't solve problems… WE solve problems. These other things are just tools to optimize our solutions.
Week 5
Knowledge assessment on Thursday!
Your next project is ready: pnc0
We'll likely play with arrays this week, and how they can be used with loops to really optimize your algorithms.
Week 4
If people are having problems, it generally seems to be related to bad habits of automatically reading between the lines (assuming certain things are obvious to the computer and that it will just take care of them), or they themselves have not worked out the logic to have a clear idea of the problem to solve.
It is critically important that you work out the process BY HAND, on a sheet of paper, trying out enough examples so that:
you can successfully work through the problem on your own
you can understand the details that will need to be taken into consideration
you can get a feel for some of the outer bounds that will need to be taken into account (2-digit, 3-digit, with/without carry)
If you are getting something you aren't expecting:
work it out by hand
if it still doesn't make sense, try some debugging.
An fprintf() to display the value of variables at key locations in your code can be most beneficial.
It is important for you to develop such debugging skills to further improve your abilities
Adjusting program flow: repetition, iteration
the loops:
for loop
while loop
do while loop
starting values
looping conditions
step value
I am thinking of having a knowledge assessment, next week (week 5), covering anything we've learned up to this point.
Week 3
Adjusting program flow
Selection statements!
if, if/else, if/else if, if/else if/else
switch/case
ternary operator
Relational operators
is equal to (==)
is not equal to (!=)
is less than (<)
is greater than (>)
is less than or equal to (<=)
is greater than or equal to (>=)
Logical connectors
AND (&&)
OR (||)
Used switch and if() in an in-class example pulling file metadata and extracting both file types and file octal permissions.
used logic shifting operators
used bitwise ANDing
Signs of a bad programmer (avoid these to avoid becoming one):
You never try new things when they are asked for (algorithm, technique, software, libraries, coding style, languages). Always doing the comfortable and familiar is stagnation at best, and quickly declines from there.
You are OK with the first solution that works.
You use the phrase “I don't know how to do that” and never try to learn how to do “that”.
Of course you will struggle with new things, everyone struggles, just don't give up and continue plugging along.
Week 2
Tuesday, January 24th: SNOW DAY! No class today, see you Thursday.
For those interested, the next project (sof0) is ready to begin on, for those completed with cci0 and wanting something to do. Submission window opens at 2:30pm (for those seeking maximum bonus points).
We continue down the C programming rabbit hole some more- last week we had an introduction to variables, their types, and various syntax explorations.
This week we will look to explore input and output statements, specifically fscanf() and fprintf().
We also looked at the basic mathematical and logical operators we can use in expressions.
Welcome! I've wrapped all the initial activities into one project, cci0, that I'd like you to perform by the given deadline (by 11:59:59pm / 23:59:59).
Get familiar with logging into the pod systems, and once there:
open up a terminal
log that terminal onto Lab46 for class work and participation.
If you've never used a UNIX system before, I'd recommend reading UNIX for the Beginning Mage; it is short, and likely one of the best reads you'll ever have.
Get familiar with how to log onto Lab46, and once on:
change to your src/ subdirectory
create/edit .c files (such as hello.c), and learn how to save/exit
compile the C program (.c file(s)) into an executable with gcc
execute the compiled C program (the executable) by specifying a path: ./program_name