Archive for the ‘Computer science’ Category

Creating vs consuming

As much as I love using consumer electronics, I don’t want to be someone that spends their entire lifetime of computer use simply receiving what people make for them. I want to create things for me to use, for others to use. This is why I am a computer scientist. I care about why computers were created, how they operate, and what they’ll be doing, because I’m a part of that now. Even though creating is so much harder than consuming, it’s far more rewarding and worth every second of agony trying to find that stupid semicolon or looking at examples, asking peers, and reading texts to figure out how to get started, how to fix a problem run into, and how to make our work better.

If you don’t want to create, how can you be a computer scientist? It’s not just creating software, but creating ideas and innovations in computing that benefit some larger good. It’s true enough that we can’t be creators of everything; civilization would be a but a start-up if everyone had to create everything for themselves and no cooperation was permitted. But it’s also equally true that some people are called to create something for someone, and computer scientists are those people.

While normal people sleep, we create things in the silent, dark, and mystical haven that is the night, keeping networks and systems operational, turning an absolutely zany idea into a real product, and dreaming of ways to improve the things that we have already made, not simply to do so, but because doing so sharpens our ability to do all the rest. Few who consume in the night are as productive as those who create in the night. Overly romanticized, to be sure, and no one gives a flying crap about who does what when when it comes down to it, but I find tremendous motivation in working when no one else is, learning when everyone’s on vacation, operating when everyone’s shut down, and creating when everyone’s consuming.

Estimating development time

It’s apparent that schoolkids aren’t the only ones that can’t seem to figure out how long a project will take ahead of time.

A trivial idea at first, and deadly at the deadline, it’s something that is egged on by inexperience and impatience, and since the nature of the work is generally a learning experience, the newness of the learning creates variable time allotments for different types of project. What experience gains you is a broader palette of project types, meaning that the likelihood of encountering a new type of project is decreased with every project you take, decreasing the collective learning curve, and thus, time taken.

The article expresses dismay at the fact that this type of scheduling is barely learnt before the learning on the job occurs, suggesting junior dev roles be taught such a thing, and it’s rather fortunate that coursework at Tech is forcing scheduling as part of a project grade in order to teach the skill before it becomes business-critical.

Great summary of these things in the article.

http://blog.patchspace.co.uk/why-cant-developers-estimate-time

Final thoughts on teaching the Computers merit badge

Last Saturday, the Campus Scouts of Virginia Tech held its annual Merit Badge College, where several badges are taught to over 175 Boy Scouts in one day. I was fortunate enough to teach the Computers merit badge to fifty or so Scouts, and, after a few days, some things have begun resonating.

Here are a few:

  • Computers are just really exciting to me.

I was reading through the merit badge pamphlet, which provides information relevant to the badge requirements, and just looking at why the computer was need and created, and how it evolved from the UNIVAC to the 1981 IBM PC to the 1984 Macintosh to those of today was so fascinating and strangely exciting. While I prefer the software as a computer scientist, I love the idea of interacting with the hardware to do interesting things.

  • Young people who are interested in computers are a treat to be around.

This does not include the kids who love computers so long as its web browser is pointed to addictinggames.com, but those that are interested in the history, how programs are made, where the future of computers lies, and that they get to be a part of that. They’re engaged with everything about what makes computers useful to society, and that’s what computer scientists are interested in. Some of the kids that were in my class are going to be computer scientists and good ones.

  • Regardless of how the computer science experience goes, you have to be in it for the love of the game.

This thought was reinforced well in the week preceding the class, as I wasn’t able to solve a programming project problem for a class, and I had nothing to show for my project come time to turn it in as a result. It was a little demoralizing, because it didn’t seem terribly hard and it meant that there was something that I couldn’t do in my bread and butter area of interest, so to speak. Preparing for the class got me over it, though, because my interest was instantly reignited, and I wasn’t about to let one project derail an academic career, let alone a professional one.

We also know that computer science jobs have a large potential to be on the higher end of the pay scale. But few think very highly of a megabucks superstar athlete in it for the money instead of the game. If I’m not majoring in it for academic success or money, strictly speaking, why am I here? The enthusiasm of the kids in my class reminded me why I was in their place not long ago (at least in interest level), and why I had to return to that in order to be an effective ambassador for the field in general. There will always be people better at it than I, and some of those kids were, but my idiosyncratic interest has to be my driving force.

Fifteen years ago…

…normal people weren’t really sure what the Internet was. Or what @ meant.

Competition

Even though there are more than enough computer science jobs to go around, why are computer science students so competitive to the point of degradation, arguing incessantly about which operating system is the best, which programming language is the best, how n00by a person is because they hadn’t implemented a binary search tree at the age of six, still don’t know PHP despite attending college, and just generally fail at 1-upping everyone?

Wouldn’t it make more sense to share code, but not be obsessed with everything open-source and shunning proprietary work? Wouldn’t it make more sense to give encouragement to programmers who have difficulty with the particulars of a paradigm, but not give them the answer outright? Wouldn’t it make more sense to share common knowledge with others that don’t know, instead of pretending that our own knowledge of a language or system is too valuable to disseminate?

Sure, we compete for jobs, but real computer scientists don’t learn the discipline to get a job. They learn it for the love of the game, so to speak. Why don’t we spend more time teaching others to love the game and less time teaching them to loathe each other?

Computer science…

…is hard.

The problem with problem-solving

So there’s this great class Virginia Tech computer science majors are required to take: Introduction to Problem Solving. Through three weeks, the class appears to be a highly psychological study of the thinking mind and using knowledge about the mind to snuff out errors and fallacies that prevent a computer scientist from solving various problems throughout his or her life, and the textbooks appear to corroborate that synopsis of the course. The textbook harps on a lack of confidence as a significant stumbling block on the path to solving problems, but, for all its scientific insight, it fails to mention the effect of having too much confidence, which is a far more jarring occurrence.

