Computer Science students: Learn to write
xaprb.com
xaprb.com
I’ve encountered many brilliant students in college, with straight A’s through highschool and stellar SATs, who cannot string three or four sentences together into a coherent paragraph. I am now trying to realize a vision of a Khan-inspired service for writers who are not getting the help they need from school. This is probably not the time for a shameless plug, because my site, as a site, still sucks, but if any student here wants free, quality reviews of their writing projects, you can get them at http://www.essayjudge.com
I say “free,” and mean it, but if you want to abuse the service, then I may ask you for a return favor in the form of development advice.
At present, you can submit writing quickly at the site using anon/anon as uid/pwd, but for HNers who don’t want their writing and the attendant review published, you can google-email me (bbquigley). No promises if I’m inundated, except to try my best.
Edit: The content looks great. Sorry, didn't mean to sound snarky, but that is a scary first impression of the site. I have some more comments that I tried to email to the contact email address, but my email was retured. Is there an email I can use to contact you or someone at the site?
Sometimes a foreign language is the reason, but not always.
This should read "Humans! Learn to write"
CS students are not alone in this need.
The one course, more than any other, that taught me to write efficiently and convey ideas clearly was my 400 level Philosophy of Mind course. We were to write 1 page (double spaced) essays, weekly, on the papers we read. The class argued our professor up to 2 pages.
When i received my first essay back, the full first page was crossed out. I learned not to include any dithering or bullshit in my essays after that, one page was almost exactly right. That was the point at which I really understood the joke "I would have written you a shorter letter, but I didn't have the time."
Edit: homophony: two -> to; in the most ironic spot possible.
Was this intended to be ironic? :)
If you are writing a complex model, while it is ultimately math, it has more in common with the skills required to write a great essay than it does with the skills required to do complex calculus. A great essay is understandable on multiple levels of detail: if you read just the introduction you should get a sense of what is going to happen in the essay. If you want a more detailed explanation of what exactly happens it should be contained in a logical place later on in the essay. The body paragraphs should reference the structure of the introduction and they should contain those arguments in more detail. If you are writing a particularly large body of writing you might need a more expansive structure: chapters, maybe even multiple volumes etc.
The same should be true of your application. If I read the main file of it I should get a basic idea of what is going to happen. If I want more detail I should be able to understand clearly where to look for the detail I want.
Anyone can glue some APIs together[1] and make some kind of application, but it takes some math skill to design and implement strong algorithms. Computer science is not about syntax and semantics, it's about about algorithms and data structures-- and if you're not good at algorithms and data structures, it doesn't matter how good you are at memorizing Python syntax.
This is anecdotal, but every good programmer i know of has a strong math background, or at least knows how vitally[2] important math is to being a good programmer. Incidentally, most bad programmers i've met put much more weight on memorizing APIs and language semantics (e.g. Why do i need to know the big-O running time of bubblesort? python has sort() built in!) than learning math.
[1] And they do. You can find them on odesk and elance charging $10/hr and blowing past deadlines, producing unworkable code.
[2] Seriously. I cannot stress this enough.
There's your problem right there. He isn't talking about computer science, he's talking about actually programming.
Sad thing is, on HN, many more people will probably support your side.
1) Drawing code. One recent example was an (animated) undefined progress bar designed all in code I did last friday: http://akhun.com/seo/skitch/photo-20110805-195455.png
2) Sorting, ranking and scoring algorithms. Eg. figuring out which ad to show based on the average eCPMs, or which option to show based on a Quicksilver fuzzy search algorithm.
Everything else is as grandparent condescendingly calls it, stitching APIs together. Design patterns, data managements, doing all the little polish that makes up a real app.
I would be "good at math" if it were about how well we could invent methods of solving problems, rather than how accurately we can apply the method we were taught 100 times.
I have a pretty good grasp of the behavior of systems, it's just that I'm likely to drop a coefficient or confuse a 0 and a 9, which is the source of nearly every B. I have rarely lost points in a situation where I would not have known how to write a program to do the work for me.
We have a variety of tools and abstractions in Computer Science which allow us to view what is fundamentally mathematics from a more abstract and 'natural' standpoint. I've known many people with a poor grasp of higher level math who had an innate ability to understand logic and hierarchies, making them extremely skillful at solving business problems.
I assert that something on the order of less than one in ten programmers need to have significant command of mathematics proper. I'll take nine programmers with solid domain knowledge who can write clear, concise code on a schedule, who are self-aware and will defer to the one research guy, over a team of nine research guys. ;-)
The sad truth is that you have a very limited view of what math is if you think of logical syntax and parsing as something other than math.
Frankly, I'm a little tired of the position calculus holds, where it is the pons asinorum for everyone who wants to do the more advanced (that is, non-arithmetic non-trivial-algebra) math regardless of what their true focus is. I think proof construction should be its own class and CS folk should take that and discrete math in order to move up the ladder. Engineers-in-training could take proof construction if they want a math minor and, yes, calculus their little brains out because calculus is what physics uses for a language.
You are not alone. Here is a quotation from John Stillwell that I put in a FAQ for parents about mathematics education:
"What should every aspiring mathematician know? The answer for most of the 20th century has been: calculus. . . . Mathematics today is . . . much more than calculus; and the calculus now taught is, sadly, much less than it used to be. Little by little, calculus has been deprived of the algebra, geometry, and logic it needs to sustain it, until many institutions have had to put it on high-tech life-support systems. A subject struggling to survive is hardly a good introduction to the vigor of real mathematics.
". . . . In the current situation, we need to revive not only calculus, but also algebra, geometry, and the whole idea that mathematics is a rigorous, cumulative discipline in which each mathematician stands on the shoulders of giants.
"The best way to teach real mathematics, I believe, is to start deeper down, with the elementary ideas of number and space. Everyone concedes that these are fundamental, but they have been scandalously neglected, perhaps in the naive belief that anyone learning calculus has outgrown them. In fact, arithmetic, algebra, and geometry can never be outgrown, and the most rewarding path to higher mathematics sustains their development alongside the 'advanced' branches such as calculus. Also, by maintaining ties between these disciplines, it is possible to present a more unified view of mathematics, yet at the same time to include more spice and variety."
That's from the preface to his book Numbers and Geometry (New York: Springer-Verlag, 1998), which is a delight to read and full of thought-provoking problems.
http://www.amazon.com/Everything-More-Compact-Infinity-Disco...
Perhaps its beside your point, but this is exactly what's most important about learning how to write. There's a whole lot more that you learn by exploring 'fuzzy concepts' and non-precise systems. Approaching natural language like a science or system is delusional at best. Reading and writing "amazingly clear and concise documents" is just one way of using language as a tool.
In a normal job, you won't use your skills only for writing official documents but also for writing numerous mails, info-files and participating in chats and online discussions during the day. How well these are written will have a huge impact on the receivers ability to figure out what you are after. More then often the things discussed are not scientific facts.
Some tips: learn to state or restate a problem as a problem rather than an unimplemented solution. Consider: "I need a faster horse which eats less food" vs "I need a mode of transport which is faster and has less upkeep". This is especially important when dealing with feedback and bug reports from users. Learn how to extract the essential complexity of the problems they are facing and don't become biased by the possible solutions they offer up.
Also, be as direct, concise, and clear in written communications (email threads, commit messages, bug tracking comments, etc.) as possible. Make a habit of listing and relisting assumptions and presumed findings. Make a habit of summing up and distilling results, especially when new people are added to a discussion or issue. This saves so much time and avoids so many missteps due to ambiguity.
Additionally, teach yourself how to discuss technical topics without becoming excessively emotionally involved. Address the technical issues, don't fall into thinking that a criticism of your idea is an attack on you, learn to play devil's advocate. Learn to progress toward the best possible technical solution regardless of who had which idea.
But the creative writing courses really provided a lot of other valuable experience too. Having to put together a creative work involves parts of my brain I never really used while coding -- it was sort of a challenge to put aside the methodical, linear path I live in while programming and have to imagine a world, then put someone in it, and have them do things that people might want to know about.
The other nice thing about workshop-based writing courses is that you generally read and comment on works written by your fellow students. You learn new craft skills from reading their work for sure, but you also learn how to give constructive criticism where it needs to be given.
This sort of diplomacy is something you need to practice in order to be good at it. It will help you later when you're in a code review meeting at work and you are the guy who can step up and say something more useful than "you're doing it all wrong, that code sucks, and so do you."
Blog.
Don't worry about which software to use, how to customize your template, or how to promote your thoughts. Just find a service that lets you start writing right away, and then start writing about what interests you or inspires you.
If you feel intimidated by formatting or structure, a trick that works well is pretend you are writing an email to a friend, explaining to that friend something that he or she may not understand very well. Real friends or strangers may start to read your posts. How do they respond to your presentation of facts, observations, and arguments? Use the feedback to tweak your approach.
Your organization and "voice" may seem awkward at first, but regular practice -- every day, if you can manage -- will help you develop your skills. After 100 hours you'll notice a big improvement. After 1000 hours, you will be well on your way to being a master.
When I tutor children I ignore the topic they are having trouble with. I go back to basics and teach them basic critical reasoning skills. Their performance in everything skyrockets.
The fact that our society is failing at teaching children how to reason about basic decisions is cause for serious alarm. I'm looking forward to Eliezer Yudkowsky's forthcoming book on how to think correctly (currently use How to Solve It as a guide for teaching others).
Cached Version: http://webcache.googleusercontent.com/search?q=cache:W4_uDOQ...
They basically said. The accounting part is the easy one but if you can't write we can't use you.
It always struck me as a great insight. Almost no matter what level of expertise one will acquire the ability to communicate is just so much more important than we like to think.
Clarity should rule above everything else, correct grammar included. This encompasses the "What's the point?" question, since if there is no point, the paper may be grammatically perfect but shouldn't be clear.
http://www.learnoutloud.com/Free-Audio-Video/Literature/Cont...
Oddly enough, my advisor thought that a CS + TW combo made no sense.
I ignored him, much to my benefit.
Guess he really is still learning to write.
"You know what your problem is? You aren't like me."
English Lit Majors: Learn to scale.
Or, "you know what your problem is, Mr Writer? you aren't like me".
Shit, maybe, instead of everyone learning everybody else's skills, we could work together.