Corning Community College
CSCS2330 Discrete Structures
Assignments, Documents, Information, and Projects
======Projects======
| [[/haas/fall2017/discrete/projects/dsi0|dsi0]] (20170826) |
| [[/haas/fall2017/discrete/projects/wpf0|wpf0]] (20170826) |
| [[/haas/fall2017/common/projects/wcp|wcp1]] (20170826) |
| [[/haas/fall2017/discrete/projects/pnc0|pnc0]] [[[/haas/fall2017/discrete/projects/pnc0/faq|faq]]] [[[/haas/fall2017/discrete/projects/pnc0/metrics|metrics]]] (20170830) |
| [[/haas/fall2017/discrete/projects/wpf1|wpf1]] (20170830) |
| [[/haas/fall2017/common/projects/wcp|wcp2]] (20170902) |
| [[/haas/fall2017/discrete/projects/dcf0|dcf0]] (20170906) |
| [[/haas/fall2017/discrete/projects/wpf2|wpf2]] (20170906) |
| [[/haas/fall2017/common/projects/wcp|wcp3]] (20170909) |
| [[/haas/fall2017/discrete/projects/pnc1|pnc1]] [[[/haas/fall2017/discrete/projects/pnc1/faq|faq]]] [[[/haas/fall2017/discrete/projects/pnc1/metrics|metrics]]] (20170913) |
| [[/haas/fall2017/discrete/projects/wpf3|wpf3]] (20170913) |
| [[/haas/fall2017/common/projects/wcp|wcp4]] (20170916) |
| [[/haas/fall2017/discrete/projects/dcf1|dcf1]] (20170920) |
| [[/haas/fall2017/discrete/projects/wpf4|wpf4]] (20170920) |
| [[/haas/fall2017/common/projects/wcp|wcp5]] (20170923) |
| [[/haas/fall2017/discrete/projects/pnc2|pnc2]] [[[/haas/fall2017/discrete/projects/pnc2/faq|faq]]] [[[/haas/fall2017/discrete/projects/pnc2/metrics|metrics]]] (20170927) |
| [[/haas/fall2017/discrete/projects/wpf5|wpf5]] (20170927) |
| [[/haas/fall2017/common/projects/wcp|wcp6]] (20170930) |
| [[/haas/fall2017/discrete/projects/bdt0|bdt0]] (20171004) |
| [[/haas/fall2017/discrete/projects/wpf6|wpf6]] (20171004) |
| [[/haas/fall2017/common/projects/wcp|wcp7]] (20171007) |
| [[/haas/fall2017/discrete/projects/bdt1|bdt1]] (20171018) |
| [[/haas/fall2017/discrete/projects/wpf7|wpf7]] (20171018) |
| [[/haas/fall2017/discrete/projects/wpf8|wpf8 (BONUS)]] (20171018) |
| [[/haas/fall2017/common/projects/wcp|wcp8]] (20171021) |
| [[/haas/fall2017/discrete/projects/dcf2|dcf2]] (20171025) |
| [[/haas/fall2017/discrete/projects/wpf9|wpf9]] (20171025) |
| [[/haas/fall2017/common/projects/wcp|wcp9]] (20171028) |
| [[/haas/fall2017/discrete/projects/pnc3|pnc3]] [[[/haas/fall2017/discrete/projects/pnc3/faq|faq]]] [[[/haas/fall2017/discrete/projects/pnc3/metrics|metrics]]] (20171101) |
| [[/haas/fall2017/discrete/projects/wpfA|wpfA]] (20171101) |
| [[/haas/fall2017/common/projects/wcp|wcpA]] (20171104) |
| [[/haas/fall2017/discrete/projects/nbm0|nbm0]] (20171108) |
| [[/haas/fall2017/discrete/projects/wpfB|wpfB]] (20171108) |
| [[/haas/fall2017/common/projects/wcp|wcpB]] (20171111) |
| @lightgreen:[[/haas/fall2017/discrete/projects/yol0|yol0]] (20171115) |
| @lightgreen:[[/haas/fall2017/discrete/projects/wpfC|wpfC]] (20171115) |
| @lightgreen:[[/haas/fall2017/common/projects/wcp|wcpC]] (20171118) |
======Class Stats======
* [[/haas/fall2017/discrete/projects/status|status]]
======Week 12======
* Unveiling the EoCE this week; more fun and adventure awaits!
======Week 11======
* Focusing on different approaches to problem solutions in the next project, **yol0**
======Week 10======
* We've touched on different number bases through interacting with various projects. Now, we will be specifically focusing on them.
======Week 9======
* Our last foray into primes with a new twist: one loop for central processing.
======Week 8======
* And now with a new debugging tool in hand (via **bdt1**), we can commence on our next dcf exploration, with the **dcf2** project.
======Break 1======
* The week 7 journal entry will be your bonus break week entry. You'll have until Thursday of break week to modify it, at which point I'll roll it to week 8 (which will be a normal weekly entry- our journal entries will now sync up with the week!). If you don't touch week 7 it won't harm you, it will only help you if you contribute any content.
* We've switched over to the new lab46 system. Still testing functionality, most things seem to work out of the box. Be sure to run the **fixmail** script on lab46 to reset configurations for the new setup.
======Week 7======
* Some good progress being made by some on **bdt0**, turns out to be an even better algorithmic exploration than I had planned. Again, only beneficial if you've been immersing yourself in it.
* Knowledge assessment in class on Thursday.
* http://tuxnes.sourceforge.net/gamegenie.html
* Bonus discrete project, write an encode/decoder for NES game genie codes
======Week 6======
* I am thinking I'd like to have a Knowledge Assessment, sometime next week, likely on Thursday, focusing on your ability to critically think and solve a problem, based on experiences and concepts we've been dealing with in the course so far.
* Perhaps pointless, but I am starting to feel like a //broken record//...
* for those unfamiliar with that anachronistic saying (or its origins), it refers to a side effect of listening to non-digital music media with physical defects (specifically referring to vinyl records with scratches). As the playback mechanism relies upon tracing along the surface, various physical deformities could jump or skip the record, at times resulting in the same sequence being repeated over and over again. Compact Discs with scratches could also suffer from this, especially in certain poorly-implemented digital buffering scenarios.
* I find myself expending energy and resources dispensing advice and help, only to continually experience it falling on deaf ears. Or, perhaps more aptly, going in one ear and out the other, lacking that requisite sticking in the ear sponge that lies between. And certainly not universally... there are those who regularly ask questions and who do listen and benefit. I am not speaking about them (they are wonderful, and if anything I'd like more questions). But those who **continually** experience the same troubles, be it from lack of discipline (procrastination, poor time management, brute forcing, etc.) or just in general avoiding proper planning and brainstorming.
* When I exert, in good faith, effort to help, giving some useful suggestions and even explaining some concepts, only to be prompted later with a question clearly devoid that anything meaningful was obtained from the prior exchange, it is disheartening.
* When I see, time after time, people seeking "help" on how to get past their current hurdle, appealing to mercy and the altruistic charity of others, yet getting nothing from the experience (because they run into the exact same problems the next hop down the road), it is disheartening.
* When I observe people avoiding challenging things, perhaps due to inadequate learning in past experiences, sacrificing current growth, and thereby keeping them static and limited: it is disheartening.
* Yet when I see those who are taking advantage of what I am saying, ARE taking away something from interactions, AND diving into new and unexplored things (perhaps even being challenged, but clearly learning and growing from the experience), that IS quite heartening.
* The problem, of course, is when there seems to be a small yet constant group who fits this latter category (of demonstrating proficiency and learning and understanding), in motion greatly advancing from their former states to ever-expanding new states of comprehension and capability, and a somewhat larger group who are insistent (consciously or otherwise) to remain exactly where they are, doing things the way they are used to doing them.
* There's a difference between having difficulty assembling a solid compound logical condition based on what one thinks is going on vs. having difficulty laying down proper syntax for an **if()** statement in general.
* There's a difference between needing a second pair of eyes to run through one's logic following deep and thoughtful planning, vs. running into a conceptual wall trying to code first without actually knowing how to do the task at hand.
* There's a difference between accidentally using **strlen()/strcpy()/strcmp()** with binary data based on a conceptual misunderstanding, and those trying to shoehorn in using the same functions to make their code work because they heard others were using it, and are looking upon it as a magic panacea (so these people neither understand why their code isn't working, nor why these functions may be a bad idea).
* There's a short-term and long-term operation at play here:
* The short-term represents the individual projects we encounter each week, milestones on our journey from start to completion of our semester's journey.
* The long-term represents the collective experience and growth obtained through the overall process. Recognizing shortcomings in an initial approach, learning from the mistake, and then demonstrating increased awareness and capability because of it.
* Again, not universally, but I am seeing too much short-term obsession (JUST GET THE PROJECT DONE! GRADE!) and not enough long-term awareness. People hitting identical walls, showing me they did not learn from their past mistakes or endeavors (or perhaps weren't legitimately responsible for getting through the milestone by their own understanding).
* When you are hired/tasked to develop on some project, it isn't going to be for single, one-shot, little programs. It will likely be for some long-running and evolving project. The pnc and dcf projects are an attempt to acclimate you to that evolving attribute of problems. Where you don't just solve it and drop it, but must continually revisit, revise, expand, enhance. Having a long-term view of where things are going and your strategies for approaching them.
* Yet far too many are still stuck in their short-term, brute-forcing ways. And in that desperation I see things like over-helping (getting access to code or solutions that the person does not truly understand, aside from "it works!!1!") and people driving themselves to exhaustion.
* Those who are adequately on the long term train are noticing some great things:
* intrinsic limitations to current implementation, and often ask me questions on this (and frequently receive bonus points for their insightful demonstration of understanding).
* perceptions that the later things are actually getting simpler/easier (again, these things haven't gotten that way, but the individual's understanding has facilitated implementation).
* the projects, far from being annoying, frustrating, or painful, are actually fun, if not more than a little addicting. That is because, through understanding, they are not just seeing the implementation-specific details in front of them, but a broader impact on how they approach their solution, even applying that forward to contemplating how their solution would hold up to future project scopes/constraints.
* more tangible, but: they start on them well in advance of the deadline. These are the people racking up bonus points, and if anything, are putting the finishing touches on things as the deadline looms, vs. fretting over why their code still won't compile, or has serious logic errors.
* So I have to ask:
* Is discrete really all that hard?
* Is discrete the problem?
* I'm only trying to show you insights into the things you will be experiencing (ie taking a "you have to be this high to ride the ride" approach) in the future. If you are struggling, constantly, and with basic things (due to lack of planning and discipline-- I mean, things happen. That's different than procrastination and needing constant hand-outs to get by each checkpoint), is that really something external to you? Or is it you? Yes, discrete tends to be more conceptually involved, but if you're not putting in the investment to properly grapple with these conceptual interactions, discrete will be more than just hard, it will not only remain challenging, but it will become downright exhausting and impossible.
* With that said, while those on track continue to grow, expand, and impress, there are some making excellent progress to transition from being hopelessly overwhelmed to getting nicely on track to benefit from the experience. I just wish, in total, it represented more than a minimal majority (if that).
* If you're clinging on for dear life **BECAUSE FINANCIAL AID** or because you've not thought your long-term plans through, you really want to rethink what you're doing. Discrete is but a mild taste of what is to come. And not from me so much as transfer school or job. Encountering things you've never specifically encountered before yet have to work with it.
* Just saying "I should have paid more attention in the prior class" is NOT a solution. It is a small admission of the problem. Far too many seem to think that admitting they blew a previous chance is somehow a "get out of jail free card". But think about it, how does admitting "I know what my problem is- I don't know how to program!" turn into "can I have my A now?" It does not compute.
* Some have said they'd like to re-take CPROG, perhaps even next semester. But there's a logical flaw in that: If you feel you could tangibly benefit from retaking CPROG in the future, how is that helping you NOW, when you're clearly deficient in the necessary basics for success in discrete? Hint: it is not.
* More than a few people have stated they'd like to sit in on my CPROG class, yet to date a scant few have seemed to seriously follow-through (and those that have, I have considerable optimism regarding their success, both in the present and near future, but also further into the future as well- they are demonstrating their ability to make a sound investment in their future). And by seriously follow-through, to be both physically AND MENTALLY present, actually learning and picking up important basics.
======Week 5======
* 09/21 @ 8:10am: updated **check** script in **dcf1**. Do a **make getdata** to grab a copy.
* And then there was pnc1.. some continued to demonstrate their excellence and understanding, others still seem to have trouble expressing conditions.
* I continue to be impressed by various interactions- some great insights gained, questions asked, realizations had. That is what the core purpose of discrete is all about- fostering thinking. So for those who have been (and even finding the thinking increasingly addicting): keep up the good work.
* As I had mentioned in reference to knowledge I encountered during my polyphasic sleep research, cannabis (marijuana, weed, etc.) DOES impact sleep (and not in a beneficial way):
* https://www.leafly.com/news/cannabis-101/cannabis-and-sleep
* specifically, see points 7 and 9; in short, the "calming" strain of cannabis, which may promote sleepiness, may only leave you in the lighter stages of sleep, and seems to deprive one of important REM sleep (which an individual, regardless of age, and lacking any sleep cycle optimization (ie all you 7+ hour monophasic sleepers), generally needs 2-2.5 hours of each day in order to feel fully rested).
* And what benefits does REM convey?
* https://www.apa.org/monitor/julaug04/strengthen.aspx
* a very pertinent quote from that URL: "During REM sleep, the brain busily replenishes neurotransmitters that organize neural networks **essential for remembering, learning, performance and problem solving**, ... **Conversely, ... depriving the brain of sleep 'makes you clumsy, stupid and unhealthy.'**"
* what's that again?
* The good: REM sleep aids in committing various experiences to memory, especially related to enhancing problem solving abilities (that all-important critical, abstract, and conceptual thinking I stress you need at its prime to succeed in Data and Discrete structures).
* The bad: lacking REM sleep is like quitting without saving- experiences and knowledge encountered are not adequately recorded, and therefore it is as if you hadn't even learned it- //clumsy, stupid and unhealthy//. Don't intentionally sabotage your sleep!
* Various sources are saying, dependent on tolerance, the purported "high" of cannabis can last anywhere between 2-6 hours. One generally cannot fall asleep (certainly not in a REM nor SWS/deep restful manner) during this window.
* But also to consider, post-"high", the effects are not suddenly gone. They taper. So in order to coexist with it AND good sleep, you REALLY want to curtail use several hours prior to sleep. I mentioned 12 hours, and while I've not yet re-found the information that suggests that specific number, I am seeing a lot of "**at least** 2 hours after the effects peak" as factors to consider in how far away from sleep such things need to take place. And that's likely a per-person/physiological/tolerance thing (so, 6+2 = 8 hours, which is somewhat optimal case, so don't count on you being in that group). So, 12 hours is likely a generally more safe common average.
* Do you know that it isn't THC that may be the "magic" chemical with respect to health benefits (yet definitely is the psychoactive constituent many recreational enthusiasts seek), but instead increasing research is showing the physiological benefits of the non-psychoactive cannabidiol and other cannabi-named molecules (CBD)?
* the body actually has cannabinoid receptors, and produces some forms of cannabinoids (NOT THC, specifically), and research is increasingly showing that a lack of cannabinoids in the body can lead to dementia/alzheimers (indeed, some googling is showing research that cannabinoids can help clear the body of various alzheimers-producing proteins in the brain), that DOES NOT MEAN that the psychoactive constituents are doing all the heavy lifting. Hemp also contains cannabinoids (and NOT the psychoactive ones), so you might be doing yourself some favors by picking up some foods/cereals/supplements with hemp in it. Just sayin'...
* Similarly, for those who partake in or are enthusiasts, are you aware that:
* there are two common strains of cannabis?
* **sativa**
* **indica**
* and **hybrid** where horticultural efforts are melding the two
* but there are important differences between them (according to: http://herb.co/2015/09/13/indica-vs-sativa/)
* "sativa should be about as stimulating as a strong cup of coffee. Typically used during the daytime, sativa will energize you with their strong cerebral effects. Many marijuana lovers choose sativa when they’re looking for an uplifting and creative buzz."
* "If a sativa is like a strong cup of coffee, an __indica is like a sleeping pill__. Great for people who struggle __to get to sleep__, indicas produce //very sedative effects//. Indica smokers often feel sleepy, relaxed, and have a strong desire to eat."
* notice the underlining on "to get to sleep"; yes, it apparently may help you fall asleep, but with its impact on REM sleep, does not actually lead to you having restful REM sleep.
* so, morals of the story here:
* from a purely biohacking point of view: if you're already doing such things, are you at least HELPING your mental abilities by stimulating them (sativa) and not dulling them (indica)?
* and two: if taken too close to sleep and you haven't had time to let it adequately get out of your system, it screws with your ability to remember/learn, so don't screw yourself over further by taking any close to your intended time of sleep (again, I remember some sleep biohackers saying 12 hours- which would greatly boost chances of most of the effects being out your system to reduce, as much as possible, any detrimental effects on sleep).
* Please note, I'm in no way promoting the use of cannabis. For several reasons:
* legal/ethical: it definitely is still illegal at the Federal level, and recreationally still illegal at the state (NY) level. So while I'm obligated to mention that...
* biohacking: while I have never smoked it (nor anything, actually), I did have an opportunity to try some cannabis oil once (a super-refined blend by someone "legally" (state: yes, federal: ???) operating out of Oregon... it was a indica/sativa 60/40 blend. The person who produced it had various physical health issues and through their own research and testing, found that particular balance worked for them. It absolutely floored me. Drowsy, mentally dull, unable to focus or concentrate. I basically lost a day. So while I cannot personally speak towards any benefits for a properly balanced mental faculty-enhancing sativa, what I do know is if you don't have it right for your own physiology, you're definitely not doing yourself any favors.
* so if your obtainment channels are shady/lack transparency (which, if you're a consumer that isn't in a state with legalized recreational use), are you sure you're getting something that works optimally for you (I'd tend to lean in the direction of "probably not")
* similarly, if you're not aware of the growing conditions, how do you know you're not also taking in pesticides and other chemicals? I read that's a HUGE quality control issue as well (leading to its own range of health detriments). So again: why take chances?
* Also, fun fact: sativas grow in more tropical regions, whereas indicas are a favorite of more northern latitude basement dwelling operations (less requiring of tropical conditions). Which again brings us to the economy of the endeavor: if you can "obtain" some generic cannabis produced regionally, and you have no information on its production, statistically it is more than likely indica, which is going to dull your mind and put you to sleep (but not give you restful sleep, therefore hurting your class performance).
======Week 4======
* As of 10:30am Saturday, September 9th, we appear to have 11 submissions for **dcf0** (whether or not they are fully functioning implementations that will pass muster is yet to be determined). Still more than we saw with **pnc0**, so I am hopeful. I also was able to witness the efforts of more individuals productively working on dcf0 (versus the procrastination-fest for the last project). With that said, 11 submissions puts us over 50%. At least doing the work isn't in the minority anymore. :/
* I've finished putting together the data files for dcf1, updating the check script to support dcf1, and putting final tweaks to the project page. We're good to go on that front. We'll be interacting with a different set of data files this time, although you may still want to experiment with some of the data files from **dcf0** just to see how the enhanced algorithm in **dcf1** works (especially on **sample2.bmp**).
======Week 3======
* Some think labor day is a day to avoid working on anything. However, Monday on the class chat, an elite and respected group of discrete denizens converged and much amazing conversation, headway, debugging, and breakthroughs took place. I looked at it as fun and play; hopefully the others did as well, while passively taking over the world and taking names. Absolutely incredible. Thank you one and all who participated in that most cherished and wonderful of endeavors. You have helped not only restore my faith in humanity, but were involved in what I feel true Computer Science learning is all about: the experience, the experimenting, the conversation, the thinking, the theorizing, and contemplation. Thank you for helping to make for an absolutely fantastic experience.
* As a result of that: you'll want to update the dcf0 data files if you have not done so since 8pm Monday evening. A certain troublesome data file (sample2.bmp.rle) has been fixed, now (hopefully) fully conformant with dcfX v1 encoding specifications. It passes the check script tests with flying colors.
* Some metrics:
* of the top 6 performers on pnc0:
* 5 took C/C++ with Hans last semester
* 1 took C/C++ with me last semester
* of the entire discrete class:
* approximately 44% took C/C++ with Hans
* approximately 38% took C/C++ with me
* approximately 18% took C/C++ with Joe
* basically, there goes any attempt at an excuse that NOT taking me somehow left you unprepared.
* I've already had some fruitful conversations with individuals over **dcf0**, so for some, progress is well underway. In some respects it is a bit trickier, just as I mentioned (but again, the trickiness isn't the project so much as the self-imposed obstacles many have, however unintentionally, related to binary data). I don't have my same logging infrastructure rigged up for **dcf0**, so I cannot tell who has started and who hasn't. I suspect we'll know the results of that soon enough.
* This week I'll also be unveiling your next project after **dcf0**, and that will be the sequel to **pnc0**: **pnc1**. This will pick up where **pnc0** left off, completing the remaining combinations (14 of them, to be precise). If you have successfully completed **pnc0**, **pnc1** should actually prove to be somewhat of a reprieve... hopefully enabling more insightful looks at the impact an algorithm can have on overall performance and efficiency, which is the core purpose of the project.
* As I sit here watching the smoldering ruins of my original dreams of whole-class insights gained from collectively accomplishing the various projects, head in my heads sobbing, wondering what went wrong, I look toward the positives. What have we (hopefully?) learned from all this?
* **Important Lessons for Success:**
* **__Lesson #0__**: Have regularly kept coding, even after your programming class ended; experiment, test theories, write small programs; keep your skills current through the summer.
* **__Lesson #1__**: Read available project information. When I get questions mere days before the project is due asking how one actually obtains the files, hearing rumors that one doesn't have to start from scratch, it does not instill confidence in me (it FREAKS ME THE HECK OUT). Especially when said information was not only mentioned when I was unveiling the project in class, but has its own section with pertinent heading on the project page. Not to mention the number of questions I've received where my answer was copying and pasting a URL to the relevant project page section.
* **__Lesson #2__**: There's this super advanced feature built into many modern information viewing applications, it is called **search** or **find**. Sometimes even accessible via these Konami code of mapped keys such as **CTRL-f**. You type it even a single word or substring of what you are looking for, and it zooms you to the matches. I don't have the project pages memorized. If someone asks a question about the verification tests, I'll search for "verif" (that way I'll hit both "verif**y**" AND "verif**ication**") and bam! Either with the first match, or in very short order, I'll find the droids (er, information) that I am looking for. Stop being passive in your interaction with data. Turn it into an interactive transaction with **information**. If your mind zones out when staring at seemingly endless walls of text and your mind freezes up like a hunted animal in pursuit, you really may want to re-think the path you are on- as it is OUR job being the ones who will be writing programs for other people (and other people's **data**, more specifically), and have to make effective sense of it. Think of my project pages as yet another learning milestone- learning how to deal with a lot of relevant data, and how to strategically transact with it, where each interaction is yielding you the particularly valuable subset of **information** you seek at that given moment.
* **__Lesson #3__**: Listening comprehension. I'm actually not just standing up in front of the room babbling because I like to hear the sound of my own voice (does ANYONE actually like the sound of their own voice?), but that I am relaying important concepts and information that I feel are pertinent based on various patterns (past class performance, current class observations, helpful hints, and generally relevant data points worth paying attention to, among other things). Yet, more and more I am getting questions, and very simple ones at that (not of the "I don't understand the concept" variety, which I cherish and love, but instead of the "I totally wasn't listening to a word you were saying, and this question basically is an admission of that") which make me wonder why I am standing up there running my mouth to begin with. Don't worry, I'm not going to stop, nor am I going to cater to your technology-induced attention and focus deficiencies (I am NOT going to, in very twitter-like fashion, tweet you your answers, 140 characters at a time).
* **__Lesson #4__**: Think! This is actually central to computing, no matter which sub-field of it you are in. We are the people who must think in order to solve other people's problems. From the "it stopped going, please, make it go again" debugging to "write me a program to produce a visual representation of stochastic trends related to the societal impact on mudkips". Other people don't have the answers, no direct solution exists. We're the solution-makers. We create possibilities. But if all we ever look to do is re-arrange the few blocks we regularly use in familiar fashion, that's little better than re-arranging the deck chairs on the Titanic.
* **__Lesson #4a__**: There are many neat things that come from combining all these lessons/skills as well. Like reading + listening + thinking, one can develop a sense of context, and then move further away from that black and white world of specific exact actions. Like my search example above with searching for the substring "verif" instead of specifically "verify" or "verification". That requires thinking and understanding that the information you seek comes in many forms, and we have to contemplate the best ways of instructing the computer to do our bidding. If you were told there's information related to how to verify your output on the project page, and you search for "verify" you may find some information, but maybe not everything, even the more useful stuff. But if you think and understand there are different forms of representing "verify" in our natural language, and you can then better use the search functionality (the computer sees "verify" and "verification" as two entirely separate things, it derives no meaning from them; we understand the meaning of words, and the similarity of their forms, and from that, we can craft more effective patterns we can communicate to the literal computer). A common mistake and misperception some make in computing is that success means they have to learn to be just like a computer. NO. We're not looking to become computers. We are looking to become effective operators of computers. Directors of computers.
* **__Lesson #5__**: **EFFECTIVE TIME MANAGEMENT**. Some have discovered the distinct advantages of grazing on the project. Starting early, and spending only 20-45 minutes on it at a time (or planning to- if you're on a roll, why stop after a set amount of time?). Most people who lack proper time management discipline to this the exact opposite way: they start (too) late (starting late is already too late), and suffer through obstacles because they have no choice, a looming deadline keeps advancing. The people with good time management will encounter a problem, recognize the obstacle, maybe try a few approaches to eliminating it. But if it continues to resist, they recognize this, get up and walk away. The subconscious mind is a wonderful and powerful "computer" in its own right, and has just been "programmed" and is working on the problem as you're off doing something else. Many then find that, upon resuming work later, a solution just pops into their head. That is the effective result of delegating work to your subconscious.
* **__Lesson #6__**: Now onto the lesson some have hopefully come to realize in recent days, and maybe even a subset of those have taken it to heart: **START EARLY!** Sure, you may have been busy, or just outright ignored my early release e-mail in the summer... that is perfectly fine. But when the semester actually starts, and you've got upwards of 1.5 weeks to work on a project, yet my graphs clearly show a huge surge of people just getting started (ie obtaining the project) only 1-3 days before the project is due, that is what we call a lost opportunity. Rushing and fretting and trying to brute force your way through uncooperative code (it actually isn't the code that is uncooperative, it is your exhausted minds poor use of logic that you're then fighting with) doesn't yield effective progress. Nor is it the nature of what we do in computing. Success isn't defined by how many hours you spent beating your head against the wall, but instead how functional, how efficient, how flexible your solution to the particular problem is (and how well it conforms to any stated specifications).
* **__Lesson #7__**: This is the lesson that I wanted to share with you today (as I look at the still-minimal pnc0 submissions on Saturday morning around 7:30am), that is equally valid for those who are regularly following the above-stated lessons, and successfully, just as it is valid for those who hitting every roadblock, every snag, beating their head on every wall along the way, wondering when we'll just go back to memorizing and regurgitating everything (hint: we're not). This lesson pertains to long-term progress and success. And this is "**knowing when to cut your losses**". What I mean by this:
* **pnc0** was due before it was no longer Wednesday.
* It is now //Saturday//, meaning if you submit **pnc0** today, it is **75% LATE**. And while it is important to note that getting **25%** credit (max) is better than only being able to get 0%, you're focusing only on the short term.
* While you've been slaving away suffering the consequences of your initial procrastination, you're neglecting the gradually approaching elephant/train/whatever: there's ANOTHER project due this coming Wednesday, and it is called **dcf0**. At some point you'll want to start on that (and ideally, NOT the same 1-3 days before it is due, otherwise you'll find yourself in the EXACT SAME scenario next week as you are in NOW). Getting everything in, or having everything perfect, at the cost of constantly getting hit with late penalties is like death by a thousand pin pricks. If you focus only on the current project, you neglect to see the next, and the next, and the next, all being the foundation of your success in the course.
* Case in point: If you're still working on **pnc0** today, and it is in anyway workable (passes SOME tests), you may just want to submit what you have and MOVE ON. Get started on **dcf0**. It is your next project, and it is due in mere days (and at this point, you can STILL get full credit on it... more than that! Bonus points if you submit it early!).
* But what about **pnc1**? Isn't that due the week after? And don't I need everything working in **pnc0** in order for **pnc1** to work? Why yes, yes it is/you do. But **pnc1** is far enough off in the future where, if you were to adopt things like good time management practices, you could continue to plug away at **pnc0**, just in smaller chunks, whittling away at the problems, and you may find you'll start to make far greater progress when it isn't the "OH MY GOODNESS IT IS LATE I HAVE TO FINISH IT NOW zOMG!!!1!" priority it is right now.
* **__Lesson #8__**: There's a perception that this course might be more challenging than others (some even seem to be banking on Data Structures being "easier", bailing on this course but staying in data. I pity their poor souls. Just because something seems "less complex" now, in no ways means it is going to stay that way. Far from it... I've not even started turning up the volume yet in data, but mark my words: that is only weeks away.). Personally, I find discrete the easier, less intensive course, because we're just combining two things: third grade math and programming. That's it. Granted, effective utilization of both requires comprehension, and thinking, and it is THOSE things that people are finding challenging. But discrete as a course is not what is difficult. The lesson here is that **you can be your worst enemy**. When one tries to brute force their way to a solution, they often end up with far more complex solutions than is necessary. I've **already** had a number of people report to me how they initially struggled with how complex something looked, then when I told them there was an easier way (or that their way was far more complicated than necessary), and if they sat down and thought it out, tried some things, **experimented**, they'd write back a day or so later AMAZED at how they could overlook something **SO SIMPLE**.
* So many things in discrete will be based on very simple premises.
* If we are not careful, we will ignore the simplicity and leave complexity instead (wasting time trying to wrangle it into operation).
* Do not be your own worst enemy. Don't be closed minded. There are MULTIPLE paths to solution, and a big part of discrete is opening your mind to experiencing multiple solutions (**pnc0** is a perfect example-- look at all the optimizations, and those are just a few I have chosen).
* **__Lesson #9__**: It may seem harsh, but I prefer to call it "brutal honesty". If you cannot start to critically think, read, comprehend, and do the things in these other "lessons", you should seriously consider changing to another program. You may like the idea of programming (or heck, maybe you don't-- maybe you just like computers and you're waiting until we get past all this "programming nonsense" and get to the IMPORTANT advanced topics in computing, like internet chatting and playing games and memorizing hardware specs), but these courses (data and discrete) mark the transition from learning the basics (keywords, simple 20-line programs) to effectively deploying these skills and concepts. I fully acknowledge it is quite a gap, and in some respects we can thank your prior educational journeys for leaving you in this currently less-prepared/under-prepared state, but that doesn't mean we cannot start taking control of our own educational journeys. This isn't the first time I've taught this class, nor encountered less-prepared students.
* And some in the class are already demonstrating they are not just the sum of their parts. They are realizing just how capable they are, and utilize the concepts encountered in these courses to propel them to even higher heights. And I'm definitely taking notice.
* but I'm also taking notice of how many continue to struggle, and although it is still early, a lot of the struggling is based on self-imposed limitations.
* So PLEASE, stop looking ONLY at what is immediately in front of you. You have just experienced 1 week in this class. We're looking to do the same this week, then the next, then the next. If every single inch is a struggle, and you cling on for dear life, perhaps some will make it with that approach, but they certainly won't enjoy it (and it isn't just that my classes may be more intense, think of it this way: I am preparing you for the intensity of later courses. The more prepared you are coming out of my classes, the better you can appreciate the more advanced topics and concepts and projects to come). If you're only taking a short-term view, you can get stuck thinking this is your only path, when in reality many others exist.
======Week 2======
* The "metrics" page for **pnc0** is now online; be sure to check it out!
* Also, a helpful tip to enhance productivity and demonstrate you're applying critical thinking skills: when you e-mail me with a question about a project, it would REALLY help if you identified the course AND project you had a question on. Vague statements like "On the project, how do I...", even though I know WHO you are, does not necessarily clarify which specific project, nor which class.
* Some stats on our progress towards completing **pnc0** (as of 9:30am Saturday, August 26th, 2017):
* there are 19 (20, counting me) of us in discrete.
* of those 19, 11 have obtained (presumably via running the **grabit** line) pnc0.
* of those 11 who have obtained the project, 8 have appeared to start working in some capacity on the project.
* of those 8 who have obtained and commenced work on the project, 2 have submitted **pnc0** in a completed, finished state (these 2 also first started working on the project back in July).
* Either you're all experts and have everything under control, or you've not yet really begun work. I tend to suspect more of the latter, and as my inbox has been pretty much silent with respect to questions on pnc0, I have to admit I'm a little concerned. This isn't something you can likely whip off in under an hour; you certainly won't learn nor appreciate the concepts we're endeavoring to explore if you do. You need to dedicate time to these projects, to reflect on what you're observing. It is so much more than just completing project requirements... it is about conceptually understanding and gaining new insights on how to effectively solve problems. In that light, it isn't a race about how little time it takes to complete, but instead how much time you productively and valuably dedicate to the process.
* As I indicated during our first week, it is my intention to release the next project a week early (potentially allowing up to 2 weeks to complete vs. just the one). Last week **dcf0** was that project; this week (on Tuesday) I'll officially introduce and go over it. You'll see the NEXT project in sequence, **pnc1**, has been released, which will be introduced in week 3 (but those who are ahead of the game can start early).
* Weekly Puzzle funs: Remember, it isn't enough just to come up with a solution. Capturing your work is just as important (especially if I ask to see it!). A lot of people who have been stumped are largely in that state because their methods for progressing through the problem are flawed/limited (ie not writing down things, not testing/checking things). And those who were initially stumped but have invested in improving their process of solving the problems (writing down more, questioning and testing things), have seen impressive improvements in success (dare I say, even enjoyment, in solving the puzzles). Doing these puzzles, by your own hand, as a manual process, is indirectly enhancing your problems solving and critical thinking abilities. The less you've used those mental capacities, the more challenging and confusing these puzzles will be (but what is neat is, if you stick with it, the puzzles seem to become easier over time).
* and to clarify a question I've been getting related to the puzzle funs: you are just submitting the answers, but you are to possess the work. That way, if I request it, you should be able to produce the work to verify that you did indeed do the project, vs. just copy it from someone else.
* and as for how to submit a project: read to the bottom of the project page, there will be information (even instructions!) located there.
======Week 1======
* Welcome to Discrete Structures! (aka Computer Science math! NOT to be confused with Math for Computer Scientists).
* This is a class that focuses on the patterns, mathematics (combinatorics), logic, and algorithms that are inherent to computing.
* We'll endeavor to do this by working on progressively more involved projects, so you'll get to appreciate the concepts we learn through their application in programs, hopefully in combinations with many others we've learned (not just one-shot isolated programs).
* Tuesday we flew through the syllabus and did a same letter division puzzle, effectively running out of time at the very end (but I thought it was super fun, and started later interactions where I had the pleasure of working on 3-4 additional letter division practice puzzles with others).
* Speaking of which, should you desire extra practice, I've got a collection of these things ready to go, and we can easily get one written up on the board to do for practice).
* I've got 2 whiteboards in the room as well... so we can certainly put them to use.
* Thursday I formally introduced (again, for the first time), the **pnc0** project, which you've had early release access to since the middle of July. A couple were already significantly underway and had some excellent questions on implementations logic (things were working, just maybe not in all usage scenarios).
* I've gotten the slight impression that some don't like to read; my writing (and by extension, project pages) tend to be quite verbose, in part because I like to pack them full of as many details as possible so you can hopefully answer many of your initial questions (but that assumes you've read said information). Computers process information (they read, and write) ALL the time. If we are to effectively program them, we also need to be effective at processing information meant for us.
* If thinking (creatively, critically), problem solving, reading, writing, and logical and numerical reasoning aren't your thing, you might want to reconsider why you are on this path. 2 have already changed majors (sad to see them giving up on practices that make us uniquely human, but also glad that they're not wasting their (and my) time floundering about). These upper level classes expect you to have a solid working knowledge of basic programming as you learned in the C/C++ course (regardless of who you took it with, all the essentials were covered; it was/is up to you to have personally played with those concepts, apply them, and gain better understanding of them). It isn't something that can be "learned in 15 minutes" or followed from some HOWTO or tutorial (indeed, those who "learn" programming from tutorials are often little more than one-trick ponies who generally can only regurgitate memorized examples within a fixed set of combinations). With that said, I see an incredible amount of potential, so I am looking forward to seeing people break through and grok these essences of Computer Science.
======Week 0======
* Attempting to provide an opportunity to get started BEFORE the semester officially kicks off. If you are interested in keeping your programming skills sharp and current, consider starting work on one of the first projects now, in order to have it done to rack up lots of bonus points once the submission window opens!
* The early release project, our first weekly programming project, is **pnc0**, a prime number computation program. Some who have had me in previous classes have had similar projects before, but I caution you: I've done a rather significant restructuring of project requirements (and desired program operation), so you would be better off starting from scratch than trying to utilize any existing code from prior attempts.
* Fixed some typos and tweaked some requirements to pnc0 to make it even more awesome. Check the "Errata" section up top for details.
* Based on some questions I've received, I've started an FAQ document (accessible via the "**faq**" link to the right of the pnc0 project link above. As I got more pertinent questions I will look to add to it.
* **EARLY RELEASE #2 (20170723):** I've gone ahead and released another weekly project early; in Discrete, the aim is to have at least two projects a week; one programming project, and one logic puzzle project. This is your first logic puzzle project: weekly puzzle fun #0 (wpf0).