A reasoning test was given on the second day of the course in order to provide a “pretest” for our reasoning abilities entering the course to assist the takers in identifying weaknesses in various problem-solving areas, as verbal reasoning, analogies, sequential instructions, and so on. On the fourth day of the course, the test was returned, and the most commonly-missed questions were posed again to various students who had missed them. As is the norm, the process of deliberately having our mistakes pointed out is painful, and that’s usually due to pride, but the behavior of a few classmates was completely shocking. For the first time I can recall since elementary school, the students (stubbornly) verbally sparred with the instructor in the most uncharitable way over material that was hardly weighty or otherwise ponderous, but more in the way of petty semantical distinction. Wondering silently why students would be so adamant about things that were so trivial yielded the answer: these students are not at all comfortable with making mistakes.

Mistakes are a part of humanity; this cannot found untrue, regardless of pursuit or determination. Academic “mistakes,” or errors in logic, deficiencies in memorization, or other such things, are commonplace for students, especially by the time they have reached the college level. But with the ability to achieve the college level and have enough information gathered to be able to choose computer science as a major almost necessarily requires a somewhat stout logical and reasoning ability. I suspect the uproar was due to the fact that test was succeeding in finding errors in the supposed bread and butter, so to speak, of the engineering discipline. This is supposed to be something in which computer scientists and engineerings excel, and this test and, by proxy, instructor, stood to show otherwise, and that thought proved to be too much for some students. Some resorted to a denial defense mechanism, which resulted in the petty arguments with an instructor who is merely providing the test authors’ rationale for which answers were correct and didn’t write the test at all. As for me: yeah, it stings when I’m shown to be wrong, and it’s called humility. I try to accept that as the growing agent that it is, however, forgoing pursuit of an entirely uncalled-for, nonsensical, and fruitless sequence of rather base banter.

I feel as though the feelings expressed by others during the exposé are most adequately manifested in the extraordinarily-heated argument ensuing the discussion of a particular question, which I was called upon to write upon the board and explain my rationale for choosing my answer:

A journey always involves a _____________?

a. person          b. destination

c. distance       d. preparation

The above question caused the most consternation I have ever seen in a single question in my entire academic career (which, by accounts, is limited). There were loud outbursts from some students, directing quite unwarranted vitriol toward the professor for even expressing an answer that happened to disagree with theirs (while many students chose choice b, the answer is actually choice c, and that is corroborated by Merriam-Webster’s Third New International Dictionary Unadbridged, which is the only print dictionary I presently own). The instructor went on to mention that a large number of students missed a portion of the verbal reasoning problems, and this was attributed to a general shift in leisure time spent away from books and reading, and toward enjoying webcomics and YouTube videos, which is a true statement, and very probably the reason for a generally-decreased vocabulary that has permeated the reasoning and general expression of students throughout my high school, and now college, career. The final straw came when the instructor remarked in an email to the class that online dictionaries were in an abridged state, as compared with their unabridged brethren (which makes a lot of sense, given the use and meaning of the word “abridged”), and possessing a large vocabulary is ‘indispensable’, and so is owning a print dictionary, a premise with which I wholeheartedly agree, given my experiences.

A few hours after this email was sent, a student published a lengthy (reply-all) email taking the instructor to task for failing to consider the “complete” online Oxford English Dictionary (OED), which allegedly contains over ten pages of definitions for the word ‘journey,’ and proceeded to hail the online dictionary as the savior of etymology, noting that it is possible for it to be updated at least four times per year, and closing with the statement that the power of the online dictionary is immense, and the print dictionary will never ever compare. Neither print dictionary, online dictionary, nor aptitude test will understand a word’s colloquial meaning to be the norm, and there’s also the fact that the definition of ‘journey’ will never change four times in one year, and certainly not as a result of a looser usage by less-than-proficient speakers. The addendum is the only portion of the dictionary that would even possibly be updated four times per year, and that would still be incredibly rare and unusual, so I don’t really see where the power of the online dictionary is so completely immense that print dictionaries are completely worthless. I’m fairly certain that the word ‘journey’ existed before the invention of the Internet, and that the word would not have changed definitions in several years and my inclination is toward decades. The fact that the instructor would even suggest a preference toward offline materials created such a stir that students were shouting at him for revealing that preference.

So, the problem with problem-solving is this: there is a prerequisite to understanding how oneself makes errors, and that is to know that one makes errors, and that they are not confined to academics, but also to social situations and with regard to personal conduct and character. Error is, and always will be, the most crucial thing to correct, because they are indicative of the very lowest level of us: our human frailty. Mistakes will be made as long as there is life, and understanding, grasping, accepting, and fighting against that tendency is truly the key to understanding how humans solve problems. Problems arise when an ego prompts an email sent to every student in the class and the instructor, taking the instructor to task by using an argument that isn’t even well-conceived, because it is a highly ineffective defense mechanism on the social front, surely, as well as on the life front, because solving problems while refusing to acknowledge that being wrong is an option yields disoriented results that are skewed not in the favor of truth, but that of the solver, and that is precisely what the professor is trying to teach with the class, and the WASI test in particular. So it’s not even that approaching the problems themselves is the hard part; it’s the pre-problem approach, collectively referred to as the “problem-solving stance.” Let me say that I have an infinite amount of respect for the instructor of the course now that it’s been made clear that he has to try and change minds in a non-academic way before his message can even begin to resonate.

Let this be a lesson: stay humble, and avoid the problem of problem-solving.

Return top